cisse-vue-ui 0.11.0 → 1.0.0

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 (27) hide show
  1. package/dist/DataList.vue_vue_type_script_setup_true_lang-MshUshzx.cjs.map +1 -1
  2. package/dist/DataList.vue_vue_type_script_setup_true_lang-e5XO82_b.js.map +1 -1
  3. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-BAKGRZIb.cjs → Dropdown.vue_vue_type_script_setup_true_lang-BeCEo4vl.cjs} +30 -12
  4. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BeCEo4vl.cjs.map +1 -0
  5. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-GLCX7E3C.js → Dropdown.vue_vue_type_script_setup_true_lang-DIzyh_AZ.js} +31 -13
  6. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DIzyh_AZ.js.map +1 -0
  7. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-BqwBJlv0.cjs → PageHero.vue_vue_type_script_setup_true_lang-8fMdvVcY.cjs} +2 -2
  8. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-BqwBJlv0.cjs.map → PageHero.vue_vue_type_script_setup_true_lang-8fMdvVcY.cjs.map} +1 -1
  9. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-by-P5wIB.js → PageHero.vue_vue_type_script_setup_true_lang-CeNM9vr4.js} +2 -2
  10. package/dist/{PageHero.vue_vue_type_script_setup_true_lang-by-P5wIB.js.map → PageHero.vue_vue_type_script_setup_true_lang-CeNM9vr4.js.map} +1 -1
  11. package/dist/components/core/MenuItem.vue.d.ts +12 -0
  12. package/dist/components/core/index.cjs +1 -1
  13. package/dist/components/core/index.js +1 -1
  14. package/dist/components/index.cjs +2 -2
  15. package/dist/components/index.js +2 -2
  16. package/dist/components/layout/index.cjs +1 -1
  17. package/dist/components/layout/index.js +1 -1
  18. package/dist/{index-CO3nD8zb.js → index-BNqdYSNO.js} +3 -3
  19. package/dist/{index-CO3nD8zb.js.map → index-BNqdYSNO.js.map} +1 -1
  20. package/dist/{index-DK_UojhF.cjs → index-DJ2WIWY-.cjs} +3 -3
  21. package/dist/{index-DK_UojhF.cjs.map → index-DJ2WIWY-.cjs.map} +1 -1
  22. package/dist/index.cjs +3 -3
  23. package/dist/index.js +3 -3
  24. package/dist/types/components.d.ts +10 -0
  25. package/package.json +1 -1
  26. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-BAKGRZIb.cjs.map +0 -1
  27. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-GLCX7E3C.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataList.vue_vue_type_script_setup_true_lang-MshUshzx.cjs","sources":["../src/components/core/CardComponent.vue","../src/components/core/CardWrapper.vue","../src/components/core/table/atoms/Table.vue","../src/components/core/table/atoms/Caption.vue","../src/components/core/table/atoms/Colgroup.vue","../src/components/core/table/atoms/Col.vue","../src/components/core/table/atoms/Thead.vue","../src/components/core/table/atoms/Tbody.vue","../src/components/core/table/atoms/Tfoot.vue","../src/components/core/table/atoms/Tr.vue","../src/components/core/table/atoms/Th.vue","../src/components/core/table/atoms/Td.vue","../src/components/core/table/molecules/TableHeader.vue","../src/components/core/table/molecules/TableRow.vue","../src/components/core/table/molecules/TableFooter.vue","../src/components/core/table/molecules/ExpandableRow.vue","../src/components/core/table/DataTable.vue","../src/components/core/MobileList.vue","../src/components/core/ResponsiveList.vue","../src/components/core/AutocompleteComponent.vue","../src/components/core/Menu.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","../src/components/core/StatItem.vue","../src/components/core/Stats.vue","../src/components/core/FilterTabs.vue","../src/components/core/Divider.vue","../src/components/core/datalist/DataListLabel.vue","../src/components/core/datalist/DataListValue.vue","../src/components/core/datalist/DataListItem.vue","../src/components/core/datalist/DataList.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 { computed, useSlots } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport CardSkeleton from '@/components/feedback/CardSkeleton.vue'\r\n\r\nexport type CardShadow = 'none' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type CardRounded = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg'\r\nexport type CardBorder = 'none' | 'default' | 'primary' | 'secondary'\r\nexport type CardVariant = 'default' | 'glass' | 'outline' | 'flat'\r\nexport type CardAccent = 'none' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'\r\nexport type CardImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'background'\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 /** Header icon (Iconify format) */\r\n icon?: string\r\n /** Shadow level */\r\n shadow?: CardShadow\r\n /** Border radius */\r\n rounded?: CardRounded\r\n /** Content padding (defaults to none for CardComponent compatibility) */\r\n padding?: CardPadding\r\n /** Header/footer padding (defaults to md to match CardComponent header) */\r\n headerPadding?: CardPadding\r\n /** Border style */\r\n border?: CardBorder\r\n /** Visual variant */\r\n variant?: CardVariant\r\n /** Colored accent border (top or left depending on layout) */\r\n accent?: CardAccent\r\n /** Show header divider */\r\n headerDivider?: boolean\r\n /** Show footer divider */\r\n footerDivider?: boolean\r\n /** Make card clickable with hover effects */\r\n clickable?: boolean\r\n /** Selected state (adds visual indicator) */\r\n selected?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Image URL for card media */\r\n image?: string\r\n /** Image alt text */\r\n imageAlt?: string\r\n /** Image position */\r\n imagePosition?: CardImagePosition\r\n /** Image height (for top/bottom positions) */\r\n imageHeight?: string\r\n /** Image width (for left/right positions) */\r\n imageWidth?: string\r\n /** Loading state */\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 /** Custom class for the card container */\r\n cardClass?: string\r\n /** Custom class for the header section */\r\n headerClass?: string\r\n /** Custom class for the title */\r\n titleClass?: string\r\n /** Custom class for the description */\r\n descriptionClass?: string\r\n /** Custom class for the icon wrapper */\r\n iconClass?: string\r\n /** Custom class for the icon element */\r\n iconElementClass?: string\r\n /** Custom class for the content/body */\r\n contentClass?: string\r\n /** Custom class for the footer */\r\n footerClass?: string\r\n /** Custom class for dividers */\r\n dividerClass?: string\r\n /** Custom class for the actions container */\r\n actionsClass?: string\r\n /** Custom class for the image */\r\n imageClass?: string\r\n }>(),\r\n {\r\n shadow: 'md',\r\n rounded: 'lg',\r\n padding: 'none',\r\n headerPadding: 'md',\r\n border: 'none',\r\n variant: 'default',\r\n accent: 'none',\r\n headerDivider: true,\r\n footerDivider: true,\r\n clickable: false,\r\n selected: false,\r\n disabled: false,\r\n imagePosition: 'top',\r\n imageHeight: '200px',\r\n imageWidth: '200px',\r\n loading: false,\r\n loadingLines: 3,\r\n loadingAvatar: false,\r\n loadingActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst slots = useSlots()\r\n\r\nconst hasHeader = computed(\r\n () =>\r\n props.title ||\r\n props.description ||\r\n props.icon ||\r\n slots.header ||\r\n slots.title ||\r\n slots.description ||\r\n slots.icon ||\r\n slots.actions\r\n)\r\n\r\nconst hasFooter = computed(() => !!slots.footer)\r\nconst hasImage = computed(() => !!props.image || !!slots.image)\r\nconst isHorizontal = computed(() => props.imagePosition === 'left' || props.imagePosition === 'right')\r\n\r\n// Shadow classes\r\nconst shadowClasses = computed(() => {\r\n const map: Record<CardShadow, string> = {\r\n none: '',\r\n sm: 'shadow-sm',\r\n md: 'shadow-md',\r\n lg: 'shadow-lg',\r\n xl: 'shadow-xl',\r\n }\r\n return map[props.shadow]\r\n})\r\n\r\n// Rounded classes\r\nconst roundedClasses = computed(() => {\r\n const map: Record<CardRounded, string> = {\r\n none: 'rounded-none',\r\n sm: 'rounded-sm',\r\n md: 'rounded-md',\r\n lg: 'rounded-lg',\r\n xl: 'rounded-xl',\r\n full: 'rounded-3xl',\r\n }\r\n return map[props.rounded]\r\n})\r\n\r\n// Padding classes for content\r\nconst paddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'p-3',\r\n md: 'p-5',\r\n lg: 'p-6',\r\n }\r\n return map[props.padding]\r\n})\r\n\r\n// Header padding classes (uses headerPadding prop)\r\nconst headerPaddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'px-3 py-2',\r\n md: 'px-5 py-3',\r\n lg: 'px-6 py-4',\r\n }\r\n return map[props.headerPadding]\r\n})\r\n\r\n// Footer padding classes (uses headerPadding prop for consistency)\r\nconst footerPaddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'px-3 py-2',\r\n md: 'px-5 py-3',\r\n lg: 'px-6 py-4',\r\n }\r\n return map[props.headerPadding]\r\n})\r\n\r\n// Border classes\r\nconst borderClasses = computed(() => {\r\n const map: Record<CardBorder, string> = {\r\n none: '',\r\n default: 'border border-gray-200 dark:border-gray-700',\r\n primary: 'border border-primary-500 dark:border-primary-400',\r\n secondary: 'border border-secondary-500 dark:border-secondary-400',\r\n }\r\n return map[props.border]\r\n})\r\n\r\n// Variant classes\r\nconst variantClasses = computed(() => {\r\n const map: Record<CardVariant, string> = {\r\n default: 'bg-white dark:bg-slate-950',\r\n glass: 'bg-white/15 backdrop-blur-sm',\r\n outline: 'bg-transparent',\r\n flat: 'bg-gray-50 dark:bg-slate-900',\r\n }\r\n return map[props.variant]\r\n})\r\n\r\n// Accent classes\r\nconst accentClasses = computed(() => {\r\n if (props.accent === 'none') return ''\r\n\r\n const colorMap: Record<Exclude<CardAccent, 'none'>, string> = {\r\n primary: 'border-primary-500',\r\n secondary: 'border-secondary-500',\r\n success: 'border-emerald-500',\r\n warning: 'border-amber-500',\r\n danger: 'border-red-500',\r\n info: 'border-blue-500',\r\n }\r\n\r\n const position = isHorizontal.value ? 'border-l-4' : 'border-t-4'\r\n return `${position} ${colorMap[props.accent]}`\r\n})\r\n\r\n// Clickable/interactive classes\r\nconst interactiveClasses = computed(() => {\r\n if (props.disabled) {\r\n return 'opacity-60 cursor-not-allowed'\r\n }\r\n\r\n if (props.clickable) {\r\n return 'cursor-pointer transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 active:translate-y-0 active:shadow-md'\r\n }\r\n\r\n return ''\r\n})\r\n\r\n// Selected state classes\r\nconst selectedClasses = computed(() => {\r\n if (!props.selected) return ''\r\n return 'ring-2 ring-primary-500 ring-offset-2 dark:ring-offset-slate-900'\r\n})\r\n\r\n// Divider classes\r\nconst computedDividerClass = computed(\r\n () => props.dividerClass || 'border-gray-200 dark:border-gray-700'\r\n)\r\n\r\n// Title classes\r\nconst computedTitleClass = computed(\r\n () => props.titleClass || 'text-gray-800 dark:text-gray-200'\r\n)\r\n\r\n// Description classes\r\nconst computedDescriptionClass = computed(\r\n () => props.descriptionClass || 'text-gray-600 dark:text-gray-400'\r\n)\r\n\r\n// Icon wrapper classes\r\nconst computedIconClass = computed(\r\n () =>\r\n props.iconClass ||\r\n 'flex items-center justify-center size-10 rounded-lg bg-primary-100 dark:bg-primary-900/30'\r\n)\r\n\r\n// Icon element classes\r\nconst computedIconElementClass = computed(\r\n () => props.iconElementClass || 'size-5 text-primary-600 dark:text-primary-400'\r\n)\r\n\r\n// Image container classes based on position\r\nconst imageContainerClasses = computed(() => {\r\n const base = 'overflow-hidden flex-shrink-0'\r\n\r\n switch (props.imagePosition) {\r\n case 'left':\r\n return `${base} rounded-l-lg`\r\n case 'right':\r\n return `${base} rounded-r-lg`\r\n case 'top':\r\n return `${base} rounded-t-lg`\r\n case 'bottom':\r\n return `${base} rounded-b-lg`\r\n case 'background':\r\n return 'absolute inset-0'\r\n default:\r\n return base\r\n }\r\n})\r\n\r\n// Image style\r\nconst imageStyle = computed(() => {\r\n if (props.imagePosition === 'background') {\r\n return {}\r\n }\r\n\r\n if (isHorizontal.value) {\r\n return { width: props.imageWidth }\r\n }\r\n\r\n return { height: props.imageHeight }\r\n})\r\n\r\n// Handle click\r\nconst handleClick = (event: MouseEvent | KeyboardEvent) => {\r\n if (props.disabled) return\r\n if (props.clickable) {\r\n emit('click', event as MouseEvent)\r\n }\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 <!-- Card Content -->\r\n <div\r\n v-else\r\n :class=\"[\r\n 'overflow-hidden relative',\r\n isHorizontal ? 'flex' : 'flex flex-col',\r\n imagePosition === 'right' && 'flex-row-reverse',\r\n shadowClasses,\r\n roundedClasses,\r\n borderClasses,\r\n variantClasses,\r\n accentClasses,\r\n interactiveClasses,\r\n selectedClasses,\r\n cardClass,\r\n ]\"\r\n :role=\"clickable ? 'button' : undefined\"\r\n :tabindex=\"clickable && !disabled ? 0 : undefined\"\r\n @click=\"handleClick\"\r\n @keydown.enter=\"handleClick\"\r\n @keydown.space.prevent=\"handleClick\"\r\n >\r\n <!-- Background Image -->\r\n <div\r\n v-if=\"hasImage && imagePosition === 'background'\"\r\n :class=\"imageContainerClasses\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n <div class=\"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent\" />\r\n </div>\r\n\r\n <!-- Left/Top Image -->\r\n <div\r\n v-if=\"hasImage && (imagePosition === 'left' || imagePosition === 'top')\"\r\n :class=\"imageContainerClasses\"\r\n :style=\"imageStyle\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div :class=\"['flex flex-col flex-1 min-w-0', imagePosition === 'background' && 'relative z-10']\">\r\n <!-- Custom header slot (replaces standard header) -->\r\n <div\r\n v-if=\"$slots.header\"\r\n :class=\"[\r\n headerDivider && 'border-b',\r\n computedDividerClass,\r\n headerClass,\r\n ]\"\r\n >\r\n <slot name=\"header\" />\r\n </div>\r\n\r\n <!-- Standard header with icon/title/description/actions -->\r\n <div\r\n v-else-if=\"hasHeader\"\r\n :class=\"[\r\n 'flex items-center justify-between gap-4',\r\n headerPaddingClasses,\r\n headerDivider && 'border-b',\r\n computedDividerClass,\r\n headerClass,\r\n imagePosition === 'background' && 'text-white border-white/20',\r\n ]\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <!-- Icon -->\r\n <div v-if=\"icon || $slots.icon\" :class=\"computedIconClass\">\r\n <slot name=\"icon\">\r\n <Icon v-if=\"icon\" :icon=\"icon\" :class=\"computedIconElementClass\" />\r\n </slot>\r\n </div>\r\n\r\n <!-- Title & Description -->\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n v-if=\"title || $slots.title\"\r\n :class=\"[\r\n 'text-md font-semibold',\r\n imagePosition === 'background' ? 'text-white' : computedTitleClass,\r\n ]\"\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=\"[\r\n 'text-sm font-normal',\r\n imagePosition === 'background' ? 'text-white/80' : computedDescriptionClass,\r\n ]\"\r\n >\r\n <slot name=\"description\">\r\n {{ description }}\r\n </slot>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div v-if=\"$slots.actions\" :class=\"['flex gap-2', actionsClass]\">\r\n <slot name=\"actions\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div :class=\"['flex-1', paddingClasses, contentClass]\">\r\n <slot />\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n v-if=\"hasFooter\"\r\n :class=\"[\r\n footerDivider && 'border-t',\r\n computedDividerClass,\r\n footerPaddingClasses,\r\n footerClass,\r\n imagePosition === 'background' && 'text-white border-white/20',\r\n ]\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Right/Bottom Image -->\r\n <div\r\n v-if=\"hasImage && (imagePosition === 'right' || imagePosition === 'bottom')\"\r\n :class=\"imageContainerClasses\"\r\n :style=\"imageStyle\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\">\r\nimport type { InjectionKey } from 'vue'\r\n\r\nexport interface TableContext {\r\n striped: boolean\r\n bordered: boolean\r\n hover: boolean\r\n compact: boolean\r\n stickyHeader: boolean\r\n}\r\n\r\nexport const TableContextKey: InjectionKey<TableContext> = Symbol('TableContext')\r\n</script>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { computed, provide, reactive, toRefs, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Enable alternating row colors */\r\n striped?: boolean\r\n /** Show cell borders */\r\n bordered?: boolean\r\n /** Enable row hover effect */\r\n hover?: boolean\r\n /** Use compact padding */\r\n compact?: boolean\r\n /** Make header sticky on scroll */\r\n stickyHeader?: boolean\r\n }>(),\r\n {\r\n striped: false,\r\n bordered: false,\r\n hover: true,\r\n compact: false,\r\n stickyHeader: false,\r\n }\r\n)\r\n\r\nconst tableClasses = computed(() => [\r\n 'w-full text-left',\r\n props.bordered ? 'border border-gray-200 dark:border-gray-700' : '',\r\n])\r\n\r\nconst wrapperClasses = computed(() => [\r\n 'overflow-hidden',\r\n props.stickyHeader ? 'max-h-[600px] overflow-y-auto' : '',\r\n])\r\n\r\n// Provide reactive context to child components\r\nconst { striped, bordered, hover, compact, stickyHeader } = toRefs(props)\r\nprovide(TableContextKey, reactive({\r\n striped,\r\n bordered,\r\n hover,\r\n compact,\r\n stickyHeader,\r\n}) as TableContext)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"wrapperClasses\">\r\n <div class=\"overflow-x-auto\">\r\n <table\r\n v-bind=\"attrs\"\r\n :class=\"tableClasses\"\r\n >\r\n <slot />\r\n </table>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Position of the caption */\r\n position?: 'top' | 'bottom'\r\n /** Visually hide caption but keep for screen readers */\r\n srOnly?: boolean\r\n }>(),\r\n {\r\n position: 'top',\r\n srOnly: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n</script>\r\n\r\n<template>\r\n <caption\r\n v-bind=\"attrs\"\r\n :class=\"[\r\n position === 'bottom' ? 'caption-bottom' : 'caption-top',\r\n srOnly ? 'sr-only' : 'py-2 text-sm text-gray-600 dark:text-gray-400',\r\n ]\"\r\n >\r\n <slot />\r\n </caption>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst attrs = useAttrs()\r\n</script>\r\n\r\n<template>\r\n <colgroup v-bind=\"attrs\">\r\n <slot />\r\n </colgroup>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = defineProps<{\r\n /** Number of columns to span */\r\n span?: number | string\r\n /** Column width */\r\n width?: string\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst colStyles = computed(() => ({\r\n width: props.width,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <col\r\n v-bind=\"attrs\"\r\n :span=\"span\"\r\n :style=\"colStyles\"\r\n />\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst theadClasses = computed(() => [\r\n 'text-sm font-semibold text-gray-600 uppercase dark:text-gray-400',\r\n context?.bordered\r\n ? 'border-b border-gray-200 dark:border-gray-700'\r\n : 'border-b border-black/10 dark:border-white/10',\r\n context?.stickyHeader ? 'sticky top-0 z-10' : '',\r\n])\r\n</script>\r\n\r\n<template>\r\n <thead\r\n v-bind=\"attrs\"\r\n :class=\"theadClasses\"\r\n class=\"bg-black/5 dark:bg-white/5\"\r\n >\r\n <slot />\r\n </thead>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst tbodyClasses = computed(() => [\r\n 'font-medium',\r\n context?.bordered\r\n ? 'divide-y divide-gray-200 dark:divide-gray-700'\r\n : 'divide-y divide-black/10 dark:divide-white/10',\r\n])\r\n</script>\r\n\r\n<template>\r\n <tbody\r\n v-bind=\"attrs\"\r\n :class=\"tbodyClasses\"\r\n >\r\n <slot />\r\n </tbody>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst tfootClasses = computed(() => [\r\n 'text-sm font-medium text-gray-600 dark:text-gray-400',\r\n context?.bordered\r\n ? 'border-t border-gray-200 dark:border-gray-700'\r\n : 'border-t border-black/10 dark:border-white/10',\r\n])\r\n</script>\r\n\r\n<template>\r\n <tfoot\r\n v-bind=\"attrs\"\r\n :class=\"tfootClasses\"\r\n class=\"bg-black/5 dark:bg-white/5\"\r\n >\r\n <slot />\r\n </tfoot>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Whether the row is selected */\r\n selected?: boolean\r\n /** Make the row clickable with hover cursor */\r\n clickable?: boolean\r\n /** Disable the row */\r\n disabled?: boolean\r\n /** Whether this is an even row (for striped tables, auto-detected if not provided) */\r\n even?: boolean\r\n }>(),\r\n {\r\n selected: false,\r\n clickable: false,\r\n disabled: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when the row is clicked (if clickable) */\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst rowClasses = computed(() => [\r\n 'transition-colors',\r\n // Hover effect\r\n context?.hover && !props.disabled ? 'hover:bg-black/5 dark:hover:bg-white/5' : '',\r\n // Selected state\r\n props.selected ? 'bg-primary-50 dark:bg-primary-900/20' : '',\r\n // Striped (only apply if not selected)\r\n context?.striped && props.even && !props.selected ? 'bg-black/[0.02] dark:bg-white/[0.02]' : '',\r\n // Clickable\r\n props.clickable && !props.disabled ? 'cursor-pointer' : '',\r\n // Disabled\r\n props.disabled ? 'opacity-50 cursor-not-allowed' : '',\r\n])\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n if (props.clickable && !props.disabled) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <tr\r\n v-bind=\"attrs\"\r\n :class=\"rowClasses\"\r\n @click=\"handleClick\"\r\n >\r\n <slot />\r\n </tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\nexport type SortDirection = 'asc' | 'desc'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Enable sorting for this column */\r\n sortable?: boolean\r\n /** Whether this column is currently sorted */\r\n sorted?: boolean\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Text alignment */\r\n align?: 'left' | 'center' | 'right'\r\n /** Fixed width (e.g., '200px', '20%') */\r\n width?: string\r\n /** Minimum width */\r\n minWidth?: string\r\n /** Maximum width */\r\n maxWidth?: string\r\n /** Make this column sticky (for horizontal scroll) */\r\n sticky?: boolean\r\n /** Sticky position from left (for multiple sticky columns) */\r\n stickyLeft?: string\r\n /** Column span */\r\n colspan?: number | string\r\n /** Row span */\r\n rowspan?: number | string\r\n /** Scope attribute for accessibility (col, row, colgroup, rowgroup) */\r\n scope?: 'col' | 'row' | 'colgroup' | 'rowgroup'\r\n /** Enable column resizing */\r\n resizable?: boolean\r\n /** Whether this column is currently being resized */\r\n resizing?: boolean\r\n }>(),\r\n {\r\n sortable: false,\r\n sorted: false,\r\n sortDirection: 'asc',\r\n align: 'left',\r\n sticky: false,\r\n stickyLeft: '0',\r\n scope: 'col',\r\n resizable: false,\r\n resizing: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when sortable header is clicked */\r\n sort: []\r\n /** Emitted when resize handle is dragged */\r\n resizeStart: [event: MouseEvent | TouchEvent]\r\n}>()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst thClasses = computed(() => [\r\n // Padding\r\n context?.compact ? 'px-2 py-2' : 'px-3 py-3',\r\n // Alignment\r\n props.align === 'center' ? 'text-center' : props.align === 'right' ? 'text-right' : 'text-left',\r\n // Sortable hover\r\n props.sortable ? 'cursor-pointer select-none hover:bg-black/5 dark:hover:bg-white/5' : '',\r\n // Border for bordered tables\r\n context?.bordered ? 'border-r border-gray-200 dark:border-gray-700 last:border-r-0' : '',\r\n // Sticky column\r\n props.sticky ? 'sticky bg-black/5 dark:bg-white/5 z-20' : '',\r\n // Resizable\r\n props.resizable ? 'relative' : '',\r\n])\r\n\r\nconst thStyles = computed(() => ({\r\n width: props.width,\r\n minWidth: props.minWidth,\r\n maxWidth: props.maxWidth,\r\n left: props.sticky ? props.stickyLeft : undefined,\r\n}))\r\n\r\nconst handleSort = () => {\r\n if (props.sortable) {\r\n emit('sort')\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <th\r\n v-bind=\"attrs\"\r\n :class=\"thClasses\"\r\n :style=\"thStyles\"\r\n :colspan=\"colspan\"\r\n :rowspan=\"rowspan\"\r\n :scope=\"scope\"\r\n :aria-sort=\"sortable ? (sorted ? (sortDirection === 'asc' ? 'ascending' : 'descending') : 'none') : undefined\"\r\n @click=\"handleSort\"\r\n >\r\n <div\r\n class=\"flex items-center gap-1\"\r\n :class=\"{\r\n 'justify-center': align === 'center',\r\n 'justify-end': align === 'right',\r\n }\"\r\n >\r\n <slot />\r\n <!-- Sort indicator -->\r\n <svg\r\n v-if=\"sortable\"\r\n :class=\"[\r\n 'size-4 transition-colors flex-shrink-0',\r\n sorted ? '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=\"sorted && 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=\"sorted && 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 <!-- Resize handle -->\r\n <div\r\n v-if=\"resizable\"\r\n :class=\"[\r\n 'absolute top-0 right-0 bottom-0 w-1 cursor-col-resize select-none',\r\n 'hover:bg-primary-400 dark:hover:bg-primary-500',\r\n 'transition-colors',\r\n resizing ? 'bg-primary-500' : 'bg-transparent',\r\n ]\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n tabindex=\"-1\"\r\n @mousedown.stop=\"emit('resizeStart', $event)\"\r\n @touchstart.stop=\"emit('resizeStart', $event)\"\r\n />\r\n </th>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Text alignment */\r\n align?: 'left' | 'center' | 'right'\r\n /** Whether this is the main/primary column */\r\n main?: boolean\r\n /** Additional CSS classes */\r\n className?: string\r\n /** Truncate text with ellipsis */\r\n truncate?: boolean\r\n /** Fixed width (e.g., '200px', '20%') */\r\n width?: string\r\n /** Make this column sticky (for horizontal scroll) */\r\n sticky?: boolean\r\n /** Sticky position from left (for multiple sticky columns) */\r\n stickyLeft?: string\r\n /** Column span */\r\n colspan?: number | string\r\n /** Row span */\r\n rowspan?: number | string\r\n }>(),\r\n {\r\n align: 'left',\r\n main: false,\r\n truncate: false,\r\n sticky: false,\r\n stickyLeft: '0',\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst tdClasses = computed(() => [\r\n // Padding\r\n context?.compact ? 'px-2 py-2' : 'px-3 py-4',\r\n // Alignment\r\n props.align === 'center' ? 'text-center' : props.align === 'right' ? 'text-right' : 'text-left',\r\n // Main column styling\r\n props.main\r\n ? 'text-sm font-semibold text-gray-900 dark:text-gray-100'\r\n : 'text-xs font-medium text-gray-600 dark:text-gray-400',\r\n // Truncate\r\n props.truncate ? 'truncate' : '',\r\n // Border for bordered tables\r\n context?.bordered ? 'border-r border-gray-200 dark:border-gray-700 last:border-r-0' : '',\r\n // Sticky column\r\n props.sticky ? 'sticky bg-white dark:bg-gray-900 z-10' : '',\r\n // Custom className\r\n props.className || '',\r\n])\r\n\r\nconst tdStyles = computed(() => ({\r\n width: props.width,\r\n maxWidth: props.truncate ? props.width || '200px' : undefined,\r\n left: props.sticky ? props.stickyLeft : undefined,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <td\r\n v-bind=\"attrs\"\r\n :class=\"tdClasses\"\r\n :style=\"tdStyles\"\r\n :colspan=\"colspan\"\r\n :rowspan=\"rowspan\"\r\n >\r\n <slot />\r\n </td>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Th from '../atoms/Th.vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\r\nimport type { SortDirection } from '../atoms/Th.vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Column definitions */\r\n columns: Property[]\r\n /** Enable selection column */\r\n selectable?: boolean\r\n /** Whether all items are selected */\r\n allSelected?: boolean\r\n /** Whether some items are selected (indeterminate state) */\r\n someSelected?: boolean\r\n /** Number of selectable items (for disabling checkbox when 0) */\r\n selectableCount?: number\r\n /** Current sort column */\r\n sortBy?: string\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Show action column */\r\n showActions?: boolean\r\n }>(),\r\n {\r\n selectable: false,\r\n allSelected: false,\r\n someSelected: false,\r\n selectableCount: 0,\r\n showActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when select all checkbox is toggled */\r\n selectAll: []\r\n /** Emitted when a sortable column header is clicked */\r\n sort: [column: string, direction: SortDirection]\r\n}>()\r\n\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</script>\r\n\r\n<template>\r\n <Tr>\r\n <!-- Selection column -->\r\n <Th\r\n v-if=\"selectable\"\r\n width=\"48px\"\r\n >\r\n <Checkbox\r\n :model-value=\"allSelected\"\r\n :indeterminate=\"someSelected\"\r\n :disabled=\"selectableCount === 0\"\r\n @update:model-value=\"emit('selectAll')\"\r\n />\r\n </Th>\r\n\r\n <!-- Data columns -->\r\n <Th\r\n v-for=\"column in columns\"\r\n :key=\"column.name\"\r\n :sortable=\"column.sortable\"\r\n :sorted=\"sortBy === column.name\"\r\n :sort-direction=\"sortDirection\"\r\n :align=\"column.align\"\r\n :width=\"column.width\"\r\n :min-width=\"column.minWidth\"\r\n :max-width=\"column.maxWidth\"\r\n @sort=\"handleSort(column)\"\r\n >\r\n <slot\r\n :name=\"'header-' + column.name\"\r\n :column=\"column\"\r\n >\r\n {{ column.label ?? column.name }}\r\n </slot>\r\n </Th>\r\n\r\n <!-- Actions column -->\r\n <Th\r\n v-if=\"showActions\"\r\n align=\"right\"\r\n width=\"100px\"\r\n />\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport type { Component } from 'vue'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\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\n\r\ntype ItemType = { id: number | string; [key: string]: unknown }\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** The data item for this row */\r\n item: ItemType\r\n /** Column definitions */\r\n columns: Property[]\r\n /** Enable selection for this row */\r\n selectable?: boolean\r\n /** Whether this row is selected */\r\n selected?: boolean\r\n /** Whether this row can be selected */\r\n canSelect?: boolean\r\n /** Make the row clickable */\r\n clickable?: boolean\r\n /** Whether this is an even row (for striped tables) */\r\n even?: boolean\r\n /** Show action column */\r\n showActions?: boolean\r\n }>(),\r\n {\r\n selectable: false,\r\n selected: false,\r\n canSelect: true,\r\n clickable: false,\r\n even: false,\r\n showActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when the row checkbox is toggled */\r\n select: []\r\n /** Emitted when the row is clicked (if clickable) */\r\n click: [event: MouseEvent]\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// 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</script>\r\n\r\n<template>\r\n <Tr\r\n :selected=\"selected\"\r\n :clickable=\"clickable\"\r\n :even=\"even\"\r\n @click=\"(e) => emit('click', e)\"\r\n >\r\n <!-- Selection cell -->\r\n <Td\r\n v-if=\"selectable\"\r\n width=\"48px\"\r\n >\r\n <Checkbox\r\n v-if=\"canSelect\"\r\n :model-value=\"selected\"\r\n @update:model-value=\"emit('select')\"\r\n />\r\n </Td>\r\n\r\n <!-- Data cells -->\r\n <Td\r\n v-for=\"column in columns\"\r\n :key=\"column.name\"\r\n :align=\"column.align\"\r\n :main=\"column.main\"\r\n :class-name=\"column.className\"\r\n :truncate=\"column.truncate\"\r\n :width=\"column.width\"\r\n >\r\n <slot\r\n :name=\"'cell-' + column.name\"\r\n :item=\"item\"\r\n :value=\"getItemValue(item, column)\"\r\n :column=\"column\"\r\n >\r\n <component\r\n :is=\"getTypeComponent(column.type || 'text')\"\r\n :value=\"getItemValue(item, column)\"\r\n />\r\n </slot>\r\n </Td>\r\n\r\n <!-- Action cell -->\r\n <Td\r\n v-if=\"showActions\"\r\n align=\"right\"\r\n >\r\n <div class=\"flex items-center justify-end gap-2\">\r\n <slot\r\n name=\"actions\"\r\n :item=\"item\"\r\n />\r\n </div>\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\n\r\ndefineProps<{\r\n /** Number of columns to span */\r\n colSpan?: number\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <Tr>\r\n <Td\r\n :colspan=\"colSpan\"\r\n class=\"text-center\"\r\n >\r\n <slot />\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed, useAttrs } from 'vue'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Number of columns in the table (for colspan on expanded content) */\r\n colspan: number\r\n /** Whether the row is initially expanded */\r\n defaultExpanded?: boolean\r\n /** Control expanded state externally (use undefined for uncontrolled) */\r\n expanded?: boolean | undefined\r\n /** Whether the row is selected */\r\n selected?: boolean\r\n /** Whether the row is disabled */\r\n disabled?: boolean\r\n /** Whether clicking the row toggles expansion */\r\n expandOnRowClick?: boolean\r\n }>(),\r\n {\r\n defaultExpanded: false,\r\n expanded: undefined,\r\n expandOnRowClick: false,\r\n selected: false,\r\n disabled: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when expanded state changes */\r\n 'update:expanded': [value: boolean]\r\n /** Emitted when the row is clicked */\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\n\r\n// Internal expanded state (used when not controlled externally)\r\nconst internalExpanded = ref(props.defaultExpanded)\r\n\r\n// Use external expanded if provided (not undefined), otherwise use internal\r\nconst isExpanded = computed({\r\n get: () => props.expanded !== undefined ? props.expanded : internalExpanded.value,\r\n set: (value) => {\r\n internalExpanded.value = value\r\n emit('update:expanded', value)\r\n },\r\n})\r\n\r\nconst toggle = () => {\r\n if (!props.disabled) {\r\n isExpanded.value = !isExpanded.value\r\n }\r\n}\r\n\r\nconst handleRowClick = (event: MouseEvent) => {\r\n emit('click', event)\r\n if (props.expandOnRowClick) {\r\n toggle()\r\n }\r\n}\r\n\r\n// Expose toggle method for external use\r\ndefineExpose({ toggle, isExpanded })\r\n</script>\r\n\r\n<template>\r\n <Tr\r\n v-bind=\"attrs\"\r\n :selected=\"selected\"\r\n :disabled=\"disabled\"\r\n clickable\r\n @click=\"handleRowClick\"\r\n >\r\n <!-- Expand toggle cell -->\r\n <Td\r\n width=\"40px\"\r\n class=\"!p-2\"\r\n >\r\n <button\r\n type=\"button\"\r\n :disabled=\"disabled\"\r\n class=\"flex size-6 items-center justify-center rounded transition-colors hover:bg-black/10 dark:hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed\"\r\n :aria-expanded=\"isExpanded\"\r\n aria-label=\"Toggle row details\"\r\n @click.stop=\"toggle\"\r\n >\r\n <svg\r\n class=\"size-4 transition-transform\"\r\n :class=\"{ 'rotate-90': isExpanded }\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\r\n </svg>\r\n </button>\r\n </Td>\r\n <!-- Row content -->\r\n <slot name=\"row\" />\r\n </Tr>\r\n\r\n <!-- Expanded content row -->\r\n <Tr\r\n v-if=\"isExpanded\"\r\n class=\"bg-gray-50 dark:bg-gray-800/50\"\r\n >\r\n <Td\r\n :colspan=\"colspan + 1\"\r\n class=\"!p-0\"\r\n >\r\n <div class=\"p-4\">\r\n <slot name=\"expanded\" />\r\n </div>\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport { computed, useSlots, type Slots } from 'vue'\r\nimport Table from './atoms/Table.vue'\r\nimport Thead from './atoms/Thead.vue'\r\nimport Tbody from './atoms/Tbody.vue'\r\nimport TableHeader from './molecules/TableHeader.vue'\r\nimport TableRow from './molecules/TableRow.vue'\r\nimport TableSkeleton from '@/components/feedback/TableSkeleton.vue'\r\nimport PaginationControls from '@/components/feedback/PaginationControls.vue'\r\nimport { usePagination } from '@/composables'\r\nimport type { SortDirection } from './atoms/Th.vue'\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 */\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 /** Whether there is an error to display */\r\n error?: boolean\r\n /** Error message to display (if error slot not provided) */\r\n errorMessage?: string\r\n /** Enable alternating row colors */\r\n striped?: boolean\r\n /** Show cell borders */\r\n bordered?: boolean\r\n /** Enable row hover effect */\r\n hover?: boolean\r\n /** Use compact padding */\r\n compact?: boolean\r\n /** Make header sticky on scroll */\r\n stickyHeader?: boolean\r\n /** Make rows clickable */\r\n clickableRows?: boolean\r\n /** Enable client-side pagination */\r\n paginated?: boolean\r\n /** Number of items per page */\r\n pageSize?: number\r\n /** Available page size options */\r\n pageSizeOptions?: number[]\r\n /** Show page size selector */\r\n showPageSize?: boolean\r\n /** Current page (1-indexed, for controlled pagination) */\r\n currentPage?: number\r\n /** Total items (for server-side pagination) */\r\n totalItems?: number\r\n }>(),\r\n {\r\n selectable: false,\r\n keyField: 'id',\r\n loading: false,\r\n loadingRows: 5,\r\n error: false,\r\n errorMessage: 'An error occurred while loading data.',\r\n striped: false,\r\n bordered: false,\r\n hover: true,\r\n compact: false,\r\n stickyHeader: false,\r\n clickableRows: false,\r\n paginated: false,\r\n pageSize: 10,\r\n pageSizeOptions: () => [10, 20, 50, 100],\r\n showPageSize: true,\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 /** Emitted when a row is clicked (if clickableRows is true) */\r\n rowClick: [item: ItemType, event: MouseEvent]\r\n /** Emitted when page changes */\r\n 'update:currentPage': [page: number]\r\n /** Emitted when page size changes */\r\n 'update:pageSize': [size: number]\r\n}>()\r\n\r\n// Filter out hidden properties\r\nconst visibleProperties = computed(() => props.properties.filter((p) => !p.hidden))\r\n\r\n// Pagination\r\nconst {\r\n currentPage: internalPage,\r\n pageSize: internalPageSize,\r\n totalPages,\r\n paginatedItems,\r\n setPageSize: setInternalPageSize,\r\n goToPage,\r\n} = usePagination({\r\n items: computed(() => props.items),\r\n pageSize: props.pageSize,\r\n initialPage: props.currentPage ?? 1,\r\n})\r\n\r\n// Support controlled or uncontrolled pagination\r\nconst effectivePage = computed(() => props.currentPage ?? internalPage.value)\r\nconst effectivePageSize = computed(() => props.pageSize ?? internalPageSize.value)\r\n\r\n// For server-side pagination, use totalItems prop if provided\r\nconst effectiveTotalPages = computed(() => {\r\n if (props.totalItems !== undefined) {\r\n return Math.ceil(props.totalItems / effectivePageSize.value)\r\n }\r\n return totalPages.value\r\n})\r\n\r\n// Items to display (paginated or all)\r\nconst displayItems = computed(() => {\r\n if (!props.paginated) return props.items\r\n // For server-side pagination (when totalItems is provided), use items directly\r\n if (props.totalItems !== undefined) return props.items\r\n return paginatedItems.value\r\n})\r\n\r\nconst handlePageChange = (page: number) => {\r\n goToPage(page)\r\n emit('update:currentPage', page)\r\n}\r\n\r\nconst handlePageSizeChange = (size: number) => {\r\n setInternalPageSize(size)\r\n emit('update:pageSize', size)\r\n}\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// 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 handleRowClick = (item: ItemType, event: MouseEvent) => {\r\n if (props.clickableRows) {\r\n emit('rowClick', item, event)\r\n }\r\n}\r\n\r\nconst hasActionSlot = computed((): boolean => !!slots.action)\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 <!-- Error State -->\r\n <div\r\n v-else-if=\"error\"\r\n class=\"flex flex-col items-center justify-center py-12 text-center\"\r\n >\r\n <slot name=\"error\">\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <svg\r\n class=\"size-12 text-red-400\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"1.5\"\r\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\r\n />\r\n </svg>\r\n <p class=\"text-sm text-gray-600 dark:text-gray-400\">{{ errorMessage }}</p>\r\n </div>\r\n </slot>\r\n </div>\r\n\r\n <!-- Content -->\r\n <Table\r\n v-else-if=\"items && items.length > 0\"\r\n :striped=\"striped\"\r\n :bordered=\"bordered\"\r\n :hover=\"hover\"\r\n :compact=\"compact\"\r\n :sticky-header=\"stickyHeader\"\r\n >\r\n <Thead>\r\n <TableHeader\r\n :columns=\"visibleProperties\"\r\n :selectable=\"selectable\"\r\n :all-selected=\"allSelected\"\r\n :some-selected=\"someSelected\"\r\n :selectable-count=\"selectableItems.length\"\r\n :sort-by=\"sortBy\"\r\n :sort-direction=\"sortDirection\"\r\n :show-actions=\"hasActionSlot\"\r\n @select-all=\"emit('selectAll')\"\r\n @sort=\"(col, dir) => emit('sort', col, dir)\"\r\n >\r\n <!-- Forward header slots -->\r\n <template\r\n v-for=\"column in visibleProperties\"\r\n :key=\"'header-' + column.name\"\r\n #[`header-${column.name}`]=\"slotProps\"\r\n >\r\n <slot\r\n :name=\"'header-' + column.name\"\r\n v-bind=\"slotProps\"\r\n />\r\n </template>\r\n </TableHeader>\r\n </Thead>\r\n\r\n <Tbody>\r\n <TableRow\r\n v-for=\"(item, index) in displayItems\"\r\n :key=\"getKey(item)\"\r\n :item=\"item\"\r\n :columns=\"visibleProperties\"\r\n :selectable=\"selectable\"\r\n :selected=\"isSelected(item)\"\r\n :can-select=\"isSelectable(item)\"\r\n :clickable=\"clickableRows\"\r\n :even=\"index % 2 === 1\"\r\n :show-actions=\"hasActionSlot\"\r\n @select=\"handleSelect(item)\"\r\n @click=\"(e) => handleRowClick(item, e)\"\r\n >\r\n <!-- Forward cell slots -->\r\n <template\r\n v-for=\"column in visibleProperties\"\r\n :key=\"'cell-' + column.name\"\r\n #[`cell-${column.name}`]=\"slotProps\"\r\n >\r\n <slot\r\n :name=\"'item-' + column.name\"\r\n v-bind=\"slotProps\"\r\n />\r\n </template>\r\n\r\n <!-- Forward action slot -->\r\n <template #actions=\"{ item: rowItem }\">\r\n <slot\r\n name=\"action\"\r\n :item=\"rowItem\"\r\n />\r\n </template>\r\n </TableRow>\r\n </Tbody>\r\n </Table>\r\n\r\n <!-- Empty state -->\r\n <div\r\n v-else\r\n class=\"flex flex-col items-center justify-center py-12 text-center\"\r\n >\r\n <slot name=\"empty\">\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <svg\r\n class=\"size-12 text-gray-300 dark:text-gray-600\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"1.5\"\r\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\r\n />\r\n </svg>\r\n <p class=\"text-sm text-gray-500 dark:text-gray-400\">No data available</p>\r\n </div>\r\n </slot>\r\n </div>\r\n\r\n <!-- Pagination (outside v-if/v-else chain) -->\r\n <PaginationControls\r\n v-if=\"paginated && items && items.length > 0 && !loading && !error\"\r\n :current-page=\"effectivePage\"\r\n :total-pages=\"effectiveTotalPages\"\r\n :page-size=\"effectivePageSize\"\r\n :page-size-options=\"pageSizeOptions\"\r\n :show-page-size=\"showPageSize\"\r\n class=\"mt-4\"\r\n @update:current-page=\"handlePageChange\"\r\n @update:page-size=\"handlePageSizeChange\"\r\n />\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=\"size-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 { DataTable as TableComponent } from './table'\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\r\n ref=\"containerRef\"\r\n class=\"autocomplete-container\"\r\n >\r\n <label\r\n v-if=\"label\"\r\n class=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\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\r\n class=\"size-5 text-gray-400\"\r\n icon=\"lucide:search\"\r\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-hidden 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\r\n class=\"size-4 text-gray-400\"\r\n icon=\"lucide:x\"\r\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\r\n to=\"body\"\r\n :disabled=\"!teleport\"\r\n >\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"opacity-0 scale-95\"\r\n enter-to-class=\"opacity-100 scale-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"opacity-100 scale-100\"\r\n leave-to-class=\"opacity-0 scale-95\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n 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\r\n v-if=\"filteredOptions.length === 0\"\r\n class=\"px-4 py-3 text-sm text-gray-500\"\r\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\r\n v-if=\"error\"\r\n class=\"mt-1 text-sm text-red-600\"\r\n >\r\n {{ error }}\r\n </p>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\n/**\n * Menu - Container component for navigation menu items\n *\n * Provides consistent styling and layout for MenuItem components.\n * Typically used in sidebar navigation.\n *\n * @example\n * <Menu>\n * <MenuItem :menuItem=\"{ label: 'Dashboard', icon: 'lucide:home', link: '/' }\" />\n * <MenuItem :menuItem=\"{ label: 'Users', icon: 'lucide:users', link: '/users' }\" />\n * </Menu>\n */\nimport { provide, computed } from 'vue'\n\nexport type MenuVariant = 'default' | 'compact' | 'pills'\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style variant */\n variant?: MenuVariant\n /** Gap between menu items */\n gap?: 'none' | 'sm' | 'md' | 'lg'\n /** Whether the menu is in collapsed/compact mode (icons only) */\n collapsed?: boolean\n }>(),\n {\n variant: 'default',\n gap: 'sm',\n collapsed: false,\n },\n)\n\n// Provide collapsed state to children\nprovide('menuCollapsed', computed(() => props.collapsed))\n\nconst gapClasses: Record<string, string> = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n}\n</script>\n\n<template>\n <nav\n :class=\"[\n 'flex flex-col',\n gapClasses[gap],\n ]\"\n role=\"navigation\"\n >\n <slot />\n </nav>\n</template>\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>\r\nimport { computed, ref } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\r\nexport type AvatarColor =\r\n | 'gray'\r\n | 'red'\r\n | 'orange'\r\n | 'amber'\r\n | 'yellow'\r\n | 'lime'\r\n | 'green'\r\n | 'emerald'\r\n | 'teal'\r\n | 'cyan'\r\n | 'sky'\r\n | 'blue'\r\n | 'indigo'\r\n | 'violet'\r\n | 'purple'\r\n | 'fuchsia'\r\n | 'pink'\r\n | 'rose'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Image source URL */\r\n src?: string\r\n /** Alt text for image */\r\n alt?: string\r\n /** Fallback name (shows initials) */\r\n name?: string\r\n /** Size variant */\r\n size?: AvatarSize\r\n /** Show online status indicator */\r\n status?: 'online' | 'offline' | 'away' | 'busy'\r\n /** Rounded style */\r\n rounded?: 'full' | 'lg' | 'md'\r\n /** Background color (manual selection) */\r\n color?: AvatarColor\r\n /** Auto-generate color from name (like WhatsApp) */\r\n autoColor?: boolean\r\n }>(),\r\n {\r\n size: 'md',\r\n rounded: 'full',\r\n autoColor: false,\r\n },\r\n)\r\n\r\nconst imageError = ref(false)\r\n\r\nconst sizeClasses: Record<AvatarSize, string> = {\r\n xs: 'size-6 text-xs',\r\n sm: 'size-8 text-sm',\r\n md: 'size-10 text-base',\r\n lg: 'size-12 text-lg',\r\n xl: 'size-16 text-xl',\r\n '2xl': 'size-20 text-2xl',\r\n}\r\n\r\nconst statusSizes: Record<AvatarSize, string> = {\r\n xs: 'size-1.5',\r\n sm: 'size-2',\r\n md: 'size-2.5',\r\n lg: 'size-3',\r\n xl: 'size-4',\r\n '2xl': 'size-5',\r\n}\r\n\r\nconst statusColors: Record<string, string> = {\r\n online: 'bg-green-500',\r\n offline: 'bg-gray-400',\r\n away: 'bg-yellow-500',\r\n busy: 'bg-red-500',\r\n}\r\n\r\nconst roundedClasses: Record<string, string> = {\r\n full: 'rounded-full',\r\n lg: 'rounded-lg',\r\n md: 'rounded-md',\r\n}\r\n\r\n// Color classes for avatar backgrounds\r\nconst colorClasses: Record<AvatarColor, string> = {\r\n gray: 'bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300',\r\n red: 'bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300',\r\n orange: 'bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300',\r\n amber: 'bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300',\r\n yellow: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300',\r\n lime: 'bg-lime-100 text-lime-700 dark:bg-lime-900/50 dark:text-lime-300',\r\n green: 'bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300',\r\n emerald: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300',\r\n teal: 'bg-teal-100 text-teal-700 dark:bg-teal-900/50 dark:text-teal-300',\r\n cyan: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900/50 dark:text-cyan-300',\r\n sky: 'bg-sky-100 text-sky-700 dark:bg-sky-900/50 dark:text-sky-300',\r\n blue: 'bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300',\r\n indigo: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300',\r\n violet: 'bg-violet-100 text-violet-700 dark:bg-violet-900/50 dark:text-violet-300',\r\n purple: 'bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300',\r\n fuchsia: 'bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300',\r\n pink: 'bg-pink-100 text-pink-700 dark:bg-pink-900/50 dark:text-pink-300',\r\n rose: 'bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300',\r\n}\r\n\r\n// Colors for auto-generation (excluding gray for more vibrant results)\r\nconst autoColorPalette: AvatarColor[] = [\r\n 'red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal',\r\n 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose',\r\n]\r\n\r\n// Generate a deterministic color from a string (like WhatsApp)\r\nfunction getColorFromString(str: string): AvatarColor {\r\n if (!str) return 'gray'\r\n let hash = 0\r\n for (let i = 0; i < str.length; i++) {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\r\n }\r\n const index = Math.abs(hash) % autoColorPalette.length\r\n return autoColorPalette[index]\r\n}\r\n\r\n// Computed color class based on props\r\nconst avatarColorClass = computed(() => {\r\n // Manual color takes priority\r\n if (props.color) {\r\n return colorClasses[props.color]\r\n }\r\n // Auto-generate from name if enabled\r\n if (props.autoColor && props.name) {\r\n return colorClasses[getColorFromString(props.name)]\r\n }\r\n // Default gray\r\n return colorClasses.gray\r\n})\r\n\r\nconst initials = computed(() => {\r\n if (!props.name) return ''\r\n return props.name\r\n .split(' ')\r\n .map(n => n[0])\r\n .slice(0, 2)\r\n .join('')\r\n .toUpperCase()\r\n})\r\n\r\nconst showImage = computed(() => props.src && !imageError.value)\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative inline-block\">\r\n <div\r\n :class=\"[\r\n 'flex items-center justify-center overflow-hidden font-medium',\r\n avatarColorClass,\r\n sizeClasses[size],\r\n roundedClasses[rounded],\r\n ]\"\r\n >\r\n <img\r\n v-if=\"showImage\"\r\n :src=\"src\"\r\n :alt=\"alt || name\"\r\n class=\"size-full object-cover\"\r\n @error=\"imageError = true\"\r\n >\r\n <span v-else-if=\"initials\">{{ initials }}</span>\r\n <Icon\r\n v-else\r\n icon=\"lucide:user\"\r\n class=\"size-1/2\"\r\n />\r\n </div>\r\n <span\r\n v-if=\"status\"\r\n :class=\"[\r\n 'absolute bottom-0 right-0 block rounded-full ring-2 ring-white dark:ring-gray-900',\r\n statusSizes[size],\r\n statusColors[status],\r\n ]\"\r\n />\r\n </div>\r\n</template>\r\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-hidden 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>\nimport { computed, watch, onMounted, onUnmounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nexport type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nconst props = withDefaults(\n defineProps<{\n /** Whether the drawer is visible */\n modelValue: boolean\n /** Position of the drawer */\n position?: DrawerPosition\n /** Size of the drawer */\n size?: DrawerSize\n /** Title shown in header */\n title?: string\n /** Description shown below title */\n description?: string\n /** Show close button */\n showClose?: boolean\n /** Close on overlay click */\n closeOnOverlay?: boolean\n /** Close on escape key */\n closeOnEscape?: boolean\n /** Show overlay */\n overlay?: boolean\n }>(),\n {\n position: 'right',\n size: 'md',\n showClose: true,\n closeOnOverlay: true,\n closeOnEscape: true,\n overlay: true,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst close = () => {\n emit('update:modelValue', false)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnOverlay) {\n close()\n }\n}\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.closeOnEscape && props.modelValue) {\n close()\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n})\n\n// Lock body scroll when open\nwatch(\n () => props.modelValue,\n (isOpen) => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n },\n)\n\nconst sizeClasses = computed(() => {\n const isHorizontal = props.position === 'left' || props.position === 'right'\n const sizes = {\n sm: isHorizontal ? 'w-64' : 'h-32',\n md: isHorizontal ? 'w-80' : 'h-48',\n lg: isHorizontal ? 'w-96' : 'h-64',\n xl: isHorizontal ? 'w-lg' : 'h-96',\n full: isHorizontal ? 'w-screen' : 'h-screen',\n }\n return sizes[props.size]\n})\n\nconst positionClasses = computed(() => {\n const base = 'fixed bg-white dark:bg-gray-800 shadow-xl flex flex-col'\n switch (props.position) {\n case 'left':\n return `${base} inset-y-0 left-0 ${sizeClasses.value}`\n case 'right':\n return `${base} inset-y-0 right-0 ${sizeClasses.value}`\n case 'top':\n return `${base} inset-x-0 top-0 ${sizeClasses.value}`\n case 'bottom':\n return `${base} inset-x-0 bottom-0 ${sizeClasses.value}`\n default:\n return base\n }\n})\n\nconst transformClasses = computed(() => {\n switch (props.position) {\n case 'left':\n return { enter: '-translate-x-full', leave: '-translate-x-full' }\n case 'right':\n return { enter: 'translate-x-full', leave: 'translate-x-full' }\n case 'top':\n return { enter: '-translate-y-full', leave: '-translate-y-full' }\n case 'bottom':\n return { enter: 'translate-y-full', leave: 'translate-y-full' }\n default:\n return { enter: '', leave: '' }\n }\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <!-- Overlay -->\n <Transition\n enter-active-class=\"transition-opacity duration-300 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"modelValue && overlay\"\n class=\"fixed inset-0 z-40 bg-black/50\"\n @click=\"handleOverlayClick\"\n />\n </Transition>\n\n <!-- Drawer -->\n <Transition\n enter-active-class=\"transition-transform duration-300 ease-out\"\n :enter-from-class=\"transformClasses.enter\"\n enter-to-class=\"translate-x-0 translate-y-0\"\n leave-active-class=\"transition-transform duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0\"\n :leave-to-class=\"transformClasses.leave\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"positionClasses\"\n class=\"z-50\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <!-- Header -->\n <div\n v-if=\"title || showClose || $slots.header\"\n class=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\"\n >\n <slot name=\"header\">\n <div>\n <h2 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {{ title }}\n </h2>\n <p v-if=\"description\" class=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {{ description }}\n </p>\n </div>\n </slot>\n <button\n v-if=\"showClose\"\n type=\"button\"\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\"\n @click=\"close\"\n >\n <Icon icon=\"heroicons:x-mark\" class=\"size-5\" />\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"$slots.footer\"\n class=\"px-4 py-3 border-t border-gray-200 dark:border-gray-700\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\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=\"size-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=\"size-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=\"size-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=\"size-5\" aria-hidden=\"true\" />\r\n {{ title }}\r\n </span>\r\n <Icon\r\n icon=\"heroicons:chevron-down\"\r\n class=\"size-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 size-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=\"size-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 size-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=\"size-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: 'size-4' },\r\n md: { button: 'p-2', icon: 'size-5' },\r\n lg: { button: 'p-2.5', icon: 'size-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-hidden 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","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport CardWrapper, { type CardShadow, type CardRounded, type CardBorder, type CardAccent } from './CardWrapper.vue'\r\nimport Skeleton from '@/components/feedback/Skeleton.vue'\r\n\r\nexport type StatItemSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type StatItemIconPosition = 'top' | 'left' | 'right' | 'bottom'\r\nexport type StatItemVariant = 'default' | 'glass' | 'outline' | 'flat' | 'solid'\r\nexport type StatItemColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'\r\nexport type StatItemTrend = 'up' | 'down' | 'neutral'\r\nexport type StatItemIconRounded = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface StatItemData {\r\n label: string\r\n value: string | number\r\n icon?: string\r\n change?: number\r\n changeLabel?: string\r\n trend?: StatItemTrend\r\n color?: StatItemColor\r\n description?: string\r\n prefix?: string\r\n suffix?: string\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Stat label */\r\n label: string\r\n /** Stat value */\r\n value: string | number\r\n /** Description text below label */\r\n description?: string\r\n /** Prefix for value (e.g., \"$\") */\r\n prefix?: string\r\n /** Suffix for value (e.g., \"%\", \"users\") */\r\n suffix?: string\r\n /** Icon name (iconify format) */\r\n icon?: string\r\n /** Icon position */\r\n iconPosition?: StatItemIconPosition\r\n /** Icon border radius */\r\n iconRounded?: StatItemIconRounded\r\n /** Hide icon background */\r\n hideIconBg?: boolean\r\n /** Percentage change (positive or negative) */\r\n change?: number\r\n /** Change label (e.g., \"vs last month\") */\r\n changeLabel?: string\r\n /** Explicit trend direction (overrides change-based calculation) */\r\n trend?: StatItemTrend\r\n /** Show only trend arrow without percentage */\r\n trendOnly?: boolean\r\n /** Hide trend icon, show only text */\r\n hideTrendIcon?: boolean\r\n /** Invert trend colors (green for down, red for up) */\r\n invertTrendColors?: boolean\r\n /** Size variant */\r\n size?: StatItemSize\r\n /** Visual variant */\r\n variant?: StatItemVariant\r\n /** Color scheme */\r\n color?: StatItemColor\r\n /** Make the stat clickable */\r\n clickable?: boolean\r\n /** Center content (default: true for top/bottom icon, false for left/right) */\r\n centered?: boolean\r\n /** Show label before value */\r\n labelFirst?: boolean\r\n /** Compact mode (reduced padding) */\r\n compact?: boolean\r\n /** Loading state */\r\n loading?: boolean\r\n /** Card shadow level */\r\n shadow?: CardShadow\r\n /** Card border radius */\r\n rounded?: CardRounded\r\n /** Card border style */\r\n border?: CardBorder\r\n /** Card accent color */\r\n accent?: CardAccent\r\n /** Custom class for the card */\r\n cardClass?: string\r\n /** Custom class for the icon wrapper */\r\n iconWrapperClass?: string\r\n /** Custom class for the icon element */\r\n iconClass?: string\r\n /** Custom class for the value */\r\n valueClass?: string\r\n /** Custom class for the label */\r\n labelClass?: string\r\n /** Custom class for the description */\r\n descriptionClass?: string\r\n /** Custom class for the trend indicator */\r\n trendClass?: string\r\n /** Custom class for the content wrapper */\r\n contentClass?: string\r\n }>(),\r\n {\r\n iconPosition: 'top',\r\n iconRounded: 'xl',\r\n size: 'md',\r\n variant: 'default',\r\n color: 'primary',\r\n clickable: false,\r\n trendOnly: false,\r\n hideTrendIcon: false,\r\n invertTrendColors: false,\r\n hideIconBg: false,\r\n labelFirst: false,\r\n compact: false,\r\n loading: false,\r\n shadow: 'sm',\r\n rounded: 'xl',\r\n border: 'none',\r\n accent: 'none',\r\n }\r\n)\r\n\r\ndefineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\n// Determine if content should be centered\r\nconst isCentered = computed(() => {\r\n if (props.centered !== undefined) return props.centered\r\n return props.iconPosition === 'top' || props.iconPosition === 'bottom'\r\n})\r\n\r\n// Determine effective trend based on change value or explicit trend\r\nconst effectiveTrend = computed<StatItemTrend | undefined>(() => {\r\n if (props.trend) return props.trend\r\n if (props.change === undefined) return undefined\r\n if (props.change > 0) return 'up'\r\n if (props.change < 0) return 'down'\r\n return 'neutral'\r\n})\r\n\r\n// Size-based classes\r\nconst sizeClasses = computed(() => {\r\n const sizes = {\r\n xs: {\r\n padding: (props.compact ? 'none' : 'sm') as 'none' | 'sm',\r\n icon: 'size-6',\r\n iconInner: 'size-3',\r\n value: 'text-lg font-bold',\r\n label: 'text-xs',\r\n description: 'text-xs',\r\n change: 'text-xs',\r\n gap: 'gap-0.5',\r\n },\r\n sm: {\r\n padding: (props.compact ? 'sm' : 'sm') as 'sm',\r\n icon: 'size-8',\r\n iconInner: 'size-4',\r\n value: 'text-xl font-bold',\r\n label: 'text-xs',\r\n description: 'text-xs',\r\n change: 'text-xs',\r\n gap: 'gap-1',\r\n },\r\n md: {\r\n padding: (props.compact ? 'sm' : 'md') as 'sm' | 'md',\r\n icon: 'size-10',\r\n iconInner: 'size-5',\r\n value: 'text-2xl sm:text-3xl font-bold',\r\n label: 'text-xs sm:text-sm',\r\n description: 'text-xs sm:text-sm',\r\n change: 'text-xs',\r\n gap: 'gap-2',\r\n },\r\n lg: {\r\n padding: (props.compact ? 'md' : 'lg') as 'md' | 'lg',\r\n icon: 'size-12',\r\n iconInner: 'size-6',\r\n value: 'text-3xl sm:text-4xl font-bold',\r\n label: 'text-sm sm:text-base',\r\n description: 'text-sm',\r\n change: 'text-sm',\r\n gap: 'gap-3',\r\n },\r\n xl: {\r\n padding: (props.compact ? 'md' : 'lg') as 'md' | 'lg',\r\n icon: 'size-14',\r\n iconInner: 'size-7',\r\n value: 'text-4xl sm:text-5xl font-bold',\r\n label: 'text-base sm:text-lg',\r\n description: 'text-sm sm:text-base',\r\n change: 'text-sm',\r\n gap: 'gap-4',\r\n },\r\n }\r\n return sizes[props.size]\r\n})\r\n\r\n// Icon rounded classes\r\nconst iconRoundedClasses = computed(() => {\r\n const map: Record<StatItemIconRounded, string> = {\r\n none: 'rounded-none',\r\n sm: 'rounded-sm',\r\n md: 'rounded-md',\r\n lg: 'rounded-lg',\r\n xl: 'rounded-xl',\r\n full: 'rounded-full',\r\n }\r\n return map[props.iconRounded]\r\n})\r\n\r\n// Color-based classes for icon background\r\nconst iconBgClasses = computed(() => {\r\n if (props.hideIconBg) return ''\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'bg-white/20'\r\n\r\n const colors = {\r\n primary: 'bg-primary-100 dark:bg-primary-900/30',\r\n secondary: 'bg-secondary-100 dark:bg-secondary-900/30',\r\n success: 'bg-emerald-100 dark:bg-emerald-900/30',\r\n warning: 'bg-amber-100 dark:bg-amber-900/30',\r\n danger: 'bg-red-100 dark:bg-red-900/30',\r\n info: 'bg-blue-100 dark:bg-blue-900/30',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Color-based classes for icon\r\nconst iconColorClasses = computed(() => {\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'text-white'\r\n\r\n const colors = {\r\n primary: 'text-primary-600 dark:text-primary-400',\r\n secondary: 'text-secondary-600 dark:text-secondary-400',\r\n success: 'text-emerald-600 dark:text-emerald-400',\r\n warning: 'text-amber-600 dark:text-amber-400',\r\n danger: 'text-red-600 dark:text-red-400',\r\n info: 'text-blue-600 dark:text-blue-400',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Solid variant background classes\r\nconst solidBgClasses = computed(() => {\r\n if (props.variant !== 'solid') return ''\r\n const colors = {\r\n primary: 'bg-primary-500',\r\n secondary: 'bg-secondary-500',\r\n success: 'bg-emerald-500',\r\n warning: 'bg-amber-500',\r\n danger: 'bg-red-500',\r\n info: 'bg-blue-500',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Value text classes based on variant\r\nconst valueTextClasses = computed(() => {\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'text-white'\r\n return 'text-gray-900 dark:text-white'\r\n})\r\n\r\n// Label text classes based on variant\r\nconst labelTextClasses = computed(() => {\r\n if (props.variant === 'glass') return 'text-white/80'\r\n if (props.variant === 'solid') return 'text-white/90'\r\n return 'text-gray-500 dark:text-gray-400'\r\n})\r\n\r\n// Description text classes based on variant\r\nconst descriptionTextClasses = computed(() => {\r\n if (props.variant === 'glass') return 'text-white/70'\r\n if (props.variant === 'solid') return 'text-white/80'\r\n return 'text-gray-400 dark:text-gray-500'\r\n})\r\n\r\n// Trend color classes\r\nconst trendColorClasses = computed(() => {\r\n if (!effectiveTrend.value || effectiveTrend.value === 'neutral') {\r\n return 'text-gray-500'\r\n }\r\n\r\n const isUp = effectiveTrend.value === 'up'\r\n const greenColor = 'text-emerald-500'\r\n const redColor = 'text-red-500'\r\n\r\n if (props.invertTrendColors) {\r\n return isUp ? redColor : greenColor\r\n }\r\n return isUp ? greenColor : redColor\r\n})\r\n\r\n// Trend icon\r\nconst trendIcon = computed(() => {\r\n if (!effectiveTrend.value || effectiveTrend.value === 'neutral') {\r\n return 'heroicons:minus'\r\n }\r\n return effectiveTrend.value === 'up'\r\n ? 'heroicons:arrow-trending-up'\r\n : 'heroicons:arrow-trending-down'\r\n})\r\n\r\n// CardWrapper variant mapping\r\nconst cardVariant = computed(() => {\r\n if (props.variant === 'solid') return 'default'\r\n return props.variant\r\n})\r\n\r\n// Effective shadow\r\nconst effectiveShadow = computed(() => {\r\n if (props.variant === 'glass') return 'none'\r\n return props.shadow\r\n})\r\n\r\n// Effective border\r\nconst effectiveBorder = computed(() => {\r\n if (props.variant === 'outline') return 'default'\r\n return props.border\r\n})\r\n\r\n// Layout classes based on icon position\r\nconst layoutClasses = computed(() => {\r\n const centered = isCentered.value ? 'items-center text-center' : ''\r\n\r\n switch (props.iconPosition) {\r\n case 'top':\r\n return `flex flex-col ${centered}`\r\n case 'bottom':\r\n return `flex flex-col-reverse ${centered}`\r\n case 'left':\r\n return 'flex flex-row items-center'\r\n case 'right':\r\n return 'flex flex-row-reverse items-center'\r\n default:\r\n return `flex flex-col ${centered}`\r\n }\r\n})\r\n\r\n// Icon margin classes based on position\r\nconst iconMarginClasses = computed(() => {\r\n switch (props.iconPosition) {\r\n case 'top':\r\n return 'mb-2'\r\n case 'bottom':\r\n return 'mt-2'\r\n case 'left':\r\n return 'mr-3'\r\n case 'right':\r\n return 'ml-3'\r\n default:\r\n return ''\r\n }\r\n})\r\n\r\n// Content layout classes\r\nconst computedContentClasses = computed(() => {\r\n const isVertical = props.iconPosition === 'top' || props.iconPosition === 'bottom'\r\n if (isVertical) {\r\n return `flex flex-col ${sizeClasses.value.gap}`\r\n }\r\n return `flex flex-col flex-1 min-w-0 ${sizeClasses.value.gap}`\r\n})\r\n</script>\r\n\r\n<template>\r\n <CardWrapper\r\n :variant=\"cardVariant\"\r\n :padding=\"sizeClasses.padding\"\r\n :clickable=\"clickable\"\r\n :shadow=\"effectiveShadow\"\r\n :border=\"effectiveBorder\"\r\n :rounded=\"rounded\"\r\n :accent=\"accent\"\r\n :header-divider=\"false\"\r\n :class=\"[cardClass, solidBgClasses, variant === 'solid' && 'text-white']\"\r\n @click=\"$emit('click', $event)\"\r\n >\r\n <!-- Loading State -->\r\n <div v-if=\"loading\" :class=\"layoutClasses\">\r\n <Skeleton\r\n v-if=\"icon\"\r\n :class=\"[sizeClasses.icon, iconRoundedClasses, iconMarginClasses]\"\r\n />\r\n <div :class=\"computedContentClasses\">\r\n <Skeleton :class=\"sizeClasses.value\" width=\"60%\" height=\"1.5em\" />\r\n <Skeleton :class=\"sizeClasses.label\" width=\"80%\" height=\"1em\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div v-else :class=\"layoutClasses\">\r\n <!-- Icon -->\r\n <div\r\n v-if=\"icon || $slots.icon\"\r\n :class=\"[\r\n 'flex items-center justify-center flex-shrink-0',\r\n sizeClasses.icon,\r\n iconRoundedClasses,\r\n iconBgClasses,\r\n iconMarginClasses,\r\n iconWrapperClass,\r\n ]\"\r\n >\r\n <slot name=\"icon\">\r\n <Icon :icon=\"icon!\" :class=\"[sizeClasses.iconInner, iconColorClasses, iconClass]\" />\r\n </slot>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div :class=\"[computedContentClasses, contentClass]\">\r\n <!-- Label (if labelFirst) -->\r\n <div\r\n v-if=\"labelFirst\"\r\n :class=\"[sizeClasses.label, labelTextClasses, labelClass]\"\r\n >\r\n <slot name=\"label\">{{ label }}</slot>\r\n </div>\r\n\r\n <!-- Value -->\r\n <div :class=\"[sizeClasses.value, valueTextClasses, valueClass]\">\r\n <slot name=\"value\">\r\n <span v-if=\"prefix\" class=\"mr-0.5\">{{ prefix }}</span>\r\n {{ value }}\r\n <span v-if=\"suffix\" class=\"ml-0.5\">{{ suffix }}</span>\r\n </slot>\r\n </div>\r\n\r\n <!-- Label (if not labelFirst) -->\r\n <div\r\n v-if=\"!labelFirst\"\r\n :class=\"[sizeClasses.label, labelTextClasses, labelClass]\"\r\n >\r\n <slot name=\"label\">{{ label }}</slot>\r\n </div>\r\n\r\n <!-- Description -->\r\n <div\r\n v-if=\"description || $slots.description\"\r\n :class=\"[sizeClasses.description, descriptionTextClasses, descriptionClass]\"\r\n >\r\n <slot name=\"description\">{{ description }}</slot>\r\n </div>\r\n\r\n <!-- Change indicator -->\r\n <div\r\n v-if=\"change !== undefined || trend\"\r\n :class=\"[\r\n 'mt-1 font-medium inline-flex items-center gap-1',\r\n sizeClasses.change,\r\n trendColorClasses,\r\n trendClass,\r\n ]\"\r\n >\r\n <Icon v-if=\"!hideTrendIcon\" :icon=\"trendIcon\" class=\"size-3.5\" />\r\n <span v-if=\"!trendOnly && change !== undefined\">\r\n {{ change >= 0 ? '+' : '' }}{{ change }}%\r\n </span>\r\n <span v-if=\"changeLabel\" class=\"text-gray-400\">{{ changeLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Extra slot for additional content -->\r\n <slot name=\"extra\" />\r\n </CardWrapper>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport StatItem, {\r\n type StatItemData,\r\n type StatItemSize,\r\n type StatItemVariant,\r\n type StatItemIconPosition,\r\n type StatItemIconRounded,\r\n} from './StatItem.vue'\r\nimport type { CardShadow, CardRounded, CardBorder, CardAccent } from './CardWrapper.vue'\r\n\r\nexport type StatsColumns = 1 | 2 | 3 | 4 | 5 | 6\r\nexport type StatsGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Array of stats to display */\r\n stats?: StatItemData[]\r\n /** Number of columns (auto-calculated if not provided) */\r\n cols?: StatsColumns\r\n /** Gap between items */\r\n gap?: StatsGap\r\n /** Visual variant for all items */\r\n variant?: StatItemVariant\r\n /** Size for all items */\r\n size?: StatItemSize\r\n /** Icon position for all items */\r\n iconPosition?: StatItemIconPosition\r\n /** Icon border radius for all items */\r\n iconRounded?: StatItemIconRounded\r\n /** Hide icon background for all items */\r\n hideIconBg?: boolean\r\n /** Default color for items without explicit color */\r\n color?: StatItemData['color']\r\n /** Show label before value for all items */\r\n labelFirst?: boolean\r\n /** Compact mode for all items */\r\n compact?: boolean\r\n /** Loading state for all items */\r\n loading?: boolean\r\n /** Card shadow for all items */\r\n shadow?: CardShadow\r\n /** Card border radius for all items */\r\n rounded?: CardRounded\r\n /** Card border for all items */\r\n border?: CardBorder\r\n /** Card accent for all items */\r\n accent?: CardAccent\r\n /** Make all items clickable */\r\n clickable?: boolean\r\n /** Center content in all items */\r\n centered?: boolean\r\n /** Invert trend colors for all items */\r\n invertTrendColors?: boolean\r\n /** Hide trend icon for all items */\r\n hideTrendIcon?: boolean\r\n /** Custom class for the grid container */\r\n gridClass?: string\r\n /** Custom class for all cards */\r\n cardClass?: string\r\n /** Custom class for all icon wrappers */\r\n iconWrapperClass?: string\r\n /** Custom class for all icons */\r\n iconClass?: string\r\n /** Custom class for all values */\r\n valueClass?: string\r\n /** Custom class for all labels */\r\n labelClass?: string\r\n }>(),\r\n {\r\n variant: 'default',\r\n size: 'md',\r\n iconPosition: 'top',\r\n iconRounded: 'xl',\r\n color: 'primary',\r\n gap: 'md',\r\n hideIconBg: false,\r\n labelFirst: false,\r\n compact: false,\r\n loading: false,\r\n shadow: 'sm',\r\n rounded: 'xl',\r\n border: 'none',\r\n accent: 'none',\r\n clickable: false,\r\n invertTrendColors: false,\r\n hideTrendIcon: false,\r\n }\r\n)\r\n\r\ndefineEmits<{\r\n 'item-click': [index: number, stat: StatItemData, event: MouseEvent]\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"grid\"\r\n :class=\"[\r\n gridClass,\r\n // Gap classes\r\n gap === 'none' && 'gap-0',\r\n gap === 'xs' && 'gap-1 sm:gap-2',\r\n gap === 'sm' && 'gap-2 sm:gap-3',\r\n gap === 'md' && 'gap-3 sm:gap-4',\r\n gap === 'lg' && 'gap-4 sm:gap-6',\r\n gap === 'xl' && 'gap-6 sm:gap-8',\r\n // Column classes\r\n cols === 1 && 'grid-cols-1',\r\n cols === 2 && 'grid-cols-2',\r\n cols === 3 && 'grid-cols-3',\r\n cols === 4 && 'grid-cols-2 sm:grid-cols-4',\r\n cols === 5 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',\r\n cols === 6 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',\r\n // Auto columns based on stats length\r\n !cols && stats?.length === 1 && 'grid-cols-1',\r\n !cols && stats?.length === 2 && 'grid-cols-2',\r\n !cols && stats?.length === 3 && 'grid-cols-3',\r\n !cols && stats?.length === 4 && 'grid-cols-2 sm:grid-cols-4',\r\n !cols && stats && stats.length > 4 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4',\r\n ]\"\r\n >\r\n <!-- Render from stats prop -->\r\n <StatItem\r\n v-for=\"(stat, index) in stats\"\r\n :key=\"index\"\r\n :label=\"stat.label\"\r\n :value=\"stat.value\"\r\n :icon=\"stat.icon\"\r\n :change=\"stat.change\"\r\n :change-label=\"stat.changeLabel\"\r\n :trend=\"stat.trend\"\r\n :description=\"stat.description\"\r\n :prefix=\"stat.prefix\"\r\n :suffix=\"stat.suffix\"\r\n :variant=\"variant\"\r\n :size=\"size\"\r\n :icon-position=\"iconPosition\"\r\n :icon-rounded=\"iconRounded\"\r\n :hide-icon-bg=\"hideIconBg\"\r\n :color=\"stat.color || color\"\r\n :label-first=\"labelFirst\"\r\n :compact=\"compact\"\r\n :loading=\"loading\"\r\n :shadow=\"shadow\"\r\n :rounded=\"rounded\"\r\n :border=\"border\"\r\n :accent=\"accent\"\r\n :clickable=\"clickable\"\r\n :centered=\"centered\"\r\n :invert-trend-colors=\"invertTrendColors\"\r\n :hide-trend-icon=\"hideTrendIcon\"\r\n :card-class=\"cardClass\"\r\n :icon-wrapper-class=\"iconWrapperClass\"\r\n :icon-class=\"iconClass\"\r\n :value-class=\"valueClass\"\r\n :label-class=\"labelClass\"\r\n @click=\"$emit('item-click', index, stat, $event)\"\r\n />\r\n\r\n <!-- Slot for custom StatItem components -->\r\n <slot />\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport interface FilterTab {\r\n key: string\r\n label: string\r\n icon?: string\r\n count?: number\r\n disabled?: boolean\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Available filter options */\r\n options: FilterTab[]\r\n /** Visual variant */\r\n variant?: 'pills' | 'underline' | 'boxed'\r\n /** Size */\r\n size?: 'sm' | 'md' | 'lg'\r\n /** Full width tabs */\r\n fullWidth?: boolean\r\n }>(),\r\n {\r\n variant: 'pills',\r\n size: 'md',\r\n }\r\n)\r\n\r\nconst modelValue = defineModel<string>({ required: true })\r\n</script>\r\n\r\n<template>\r\n <!-- Pills variant -->\r\n <div\r\n v-if=\"variant === 'pills'\"\r\n :class=\"[\r\n 'inline-flex p-1 bg-white dark:bg-slate-800 rounded-2xl shadow-sm border border-gray-100 dark:border-slate-700 gap-1',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 rounded-xl font-medium transition-all',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-1.5 text-xs',\r\n size === 'md' && 'px-4 py-2.5 text-sm',\r\n size === 'lg' && 'px-5 py-3 text-base',\r\n modelValue === option.key\r\n ? 'bg-primary-500 text-white shadow-md'\r\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-slate-700',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-white/20 text-white'\r\n : 'bg-gray-100 dark:bg-slate-700 text-gray-600 dark:text-gray-400',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Underline variant -->\r\n <div\r\n v-else-if=\"variant === 'underline'\"\r\n :class=\"[\r\n 'flex border-b border-gray-200 dark:border-slate-700',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 font-medium transition-all border-b-2 -mb-px',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-2 text-xs',\r\n size === 'md' && 'px-4 py-3 text-sm',\r\n size === 'lg' && 'px-5 py-4 text-base',\r\n modelValue === option.key\r\n ? 'border-primary-500 text-primary-600 dark:text-primary-400'\r\n : 'border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400'\r\n : 'bg-gray-100 dark:bg-slate-700 text-gray-500',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Boxed variant -->\r\n <div\r\n v-else-if=\"variant === 'boxed'\"\r\n :class=\"[\r\n 'inline-flex bg-gray-100 dark:bg-slate-800 rounded-xl p-1 gap-1',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 rounded-lg font-medium transition-all',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-1.5 text-xs',\r\n size === 'md' && 'px-4 py-2 text-sm',\r\n size === 'lg' && 'px-5 py-2.5 text-base',\r\n modelValue === option.key\r\n ? 'bg-white dark:bg-slate-700 text-gray-900 dark:text-white shadow-sm'\r\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-gray-100 dark:bg-slate-600 text-gray-600 dark:text-gray-300'\r\n : 'bg-gray-200 dark:bg-slate-700 text-gray-500 dark:text-gray-400',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nexport type DividerOrientation = 'horizontal' | 'vertical'\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\nexport type DividerSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Divider orientation */\n orientation?: DividerOrientation\n /** Divider style variant */\n variant?: DividerVariant\n /** Divider thickness */\n size?: DividerSize\n /** Custom class for styling */\n class?: string\n /** Label text to show in the middle of the divider */\n label?: string\n /** Color variant */\n color?: 'default' | 'primary' | 'muted'\n }>(),\n {\n orientation: 'horizontal',\n variant: 'solid',\n size: 'md',\n color: 'default',\n }\n)\n\nconst sizeClasses = {\n horizontal: {\n sm: 'h-px',\n md: 'h-0.5',\n lg: 'h-1',\n },\n vertical: {\n sm: 'w-px',\n md: 'w-0.5',\n lg: 'w-1',\n },\n}\n\nconst variantClasses = {\n solid: '',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\nconst colorClasses = {\n default: 'bg-gray-200 dark:bg-gray-700',\n primary: 'bg-primary-200 dark:bg-primary-800',\n muted: 'bg-gray-100 dark:bg-gray-800',\n}\n</script>\n\n<template>\n <div\n v-if=\"!label\"\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['h-full mx-2', sizeClasses.vertical[size]]\n : ['w-full my-2', sizeClasses.horizontal[size]],\n variant !== 'solid' && `border-0 border-t ${variantClasses[variant]}`,\n props.class,\n ]\"\n role=\"separator\"\n :aria-orientation=\"orientation\"\n />\n <div\n v-else\n :class=\"[\n 'flex items-center gap-3',\n orientation === 'vertical' ? 'flex-col h-full mx-2' : 'w-full my-2',\n props.class,\n ]\"\n role=\"separator\"\n :aria-orientation=\"orientation\"\n >\n <div\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['flex-1', sizeClasses.vertical[size]]\n : ['flex-1', sizeClasses.horizontal[size]],\n ]\"\n />\n <span class=\"text-xs font-medium text-gray-500 dark:text-gray-400 whitespace-nowrap\">\n {{ label }}\n </span>\n <div\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['flex-1', sizeClasses.vertical[size]]\n : ['flex-1', sizeClasses.horizontal[size]],\n ]\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nexport type DataListLabelSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Size variant */\n size?: DataListLabelSize\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n }\n)\n\nconst sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n</script>\n\n<template>\n <dt\n :class=\"[\n 'font-medium text-gray-900 dark:text-gray-100',\n sizeClasses[size],\n props.class,\n ]\"\n >\n <slot />\n </dt>\n</template>\n","<script lang=\"ts\" setup>\nexport type DataListValueSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Size variant */\n size?: DataListValueSize\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n }\n)\n\nconst sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n</script>\n\n<template>\n <dd\n :class=\"[\n 'mt-1 text-gray-700 dark:text-gray-300 col-span-2 sm:mt-0',\n sizeClasses[size],\n props.class,\n ]\"\n >\n <slot />\n </dd>\n</template>\n","<script lang=\"ts\" setup>\nimport DataListLabel from './DataListLabel.vue'\nimport DataListValue from './DataListValue.vue'\n\nexport type DataListItemSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Label text */\n label?: string\n /** Value text */\n value?: string\n /** Size variant */\n size?: DataListItemSize\n /** Apply striped background */\n striped?: boolean\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n striped: false,\n }\n)\n\nconst sizeClasses = {\n sm: 'px-3 py-3 sm:gap-3',\n md: 'px-4 py-4 sm:gap-4',\n lg: 'px-6 py-6 sm:gap-6',\n}\n</script>\n\n<template>\n <div\n :class=\"[\n 'sm:grid sm:grid-cols-3',\n sizeClasses[size],\n striped && 'even:bg-gray-50 dark:even:bg-gray-900',\n props.class,\n ]\"\n >\n <slot>\n <DataListLabel v-if=\"label\" :size=\"size\">{{ label }}</DataListLabel>\n <DataListValue v-if=\"value\" :size=\"size\">{{ value }}</DataListValue>\n </slot>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport DataListItem from './DataListItem.vue'\n\nexport interface DataListItemData {\n /** Label text */\n label: string\n /** Value text */\n value: string\n}\n\nexport type DataListSize = 'sm' | 'md' | 'lg'\nexport type DataListVariant = 'default' | 'striped' | 'bordered'\n\nconst props = withDefaults(\n defineProps<{\n /** Array of items to render (alternative to using slots) */\n items?: DataListItemData[]\n /** Size variant */\n size?: DataListSize\n /** Visual variant */\n variant?: DataListVariant\n /** Custom class */\n class?: string\n }>(),\n {\n items: () => [],\n size: 'md',\n variant: 'default',\n }\n)\n\nconst variantClasses = {\n default: 'divide-y divide-gray-100 dark:divide-gray-800',\n striped: '',\n bordered: 'divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden',\n}\n</script>\n\n<template>\n <dl\n :class=\"[\n variantClasses[variant],\n props.class,\n ]\"\n >\n <slot>\n <DataListItem\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n :size=\"size\"\n :striped=\"variant === 'striped'\"\n />\n </slot>\n </dl>\n</template>\n"],"names":["computed","_createBlock","CardSkeleton","_openBlock","_createElementBlock","_hoisted_1","$slots","_normalizeClass","_renderSlot","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","useSlots","_unref","Icon","_hoisted_5","useAttrs","toRefs","provide","reactive","_mergeProps","inject","_Fragment","_withModifiers","Tr","Th","_createVNode","Checkbox","_renderList","_createTextVNode","_toDisplayString","TextType","NumberType","DateType","BooleanType","BadgeType","Td","_resolveDynamicComponent","ref","usePagination","TableSkeleton","Table","Thead","TableHeader","_withCtx","Tbody","index","TableRow","PaginationControls","CardComponent","ListSkeleton","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","useBreakpoints","MobileList","TableComponent","useDropdown","watch","nextTick","_Teleport","_Transition","resolveComponent","_withDirectives","_normalizeStyle","_createSlots","useId","onMounted","onUnmounted","$emit","useDarkMode","CardWrapper","Skeleton","StatItem","_useModel","DataListLabel","DataListValue","DataListItem"],"mappings":"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"}
1
+ {"version":3,"file":"DataList.vue_vue_type_script_setup_true_lang-MshUshzx.cjs","sources":["../src/components/core/CardComponent.vue","../src/components/core/CardWrapper.vue","../src/components/core/table/atoms/Table.vue","../src/components/core/table/atoms/Caption.vue","../src/components/core/table/atoms/Colgroup.vue","../src/components/core/table/atoms/Col.vue","../src/components/core/table/atoms/Thead.vue","../src/components/core/table/atoms/Tbody.vue","../src/components/core/table/atoms/Tfoot.vue","../src/components/core/table/atoms/Tr.vue","../src/components/core/table/atoms/Th.vue","../src/components/core/table/atoms/Td.vue","../src/components/core/table/molecules/TableHeader.vue","../src/components/core/table/molecules/TableRow.vue","../src/components/core/table/molecules/TableFooter.vue","../src/components/core/table/molecules/ExpandableRow.vue","../src/components/core/table/DataTable.vue","../src/components/core/MobileList.vue","../src/components/core/ResponsiveList.vue","../src/components/core/AutocompleteComponent.vue","../src/components/core/Menu.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","../src/components/core/StatItem.vue","../src/components/core/Stats.vue","../src/components/core/FilterTabs.vue","../src/components/core/Divider.vue","../src/components/core/datalist/DataListLabel.vue","../src/components/core/datalist/DataListValue.vue","../src/components/core/datalist/DataListItem.vue","../src/components/core/datalist/DataList.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 { computed, useSlots } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport CardSkeleton from '@/components/feedback/CardSkeleton.vue'\r\n\r\nexport type CardShadow = 'none' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type CardRounded = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg'\r\nexport type CardBorder = 'none' | 'default' | 'primary' | 'secondary'\r\nexport type CardVariant = 'default' | 'glass' | 'outline' | 'flat'\r\nexport type CardAccent = 'none' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'\r\nexport type CardImagePosition = 'top' | 'bottom' | 'left' | 'right' | 'background'\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 /** Header icon (Iconify format) */\r\n icon?: string\r\n /** Shadow level */\r\n shadow?: CardShadow\r\n /** Border radius */\r\n rounded?: CardRounded\r\n /** Content padding (defaults to none for CardComponent compatibility) */\r\n padding?: CardPadding\r\n /** Header/footer padding (defaults to md to match CardComponent header) */\r\n headerPadding?: CardPadding\r\n /** Border style */\r\n border?: CardBorder\r\n /** Visual variant */\r\n variant?: CardVariant\r\n /** Colored accent border (top or left depending on layout) */\r\n accent?: CardAccent\r\n /** Show header divider */\r\n headerDivider?: boolean\r\n /** Show footer divider */\r\n footerDivider?: boolean\r\n /** Make card clickable with hover effects */\r\n clickable?: boolean\r\n /** Selected state (adds visual indicator) */\r\n selected?: boolean\r\n /** Disabled state */\r\n disabled?: boolean\r\n /** Image URL for card media */\r\n image?: string\r\n /** Image alt text */\r\n imageAlt?: string\r\n /** Image position */\r\n imagePosition?: CardImagePosition\r\n /** Image height (for top/bottom positions) */\r\n imageHeight?: string\r\n /** Image width (for left/right positions) */\r\n imageWidth?: string\r\n /** Loading state */\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 /** Custom class for the card container */\r\n cardClass?: string\r\n /** Custom class for the header section */\r\n headerClass?: string\r\n /** Custom class for the title */\r\n titleClass?: string\r\n /** Custom class for the description */\r\n descriptionClass?: string\r\n /** Custom class for the icon wrapper */\r\n iconClass?: string\r\n /** Custom class for the icon element */\r\n iconElementClass?: string\r\n /** Custom class for the content/body */\r\n contentClass?: string\r\n /** Custom class for the footer */\r\n footerClass?: string\r\n /** Custom class for dividers */\r\n dividerClass?: string\r\n /** Custom class for the actions container */\r\n actionsClass?: string\r\n /** Custom class for the image */\r\n imageClass?: string\r\n }>(),\r\n {\r\n shadow: 'md',\r\n rounded: 'lg',\r\n padding: 'none',\r\n headerPadding: 'md',\r\n border: 'none',\r\n variant: 'default',\r\n accent: 'none',\r\n headerDivider: true,\r\n footerDivider: true,\r\n clickable: false,\r\n selected: false,\r\n disabled: false,\r\n imagePosition: 'top',\r\n imageHeight: '200px',\r\n imageWidth: '200px',\r\n loading: false,\r\n loadingLines: 3,\r\n loadingAvatar: false,\r\n loadingActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst slots = useSlots()\r\n\r\nconst hasHeader = computed(\r\n () =>\r\n props.title ||\r\n props.description ||\r\n props.icon ||\r\n slots.header ||\r\n slots.title ||\r\n slots.description ||\r\n slots.icon ||\r\n slots.actions\r\n)\r\n\r\nconst hasFooter = computed(() => !!slots.footer)\r\nconst hasImage = computed(() => !!props.image || !!slots.image)\r\nconst isHorizontal = computed(() => props.imagePosition === 'left' || props.imagePosition === 'right')\r\n\r\n// Shadow classes\r\nconst shadowClasses = computed(() => {\r\n const map: Record<CardShadow, string> = {\r\n none: '',\r\n sm: 'shadow-sm',\r\n md: 'shadow-md',\r\n lg: 'shadow-lg',\r\n xl: 'shadow-xl',\r\n }\r\n return map[props.shadow]\r\n})\r\n\r\n// Rounded classes\r\nconst roundedClasses = computed(() => {\r\n const map: Record<CardRounded, string> = {\r\n none: 'rounded-none',\r\n sm: 'rounded-sm',\r\n md: 'rounded-md',\r\n lg: 'rounded-lg',\r\n xl: 'rounded-xl',\r\n full: 'rounded-3xl',\r\n }\r\n return map[props.rounded]\r\n})\r\n\r\n// Padding classes for content\r\nconst paddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'p-3',\r\n md: 'p-5',\r\n lg: 'p-6',\r\n }\r\n return map[props.padding]\r\n})\r\n\r\n// Header padding classes (uses headerPadding prop)\r\nconst headerPaddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'px-3 py-2',\r\n md: 'px-5 py-3',\r\n lg: 'px-6 py-4',\r\n }\r\n return map[props.headerPadding]\r\n})\r\n\r\n// Footer padding classes (uses headerPadding prop for consistency)\r\nconst footerPaddingClasses = computed(() => {\r\n const map: Record<CardPadding, string> = {\r\n none: '',\r\n sm: 'px-3 py-2',\r\n md: 'px-5 py-3',\r\n lg: 'px-6 py-4',\r\n }\r\n return map[props.headerPadding]\r\n})\r\n\r\n// Border classes\r\nconst borderClasses = computed(() => {\r\n const map: Record<CardBorder, string> = {\r\n none: '',\r\n default: 'border border-gray-200 dark:border-gray-700',\r\n primary: 'border border-primary-500 dark:border-primary-400',\r\n secondary: 'border border-secondary-500 dark:border-secondary-400',\r\n }\r\n return map[props.border]\r\n})\r\n\r\n// Variant classes\r\nconst variantClasses = computed(() => {\r\n const map: Record<CardVariant, string> = {\r\n default: 'bg-white dark:bg-slate-950',\r\n glass: 'bg-white/15 backdrop-blur-sm',\r\n outline: 'bg-transparent',\r\n flat: 'bg-gray-50 dark:bg-slate-900',\r\n }\r\n return map[props.variant]\r\n})\r\n\r\n// Accent classes\r\nconst accentClasses = computed(() => {\r\n if (props.accent === 'none') return ''\r\n\r\n const colorMap: Record<Exclude<CardAccent, 'none'>, string> = {\r\n primary: 'border-primary-500',\r\n secondary: 'border-secondary-500',\r\n success: 'border-emerald-500',\r\n warning: 'border-amber-500',\r\n danger: 'border-red-500',\r\n info: 'border-blue-500',\r\n }\r\n\r\n const position = isHorizontal.value ? 'border-l-4' : 'border-t-4'\r\n return `${position} ${colorMap[props.accent]}`\r\n})\r\n\r\n// Clickable/interactive classes\r\nconst interactiveClasses = computed(() => {\r\n if (props.disabled) {\r\n return 'opacity-60 cursor-not-allowed'\r\n }\r\n\r\n if (props.clickable) {\r\n return 'cursor-pointer transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 active:translate-y-0 active:shadow-md'\r\n }\r\n\r\n return ''\r\n})\r\n\r\n// Selected state classes\r\nconst selectedClasses = computed(() => {\r\n if (!props.selected) return ''\r\n return 'ring-2 ring-primary-500 ring-offset-2 dark:ring-offset-slate-900'\r\n})\r\n\r\n// Divider classes\r\nconst computedDividerClass = computed(\r\n () => props.dividerClass || 'border-gray-200 dark:border-gray-700'\r\n)\r\n\r\n// Title classes\r\nconst computedTitleClass = computed(\r\n () => props.titleClass || 'text-gray-800 dark:text-gray-200'\r\n)\r\n\r\n// Description classes\r\nconst computedDescriptionClass = computed(\r\n () => props.descriptionClass || 'text-gray-600 dark:text-gray-400'\r\n)\r\n\r\n// Icon wrapper classes\r\nconst computedIconClass = computed(\r\n () =>\r\n props.iconClass ||\r\n 'flex items-center justify-center size-10 rounded-lg bg-primary-100 dark:bg-primary-900/30'\r\n)\r\n\r\n// Icon element classes\r\nconst computedIconElementClass = computed(\r\n () => props.iconElementClass || 'size-5 text-primary-600 dark:text-primary-400'\r\n)\r\n\r\n// Image container classes based on position\r\nconst imageContainerClasses = computed(() => {\r\n const base = 'overflow-hidden flex-shrink-0'\r\n\r\n switch (props.imagePosition) {\r\n case 'left':\r\n return `${base} rounded-l-lg`\r\n case 'right':\r\n return `${base} rounded-r-lg`\r\n case 'top':\r\n return `${base} rounded-t-lg`\r\n case 'bottom':\r\n return `${base} rounded-b-lg`\r\n case 'background':\r\n return 'absolute inset-0'\r\n default:\r\n return base\r\n }\r\n})\r\n\r\n// Image style\r\nconst imageStyle = computed(() => {\r\n if (props.imagePosition === 'background') {\r\n return {}\r\n }\r\n\r\n if (isHorizontal.value) {\r\n return { width: props.imageWidth }\r\n }\r\n\r\n return { height: props.imageHeight }\r\n})\r\n\r\n// Handle click\r\nconst handleClick = (event: MouseEvent | KeyboardEvent) => {\r\n if (props.disabled) return\r\n if (props.clickable) {\r\n emit('click', event as MouseEvent)\r\n }\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 <!-- Card Content -->\r\n <div\r\n v-else\r\n :class=\"[\r\n 'overflow-hidden relative',\r\n isHorizontal ? 'flex' : 'flex flex-col',\r\n imagePosition === 'right' && 'flex-row-reverse',\r\n shadowClasses,\r\n roundedClasses,\r\n borderClasses,\r\n variantClasses,\r\n accentClasses,\r\n interactiveClasses,\r\n selectedClasses,\r\n cardClass,\r\n ]\"\r\n :role=\"clickable ? 'button' : undefined\"\r\n :tabindex=\"clickable && !disabled ? 0 : undefined\"\r\n @click=\"handleClick\"\r\n @keydown.enter=\"handleClick\"\r\n @keydown.space.prevent=\"handleClick\"\r\n >\r\n <!-- Background Image -->\r\n <div\r\n v-if=\"hasImage && imagePosition === 'background'\"\r\n :class=\"imageContainerClasses\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n <div class=\"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent\" />\r\n </div>\r\n\r\n <!-- Left/Top Image -->\r\n <div\r\n v-if=\"hasImage && (imagePosition === 'left' || imagePosition === 'top')\"\r\n :class=\"imageContainerClasses\"\r\n :style=\"imageStyle\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div :class=\"['flex flex-col flex-1 min-w-0', imagePosition === 'background' && 'relative z-10']\">\r\n <!-- Custom header slot (replaces standard header) -->\r\n <div\r\n v-if=\"$slots.header\"\r\n :class=\"[\r\n headerDivider && 'border-b',\r\n computedDividerClass,\r\n headerClass,\r\n ]\"\r\n >\r\n <slot name=\"header\" />\r\n </div>\r\n\r\n <!-- Standard header with icon/title/description/actions -->\r\n <div\r\n v-else-if=\"hasHeader\"\r\n :class=\"[\r\n 'flex items-center justify-between gap-4',\r\n headerPaddingClasses,\r\n headerDivider && 'border-b',\r\n computedDividerClass,\r\n headerClass,\r\n imagePosition === 'background' && 'text-white border-white/20',\r\n ]\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <!-- Icon -->\r\n <div v-if=\"icon || $slots.icon\" :class=\"computedIconClass\">\r\n <slot name=\"icon\">\r\n <Icon v-if=\"icon\" :icon=\"icon\" :class=\"computedIconElementClass\" />\r\n </slot>\r\n </div>\r\n\r\n <!-- Title & Description -->\r\n <div class=\"flex flex-col gap-0.5\">\r\n <span\r\n v-if=\"title || $slots.title\"\r\n :class=\"[\r\n 'text-md font-semibold',\r\n imagePosition === 'background' ? 'text-white' : computedTitleClass,\r\n ]\"\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=\"[\r\n 'text-sm font-normal',\r\n imagePosition === 'background' ? 'text-white/80' : computedDescriptionClass,\r\n ]\"\r\n >\r\n <slot name=\"description\">\r\n {{ description }}\r\n </slot>\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div v-if=\"$slots.actions\" :class=\"['flex gap-2', actionsClass]\">\r\n <slot name=\"actions\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div :class=\"['flex-1', paddingClasses, contentClass]\">\r\n <slot />\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n v-if=\"hasFooter\"\r\n :class=\"[\r\n footerDivider && 'border-t',\r\n computedDividerClass,\r\n footerPaddingClasses,\r\n footerClass,\r\n imagePosition === 'background' && 'text-white border-white/20',\r\n ]\"\r\n >\r\n <slot name=\"footer\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Right/Bottom Image -->\r\n <div\r\n v-if=\"hasImage && (imagePosition === 'right' || imagePosition === 'bottom')\"\r\n :class=\"imageContainerClasses\"\r\n :style=\"imageStyle\"\r\n >\r\n <slot name=\"image\">\r\n <img\r\n v-if=\"image\"\r\n :src=\"image\"\r\n :alt=\"imageAlt || ''\"\r\n :class=\"['w-full h-full object-cover', imageClass]\"\r\n />\r\n </slot>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\">\r\nimport type { InjectionKey } from 'vue'\r\n\r\nexport interface TableContext {\r\n striped: boolean\r\n bordered: boolean\r\n hover: boolean\r\n compact: boolean\r\n stickyHeader: boolean\r\n}\r\n\r\nexport const TableContextKey: InjectionKey<TableContext> = Symbol('TableContext')\r\n</script>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { computed, provide, reactive, toRefs, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Enable alternating row colors */\r\n striped?: boolean\r\n /** Show cell borders */\r\n bordered?: boolean\r\n /** Enable row hover effect */\r\n hover?: boolean\r\n /** Use compact padding */\r\n compact?: boolean\r\n /** Make header sticky on scroll */\r\n stickyHeader?: boolean\r\n }>(),\r\n {\r\n striped: false,\r\n bordered: false,\r\n hover: true,\r\n compact: false,\r\n stickyHeader: false,\r\n }\r\n)\r\n\r\nconst tableClasses = computed(() => [\r\n 'w-full text-left',\r\n props.bordered ? 'border border-gray-200 dark:border-gray-700' : '',\r\n])\r\n\r\nconst wrapperClasses = computed(() => [\r\n 'overflow-hidden',\r\n props.stickyHeader ? 'max-h-[600px] overflow-y-auto' : '',\r\n])\r\n\r\n// Provide reactive context to child components\r\nconst { striped, bordered, hover, compact, stickyHeader } = toRefs(props)\r\nprovide(TableContextKey, reactive({\r\n striped,\r\n bordered,\r\n hover,\r\n compact,\r\n stickyHeader,\r\n}) as TableContext)\r\n</script>\r\n\r\n<template>\r\n <div :class=\"wrapperClasses\">\r\n <div class=\"overflow-x-auto\">\r\n <table\r\n v-bind=\"attrs\"\r\n :class=\"tableClasses\"\r\n >\r\n <slot />\r\n </table>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Position of the caption */\r\n position?: 'top' | 'bottom'\r\n /** Visually hide caption but keep for screen readers */\r\n srOnly?: boolean\r\n }>(),\r\n {\r\n position: 'top',\r\n srOnly: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n</script>\r\n\r\n<template>\r\n <caption\r\n v-bind=\"attrs\"\r\n :class=\"[\r\n position === 'bottom' ? 'caption-bottom' : 'caption-top',\r\n srOnly ? 'sr-only' : 'py-2 text-sm text-gray-600 dark:text-gray-400',\r\n ]\"\r\n >\r\n <slot />\r\n </caption>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst attrs = useAttrs()\r\n</script>\r\n\r\n<template>\r\n <colgroup v-bind=\"attrs\">\r\n <slot />\r\n </colgroup>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed, useAttrs } from 'vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = defineProps<{\r\n /** Number of columns to span */\r\n span?: number | string\r\n /** Column width */\r\n width?: string\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst colStyles = computed(() => ({\r\n width: props.width,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <col\r\n v-bind=\"attrs\"\r\n :span=\"span\"\r\n :style=\"colStyles\"\r\n />\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst theadClasses = computed(() => [\r\n 'text-sm font-semibold text-gray-600 uppercase dark:text-gray-400',\r\n context?.bordered\r\n ? 'border-b border-gray-200 dark:border-gray-700'\r\n : 'border-b border-black/10 dark:border-white/10',\r\n context?.stickyHeader ? 'sticky top-0 z-10' : '',\r\n])\r\n</script>\r\n\r\n<template>\r\n <thead\r\n v-bind=\"attrs\"\r\n :class=\"theadClasses\"\r\n class=\"bg-black/5 dark:bg-white/5\"\r\n >\r\n <slot />\r\n </thead>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst tbodyClasses = computed(() => [\r\n 'font-medium',\r\n context?.bordered\r\n ? 'divide-y divide-gray-200 dark:divide-gray-700'\r\n : 'divide-y divide-black/10 dark:divide-white/10',\r\n])\r\n</script>\r\n\r\n<template>\r\n <tbody\r\n v-bind=\"attrs\"\r\n :class=\"tbodyClasses\"\r\n >\r\n <slot />\r\n </tbody>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\nconst attrs = useAttrs()\r\n\r\nconst tfootClasses = computed(() => [\r\n 'text-sm font-medium text-gray-600 dark:text-gray-400',\r\n context?.bordered\r\n ? 'border-t border-gray-200 dark:border-gray-700'\r\n : 'border-t border-black/10 dark:border-white/10',\r\n])\r\n</script>\r\n\r\n<template>\r\n <tfoot\r\n v-bind=\"attrs\"\r\n :class=\"tfootClasses\"\r\n class=\"bg-black/5 dark:bg-white/5\"\r\n >\r\n <slot />\r\n </tfoot>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Whether the row is selected */\r\n selected?: boolean\r\n /** Make the row clickable with hover cursor */\r\n clickable?: boolean\r\n /** Disable the row */\r\n disabled?: boolean\r\n /** Whether this is an even row (for striped tables, auto-detected if not provided) */\r\n even?: boolean\r\n }>(),\r\n {\r\n selected: false,\r\n clickable: false,\r\n disabled: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when the row is clicked (if clickable) */\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst rowClasses = computed(() => [\r\n 'transition-colors',\r\n // Hover effect\r\n context?.hover && !props.disabled ? 'hover:bg-black/5 dark:hover:bg-white/5' : '',\r\n // Selected state\r\n props.selected ? 'bg-primary-50 dark:bg-primary-900/20' : '',\r\n // Striped (only apply if not selected)\r\n context?.striped && props.even && !props.selected ? 'bg-black/[0.02] dark:bg-white/[0.02]' : '',\r\n // Clickable\r\n props.clickable && !props.disabled ? 'cursor-pointer' : '',\r\n // Disabled\r\n props.disabled ? 'opacity-50 cursor-not-allowed' : '',\r\n])\r\n\r\nconst handleClick = (event: MouseEvent) => {\r\n if (props.clickable && !props.disabled) {\r\n emit('click', event)\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <tr\r\n v-bind=\"attrs\"\r\n :class=\"rowClasses\"\r\n @click=\"handleClick\"\r\n >\r\n <slot />\r\n </tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\nexport type SortDirection = 'asc' | 'desc'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Enable sorting for this column */\r\n sortable?: boolean\r\n /** Whether this column is currently sorted */\r\n sorted?: boolean\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Text alignment */\r\n align?: 'left' | 'center' | 'right'\r\n /** Fixed width (e.g., '200px', '20%') */\r\n width?: string\r\n /** Minimum width */\r\n minWidth?: string\r\n /** Maximum width */\r\n maxWidth?: string\r\n /** Make this column sticky (for horizontal scroll) */\r\n sticky?: boolean\r\n /** Sticky position from left (for multiple sticky columns) */\r\n stickyLeft?: string\r\n /** Column span */\r\n colspan?: number | string\r\n /** Row span */\r\n rowspan?: number | string\r\n /** Scope attribute for accessibility (col, row, colgroup, rowgroup) */\r\n scope?: 'col' | 'row' | 'colgroup' | 'rowgroup'\r\n /** Enable column resizing */\r\n resizable?: boolean\r\n /** Whether this column is currently being resized */\r\n resizing?: boolean\r\n }>(),\r\n {\r\n sortable: false,\r\n sorted: false,\r\n sortDirection: 'asc',\r\n align: 'left',\r\n sticky: false,\r\n stickyLeft: '0',\r\n scope: 'col',\r\n resizable: false,\r\n resizing: false,\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when sortable header is clicked */\r\n sort: []\r\n /** Emitted when resize handle is dragged */\r\n resizeStart: [event: MouseEvent | TouchEvent]\r\n}>()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst thClasses = computed(() => [\r\n // Padding\r\n context?.compact ? 'px-2 py-2' : 'px-3 py-3',\r\n // Alignment\r\n props.align === 'center' ? 'text-center' : props.align === 'right' ? 'text-right' : 'text-left',\r\n // Sortable hover\r\n props.sortable ? 'cursor-pointer select-none hover:bg-black/5 dark:hover:bg-white/5' : '',\r\n // Border for bordered tables\r\n context?.bordered ? 'border-r border-gray-200 dark:border-gray-700 last:border-r-0' : '',\r\n // Sticky column\r\n props.sticky ? 'sticky bg-black/5 dark:bg-white/5 z-20' : '',\r\n // Resizable\r\n props.resizable ? 'relative' : '',\r\n])\r\n\r\nconst thStyles = computed(() => ({\r\n width: props.width,\r\n minWidth: props.minWidth,\r\n maxWidth: props.maxWidth,\r\n left: props.sticky ? props.stickyLeft : undefined,\r\n}))\r\n\r\nconst handleSort = () => {\r\n if (props.sortable) {\r\n emit('sort')\r\n }\r\n}\r\n</script>\r\n\r\n<template>\r\n <th\r\n v-bind=\"attrs\"\r\n :class=\"thClasses\"\r\n :style=\"thStyles\"\r\n :colspan=\"colspan\"\r\n :rowspan=\"rowspan\"\r\n :scope=\"scope\"\r\n :aria-sort=\"sortable ? (sorted ? (sortDirection === 'asc' ? 'ascending' : 'descending') : 'none') : undefined\"\r\n @click=\"handleSort\"\r\n >\r\n <div\r\n class=\"flex items-center gap-1\"\r\n :class=\"{\r\n 'justify-center': align === 'center',\r\n 'justify-end': align === 'right',\r\n }\"\r\n >\r\n <slot />\r\n <!-- Sort indicator -->\r\n <svg\r\n v-if=\"sortable\"\r\n :class=\"[\r\n 'size-4 transition-colors flex-shrink-0',\r\n sorted ? '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=\"sorted && 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=\"sorted && 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 <!-- Resize handle -->\r\n <div\r\n v-if=\"resizable\"\r\n :class=\"[\r\n 'absolute top-0 right-0 bottom-0 w-1 cursor-col-resize select-none',\r\n 'hover:bg-primary-400 dark:hover:bg-primary-500',\r\n 'transition-colors',\r\n resizing ? 'bg-primary-500' : 'bg-transparent',\r\n ]\"\r\n role=\"separator\"\r\n aria-orientation=\"vertical\"\r\n tabindex=\"-1\"\r\n @mousedown.stop=\"emit('resizeStart', $event)\"\r\n @touchstart.stop=\"emit('resizeStart', $event)\"\r\n />\r\n </th>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { inject, computed, useAttrs } from 'vue'\r\nimport { TableContextKey, type TableContext } from './Table.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Text alignment */\r\n align?: 'left' | 'center' | 'right'\r\n /** Whether this is the main/primary column */\r\n main?: boolean\r\n /** Additional CSS classes */\r\n className?: string\r\n /** Truncate text with ellipsis */\r\n truncate?: boolean\r\n /** Fixed width (e.g., '200px', '20%') */\r\n width?: string\r\n /** Make this column sticky (for horizontal scroll) */\r\n sticky?: boolean\r\n /** Sticky position from left (for multiple sticky columns) */\r\n stickyLeft?: string\r\n /** Column span */\r\n colspan?: number | string\r\n /** Row span */\r\n rowspan?: number | string\r\n }>(),\r\n {\r\n align: 'left',\r\n main: false,\r\n truncate: false,\r\n sticky: false,\r\n stickyLeft: '0',\r\n }\r\n)\r\n\r\nconst attrs = useAttrs()\r\n\r\nconst context = inject<TableContext>(TableContextKey)\r\n\r\nconst tdClasses = computed(() => [\r\n // Padding\r\n context?.compact ? 'px-2 py-2' : 'px-3 py-4',\r\n // Alignment\r\n props.align === 'center' ? 'text-center' : props.align === 'right' ? 'text-right' : 'text-left',\r\n // Main column styling\r\n props.main\r\n ? 'text-sm font-semibold text-gray-900 dark:text-gray-100'\r\n : 'text-xs font-medium text-gray-600 dark:text-gray-400',\r\n // Truncate\r\n props.truncate ? 'truncate' : '',\r\n // Border for bordered tables\r\n context?.bordered ? 'border-r border-gray-200 dark:border-gray-700 last:border-r-0' : '',\r\n // Sticky column\r\n props.sticky ? 'sticky bg-white dark:bg-gray-900 z-10' : '',\r\n // Custom className\r\n props.className || '',\r\n])\r\n\r\nconst tdStyles = computed(() => ({\r\n width: props.width,\r\n maxWidth: props.truncate ? props.width || '200px' : undefined,\r\n left: props.sticky ? props.stickyLeft : undefined,\r\n}))\r\n</script>\r\n\r\n<template>\r\n <td\r\n v-bind=\"attrs\"\r\n :class=\"tdClasses\"\r\n :style=\"tdStyles\"\r\n :colspan=\"colspan\"\r\n :rowspan=\"rowspan\"\r\n >\r\n <slot />\r\n </td>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Th from '../atoms/Th.vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\r\nimport type { SortDirection } from '../atoms/Th.vue'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Column definitions */\r\n columns: Property[]\r\n /** Enable selection column */\r\n selectable?: boolean\r\n /** Whether all items are selected */\r\n allSelected?: boolean\r\n /** Whether some items are selected (indeterminate state) */\r\n someSelected?: boolean\r\n /** Number of selectable items (for disabling checkbox when 0) */\r\n selectableCount?: number\r\n /** Current sort column */\r\n sortBy?: string\r\n /** Current sort direction */\r\n sortDirection?: SortDirection\r\n /** Show action column */\r\n showActions?: boolean\r\n }>(),\r\n {\r\n selectable: false,\r\n allSelected: false,\r\n someSelected: false,\r\n selectableCount: 0,\r\n showActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when select all checkbox is toggled */\r\n selectAll: []\r\n /** Emitted when a sortable column header is clicked */\r\n sort: [column: string, direction: SortDirection]\r\n}>()\r\n\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</script>\r\n\r\n<template>\r\n <Tr>\r\n <!-- Selection column -->\r\n <Th\r\n v-if=\"selectable\"\r\n width=\"48px\"\r\n >\r\n <Checkbox\r\n :model-value=\"allSelected\"\r\n :indeterminate=\"someSelected\"\r\n :disabled=\"selectableCount === 0\"\r\n @update:model-value=\"emit('selectAll')\"\r\n />\r\n </Th>\r\n\r\n <!-- Data columns -->\r\n <Th\r\n v-for=\"column in columns\"\r\n :key=\"column.name\"\r\n :sortable=\"column.sortable\"\r\n :sorted=\"sortBy === column.name\"\r\n :sort-direction=\"sortDirection\"\r\n :align=\"column.align\"\r\n :width=\"column.width\"\r\n :min-width=\"column.minWidth\"\r\n :max-width=\"column.maxWidth\"\r\n @sort=\"handleSort(column)\"\r\n >\r\n <slot\r\n :name=\"'header-' + column.name\"\r\n :column=\"column\"\r\n >\r\n {{ column.label ?? column.name }}\r\n </slot>\r\n </Th>\r\n\r\n <!-- Actions column -->\r\n <Th\r\n v-if=\"showActions\"\r\n align=\"right\"\r\n width=\"100px\"\r\n />\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport type { Component } from 'vue'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\nimport Checkbox from '@/components/form/Checkbox.vue'\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\n\r\ntype ItemType = { id: number | string; [key: string]: unknown }\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** The data item for this row */\r\n item: ItemType\r\n /** Column definitions */\r\n columns: Property[]\r\n /** Enable selection for this row */\r\n selectable?: boolean\r\n /** Whether this row is selected */\r\n selected?: boolean\r\n /** Whether this row can be selected */\r\n canSelect?: boolean\r\n /** Make the row clickable */\r\n clickable?: boolean\r\n /** Whether this is an even row (for striped tables) */\r\n even?: boolean\r\n /** Show action column */\r\n showActions?: boolean\r\n }>(),\r\n {\r\n selectable: false,\r\n selected: false,\r\n canSelect: true,\r\n clickable: false,\r\n even: false,\r\n showActions: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when the row checkbox is toggled */\r\n select: []\r\n /** Emitted when the row is clicked (if clickable) */\r\n click: [event: MouseEvent]\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// 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</script>\r\n\r\n<template>\r\n <Tr\r\n :selected=\"selected\"\r\n :clickable=\"clickable\"\r\n :even=\"even\"\r\n @click=\"(e) => emit('click', e)\"\r\n >\r\n <!-- Selection cell -->\r\n <Td\r\n v-if=\"selectable\"\r\n width=\"48px\"\r\n >\r\n <Checkbox\r\n v-if=\"canSelect\"\r\n :model-value=\"selected\"\r\n @update:model-value=\"emit('select')\"\r\n />\r\n </Td>\r\n\r\n <!-- Data cells -->\r\n <Td\r\n v-for=\"column in columns\"\r\n :key=\"column.name\"\r\n :align=\"column.align\"\r\n :main=\"column.main\"\r\n :class-name=\"column.className\"\r\n :truncate=\"column.truncate\"\r\n :width=\"column.width\"\r\n >\r\n <slot\r\n :name=\"'cell-' + column.name\"\r\n :item=\"item\"\r\n :value=\"getItemValue(item, column)\"\r\n :column=\"column\"\r\n >\r\n <component\r\n :is=\"getTypeComponent(column.type || 'text')\"\r\n :value=\"getItemValue(item, column)\"\r\n />\r\n </slot>\r\n </Td>\r\n\r\n <!-- Action cell -->\r\n <Td\r\n v-if=\"showActions\"\r\n align=\"right\"\r\n >\r\n <div class=\"flex items-center justify-end gap-2\">\r\n <slot\r\n name=\"actions\"\r\n :item=\"item\"\r\n />\r\n </div>\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\n\r\ndefineProps<{\r\n /** Number of columns to span */\r\n colSpan?: number\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <Tr>\r\n <Td\r\n :colspan=\"colSpan\"\r\n class=\"text-center\"\r\n >\r\n <slot />\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { ref, computed, useAttrs } from 'vue'\r\nimport Tr from '../atoms/Tr.vue'\r\nimport Td from '../atoms/Td.vue'\r\n\r\ndefineOptions({\r\n inheritAttrs: false,\r\n})\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Number of columns in the table (for colspan on expanded content) */\r\n colspan: number\r\n /** Whether the row is initially expanded */\r\n defaultExpanded?: boolean\r\n /** Control expanded state externally (use undefined for uncontrolled) */\r\n expanded?: boolean | undefined\r\n /** Whether the row is selected */\r\n selected?: boolean\r\n /** Whether the row is disabled */\r\n disabled?: boolean\r\n /** Whether clicking the row toggles expansion */\r\n expandOnRowClick?: boolean\r\n }>(),\r\n {\r\n defaultExpanded: false,\r\n expanded: undefined,\r\n expandOnRowClick: false,\r\n selected: false,\r\n disabled: false,\r\n }\r\n)\r\n\r\nconst emit = defineEmits<{\r\n /** Emitted when expanded state changes */\r\n 'update:expanded': [value: boolean]\r\n /** Emitted when the row is clicked */\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\nconst attrs = useAttrs()\r\n\r\n// Internal expanded state (used when not controlled externally)\r\nconst internalExpanded = ref(props.defaultExpanded)\r\n\r\n// Use external expanded if provided (not undefined), otherwise use internal\r\nconst isExpanded = computed({\r\n get: () => props.expanded !== undefined ? props.expanded : internalExpanded.value,\r\n set: (value) => {\r\n internalExpanded.value = value\r\n emit('update:expanded', value)\r\n },\r\n})\r\n\r\nconst toggle = () => {\r\n if (!props.disabled) {\r\n isExpanded.value = !isExpanded.value\r\n }\r\n}\r\n\r\nconst handleRowClick = (event: MouseEvent) => {\r\n emit('click', event)\r\n if (props.expandOnRowClick) {\r\n toggle()\r\n }\r\n}\r\n\r\n// Expose toggle method for external use\r\ndefineExpose({ toggle, isExpanded })\r\n</script>\r\n\r\n<template>\r\n <Tr\r\n v-bind=\"attrs\"\r\n :selected=\"selected\"\r\n :disabled=\"disabled\"\r\n clickable\r\n @click=\"handleRowClick\"\r\n >\r\n <!-- Expand toggle cell -->\r\n <Td\r\n width=\"40px\"\r\n class=\"!p-2\"\r\n >\r\n <button\r\n type=\"button\"\r\n :disabled=\"disabled\"\r\n class=\"flex size-6 items-center justify-center rounded transition-colors hover:bg-black/10 dark:hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed\"\r\n :aria-expanded=\"isExpanded\"\r\n aria-label=\"Toggle row details\"\r\n @click.stop=\"toggle\"\r\n >\r\n <svg\r\n class=\"size-4 transition-transform\"\r\n :class=\"{ 'rotate-90': isExpanded }\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"currentColor\"\r\n >\r\n <path d=\"M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z\" />\r\n </svg>\r\n </button>\r\n </Td>\r\n <!-- Row content -->\r\n <slot name=\"row\" />\r\n </Tr>\r\n\r\n <!-- Expanded content row -->\r\n <Tr\r\n v-if=\"isExpanded\"\r\n class=\"bg-gray-50 dark:bg-gray-800/50\"\r\n >\r\n <Td\r\n :colspan=\"colspan + 1\"\r\n class=\"!p-0\"\r\n >\r\n <div class=\"p-4\">\r\n <slot name=\"expanded\" />\r\n </div>\r\n </Td>\r\n </Tr>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport type { Property } from '@/types'\r\nimport { computed, useSlots, type Slots } from 'vue'\r\nimport Table from './atoms/Table.vue'\r\nimport Thead from './atoms/Thead.vue'\r\nimport Tbody from './atoms/Tbody.vue'\r\nimport TableHeader from './molecules/TableHeader.vue'\r\nimport TableRow from './molecules/TableRow.vue'\r\nimport TableSkeleton from '@/components/feedback/TableSkeleton.vue'\r\nimport PaginationControls from '@/components/feedback/PaginationControls.vue'\r\nimport { usePagination } from '@/composables'\r\nimport type { SortDirection } from './atoms/Th.vue'\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 */\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 /** Whether there is an error to display */\r\n error?: boolean\r\n /** Error message to display (if error slot not provided) */\r\n errorMessage?: string\r\n /** Enable alternating row colors */\r\n striped?: boolean\r\n /** Show cell borders */\r\n bordered?: boolean\r\n /** Enable row hover effect */\r\n hover?: boolean\r\n /** Use compact padding */\r\n compact?: boolean\r\n /** Make header sticky on scroll */\r\n stickyHeader?: boolean\r\n /** Make rows clickable */\r\n clickableRows?: boolean\r\n /** Enable client-side pagination */\r\n paginated?: boolean\r\n /** Number of items per page */\r\n pageSize?: number\r\n /** Available page size options */\r\n pageSizeOptions?: number[]\r\n /** Show page size selector */\r\n showPageSize?: boolean\r\n /** Current page (1-indexed, for controlled pagination) */\r\n currentPage?: number\r\n /** Total items (for server-side pagination) */\r\n totalItems?: number\r\n }>(),\r\n {\r\n selectable: false,\r\n keyField: 'id',\r\n loading: false,\r\n loadingRows: 5,\r\n error: false,\r\n errorMessage: 'An error occurred while loading data.',\r\n striped: false,\r\n bordered: false,\r\n hover: true,\r\n compact: false,\r\n stickyHeader: false,\r\n clickableRows: false,\r\n paginated: false,\r\n pageSize: 10,\r\n pageSizeOptions: () => [10, 20, 50, 100],\r\n showPageSize: true,\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 /** Emitted when a row is clicked (if clickableRows is true) */\r\n rowClick: [item: ItemType, event: MouseEvent]\r\n /** Emitted when page changes */\r\n 'update:currentPage': [page: number]\r\n /** Emitted when page size changes */\r\n 'update:pageSize': [size: number]\r\n}>()\r\n\r\n// Filter out hidden properties\r\nconst visibleProperties = computed(() => props.properties.filter((p) => !p.hidden))\r\n\r\n// Pagination\r\nconst {\r\n currentPage: internalPage,\r\n pageSize: internalPageSize,\r\n totalPages,\r\n paginatedItems,\r\n setPageSize: setInternalPageSize,\r\n goToPage,\r\n} = usePagination({\r\n items: computed(() => props.items),\r\n pageSize: props.pageSize,\r\n initialPage: props.currentPage ?? 1,\r\n})\r\n\r\n// Support controlled or uncontrolled pagination\r\nconst effectivePage = computed(() => props.currentPage ?? internalPage.value)\r\nconst effectivePageSize = computed(() => props.pageSize ?? internalPageSize.value)\r\n\r\n// For server-side pagination, use totalItems prop if provided\r\nconst effectiveTotalPages = computed(() => {\r\n if (props.totalItems !== undefined) {\r\n return Math.ceil(props.totalItems / effectivePageSize.value)\r\n }\r\n return totalPages.value\r\n})\r\n\r\n// Items to display (paginated or all)\r\nconst displayItems = computed(() => {\r\n if (!props.paginated) return props.items\r\n // For server-side pagination (when totalItems is provided), use items directly\r\n if (props.totalItems !== undefined) return props.items\r\n return paginatedItems.value\r\n})\r\n\r\nconst handlePageChange = (page: number) => {\r\n goToPage(page)\r\n emit('update:currentPage', page)\r\n}\r\n\r\nconst handlePageSizeChange = (size: number) => {\r\n setInternalPageSize(size)\r\n emit('update:pageSize', size)\r\n}\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// 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 handleRowClick = (item: ItemType, event: MouseEvent) => {\r\n if (props.clickableRows) {\r\n emit('rowClick', item, event)\r\n }\r\n}\r\n\r\nconst hasActionSlot = computed((): boolean => !!slots.action)\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 <!-- Error State -->\r\n <div\r\n v-else-if=\"error\"\r\n class=\"flex flex-col items-center justify-center py-12 text-center\"\r\n >\r\n <slot name=\"error\">\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <svg\r\n class=\"size-12 text-red-400\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"1.5\"\r\n d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\"\r\n />\r\n </svg>\r\n <p class=\"text-sm text-gray-600 dark:text-gray-400\">{{ errorMessage }}</p>\r\n </div>\r\n </slot>\r\n </div>\r\n\r\n <!-- Content -->\r\n <Table\r\n v-else-if=\"items && items.length > 0\"\r\n :striped=\"striped\"\r\n :bordered=\"bordered\"\r\n :hover=\"hover\"\r\n :compact=\"compact\"\r\n :sticky-header=\"stickyHeader\"\r\n >\r\n <Thead>\r\n <TableHeader\r\n :columns=\"visibleProperties\"\r\n :selectable=\"selectable\"\r\n :all-selected=\"allSelected\"\r\n :some-selected=\"someSelected\"\r\n :selectable-count=\"selectableItems.length\"\r\n :sort-by=\"sortBy\"\r\n :sort-direction=\"sortDirection\"\r\n :show-actions=\"hasActionSlot\"\r\n @select-all=\"emit('selectAll')\"\r\n @sort=\"(col, dir) => emit('sort', col, dir)\"\r\n >\r\n <!-- Forward header slots -->\r\n <template\r\n v-for=\"column in visibleProperties\"\r\n :key=\"'header-' + column.name\"\r\n #[`header-${column.name}`]=\"slotProps\"\r\n >\r\n <slot\r\n :name=\"'header-' + column.name\"\r\n v-bind=\"slotProps\"\r\n />\r\n </template>\r\n </TableHeader>\r\n </Thead>\r\n\r\n <Tbody>\r\n <TableRow\r\n v-for=\"(item, index) in displayItems\"\r\n :key=\"getKey(item)\"\r\n :item=\"item\"\r\n :columns=\"visibleProperties\"\r\n :selectable=\"selectable\"\r\n :selected=\"isSelected(item)\"\r\n :can-select=\"isSelectable(item)\"\r\n :clickable=\"clickableRows\"\r\n :even=\"index % 2 === 1\"\r\n :show-actions=\"hasActionSlot\"\r\n @select=\"handleSelect(item)\"\r\n @click=\"(e) => handleRowClick(item, e)\"\r\n >\r\n <!-- Forward cell slots -->\r\n <template\r\n v-for=\"column in visibleProperties\"\r\n :key=\"'cell-' + column.name\"\r\n #[`cell-${column.name}`]=\"slotProps\"\r\n >\r\n <slot\r\n :name=\"'item-' + column.name\"\r\n v-bind=\"slotProps\"\r\n />\r\n </template>\r\n\r\n <!-- Forward action slot -->\r\n <template #actions=\"{ item: rowItem }\">\r\n <slot\r\n name=\"action\"\r\n :item=\"rowItem\"\r\n />\r\n </template>\r\n </TableRow>\r\n </Tbody>\r\n </Table>\r\n\r\n <!-- Empty state -->\r\n <div\r\n v-else\r\n class=\"flex flex-col items-center justify-center py-12 text-center\"\r\n >\r\n <slot name=\"empty\">\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <svg\r\n class=\"size-12 text-gray-300 dark:text-gray-600\"\r\n fill=\"none\"\r\n viewBox=\"0 0 24 24\"\r\n stroke=\"currentColor\"\r\n >\r\n <path\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n stroke-width=\"1.5\"\r\n d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\"\r\n />\r\n </svg>\r\n <p class=\"text-sm text-gray-500 dark:text-gray-400\">No data available</p>\r\n </div>\r\n </slot>\r\n </div>\r\n\r\n <!-- Pagination (outside v-if/v-else chain) -->\r\n <PaginationControls\r\n v-if=\"paginated && items && items.length > 0 && !loading && !error\"\r\n :current-page=\"effectivePage\"\r\n :total-pages=\"effectiveTotalPages\"\r\n :page-size=\"effectivePageSize\"\r\n :page-size-options=\"pageSizeOptions\"\r\n :show-page-size=\"showPageSize\"\r\n class=\"mt-4\"\r\n @update:current-page=\"handlePageChange\"\r\n @update:page-size=\"handlePageSizeChange\"\r\n />\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=\"size-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 { DataTable as TableComponent } from './table'\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\r\n ref=\"containerRef\"\r\n class=\"autocomplete-container\"\r\n >\r\n <label\r\n v-if=\"label\"\r\n class=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\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\r\n class=\"size-5 text-gray-400\"\r\n icon=\"lucide:search\"\r\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-hidden 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\r\n class=\"size-4 text-gray-400\"\r\n icon=\"lucide:x\"\r\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\r\n to=\"body\"\r\n :disabled=\"!teleport\"\r\n >\r\n <Transition\r\n enter-active-class=\"transition duration-100 ease-out\"\r\n enter-from-class=\"opacity-0 scale-95\"\r\n enter-to-class=\"opacity-100 scale-100\"\r\n leave-active-class=\"transition duration-75 ease-in\"\r\n leave-from-class=\"opacity-100 scale-100\"\r\n leave-to-class=\"opacity-0 scale-95\"\r\n >\r\n <div\r\n v-if=\"isOpen\"\r\n 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\r\n v-if=\"filteredOptions.length === 0\"\r\n class=\"px-4 py-3 text-sm text-gray-500\"\r\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\r\n v-if=\"error\"\r\n class=\"mt-1 text-sm text-red-600\"\r\n >\r\n {{ error }}\r\n </p>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\n/**\n * Menu - Container component for navigation menu items\n *\n * Provides consistent styling and layout for MenuItem components.\n * Typically used in sidebar navigation.\n *\n * @example\n * <Menu>\n * <MenuItem :menuItem=\"{ label: 'Dashboard', icon: 'lucide:home', link: '/' }\" />\n * <MenuItem :menuItem=\"{ label: 'Users', icon: 'lucide:users', link: '/users' }\" />\n * </Menu>\n */\nimport { provide, computed } from 'vue'\n\nexport type MenuVariant = 'default' | 'compact' | 'pills'\n\nconst props = withDefaults(\n defineProps<{\n /** Visual style variant */\n variant?: MenuVariant\n /** Gap between menu items */\n gap?: 'none' | 'sm' | 'md' | 'lg'\n /** Whether the menu is in collapsed/compact mode (icons only) */\n collapsed?: boolean\n }>(),\n {\n variant: 'default',\n gap: 'sm',\n collapsed: false,\n },\n)\n\n// Provide collapsed state to children\nprovide('menuCollapsed', computed(() => props.collapsed))\n\nconst gapClasses: Record<string, string> = {\n none: 'gap-0',\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-4',\n}\n</script>\n\n<template>\n <nav\n :class=\"[\n 'flex flex-col',\n gapClasses[gap],\n ]\"\n role=\"navigation\"\n >\n <slot />\n </nav>\n</template>\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>\r\nimport { computed, ref } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\r\nexport type AvatarColor =\r\n | 'gray'\r\n | 'red'\r\n | 'orange'\r\n | 'amber'\r\n | 'yellow'\r\n | 'lime'\r\n | 'green'\r\n | 'emerald'\r\n | 'teal'\r\n | 'cyan'\r\n | 'sky'\r\n | 'blue'\r\n | 'indigo'\r\n | 'violet'\r\n | 'purple'\r\n | 'fuchsia'\r\n | 'pink'\r\n | 'rose'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Image source URL */\r\n src?: string\r\n /** Alt text for image */\r\n alt?: string\r\n /** Fallback name (shows initials) */\r\n name?: string\r\n /** Size variant */\r\n size?: AvatarSize\r\n /** Show online status indicator */\r\n status?: 'online' | 'offline' | 'away' | 'busy'\r\n /** Rounded style */\r\n rounded?: 'full' | 'lg' | 'md'\r\n /** Background color (manual selection) */\r\n color?: AvatarColor\r\n /** Auto-generate color from name (like WhatsApp) */\r\n autoColor?: boolean\r\n }>(),\r\n {\r\n size: 'md',\r\n rounded: 'full',\r\n autoColor: false,\r\n },\r\n)\r\n\r\nconst imageError = ref(false)\r\n\r\nconst sizeClasses: Record<AvatarSize, string> = {\r\n xs: 'size-6 text-xs',\r\n sm: 'size-8 text-sm',\r\n md: 'size-10 text-base',\r\n lg: 'size-12 text-lg',\r\n xl: 'size-16 text-xl',\r\n '2xl': 'size-20 text-2xl',\r\n}\r\n\r\nconst statusSizes: Record<AvatarSize, string> = {\r\n xs: 'size-1.5',\r\n sm: 'size-2',\r\n md: 'size-2.5',\r\n lg: 'size-3',\r\n xl: 'size-4',\r\n '2xl': 'size-5',\r\n}\r\n\r\nconst statusColors: Record<string, string> = {\r\n online: 'bg-green-500',\r\n offline: 'bg-gray-400',\r\n away: 'bg-yellow-500',\r\n busy: 'bg-red-500',\r\n}\r\n\r\nconst roundedClasses: Record<string, string> = {\r\n full: 'rounded-full',\r\n lg: 'rounded-lg',\r\n md: 'rounded-md',\r\n}\r\n\r\n// Color classes for avatar backgrounds\r\nconst colorClasses: Record<AvatarColor, string> = {\r\n gray: 'bg-gray-200 text-gray-600 dark:bg-gray-700 dark:text-gray-300',\r\n red: 'bg-red-100 text-red-700 dark:bg-red-900/50 dark:text-red-300',\r\n orange: 'bg-orange-100 text-orange-700 dark:bg-orange-900/50 dark:text-orange-300',\r\n amber: 'bg-amber-100 text-amber-700 dark:bg-amber-900/50 dark:text-amber-300',\r\n yellow: 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/50 dark:text-yellow-300',\r\n lime: 'bg-lime-100 text-lime-700 dark:bg-lime-900/50 dark:text-lime-300',\r\n green: 'bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300',\r\n emerald: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/50 dark:text-emerald-300',\r\n teal: 'bg-teal-100 text-teal-700 dark:bg-teal-900/50 dark:text-teal-300',\r\n cyan: 'bg-cyan-100 text-cyan-700 dark:bg-cyan-900/50 dark:text-cyan-300',\r\n sky: 'bg-sky-100 text-sky-700 dark:bg-sky-900/50 dark:text-sky-300',\r\n blue: 'bg-blue-100 text-blue-700 dark:bg-blue-900/50 dark:text-blue-300',\r\n indigo: 'bg-indigo-100 text-indigo-700 dark:bg-indigo-900/50 dark:text-indigo-300',\r\n violet: 'bg-violet-100 text-violet-700 dark:bg-violet-900/50 dark:text-violet-300',\r\n purple: 'bg-purple-100 text-purple-700 dark:bg-purple-900/50 dark:text-purple-300',\r\n fuchsia: 'bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/50 dark:text-fuchsia-300',\r\n pink: 'bg-pink-100 text-pink-700 dark:bg-pink-900/50 dark:text-pink-300',\r\n rose: 'bg-rose-100 text-rose-700 dark:bg-rose-900/50 dark:text-rose-300',\r\n}\r\n\r\n// Colors for auto-generation (excluding gray for more vibrant results)\r\nconst autoColorPalette: AvatarColor[] = [\r\n 'red', 'orange', 'amber', 'yellow', 'lime', 'green', 'emerald', 'teal',\r\n 'cyan', 'sky', 'blue', 'indigo', 'violet', 'purple', 'fuchsia', 'pink', 'rose',\r\n]\r\n\r\n// Generate a deterministic color from a string (like WhatsApp)\r\nfunction getColorFromString(str: string): AvatarColor {\r\n if (!str) return 'gray'\r\n let hash = 0\r\n for (let i = 0; i < str.length; i++) {\r\n hash = str.charCodeAt(i) + ((hash << 5) - hash)\r\n }\r\n const index = Math.abs(hash) % autoColorPalette.length\r\n return autoColorPalette[index]\r\n}\r\n\r\n// Computed color class based on props\r\nconst avatarColorClass = computed(() => {\r\n // Manual color takes priority\r\n if (props.color) {\r\n return colorClasses[props.color]\r\n }\r\n // Auto-generate from name if enabled\r\n if (props.autoColor && props.name) {\r\n return colorClasses[getColorFromString(props.name)]\r\n }\r\n // Default gray\r\n return colorClasses.gray\r\n})\r\n\r\nconst initials = computed(() => {\r\n if (!props.name) return ''\r\n return props.name\r\n .split(' ')\r\n .map(n => n[0])\r\n .slice(0, 2)\r\n .join('')\r\n .toUpperCase()\r\n})\r\n\r\nconst showImage = computed(() => props.src && !imageError.value)\r\n</script>\r\n\r\n<template>\r\n <div class=\"relative inline-block\">\r\n <div\r\n :class=\"[\r\n 'flex items-center justify-center overflow-hidden font-medium',\r\n avatarColorClass,\r\n sizeClasses[size],\r\n roundedClasses[rounded],\r\n ]\"\r\n >\r\n <img\r\n v-if=\"showImage\"\r\n :src=\"src\"\r\n :alt=\"alt || name\"\r\n class=\"size-full object-cover\"\r\n @error=\"imageError = true\"\r\n >\r\n <span v-else-if=\"initials\">{{ initials }}</span>\r\n <Icon\r\n v-else\r\n icon=\"lucide:user\"\r\n class=\"size-1/2\"\r\n />\r\n </div>\r\n <span\r\n v-if=\"status\"\r\n :class=\"[\r\n 'absolute bottom-0 right-0 block rounded-full ring-2 ring-white dark:ring-gray-900',\r\n statusSizes[size],\r\n statusColors[status],\r\n ]\"\r\n />\r\n </div>\r\n</template>\r\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-hidden 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>\nimport { computed, watch, onMounted, onUnmounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nexport type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'\nexport type DrawerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full'\n\nconst props = withDefaults(\n defineProps<{\n /** Whether the drawer is visible */\n modelValue: boolean\n /** Position of the drawer */\n position?: DrawerPosition\n /** Size of the drawer */\n size?: DrawerSize\n /** Title shown in header */\n title?: string\n /** Description shown below title */\n description?: string\n /** Show close button */\n showClose?: boolean\n /** Close on overlay click */\n closeOnOverlay?: boolean\n /** Close on escape key */\n closeOnEscape?: boolean\n /** Show overlay */\n overlay?: boolean\n }>(),\n {\n position: 'right',\n size: 'md',\n showClose: true,\n closeOnOverlay: true,\n closeOnEscape: true,\n overlay: true,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst close = () => {\n emit('update:modelValue', false)\n}\n\nconst handleOverlayClick = () => {\n if (props.closeOnOverlay) {\n close()\n }\n}\n\nconst handleKeydown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && props.closeOnEscape && props.modelValue) {\n close()\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', handleKeydown)\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleKeydown)\n})\n\n// Lock body scroll when open\nwatch(\n () => props.modelValue,\n (isOpen) => {\n if (isOpen) {\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n },\n)\n\nconst sizeClasses = computed(() => {\n const isHorizontal = props.position === 'left' || props.position === 'right'\n const sizes = {\n sm: isHorizontal ? 'w-64' : 'h-32',\n md: isHorizontal ? 'w-80' : 'h-48',\n lg: isHorizontal ? 'w-96' : 'h-64',\n xl: isHorizontal ? 'w-lg' : 'h-96',\n full: isHorizontal ? 'w-screen' : 'h-screen',\n }\n return sizes[props.size]\n})\n\nconst positionClasses = computed(() => {\n const base = 'fixed bg-white dark:bg-gray-800 shadow-xl flex flex-col'\n switch (props.position) {\n case 'left':\n return `${base} inset-y-0 left-0 ${sizeClasses.value}`\n case 'right':\n return `${base} inset-y-0 right-0 ${sizeClasses.value}`\n case 'top':\n return `${base} inset-x-0 top-0 ${sizeClasses.value}`\n case 'bottom':\n return `${base} inset-x-0 bottom-0 ${sizeClasses.value}`\n default:\n return base\n }\n})\n\nconst transformClasses = computed(() => {\n switch (props.position) {\n case 'left':\n return { enter: '-translate-x-full', leave: '-translate-x-full' }\n case 'right':\n return { enter: 'translate-x-full', leave: 'translate-x-full' }\n case 'top':\n return { enter: '-translate-y-full', leave: '-translate-y-full' }\n case 'bottom':\n return { enter: 'translate-y-full', leave: 'translate-y-full' }\n default:\n return { enter: '', leave: '' }\n }\n})\n</script>\n\n<template>\n <Teleport to=\"body\">\n <!-- Overlay -->\n <Transition\n enter-active-class=\"transition-opacity duration-300 ease-out\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"transition-opacity duration-200 ease-in\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n >\n <div\n v-if=\"modelValue && overlay\"\n class=\"fixed inset-0 z-40 bg-black/50\"\n @click=\"handleOverlayClick\"\n />\n </Transition>\n\n <!-- Drawer -->\n <Transition\n enter-active-class=\"transition-transform duration-300 ease-out\"\n :enter-from-class=\"transformClasses.enter\"\n enter-to-class=\"translate-x-0 translate-y-0\"\n leave-active-class=\"transition-transform duration-200 ease-in\"\n leave-from-class=\"translate-x-0 translate-y-0\"\n :leave-to-class=\"transformClasses.leave\"\n >\n <div\n v-if=\"modelValue\"\n :class=\"positionClasses\"\n class=\"z-50\"\n role=\"dialog\"\n aria-modal=\"true\"\n >\n <!-- Header -->\n <div\n v-if=\"title || showClose || $slots.header\"\n class=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\"\n >\n <slot name=\"header\">\n <div>\n <h2 class=\"text-lg font-semibold text-gray-900 dark:text-white\">\n {{ title }}\n </h2>\n <p v-if=\"description\" class=\"mt-1 text-sm text-gray-500 dark:text-gray-400\">\n {{ description }}\n </p>\n </div>\n </slot>\n <button\n v-if=\"showClose\"\n type=\"button\"\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\"\n @click=\"close\"\n >\n <Icon icon=\"heroicons:x-mark\" class=\"size-5\" />\n </button>\n </div>\n\n <!-- Content -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"$slots.footer\"\n class=\"px-4 py-3 border-t border-gray-200 dark:border-gray-700\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </Transition>\n </Teleport>\n</template>\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=\"size-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=\"size-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=\"size-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=\"size-5\" aria-hidden=\"true\" />\r\n {{ title }}\r\n </span>\r\n <Icon\r\n icon=\"heroicons:chevron-down\"\r\n class=\"size-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 size-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=\"size-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 size-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=\"size-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: 'size-4' },\r\n md: { button: 'p-2', icon: 'size-5' },\r\n lg: { button: 'p-2.5', icon: 'size-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-hidden 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","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport { Icon } from '@iconify/vue'\r\nimport CardWrapper, { type CardShadow, type CardRounded, type CardBorder, type CardAccent } from './CardWrapper.vue'\r\nimport Skeleton from '@/components/feedback/Skeleton.vue'\r\n\r\nexport type StatItemSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\nexport type StatItemIconPosition = 'top' | 'left' | 'right' | 'bottom'\r\nexport type StatItemVariant = 'default' | 'glass' | 'outline' | 'flat' | 'solid'\r\nexport type StatItemColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info'\r\nexport type StatItemTrend = 'up' | 'down' | 'neutral'\r\nexport type StatItemIconRounded = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full'\r\n\r\nexport interface StatItemData {\r\n label: string\r\n value: string | number\r\n icon?: string\r\n change?: number\r\n changeLabel?: string\r\n trend?: StatItemTrend\r\n color?: StatItemColor\r\n description?: string\r\n prefix?: string\r\n suffix?: string\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Stat label */\r\n label: string\r\n /** Stat value */\r\n value: string | number\r\n /** Description text below label */\r\n description?: string\r\n /** Prefix for value (e.g., \"$\") */\r\n prefix?: string\r\n /** Suffix for value (e.g., \"%\", \"users\") */\r\n suffix?: string\r\n /** Icon name (iconify format) */\r\n icon?: string\r\n /** Icon position */\r\n iconPosition?: StatItemIconPosition\r\n /** Icon border radius */\r\n iconRounded?: StatItemIconRounded\r\n /** Hide icon background */\r\n hideIconBg?: boolean\r\n /** Percentage change (positive or negative) */\r\n change?: number\r\n /** Change label (e.g., \"vs last month\") */\r\n changeLabel?: string\r\n /** Explicit trend direction (overrides change-based calculation) */\r\n trend?: StatItemTrend\r\n /** Show only trend arrow without percentage */\r\n trendOnly?: boolean\r\n /** Hide trend icon, show only text */\r\n hideTrendIcon?: boolean\r\n /** Invert trend colors (green for down, red for up) */\r\n invertTrendColors?: boolean\r\n /** Size variant */\r\n size?: StatItemSize\r\n /** Visual variant */\r\n variant?: StatItemVariant\r\n /** Color scheme */\r\n color?: StatItemColor\r\n /** Make the stat clickable */\r\n clickable?: boolean\r\n /** Center content (default: true for top/bottom icon, false for left/right) */\r\n centered?: boolean\r\n /** Show label before value */\r\n labelFirst?: boolean\r\n /** Compact mode (reduced padding) */\r\n compact?: boolean\r\n /** Loading state */\r\n loading?: boolean\r\n /** Card shadow level */\r\n shadow?: CardShadow\r\n /** Card border radius */\r\n rounded?: CardRounded\r\n /** Card border style */\r\n border?: CardBorder\r\n /** Card accent color */\r\n accent?: CardAccent\r\n /** Custom class for the card */\r\n cardClass?: string\r\n /** Custom class for the icon wrapper */\r\n iconWrapperClass?: string\r\n /** Custom class for the icon element */\r\n iconClass?: string\r\n /** Custom class for the value */\r\n valueClass?: string\r\n /** Custom class for the label */\r\n labelClass?: string\r\n /** Custom class for the description */\r\n descriptionClass?: string\r\n /** Custom class for the trend indicator */\r\n trendClass?: string\r\n /** Custom class for the content wrapper */\r\n contentClass?: string\r\n }>(),\r\n {\r\n iconPosition: 'top',\r\n iconRounded: 'xl',\r\n size: 'md',\r\n variant: 'default',\r\n color: 'primary',\r\n clickable: false,\r\n trendOnly: false,\r\n hideTrendIcon: false,\r\n invertTrendColors: false,\r\n hideIconBg: false,\r\n labelFirst: false,\r\n compact: false,\r\n loading: false,\r\n shadow: 'sm',\r\n rounded: 'xl',\r\n border: 'none',\r\n accent: 'none',\r\n }\r\n)\r\n\r\ndefineEmits<{\r\n click: [event: MouseEvent]\r\n}>()\r\n\r\n// Determine if content should be centered\r\nconst isCentered = computed(() => {\r\n if (props.centered !== undefined) return props.centered\r\n return props.iconPosition === 'top' || props.iconPosition === 'bottom'\r\n})\r\n\r\n// Determine effective trend based on change value or explicit trend\r\nconst effectiveTrend = computed<StatItemTrend | undefined>(() => {\r\n if (props.trend) return props.trend\r\n if (props.change === undefined) return undefined\r\n if (props.change > 0) return 'up'\r\n if (props.change < 0) return 'down'\r\n return 'neutral'\r\n})\r\n\r\n// Size-based classes\r\nconst sizeClasses = computed(() => {\r\n const sizes = {\r\n xs: {\r\n padding: (props.compact ? 'none' : 'sm') as 'none' | 'sm',\r\n icon: 'size-6',\r\n iconInner: 'size-3',\r\n value: 'text-lg font-bold',\r\n label: 'text-xs',\r\n description: 'text-xs',\r\n change: 'text-xs',\r\n gap: 'gap-0.5',\r\n },\r\n sm: {\r\n padding: (props.compact ? 'sm' : 'sm') as 'sm',\r\n icon: 'size-8',\r\n iconInner: 'size-4',\r\n value: 'text-xl font-bold',\r\n label: 'text-xs',\r\n description: 'text-xs',\r\n change: 'text-xs',\r\n gap: 'gap-1',\r\n },\r\n md: {\r\n padding: (props.compact ? 'sm' : 'md') as 'sm' | 'md',\r\n icon: 'size-10',\r\n iconInner: 'size-5',\r\n value: 'text-2xl sm:text-3xl font-bold',\r\n label: 'text-xs sm:text-sm',\r\n description: 'text-xs sm:text-sm',\r\n change: 'text-xs',\r\n gap: 'gap-2',\r\n },\r\n lg: {\r\n padding: (props.compact ? 'md' : 'lg') as 'md' | 'lg',\r\n icon: 'size-12',\r\n iconInner: 'size-6',\r\n value: 'text-3xl sm:text-4xl font-bold',\r\n label: 'text-sm sm:text-base',\r\n description: 'text-sm',\r\n change: 'text-sm',\r\n gap: 'gap-3',\r\n },\r\n xl: {\r\n padding: (props.compact ? 'md' : 'lg') as 'md' | 'lg',\r\n icon: 'size-14',\r\n iconInner: 'size-7',\r\n value: 'text-4xl sm:text-5xl font-bold',\r\n label: 'text-base sm:text-lg',\r\n description: 'text-sm sm:text-base',\r\n change: 'text-sm',\r\n gap: 'gap-4',\r\n },\r\n }\r\n return sizes[props.size]\r\n})\r\n\r\n// Icon rounded classes\r\nconst iconRoundedClasses = computed(() => {\r\n const map: Record<StatItemIconRounded, string> = {\r\n none: 'rounded-none',\r\n sm: 'rounded-sm',\r\n md: 'rounded-md',\r\n lg: 'rounded-lg',\r\n xl: 'rounded-xl',\r\n full: 'rounded-full',\r\n }\r\n return map[props.iconRounded]\r\n})\r\n\r\n// Color-based classes for icon background\r\nconst iconBgClasses = computed(() => {\r\n if (props.hideIconBg) return ''\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'bg-white/20'\r\n\r\n const colors = {\r\n primary: 'bg-primary-100 dark:bg-primary-900/30',\r\n secondary: 'bg-secondary-100 dark:bg-secondary-900/30',\r\n success: 'bg-emerald-100 dark:bg-emerald-900/30',\r\n warning: 'bg-amber-100 dark:bg-amber-900/30',\r\n danger: 'bg-red-100 dark:bg-red-900/30',\r\n info: 'bg-blue-100 dark:bg-blue-900/30',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Color-based classes for icon\r\nconst iconColorClasses = computed(() => {\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'text-white'\r\n\r\n const colors = {\r\n primary: 'text-primary-600 dark:text-primary-400',\r\n secondary: 'text-secondary-600 dark:text-secondary-400',\r\n success: 'text-emerald-600 dark:text-emerald-400',\r\n warning: 'text-amber-600 dark:text-amber-400',\r\n danger: 'text-red-600 dark:text-red-400',\r\n info: 'text-blue-600 dark:text-blue-400',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Solid variant background classes\r\nconst solidBgClasses = computed(() => {\r\n if (props.variant !== 'solid') return ''\r\n const colors = {\r\n primary: 'bg-primary-500',\r\n secondary: 'bg-secondary-500',\r\n success: 'bg-emerald-500',\r\n warning: 'bg-amber-500',\r\n danger: 'bg-red-500',\r\n info: 'bg-blue-500',\r\n }\r\n return colors[props.color]\r\n})\r\n\r\n// Value text classes based on variant\r\nconst valueTextClasses = computed(() => {\r\n if (props.variant === 'glass' || props.variant === 'solid') return 'text-white'\r\n return 'text-gray-900 dark:text-white'\r\n})\r\n\r\n// Label text classes based on variant\r\nconst labelTextClasses = computed(() => {\r\n if (props.variant === 'glass') return 'text-white/80'\r\n if (props.variant === 'solid') return 'text-white/90'\r\n return 'text-gray-500 dark:text-gray-400'\r\n})\r\n\r\n// Description text classes based on variant\r\nconst descriptionTextClasses = computed(() => {\r\n if (props.variant === 'glass') return 'text-white/70'\r\n if (props.variant === 'solid') return 'text-white/80'\r\n return 'text-gray-400 dark:text-gray-500'\r\n})\r\n\r\n// Trend color classes\r\nconst trendColorClasses = computed(() => {\r\n if (!effectiveTrend.value || effectiveTrend.value === 'neutral') {\r\n return 'text-gray-500'\r\n }\r\n\r\n const isUp = effectiveTrend.value === 'up'\r\n const greenColor = 'text-emerald-500'\r\n const redColor = 'text-red-500'\r\n\r\n if (props.invertTrendColors) {\r\n return isUp ? redColor : greenColor\r\n }\r\n return isUp ? greenColor : redColor\r\n})\r\n\r\n// Trend icon\r\nconst trendIcon = computed(() => {\r\n if (!effectiveTrend.value || effectiveTrend.value === 'neutral') {\r\n return 'heroicons:minus'\r\n }\r\n return effectiveTrend.value === 'up'\r\n ? 'heroicons:arrow-trending-up'\r\n : 'heroicons:arrow-trending-down'\r\n})\r\n\r\n// CardWrapper variant mapping\r\nconst cardVariant = computed(() => {\r\n if (props.variant === 'solid') return 'default'\r\n return props.variant\r\n})\r\n\r\n// Effective shadow\r\nconst effectiveShadow = computed(() => {\r\n if (props.variant === 'glass') return 'none'\r\n return props.shadow\r\n})\r\n\r\n// Effective border\r\nconst effectiveBorder = computed(() => {\r\n if (props.variant === 'outline') return 'default'\r\n return props.border\r\n})\r\n\r\n// Layout classes based on icon position\r\nconst layoutClasses = computed(() => {\r\n const centered = isCentered.value ? 'items-center text-center' : ''\r\n\r\n switch (props.iconPosition) {\r\n case 'top':\r\n return `flex flex-col ${centered}`\r\n case 'bottom':\r\n return `flex flex-col-reverse ${centered}`\r\n case 'left':\r\n return 'flex flex-row items-center'\r\n case 'right':\r\n return 'flex flex-row-reverse items-center'\r\n default:\r\n return `flex flex-col ${centered}`\r\n }\r\n})\r\n\r\n// Icon margin classes based on position\r\nconst iconMarginClasses = computed(() => {\r\n switch (props.iconPosition) {\r\n case 'top':\r\n return 'mb-2'\r\n case 'bottom':\r\n return 'mt-2'\r\n case 'left':\r\n return 'mr-3'\r\n case 'right':\r\n return 'ml-3'\r\n default:\r\n return ''\r\n }\r\n})\r\n\r\n// Content layout classes\r\nconst computedContentClasses = computed(() => {\r\n const isVertical = props.iconPosition === 'top' || props.iconPosition === 'bottom'\r\n if (isVertical) {\r\n return `flex flex-col ${sizeClasses.value.gap}`\r\n }\r\n return `flex flex-col flex-1 min-w-0 ${sizeClasses.value.gap}`\r\n})\r\n</script>\r\n\r\n<template>\r\n <CardWrapper\r\n :variant=\"cardVariant\"\r\n :padding=\"sizeClasses.padding\"\r\n :clickable=\"clickable\"\r\n :shadow=\"effectiveShadow\"\r\n :border=\"effectiveBorder\"\r\n :rounded=\"rounded\"\r\n :accent=\"accent\"\r\n :header-divider=\"false\"\r\n :class=\"[cardClass, solidBgClasses, variant === 'solid' && 'text-white']\"\r\n @click=\"$emit('click', $event)\"\r\n >\r\n <!-- Loading State -->\r\n <div v-if=\"loading\" :class=\"layoutClasses\">\r\n <Skeleton\r\n v-if=\"icon\"\r\n :class=\"[sizeClasses.icon, iconRoundedClasses, iconMarginClasses]\"\r\n />\r\n <div :class=\"computedContentClasses\">\r\n <Skeleton :class=\"sizeClasses.value\" width=\"60%\" height=\"1.5em\" />\r\n <Skeleton :class=\"sizeClasses.label\" width=\"80%\" height=\"1em\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div v-else :class=\"layoutClasses\">\r\n <!-- Icon -->\r\n <div\r\n v-if=\"icon || $slots.icon\"\r\n :class=\"[\r\n 'flex items-center justify-center flex-shrink-0',\r\n sizeClasses.icon,\r\n iconRoundedClasses,\r\n iconBgClasses,\r\n iconMarginClasses,\r\n iconWrapperClass,\r\n ]\"\r\n >\r\n <slot name=\"icon\">\r\n <Icon :icon=\"icon!\" :class=\"[sizeClasses.iconInner, iconColorClasses, iconClass]\" />\r\n </slot>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div :class=\"[computedContentClasses, contentClass]\">\r\n <!-- Label (if labelFirst) -->\r\n <div\r\n v-if=\"labelFirst\"\r\n :class=\"[sizeClasses.label, labelTextClasses, labelClass]\"\r\n >\r\n <slot name=\"label\">{{ label }}</slot>\r\n </div>\r\n\r\n <!-- Value -->\r\n <div :class=\"[sizeClasses.value, valueTextClasses, valueClass]\">\r\n <slot name=\"value\">\r\n <span v-if=\"prefix\" class=\"mr-0.5\">{{ prefix }}</span>\r\n {{ value }}\r\n <span v-if=\"suffix\" class=\"ml-0.5\">{{ suffix }}</span>\r\n </slot>\r\n </div>\r\n\r\n <!-- Label (if not labelFirst) -->\r\n <div\r\n v-if=\"!labelFirst\"\r\n :class=\"[sizeClasses.label, labelTextClasses, labelClass]\"\r\n >\r\n <slot name=\"label\">{{ label }}</slot>\r\n </div>\r\n\r\n <!-- Description -->\r\n <div\r\n v-if=\"description || $slots.description\"\r\n :class=\"[sizeClasses.description, descriptionTextClasses, descriptionClass]\"\r\n >\r\n <slot name=\"description\">{{ description }}</slot>\r\n </div>\r\n\r\n <!-- Change indicator -->\r\n <div\r\n v-if=\"change !== undefined || trend\"\r\n :class=\"[\r\n 'mt-1 font-medium inline-flex items-center gap-1',\r\n sizeClasses.change,\r\n trendColorClasses,\r\n trendClass,\r\n ]\"\r\n >\r\n <Icon v-if=\"!hideTrendIcon\" :icon=\"trendIcon\" class=\"size-3.5\" />\r\n <span v-if=\"!trendOnly && change !== undefined\">\r\n {{ change >= 0 ? '+' : '' }}{{ change }}%\r\n </span>\r\n <span v-if=\"changeLabel\" class=\"text-gray-400\">{{ changeLabel }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Extra slot for additional content -->\r\n <slot name=\"extra\" />\r\n </CardWrapper>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport StatItem, {\r\n type StatItemData,\r\n type StatItemSize,\r\n type StatItemVariant,\r\n type StatItemIconPosition,\r\n type StatItemIconRounded,\r\n} from './StatItem.vue'\r\nimport type { CardShadow, CardRounded, CardBorder, CardAccent } from './CardWrapper.vue'\r\n\r\nexport type StatsColumns = 1 | 2 | 3 | 4 | 5 | 6\r\nexport type StatsGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Array of stats to display */\r\n stats?: StatItemData[]\r\n /** Number of columns (auto-calculated if not provided) */\r\n cols?: StatsColumns\r\n /** Gap between items */\r\n gap?: StatsGap\r\n /** Visual variant for all items */\r\n variant?: StatItemVariant\r\n /** Size for all items */\r\n size?: StatItemSize\r\n /** Icon position for all items */\r\n iconPosition?: StatItemIconPosition\r\n /** Icon border radius for all items */\r\n iconRounded?: StatItemIconRounded\r\n /** Hide icon background for all items */\r\n hideIconBg?: boolean\r\n /** Default color for items without explicit color */\r\n color?: StatItemData['color']\r\n /** Show label before value for all items */\r\n labelFirst?: boolean\r\n /** Compact mode for all items */\r\n compact?: boolean\r\n /** Loading state for all items */\r\n loading?: boolean\r\n /** Card shadow for all items */\r\n shadow?: CardShadow\r\n /** Card border radius for all items */\r\n rounded?: CardRounded\r\n /** Card border for all items */\r\n border?: CardBorder\r\n /** Card accent for all items */\r\n accent?: CardAccent\r\n /** Make all items clickable */\r\n clickable?: boolean\r\n /** Center content in all items */\r\n centered?: boolean\r\n /** Invert trend colors for all items */\r\n invertTrendColors?: boolean\r\n /** Hide trend icon for all items */\r\n hideTrendIcon?: boolean\r\n /** Custom class for the grid container */\r\n gridClass?: string\r\n /** Custom class for all cards */\r\n cardClass?: string\r\n /** Custom class for all icon wrappers */\r\n iconWrapperClass?: string\r\n /** Custom class for all icons */\r\n iconClass?: string\r\n /** Custom class for all values */\r\n valueClass?: string\r\n /** Custom class for all labels */\r\n labelClass?: string\r\n }>(),\r\n {\r\n variant: 'default',\r\n size: 'md',\r\n iconPosition: 'top',\r\n iconRounded: 'xl',\r\n color: 'primary',\r\n gap: 'md',\r\n hideIconBg: false,\r\n labelFirst: false,\r\n compact: false,\r\n loading: false,\r\n shadow: 'sm',\r\n rounded: 'xl',\r\n border: 'none',\r\n accent: 'none',\r\n clickable: false,\r\n invertTrendColors: false,\r\n hideTrendIcon: false,\r\n }\r\n)\r\n\r\ndefineEmits<{\r\n 'item-click': [index: number, stat: StatItemData, event: MouseEvent]\r\n}>()\r\n</script>\r\n\r\n<template>\r\n <div\r\n class=\"grid\"\r\n :class=\"[\r\n gridClass,\r\n // Gap classes\r\n gap === 'none' && 'gap-0',\r\n gap === 'xs' && 'gap-1 sm:gap-2',\r\n gap === 'sm' && 'gap-2 sm:gap-3',\r\n gap === 'md' && 'gap-3 sm:gap-4',\r\n gap === 'lg' && 'gap-4 sm:gap-6',\r\n gap === 'xl' && 'gap-6 sm:gap-8',\r\n // Column classes\r\n cols === 1 && 'grid-cols-1',\r\n cols === 2 && 'grid-cols-2',\r\n cols === 3 && 'grid-cols-3',\r\n cols === 4 && 'grid-cols-2 sm:grid-cols-4',\r\n cols === 5 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',\r\n cols === 6 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',\r\n // Auto columns based on stats length\r\n !cols && stats?.length === 1 && 'grid-cols-1',\r\n !cols && stats?.length === 2 && 'grid-cols-2',\r\n !cols && stats?.length === 3 && 'grid-cols-3',\r\n !cols && stats?.length === 4 && 'grid-cols-2 sm:grid-cols-4',\r\n !cols && stats && stats.length > 4 && 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4',\r\n ]\"\r\n >\r\n <!-- Render from stats prop -->\r\n <StatItem\r\n v-for=\"(stat, index) in stats\"\r\n :key=\"index\"\r\n :label=\"stat.label\"\r\n :value=\"stat.value\"\r\n :icon=\"stat.icon\"\r\n :change=\"stat.change\"\r\n :change-label=\"stat.changeLabel\"\r\n :trend=\"stat.trend\"\r\n :description=\"stat.description\"\r\n :prefix=\"stat.prefix\"\r\n :suffix=\"stat.suffix\"\r\n :variant=\"variant\"\r\n :size=\"size\"\r\n :icon-position=\"iconPosition\"\r\n :icon-rounded=\"iconRounded\"\r\n :hide-icon-bg=\"hideIconBg\"\r\n :color=\"stat.color || color\"\r\n :label-first=\"labelFirst\"\r\n :compact=\"compact\"\r\n :loading=\"loading\"\r\n :shadow=\"shadow\"\r\n :rounded=\"rounded\"\r\n :border=\"border\"\r\n :accent=\"accent\"\r\n :clickable=\"clickable\"\r\n :centered=\"centered\"\r\n :invert-trend-colors=\"invertTrendColors\"\r\n :hide-trend-icon=\"hideTrendIcon\"\r\n :card-class=\"cardClass\"\r\n :icon-wrapper-class=\"iconWrapperClass\"\r\n :icon-class=\"iconClass\"\r\n :value-class=\"valueClass\"\r\n :label-class=\"labelClass\"\r\n @click=\"$emit('item-click', index, stat, $event)\"\r\n />\r\n\r\n <!-- Slot for custom StatItem components -->\r\n <slot />\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport interface FilterTab {\r\n key: string\r\n label: string\r\n icon?: string\r\n count?: number\r\n disabled?: boolean\r\n}\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Available filter options */\r\n options: FilterTab[]\r\n /** Visual variant */\r\n variant?: 'pills' | 'underline' | 'boxed'\r\n /** Size */\r\n size?: 'sm' | 'md' | 'lg'\r\n /** Full width tabs */\r\n fullWidth?: boolean\r\n }>(),\r\n {\r\n variant: 'pills',\r\n size: 'md',\r\n }\r\n)\r\n\r\nconst modelValue = defineModel<string>({ required: true })\r\n</script>\r\n\r\n<template>\r\n <!-- Pills variant -->\r\n <div\r\n v-if=\"variant === 'pills'\"\r\n :class=\"[\r\n 'inline-flex p-1 bg-white dark:bg-slate-800 rounded-2xl shadow-sm border border-gray-100 dark:border-slate-700 gap-1',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 rounded-xl font-medium transition-all',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-1.5 text-xs',\r\n size === 'md' && 'px-4 py-2.5 text-sm',\r\n size === 'lg' && 'px-5 py-3 text-base',\r\n modelValue === option.key\r\n ? 'bg-primary-500 text-white shadow-md'\r\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-50 dark:hover:bg-slate-700',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-white/20 text-white'\r\n : 'bg-gray-100 dark:bg-slate-700 text-gray-600 dark:text-gray-400',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Underline variant -->\r\n <div\r\n v-else-if=\"variant === 'underline'\"\r\n :class=\"[\r\n 'flex border-b border-gray-200 dark:border-slate-700',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 font-medium transition-all border-b-2 -mb-px',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-2 text-xs',\r\n size === 'md' && 'px-4 py-3 text-sm',\r\n size === 'lg' && 'px-5 py-4 text-base',\r\n modelValue === option.key\r\n ? 'border-primary-500 text-primary-600 dark:text-primary-400'\r\n : 'border-transparent text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-primary-100 dark:bg-primary-900/30 text-primary-600 dark:text-primary-400'\r\n : 'bg-gray-100 dark:bg-slate-700 text-gray-500',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n\r\n <!-- Boxed variant -->\r\n <div\r\n v-else-if=\"variant === 'boxed'\"\r\n :class=\"[\r\n 'inline-flex bg-gray-100 dark:bg-slate-800 rounded-xl p-1 gap-1',\r\n fullWidth && 'w-full',\r\n ]\"\r\n >\r\n <button\r\n v-for=\"option in options\"\r\n :key=\"option.key\"\r\n type=\"button\"\r\n :disabled=\"option.disabled\"\r\n :class=\"[\r\n 'flex items-center justify-center gap-2 rounded-lg font-medium transition-all',\r\n fullWidth && 'flex-1',\r\n size === 'sm' && 'px-3 py-1.5 text-xs',\r\n size === 'md' && 'px-4 py-2 text-sm',\r\n size === 'lg' && 'px-5 py-2.5 text-base',\r\n modelValue === option.key\r\n ? 'bg-white dark:bg-slate-700 text-gray-900 dark:text-white shadow-sm'\r\n : 'text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white',\r\n option.disabled && 'opacity-50 cursor-not-allowed',\r\n ]\"\r\n @click=\"!option.disabled && (modelValue = option.key)\"\r\n >\r\n <Icon v-if=\"option.icon\" :icon=\"option.icon\" class=\"size-4\" />\r\n <span>{{ option.label }}</span>\r\n <span\r\n v-if=\"option.count !== undefined\"\r\n :class=\"[\r\n 'px-1.5 py-0.5 rounded-full text-xs font-medium',\r\n modelValue === option.key\r\n ? 'bg-gray-100 dark:bg-slate-600 text-gray-600 dark:text-gray-300'\r\n : 'bg-gray-200 dark:bg-slate-700 text-gray-500 dark:text-gray-400',\r\n ]\"\r\n >\r\n {{ option.count }}\r\n </span>\r\n </button>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nexport type DividerOrientation = 'horizontal' | 'vertical'\nexport type DividerVariant = 'solid' | 'dashed' | 'dotted'\nexport type DividerSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Divider orientation */\n orientation?: DividerOrientation\n /** Divider style variant */\n variant?: DividerVariant\n /** Divider thickness */\n size?: DividerSize\n /** Custom class for styling */\n class?: string\n /** Label text to show in the middle of the divider */\n label?: string\n /** Color variant */\n color?: 'default' | 'primary' | 'muted'\n }>(),\n {\n orientation: 'horizontal',\n variant: 'solid',\n size: 'md',\n color: 'default',\n }\n)\n\nconst sizeClasses = {\n horizontal: {\n sm: 'h-px',\n md: 'h-0.5',\n lg: 'h-1',\n },\n vertical: {\n sm: 'w-px',\n md: 'w-0.5',\n lg: 'w-1',\n },\n}\n\nconst variantClasses = {\n solid: '',\n dashed: 'border-dashed',\n dotted: 'border-dotted',\n}\n\nconst colorClasses = {\n default: 'bg-gray-200 dark:bg-gray-700',\n primary: 'bg-primary-200 dark:bg-primary-800',\n muted: 'bg-gray-100 dark:bg-gray-800',\n}\n</script>\n\n<template>\n <div\n v-if=\"!label\"\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['h-full mx-2', sizeClasses.vertical[size]]\n : ['w-full my-2', sizeClasses.horizontal[size]],\n variant !== 'solid' && `border-0 border-t ${variantClasses[variant]}`,\n props.class,\n ]\"\n role=\"separator\"\n :aria-orientation=\"orientation\"\n />\n <div\n v-else\n :class=\"[\n 'flex items-center gap-3',\n orientation === 'vertical' ? 'flex-col h-full mx-2' : 'w-full my-2',\n props.class,\n ]\"\n role=\"separator\"\n :aria-orientation=\"orientation\"\n >\n <div\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['flex-1', sizeClasses.vertical[size]]\n : ['flex-1', sizeClasses.horizontal[size]],\n ]\"\n />\n <span class=\"text-xs font-medium text-gray-500 dark:text-gray-400 whitespace-nowrap\">\n {{ label }}\n </span>\n <div\n :class=\"[\n colorClasses[color],\n orientation === 'vertical'\n ? ['flex-1', sizeClasses.vertical[size]]\n : ['flex-1', sizeClasses.horizontal[size]],\n ]\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nexport type DataListLabelSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Size variant */\n size?: DataListLabelSize\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n }\n)\n\nconst sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n</script>\n\n<template>\n <dt\n :class=\"[\n 'font-medium text-gray-900 dark:text-gray-100',\n sizeClasses[size],\n props.class,\n ]\"\n >\n <slot />\n </dt>\n</template>\n","<script lang=\"ts\" setup>\nexport type DataListValueSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Size variant */\n size?: DataListValueSize\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n }\n)\n\nconst sizeClasses = {\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n}\n</script>\n\n<template>\n <dd\n :class=\"[\n 'mt-1 text-gray-700 dark:text-gray-300 col-span-2 sm:mt-0',\n sizeClasses[size],\n props.class,\n ]\"\n >\n <slot />\n </dd>\n</template>\n","<script lang=\"ts\" setup>\nimport DataListLabel from './DataListLabel.vue'\nimport DataListValue from './DataListValue.vue'\n\nexport type DataListItemSize = 'sm' | 'md' | 'lg'\n\nconst props = withDefaults(\n defineProps<{\n /** Label text */\n label?: string\n /** Value text */\n value?: string\n /** Size variant */\n size?: DataListItemSize\n /** Apply striped background */\n striped?: boolean\n /** Custom class */\n class?: string\n }>(),\n {\n size: 'md',\n striped: false,\n }\n)\n\nconst sizeClasses = {\n sm: 'px-3 py-3 sm:gap-3',\n md: 'px-4 py-4 sm:gap-4',\n lg: 'px-6 py-6 sm:gap-6',\n}\n</script>\n\n<template>\n <div\n :class=\"[\n 'sm:grid sm:grid-cols-3',\n sizeClasses[size],\n striped && 'even:bg-gray-50 dark:even:bg-gray-900',\n props.class,\n ]\"\n >\n <slot>\n <DataListLabel v-if=\"label\" :size=\"size\">{{ label }}</DataListLabel>\n <DataListValue v-if=\"value\" :size=\"size\">{{ value }}</DataListValue>\n </slot>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport DataListItem from './DataListItem.vue'\n\nexport interface DataListItemData {\n /** Label text */\n label: string\n /** Value text */\n value: string\n}\n\nexport type DataListSize = 'sm' | 'md' | 'lg'\nexport type DataListVariant = 'default' | 'striped' | 'bordered'\n\nconst props = withDefaults(\n defineProps<{\n /** Array of items to render (alternative to using slots) */\n items?: DataListItemData[]\n /** Size variant */\n size?: DataListSize\n /** Visual variant */\n variant?: DataListVariant\n /** Custom class */\n class?: string\n }>(),\n {\n items: () => [],\n size: 'md',\n variant: 'default',\n }\n)\n\nconst variantClasses = {\n default: 'divide-y divide-gray-100 dark:divide-gray-800',\n striped: '',\n bordered: 'divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden',\n}\n</script>\n\n<template>\n <dl\n :class=\"[\n variantClasses[variant],\n props.class,\n ]\"\n >\n <slot>\n <DataListItem\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n :size=\"size\"\n :striped=\"variant === 'striped'\"\n />\n </slot>\n </dl>\n</template>\n"],"names":["computed","_createBlock","CardSkeleton","_openBlock","_createElementBlock","_hoisted_1","$slots","_normalizeClass","_renderSlot","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","useSlots","_unref","Icon","_hoisted_5","useAttrs","toRefs","provide","reactive","_mergeProps","inject","_Fragment","_withModifiers","Tr","Th","_createVNode","Checkbox","_renderList","_createTextVNode","_toDisplayString","TextType","NumberType","DateType","BooleanType","BadgeType","Td","_resolveDynamicComponent","ref","usePagination","TableSkeleton","Table","Thead","TableHeader","_withCtx","Tbody","index","TableRow","PaginationControls","CardComponent","ListSkeleton","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","useBreakpoints","MobileList","TableComponent","useDropdown","watch","nextTick","_Teleport","_Transition","resolveComponent","_withDirectives","_normalizeStyle","_createSlots","useId","onMounted","onUnmounted","$emit","useDarkMode","CardWrapper","Skeleton","StatItem","_useModel","DataListLabel","DataListValue","DataListItem"],"mappings":"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"}