cisse-vue-ui 0.5.24 → 0.5.26

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 (51) hide show
  1. package/README.md +107 -10
  2. package/dist/{BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js → BadgeType.vue_vue_type_script_setup_true_lang-tHRMWBb-.js} +2 -2
  3. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-tHRMWBb-.js.map +1 -0
  4. package/dist/{BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs → BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs} +2 -2
  5. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs.map +1 -0
  6. package/dist/{Button.vue_vue_type_script_setup_true_lang-Dn8aHGGg.js → Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js} +5 -5
  7. package/dist/Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js.map +1 -0
  8. package/dist/{Button.vue_vue_type_script_setup_true_lang-B3pJ5qJ7.cjs → Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs} +5 -5
  9. package/dist/Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs.map +1 -0
  10. package/dist/{Combobox.vue_vue_type_script_setup_true_lang-BS_MitQQ.cjs → Combobox.vue_vue_type_script_setup_true_lang-B8WioleN.cjs} +26 -26
  11. package/dist/Combobox.vue_vue_type_script_setup_true_lang-B8WioleN.cjs.map +1 -0
  12. package/dist/{Combobox.vue_vue_type_script_setup_true_lang-BtLRG3an.js → Combobox.vue_vue_type_script_setup_true_lang-DKDJV0Ey.js} +26 -26
  13. package/dist/Combobox.vue_vue_type_script_setup_true_lang-DKDJV0Ey.js.map +1 -0
  14. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-5Wl0RVdP.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-B1zS6nTR.js} +12 -12
  15. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-B1zS6nTR.js.map +1 -0
  16. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-Bf0OYXDM.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-CvEWAzaw.cjs} +12 -12
  17. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CvEWAzaw.cjs.map +1 -0
  18. package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-ikdyJymX.js → DarkModeToggle.vue_vue_type_script_setup_true_lang-BBIkEeLJ.js} +21 -21
  19. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BBIkEeLJ.js.map +1 -0
  20. package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-De0C6hnN.cjs → DarkModeToggle.vue_vue_type_script_setup_true_lang-BHabkuFp.cjs} +21 -21
  21. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BHabkuFp.cjs.map +1 -0
  22. package/dist/components/core/index.cjs +3 -3
  23. package/dist/components/core/index.js +3 -3
  24. package/dist/components/feedback/index.cjs +2 -2
  25. package/dist/components/feedback/index.js +2 -2
  26. package/dist/components/form/index.cjs +1 -1
  27. package/dist/components/form/index.js +1 -1
  28. package/dist/components/index.cjs +5 -5
  29. package/dist/components/index.js +5 -5
  30. package/dist/components/type/index.cjs +1 -1
  31. package/dist/components/type/index.js +1 -1
  32. package/dist/{index-CL_Ie5nl.cjs → index-D5M6ePuo.cjs} +6 -6
  33. package/dist/index-D5M6ePuo.cjs.map +1 -0
  34. package/dist/{index-7T5IxJdf.js → index-yQvianuj.js} +6 -6
  35. package/dist/index-yQvianuj.js.map +1 -0
  36. package/dist/index.cjs +6 -6
  37. package/dist/index.js +6 -6
  38. package/dist/style.css +1 -1
  39. package/package.json +1 -1
  40. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs.map +0 -1
  41. package/dist/BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js.map +0 -1
  42. package/dist/Button.vue_vue_type_script_setup_true_lang-B3pJ5qJ7.cjs.map +0 -1
  43. package/dist/Button.vue_vue_type_script_setup_true_lang-Dn8aHGGg.js.map +0 -1
  44. package/dist/Combobox.vue_vue_type_script_setup_true_lang-BS_MitQQ.cjs.map +0 -1
  45. package/dist/Combobox.vue_vue_type_script_setup_true_lang-BtLRG3an.js.map +0 -1
  46. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-5Wl0RVdP.js.map +0 -1
  47. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-Bf0OYXDM.cjs.map +0 -1
  48. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-De0C6hnN.cjs.map +0 -1
  49. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-ikdyJymX.js.map +0 -1
  50. package/dist/index-7T5IxJdf.js.map +0 -1
  51. package/dist/index-CL_Ie5nl.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConfirmDialog.vue_vue_type_script_setup_true_lang-5Wl0RVdP.js","sources":["../src/components/feedback/LoadingSpinner.vue","../src/components/feedback/Modal.vue","../src/components/feedback/PaginationControls.vue","../src/components/feedback/NotificationComponent.vue","../src/components/feedback/NotificationList.vue","../src/components/feedback/Alert.vue","../src/components/feedback/EmptyState.vue","../src/components/feedback/Toast.vue","../src/components/feedback/ToastContainer.vue","../src/components/feedback/Progress.vue","../src/components/feedback/Skeleton.vue","../src/components/feedback/ConfirmDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { SpinnerSize } from '@/types'\n\nconst props = withDefaults(\n defineProps<{\n text?: string\n size?: SpinnerSize\n /** Accessible label for screen readers (defaults to 'Loading' or text prop) */\n ariaLabel?: string\n }>(),\n {\n size: 'md',\n ariaLabel: 'Loading',\n },\n)\n\nconst sizeClasses: Record<SpinnerSize, string> = {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n}\n\nconst accessibleLabel = computed(() => props.text || props.ariaLabel)\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-center py-12\"\n role=\"status\"\n aria-live=\"polite\"\n :aria-label=\"accessibleLabel\"\n >\n <div class=\"text-center\">\n <div\n :class=\"sizeClasses[size]\"\n class=\"border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent\"\n aria-hidden=\"true\"\n />\n <p\n v-if=\"text\"\n class=\"mt-4 text-gray-600 dark:text-gray-400\"\n >\n {{ text }}\n </p>\n <span v-else class=\"sr-only\">{{ accessibleLabel }}</span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport { onMounted, onUnmounted, computed, ref } from 'vue'\r\nimport type { ModalSize } from '@/types'\r\nimport { useId } from '@/composables/useId'\r\nimport { useFocusTrap } from '@/composables/useFocusTrap'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n size?: ModalSize\r\n closeOnBackdrop?: boolean\r\n closeOnEscape?: boolean\r\n closeButtonLabel?: string\r\n /** Teleport target (e.g., 'body', '#app'). Set to false to disable teleport. */\r\n teleport?: string | false\r\n /** Custom ID for the modal (auto-generated if not provided) */\r\n id?: string\r\n }>(),\r\n {\r\n title: '',\r\n size: 'default',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n closeButtonLabel: 'Close',\r\n teleport: 'body',\r\n },\r\n)\r\n\r\nconst {\r\n title,\r\n size,\r\n closeOnBackdrop,\r\n closeOnEscape,\r\n closeButtonLabel,\r\n} = props\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 close: []\r\n}>()\r\n\r\n// Generate unique IDs for ARIA relationships\r\nconst { id: modalId, related } = useId({ prefix: 'modal', id: props.id })\r\nconst titleId = computed(() => related('title'))\r\n\r\n// Focus trap\r\nconst isActive = ref(true)\r\nconst { containerRef: dialogRef } = useFocusTrap({\r\n active: isActive,\r\n focusFirst: true,\r\n restoreFocus: true,\r\n})\r\n\r\n// Check if modal has a title (for aria-labelledby)\r\nconst hasTitle = computed(() => Boolean(props.title))\r\n\r\nconst sizeClasses: Record<ModalSize, string> = {\r\n sm: 'max-w-md',\r\n default: 'max-w-3xl',\r\n lg: 'max-w-5xl',\r\n xl: 'max-w-7xl',\r\n full: 'max-w-full mx-4',\r\n}\r\n\r\nconst handleBackdropClick = () => {\r\n if (closeOnBackdrop) {\r\n emit('close')\r\n }\r\n}\r\n\r\nconst handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n emit('close')\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n document.addEventListener('keydown', handleEscape)\r\n document.body.style.overflow = 'hidden'\r\n})\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('keydown', handleEscape)\r\n document.body.style.overflow = ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport :to=\"teleportTarget\" :disabled=\"teleportDisabled\">\r\n <div\r\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\r\n @click.self=\"handleBackdropClick\"\r\n >\r\n <div\r\n ref=\"dialogRef\"\r\n :id=\"modalId\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\r\n :class=\"sizeClasses[size]\"\r\n class=\"flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900\"\r\n >\r\n <!-- Header -->\r\n <div\r\n v-if=\"title || $slots.header || $slots.title\"\r\n class=\"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700\"\r\n >\r\n <h3\r\n :id=\"titleId\"\r\n class=\"text-xl font-semibold text-gray-900 dark:text-gray-100\"\r\n >\r\n <slot name=\"header\">\r\n <slot name=\"title\">\r\n {{ title }}\r\n </slot>\r\n </slot>\r\n </h3>\r\n <button\r\n class=\"rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\"\r\n type=\"button\"\r\n aria-label=\"Close dialog\"\r\n @click=\"emit('close')\"\r\n >\r\n <Icon\r\n class=\"h-5 w-5\"\r\n icon=\"lucide:x\"\r\n aria-hidden=\"true\"\r\n />\r\n <span class=\"sr-only\">{{ closeButtonLabel }}</span>\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-1 overflow-y-auto px-6 py-4\">\r\n <slot />\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n v-if=\"$slots.footer\"\r\n class=\"flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </div>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nconst {\r\n currentPage,\r\n totalPages,\r\n loading = false,\r\n pageSize = 10,\r\n pageSizeOptions = [10, 20, 50, 100],\r\n showPageSize = true,\r\n pageLabel = 'Page',\r\n ofLabel = 'of',\r\n itemsPerPageLabel = 'Items per page:',\r\n previousLabel = 'Previous',\r\n nextLabel = 'Next',\r\n} = defineProps<{\r\n currentPage: number\r\n totalPages: number\r\n loading?: boolean\r\n pageSize?: number\r\n pageSizeOptions?: number[]\r\n showPageSize?: boolean\r\n pageLabel?: string\r\n ofLabel?: string\r\n itemsPerPageLabel?: string\r\n previousLabel?: string\r\n nextLabel?: string\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n 'update:page': [page: number]\r\n 'update:pageSize': [size: number]\r\n}>()\r\n\r\nconst changePage = (page: number) => {\r\n if (page >= 1 && page <= totalPages && !loading) {\r\n emit('update:page', page)\r\n }\r\n}\r\n\r\nconst changePageSize = (event: Event) => {\r\n const target = event.target as HTMLSelectElement\r\n emit('update:pageSize', Number(target.value))\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"totalPages > 1\"\r\n class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700\"\r\n >\r\n <!-- Info and page size -->\r\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4\">\r\n <div class=\"text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left\">\r\n {{ pageLabel }} {{ currentPage }} {{ ofLabel }} {{ totalPages }}\r\n </div>\r\n <div\n v-if=\"showPageSize\"\n class=\"flex items-center justify-center sm:justify-start gap-2\"\n >\r\n <label\n class=\"text-sm text-gray-600 dark:text-gray-400 hidden sm:inline\"\n for=\"page-size\"\n >\r\n {{ itemsPerPageLabel }}\r\n </label>\r\n <select\r\n id=\"page-size\"\r\n :value=\"pageSize\"\r\n class=\"focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100\"\r\n @change=\"changePageSize\"\r\n >\r\n <option\n v-for=\"size in pageSizeOptions\"\n :key=\"size\"\n :value=\"size\"\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Navigation buttons -->\r\n <div class=\"flex justify-center sm:justify-end gap-2\">\r\n <button\r\n :disabled=\"currentPage === 1 || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage - 1)\"\r\n >\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-left\"\n />\r\n <span class=\"hidden sm:inline\">{{ previousLabel }}</span>\r\n </button>\r\n <button\r\n :disabled=\"currentPage === totalPages || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage + 1)\"\r\n >\r\n <span class=\"hidden sm:inline\">{{ nextLabel }}</span>\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-right\"\n />\r\n </button>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport { computed, onMounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nconst props = defineProps<{\n notification: Notification\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n\nconst iconName = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'lucide:check-circle'\n case 'info':\n return 'lucide:info'\n case 'warning':\n return 'lucide:alert-triangle'\n case 'error':\n return 'lucide:x-circle'\n default:\n return 'lucide:bell'\n }\n})\n\nconst iconColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'text-green-600 dark:text-green-400'\n case 'info':\n return 'text-blue-600 dark:text-blue-400'\n case 'warning':\n return 'text-yellow-600 dark:text-yellow-400'\n case 'error':\n return 'text-red-600 dark:text-red-400'\n default:\n return 'text-gray-600 dark:text-gray-400'\n }\n})\n\nconst bgColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'bg-green-50 dark:bg-green-950'\n case 'info':\n return 'bg-blue-50 dark:bg-blue-950'\n case 'warning':\n return 'bg-yellow-50 dark:bg-yellow-950'\n case 'error':\n return 'bg-red-50 dark:bg-red-950'\n default:\n return 'bg-gray-50 dark:bg-gray-950'\n }\n})\n\nconst handleDismiss = () => {\n if (props.notification.id) {\n emit('dismiss', props.notification.id)\n }\n}\n\nonMounted(() => {\n const duration = props.notification.duration ?? props.duration ?? 5000\n if (props.autoDismiss !== false && duration > 0) {\n setTimeout(() => {\n handleDismiss()\n }, duration)\n }\n})\n</script>\n\n<template>\n <div\n class=\"flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black\"\n >\n <div :class=\"[bgColor, 'flex items-center justify-center rounded-full p-2']\">\n <Icon\n :class=\"iconColor\"\n :icon=\"iconName\"\n class=\"h-5 w-5\"\n />\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <h4\n v-if=\"notification.title\"\n class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\"\n >\n {{ notification.title }}\n </h4>\n <p\n v-if=\"notification.message\"\n class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\"\n >\n {{ notification.message }}\n </p>\n </div>\n\n <button\n class=\"shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400\"\n @click=\"handleDismiss\"\n >\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:x\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport NotificationComponent from './NotificationComponent.vue'\n\ndefineProps<{\n notifications: Notification[]\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n</script>\n\n<template>\n <div class=\"fixed top-5 right-5 z-50 flex flex-col gap-3\">\n <NotificationComponent\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n :notification=\"notification\"\n :auto-dismiss=\"autoDismiss\"\n :duration=\"duration\"\n @dismiss=\"emit('dismiss', $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst props = withDefaults(\n defineProps<{\n /** Alert variant */\n variant?: AlertVariant\n /** Title text */\n title?: string\n /** Show close button */\n dismissible?: boolean\n /** Custom icon */\n icon?: string\n }>(),\n {\n variant: 'info',\n },\n)\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string; iconColor: string }> = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n icon: 'lucide:info',\n iconColor: 'text-blue-500',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n icon: 'lucide:check-circle',\n iconColor: 'text-green-500',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n icon: 'lucide:alert-triangle',\n iconColor: 'text-yellow-500',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n icon: 'lucide:alert-circle',\n iconColor: 'text-red-500',\n },\n}\n\nconst styles = variantStyles[props.variant]\n</script>\n\n<template>\n <div\n :class=\"[\n 'flex gap-3 rounded-lg border p-4',\n styles.bg,\n styles.border,\n ]\"\n role=\"alert\"\n >\n <Icon\n :icon=\"icon || styles.icon\"\n :class=\"['size-5 shrink-0', styles.iconColor]\"\n aria-hidden=\"true\"\n />\n <div class=\"flex-1\">\n <h4\n v-if=\"title\"\n class=\"mb-1 font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h4>\n <div class=\"text-sm text-gray-700 dark:text-gray-300\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\n aria-label=\"Dismiss alert\"\n @click=\"emit('dismiss')\"\n >\n <Icon\n icon=\"lucide:x\"\n class=\"size-4\"\n aria-hidden=\"true\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nwithDefaults(\n defineProps<{\n /** Message to display */\n message?: string\n /** Icon name (iconify format) */\n icon?: string\n /** Title text */\n title?: string\n }>(),\n {\n message: 'No results found',\n icon: 'lucide:inbox',\n },\n)\n</script>\n\n<template>\n <div class=\"py-12 text-center\">\n <Icon\n v-if=\"icon\"\n :icon=\"icon\"\n class=\"mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500\"\n />\n <h3\n v-if=\"title\"\n class=\"mb-2 text-lg font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h3>\n <p class=\"text-gray-500 dark:text-gray-400\">\n <slot>{{ message }}</slot>\n </p>\n <div\n v-if=\"$slots.action\"\n class=\"mt-4\"\n >\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Toast message */\r\n message: string\r\n /** Toast type */\r\n type?: ToastType\r\n /** Title (optional) */\r\n title?: string\r\n /** Show close button */\r\n closable?: boolean\r\n /** Duration in ms (0 = no auto-close) */\r\n duration?: number\r\n }>(),\r\n {\r\n type: 'info',\r\n closable: true,\r\n duration: 5000,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: []\r\n}>()\r\n\r\nconst typeConfig: Record<ToastType, { icon: string; bg: string; iconColor: string }> = {\r\n success: {\r\n icon: 'lucide:check-circle',\r\n bg: 'bg-green-50 border-green-200 dark:bg-green-900/20 dark:border-green-800',\r\n iconColor: 'text-green-500',\r\n },\r\n error: {\r\n icon: 'lucide:x-circle',\r\n bg: 'bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-800',\r\n iconColor: 'text-red-500',\r\n },\r\n warning: {\r\n icon: 'lucide:alert-triangle',\r\n bg: 'bg-yellow-50 border-yellow-200 dark:bg-yellow-900/20 dark:border-yellow-800',\r\n iconColor: 'text-yellow-500',\r\n },\r\n info: {\r\n icon: 'lucide:info',\r\n bg: 'bg-blue-50 border-blue-200 dark:bg-blue-900/20 dark:border-blue-800',\r\n iconColor: 'text-blue-500',\r\n },\r\n}\r\n\r\nconst config = typeConfig[props.type]\r\n\r\n// Auto-close\r\nif (props.duration > 0) {\r\n setTimeout(() => {\r\n emit('close')\r\n }, props.duration)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[\r\n 'flex items-start gap-3 rounded-lg border p-4 shadow-lg',\r\n config.bg,\r\n ]\"\r\n role=\"alert\"\r\n >\r\n <Icon\r\n :icon=\"config.icon\"\r\n :class=\"['size-5 shrink-0', config.iconColor]\"\r\n aria-hidden=\"true\"\r\n />\r\n <div class=\"flex-1 min-w-0\">\r\n <p\r\n v-if=\"title\"\r\n class=\"font-medium text-gray-900 dark:text-white\"\r\n >\r\n {{ title }}\r\n </p>\r\n <p class=\"text-sm text-gray-700 dark:text-gray-300\">\r\n {{ message }}\r\n </p>\r\n </div>\r\n <button\r\n v-if=\"closable\"\r\n type=\"button\"\r\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\r\n aria-label=\"Dismiss notification\"\r\n @click=\"emit('close')\"\r\n >\r\n <Icon\r\n icon=\"lucide:x\"\r\n class=\"size-4\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport Toast from './Toast.vue'\r\nimport type { ToastType } from './Toast.vue'\r\n\r\nexport interface ToastItem {\r\n id: string\r\n message: string\r\n type?: ToastType\r\n title?: string\r\n duration?: number\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Array of toast items */\r\n toasts: ToastItem[]\r\n /** Position of the container */\r\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\r\n /** Custom top offset (e.g., '80px', '5rem') to account for fixed headers */\r\n topOffset?: string\r\n }>(),\r\n {\r\n position: 'top-right',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: [id: string]\r\n}>()\r\n\r\nconst positionClasses: Record<string, string> = {\r\n 'top-right': 'right-4',\r\n 'top-left': 'left-4',\r\n 'bottom-right': 'bottom-4 right-4',\r\n 'bottom-left': 'bottom-4 left-4',\r\n 'top-center': 'left-1/2 -translate-x-1/2',\r\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\r\n}\r\n\r\nconst isTopPosition = computed(() => props.position?.startsWith('top'))\r\n\r\nconst topStyle = computed(() => {\r\n if (!isTopPosition.value) return {}\r\n return { top: props.topOffset || '1rem' }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <div\r\n :class=\"['fixed z-9999 flex flex-col gap-2 w-full max-w-sm', positionClasses[position]]\"\r\n :style=\"topStyle\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"false\"\r\n >\r\n <TransitionGroup\r\n enter-active-class=\"transition duration-300 ease-out\"\r\n enter-from-class=\"opacity-0 translate-x-4\"\r\n enter-to-class=\"opacity-100 translate-x-0\"\r\n leave-active-class=\"transition duration-200 ease-in\"\r\n leave-from-class=\"opacity-100 translate-x-0\"\r\n leave-to-class=\"opacity-0 translate-x-4\"\r\n >\r\n <Toast\r\n v-for=\"toast in toasts\"\r\n :key=\"toast.id\"\r\n :message=\"toast.message\"\r\n :type=\"toast.type\"\r\n :title=\"toast.title\"\r\n :duration=\"toast.duration\"\r\n @close=\"emit('close', toast.id)\"\r\n />\r\n </TransitionGroup>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\n\r\nexport type ProgressSize = 'sm' | 'md' | 'lg'\r\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current value (0-100) */\r\n value: number\r\n /** Maximum value */\r\n max?: number\r\n /** Size variant */\r\n size?: ProgressSize\r\n /** Color variant */\r\n variant?: ProgressVariant\r\n /** Show percentage label */\r\n showLabel?: boolean\r\n /** Striped animation */\r\n striped?: boolean\r\n /** Animated stripes */\r\n animated?: boolean\r\n /** Indeterminate state (loading) */\r\n indeterminate?: boolean\r\n }>(),\r\n {\r\n max: 100,\r\n size: 'md',\r\n variant: 'default',\r\n showLabel: false,\r\n striped: false,\r\n animated: false,\r\n indeterminate: false,\r\n },\r\n)\r\n\r\nconst percentage = computed(() => {\r\n if (props.indeterminate) return 100\r\n return Math.min(Math.max((props.value / props.max) * 100, 0), 100)\r\n})\r\n\r\nconst sizeClasses: Record<ProgressSize, string> = {\r\n sm: 'h-1',\r\n md: 'h-2',\r\n lg: 'h-4',\r\n}\r\n\r\nconst variantClasses: Record<ProgressVariant, string> = {\r\n default: 'bg-primary',\r\n success: 'bg-green-500',\r\n warning: 'bg-yellow-500',\r\n error: 'bg-red-500',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"w-full\">\r\n <div\n v-if=\"showLabel && !indeterminate\"\n class=\"mb-1 flex justify-between text-sm\"\n >\r\n <span class=\"text-gray-600 dark:text-gray-400\">Progress</span>\r\n <span class=\"font-medium text-gray-900 dark:text-white\">{{ Math.round(percentage) }}%</span>\r\n </div>\r\n <div\r\n :class=\"[\r\n 'w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700',\r\n sizeClasses[size],\r\n ]\"\r\n role=\"progressbar\"\r\n :aria-valuenow=\"indeterminate ? undefined : value\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"max\"\r\n >\r\n <div\r\n :class=\"[\r\n 'h-full rounded-full transition-all duration-300',\r\n variantClasses[variant],\r\n striped && 'bg-stripes',\r\n animated && 'animate-stripes',\r\n indeterminate && 'animate-indeterminate',\r\n ]\"\r\n :style=\"{ width: indeterminate ? '30%' : `${percentage}%` }\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.bg-stripes {\r\n background-image: linear-gradient(\r\n 45deg,\r\n rgba(255, 255, 255, 0.15) 25%,\r\n transparent 25%,\r\n transparent 50%,\r\n rgba(255, 255, 255, 0.15) 50%,\r\n rgba(255, 255, 255, 0.15) 75%,\r\n transparent 75%,\r\n transparent\r\n );\r\n background-size: 1rem 1rem;\r\n}\r\n\r\n.animate-stripes {\r\n animation: stripes 1s linear infinite;\r\n}\r\n\r\n@keyframes stripes {\r\n from {\r\n background-position: 1rem 0;\r\n }\r\n to {\r\n background-position: 0 0;\r\n }\r\n}\r\n\r\n.animate-indeterminate {\r\n animation: indeterminate 1.5s ease-in-out infinite;\r\n}\r\n\r\n@keyframes indeterminate {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Variant style */\r\n variant?: SkeletonVariant\r\n /** Width (CSS value) */\r\n width?: string\r\n /** Height (CSS value) */\r\n height?: string\r\n /** Number of lines (for text variant) */\r\n lines?: number\r\n /** Animate the skeleton */\r\n animate?: boolean\r\n }>(),\r\n {\r\n variant: 'text',\r\n animate: true,\r\n lines: 1,\r\n },\r\n)\r\n\r\nconst variantClasses: Record<SkeletonVariant, string> = {\r\n text: 'h-4 rounded',\r\n circular: 'rounded-full',\r\n rectangular: '',\r\n rounded: 'rounded-lg',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"variant === 'text' && lines > 1\"\r\n class=\"space-y-2\"\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n v-for=\"i in lines\"\r\n :key=\"i\"\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: i === lines ? '75%' : width || '100%',\r\n height: height,\r\n }\"\r\n />\r\n </div>\r\n <div\r\n v-else\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: width || (variant === 'circular' ? '3rem' : '100%'),\r\n height: height || (variant === 'circular' ? '3rem' : variant === 'text' ? '1rem' : '6rem'),\r\n }\"\r\n aria-hidden=\"true\"\r\n />\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport Modal from './Modal.vue'\r\nimport Button from '@/components/core/Button.vue'\r\n\r\nexport type ConfirmDialogVariant = 'info' | 'warning' | 'danger' | 'success'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Whether the dialog is open */\r\n open?: boolean\r\n /** Dialog title */\r\n title?: string\r\n /** Dialog message */\r\n message?: string\r\n /** Confirm button text */\r\n confirmText?: string\r\n /** Cancel button text */\r\n cancelText?: string\r\n /** Dialog variant (affects icon and confirm button color) */\r\n variant?: ConfirmDialogVariant\r\n /** Show loading state on confirm button */\r\n loading?: boolean\r\n /** Icon to display */\r\n icon?: 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 open: false,\r\n title: 'Confirm',\r\n message: 'Are you sure you want to proceed?',\r\n confirmText: 'Confirm',\r\n cancelText: 'Cancel',\r\n variant: 'info',\r\n loading: false,\r\n teleport: 'body',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n confirm: []\r\n cancel: []\r\n}>()\r\n\r\nconst variantConfig: Record<ConfirmDialogVariant, { icon: string; iconClass: string; buttonVariant: 'primary' | 'danger' | 'success' }> = {\r\n info: {\r\n icon: 'lucide:info',\r\n iconClass: 'text-blue-500',\r\n buttonVariant: 'primary',\r\n },\r\n warning: {\r\n icon: 'lucide:alert-triangle',\r\n iconClass: 'text-yellow-500',\r\n buttonVariant: 'primary',\r\n },\r\n danger: {\r\n icon: 'lucide:alert-circle',\r\n iconClass: 'text-red-500',\r\n buttonVariant: 'danger',\r\n },\r\n success: {\r\n icon: 'lucide:check-circle',\r\n iconClass: 'text-green-500',\r\n buttonVariant: 'success',\r\n },\r\n}\r\n\r\nconst config = variantConfig[props.variant]\r\n</script>\r\n\r\n<template>\r\n <Modal\r\n v-if=\"open\"\r\n size=\"sm\"\r\n :close-on-backdrop=\"!loading\"\r\n :close-on-escape=\"!loading\"\r\n :teleport=\"teleport\"\r\n @close=\"emit('cancel')\"\r\n >\r\n <div class=\"text-center\">\r\n <!-- Icon -->\r\n <div class=\"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800\">\r\n <Icon\r\n :icon=\"icon || config.icon\"\r\n :class=\"[config.iconClass, 'h-8 w-8']\"\r\n />\r\n </div>\r\n\r\n <!-- Title -->\r\n <h3 class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ title }}\r\n </h3>\r\n\r\n <!-- Message -->\r\n <p class=\"mb-6 text-gray-600 dark:text-gray-400\">\r\n <slot>{{ message }}</slot>\r\n </p>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex justify-center gap-3\">\r\n <Button\r\n variant=\"outline\"\r\n :disabled=\"loading\"\r\n @click=\"emit('cancel')\"\r\n >\r\n {{ cancelText }}\r\n </Button>\r\n <Button\r\n :variant=\"config.buttonVariant\"\r\n :loading=\"loading\"\r\n @click=\"emit('confirm')\"\r\n >\r\n {{ confirmText }}\r\n </Button>\r\n </div>\r\n </div>\r\n </Modal>\r\n</template>\r\n"],"names":["_createElementBlock","_createElementVNode","_hoisted_2","_normalizeClass","_hoisted_3","_toDisplayString","_hoisted_4","_createBlock","_Teleport","_unref","$slots","_openBlock","_renderSlot","_createVNode","_hoisted_5","_hoisted_6","_hoisted_1","_Fragment","_renderList","NotificationComponent","_TransitionGroup","Toast","_normalizeStyle","Modal","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConfirmDialog.vue_vue_type_script_setup_true_lang-Bf0OYXDM.cjs","sources":["../src/components/feedback/LoadingSpinner.vue","../src/components/feedback/Modal.vue","../src/components/feedback/PaginationControls.vue","../src/components/feedback/NotificationComponent.vue","../src/components/feedback/NotificationList.vue","../src/components/feedback/Alert.vue","../src/components/feedback/EmptyState.vue","../src/components/feedback/Toast.vue","../src/components/feedback/ToastContainer.vue","../src/components/feedback/Progress.vue","../src/components/feedback/Skeleton.vue","../src/components/feedback/ConfirmDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { SpinnerSize } from '@/types'\n\nconst props = withDefaults(\n defineProps<{\n text?: string\n size?: SpinnerSize\n /** Accessible label for screen readers (defaults to 'Loading' or text prop) */\n ariaLabel?: string\n }>(),\n {\n size: 'md',\n ariaLabel: 'Loading',\n },\n)\n\nconst sizeClasses: Record<SpinnerSize, string> = {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n}\n\nconst accessibleLabel = computed(() => props.text || props.ariaLabel)\n</script>\n\n<template>\n <div\n class=\"flex items-center justify-center py-12\"\n role=\"status\"\n aria-live=\"polite\"\n :aria-label=\"accessibleLabel\"\n >\n <div class=\"text-center\">\n <div\n :class=\"sizeClasses[size]\"\n class=\"border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent\"\n aria-hidden=\"true\"\n />\n <p\n v-if=\"text\"\n class=\"mt-4 text-gray-600 dark:text-gray-400\"\n >\n {{ text }}\n </p>\n <span v-else class=\"sr-only\">{{ accessibleLabel }}</span>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport { onMounted, onUnmounted, computed, ref } from 'vue'\r\nimport type { ModalSize } from '@/types'\r\nimport { useId } from '@/composables/useId'\r\nimport { useFocusTrap } from '@/composables/useFocusTrap'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n size?: ModalSize\r\n closeOnBackdrop?: boolean\r\n closeOnEscape?: boolean\r\n closeButtonLabel?: string\r\n /** Teleport target (e.g., 'body', '#app'). Set to false to disable teleport. */\r\n teleport?: string | false\r\n /** Custom ID for the modal (auto-generated if not provided) */\r\n id?: string\r\n }>(),\r\n {\r\n title: '',\r\n size: 'default',\r\n closeOnBackdrop: true,\r\n closeOnEscape: true,\r\n closeButtonLabel: 'Close',\r\n teleport: 'body',\r\n },\r\n)\r\n\r\nconst {\r\n title,\r\n size,\r\n closeOnBackdrop,\r\n closeOnEscape,\r\n closeButtonLabel,\r\n} = props\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 close: []\r\n}>()\r\n\r\n// Generate unique IDs for ARIA relationships\r\nconst { id: modalId, related } = useId({ prefix: 'modal', id: props.id })\r\nconst titleId = computed(() => related('title'))\r\n\r\n// Focus trap\r\nconst isActive = ref(true)\r\nconst { containerRef: dialogRef } = useFocusTrap({\r\n active: isActive,\r\n focusFirst: true,\r\n restoreFocus: true,\r\n})\r\n\r\n// Check if modal has a title (for aria-labelledby)\r\nconst hasTitle = computed(() => Boolean(props.title))\r\n\r\nconst sizeClasses: Record<ModalSize, string> = {\r\n sm: 'max-w-md',\r\n default: 'max-w-3xl',\r\n lg: 'max-w-5xl',\r\n xl: 'max-w-7xl',\r\n full: 'max-w-full mx-4',\r\n}\r\n\r\nconst handleBackdropClick = () => {\r\n if (closeOnBackdrop) {\r\n emit('close')\r\n }\r\n}\r\n\r\nconst handleEscape = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && closeOnEscape) {\r\n emit('close')\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n document.addEventListener('keydown', handleEscape)\r\n document.body.style.overflow = 'hidden'\r\n})\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('keydown', handleEscape)\r\n document.body.style.overflow = ''\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport :to=\"teleportTarget\" :disabled=\"teleportDisabled\">\r\n <div\r\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\r\n @click.self=\"handleBackdropClick\"\r\n >\r\n <div\r\n ref=\"dialogRef\"\r\n :id=\"modalId\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n :aria-labelledby=\"hasTitle ? titleId : undefined\"\r\n :class=\"sizeClasses[size]\"\r\n class=\"flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900\"\r\n >\r\n <!-- Header -->\r\n <div\r\n v-if=\"title || $slots.header || $slots.title\"\r\n class=\"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700\"\r\n >\r\n <h3\r\n :id=\"titleId\"\r\n class=\"text-xl font-semibold text-gray-900 dark:text-gray-100\"\r\n >\r\n <slot name=\"header\">\r\n <slot name=\"title\">\r\n {{ title }}\r\n </slot>\r\n </slot>\r\n </h3>\r\n <button\r\n class=\"rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\"\r\n type=\"button\"\r\n aria-label=\"Close dialog\"\r\n @click=\"emit('close')\"\r\n >\r\n <Icon\r\n class=\"h-5 w-5\"\r\n icon=\"lucide:x\"\r\n aria-hidden=\"true\"\r\n />\r\n <span class=\"sr-only\">{{ closeButtonLabel }}</span>\r\n </button>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-1 overflow-y-auto px-6 py-4\">\r\n <slot />\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n v-if=\"$slots.footer\"\r\n class=\"flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </div>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nconst {\r\n currentPage,\r\n totalPages,\r\n loading = false,\r\n pageSize = 10,\r\n pageSizeOptions = [10, 20, 50, 100],\r\n showPageSize = true,\r\n pageLabel = 'Page',\r\n ofLabel = 'of',\r\n itemsPerPageLabel = 'Items per page:',\r\n previousLabel = 'Previous',\r\n nextLabel = 'Next',\r\n} = defineProps<{\r\n currentPage: number\r\n totalPages: number\r\n loading?: boolean\r\n pageSize?: number\r\n pageSizeOptions?: number[]\r\n showPageSize?: boolean\r\n pageLabel?: string\r\n ofLabel?: string\r\n itemsPerPageLabel?: string\r\n previousLabel?: string\r\n nextLabel?: string\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n 'update:page': [page: number]\r\n 'update:pageSize': [size: number]\r\n}>()\r\n\r\nconst changePage = (page: number) => {\r\n if (page >= 1 && page <= totalPages && !loading) {\r\n emit('update:page', page)\r\n }\r\n}\r\n\r\nconst changePageSize = (event: Event) => {\r\n const target = event.target as HTMLSelectElement\r\n emit('update:pageSize', Number(target.value))\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"totalPages > 1\"\r\n class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700\"\r\n >\r\n <!-- Info and page size -->\r\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4\">\r\n <div class=\"text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left\">\r\n {{ pageLabel }} {{ currentPage }} {{ ofLabel }} {{ totalPages }}\r\n </div>\r\n <div\n v-if=\"showPageSize\"\n class=\"flex items-center justify-center sm:justify-start gap-2\"\n >\r\n <label\n class=\"text-sm text-gray-600 dark:text-gray-400 hidden sm:inline\"\n for=\"page-size\"\n >\r\n {{ itemsPerPageLabel }}\r\n </label>\r\n <select\r\n id=\"page-size\"\r\n :value=\"pageSize\"\r\n class=\"focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100\"\r\n @change=\"changePageSize\"\r\n >\r\n <option\n v-for=\"size in pageSizeOptions\"\n :key=\"size\"\n :value=\"size\"\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Navigation buttons -->\r\n <div class=\"flex justify-center sm:justify-end gap-2\">\r\n <button\r\n :disabled=\"currentPage === 1 || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage - 1)\"\r\n >\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-left\"\n />\r\n <span class=\"hidden sm:inline\">{{ previousLabel }}</span>\r\n </button>\r\n <button\r\n :disabled=\"currentPage === totalPages || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage + 1)\"\r\n >\r\n <span class=\"hidden sm:inline\">{{ nextLabel }}</span>\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-right\"\n />\r\n </button>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport { computed, onMounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nconst props = defineProps<{\n notification: Notification\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n\nconst iconName = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'lucide:check-circle'\n case 'info':\n return 'lucide:info'\n case 'warning':\n return 'lucide:alert-triangle'\n case 'error':\n return 'lucide:x-circle'\n default:\n return 'lucide:bell'\n }\n})\n\nconst iconColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'text-green-600 dark:text-green-400'\n case 'info':\n return 'text-blue-600 dark:text-blue-400'\n case 'warning':\n return 'text-yellow-600 dark:text-yellow-400'\n case 'error':\n return 'text-red-600 dark:text-red-400'\n default:\n return 'text-gray-600 dark:text-gray-400'\n }\n})\n\nconst bgColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'bg-green-50 dark:bg-green-950'\n case 'info':\n return 'bg-blue-50 dark:bg-blue-950'\n case 'warning':\n return 'bg-yellow-50 dark:bg-yellow-950'\n case 'error':\n return 'bg-red-50 dark:bg-red-950'\n default:\n return 'bg-gray-50 dark:bg-gray-950'\n }\n})\n\nconst handleDismiss = () => {\n if (props.notification.id) {\n emit('dismiss', props.notification.id)\n }\n}\n\nonMounted(() => {\n const duration = props.notification.duration ?? props.duration ?? 5000\n if (props.autoDismiss !== false && duration > 0) {\n setTimeout(() => {\n handleDismiss()\n }, duration)\n }\n})\n</script>\n\n<template>\n <div\n class=\"flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black\"\n >\n <div :class=\"[bgColor, 'flex items-center justify-center rounded-full p-2']\">\n <Icon\n :class=\"iconColor\"\n :icon=\"iconName\"\n class=\"h-5 w-5\"\n />\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <h4\n v-if=\"notification.title\"\n class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\"\n >\n {{ notification.title }}\n </h4>\n <p\n v-if=\"notification.message\"\n class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\"\n >\n {{ notification.message }}\n </p>\n </div>\n\n <button\n class=\"shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400\"\n @click=\"handleDismiss\"\n >\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:x\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport NotificationComponent from './NotificationComponent.vue'\n\ndefineProps<{\n notifications: Notification[]\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n</script>\n\n<template>\n <div class=\"fixed top-5 right-5 z-50 flex flex-col gap-3\">\n <NotificationComponent\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n :notification=\"notification\"\n :auto-dismiss=\"autoDismiss\"\n :duration=\"duration\"\n @dismiss=\"emit('dismiss', $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst props = withDefaults(\n defineProps<{\n /** Alert variant */\n variant?: AlertVariant\n /** Title text */\n title?: string\n /** Show close button */\n dismissible?: boolean\n /** Custom icon */\n icon?: string\n }>(),\n {\n variant: 'info',\n },\n)\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string; iconColor: string }> = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n icon: 'lucide:info',\n iconColor: 'text-blue-500',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n icon: 'lucide:check-circle',\n iconColor: 'text-green-500',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n icon: 'lucide:alert-triangle',\n iconColor: 'text-yellow-500',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n icon: 'lucide:alert-circle',\n iconColor: 'text-red-500',\n },\n}\n\nconst styles = variantStyles[props.variant]\n</script>\n\n<template>\n <div\n :class=\"[\n 'flex gap-3 rounded-lg border p-4',\n styles.bg,\n styles.border,\n ]\"\n role=\"alert\"\n >\n <Icon\n :icon=\"icon || styles.icon\"\n :class=\"['size-5 shrink-0', styles.iconColor]\"\n aria-hidden=\"true\"\n />\n <div class=\"flex-1\">\n <h4\n v-if=\"title\"\n class=\"mb-1 font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h4>\n <div class=\"text-sm text-gray-700 dark:text-gray-300\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\n aria-label=\"Dismiss alert\"\n @click=\"emit('dismiss')\"\n >\n <Icon\n icon=\"lucide:x\"\n class=\"size-4\"\n aria-hidden=\"true\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nwithDefaults(\n defineProps<{\n /** Message to display */\n message?: string\n /** Icon name (iconify format) */\n icon?: string\n /** Title text */\n title?: string\n }>(),\n {\n message: 'No results found',\n icon: 'lucide:inbox',\n },\n)\n</script>\n\n<template>\n <div class=\"py-12 text-center\">\n <Icon\n v-if=\"icon\"\n :icon=\"icon\"\n class=\"mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500\"\n />\n <h3\n v-if=\"title\"\n class=\"mb-2 text-lg font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h3>\n <p class=\"text-gray-500 dark:text-gray-400\">\n <slot>{{ message }}</slot>\n </p>\n <div\n v-if=\"$slots.action\"\n class=\"mt-4\"\n >\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Toast message */\r\n message: string\r\n /** Toast type */\r\n type?: ToastType\r\n /** Title (optional) */\r\n title?: string\r\n /** Show close button */\r\n closable?: boolean\r\n /** Duration in ms (0 = no auto-close) */\r\n duration?: number\r\n }>(),\r\n {\r\n type: 'info',\r\n closable: true,\r\n duration: 5000,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: []\r\n}>()\r\n\r\nconst typeConfig: Record<ToastType, { icon: string; bg: string; iconColor: string }> = {\r\n success: {\r\n icon: 'lucide:check-circle',\r\n bg: 'bg-green-50 border-green-200 dark:bg-green-900/20 dark:border-green-800',\r\n iconColor: 'text-green-500',\r\n },\r\n error: {\r\n icon: 'lucide:x-circle',\r\n bg: 'bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-800',\r\n iconColor: 'text-red-500',\r\n },\r\n warning: {\r\n icon: 'lucide:alert-triangle',\r\n bg: 'bg-yellow-50 border-yellow-200 dark:bg-yellow-900/20 dark:border-yellow-800',\r\n iconColor: 'text-yellow-500',\r\n },\r\n info: {\r\n icon: 'lucide:info',\r\n bg: 'bg-blue-50 border-blue-200 dark:bg-blue-900/20 dark:border-blue-800',\r\n iconColor: 'text-blue-500',\r\n },\r\n}\r\n\r\nconst config = typeConfig[props.type]\r\n\r\n// Auto-close\r\nif (props.duration > 0) {\r\n setTimeout(() => {\r\n emit('close')\r\n }, props.duration)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[\r\n 'flex items-start gap-3 rounded-lg border p-4 shadow-lg',\r\n config.bg,\r\n ]\"\r\n role=\"alert\"\r\n >\r\n <Icon\r\n :icon=\"config.icon\"\r\n :class=\"['size-5 shrink-0', config.iconColor]\"\r\n aria-hidden=\"true\"\r\n />\r\n <div class=\"flex-1 min-w-0\">\r\n <p\r\n v-if=\"title\"\r\n class=\"font-medium text-gray-900 dark:text-white\"\r\n >\r\n {{ title }}\r\n </p>\r\n <p class=\"text-sm text-gray-700 dark:text-gray-300\">\r\n {{ message }}\r\n </p>\r\n </div>\r\n <button\r\n v-if=\"closable\"\r\n type=\"button\"\r\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\r\n aria-label=\"Dismiss notification\"\r\n @click=\"emit('close')\"\r\n >\r\n <Icon\r\n icon=\"lucide:x\"\r\n class=\"size-4\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport Toast from './Toast.vue'\r\nimport type { ToastType } from './Toast.vue'\r\n\r\nexport interface ToastItem {\r\n id: string\r\n message: string\r\n type?: ToastType\r\n title?: string\r\n duration?: number\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Array of toast items */\r\n toasts: ToastItem[]\r\n /** Position of the container */\r\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\r\n /** Custom top offset (e.g., '80px', '5rem') to account for fixed headers */\r\n topOffset?: string\r\n }>(),\r\n {\r\n position: 'top-right',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: [id: string]\r\n}>()\r\n\r\nconst positionClasses: Record<string, string> = {\r\n 'top-right': 'right-4',\r\n 'top-left': 'left-4',\r\n 'bottom-right': 'bottom-4 right-4',\r\n 'bottom-left': 'bottom-4 left-4',\r\n 'top-center': 'left-1/2 -translate-x-1/2',\r\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\r\n}\r\n\r\nconst isTopPosition = computed(() => props.position?.startsWith('top'))\r\n\r\nconst topStyle = computed(() => {\r\n if (!isTopPosition.value) return {}\r\n return { top: props.topOffset || '1rem' }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <div\r\n :class=\"['fixed z-9999 flex flex-col gap-2 w-full max-w-sm', positionClasses[position]]\"\r\n :style=\"topStyle\"\r\n aria-live=\"polite\"\r\n aria-atomic=\"false\"\r\n >\r\n <TransitionGroup\r\n enter-active-class=\"transition duration-300 ease-out\"\r\n enter-from-class=\"opacity-0 translate-x-4\"\r\n enter-to-class=\"opacity-100 translate-x-0\"\r\n leave-active-class=\"transition duration-200 ease-in\"\r\n leave-from-class=\"opacity-100 translate-x-0\"\r\n leave-to-class=\"opacity-0 translate-x-4\"\r\n >\r\n <Toast\r\n v-for=\"toast in toasts\"\r\n :key=\"toast.id\"\r\n :message=\"toast.message\"\r\n :type=\"toast.type\"\r\n :title=\"toast.title\"\r\n :duration=\"toast.duration\"\r\n @close=\"emit('close', toast.id)\"\r\n />\r\n </TransitionGroup>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\n\r\nexport type ProgressSize = 'sm' | 'md' | 'lg'\r\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current value (0-100) */\r\n value: number\r\n /** Maximum value */\r\n max?: number\r\n /** Size variant */\r\n size?: ProgressSize\r\n /** Color variant */\r\n variant?: ProgressVariant\r\n /** Show percentage label */\r\n showLabel?: boolean\r\n /** Striped animation */\r\n striped?: boolean\r\n /** Animated stripes */\r\n animated?: boolean\r\n /** Indeterminate state (loading) */\r\n indeterminate?: boolean\r\n }>(),\r\n {\r\n max: 100,\r\n size: 'md',\r\n variant: 'default',\r\n showLabel: false,\r\n striped: false,\r\n animated: false,\r\n indeterminate: false,\r\n },\r\n)\r\n\r\nconst percentage = computed(() => {\r\n if (props.indeterminate) return 100\r\n return Math.min(Math.max((props.value / props.max) * 100, 0), 100)\r\n})\r\n\r\nconst sizeClasses: Record<ProgressSize, string> = {\r\n sm: 'h-1',\r\n md: 'h-2',\r\n lg: 'h-4',\r\n}\r\n\r\nconst variantClasses: Record<ProgressVariant, string> = {\r\n default: 'bg-primary',\r\n success: 'bg-green-500',\r\n warning: 'bg-yellow-500',\r\n error: 'bg-red-500',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"w-full\">\r\n <div\n v-if=\"showLabel && !indeterminate\"\n class=\"mb-1 flex justify-between text-sm\"\n >\r\n <span class=\"text-gray-600 dark:text-gray-400\">Progress</span>\r\n <span class=\"font-medium text-gray-900 dark:text-white\">{{ Math.round(percentage) }}%</span>\r\n </div>\r\n <div\r\n :class=\"[\r\n 'w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700',\r\n sizeClasses[size],\r\n ]\"\r\n role=\"progressbar\"\r\n :aria-valuenow=\"indeterminate ? undefined : value\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"max\"\r\n >\r\n <div\r\n :class=\"[\r\n 'h-full rounded-full transition-all duration-300',\r\n variantClasses[variant],\r\n striped && 'bg-stripes',\r\n animated && 'animate-stripes',\r\n indeterminate && 'animate-indeterminate',\r\n ]\"\r\n :style=\"{ width: indeterminate ? '30%' : `${percentage}%` }\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.bg-stripes {\r\n background-image: linear-gradient(\r\n 45deg,\r\n rgba(255, 255, 255, 0.15) 25%,\r\n transparent 25%,\r\n transparent 50%,\r\n rgba(255, 255, 255, 0.15) 50%,\r\n rgba(255, 255, 255, 0.15) 75%,\r\n transparent 75%,\r\n transparent\r\n );\r\n background-size: 1rem 1rem;\r\n}\r\n\r\n.animate-stripes {\r\n animation: stripes 1s linear infinite;\r\n}\r\n\r\n@keyframes stripes {\r\n from {\r\n background-position: 1rem 0;\r\n }\r\n to {\r\n background-position: 0 0;\r\n }\r\n}\r\n\r\n.animate-indeterminate {\r\n animation: indeterminate 1.5s ease-in-out infinite;\r\n}\r\n\r\n@keyframes indeterminate {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Variant style */\r\n variant?: SkeletonVariant\r\n /** Width (CSS value) */\r\n width?: string\r\n /** Height (CSS value) */\r\n height?: string\r\n /** Number of lines (for text variant) */\r\n lines?: number\r\n /** Animate the skeleton */\r\n animate?: boolean\r\n }>(),\r\n {\r\n variant: 'text',\r\n animate: true,\r\n lines: 1,\r\n },\r\n)\r\n\r\nconst variantClasses: Record<SkeletonVariant, string> = {\r\n text: 'h-4 rounded',\r\n circular: 'rounded-full',\r\n rectangular: '',\r\n rounded: 'rounded-lg',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"variant === 'text' && lines > 1\"\r\n class=\"space-y-2\"\r\n aria-hidden=\"true\"\r\n >\r\n <div\r\n v-for=\"i in lines\"\r\n :key=\"i\"\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: i === lines ? '75%' : width || '100%',\r\n height: height,\r\n }\"\r\n />\r\n </div>\r\n <div\r\n v-else\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: width || (variant === 'circular' ? '3rem' : '100%'),\r\n height: height || (variant === 'circular' ? '3rem' : variant === 'text' ? '1rem' : '6rem'),\r\n }\"\r\n aria-hidden=\"true\"\r\n />\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport Modal from './Modal.vue'\r\nimport Button from '@/components/core/Button.vue'\r\n\r\nexport type ConfirmDialogVariant = 'info' | 'warning' | 'danger' | 'success'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Whether the dialog is open */\r\n open?: boolean\r\n /** Dialog title */\r\n title?: string\r\n /** Dialog message */\r\n message?: string\r\n /** Confirm button text */\r\n confirmText?: string\r\n /** Cancel button text */\r\n cancelText?: string\r\n /** Dialog variant (affects icon and confirm button color) */\r\n variant?: ConfirmDialogVariant\r\n /** Show loading state on confirm button */\r\n loading?: boolean\r\n /** Icon to display */\r\n icon?: 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 open: false,\r\n title: 'Confirm',\r\n message: 'Are you sure you want to proceed?',\r\n confirmText: 'Confirm',\r\n cancelText: 'Cancel',\r\n variant: 'info',\r\n loading: false,\r\n teleport: 'body',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n confirm: []\r\n cancel: []\r\n}>()\r\n\r\nconst variantConfig: Record<ConfirmDialogVariant, { icon: string; iconClass: string; buttonVariant: 'primary' | 'danger' | 'success' }> = {\r\n info: {\r\n icon: 'lucide:info',\r\n iconClass: 'text-blue-500',\r\n buttonVariant: 'primary',\r\n },\r\n warning: {\r\n icon: 'lucide:alert-triangle',\r\n iconClass: 'text-yellow-500',\r\n buttonVariant: 'primary',\r\n },\r\n danger: {\r\n icon: 'lucide:alert-circle',\r\n iconClass: 'text-red-500',\r\n buttonVariant: 'danger',\r\n },\r\n success: {\r\n icon: 'lucide:check-circle',\r\n iconClass: 'text-green-500',\r\n buttonVariant: 'success',\r\n },\r\n}\r\n\r\nconst config = variantConfig[props.variant]\r\n</script>\r\n\r\n<template>\r\n <Modal\r\n v-if=\"open\"\r\n size=\"sm\"\r\n :close-on-backdrop=\"!loading\"\r\n :close-on-escape=\"!loading\"\r\n :teleport=\"teleport\"\r\n @close=\"emit('cancel')\"\r\n >\r\n <div class=\"text-center\">\r\n <!-- Icon -->\r\n <div class=\"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-gray-100 dark:bg-gray-800\">\r\n <Icon\r\n :icon=\"icon || config.icon\"\r\n :class=\"[config.iconClass, 'h-8 w-8']\"\r\n />\r\n </div>\r\n\r\n <!-- Title -->\r\n <h3 class=\"mb-2 text-lg font-semibold text-gray-900 dark:text-gray-100\">\r\n {{ title }}\r\n </h3>\r\n\r\n <!-- Message -->\r\n <p class=\"mb-6 text-gray-600 dark:text-gray-400\">\r\n <slot>{{ message }}</slot>\r\n </p>\r\n\r\n <!-- Actions -->\r\n <div class=\"flex justify-center gap-3\">\r\n <Button\r\n variant=\"outline\"\r\n :disabled=\"loading\"\r\n @click=\"emit('cancel')\"\r\n >\r\n {{ cancelText }}\r\n </Button>\r\n <Button\r\n :variant=\"config.buttonVariant\"\r\n :loading=\"loading\"\r\n @click=\"emit('confirm')\"\r\n >\r\n {{ confirmText }}\r\n </Button>\r\n </div>\r\n </div>\r\n </Modal>\r\n</template>\r\n"],"names":["computed","_createElementBlock","_createElementVNode","_hoisted_2","_normalizeClass","_hoisted_3","_toDisplayString","_hoisted_4","useId","ref","useFocusTrap","onMounted","onUnmounted","_createBlock","_Teleport","_unref","$slots","_openBlock","_renderSlot","_createVNode","Icon","_hoisted_5","_hoisted_6","_hoisted_1","_Fragment","_renderList","NotificationComponent","_TransitionGroup","Toast","_normalizeStyle","Modal","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DarkModeToggle.vue_vue_type_script_setup_true_lang-De0C6hnN.cjs","sources":["../src/components/core/CardComponent.vue","../src/components/core/TableComponent.vue","../src/components/core/MobileList.vue","../src/components/core/ResponsiveList.vue","../src/components/core/AutocompleteComponent.vue","../src/components/core/TableAction.vue","../src/components/core/Avatar.vue","../src/components/core/Tabs.vue","../src/components/core/TabPanel.vue","../src/components/core/Stepper.vue","../src/components/core/CollapsibleCard.vue","../src/components/core/Tooltip.vue","../src/components/core/Popover.vue","../src/components/core/Drawer.vue","../src/components/core/Breadcrumb.vue","../src/components/core/Accordion.vue","../src/components/core/AccordionItem.vue","../src/components/core/Timeline.vue","../src/components/core/DarkModeToggle.vue"],"sourcesContent":["<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport CardSkeleton from '@/components/feedback/CardSkeleton.vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n title?: string\r\n description?: string\r\n titleClass?: string\r\n dividerClass?: string\r\n /** Show loading skeleton */\r\n loading?: boolean\r\n /** Number of skeleton lines */\r\n loadingLines?: number\r\n /** Show avatar in skeleton */\r\n loadingAvatar?: boolean\r\n /** Show actions in skeleton */\r\n loadingActions?: boolean\r\n }>(),\r\n {\r\n loading: false,\r\n loadingLines: 3,\r\n loadingAvatar: false,\r\n loadingActions: false,\r\n },\r\n)\r\n\r\nconst titleClasses = computed(() =>\r\n props.titleClass || 'text-gray-800 dark:text-gray-200'\r\n)\r\n\r\nconst dividerClasses = computed(() =>\r\n props.dividerClass || 'border-gray-200 dark:border-gray-700'\r\n)\r\n</script>\r\n\r\n<template>\r\n <!-- Loading State -->\r\n <CardSkeleton\r\n v-if=\"loading\"\r\n :lines=\"loadingLines\"\r\n :show-avatar=\"loadingAvatar\"\r\n :show-actions=\"loadingActions\"\r\n />\r\n\r\n <!-- Content -->\r\n <div v-else class=\"flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950\">\r\n <!-- Custom header slot (replaces standard header) -->\r\n <div\r\n v-if=\"$slots.header\"\r\n class=\"border-b\"\r\n :class=\"dividerClasses\"\r\n >\r\n <slot name=\"header\" />\r\n </div>\r\n\r\n <!-- Standard header with title/description/actions -->\r\n <div\r\n v-else-if=\"title || description || $slots.title || $slots.description || $slots.actions\"\r\n class=\"flex items-center justify-between border-b px-5 py-3\"\r\n :class=\"dividerClasses\"\r\n >\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n v-if=\"title || $slots.title\"\r\n class=\"text-md font-semibold\"\r\n :class=\"titleClasses\"\r\n >\r\n <slot name=\"title\">\r\n {{ title }}\r\n </slot>\r\n </span>\r\n\r\n <span\r\n v-if=\"description || $slots.description\"\r\n class=\"text-sm font-normal text-gray-600 dark:text-gray-400\"\r\n >\r\n <slot name=\"description\">\r\n {{ description }}\r\n </slot>\r\n </span>\r\n </div>\r\n\r\n <div class=\"flex gap-2\">\r\n <slot name=\"actions\" />\r\n </div>\r\n </div>\r\n\r\n <slot />\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport TextType from '@/components/type/TextType.vue'\r\nimport NumberType from '@/components/type/NumberType.vue'\r\nimport DateType from '@/components/type/DateType.vue'\r\nimport BooleanType from '@/components/type/BooleanType.vue'\r\nimport BadgeType from '@/components/type/BadgeType.vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\r\nimport TableSkeleton from '@/components/feedback/TableSkeleton.vue'\r\nimport { computed, type Component, useSlots, type Slots } from 'vue'\r\n\r\nexport type SortDirection = 'asc' | 'desc'\r\n\r\ntype ItemType = { id: number | string; [key: string]: unknown }\r\n\r\nconst slots: Slots = useSlots()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Column definitions */\r\n properties: Property[]\r\n /** Array of items to display */\r\n items: ItemType[]\r\n /** Enable selection mode */\r\n selectable?: boolean\r\n /** Set of selected item keys */\r\n selectedItems?: Set<string>\r\n /** Filter function to determine if an item is selectable */\r\n selectableFilter?: (item: ItemType) => boolean\r\n /** Key field for unique identification (default: 'id') */\r\n keyField?: string\r\n /** Current sort column */\r\n sortBy?: string\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Show loading skeleton */\r\n loading?: boolean\r\n /** Number of skeleton rows to show when loading */\r\n loadingRows?: number\r\n }>(),\r\n {\r\n selectable: false,\r\n keyField: 'id',\r\n loading: false,\r\n loadingRows: 5,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when an item is selected/deselected */\r\n select: [id: string]\r\n /** Emitted when select all is toggled */\r\n selectAll: []\r\n /** Emitted when a sortable column is clicked */\r\n sort: [column: string, direction: SortDirection]\r\n}>()\r\n\r\n// Type components mapping\r\nconst typeComponents: Record<string, Component> = {\r\n text: TextType,\r\n number: NumberType,\r\n date: DateType,\r\n boolean: BooleanType,\r\n badge: BadgeType,\r\n}\r\n\r\nconst getTypeComponent = (type: string = 'text'): Component => {\r\n return typeComponents[type] || TextType\r\n}\r\n\r\n// Filter out hidden properties\r\nconst visibleProperties = computed(() => props.properties.filter((p) => !p.hidden))\r\n\r\n// Get item key\r\nconst getKey = (item: ItemType): string => {\r\n const keyValue = item[props.keyField]\r\n return String(keyValue ?? Math.random())\r\n}\r\n\r\n// Get nested property value\r\nconst getItemValue = (item: Record<string, unknown>, property: Property): unknown => {\r\n if (property.name.includes('.')) {\r\n let value: unknown = item\r\n for (const key of property.name.split('.')) {\r\n if (value && typeof value === 'object' && key in value) {\r\n value = (value as Record<string, unknown>)[key]\r\n } else {\r\n return undefined\r\n }\r\n }\r\n return value\r\n }\r\n return item[property.name]\r\n}\r\n\r\nconst getAlignmentClass = (align?: 'left' | 'center' | 'right') => {\r\n switch (align) {\r\n case 'center':\r\n return 'text-center'\r\n case 'right':\r\n return 'text-right'\r\n default:\r\n return 'text-left'\r\n }\r\n}\r\n\r\nconst getMainClass = (main?: boolean) => {\r\n if (main) {\r\n return 'text-sm font-semibold text-gray-900 dark:text-gray-100'\r\n }\r\n return 'text-xs font-medium text-gray-600 dark:text-gray-400'\r\n}\r\n\r\n// Selection logic\r\nconst selectableItems = computed(() => {\r\n if (!props.selectableFilter) return props.items\r\n return props.items.filter(props.selectableFilter)\r\n})\r\n\r\nconst allSelected = computed(() => {\r\n if (selectableItems.value.length === 0) return false\r\n return selectableItems.value.every((item) => props.selectedItems?.has(getKey(item)))\r\n})\r\n\r\nconst someSelected = computed(() => {\r\n return (props.selectedItems?.size || 0) > 0 && !allSelected.value\r\n})\r\n\r\nconst isSelected = (item: ItemType): boolean => {\r\n return props.selectedItems?.has(getKey(item)) || false\r\n}\r\n\r\nconst isSelectable = (item: ItemType): boolean => {\r\n if (!props.selectable) return false\r\n if (!props.selectableFilter) return true\r\n return props.selectableFilter(item)\r\n}\r\n\r\nconst handleSelect = (item: ItemType) => {\r\n emit('select', getKey(item))\r\n}\r\n\r\nconst hasActionSlot = computed((): boolean => !!slots.action)\r\n\r\n// Sorting logic\r\nconst handleSort = (property: Property) => {\r\n if (!property.sortable) return\r\n\r\n const newDirection: SortDirection =\r\n props.sortBy === property.name && props.sortDirection === 'asc' ? 'desc' : 'asc'\r\n\r\n emit('sort', property.name, newDirection)\r\n}\r\n\r\nconst isSortedColumn = (property: Property): boolean => {\r\n return props.sortBy === property.name\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"overflow-hidden\">\r\n <!-- Loading State -->\r\n <TableSkeleton\r\n v-if=\"loading\"\r\n :rows=\"loadingRows\"\r\n :columns=\"visibleProperties.length\"\r\n />\r\n\r\n <!-- Content -->\r\n <div v-else class=\"overflow-x-auto\">\r\n <table class=\"w-full divide-y divide-black/10 text-left dark:divide-white/10\">\r\n <thead\r\n class=\"bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400\"\r\n >\r\n <tr>\r\n <!-- Selection header -->\r\n <th\r\n v-if=\"selectable\"\r\n class=\"w-12 px-3 py-3\"\r\n >\r\n <Checkbox\r\n :model-value=\"allSelected\"\r\n :indeterminate=\"someSelected\"\r\n :disabled=\"selectableItems.length === 0\"\r\n @update:model-value=\"emit('selectAll')\"\r\n />\r\n </th>\r\n\r\n <th\r\n v-for=\"property in visibleProperties\"\r\n :key=\"property.name\"\r\n :class=\"[\r\n getAlignmentClass(property.align),\r\n 'px-3 py-3',\r\n property.sortable ? 'cursor-pointer select-none hover:bg-black/5 dark:hover:bg-white/5' : '',\r\n ]\"\r\n @click=\"handleSort(property)\"\r\n >\r\n <div\r\n class=\"flex items-center gap-1\"\r\n :class=\"{\r\n 'justify-center': property.align === 'center',\r\n 'justify-end': property.align === 'right',\r\n }\"\r\n >\r\n <slot\r\n :name=\"'header-' + property.name\"\r\n :property\r\n >\r\n {{ property.label ?? property.name }}\r\n </slot>\r\n <svg\r\n v-if=\"property.sortable\"\r\n :class=\"[\r\n 'w-4 h-4 transition-colors',\r\n isSortedColumn(property) ? 'text-primary-500' : 'text-gray-400',\r\n ]\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <!-- Up arrow (shows when sorted asc) -->\r\n <path\r\n v-if=\"isSortedColumn(property) && sortDirection === 'asc'\"\r\n d=\"M7 14l5-5 5 5H7z\"\r\n />\r\n <!-- Down arrow (shows when sorted desc) -->\r\n <path\r\n v-else-if=\"isSortedColumn(property) && sortDirection === 'desc'\"\r\n d=\"M7 10l5 5 5-5H7z\"\r\n />\r\n <!-- Both arrows (shows when not sorted) -->\r\n <template v-else>\r\n <path\r\n d=\"M7 14l5-5 5 5H7z\"\r\n class=\"opacity-40\"\r\n />\r\n <path\r\n d=\"M7 10l5 5 5-5H7z\"\r\n class=\"opacity-40\"\r\n />\r\n </template>\r\n </svg>\r\n </div>\r\n </th>\r\n\r\n <th\r\n v-if=\"hasActionSlot\"\r\n class=\"px-3 py-3 text-right\"\r\n />\r\n </tr>\r\n </thead>\r\n\r\n <tbody class=\"divide-y divide-black/10 font-medium dark:divide-white/10\">\r\n <tr\r\n v-for=\"item in items\"\r\n :key=\"getKey(item)\"\r\n class=\"hover:bg-black/5 dark:hover:bg-white/5 transition-colors\"\r\n :class=\"{ 'bg-primary/5 dark:bg-primary/10': isSelected(item) }\"\r\n >\r\n <!-- Selection cell -->\r\n <td\r\n v-if=\"selectable\"\r\n class=\"px-3 py-4\"\r\n >\r\n <Checkbox\r\n v-if=\"isSelectable(item)\"\r\n :model-value=\"isSelected(item)\"\r\n @update:model-value=\"handleSelect(item)\"\r\n />\r\n </td>\r\n\r\n <td\r\n v-for=\"property in visibleProperties\"\r\n :key=\"property.name\"\r\n :class=\"[\r\n getAlignmentClass(property.align),\r\n getMainClass(property.main),\r\n property.className,\r\n 'px-3 py-4',\r\n ]\"\r\n >\r\n <slot\r\n :item=\"item\"\r\n :name=\"'item-' + property.name\"\r\n :property\r\n :value=\"getItemValue(item, property)\"\r\n >\r\n <component\r\n :is=\"getTypeComponent(property.type || 'text')\"\r\n :value=\"getItemValue(item, property)\"\r\n />\r\n </slot>\r\n </td>\r\n\r\n <td\r\n v-if=\"hasActionSlot\"\r\n class=\"flex items-center justify-end gap-2 px-3 py-4\"\r\n >\r\n <slot\r\n :item=\"item\"\r\n name=\"action\"\r\n />\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- Empty state -->\r\n <div v-if=\"!items || items.length === 0\">\r\n <slot name=\"empty\" />\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\r\nimport CardComponent from './CardComponent.vue'\r\nimport ListSkeleton from '@/components/feedback/ListSkeleton.vue'\r\n\r\nexport interface MobileListColumn {\r\n key: string\r\n label: string\r\n /** Hide this column on mobile */\r\n hideOnMobile?: boolean\r\n /** Mark as primary info (shown prominently) */\r\n primary?: boolean\r\n /** Mark as secondary info */\r\n secondary?: boolean\r\n}\r\n\r\ntype ItemType = { id: number | string; [key: string]: unknown }\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Array of items to display */\r\n items: ItemType[]\r\n /** Key field for unique identification */\r\n keyField?: string\r\n /** Enable selection mode */\r\n selectable?: boolean\r\n /** Set of selected item keys */\r\n selectedItems?: Set<string>\r\n /** Filter function to determine if an item is selectable */\r\n selectableFilter?: (item: ItemType) => boolean\r\n /** Show loading skeleton */\r\n loading?: boolean\r\n /** Number of skeleton items to show when loading */\r\n loadingItems?: number\r\n }>(),\r\n {\r\n keyField: 'id',\r\n selectable: false,\r\n loading: false,\r\n loadingItems: 5,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when an item is selected/deselected */\r\n select: [id: string]\r\n /** Emitted when select all is toggled */\r\n selectAll: []\r\n}>()\r\n\r\ndefineSlots<{\r\n /** Avatar/icon slot for each item */\r\n avatar?: (props: { item: ItemType }) => unknown\r\n /** Main content area for each item */\r\n content?: (props: { item: ItemType }) => unknown\r\n /** Actions slot (right side) for each item */\r\n actions?: (props: { item: ItemType }) => unknown\r\n /** Empty state slot */\r\n empty?: () => unknown\r\n}>()\r\n\r\nconst slots = useSlots()\r\n\r\nconst getKey = (item: ItemType): string => {\r\n const keyValue = item[props.keyField]\r\n return String(keyValue ?? Math.random())\r\n}\r\n\r\nconst selectableItems = computed(() => {\r\n if (!props.selectableFilter) return props.items\r\n return props.items.filter(props.selectableFilter)\r\n})\r\n\r\nconst allSelected = computed(() => {\r\n if (selectableItems.value.length === 0) return false\r\n return selectableItems.value.every((item) => props.selectedItems?.has(getKey(item)))\r\n})\r\n\r\nconst someSelected = computed(() => {\r\n return (props.selectedItems?.size || 0) > 0 && !allSelected.value\r\n})\r\n\r\nconst isSelected = (item: ItemType): boolean => {\r\n return props.selectedItems?.has(getKey(item)) || false\r\n}\r\n\r\nconst isSelectable = (item: ItemType): boolean => {\r\n if (!props.selectable) return false\r\n if (!props.selectableFilter) return true\r\n return props.selectableFilter(item)\r\n}\r\n\r\nconst handleSelect = (item: ItemType) => {\r\n emit('select', getKey(item))\r\n}\r\n\r\nconst hasEmptySlot = computed(() => !!slots.empty)\r\n</script>\r\n\r\n<template>\r\n <div class=\"space-y-3\">\r\n <!-- Loading State -->\r\n <CardComponent v-if=\"loading\">\r\n <ListSkeleton\r\n :items=\"loadingItems\"\r\n show-avatar\r\n show-secondary\r\n show-action\r\n />\r\n </CardComponent>\r\n\r\n <!-- Content (when not loading) -->\r\n <template v-else>\r\n <!-- Select All Header (when selectable) -->\r\n <CardComponent v-if=\"selectable && selectableItems.length > 0\">\r\n <div class=\"flex items-center gap-3 p-3\">\r\n <Checkbox\r\n :model-value=\"allSelected\"\r\n :indeterminate=\"someSelected\"\r\n @update:model-value=\"emit('selectAll')\"\r\n />\r\n <span class=\"text-sm text-gray-600 dark:text-gray-400\">\r\n {{ allSelected ? 'Tout désélectionner' : 'Tout sélectionner' }}\r\n </span>\r\n <span\r\n v-if=\"selectedItems && selectedItems.size > 0\"\r\n class=\"text-sm text-primary font-medium\"\r\n >\r\n ({{ selectedItems.size }} sélectionné{{ selectedItems.size > 1 ? 's' : '' }})\r\n </span>\r\n </div>\r\n </CardComponent>\r\n\r\n <!-- Items List -->\r\n <CardComponent\r\n v-for=\"item in items\"\r\n :key=\"getKey(item)\"\r\n class=\"hover:shadow-lg transition-all duration-200\"\r\n :class=\"{\r\n 'ring-2 ring-primary': isSelected(item),\r\n }\"\r\n >\r\n <div class=\"p-4 flex items-center gap-4\">\r\n <!-- Checkbox -->\r\n <div\r\n v-if=\"selectable\"\r\n class=\"shrink-0\"\r\n >\r\n <Checkbox\r\n v-if=\"isSelectable(item)\"\r\n :model-value=\"isSelected(item)\"\r\n @update:model-value=\"handleSelect(item)\"\r\n />\r\n <div\r\n v-else\r\n class=\"w-5 h-5\"\r\n />\r\n </div>\r\n\r\n <!-- Avatar slot -->\r\n <slot\r\n name=\"avatar\"\r\n :item=\"item\"\r\n />\r\n\r\n <!-- Content -->\r\n <div class=\"flex-1 min-w-0 overflow-hidden\">\r\n <slot\r\n name=\"content\"\r\n :item=\"item\"\r\n />\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"shrink-0\">\r\n <slot\r\n name=\"actions\"\r\n :item=\"item\"\r\n />\r\n </div>\r\n </div>\r\n </CardComponent>\r\n\r\n <!-- Empty state -->\r\n <div v-if=\"items.length === 0 && hasEmptySlot\">\r\n <slot name=\"empty\" />\r\n </div>\r\n </template>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { computed, useSlots } from 'vue'\r\nimport { useBreakpoints } from '@vueuse/core'\r\nimport type { Property, SortDirection } from '@/types'\r\nimport MobileList from './MobileList.vue'\r\nimport TableComponent from './TableComponent.vue'\r\nimport CardComponent from './CardComponent.vue'\r\n\r\nexport interface ResponsiveListColumn {\r\n /** Column key - corresponds to the data field name (alias for 'name' for backward compatibility) */\r\n key?: string\r\n /** Column name - corresponds to the data field name */\r\n name?: string\r\n /** Display label for the column header */\r\n label?: string\r\n /** Column type for automatic rendering */\r\n type?: 'text' | 'number' | 'date' | 'badge' | 'boolean' | string\r\n /** Text alignment in the column */\r\n align?: 'left' | 'center' | 'right'\r\n /** Header CSS class */\r\n headerClass?: string\r\n /** Cell CSS class */\r\n className?: string\r\n /** Whether the column is sortable */\r\n sortable?: boolean\r\n /** Whether to hide the column */\r\n hidden?: boolean\r\n /** Whether the column is the main/primary column */\r\n main?: boolean\r\n /** Hide this column on mobile view */\r\n hideOnMobile?: boolean\r\n}\r\n\r\ntype ItemType = { id: number | string; [key: string]: unknown }\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Array of items to display */\r\n items: ItemType[]\r\n /** Column definitions (extends Property with mobile options) */\r\n columns: ResponsiveListColumn[]\r\n /** Key field for unique identification */\r\n keyField?: string\r\n /** Enable selection mode */\r\n selectable?: boolean\r\n /** Set of selected item keys */\r\n selectedItems?: Set<string>\r\n /** Filter function to determine if an item is selectable */\r\n selectableFilter?: (item: ItemType) => boolean\r\n /** Breakpoint for switching between mobile and desktop views (default: 'lg' = 1024px) */\r\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\r\n /** Current sort column */\r\n sortBy?: string\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Show loading skeleton */\r\n loading?: boolean\r\n /** Number of skeleton rows/items to show when loading */\r\n loadingRows?: number\r\n }>(),\r\n {\r\n keyField: 'id',\r\n selectable: false,\r\n breakpoint: 'lg',\r\n loading: false,\r\n loadingRows: 5,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when an item is selected/deselected */\r\n select: [id: string]\r\n /** Emitted when select all is toggled */\r\n selectAll: []\r\n /** Emitted when a sortable column is clicked */\r\n sort: [column: string, direction: SortDirection]\r\n}>()\r\n\r\ndefineSlots<{\r\n // Mobile slots\r\n /** Avatar/icon slot for mobile view */\r\n avatar?: (props: { item: ItemType }) => unknown\r\n /** Main content for mobile view */\r\n mobileContent?: (props: { item: ItemType }) => unknown\r\n /** Actions for mobile view */\r\n mobileActions?: (props: { item: ItemType }) => unknown\r\n\r\n // Table cell slots - dynamic based on column key\r\n /** Custom cell rendering for table view */\r\n [key: `cell-${string}`]: (props: { item: ItemType; value: unknown }) => unknown\r\n\r\n // Shared slots\r\n /** Actions column for table view, also used as fallback for mobile */\r\n actions?: (props: { item: ItemType }) => unknown\r\n /** Empty state slot */\r\n empty?: () => unknown\r\n}>()\r\n\r\nconst slots = useSlots()\r\n\r\n// Helper to get column key (supports both 'key' and 'name' for backward compatibility)\r\nconst getColumnKey = (col: ResponsiveListColumn): string => col.key || col.name || ''\r\n\r\n// Convert columns to Property format for TableComponent\r\nconst tableProperties = computed<Property[]>(() =>\r\n props.columns.map((col) => ({\r\n name: getColumnKey(col),\r\n label: col.label,\r\n type: col.type,\r\n sortable: col.sortable,\r\n hidden: col.hidden,\r\n align: col.align,\r\n className: col.className,\r\n main: col.main,\r\n })),\r\n)\r\n\r\n// Get cell value for table slots\r\nconst getCellValue = (item: ItemType, key: string): unknown => {\r\n const keys = key.split('.')\r\n let value: unknown = item\r\n for (const k of keys) {\r\n if (value && typeof value === 'object' && k in value) {\r\n value = (value as Record<string, unknown>)[k]\r\n } else {\r\n return undefined\r\n }\r\n }\r\n return value\r\n}\r\n\r\n// Check if a cell slot exists\r\nconst hasCellSlot = (key: string): boolean => {\r\n return !!slots[`cell-${key}`]\r\n}\r\n\r\nconst hasActionsSlot = computed(() => !!slots.actions)\r\n\r\n// Tailwind breakpoints\r\nconst breakpoints = useBreakpoints({\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n})\r\n\r\n// Reactive desktop detection based on selected breakpoint\r\nconst isDesktop = computed(() => breakpoints.greaterOrEqual(props.breakpoint).value)\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <!-- Mobile View -->\r\n <MobileList\r\n v-if=\"!isDesktop\"\r\n :items=\"items\"\r\n :key-field=\"keyField\"\r\n :selectable=\"selectable\"\r\n :selected-items=\"selectedItems\"\r\n :selectable-filter=\"selectableFilter\"\r\n :loading=\"loading\"\r\n :loading-items=\"loadingRows\"\r\n @select=\"emit('select', $event)\"\r\n @select-all=\"emit('selectAll')\"\r\n >\r\n <template #avatar=\"{ item }\">\r\n <slot\r\n name=\"avatar\"\r\n :item=\"item\"\r\n />\r\n </template>\r\n\r\n <template #content=\"{ item }\">\r\n <slot\r\n name=\"mobileContent\"\r\n :item=\"item\"\r\n />\r\n </template>\r\n\r\n <template #actions=\"{ item }\">\r\n <slot\r\n name=\"mobileActions\"\r\n :item=\"item\"\r\n >\r\n <slot\r\n name=\"actions\"\r\n :item=\"item\"\r\n />\r\n </slot>\r\n </template>\r\n\r\n <template #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n </MobileList>\r\n\r\n <!-- Desktop View -->\r\n <CardComponent v-else>\r\n <TableComponent\r\n :items=\"items\"\r\n :properties=\"tableProperties\"\r\n :key-field=\"keyField\"\r\n :selectable=\"selectable\"\r\n :selected-items=\"selectedItems\"\r\n :selectable-filter=\"selectableFilter\"\r\n :sort-by=\"sortBy\"\r\n :sort-direction=\"sortDirection\"\r\n :loading=\"loading\"\r\n :loading-rows=\"loadingRows\"\r\n @select=\"emit('select', $event)\"\r\n @select-all=\"emit('selectAll')\"\r\n @sort=\"(col: string, dir: SortDirection) => emit('sort', col, dir)\"\r\n >\r\n <!-- Forward cell slots -->\r\n <template\r\n v-for=\"col in columns\"\r\n :key=\"getColumnKey(col)\"\r\n #[`item-${getColumnKey(col)}`]=\"{ item, value }\"\r\n >\r\n <slot\r\n v-if=\"hasCellSlot(getColumnKey(col))\"\r\n :name=\"`cell-${getColumnKey(col)}`\"\r\n :item=\"item\"\r\n :value=\"getCellValue(item, getColumnKey(col))\"\r\n />\r\n <template v-else>\r\n {{ value }}\r\n </template>\r\n </template>\r\n\r\n <!-- Actions slot -->\r\n <template\r\n v-if=\"hasActionsSlot\"\r\n #action=\"{ item }\"\r\n >\r\n <slot\r\n name=\"actions\"\r\n :item=\"item\"\r\n />\r\n </template>\r\n\r\n <template #empty>\r\n <slot name=\"empty\" />\r\n </template>\r\n </TableComponent>\r\n </CardComponent>\r\n </div>\r\n</template>\r\n\r\n","<script lang=\"ts\" setup>\r\nimport { computed, nextTick, ref, watch } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport type { AutocompleteOption } from '@/types'\r\nimport { useDropdown } from '@/composables/useDropdown'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n modelValue: string | null\r\n options: AutocompleteOption[]\r\n placeholder?: string\r\n disabled?: boolean\r\n label?: string\r\n error?: string\r\n noResultsText?: string\r\n /** Use teleport to body to avoid overflow clipping */\r\n teleport?: boolean\r\n }>(),\r\n {\r\n teleport: true,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: string | null]\r\n}>()\r\n\r\nconst searchQuery = ref('')\r\nconst inputRef = ref<HTMLInputElement | null>(null)\r\nconst containerRef = ref<HTMLDivElement | null>(null)\r\nconst dropdownRef = ref<HTMLDivElement | null>(null)\r\nconst inputWrapperRef = ref<HTMLDivElement | null>(null)\r\n\r\nconst {\r\n isOpen,\r\n highlightedIndex,\r\n dropdownStyle,\r\n open: openBase,\r\n close: closeBase,\r\n handleKeydown: baseHandleKeydown,\r\n scrollToHighlighted,\r\n} = useDropdown(inputWrapperRef, dropdownRef, {\r\n teleport: props.teleport,\r\n})\r\n\r\nconst filteredOptions = computed(() => {\r\n if (!searchQuery.value) {\r\n return props.options\r\n }\r\n const query = searchQuery.value.toLowerCase()\r\n return props.options.filter(\r\n (option) =>\r\n option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query),\r\n )\r\n})\r\n\r\nconst selectedLabel = computed(() => {\r\n if (!props.modelValue) return ''\r\n const option = props.options.find((opt) => opt.value === props.modelValue)\r\n return option?.label || ''\r\n})\r\n\r\nwatch(\r\n () => props.modelValue,\r\n () => {\r\n if (!isOpen.value) {\r\n searchQuery.value = selectedLabel.value\r\n }\r\n },\r\n { immediate: true },\r\n)\r\n\r\nconst openDropdown = () => {\r\n if (props.disabled) return\r\n searchQuery.value = ''\r\n highlightedIndex.value = -1\r\n openBase()\r\n nextTick(() => {\r\n inputRef.value?.focus()\r\n })\r\n}\r\n\r\nconst closeDropdown = () => {\r\n closeBase()\r\n searchQuery.value = selectedLabel.value\r\n}\r\n\r\nconst selectOption = (option: AutocompleteOption) => {\r\n emit('update:modelValue', option.value)\r\n searchQuery.value = option.label\r\n closeDropdown()\r\n}\r\n\r\nconst clearSelection = () => {\r\n emit('update:modelValue', null)\r\n searchQuery.value = ''\r\n highlightedIndex.value = -1\r\n nextTick(() => {\r\n inputRef.value?.focus()\r\n })\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 })\r\n if (isOpen.value) {\r\n scrollToHighlighted(dropdownRef.value)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\n ref=\"containerRef\"\n class=\"autocomplete-container\"\n >\r\n <label\n v-if=\"label\"\n class=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\r\n {{ label }}\r\n </label>\r\n\r\n <div class=\"relative\">\r\n <div\r\n ref=\"inputWrapperRef\"\r\n :class=\"{\r\n 'border-red-500': error,\r\n 'border-gray-300 dark:border-gray-600': !error && !isOpen,\r\n 'border-primary ring-2 ring-primary/20': isOpen,\r\n 'cursor-not-allowed opacity-50': disabled,\r\n }\"\r\n class=\"flex items-center gap-2 rounded-lg border bg-white px-3 py-2 transition dark:bg-gray-800\"\r\n >\r\n <Icon\n class=\"size-5 text-gray-400\"\n icon=\"lucide:search\"\n />\r\n\r\n <input\r\n ref=\"inputRef\"\r\n v-model=\"searchQuery\"\r\n :disabled=\"disabled\"\r\n :placeholder=\"placeholder || 'Search...'\"\r\n class=\"flex-1 bg-transparent text-sm outline-none dark:text-white\"\r\n type=\"text\"\r\n @focus=\"openDropdown\"\r\n @keydown=\"handleKeydown\"\r\n >\r\n\r\n <button\r\n v-if=\"modelValue && !disabled\"\r\n class=\"rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n type=\"button\"\r\n @click.stop=\"clearSelection\"\r\n >\r\n <Icon\n class=\"size-4 text-gray-400\"\n icon=\"lucide:x\"\n />\r\n </button>\r\n\r\n <button\r\n :disabled=\"disabled\"\r\n class=\"rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n type=\"button\"\r\n @click.stop=\"isOpen ? closeDropdown() : openDropdown()\"\r\n >\r\n <Icon\r\n :class=\"{ 'rotate-180': isOpen }\"\r\n class=\"size-4 text-gray-400 transition\"\r\n icon=\"lucide:chevron-down\"\r\n />\r\n </button>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <Teleport\n to=\"body\"\n :disabled=\"!teleport\"\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 ref=\"dropdownRef\"\r\n :style=\"dropdownStyle\"\r\n :class=\"[\r\n 'autocomplete-dropdown 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-2 w-full',\r\n ]\"\r\n >\r\n <div\n v-if=\"filteredOptions.length === 0\"\n class=\"px-4 py-3 text-sm text-gray-500\"\n >\r\n {{ noResultsText || 'No results found' }}\r\n </div>\r\n\r\n <button\r\n v-for=\"(option, index) in filteredOptions\"\r\n :key=\"option.value\"\r\n :class=\"{\r\n 'bg-gray-100 dark:bg-gray-700': highlightedIndex === index,\r\n 'bg-primary/10': modelValue === option.value,\r\n }\"\r\n :data-index=\"index\"\r\n class=\"flex w-full items-center gap-2 px-4 py-2 text-left text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n type=\"button\"\r\n @click=\"selectOption(option)\"\r\n >\r\n <Icon\r\n v-if=\"modelValue === option.value\"\r\n class=\"size-4 text-primary\"\r\n icon=\"lucide:check\"\r\n />\r\n <span class=\"flex-1 dark:text-white\">{{ option.label }}</span>\r\n <span class=\"text-xs text-gray-400\">({{ option.value }})</span>\r\n </button>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n </div>\r\n\r\n <p\n v-if=\"error\"\n class=\"mt-1 text-sm text-red-600\"\n >\n {{ error }}\n </p>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nimport { computed, resolveComponent } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport type { TableActionColor } from '@/types'\n\nconst { color, icon, link } = defineProps<{\n link?: string\n icon: string\n color?: TableActionColor\n}>()\n\nconst colorClass = computed(() => {\n switch (color) {\n case 'info':\n return 'border-blue-200 hover:bg-blue-100 dark:border-blue-800 dark:hover:bg-blue-900'\n case 'warning':\n return 'border-yellow-200 hover:bg-yellow-100 dark:border-yellow-800 dark:hover:bg-yellow-900'\n case 'success':\n return 'border-green-200 hover:bg-green-100 dark:border-green-800 dark:hover:bg-green-900'\n case 'error':\n return 'border-red-200 hover:bg-red-100 dark:border-red-800 dark:hover:bg-red-900'\n default:\n return 'border-gray-200 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:hover:bg-gray-800'\n }\n})\n\nconst iconColorClass = computed(() => {\n switch (color) {\n case 'info':\n return 'text-blue-600 group-hover:text-blue-900 dark:text-blue-400 dark:group-hover:text-blue-100'\n case 'warning':\n return 'text-yellow-600 group-hover:text-yellow-900 dark:text-yellow-400 dark:group-hover:text-yellow-100'\n case 'success':\n return 'text-green-600 group-hover:text-green-900 dark:text-green-400 dark:group-hover:text-green-100'\n case 'error':\n return 'text-red-600 group-hover:text-red-900 dark:text-red-400 dark:group-hover:text-red-100'\n default:\n return 'text-gray-600 group-hover:text-gray-900 dark:text-gray-400 dark:group-hover:text-gray-100'\n }\n})\n\n// Try to resolve RouterLink, fallback to 'a' tag\nconst linkComponent = computed(() => {\n if (!link) return 'button'\n try {\n const RouterLink = resolveComponent('RouterLink')\n if (typeof RouterLink !== 'string') {\n return RouterLink\n }\n } catch {\n // RouterLink not available\n }\n return 'a'\n})\n\nconst linkProps = computed(() => {\n if (!link) return {}\n if (linkComponent.value === 'a') {\n return { href: link }\n }\n return { to: link }\n})\n</script>\n\n<template>\n <component\n :is=\"linkComponent\"\n v-bind=\"linkProps\"\n :class=\"colorClass\"\n class=\"group flex size-8 items-center justify-center rounded-lg border\"\n >\n <Icon\n :class=\"iconColorClass\"\n :icon\n class=\"size-4\"\n />\n </component>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nconst props = withDefaults(\n defineProps<{\n /** Image source URL */\n src?: string\n /** Alt text for image */\n alt?: string\n /** Fallback name (shows initials) */\n name?: string\n /** Size variant */\n size?: AvatarSize\n /** Show online status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy'\n /** Rounded style */\n rounded?: 'full' | 'lg' | 'md'\n }>(),\n {\n size: 'md',\n rounded: 'full',\n },\n)\n\nconst imageError = ref(false)\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xs: 'size-6 text-xs',\n sm: 'size-8 text-sm',\n md: 'size-10 text-base',\n lg: 'size-12 text-lg',\n xl: 'size-16 text-xl',\n '2xl': 'size-20 text-2xl',\n}\n\nconst statusSizes: Record<AvatarSize, string> = {\n xs: 'size-1.5',\n sm: 'size-2',\n md: 'size-2.5',\n lg: 'size-3',\n xl: 'size-4',\n '2xl': 'size-5',\n}\n\nconst statusColors: Record<string, string> = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n away: 'bg-yellow-500',\n busy: 'bg-red-500',\n}\n\nconst roundedClasses: Record<string, string> = {\n full: 'rounded-full',\n lg: 'rounded-lg',\n md: 'rounded-md',\n}\n\nconst initials = computed(() => {\n if (!props.name) return ''\n return props.name\n .split(' ')\n .map(n => n[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n})\n\nconst showImage = computed(() => props.src && !imageError.value)\n</script>\n\n<template>\n <div class=\"relative inline-block\">\n <div\n :class=\"[\n 'flex items-center justify-center overflow-hidden bg-gray-200 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-300',\n sizeClasses[size],\n roundedClasses[rounded],\n ]\"\n >\n <img\n v-if=\"showImage\"\n :src=\"src\"\n :alt=\"alt || name\"\n class=\"size-full object-cover\"\n @error=\"imageError = true\"\n >\n <span v-else-if=\"initials\">{{ initials }}</span>\n <Icon\n v-else\n icon=\"lucide:user\"\n class=\"size-1/2\"\n />\n </div>\n <span\n v-if=\"status\"\n :class=\"[\n 'absolute bottom-0 right-0 block rounded-full ring-2 ring-white dark:ring-gray-900',\n statusSizes[size],\n statusColors[status],\n ]\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, provide } from 'vue'\n\nexport interface Tab {\n key: string\n label: string\n icon?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** Array of tab definitions */\n tabs: Tab[]\n /** Currently active tab key */\n modelValue?: string\n /** Tab style variant */\n variant?: 'underline' | 'pills' | 'boxed'\n }>(),\n {\n variant: 'underline',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst activeTab = computed({\n get: () => props.modelValue || props.tabs[0]?.key,\n set: (value: string) => emit('update:modelValue', value),\n})\n\nconst selectTab = (tab: Tab) => {\n if (tab.disabled) return\n activeTab.value = tab.key\n}\n\nconst variantClasses = {\n underline: {\n container: 'border-b border-gray-200 dark:border-gray-700',\n tab: 'border-b-2 -mb-px px-4 py-2',\n active: 'border-primary text-primary dark:text-primary',\n inactive: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300',\n },\n pills: {\n container: 'gap-2',\n tab: 'px-4 py-2 rounded-lg',\n active: 'bg-primary text-white',\n inactive: 'text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800',\n },\n boxed: {\n container: 'bg-gray-100 dark:bg-gray-800 p-1 rounded-lg gap-1',\n tab: 'px-4 py-2 rounded-md',\n active: 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow-sm',\n inactive: 'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n },\n}\n\nprovide('activeTab', activeTab)\n</script>\n\n<template>\n <div>\n <div\n :class=\"[\n 'flex',\n variantClasses[variant].container,\n ]\"\n role=\"tablist\"\n >\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.key\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"activeTab === tab.key\"\n :disabled=\"tab.disabled\"\n :class=\"[\n 'text-sm font-medium transition-colors focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n variantClasses[variant].tab,\n activeTab === tab.key\n ? variantClasses[variant].active\n : variantClasses[variant].inactive,\n ]\"\n @click=\"selectTab(tab)\"\n >\n {{ tab.label }}\n </button>\n </div>\n <div class=\"mt-4\">\n <slot :active-tab=\"activeTab\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, computed, type Ref } from 'vue'\n\nconst props = defineProps<{\n /** Tab key this panel belongs to */\n value: string\n}>()\n\nconst activeTab = inject<Ref<string>>('activeTab')\n\nconst isActive = computed(() => activeTab?.value === props.value)\n</script>\n\n<template>\n <div\n v-show=\"isActive\"\n role=\"tabpanel\"\n >\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport interface Step {\n key: string | number\n title: string\n description?: string\n icon?: string\n}\n\nconst props = withDefaults(\n defineProps<{\n /** Array of step definitions */\n steps: Step[]\n /** Current step (key or index) */\n modelValue?: string | number\n /** Orientation */\n orientation?: 'horizontal' | 'vertical'\n }>(),\n {\n orientation: 'horizontal',\n },\n)\n\ndefineEmits<{\n 'update:modelValue': [value: string | number]\n}>()\n\nconst getCurrentStepIndex = () => {\n if (props.modelValue === undefined) return 0\n const index = props.steps.findIndex((s) => s.key === props.modelValue)\n return index >= 0 ? index : 0\n}\n\nconst isStepComplete = (index: number) => index < getCurrentStepIndex()\nconst isStepActive = (index: number) => index === getCurrentStepIndex()\nconst isStepPending = (index: number) => index > getCurrentStepIndex()\n</script>\n\n<template>\n <div\n :class=\"[\n 'w-full',\n orientation === 'vertical' ? 'flex flex-col' : '',\n ]\"\n >\n <div\n :class=\"[\n orientation === 'horizontal'\n ? 'relative flex items-start justify-between'\n : 'relative flex flex-col gap-4',\n ]\"\n >\n <!-- Horizontal Progress Line -->\n <template v-if=\"orientation === 'horizontal'\">\n <div\n class=\"absolute left-0 top-6 h-0.5 w-full bg-gray-200 dark:bg-gray-700\"\n aria-hidden=\"true\"\n />\n <div\n class=\"absolute left-0 top-6 h-0.5 bg-primary transition-all duration-500 ease-in-out\"\n :style=\"{\n width: `${(getCurrentStepIndex() / (steps.length - 1)) * 100}%`,\n }\"\n aria-hidden=\"true\"\n />\n </template>\n\n <!-- Steps -->\n <div\n v-for=\"(step, index) in steps\"\n :key=\"step.key\"\n :class=\"[\n 'relative',\n orientation === 'horizontal'\n ? 'flex flex-1 flex-col items-center'\n : 'flex items-start gap-4',\n ]\"\n >\n <!-- Vertical Line -->\n <div\n v-if=\"orientation === 'vertical' && index < steps.length - 1\"\n class=\"absolute left-6 top-12 h-full w-0.5 -translate-x-1/2\"\n :class=\"isStepComplete(index) ? 'bg-primary' : 'bg-gray-200 dark:bg-gray-700'\"\n />\n\n <!-- Step Circle -->\n <div\n class=\"relative z-10 flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300\"\n :class=\"{\n 'border-primary bg-primary text-white shadow-lg': isStepActive(index) || isStepComplete(index),\n 'border-gray-300 bg-white text-gray-400 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-500':\n isStepPending(index),\n }\"\n >\n <Icon\n v-if=\"isStepComplete(index)\"\n icon=\"lucide:check\"\n class=\"size-6\"\n />\n <Icon\n v-else-if=\"step.icon\"\n :icon=\"step.icon\"\n class=\"size-6\"\n />\n <span\n v-else\n class=\"text-sm font-semibold\"\n >{{ index + 1 }}</span>\n </div>\n\n <!-- Step Content -->\n <div\n :class=\"[\n orientation === 'horizontal'\n ? 'mt-4 flex flex-col items-center text-center'\n : 'flex flex-col pt-2',\n ]\"\n >\n <p\n class=\"text-sm font-semibold transition-colors\"\n :class=\"{\n 'text-primary dark:text-primary': isStepActive(index) || isStepComplete(index),\n 'text-gray-500 dark:text-gray-400': isStepPending(index),\n }\"\n >\n {{ step.title }}\n </p>\n <p\n v-if=\"step.description\"\n class=\"mt-1 text-xs\"\n :class=\"{\n 'text-gray-600 dark:text-gray-300': isStepActive(index),\n 'text-gray-500 dark:text-gray-400': !isStepActive(index),\n }\"\n >\n {{ step.description }}\n </p>\n </div>\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport { ref, useSlots } from 'vue'\r\nimport CardComponent from './CardComponent.vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Card title */\r\n title?: string\r\n /** Card description */\r\n description?: string\r\n /** Whether the card is initially expanded */\r\n defaultExpanded?: boolean\r\n /** Custom class for the header button (custom header mode) */\r\n headerClass?: string\r\n /** Custom class for the content wrapper */\r\n contentClass?: string\r\n }>(),\r\n {\r\n defaultExpanded: true,\r\n headerClass: 'w-full text-left',\r\n contentClass: '',\r\n },\r\n)\r\n\r\nconst slots = useSlots()\r\nconst isExpanded = ref(props.defaultExpanded)\r\n\r\nconst toggle = () => {\r\n isExpanded.value = !isExpanded.value\r\n}\r\n\r\nconst hasCustomHeader = () => !!slots.header\r\n</script>\r\n\r\n<template>\r\n <!-- Always use CardComponent for consistent styling -->\r\n <CardComponent>\r\n <!-- Custom header mode -->\r\n <template\r\n v-if=\"hasCustomHeader()\"\r\n #header\r\n >\r\n <button\r\n type=\"button\"\r\n :class=\"headerClass\"\r\n @click=\"toggle\"\r\n >\r\n <slot\r\n name=\"header\"\r\n :expanded=\"isExpanded\"\r\n :toggle=\"toggle\"\r\n />\r\n </button>\r\n </template>\r\n\r\n <!-- Standard mode: title/description -->\r\n <template\r\n v-else-if=\"title || description\"\r\n #title\r\n >\r\n {{ title }}\r\n </template>\r\n <template\r\n v-if=\"!hasCustomHeader() && description\"\r\n #description\r\n >\r\n {{ description }}\r\n </template>\r\n\r\n <!-- Actions slot with toggle button (standard mode only) -->\r\n <template\r\n v-if=\"!hasCustomHeader()\"\r\n #actions\r\n >\r\n <slot name=\"actions\" />\r\n <button\r\n type=\"button\"\r\n class=\"rounded-lg p-1.5 text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800\"\r\n @click=\"toggle\"\r\n >\r\n <Icon\r\n :icon=\"isExpanded ? 'lucide:chevron-up' : 'lucide:chevron-down'\"\r\n class=\"size-5\"\r\n />\r\n </button>\r\n </template>\r\n\r\n <!-- Collapsible content -->\r\n <Transition\r\n enter-active-class=\"transition-all duration-200 ease-out\"\r\n enter-from-class=\"opacity-0 max-h-0\"\r\n enter-to-class=\"opacity-100 max-h-[2000px]\"\r\n leave-active-class=\"transition-all duration-200 ease-in\"\r\n leave-from-class=\"opacity-100 max-h-[2000px]\"\r\n leave-to-class=\"opacity-0 max-h-0\"\r\n >\r\n <div\r\n v-show=\"isExpanded\"\r\n :class=\"['overflow-hidden', contentClass]\"\r\n >\r\n <div :class=\"hasCustomHeader() ? '' : 'space-y-4 p-6'\">\r\n <slot />\r\n </div>\r\n </div>\r\n </Transition>\r\n </CardComponent>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\nimport { useId } from '@/composables/useId'\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Tooltip content text */\r\n content: string\r\n /** Position of the tooltip */\r\n position?: TooltipPosition\r\n /** Delay before showing (ms) */\r\n delay?: number\r\n /** Disable the tooltip */\r\n disabled?: boolean\r\n /** Custom ID for accessibility */\r\n id?: string\r\n }>(),\r\n {\r\n position: 'top',\r\n delay: 0,\r\n disabled: false,\r\n },\r\n)\r\n\r\n// Generate unique ID for accessibility\r\nconst { id: tooltipId } = useId({ prefix: 'tooltip', id: props.id })\r\n\r\nconst isVisible = ref(false)\r\nlet timeoutId: ReturnType<typeof setTimeout> | null = null\r\n\r\nconst show = () => {\r\n if (props.disabled) return\r\n if (props.delay > 0) {\r\n timeoutId = setTimeout(() => {\r\n isVisible.value = true\r\n }, props.delay)\r\n } else {\r\n isVisible.value = true\r\n }\r\n}\r\n\r\nconst hide = () => {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId)\r\n timeoutId = null\r\n }\r\n isVisible.value = false\r\n}\r\n\r\nconst positionClasses = computed(() => {\r\n const base = 'absolute z-50 px-2 py-1 text-xs font-medium text-white bg-gray-900 rounded shadow-lg whitespace-nowrap dark:bg-gray-700'\r\n const arrow = 'after:absolute after:border-4 after:border-transparent'\r\n\r\n switch (props.position) {\r\n case 'top':\r\n return `${base} ${arrow} bottom-full left-1/2 -translate-x-1/2 mb-2 after:top-full after:left-1/2 after:-translate-x-1/2 after:border-t-gray-900 dark:after:border-t-gray-700`\r\n case 'bottom':\r\n return `${base} ${arrow} top-full left-1/2 -translate-x-1/2 mt-2 after:bottom-full after:left-1/2 after:-translate-x-1/2 after:border-b-gray-900 dark:after:border-b-gray-700`\r\n case 'left':\r\n return `${base} ${arrow} right-full top-1/2 -translate-y-1/2 mr-2 after:left-full after:top-1/2 after:-translate-y-1/2 after:border-l-gray-900 dark:after:border-l-gray-700`\r\n case 'right':\r\n return `${base} ${arrow} left-full top-1/2 -translate-y-1/2 ml-2 after:right-full after:top-1/2 after:-translate-y-1/2 after:border-r-gray-900 dark:after:border-r-gray-700`\r\n default:\r\n return base\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"relative inline-block\"\r\n :aria-describedby=\"content && !disabled ? tooltipId : undefined\"\r\n @mouseenter=\"show\"\r\n @mouseleave=\"hide\"\r\n @focus=\"show\"\r\n @blur=\"hide\"\r\n >\r\n <slot />\r\n <Transition\r\n enter-active-class=\"transition duration-150 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-100 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=\"isVisible && content\"\r\n :id=\"tooltipId\"\r\n :class=\"positionClasses\"\r\n role=\"tooltip\"\r\n >\r\n {{ content }}\r\n </div>\r\n </Transition>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed } from 'vue'\r\nimport { useDropdown } from '@/composables/useDropdown'\r\nimport { useId } from '@/composables/useId'\r\n\r\nexport type PopoverPosition = 'top' | 'bottom' | 'left' | 'right'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Position of the popover */\r\n position?: PopoverPosition\r\n /** Trigger on hover instead of click */\r\n hover?: boolean\r\n /** Use teleport to body */\r\n teleport?: boolean\r\n /** Width of the popover */\r\n width?: 'auto' | 'sm' | 'md' | 'lg'\r\n /** Custom ID for accessibility */\r\n id?: string\r\n }>(),\r\n {\r\n position: 'bottom',\r\n hover: false,\r\n teleport: true,\r\n width: 'auto',\r\n },\r\n)\r\n\r\n// Generate unique IDs for accessibility\r\nconst { related } = useId({ prefix: 'popover', id: props.id })\r\nconst triggerId = computed(() => related('trigger'))\r\nconst popoverId = computed(() => related('content'))\r\n\r\nconst triggerRef = ref<HTMLElement>()\r\nconst popoverRef = ref<HTMLElement>()\r\n\r\nconst { isOpen, dropdownStyle, toggle, close, open } = useDropdown(triggerRef, popoverRef, {\r\n teleport: props.teleport,\r\n gap: 8,\r\n})\r\n\r\nconst handleTrigger = () => {\r\n if (!props.hover) {\r\n toggle()\r\n }\r\n}\r\n\r\nconst handleMouseEnter = () => {\r\n if (props.hover) {\r\n open()\r\n }\r\n}\r\n\r\nconst handleMouseLeave = () => {\r\n if (props.hover) {\r\n close()\r\n }\r\n}\r\n\r\nconst widthClasses = {\r\n auto: 'w-auto min-w-48',\r\n sm: 'w-48',\r\n md: 'w-64',\r\n lg: 'w-80',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"relative inline-block\"\r\n @mouseenter=\"handleMouseEnter\"\r\n @mouseleave=\"handleMouseLeave\"\r\n >\r\n <div\r\n ref=\"triggerRef\"\r\n :id=\"triggerId\"\r\n :aria-expanded=\"isOpen\"\r\n :aria-controls=\"popoverId\"\r\n @click=\"handleTrigger\"\r\n >\r\n <slot name=\"trigger\" />\r\n </div>\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-150 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-100 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=\"popoverId\"\r\n ref=\"popoverRef\"\r\n role=\"dialog\"\r\n :aria-labelledby=\"triggerId\"\r\n :style=\"dropdownStyle\"\r\n :class=\"[\r\n 'z-9999 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800',\r\n widthClasses[width],\r\n ]\"\r\n >\r\n <slot :close=\"close\" />\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed, watch, onMounted, onUnmounted } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'\r\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Whether the drawer is visible */\r\n modelValue: boolean\r\n /** Position of the drawer */\r\n position?: DrawerPosition\r\n /** Size of the drawer */\r\n size?: DrawerSize\r\n /** Title shown in header */\r\n title?: string\r\n /** Show close button */\r\n showClose?: boolean\r\n /** Close on overlay click */\r\n closeOnOverlay?: boolean\r\n /** Close on escape key */\r\n closeOnEscape?: boolean\r\n /** Show overlay */\r\n overlay?: boolean\r\n }>(),\r\n {\r\n position: 'right',\r\n size: 'md',\r\n showClose: true,\r\n closeOnOverlay: true,\r\n closeOnEscape: true,\r\n overlay: true,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n 'update:modelValue': [value: boolean]\r\n}>()\r\n\r\nconst close = () => {\r\n emit('update:modelValue', false)\r\n}\r\n\r\nconst handleOverlayClick = () => {\r\n if (props.closeOnOverlay) {\r\n close()\r\n }\r\n}\r\n\r\nconst handleKeydown = (e: KeyboardEvent) => {\r\n if (e.key === 'Escape' && props.closeOnEscape && props.modelValue) {\r\n close()\r\n }\r\n}\r\n\r\nonMounted(() => {\r\n document.addEventListener('keydown', handleKeydown)\r\n})\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('keydown', handleKeydown)\r\n})\r\n\r\n// Lock body scroll when open\r\nwatch(\r\n () => props.modelValue,\r\n (isOpen) => {\r\n if (isOpen) {\r\n document.body.style.overflow = 'hidden'\r\n } else {\r\n document.body.style.overflow = ''\r\n }\r\n },\r\n)\r\n\r\nconst sizeClasses = computed(() => {\r\n const isHorizontal = props.position === 'left' || props.position === 'right'\r\n const sizes = {\r\n sm: isHorizontal ? 'w-64' : 'h-32',\r\n md: isHorizontal ? 'w-80' : 'h-48',\r\n lg: isHorizontal ? 'w-96' : 'h-64',\r\n xl: isHorizontal ? 'w-lg' : 'h-96',\r\n full: isHorizontal ? 'w-screen' : 'h-screen',\r\n }\r\n return sizes[props.size]\r\n})\r\n\r\nconst positionClasses = computed(() => {\r\n const base = 'fixed bg-white dark:bg-gray-800 shadow-xl flex flex-col'\r\n switch (props.position) {\r\n case 'left':\r\n return `${base} inset-y-0 left-0 ${sizeClasses.value}`\r\n case 'right':\r\n return `${base} inset-y-0 right-0 ${sizeClasses.value}`\r\n case 'top':\r\n return `${base} inset-x-0 top-0 ${sizeClasses.value}`\r\n case 'bottom':\r\n return `${base} inset-x-0 bottom-0 ${sizeClasses.value}`\r\n default:\r\n return base\r\n }\r\n})\r\n\r\nconst transformClasses = computed(() => {\r\n switch (props.position) {\r\n case 'left':\r\n return { enter: '-translate-x-full', leave: '-translate-x-full' }\r\n case 'right':\r\n return { enter: 'translate-x-full', leave: 'translate-x-full' }\r\n case 'top':\r\n return { enter: '-translate-y-full', leave: '-translate-y-full' }\r\n case 'bottom':\r\n return { enter: 'translate-y-full', leave: 'translate-y-full' }\r\n default:\r\n return { enter: '', leave: '' }\r\n }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <!-- Overlay -->\r\n <Transition\r\n enter-active-class=\"transition-opacity duration-300 ease-out\"\r\n enter-from-class=\"opacity-0\"\r\n enter-to-class=\"opacity-100\"\r\n leave-active-class=\"transition-opacity duration-200 ease-in\"\r\n leave-from-class=\"opacity-100\"\r\n leave-to-class=\"opacity-0\"\r\n >\r\n <div\r\n v-if=\"modelValue && overlay\"\r\n class=\"fixed inset-0 z-40 bg-black/50\"\r\n @click=\"handleOverlayClick\"\r\n />\r\n </Transition>\r\n\r\n <!-- Drawer -->\r\n <Transition\r\n enter-active-class=\"transition-transform duration-300 ease-out\"\r\n :enter-from-class=\"transformClasses.enter\"\r\n enter-to-class=\"translate-x-0 translate-y-0\"\r\n leave-active-class=\"transition-transform duration-200 ease-in\"\r\n leave-from-class=\"translate-x-0 translate-y-0\"\r\n :leave-to-class=\"transformClasses.leave\"\r\n >\r\n <div\r\n v-if=\"modelValue\"\r\n :class=\"positionClasses\"\r\n class=\"z-50\"\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n >\r\n <!-- Header -->\r\n <div\r\n v-if=\"title || showClose || $slots.header\"\r\n class=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\"\r\n >\r\n <slot name=\"header\">\r\n <h2 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\r\n {{ title }}\r\n </h2>\r\n </slot>\r\n <button\r\n v-if=\"showClose\"\r\n type=\"button\"\r\n class=\"p-1 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-700\"\r\n @click=\"close\"\r\n >\r\n <Icon icon=\"heroicons:x-mark\" class=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n <slot />\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n v-if=\"$slots.footer\"\r\n class=\"px-4 py-3 border-t border-gray-200 dark:border-gray-700\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </div>\r\n </Transition>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport interface BreadcrumbItem {\r\n label: string\r\n href?: string\r\n to?: string | object\r\n icon?: string\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Array of breadcrumb items */\r\n items: BreadcrumbItem[]\r\n /** Separator icon */\r\n separator?: string\r\n /** Home icon */\r\n homeIcon?: string\r\n /** Show home icon on first item */\r\n showHomeIcon?: boolean\r\n }>(),\r\n {\r\n separator: 'heroicons:chevron-right',\r\n homeIcon: 'heroicons:home',\r\n showHomeIcon: true,\r\n },\r\n)\r\n\r\ndefineEmits<{\r\n click: [item: BreadcrumbItem, index: number]\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <nav aria-label=\"Breadcrumb\">\r\n <ol class=\"flex items-center flex-wrap gap-1 text-sm\">\r\n <li\r\n v-for=\"(item, index) in items\"\r\n :key=\"index\"\r\n class=\"flex items-center\"\r\n >\r\n <!-- Separator -->\r\n <Icon\r\n v-if=\"index > 0\"\r\n :icon=\"separator\"\r\n class=\"w-4 h-4 mx-2 text-gray-400 dark:text-gray-500 shrink-0\"\r\n />\r\n\r\n <!-- Item -->\r\n <component\r\n :is=\"item.to ? 'router-link' : item.href ? 'a' : 'span'\"\r\n :to=\"item.to\"\r\n :href=\"item.href\"\r\n :class=\"[\r\n 'flex items-center gap-1.5 transition-colors',\r\n index === items.length - 1\r\n ? 'text-gray-900 dark:text-white font-medium cursor-default'\r\n : 'text-gray-500 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400',\r\n ]\"\r\n :aria-current=\"index === items.length - 1 ? 'page' : undefined\"\r\n @click=\"$emit('click', item, index)\"\r\n >\r\n <!-- Home icon for first item -->\r\n <Icon\r\n v-if=\"index === 0 && showHomeIcon\"\r\n :icon=\"item.icon || homeIcon\"\r\n class=\"w-4 h-4\"\r\n />\r\n <!-- Custom icon -->\r\n <Icon\r\n v-else-if=\"item.icon\"\r\n :icon=\"item.icon\"\r\n class=\"w-4 h-4\"\r\n />\r\n <span>{{ item.label }}</span>\r\n </component>\r\n </li>\r\n </ol>\r\n </nav>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, provide } from 'vue'\r\n\r\nexport type AccordionMode = 'single' | 'multiple'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Allow single or multiple items open */\r\n mode?: AccordionMode\r\n /** Default open items (array of keys) */\r\n defaultOpen?: string[]\r\n }>(),\r\n {\r\n mode: 'single',\r\n defaultOpen: () => [],\r\n },\r\n)\r\n\r\nconst openItems = ref<Set<string>>(new Set(props.defaultOpen))\r\n\r\nconst toggle = (key: string) => {\r\n if (openItems.value.has(key)) {\r\n openItems.value.delete(key)\r\n } else {\r\n if (props.mode === 'single') {\r\n openItems.value.clear()\r\n }\r\n openItems.value.add(key)\r\n }\r\n // Force reactivity\r\n openItems.value = new Set(openItems.value)\r\n}\r\n\r\nconst isOpen = (key: string) => openItems.value.has(key)\r\n\r\nprovide('accordion', {\r\n toggle,\r\n isOpen,\r\n})\r\n</script>\r\n\r\n<template>\r\n <div class=\"divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden\">\r\n <slot />\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport { useId } from '@/composables/useId'\r\n\r\nconst props = defineProps<{\r\n /** Unique key for this item */\r\n itemKey: string\r\n /** Title shown in header */\r\n title: string\r\n /** Optional icon */\r\n icon?: string\r\n /** Disable this item */\r\n disabled?: boolean\r\n /** Custom ID for accessibility */\r\n id?: string\r\n}>()\r\n\r\n// Generate unique IDs for accessibility\r\nconst { related } = useId({ prefix: 'accordion', id: props.id })\r\nconst headerId = computed(() => related('header'))\r\nconst panelId = computed(() => related('panel'))\r\n\r\nconst accordion = inject<{\r\n toggle: (key: string) => void\r\n isOpen: (key: string) => boolean\r\n}>('accordion')\r\n\r\nconst isOpen = computed(() => accordion?.isOpen(props.itemKey) ?? false)\r\n\r\nconst toggle = () => {\r\n if (!props.disabled) {\r\n accordion?.toggle(props.itemKey)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <div>\r\n <!-- Header -->\r\n <button\r\n :id=\"headerId\"\r\n type=\"button\"\r\n class=\"flex items-center justify-between w-full px-4 py-3 text-left transition-colors\"\r\n :class=\"[\r\n disabled\r\n ? 'bg-gray-50 text-gray-400 cursor-not-allowed dark:bg-gray-800 dark:text-gray-500'\r\n : 'bg-white hover:bg-gray-50 text-gray-900 dark:bg-gray-800 dark:hover:bg-gray-700 dark:text-white',\r\n ]\"\r\n :disabled=\"disabled\"\r\n :aria-expanded=\"isOpen\"\r\n :aria-controls=\"panelId\"\r\n @click=\"toggle\"\r\n >\r\n <span class=\"flex items-center gap-2 font-medium\">\r\n <Icon v-if=\"icon\" :icon=\"icon\" class=\"w-5 h-5\" aria-hidden=\"true\" />\r\n {{ title }}\r\n </span>\r\n <Icon\r\n icon=\"heroicons:chevron-down\"\r\n class=\"w-5 h-5 transition-transform duration-200\"\r\n :class=\"{ 'rotate-180': isOpen }\"\r\n aria-hidden=\"true\"\r\n />\r\n </button>\r\n\r\n <!-- Content -->\r\n <Transition\r\n enter-active-class=\"transition-all duration-200 ease-out\"\r\n enter-from-class=\"opacity-0 max-h-0\"\r\n enter-to-class=\"opacity-100 max-h-screen\"\r\n leave-active-class=\"transition-all duration-150 ease-in\"\r\n leave-from-class=\"opacity-100 max-h-screen\"\r\n leave-to-class=\"opacity-0 max-h-0\"\r\n >\r\n <div\r\n v-show=\"isOpen\"\r\n :id=\"panelId\"\r\n role=\"region\"\r\n :aria-labelledby=\"headerId\"\r\n class=\"overflow-hidden\"\r\n >\r\n <div class=\"px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300\">\r\n <slot />\r\n </div>\r\n </div>\r\n </Transition>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type TimelineItemStatus = 'completed' | 'current' | 'upcoming' | 'error'\r\n\r\nexport interface TimelineItem {\r\n key: string\r\n title: string\r\n description?: string\r\n date?: string\r\n icon?: string\r\n status?: TimelineItemStatus\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Array of timeline items */\r\n items: TimelineItem[]\r\n /** Orientation of the timeline */\r\n orientation?: 'vertical' | 'horizontal'\r\n }>(),\r\n {\r\n orientation: 'vertical',\r\n },\r\n)\r\n\r\nconst getStatusClasses = (status?: TimelineItemStatus) => {\r\n switch (status) {\r\n case 'completed':\r\n return {\r\n dot: 'bg-green-500',\r\n line: 'bg-green-500',\r\n icon: 'text-white',\r\n }\r\n case 'current':\r\n return {\r\n dot: 'bg-primary-500 ring-4 ring-primary-100 dark:ring-primary-900',\r\n line: 'bg-gray-200 dark:bg-gray-700',\r\n icon: 'text-white',\r\n }\r\n case 'error':\r\n return {\r\n dot: 'bg-red-500',\r\n line: 'bg-red-500',\r\n icon: 'text-white',\r\n }\r\n default:\r\n return {\r\n dot: 'bg-gray-300 dark:bg-gray-600',\r\n line: 'bg-gray-200 dark:bg-gray-700',\r\n icon: 'text-gray-500 dark:text-gray-400',\r\n }\r\n }\r\n}\r\n\r\nconst getDefaultIcon = (status?: TimelineItemStatus) => {\r\n switch (status) {\r\n case 'completed':\r\n return 'heroicons:check'\r\n case 'error':\r\n return 'heroicons:x-mark'\r\n default:\r\n return ''\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <!-- Vertical Timeline -->\r\n <div v-if=\"orientation === 'vertical'\" class=\"relative\">\r\n <div\r\n v-for=\"(item, index) in items\"\r\n :key=\"item.key\"\r\n class=\"relative pb-8 last:pb-0\"\r\n >\r\n <!-- Connecting line -->\r\n <div\r\n v-if=\"index < items.length - 1\"\r\n class=\"absolute left-4 top-8 w-0.5 h-full -ml-px\"\r\n :class=\"getStatusClasses(item.status).line\"\r\n />\r\n\r\n <div class=\"flex items-start gap-4\">\r\n <!-- Dot/Icon -->\r\n <div\r\n class=\"relative z-10 flex items-center justify-center w-8 h-8 rounded-full shrink-0\"\r\n :class=\"getStatusClasses(item.status).dot\"\r\n >\r\n <Icon\r\n v-if=\"item.icon || getDefaultIcon(item.status)\"\r\n :icon=\"item.icon || getDefaultIcon(item.status)\"\r\n class=\"w-4 h-4\"\r\n :class=\"getStatusClasses(item.status).icon\"\r\n />\r\n </div>\r\n\r\n <!-- Content -->\r\n <div class=\"flex-1 min-w-0 pt-0.5\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <h3 class=\"text-sm font-medium text-gray-900 dark:text-white\">\r\n {{ item.title }}\r\n </h3>\r\n <time\r\n v-if=\"item.date\"\r\n class=\"text-xs text-gray-500 dark:text-gray-400 whitespace-nowrap\"\r\n >\r\n {{ item.date }}\r\n </time>\r\n </div>\r\n <p\r\n v-if=\"item.description\"\r\n class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\"\r\n >\r\n {{ item.description }}\r\n </p>\r\n <slot :name=\"item.key\" :item=\"item\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Horizontal Timeline -->\r\n <div v-else class=\"flex items-start overflow-x-auto pb-4\">\r\n <div\r\n v-for=\"(item, index) in items\"\r\n :key=\"item.key\"\r\n class=\"flex flex-col items-center shrink-0\"\r\n :class=\"{ 'flex-1': index < items.length - 1 }\"\r\n >\r\n <div class=\"flex items-center w-full\">\r\n <!-- Dot/Icon -->\r\n <div\r\n class=\"relative z-10 flex items-center justify-center w-8 h-8 rounded-full shrink-0\"\r\n :class=\"getStatusClasses(item.status).dot\"\r\n >\r\n <Icon\r\n v-if=\"item.icon || getDefaultIcon(item.status)\"\r\n :icon=\"item.icon || getDefaultIcon(item.status)\"\r\n class=\"w-4 h-4\"\r\n :class=\"getStatusClasses(item.status).icon\"\r\n />\r\n </div>\r\n\r\n <!-- Connecting line -->\r\n <div\r\n v-if=\"index < items.length - 1\"\r\n class=\"flex-1 h-0.5 mx-2\"\r\n :class=\"getStatusClasses(item.status).line\"\r\n />\r\n </div>\r\n\r\n <!-- Content -->\r\n <div class=\"mt-2 text-center max-w-[120px]\">\r\n <h3 class=\"text-xs font-medium text-gray-900 dark:text-white\">\r\n {{ item.title }}\r\n </h3>\r\n <time\r\n v-if=\"item.date\"\r\n class=\"text-xs text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ item.date }}\r\n </time>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\nimport { useDarkMode } from '@/composables/useDarkMode'\r\n\r\nexport type DarkModeToggleSize = 'sm' | 'md' | 'lg'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Toggle size */\r\n size?: DarkModeToggleSize\r\n /** Light mode icon */\r\n lightIcon?: string\r\n /** Dark mode icon */\r\n darkIcon?: string\r\n /** Show label */\r\n showLabel?: boolean\r\n /** Storage key for persistence */\r\n storageKey?: string\r\n }>(),\r\n {\r\n size: 'md',\r\n lightIcon: 'lucide:sun',\r\n darkIcon: 'lucide:moon',\r\n showLabel: false,\r\n storageKey: 'dark-mode',\r\n },\r\n)\r\n\r\nconst { isDark, toggle } = useDarkMode({ storageKey: props.storageKey })\r\n\r\nconst sizeClasses: Record<DarkModeToggleSize, { button: string; icon: string }> = {\r\n sm: { button: 'p-1.5', icon: 'h-4 w-4' },\r\n md: { button: 'p-2', icon: 'h-5 w-5' },\r\n lg: { button: 'p-2.5', icon: 'h-6 w-6' },\r\n}\r\n</script>\r\n\r\n<template>\r\n <button\r\n type=\"button\"\r\n :class=\"[\r\n sizeClasses[size].button,\r\n 'inline-flex items-center gap-2 rounded-lg transition-colors',\r\n 'text-gray-600 hover:bg-gray-100 hover:text-gray-900',\r\n 'dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-100',\r\n 'focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\r\n ]\"\r\n :aria-label=\"isDark ? 'Switch to light mode' : 'Switch to dark mode'\"\r\n @click=\"toggle\"\r\n >\r\n <Icon\r\n :icon=\"isDark ? darkIcon : lightIcon\"\r\n :class=\"sizeClasses[size].icon\"\r\n />\r\n <span v-if=\"showLabel\" class=\"text-sm font-medium\">\r\n {{ isDark ? 'Dark' : 'Light' }}\r\n </span>\r\n </button>\r\n</template>\r\n"],"names":["computed","_createBlock","CardSkeleton","_openBlock","_createElementBlock","_hoisted_1","$slots","_normalizeClass","_renderSlot","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","useSlots","TextType","NumberType","DateType","BooleanType","BadgeType","TableSkeleton","_hoisted_5","_createVNode","Checkbox","_Fragment","_renderList","_createTextVNode","_toDisplayString","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_resolveDynamicComponent","_hoisted_12","CardComponent","ListSkeleton","_hoisted_6","useBreakpoints","MobileList","_withCtx","TableComponent","ref","useDropdown","watch","nextTick","index","_unref","Icon","_withModifiers","_Teleport","_Transition","resolveComponent","_mergeProps","provide","inject","_withDirectives","_normalizeStyle","_createSlots","useId","onMounted","onUnmounted","$emit","useDarkMode"],"mappings":"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"}