cisse-vue-ui 0.2.0 → 0.2.1

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.
@@ -3,8 +3,8 @@ const vue = require("vue");
3
3
  const Checkbox_vue_vue_type_script_setup_true_lang = require("./Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
4
4
  const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
5
5
  const vue$1 = require("@iconify/vue");
6
- const _hoisted_1$8 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
7
- const _hoisted_2$6 = {
6
+ const _hoisted_1$9 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
7
+ const _hoisted_2$7 = {
8
8
  key: 0,
9
9
  class: "flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"
10
10
  };
@@ -26,8 +26,8 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
26
26
  },
27
27
  setup(__props) {
28
28
  return (_ctx, _cache) => {
29
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
30
- __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$6, [
29
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
30
+ __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, [
31
31
  vue.createElementVNode("div", _hoisted_3$4, [
32
32
  __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$3, [
33
33
  vue.renderSlot(_ctx.$slots, "title", {}, () => [
@@ -49,8 +49,8 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
49
49
  };
50
50
  }
51
51
  });
52
- const _hoisted_1$7 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
53
- const _hoisted_2$5 = { class: "overflow-x-auto" };
52
+ const _hoisted_1$8 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
53
+ const _hoisted_2$6 = { class: "overflow-x-auto" };
54
54
  const _hoisted_3$3 = { class: "w-full divide-y divide-black/10 text-left dark:divide-white/10" };
55
55
  const _hoisted_4$2 = { class: "bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400" };
56
56
  const _hoisted_5$2 = {
@@ -160,8 +160,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
160
160
  };
161
161
  const hasActionSlot = vue.computed(() => !!slots.action);
162
162
  return (_ctx, _cache) => {
163
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
164
- vue.createElementVNode("div", _hoisted_2$5, [
163
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
164
+ vue.createElementVNode("div", _hoisted_2$6, [
165
165
  vue.createElementVNode("table", _hoisted_3$3, [
166
166
  vue.createElementVNode("thead", _hoisted_4$2, [
167
167
  vue.createElementVNode("tr", null, [
@@ -235,8 +235,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
235
235
  };
236
236
  }
237
237
  });
238
- const _hoisted_1$6 = { class: "space-y-3" };
239
- const _hoisted_2$4 = {
238
+ const _hoisted_1$7 = { class: "space-y-3" };
239
+ const _hoisted_2$5 = {
240
240
  key: 0,
241
241
  class: "flex items-center gap-3 p-3 bg-gray-50 dark:bg-gray-800/50 rounded-xl"
242
242
  };
@@ -304,8 +304,8 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
304
304
  };
305
305
  const hasEmptySlot = vue.computed(() => !!slots.empty);
306
306
  return (_ctx, _cache) => {
307
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
308
- __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$4, [
307
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
308
+ __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$5, [
309
309
  vue.createVNode(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
310
310
  "model-value": allSelected.value,
311
311
  indeterminate: someSelected.value,
@@ -346,6 +346,8 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
346
346
  };
347
347
  }
348
348
  });
349
+ const _hoisted_1$6 = { class: "responsive-list__mobile" };
350
+ const _hoisted_2$4 = { class: "responsive-list__desktop" };
349
351
  const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
350
352
  __name: "ResponsiveList",
351
353
  props: {
@@ -375,13 +377,13 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
375
377
  main: col.main
376
378
  }))
377
379
  );
378
- const breakpointClass = vue.computed(() => {
380
+ const breakpointPx = vue.computed(() => {
379
381
  const breakpoints = {
380
- sm: { mobile: "sm:hidden", desktop: "hidden sm:block" },
381
- md: { mobile: "md:hidden", desktop: "hidden md:block" },
382
- lg: { mobile: "lg:hidden", desktop: "hidden lg:block" },
383
- xl: { mobile: "xl:hidden", desktop: "hidden xl:block" },
384
- "2xl": { mobile: "2xl:hidden", desktop: "hidden 2xl:block" }
382
+ sm: 640,
383
+ md: 768,
384
+ lg: 1024,
385
+ xl: 1280,
386
+ "2xl": 1536
385
387
  };
386
388
  return breakpoints[props.breakpoint];
387
389
  });
@@ -402,10 +404,11 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
402
404
  };
403
405
  const hasActionsSlot = vue.computed(() => !!slots.actions);
404
406
  return (_ctx, _cache) => {
405
- return vue.openBlock(), vue.createElementBlock("div", null, [
406
- vue.createElementVNode("div", {
407
- class: vue.normalizeClass(breakpointClass.value.mobile)
408
- }, [
407
+ return vue.openBlock(), vue.createElementBlock("div", {
408
+ class: "responsive-list",
409
+ style: vue.normalizeStyle({ "--breakpoint": breakpointPx.value + "px" })
410
+ }, [
411
+ vue.createElementVNode("div", _hoisted_1$6, [
409
412
  vue.createVNode(_sfc_main$9, {
410
413
  items: __props.items,
411
414
  "key-field": __props.keyField,
@@ -416,25 +419,23 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
416
419
  onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
417
420
  }, {
418
421
  avatar: vue.withCtx(({ item }) => [
419
- vue.renderSlot(_ctx.$slots, "avatar", { item })
422
+ vue.renderSlot(_ctx.$slots, "avatar", { item }, void 0, true)
420
423
  ]),
421
424
  content: vue.withCtx(({ item }) => [
422
- vue.renderSlot(_ctx.$slots, "mobileContent", { item })
425
+ vue.renderSlot(_ctx.$slots, "mobileContent", { item }, void 0, true)
423
426
  ]),
424
427
  actions: vue.withCtx(({ item }) => [
425
428
  vue.renderSlot(_ctx.$slots, "mobileActions", { item }, () => [
426
- vue.renderSlot(_ctx.$slots, "actions", { item })
427
- ])
429
+ vue.renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
430
+ ], true)
428
431
  ]),
429
432
  empty: vue.withCtx(() => [
430
- vue.renderSlot(_ctx.$slots, "empty")
433
+ vue.renderSlot(_ctx.$slots, "empty", {}, void 0, true)
431
434
  ]),
432
435
  _: 3
433
436
  }, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter"])
434
- ], 2),
435
- vue.createElementVNode("div", {
436
- class: vue.normalizeClass(breakpointClass.value.desktop)
437
- }, [
437
+ ]),
438
+ vue.createElementVNode("div", _hoisted_2$4, [
438
439
  vue.createVNode(_sfc_main$a, {
439
440
  items: __props.items,
440
441
  properties: tableProperties.value,
@@ -446,7 +447,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
446
447
  onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll"))
447
448
  }, vue.createSlots({
448
449
  empty: vue.withCtx(() => [
449
- vue.renderSlot(_ctx.$slots, "empty")
450
+ vue.renderSlot(_ctx.$slots, "empty", {}, void 0, true)
450
451
  ]),
451
452
  _: 2
452
453
  }, [
@@ -458,7 +459,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
458
459
  key: 0,
459
460
  item,
460
461
  value: getCellValue(item, getColumnKey(col))
461
- }) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
462
+ }, void 0, true) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
462
463
  vue.createTextVNode(vue.toDisplayString(value), 1)
463
464
  ], 64))
464
465
  ])
@@ -467,16 +468,24 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
467
468
  hasActionsSlot.value ? {
468
469
  name: "action",
469
470
  fn: vue.withCtx(({ item }) => [
470
- vue.renderSlot(_ctx.$slots, "actions", { item })
471
+ vue.renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
471
472
  ]),
472
473
  key: "0"
473
474
  } : void 0
474
475
  ]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter"])
475
- ], 2)
476
- ]);
476
+ ])
477
+ ], 4);
477
478
  };
478
479
  }
479
480
  });
481
+ const _export_sfc = (sfc, props) => {
482
+ const target = sfc.__vccOpts || sfc;
483
+ for (const [key, val] of props) {
484
+ target[key] = val;
485
+ }
486
+ return target;
487
+ };
488
+ const ResponsiveList = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-5563bb86"]]);
480
489
  const _hoisted_1$5 = {
481
490
  key: 0,
482
491
  class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
@@ -1267,16 +1276,16 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
1267
1276
  };
1268
1277
  }
1269
1278
  });
1279
+ exports.ResponsiveList = ResponsiveList;
1270
1280
  exports._sfc_main = _sfc_main$b;
1271
1281
  exports._sfc_main$1 = _sfc_main$a;
1272
- exports._sfc_main$10 = _sfc_main$1;
1273
- exports._sfc_main$11 = _sfc_main;
1282
+ exports._sfc_main$10 = _sfc_main;
1274
1283
  exports._sfc_main$2 = _sfc_main$9;
1275
- exports._sfc_main$3 = _sfc_main$8;
1276
- exports._sfc_main$4 = _sfc_main$7;
1277
- exports._sfc_main$5 = _sfc_main$6;
1278
- exports._sfc_main$6 = _sfc_main$5;
1279
- exports._sfc_main$7 = _sfc_main$4;
1280
- exports._sfc_main$8 = _sfc_main$3;
1281
- exports._sfc_main$9 = _sfc_main$2;
1282
- //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs.map
1284
+ exports._sfc_main$3 = _sfc_main$7;
1285
+ exports._sfc_main$4 = _sfc_main$6;
1286
+ exports._sfc_main$5 = _sfc_main$5;
1287
+ exports._sfc_main$6 = _sfc_main$4;
1288
+ exports._sfc_main$7 = _sfc_main$3;
1289
+ exports._sfc_main$8 = _sfc_main$2;
1290
+ exports._sfc_main$9 = _sfc_main$1;
1291
+ //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-BEE4gCBC.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleCard.vue_vue_type_script_setup_true_lang-BEE4gCBC.cjs","sources":["../src/components/core/CardComponent.vue","../src/components/core/TableComponent.vue","../src/components/core/MobileList.vue","../src/components/core/ResponsiveList.vue","../src/components/core/AutocompleteComponent.vue","../src/components/core/TableAction.vue","../src/components/core/Button.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"],"sourcesContent":["<script lang=\"ts\" setup>\ndefineProps<{\n title?: string\n description?: string\n}>()\n</script>\n\n<template>\n <div class=\"flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950\">\n <div\n v-if=\"title || description || $slots.title || $slots.description || $slots.actions\"\n class=\"flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700\"\n >\n <div class=\"flex flex-col gap-0.5\">\n <span\n v-if=\"title || $slots.title\"\n class=\"text-md font-semibold text-gray-800 dark:text-gray-200\"\n >\n <slot name=\"title\">\n {{ title }}\n </slot>\n </span>\n\n <span\n v-if=\"description || $slots.description\"\n class=\"text-sm font-normal text-gray-600 dark:text-gray-400\"\n >\n <slot name=\"description\">\n {{ description }}\n </slot>\n </span>\n </div>\n\n <div class=\"flex gap-2\">\n <slot name=\"actions\" />\n </div>\n </div>\n\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Property } from '@/types'\nimport TextType from '@/components/type/TextType.vue'\nimport NumberType from '@/components/type/NumberType.vue'\nimport DateType from '@/components/type/DateType.vue'\nimport BooleanType from '@/components/type/BooleanType.vue'\nimport BadgeType from '@/components/type/BadgeType.vue'\nimport Checkbox from '@/components/form/Checkbox.vue'\nimport { computed, type Component, useSlots } from 'vue'\n\ntype ItemType = { id: number | string; [key: string]: unknown }\n\nconst props = withDefaults(\n defineProps<{\n /** Column definitions */\n properties: Property[]\n /** Array of items to display */\n items: ItemType[]\n /** Enable selection mode */\n selectable?: boolean\n /** Set of selected item keys */\n selectedItems?: Set<string>\n /** Filter function to determine if an item is selectable */\n selectableFilter?: (item: ItemType) => boolean\n /** Key field for unique identification (default: 'id') */\n keyField?: string\n }>(),\n {\n selectable: false,\n keyField: 'id',\n },\n)\n\nconst emit = defineEmits<{\n /** Emitted when an item is selected/deselected */\n select: [id: string]\n /** Emitted when select all is toggled */\n selectAll: []\n}>()\n\nconst slots = useSlots()\n\n// Type components mapping\nconst typeComponents: Record<string, Component> = {\n text: TextType,\n number: NumberType,\n date: DateType,\n boolean: BooleanType,\n badge: BadgeType,\n}\n\nconst getTypeComponent = (type: string = 'text'): Component => {\n return typeComponents[type] || TextType\n}\n\n// Filter out hidden properties\nconst visibleProperties = computed(() => props.properties.filter((p) => !p.hidden))\n\n// Get item key\nconst getKey = (item: ItemType): string => {\n const keyValue = item[props.keyField]\n return String(keyValue ?? Math.random())\n}\n\n// Get nested property value\nconst getItemValue = (item: Record<string, unknown>, property: Property): unknown => {\n if (property.name.includes('.')) {\n let value: unknown = item\n for (const key of property.name.split('.')) {\n if (value && typeof value === 'object' && key in value) {\n value = (value as Record<string, unknown>)[key]\n } else {\n return undefined\n }\n }\n return value\n }\n return item[property.name]\n}\n\nconst getAlignmentClass = (align?: 'left' | 'center' | 'right') => {\n switch (align) {\n case 'center':\n return 'text-center'\n case 'right':\n return 'text-right'\n default:\n return 'text-left'\n }\n}\n\nconst getMainClass = (main?: boolean) => {\n if (main) {\n return 'text-sm font-semibold text-gray-900 dark:text-gray-100'\n }\n return 'text-xs font-medium text-gray-600 dark:text-gray-400'\n}\n\n// Selection logic\nconst selectableItems = computed(() => {\n if (!props.selectableFilter) return props.items\n return props.items.filter(props.selectableFilter)\n})\n\nconst allSelected = computed(() => {\n if (selectableItems.value.length === 0) return false\n return selectableItems.value.every((item) => props.selectedItems?.has(getKey(item)))\n})\n\nconst someSelected = computed(() => {\n return (props.selectedItems?.size || 0) > 0 && !allSelected.value\n})\n\nconst isSelected = (item: ItemType): boolean => {\n return props.selectedItems?.has(getKey(item)) || false\n}\n\nconst isSelectable = (item: ItemType): boolean => {\n if (!props.selectable) return false\n if (!props.selectableFilter) return true\n return props.selectableFilter(item)\n}\n\nconst handleSelect = (item: ItemType) => {\n emit('select', getKey(item))\n}\n\nconst hasActionSlot = computed(() => !!slots.action)\n</script>\n\n<template>\n <div\n class=\"bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden\"\n >\n <div class=\"overflow-x-auto\">\n <table class=\"w-full divide-y divide-black/10 text-left dark:divide-white/10\">\n <thead\n class=\"bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400\"\n >\n <tr>\n <!-- Selection header -->\n <th v-if=\"selectable\" class=\"w-12 px-3 py-3\">\n <Checkbox\n :model-value=\"allSelected\"\n :indeterminate=\"someSelected\"\n :disabled=\"selectableItems.length === 0\"\n @update:model-value=\"emit('selectAll')\"\n />\n </th>\n\n <th\n v-for=\"property in visibleProperties\"\n :key=\"property.name\"\n :class=\"[getAlignmentClass(property.align), 'px-3 py-3']\"\n >\n <slot :name=\"'header-' + property.name\" :property>\n {{ property.label ?? property.name }}\n </slot>\n </th>\n\n <th v-if=\"hasActionSlot\" class=\"px-3 py-3 text-right\"></th>\n </tr>\n </thead>\n\n <tbody class=\"divide-y divide-black/10 font-medium dark:divide-white/10\">\n <tr\n v-for=\"item in items\"\n :key=\"getKey(item)\"\n class=\"hover:bg-black/5 dark:hover:bg-white/5 transition-colors\"\n :class=\"{ 'bg-primary/5 dark:bg-primary/10': isSelected(item) }\"\n >\n <!-- Selection cell -->\n <td v-if=\"selectable\" class=\"px-3 py-4\">\n <Checkbox\n v-if=\"isSelectable(item)\"\n :model-value=\"isSelected(item)\"\n @update:model-value=\"handleSelect(item)\"\n />\n </td>\n\n <td\n v-for=\"property in visibleProperties\"\n :key=\"property.name\"\n :class=\"[\n getAlignmentClass(property.align),\n getMainClass(property.main),\n property.className,\n 'px-3 py-4',\n ]\"\n >\n <slot\n :item=\"item\"\n :name=\"'item-' + property.name\"\n :property\n :value=\"getItemValue(item, property)\"\n >\n <component\n :is=\"getTypeComponent(property.type || 'text')\"\n :value=\"getItemValue(item, property)\"\n />\n </slot>\n </td>\n\n <td v-if=\"hasActionSlot\" class=\"flex items-center justify-end gap-2 px-3 py-4\">\n <slot :item=\"item\" name=\"action\"></slot>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n <!-- Empty state -->\n <div v-if=\"!items || items.length === 0\">\n <slot name=\"empty\"></slot>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\nimport Checkbox from '@/components/form/Checkbox.vue'\n\nexport interface MobileListColumn {\n key: string\n label: string\n /** Hide this column on mobile */\n hideOnMobile?: boolean\n /** Mark as primary info (shown prominently) */\n primary?: boolean\n /** Mark as secondary info */\n secondary?: boolean\n}\n\ntype ItemType = { id: number | string; [key: string]: unknown }\n\nconst props = withDefaults(\n defineProps<{\n /** Array of items to display */\n items: ItemType[]\n /** Key field for unique identification */\n keyField?: string\n /** Enable selection mode */\n selectable?: boolean\n /** Set of selected item keys */\n selectedItems?: Set<string>\n /** Filter function to determine if an item is selectable */\n selectableFilter?: (item: ItemType) => boolean\n }>(),\n {\n keyField: 'id',\n selectable: false,\n },\n)\n\nconst emit = defineEmits<{\n /** Emitted when an item is selected/deselected */\n select: [id: string]\n /** Emitted when select all is toggled */\n selectAll: []\n}>()\n\ndefineSlots<{\n /** Avatar/icon slot for each item */\n avatar?: (props: { item: ItemType }) => unknown\n /** Main content area for each item */\n content?: (props: { item: ItemType }) => unknown\n /** Actions slot (right side) for each item */\n actions?: (props: { item: ItemType }) => unknown\n /** Empty state slot */\n empty?: () => unknown\n}>()\n\nconst slots = useSlots()\n\nconst getKey = (item: ItemType): string => {\n const keyValue = item[props.keyField]\n return String(keyValue ?? Math.random())\n}\n\nconst selectableItems = computed(() => {\n if (!props.selectableFilter) return props.items\n return props.items.filter(props.selectableFilter)\n})\n\nconst allSelected = computed(() => {\n if (selectableItems.value.length === 0) return false\n return selectableItems.value.every((item) => props.selectedItems?.has(getKey(item)))\n})\n\nconst someSelected = computed(() => {\n return (props.selectedItems?.size || 0) > 0 && !allSelected.value\n})\n\nconst isSelected = (item: ItemType): boolean => {\n return props.selectedItems?.has(getKey(item)) || false\n}\n\nconst isSelectable = (item: ItemType): boolean => {\n if (!props.selectable) return false\n if (!props.selectableFilter) return true\n return props.selectableFilter(item)\n}\n\nconst handleSelect = (item: ItemType) => {\n emit('select', getKey(item))\n}\n\nconst hasEmptySlot = computed(() => !!slots.empty)\n</script>\n\n<template>\n <div class=\"space-y-3\">\n <!-- Select All Header (when selectable) -->\n <div\n v-if=\"selectable && selectableItems.length > 0\"\n class=\"flex items-center gap-3 p-3 bg-gray-50 dark:bg-gray-800/50 rounded-xl\"\n >\n <Checkbox\n :model-value=\"allSelected\"\n :indeterminate=\"someSelected\"\n @update:model-value=\"emit('selectAll')\"\n />\n <span class=\"text-sm text-gray-600 dark:text-gray-400\">\n {{ allSelected ? 'Tout désélectionner' : 'Tout sélectionner' }}\n </span>\n <span\n v-if=\"selectedItems && selectedItems.size > 0\"\n class=\"text-sm text-primary font-medium\"\n >\n ({{ selectedItems.size }} sélectionné{{ selectedItems.size > 1 ? 's' : '' }})\n </span>\n </div>\n\n <!-- Items List -->\n <div\n v-for=\"item in items\"\n :key=\"getKey(item)\"\n class=\"bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 hover:border-primary/30 dark:hover:border-primary/50 hover:shadow-md transition-all duration-200\"\n :class=\"{\n 'ring-2 ring-primary border-primary': isSelected(item),\n }\"\n >\n <div class=\"p-4 flex items-center gap-4\">\n <!-- Checkbox -->\n <div v-if=\"selectable\" class=\"flex-shrink-0\">\n <Checkbox\n v-if=\"isSelectable(item)\"\n :model-value=\"isSelected(item)\"\n @update:model-value=\"handleSelect(item)\"\n />\n <div v-else class=\"w-5 h-5\" />\n </div>\n\n <!-- Avatar slot -->\n <slot name=\"avatar\" :item=\"item\" />\n\n <!-- Content -->\n <div class=\"flex-1 min-w-0\">\n <slot name=\"content\" :item=\"item\" />\n </div>\n\n <!-- Actions -->\n <div class=\"flex-shrink-0\">\n <slot name=\"actions\" :item=\"item\" />\n </div>\n </div>\n </div>\n\n <!-- Empty state -->\n <div v-if=\"items.length === 0 && hasEmptySlot\">\n <slot name=\"empty\" />\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\nimport type { Property } from '@/types'\nimport MobileList from './MobileList.vue'\nimport TableComponent from './TableComponent.vue'\n\nexport interface ResponsiveListColumn {\n /** Column key - corresponds to the data field name (alias for 'name' for backward compatibility) */\n key?: string\n /** Column name - corresponds to the data field name */\n name?: string\n /** Display label for the column header */\n label?: string\n /** Column type for automatic rendering */\n type?: 'text' | 'number' | 'date' | 'badge' | 'boolean' | string\n /** Text alignment in the column */\n align?: 'left' | 'center' | 'right'\n /** Header CSS class */\n headerClass?: string\n /** Cell CSS class */\n className?: string\n /** Whether the column is sortable */\n sortable?: boolean\n /** Whether to hide the column */\n hidden?: boolean\n /** Whether the column is the main/primary column */\n main?: boolean\n /** Hide this column on mobile view */\n hideOnMobile?: boolean\n}\n\ntype ItemType = { id: number | string; [key: string]: unknown }\n\nconst props = withDefaults(\n defineProps<{\n /** Array of items to display */\n items: ItemType[]\n /** Column definitions (extends Property with mobile options) */\n columns: ResponsiveListColumn[]\n /** Key field for unique identification */\n keyField?: string\n /** Enable selection mode */\n selectable?: boolean\n /** Set of selected item keys */\n selectedItems?: Set<string>\n /** Filter function to determine if an item is selectable */\n selectableFilter?: (item: ItemType) => boolean\n /** Breakpoint for switching between mobile and desktop views (default: 'lg' = 1024px) */\n breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n }>(),\n {\n keyField: 'id',\n selectable: false,\n breakpoint: 'lg',\n },\n)\n\nconst emit = defineEmits<{\n /** Emitted when an item is selected/deselected */\n select: [id: string]\n /** Emitted when select all is toggled */\n selectAll: []\n}>()\n\ndefineSlots<{\n // Mobile slots\n /** Avatar/icon slot for mobile view */\n avatar?: (props: { item: ItemType }) => unknown\n /** Main content for mobile view */\n mobileContent?: (props: { item: ItemType }) => unknown\n /** Actions for mobile view */\n mobileActions?: (props: { item: ItemType }) => unknown\n\n // Table cell slots - dynamic based on column key\n /** Custom cell rendering for table view */\n [key: `cell-${string}`]: (props: { item: ItemType; value: unknown }) => unknown\n\n // Shared slots\n /** Actions column for table view, also used as fallback for mobile */\n actions?: (props: { item: ItemType }) => unknown\n /** Empty state slot */\n empty?: () => unknown\n}>()\n\nconst slots = useSlots()\n\n// Helper to get column key (supports both 'key' and 'name' for backward compatibility)\nconst getColumnKey = (col: ResponsiveListColumn): string => col.key || col.name || ''\n\n// Convert columns to Property format for TableComponent\nconst tableProperties = computed<Property[]>(() =>\n props.columns.map((col) => ({\n name: getColumnKey(col),\n label: col.label,\n type: col.type,\n sortable: col.sortable,\n hidden: col.hidden,\n align: col.align,\n className: col.className,\n main: col.main,\n })),\n)\n\n// Get breakpoint value in pixels\nconst breakpointPx = computed(() => {\n const breakpoints: Record<string, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n }\n return breakpoints[props.breakpoint]\n})\n\n// Get cell value for table slots\nconst getCellValue = (item: ItemType, key: string): unknown => {\n const keys = key.split('.')\n let value: unknown = item\n for (const k of keys) {\n if (value && typeof value === 'object' && k in value) {\n value = (value as Record<string, unknown>)[k]\n } else {\n return undefined\n }\n }\n return value\n}\n\n// Check if a cell slot exists\nconst hasCellSlot = (key: string): boolean => {\n return !!slots[`cell-${key}`]\n}\n\nconst hasActionsSlot = computed(() => !!slots.actions)\n</script>\n\n<template>\n <div class=\"responsive-list\" :style=\"{ '--breakpoint': breakpointPx + 'px' }\">\n <!-- Mobile View -->\n <div class=\"responsive-list__mobile\">\n <MobileList\n :items=\"items\"\n :key-field=\"keyField\"\n :selectable=\"selectable\"\n :selected-items=\"selectedItems\"\n :selectable-filter=\"selectableFilter\"\n @select=\"emit('select', $event)\"\n @select-all=\"emit('selectAll')\"\n >\n <template #avatar=\"{ item }\">\n <slot name=\"avatar\" :item=\"item\" />\n </template>\n\n <template #content=\"{ item }\">\n <slot name=\"mobileContent\" :item=\"item\" />\n </template>\n\n <template #actions=\"{ item }\">\n <slot name=\"mobileActions\" :item=\"item\">\n <slot name=\"actions\" :item=\"item\" />\n </slot>\n </template>\n\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </MobileList>\n </div>\n\n <!-- Desktop View -->\n <div class=\"responsive-list__desktop\">\n <TableComponent\n :items=\"items\"\n :properties=\"tableProperties\"\n :key-field=\"keyField\"\n :selectable=\"selectable\"\n :selected-items=\"selectedItems\"\n :selectable-filter=\"selectableFilter\"\n @select=\"emit('select', $event)\"\n @select-all=\"emit('selectAll')\"\n >\n <!-- Forward cell slots -->\n <template v-for=\"col in columns\" :key=\"getColumnKey(col)\" #[`item-${getColumnKey(col)}`]=\"{ item, value }\">\n <slot\n v-if=\"hasCellSlot(getColumnKey(col))\"\n :name=\"`cell-${getColumnKey(col)}`\"\n :item=\"item\"\n :value=\"getCellValue(item, getColumnKey(col))\"\n />\n <template v-else>{{ value }}</template>\n </template>\n\n <!-- Actions slot -->\n <template v-if=\"hasActionsSlot\" #action=\"{ item }\">\n <slot name=\"actions\" :item=\"item\" />\n </template>\n\n <template #empty>\n <slot name=\"empty\" />\n </template>\n </TableComponent>\n </div>\n </div>\n</template>\n\n<style scoped>\n.responsive-list__mobile {\n display: block;\n}\n\n.responsive-list__desktop {\n display: none;\n}\n\n@media (min-width: 640px) {\n .responsive-list[style*=\"--breakpoint: 640px\"] .responsive-list__mobile {\n display: none;\n }\n .responsive-list[style*=\"--breakpoint: 640px\"] .responsive-list__desktop {\n display: block;\n }\n}\n\n@media (min-width: 768px) {\n .responsive-list[style*=\"--breakpoint: 768px\"] .responsive-list__mobile {\n display: none;\n }\n .responsive-list[style*=\"--breakpoint: 768px\"] .responsive-list__desktop {\n display: block;\n }\n}\n\n@media (min-width: 1024px) {\n .responsive-list[style*=\"--breakpoint: 1024px\"] .responsive-list__mobile {\n display: none;\n }\n .responsive-list[style*=\"--breakpoint: 1024px\"] .responsive-list__desktop {\n display: block;\n }\n}\n\n@media (min-width: 1280px) {\n .responsive-list[style*=\"--breakpoint: 1280px\"] .responsive-list__mobile {\n display: none;\n }\n .responsive-list[style*=\"--breakpoint: 1280px\"] .responsive-list__desktop {\n display: block;\n }\n}\n\n@media (min-width: 1536px) {\n .responsive-list[style*=\"--breakpoint: 1536px\"] .responsive-list__mobile {\n display: none;\n }\n .responsive-list[style*=\"--breakpoint: 1536px\"] .responsive-list__desktop {\n display: block;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed, nextTick, onUnmounted, ref, watch } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport type { AutocompleteOption } from '@/types'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: string | null\n options: AutocompleteOption[]\n placeholder?: string\n disabled?: boolean\n label?: string\n error?: string\n noResultsText?: string\n /** Use teleport to body to avoid overflow clipping */\n teleport?: boolean\n }>(),\n {\n teleport: true,\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string | null]\n}>()\n\nconst searchQuery = ref('')\nconst isOpen = ref(false)\nconst highlightedIndex = ref(-1)\nconst inputRef = ref<HTMLInputElement | null>(null)\nconst dropdownRef = ref<HTMLDivElement | null>(null)\nconst containerRef = ref<HTMLDivElement | null>(null)\nconst inputWrapperRef = ref<HTMLDivElement | null>(null)\nconst dropdownPosition = ref({ top: 0, left: 0, width: 0 })\n\nconst filteredOptions = computed(() => {\n if (!searchQuery.value) {\n return props.options\n }\n const query = searchQuery.value.toLowerCase()\n return props.options.filter(\n (option) =>\n option.label.toLowerCase().includes(query) || option.value.toLowerCase().includes(query),\n )\n})\n\nconst selectedLabel = computed(() => {\n if (!props.modelValue) return ''\n const option = props.options.find((opt) => opt.value === props.modelValue)\n return option?.label || ''\n})\n\nwatch(\n () => props.modelValue,\n () => {\n if (!isOpen.value) {\n searchQuery.value = selectedLabel.value\n }\n },\n { immediate: true },\n)\n\nconst updatePosition = () => {\n if (!inputWrapperRef.value || !props.teleport) return\n const rect = inputWrapperRef.value.getBoundingClientRect()\n dropdownPosition.value = {\n top: rect.bottom + window.scrollY + 8,\n left: rect.left + window.scrollX,\n width: rect.width,\n }\n}\n\nconst openDropdown = () => {\n if (props.disabled) return\n isOpen.value = true\n searchQuery.value = ''\n highlightedIndex.value = -1\n nextTick(() => {\n inputRef.value?.focus()\n updatePosition()\n })\n}\n\nconst closeDropdown = () => {\n isOpen.value = false\n searchQuery.value = selectedLabel.value\n highlightedIndex.value = -1\n}\n\nconst selectOption = (option: AutocompleteOption) => {\n emit('update:modelValue', option.value)\n searchQuery.value = option.label\n closeDropdown()\n}\n\nconst clearSelection = () => {\n emit('update:modelValue', null)\n searchQuery.value = ''\n highlightedIndex.value = -1\n nextTick(() => {\n inputRef.value?.focus()\n })\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (!isOpen.value) return\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n highlightedIndex.value = Math.min(\n highlightedIndex.value + 1,\n filteredOptions.value.length - 1,\n )\n scrollToHighlighted()\n break\n case 'ArrowUp':\n event.preventDefault()\n highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0)\n scrollToHighlighted()\n break\n case 'Enter':\n event.preventDefault()\n if (highlightedIndex.value >= 0 && filteredOptions.value[highlightedIndex.value]) {\n selectOption(filteredOptions.value[highlightedIndex.value])\n }\n break\n case 'Escape':\n event.preventDefault()\n closeDropdown()\n break\n }\n}\n\nconst scrollToHighlighted = () => {\n nextTick(() => {\n if (dropdownRef.value) {\n const highlightedElement = dropdownRef.value.querySelector(\n `[data-index=\"${highlightedIndex.value}\"]`,\n ) as HTMLElement\n if (highlightedElement) {\n highlightedElement.scrollIntoView({ block: 'nearest' })\n }\n }\n })\n}\n\nconst handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node\n const isInsideContainer = containerRef.value?.contains(target)\n const isInsideDropdown = dropdownRef.value?.contains(target)\n if (!isInsideContainer && !isInsideDropdown) {\n closeDropdown()\n }\n}\n\nwatch(isOpen, (newValue) => {\n if (newValue) {\n document.addEventListener('click', handleClickOutside)\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n } else {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n})\n\nconst dropdownStyle = computed(() => {\n if (!props.teleport) return {}\n return {\n position: 'absolute' as const,\n top: `${dropdownPosition.value.top}px`,\n left: `${dropdownPosition.value.left}px`,\n width: `${dropdownPosition.value.width}px`,\n }\n})\n</script>\n\n<template>\n <div ref=\"containerRef\" class=\"autocomplete-container\">\n <label v-if=\"label\" class=\"mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {{ label }}\n </label>\n\n <div class=\"relative\">\n <div\n ref=\"inputWrapperRef\"\n :class=\"{\n 'border-red-500': error,\n 'border-gray-300 dark:border-gray-600': !error && !isOpen,\n 'border-primary ring-2 ring-primary/20': isOpen,\n 'cursor-not-allowed opacity-50': disabled,\n }\"\n class=\"flex items-center gap-2 rounded-lg border bg-white px-3 py-2 transition dark:bg-gray-800\"\n >\n <Icon class=\"size-5 text-gray-400\" icon=\"lucide:search\" />\n\n <input\n ref=\"inputRef\"\n v-model=\"searchQuery\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder || 'Search...'\"\n class=\"flex-1 bg-transparent text-sm outline-none dark:text-white\"\n type=\"text\"\n @focus=\"openDropdown\"\n @keydown=\"handleKeydown\"\n />\n\n <button\n v-if=\"modelValue && !disabled\"\n class=\"rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700\"\n type=\"button\"\n @click.stop=\"clearSelection\"\n >\n <Icon class=\"size-4 text-gray-400\" icon=\"lucide:x\" />\n </button>\n\n <button\n :disabled=\"disabled\"\n class=\"rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700\"\n type=\"button\"\n @click.stop=\"isOpen ? closeDropdown() : openDropdown()\"\n >\n <Icon\n :class=\"{ 'rotate-180': isOpen }\"\n class=\"size-4 text-gray-400 transition\"\n icon=\"lucide:chevron-down\"\n />\n </button>\n </div>\n\n <!-- Dropdown -->\n <Teleport to=\"body\" :disabled=\"!teleport\">\n <Transition\n enter-active-class=\"transition duration-100 ease-out\"\n enter-from-class=\"opacity-0 scale-95\"\n enter-to-class=\"opacity-100 scale-100\"\n leave-active-class=\"transition duration-75 ease-in\"\n leave-from-class=\"opacity-100 scale-100\"\n leave-to-class=\"opacity-0 scale-95\"\n >\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n :style=\"dropdownStyle\"\n :class=\"[\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',\n !teleport && 'absolute mt-2 w-full',\n ]\"\n >\n <div v-if=\"filteredOptions.length === 0\" class=\"px-4 py-3 text-sm text-gray-500\">\n {{ noResultsText || 'No results found' }}\n </div>\n\n <button\n v-for=\"(option, index) in filteredOptions\"\n :key=\"option.value\"\n :class=\"{\n 'bg-gray-100 dark:bg-gray-700': highlightedIndex === index,\n 'bg-primary/10': modelValue === option.value,\n }\"\n :data-index=\"index\"\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\"\n type=\"button\"\n @click=\"selectOption(option)\"\n >\n <Icon\n v-if=\"modelValue === option.value\"\n class=\"size-4 text-primary\"\n icon=\"lucide:check\"\n />\n <span class=\"flex-1 dark:text-white\">{{ option.label }}</span>\n <span class=\"text-xs text-gray-400\">({{ option.value }})</span>\n </button>\n </div>\n </Transition>\n </Teleport>\n </div>\n\n <p v-if=\"error\" class=\"mt-1 text-sm text-red-600\">{{ error }}</p>\n </div>\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 :class=\"iconColorClass\" :icon class=\"size-4\" />\n </component>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, resolveComponent } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger' | 'success'\nexport type ButtonSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nconst props = withDefaults(\n defineProps<{\n /** Button variant */\n variant?: ButtonVariant\n /** Button size */\n size?: ButtonSize\n /** Icon to show (left side) */\n icon?: string\n /** Icon on right side */\n iconRight?: string\n /** Loading state */\n loading?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Full width */\n block?: boolean\n /** Link href (renders as <a>) */\n href?: string\n /** Router link (renders as RouterLink) */\n to?: string\n /** Button type */\n type?: 'button' | 'submit' | 'reset'\n }>(),\n {\n variant: 'primary',\n size: 'md',\n type: 'button',\n },\n)\n\nconst emit = defineEmits<{\n click: [event: MouseEvent]\n}>()\n\nconst variantClasses: Record<ButtonVariant, string> = {\n primary: 'bg-primary text-primary-foreground hover:bg-primary/90 focus:ring-primary',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/90 focus:ring-secondary',\n outline: 'border border-gray-300 bg-transparent text-gray-700 hover:bg-gray-50 focus:ring-primary dark:border-gray-600 dark:text-gray-300 dark:hover:bg-gray-800',\n ghost: 'bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-primary dark:text-gray-300 dark:hover:bg-gray-800',\n danger: 'bg-red-500 text-white hover:bg-red-600 focus:ring-red-500',\n success: 'bg-green-500 text-white hover:bg-green-600 focus:ring-green-500',\n}\n\nconst sizeClasses: Record<ButtonSize, string> = {\n xs: 'px-2 py-1 text-xs gap-1',\n sm: 'px-3 py-1.5 text-sm gap-1.5',\n md: 'px-4 py-2 text-sm gap-2',\n lg: 'px-5 py-2.5 text-base gap-2',\n xl: 'px-6 py-3 text-lg gap-2.5',\n}\n\nconst iconSizeClasses: Record<ButtonSize, string> = {\n xs: 'size-3',\n sm: 'size-4',\n md: 'size-4',\n lg: 'size-5',\n xl: 'size-6',\n}\n\nconst classes = computed(() => [\n 'inline-flex items-center justify-center font-medium rounded-lg transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed',\n variantClasses[props.variant],\n sizeClasses[props.size],\n props.block && 'w-full',\n])\n\nconst component = computed(() => {\n if (props.to) {\n try {\n const RouterLink = resolveComponent('RouterLink')\n if (typeof RouterLink !== 'string') return RouterLink\n } catch {\n // RouterLink not available\n }\n }\n if (props.href) return 'a'\n return 'button'\n})\n\nconst componentProps = computed(() => {\n if (props.to) return { to: props.to }\n if (props.href) return { href: props.href }\n return { type: props.type, disabled: props.disabled || props.loading }\n})\n\nconst handleClick = (event: MouseEvent) => {\n if (props.disabled || props.loading) return\n emit('click', event)\n}\n</script>\n\n<template>\n <component\n :is=\"component\"\n v-bind=\"componentProps\"\n :class=\"classes\"\n @click=\"handleClick\"\n >\n <Icon\n v-if=\"loading\"\n icon=\"lucide:loader-2\"\n :class=\"[iconSizeClasses[size], 'animate-spin']\"\n />\n <Icon\n v-else-if=\"icon\"\n :icon=\"icon\"\n :class=\"iconSizeClasses[size]\"\n />\n <slot />\n <Icon\n v-if=\"iconRight && !loading\"\n :icon=\"iconRight\"\n :class=\"iconSizeClasses[size]\"\n />\n </component>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n\nconst props = withDefaults(\n defineProps<{\n /** Image source URL */\n src?: string\n /** Alt text for image */\n alt?: string\n /** Fallback name (shows initials) */\n name?: string\n /** Size variant */\n size?: AvatarSize\n /** Show online status indicator */\n status?: 'online' | 'offline' | 'away' | 'busy'\n /** Rounded style */\n rounded?: 'full' | 'lg' | 'md'\n }>(),\n {\n size: 'md',\n rounded: 'full',\n },\n)\n\nconst imageError = ref(false)\n\nconst sizeClasses: Record<AvatarSize, string> = {\n xs: 'size-6 text-xs',\n sm: 'size-8 text-sm',\n md: 'size-10 text-base',\n lg: 'size-12 text-lg',\n xl: 'size-16 text-xl',\n '2xl': 'size-20 text-2xl',\n}\n\nconst statusSizes: Record<AvatarSize, string> = {\n xs: 'size-1.5',\n sm: 'size-2',\n md: 'size-2.5',\n lg: 'size-3',\n xl: 'size-4',\n '2xl': 'size-5',\n}\n\nconst statusColors: Record<string, string> = {\n online: 'bg-green-500',\n offline: 'bg-gray-400',\n away: 'bg-yellow-500',\n busy: 'bg-red-500',\n}\n\nconst roundedClasses: Record<string, string> = {\n full: 'rounded-full',\n lg: 'rounded-lg',\n md: 'rounded-md',\n}\n\nconst initials = computed(() => {\n if (!props.name) return ''\n return props.name\n .split(' ')\n .map(n => n[0])\n .slice(0, 2)\n .join('')\n .toUpperCase()\n})\n\nconst showImage = computed(() => props.src && !imageError.value)\n</script>\n\n<template>\n <div class=\"relative inline-block\">\n <div\n :class=\"[\n 'flex items-center justify-center overflow-hidden bg-gray-200 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-300',\n sizeClasses[size],\n roundedClasses[rounded],\n ]\"\n >\n <img\n v-if=\"showImage\"\n :src=\"src\"\n :alt=\"alt || name\"\n class=\"size-full object-cover\"\n @error=\"imageError = true\"\n />\n <span v-else-if=\"initials\">{{ initials }}</span>\n <Icon v-else icon=\"lucide:user\" class=\"size-1/2\" />\n </div>\n <span\n v-if=\"status\"\n :class=\"[\n 'absolute bottom-0 right-0 block rounded-full ring-2 ring-white dark:ring-gray-900',\n statusSizes[size],\n statusColors[status],\n ]\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, provide } from 'vue'\n\nexport interface Tab {\n key: string\n label: string\n icon?: string\n disabled?: boolean\n}\n\nconst props = withDefaults(\n defineProps<{\n /** Array of tab definitions */\n tabs: Tab[]\n /** Currently active tab key */\n modelValue?: string\n /** Tab style variant */\n variant?: 'underline' | 'pills' | 'boxed'\n }>(),\n {\n variant: 'underline',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst activeTab = computed({\n get: () => props.modelValue || props.tabs[0]?.key,\n set: (value: string) => emit('update:modelValue', value),\n})\n\nconst selectTab = (tab: Tab) => {\n if (tab.disabled) return\n activeTab.value = tab.key\n}\n\nconst variantClasses = {\n underline: {\n container: 'border-b border-gray-200 dark:border-gray-700',\n tab: 'border-b-2 -mb-px px-4 py-2',\n active: 'border-primary text-primary dark:text-primary',\n inactive: 'border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300 dark:text-gray-400 dark:hover:text-gray-300',\n },\n pills: {\n container: 'gap-2',\n tab: 'px-4 py-2 rounded-lg',\n active: 'bg-primary text-white',\n inactive: 'text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800',\n },\n boxed: {\n container: 'bg-gray-100 dark:bg-gray-800 p-1 rounded-lg gap-1',\n tab: 'px-4 py-2 rounded-md',\n active: 'bg-white dark:bg-gray-900 text-gray-900 dark:text-white shadow-sm',\n inactive: 'text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300',\n },\n}\n\nprovide('activeTab', activeTab)\n</script>\n\n<template>\n <div>\n <div\n :class=\"[\n 'flex',\n variantClasses[variant].container,\n ]\"\n role=\"tablist\"\n >\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.key\"\n type=\"button\"\n role=\"tab\"\n :aria-selected=\"activeTab === tab.key\"\n :disabled=\"tab.disabled\"\n :class=\"[\n 'text-sm font-medium transition-colors focus:outline-none disabled:cursor-not-allowed disabled:opacity-50',\n variantClasses[variant].tab,\n activeTab === tab.key\n ? variantClasses[variant].active\n : variantClasses[variant].inactive,\n ]\"\n @click=\"selectTab(tab)\"\n >\n {{ tab.label }}\n </button>\n </div>\n <div class=\"mt-4\">\n <slot :active-tab=\"activeTab\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { inject, computed, type Ref } from 'vue'\n\nconst props = defineProps<{\n /** Tab key this panel belongs to */\n value: string\n}>()\n\nconst activeTab = inject<Ref<string>>('activeTab')\n\nconst isActive = computed(() => activeTab?.value === props.value)\n</script>\n\n<template>\n <div v-show=\"isActive\" role=\"tabpanel\">\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 v-else class=\"text-sm font-semibold\">{{ 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>\nimport { Icon } from '@iconify/vue'\nimport { ref } from 'vue'\nimport CardComponent from './CardComponent.vue'\n\nconst props = withDefaults(\n defineProps<{\n /** Card title */\n title?: string\n /** Card description */\n description?: string\n /** Whether the card is initially expanded */\n defaultExpanded?: boolean\n }>(),\n {\n defaultExpanded: true,\n },\n)\n\nconst isExpanded = ref(props.defaultExpanded)\n\nconst toggle = () => {\n isExpanded.value = !isExpanded.value\n}\n</script>\n\n<template>\n <CardComponent :title=\"title\" :description=\"description\">\n <template #actions>\n <slot name=\"actions\" />\n <button\n type=\"button\"\n class=\"rounded-lg p-1.5 text-gray-500 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800\"\n @click=\"toggle\"\n >\n <Icon\n :icon=\"isExpanded ? 'lucide:chevron-up' : 'lucide:chevron-down'\"\n class=\"size-5\"\n />\n </button>\n </template>\n\n <Transition\n enter-active-class=\"transition-all duration-200 ease-out\"\n enter-from-class=\"opacity-0 max-h-0\"\n enter-to-class=\"opacity-100 max-h-[2000px]\"\n leave-active-class=\"transition-all duration-200 ease-in\"\n leave-from-class=\"opacity-100 max-h-[2000px]\"\n leave-to-class=\"opacity-0 max-h-0\"\n >\n <div v-show=\"isExpanded\" class=\"overflow-hidden\">\n <div class=\"space-y-4 p-6\">\n <slot />\n </div>\n </div>\n </Transition>\n </CardComponent>\n</template>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","$slots","_hoisted_2","_createElementVNode","_hoisted_3","_hoisted_4","_renderSlot","_hoisted_5","_hoisted_6","useSlots","TextType","NumberType","DateType","BooleanType","BadgeType","computed","_createVNode","Checkbox","_Fragment","_renderList","_normalizeClass","_createTextVNode","_toDisplayString","_hoisted_7","_hoisted_8","_createBlock","_resolveDynamicComponent","_hoisted_9","_hoisted_10","MobileList","_withCtx","TableComponent","ref","watch","nextTick","onUnmounted","_unref","Icon","_withModifiers","_Teleport","_Transition","resolveComponent","_mergeProps","provide","inject","_withDirectives","_normalizeStyle","CardComponent"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { defineComponent, createElementBlock, openBlock, createCommentVNode, renderSlot, createElementVNode, createTextVNode, toDisplayString, useSlots, computed, createVNode, Fragment, renderList, normalizeClass, createBlock, resolveDynamicComponent, withCtx, createSlots, ref, watch, onUnmounted, withDirectives, unref, vModelText, withModifiers, Teleport, Transition, normalizeStyle, nextTick, resolveComponent, mergeProps, provide, inject, vShow } from "vue";
1
+ import { defineComponent, createElementBlock, openBlock, createCommentVNode, renderSlot, createElementVNode, createTextVNode, toDisplayString, useSlots, computed, createVNode, Fragment, renderList, normalizeClass, createBlock, resolveDynamicComponent, normalizeStyle, withCtx, createSlots, ref, watch, onUnmounted, withDirectives, unref, vModelText, withModifiers, Teleport, Transition, nextTick, resolveComponent, mergeProps, provide, inject, vShow } from "vue";
2
2
  import { _ as _sfc_main$c } from "./Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js";
3
3
  import { e as _sfc_main$d, d as _sfc_main$e, c as _sfc_main$f, b as _sfc_main$g, a as _sfc_main$h } from "./BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  import { Icon } from "@iconify/vue";
5
- const _hoisted_1$8 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
6
- const _hoisted_2$6 = {
5
+ const _hoisted_1$9 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
6
+ const _hoisted_2$7 = {
7
7
  key: 0,
8
8
  class: "flex items-center justify-between border-b border-gray-200 px-5 py-3 dark:border-gray-700"
9
9
  };
@@ -25,8 +25,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
25
25
  },
26
26
  setup(__props) {
27
27
  return (_ctx, _cache) => {
28
- return openBlock(), createElementBlock("div", _hoisted_1$8, [
29
- __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_2$6, [
28
+ return openBlock(), createElementBlock("div", _hoisted_1$9, [
29
+ __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_2$7, [
30
30
  createElementVNode("div", _hoisted_3$4, [
31
31
  __props.title || _ctx.$slots.title ? (openBlock(), createElementBlock("span", _hoisted_4$3, [
32
32
  renderSlot(_ctx.$slots, "title", {}, () => [
@@ -48,8 +48,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
48
48
  };
49
49
  }
50
50
  });
51
- const _hoisted_1$7 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
52
- const _hoisted_2$5 = { class: "overflow-x-auto" };
51
+ const _hoisted_1$8 = { class: "bg-white dark:bg-gray-800 rounded-xl border border-gray-200 dark:border-gray-700 overflow-hidden" };
52
+ const _hoisted_2$6 = { class: "overflow-x-auto" };
53
53
  const _hoisted_3$3 = { class: "w-full divide-y divide-black/10 text-left dark:divide-white/10" };
54
54
  const _hoisted_4$2 = { class: "bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400" };
55
55
  const _hoisted_5$2 = {
@@ -159,8 +159,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
159
159
  };
160
160
  const hasActionSlot = computed(() => !!slots.action);
161
161
  return (_ctx, _cache) => {
162
- return openBlock(), createElementBlock("div", _hoisted_1$7, [
163
- createElementVNode("div", _hoisted_2$5, [
162
+ return openBlock(), createElementBlock("div", _hoisted_1$8, [
163
+ createElementVNode("div", _hoisted_2$6, [
164
164
  createElementVNode("table", _hoisted_3$3, [
165
165
  createElementVNode("thead", _hoisted_4$2, [
166
166
  createElementVNode("tr", null, [
@@ -234,8 +234,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
234
234
  };
235
235
  }
236
236
  });
237
- const _hoisted_1$6 = { class: "space-y-3" };
238
- const _hoisted_2$4 = {
237
+ const _hoisted_1$7 = { class: "space-y-3" };
238
+ const _hoisted_2$5 = {
239
239
  key: 0,
240
240
  class: "flex items-center gap-3 p-3 bg-gray-50 dark:bg-gray-800/50 rounded-xl"
241
241
  };
@@ -303,8 +303,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
303
303
  };
304
304
  const hasEmptySlot = computed(() => !!slots.empty);
305
305
  return (_ctx, _cache) => {
306
- return openBlock(), createElementBlock("div", _hoisted_1$6, [
307
- __props.selectable && selectableItems.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$4, [
306
+ return openBlock(), createElementBlock("div", _hoisted_1$7, [
307
+ __props.selectable && selectableItems.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$5, [
308
308
  createVNode(_sfc_main$c, {
309
309
  "model-value": allSelected.value,
310
310
  indeterminate: someSelected.value,
@@ -345,6 +345,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
345
345
  };
346
346
  }
347
347
  });
348
+ const _hoisted_1$6 = { class: "responsive-list__mobile" };
349
+ const _hoisted_2$4 = { class: "responsive-list__desktop" };
348
350
  const _sfc_main$8 = /* @__PURE__ */ defineComponent({
349
351
  __name: "ResponsiveList",
350
352
  props: {
@@ -374,13 +376,13 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
374
376
  main: col.main
375
377
  }))
376
378
  );
377
- const breakpointClass = computed(() => {
379
+ const breakpointPx = computed(() => {
378
380
  const breakpoints = {
379
- sm: { mobile: "sm:hidden", desktop: "hidden sm:block" },
380
- md: { mobile: "md:hidden", desktop: "hidden md:block" },
381
- lg: { mobile: "lg:hidden", desktop: "hidden lg:block" },
382
- xl: { mobile: "xl:hidden", desktop: "hidden xl:block" },
383
- "2xl": { mobile: "2xl:hidden", desktop: "hidden 2xl:block" }
381
+ sm: 640,
382
+ md: 768,
383
+ lg: 1024,
384
+ xl: 1280,
385
+ "2xl": 1536
384
386
  };
385
387
  return breakpoints[props.breakpoint];
386
388
  });
@@ -401,10 +403,11 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
401
403
  };
402
404
  const hasActionsSlot = computed(() => !!slots.actions);
403
405
  return (_ctx, _cache) => {
404
- return openBlock(), createElementBlock("div", null, [
405
- createElementVNode("div", {
406
- class: normalizeClass(breakpointClass.value.mobile)
407
- }, [
406
+ return openBlock(), createElementBlock("div", {
407
+ class: "responsive-list",
408
+ style: normalizeStyle({ "--breakpoint": breakpointPx.value + "px" })
409
+ }, [
410
+ createElementVNode("div", _hoisted_1$6, [
408
411
  createVNode(_sfc_main$9, {
409
412
  items: __props.items,
410
413
  "key-field": __props.keyField,
@@ -415,25 +418,23 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
415
418
  onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
416
419
  }, {
417
420
  avatar: withCtx(({ item }) => [
418
- renderSlot(_ctx.$slots, "avatar", { item })
421
+ renderSlot(_ctx.$slots, "avatar", { item }, void 0, true)
419
422
  ]),
420
423
  content: withCtx(({ item }) => [
421
- renderSlot(_ctx.$slots, "mobileContent", { item })
424
+ renderSlot(_ctx.$slots, "mobileContent", { item }, void 0, true)
422
425
  ]),
423
426
  actions: withCtx(({ item }) => [
424
427
  renderSlot(_ctx.$slots, "mobileActions", { item }, () => [
425
- renderSlot(_ctx.$slots, "actions", { item })
426
- ])
428
+ renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
429
+ ], true)
427
430
  ]),
428
431
  empty: withCtx(() => [
429
- renderSlot(_ctx.$slots, "empty")
432
+ renderSlot(_ctx.$slots, "empty", {}, void 0, true)
430
433
  ]),
431
434
  _: 3
432
435
  }, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter"])
433
- ], 2),
434
- createElementVNode("div", {
435
- class: normalizeClass(breakpointClass.value.desktop)
436
- }, [
436
+ ]),
437
+ createElementVNode("div", _hoisted_2$4, [
437
438
  createVNode(_sfc_main$a, {
438
439
  items: __props.items,
439
440
  properties: tableProperties.value,
@@ -445,7 +446,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
445
446
  onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll"))
446
447
  }, createSlots({
447
448
  empty: withCtx(() => [
448
- renderSlot(_ctx.$slots, "empty")
449
+ renderSlot(_ctx.$slots, "empty", {}, void 0, true)
449
450
  ]),
450
451
  _: 2
451
452
  }, [
@@ -457,7 +458,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
457
458
  key: 0,
458
459
  item,
459
460
  value: getCellValue(item, getColumnKey(col))
460
- }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
461
+ }, void 0, true) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
461
462
  createTextVNode(toDisplayString(value), 1)
462
463
  ], 64))
463
464
  ])
@@ -466,16 +467,24 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
466
467
  hasActionsSlot.value ? {
467
468
  name: "action",
468
469
  fn: withCtx(({ item }) => [
469
- renderSlot(_ctx.$slots, "actions", { item })
470
+ renderSlot(_ctx.$slots, "actions", { item }, void 0, true)
470
471
  ]),
471
472
  key: "0"
472
473
  } : void 0
473
474
  ]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter"])
474
- ], 2)
475
- ]);
475
+ ])
476
+ ], 4);
476
477
  };
477
478
  }
478
479
  });
480
+ const _export_sfc = (sfc, props) => {
481
+ const target = sfc.__vccOpts || sfc;
482
+ for (const [key, val] of props) {
483
+ target[key] = val;
484
+ }
485
+ return target;
486
+ };
487
+ const ResponsiveList = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-5563bb86"]]);
479
488
  const _hoisted_1$5 = {
480
489
  key: 0,
481
490
  class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
@@ -1267,17 +1276,17 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
1267
1276
  }
1268
1277
  });
1269
1278
  export {
1279
+ ResponsiveList as R,
1270
1280
  _sfc_main$b as _,
1271
1281
  _sfc_main$a as a,
1272
1282
  _sfc_main$9 as b,
1273
- _sfc_main$8 as c,
1274
- _sfc_main$7 as d,
1275
- _sfc_main$6 as e,
1276
- _sfc_main$5 as f,
1277
- _sfc_main$4 as g,
1278
- _sfc_main$3 as h,
1279
- _sfc_main$2 as i,
1280
- _sfc_main$1 as j,
1281
- _sfc_main as k
1283
+ _sfc_main$7 as c,
1284
+ _sfc_main$6 as d,
1285
+ _sfc_main$5 as e,
1286
+ _sfc_main$4 as f,
1287
+ _sfc_main$3 as g,
1288
+ _sfc_main$2 as h,
1289
+ _sfc_main$1 as i,
1290
+ _sfc_main as j
1282
1291
  };
1283
- //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js.map
1292
+ //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-Dehf9Ji3.js.map