cisse-vue-ui 0.5.17 → 0.5.22

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 (126) hide show
  1. package/README.md +666 -666
  2. package/dist/Button.vue_vue_type_script_setup_true_lang-DKE8elsf.js +236 -0
  3. package/dist/Button.vue_vue_type_script_setup_true_lang-DKE8elsf.js.map +1 -0
  4. package/dist/Button.vue_vue_type_script_setup_true_lang-DrGM65ny.cjs +235 -0
  5. package/dist/Button.vue_vue_type_script_setup_true_lang-DrGM65ny.cjs.map +1 -0
  6. package/dist/{RangeSlider.vue_vue_type_script_setup_true_lang-y3zIxWfI.js → Combobox.vue_vue_type_script_setup_true_lang-DhcLb6DX.js} +408 -185
  7. package/dist/Combobox.vue_vue_type_script_setup_true_lang-DhcLb6DX.js.map +1 -0
  8. package/dist/{RangeSlider.vue_vue_type_script_setup_true_lang-Cv1OwT9S.cjs → Combobox.vue_vue_type_script_setup_true_lang-FdUrjmSG.cjs} +435 -212
  9. package/dist/Combobox.vue_vue_type_script_setup_true_lang-FdUrjmSG.cjs.map +1 -0
  10. package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-Bech-H58.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-CNucAMQg.js} +226 -248
  11. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CNucAMQg.js.map +1 -0
  12. package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-CHoagJ0-.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-DXb9wQQv.cjs} +225 -247
  13. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DXb9wQQv.cjs.map +1 -0
  14. package/dist/{Timeline.vue_vue_type_script_setup_true_lang-CuPF4MPe.js → DarkModeToggle.vue_vue_type_script_setup_true_lang-43fxlbro.js} +209 -415
  15. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-43fxlbro.js.map +1 -0
  16. package/dist/{Timeline.vue_vue_type_script_setup_true_lang-CqeiZOID.cjs → DarkModeToggle.vue_vue_type_script_setup_true_lang-BoB48313.cjs} +234 -440
  17. package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-BoB48313.cjs.map +1 -0
  18. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-C3pr8BwC.js.map +1 -1
  19. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DKxcVBKu.cjs.map +1 -1
  20. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-D22uNeS1.cjs.map +1 -1
  21. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-kT7np2ir.js.map +1 -1
  22. package/dist/cisse-vue-ui.css +51 -51
  23. package/dist/components/core/AccordionItem.stories.d.ts +10 -0
  24. package/dist/components/core/Avatar.vue.d.ts +1 -1
  25. package/dist/components/core/Button.vue.d.ts +1 -1
  26. package/dist/components/core/CardComponent.stories.d.ts +3 -0
  27. package/dist/components/core/CardComponent.vue.d.ts +15 -2
  28. package/dist/components/core/DarkModeToggle.stories.d.ts +15 -0
  29. package/dist/components/core/DarkModeToggle.test.d.ts +1 -0
  30. package/dist/components/core/DarkModeToggle.vue.d.ts +21 -0
  31. package/dist/components/core/MobileList.stories.d.ts +13 -0
  32. package/dist/components/core/MobileList.vue.d.ts +6 -0
  33. package/dist/components/core/ResponsiveList.stories.d.ts +15 -0
  34. package/dist/components/core/ResponsiveList.vue.d.ts +6 -0
  35. package/dist/components/core/TabPanel.stories.d.ts +8 -0
  36. package/dist/components/core/TableAction.stories.d.ts +14 -0
  37. package/dist/components/core/TableComponent.stories.d.ts +2 -0
  38. package/dist/components/core/TableComponent.vue.d.ts +6 -0
  39. package/dist/components/core/index.cjs +22 -20
  40. package/dist/components/core/index.cjs.map +1 -1
  41. package/dist/components/core/index.d.ts +2 -0
  42. package/dist/components/core/index.js +16 -14
  43. package/dist/components/core/index.js.map +1 -1
  44. package/dist/components/feedback/CardSkeleton.stories.d.ts +11 -0
  45. package/dist/components/feedback/CardSkeleton.test.d.ts +1 -0
  46. package/dist/components/feedback/CardSkeleton.vue.d.ts +1 -1
  47. package/dist/components/feedback/ConfirmDialog.stories.d.ts +12 -0
  48. package/dist/components/feedback/ConfirmDialog.test.d.ts +1 -0
  49. package/dist/components/feedback/ConfirmDialog.vue.d.ts +53 -0
  50. package/dist/components/feedback/ListSkeleton.stories.d.ts +12 -0
  51. package/dist/components/feedback/ListSkeleton.test.d.ts +1 -0
  52. package/dist/components/feedback/ListSkeleton.vue.d.ts +1 -1
  53. package/dist/components/feedback/Modal.vue.d.ts +11 -2
  54. package/dist/components/feedback/NotificationComponent.stories.d.ts +14 -0
  55. package/dist/components/feedback/NotificationList.stories.d.ts +11 -0
  56. package/dist/components/feedback/Progress.vue.d.ts +1 -1
  57. package/dist/components/feedback/Skeleton.vue.d.ts +1 -1
  58. package/dist/components/feedback/TableSkeleton.stories.d.ts +12 -0
  59. package/dist/components/feedback/TableSkeleton.test.d.ts +1 -0
  60. package/dist/components/feedback/TableSkeleton.vue.d.ts +1 -1
  61. package/dist/components/feedback/ToastContainer.stories.d.ts +15 -0
  62. package/dist/components/feedback/index.cjs +17 -15
  63. package/dist/components/feedback/index.cjs.map +1 -1
  64. package/dist/components/feedback/index.d.ts +2 -0
  65. package/dist/components/feedback/index.js +6 -4
  66. package/dist/components/feedback/index.js.map +1 -1
  67. package/dist/components/form/ColorPicker.vue.d.ts +3 -0
  68. package/dist/components/form/Combobox.stories.d.ts +15 -0
  69. package/dist/components/form/Combobox.test.d.ts +1 -0
  70. package/dist/components/form/Combobox.vue.d.ts +46 -0
  71. package/dist/components/form/FileUpload.vue.d.ts +1 -1
  72. package/dist/components/form/FormHelp.stories.d.ts +11 -0
  73. package/dist/components/form/FormLabel.stories.d.ts +12 -0
  74. package/dist/components/form/FormSelect.stories.d.ts +2 -0
  75. package/dist/components/form/index.cjs +17 -16
  76. package/dist/components/form/index.cjs.map +1 -1
  77. package/dist/components/form/index.d.ts +2 -0
  78. package/dist/components/form/index.js +3 -2
  79. package/dist/components/index.cjs +55 -51
  80. package/dist/components/index.cjs.map +1 -1
  81. package/dist/components/index.js +36 -32
  82. package/dist/components/index.js.map +1 -1
  83. package/dist/composables/index.cjs +3 -2
  84. package/dist/composables/index.cjs.map +1 -1
  85. package/dist/composables/index.js +9 -8
  86. package/dist/composables/index.js.map +1 -1
  87. package/dist/index-D7HVSFi2.cjs +337 -0
  88. package/dist/index-D7HVSFi2.cjs.map +1 -0
  89. package/dist/index-DZYqrXV0.js +75 -0
  90. package/dist/index-DZYqrXV0.js.map +1 -0
  91. package/dist/index-Dghdw1yo.js +338 -0
  92. package/dist/index-Dghdw1yo.js.map +1 -0
  93. package/dist/index-DjEv91o4.cjs +74 -0
  94. package/dist/index-DjEv91o4.cjs.map +1 -0
  95. package/dist/index.cjs +59 -54
  96. package/dist/index.cjs.map +1 -1
  97. package/dist/index.js +46 -41
  98. package/dist/index.js.map +1 -1
  99. package/dist/style.css +1 -1
  100. package/dist/useDarkMode-Cl5QWTlC.js +53 -0
  101. package/dist/useDarkMode-Cl5QWTlC.js.map +1 -0
  102. package/dist/useDarkMode-DLZcJEUQ.cjs +52 -0
  103. package/dist/useDarkMode-DLZcJEUQ.cjs.map +1 -0
  104. package/dist/useDropdown-DHFnd259.cjs.map +1 -1
  105. package/dist/useDropdown-iVu14E6s.js.map +1 -1
  106. package/dist/{useToast-CRh_sG82.cjs → useToast-Bk60GArg.cjs} +1 -50
  107. package/dist/useToast-Bk60GArg.cjs.map +1 -0
  108. package/dist/{useToast-DwFOkewC.js → useToast-ina5g3mj.js} +6 -55
  109. package/dist/useToast-ina5g3mj.js.map +1 -0
  110. package/package.json +168 -168
  111. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js +0 -54
  112. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js.map +0 -1
  113. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs +0 -53
  114. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs.map +0 -1
  115. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bech-H58.js.map +0 -1
  116. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-CHoagJ0-.cjs.map +0 -1
  117. package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-Cv1OwT9S.cjs.map +0 -1
  118. package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-y3zIxWfI.js.map +0 -1
  119. package/dist/Timeline.vue_vue_type_script_setup_true_lang-CqeiZOID.cjs.map +0 -1
  120. package/dist/Timeline.vue_vue_type_script_setup_true_lang-CuPF4MPe.js.map +0 -1
  121. package/dist/index-5Ru0o5KY.js +0 -71
  122. package/dist/index-5Ru0o5KY.js.map +0 -1
  123. package/dist/index-CnDEGRt-.cjs +0 -70
  124. package/dist/index-CnDEGRt-.cjs.map +0 -1
  125. package/dist/useToast-CRh_sG82.cjs.map +0 -1
  126. package/dist/useToast-DwFOkewC.js.map +0 -1
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- const Checkbox_vue_vue_type_script_setup_true_lang = require("./Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs");
3
+ const index = require("./index-D7HVSFi2.cjs");
4
+ const Button_vue_vue_type_script_setup_true_lang = require("./Button.vue_vue_type_script_setup_true_lang-DrGM65ny.cjs");
4
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
5
6
  const vue$1 = require("@iconify/vue");
6
7
  const useDropdown = require("./useDropdown-DHFnd259.cjs");
7
- const _hoisted_1$c = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
8
- const _hoisted_2$9 = { class: "flex flex-col gap-0.5" };
8
+ const useDarkMode = require("./useDarkMode-DLZcJEUQ.cjs");
9
+ const _hoisted_1$d = {
10
+ key: 1,
11
+ class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950"
12
+ };
13
+ const _hoisted_2$a = { class: "flex flex-col gap-0.5" };
9
14
  const _hoisted_3$7 = {
10
15
  key: 1,
11
16
  class: "text-sm font-normal text-gray-600 dark:text-gray-400"
@@ -17,7 +22,11 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
17
22
  title: {},
18
23
  description: {},
19
24
  titleClass: {},
20
- dividerClass: {}
25
+ dividerClass: {},
26
+ loading: { type: Boolean, default: false },
27
+ loadingLines: { default: 3 },
28
+ loadingAvatar: { type: Boolean, default: false },
29
+ loadingActions: { type: Boolean, default: false }
21
30
  },
22
31
  setup(__props) {
23
32
  const props = __props;
@@ -28,7 +37,12 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
28
37
  () => props.dividerClass || "border-gray-200 dark:border-gray-700"
29
38
  );
30
39
  return (_ctx, _cache) => {
31
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
40
+ return __props.loading ? (vue.openBlock(), vue.createBlock(Button_vue_vue_type_script_setup_true_lang._sfc_main$2, {
41
+ key: 0,
42
+ lines: __props.loadingLines,
43
+ "show-avatar": __props.loadingAvatar,
44
+ "show-actions": __props.loadingActions
45
+ }, null, 8, ["lines", "show-avatar", "show-actions"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$d, [
32
46
  _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", {
33
47
  key: 0,
34
48
  class: vue.normalizeClass(["border-b", dividerClasses.value])
@@ -38,7 +52,7 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
38
52
  key: 1,
39
53
  class: vue.normalizeClass(["flex items-center justify-between border-b px-5 py-3", dividerClasses.value])
40
54
  }, [
41
- vue.createElementVNode("div", _hoisted_2$9, [
55
+ vue.createElementVNode("div", _hoisted_2$a, [
42
56
  __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", {
43
57
  key: 0,
44
58
  class: vue.normalizeClass(["text-md font-semibold", titleClasses.value])
@@ -58,12 +72,15 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
58
72
  ])
59
73
  ], 2)) : vue.createCommentVNode("", true),
60
74
  vue.renderSlot(_ctx.$slots, "default")
61
- ]);
75
+ ]));
62
76
  };
63
77
  }
64
78
  });
65
- const _hoisted_1$b = { class: "overflow-hidden" };
66
- const _hoisted_2$8 = { class: "overflow-x-auto" };
79
+ const _hoisted_1$c = { class: "overflow-hidden" };
80
+ const _hoisted_2$9 = {
81
+ key: 1,
82
+ class: "overflow-x-auto"
83
+ };
67
84
  const _hoisted_3$6 = { class: "w-full divide-y divide-black/10 text-left dark:divide-white/10" };
68
85
  const _hoisted_4$5 = { class: "bg-black/5 text-sm font-semibold text-gray-600 uppercase dark:bg-white/5 dark:text-gray-400" };
69
86
  const _hoisted_5$3 = {
@@ -103,7 +120,9 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
103
120
  selectableFilter: {},
104
121
  keyField: { default: "id" },
105
122
  sortBy: {},
106
- sortDirection: {}
123
+ sortDirection: {},
124
+ loading: { type: Boolean, default: false },
125
+ loadingRows: { default: 5 }
107
126
  },
108
127
  emits: ["select", "selectAll", "sort"],
109
128
  setup(__props, { emit: __emit }) {
@@ -192,13 +211,17 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
192
211
  return props.sortBy === property.name;
193
212
  };
194
213
  return (_ctx, _cache) => {
195
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
196
- vue.createElementVNode("div", _hoisted_2$8, [
214
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
215
+ __props.loading ? (vue.openBlock(), vue.createBlock(Button_vue_vue_type_script_setup_true_lang._sfc_main$1, {
216
+ key: 0,
217
+ rows: __props.loadingRows,
218
+ columns: visibleProperties.value.length
219
+ }, null, 8, ["rows", "columns"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$9, [
197
220
  vue.createElementVNode("table", _hoisted_3$6, [
198
221
  vue.createElementVNode("thead", _hoisted_4$5, [
199
222
  vue.createElementVNode("tr", null, [
200
223
  __props.selectable ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_5$3, [
201
- vue.createVNode(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
224
+ vue.createVNode(index._sfc_main, {
202
225
  "model-value": allSelected.value,
203
226
  indeterminate: someSelected.value,
204
227
  disabled: selectableItems.value.length === 0,
@@ -257,7 +280,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
257
280
  class: vue.normalizeClass(["hover:bg-black/5 dark:hover:bg-white/5 transition-colors", { "bg-primary/5 dark:bg-primary/10": isSelected(item) }])
258
281
  }, [
259
282
  __props.selectable ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_11$1, [
260
- isSelectable(item) ? (vue.openBlock(), vue.createBlock(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
283
+ isSelectable(item) ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
261
284
  key: 0,
262
285
  "model-value": isSelected(item),
263
286
  "onUpdate:modelValue": ($event) => handleSelect(item)
@@ -290,17 +313,17 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
290
313
  ], 2);
291
314
  }), 128))
292
315
  ])
293
- ])
294
- ]),
295
- !__props.items || __props.items.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
296
- vue.renderSlot(_ctx.$slots, "empty")
297
- ])) : vue.createCommentVNode("", true)
316
+ ]),
317
+ !__props.items || __props.items.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
318
+ vue.renderSlot(_ctx.$slots, "empty")
319
+ ])) : vue.createCommentVNode("", true)
320
+ ]))
298
321
  ]);
299
322
  };
300
323
  }
301
324
  });
302
- const _hoisted_1$a = { class: "space-y-3" };
303
- const _hoisted_2$7 = { class: "flex items-center gap-3 p-3" };
325
+ const _hoisted_1$b = { class: "space-y-3" };
326
+ const _hoisted_2$8 = { class: "flex items-center gap-3 p-3" };
304
327
  const _hoisted_3$5 = { class: "text-sm text-gray-600 dark:text-gray-400" };
305
328
  const _hoisted_4$4 = {
306
329
  key: 0,
@@ -325,7 +348,9 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
325
348
  keyField: { default: "id" },
326
349
  selectable: { type: Boolean, default: false },
327
350
  selectedItems: {},
328
- selectableFilter: {}
351
+ selectableFilter: {},
352
+ loading: { type: Boolean, default: false },
353
+ loadingItems: { default: 5 }
329
354
  },
330
355
  emits: ["select", "selectAll"],
331
356
  setup(__props, { emit: __emit }) {
@@ -365,257 +390,68 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
365
390
  };
366
391
  const hasEmptySlot = vue.computed(() => !!slots.empty);
367
392
  return (_ctx, _cache) => {
368
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
369
- __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$i, { key: 0 }, {
393
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$b, [
394
+ __props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$i, { key: 0 }, {
370
395
  default: vue.withCtx(() => [
371
- vue.createElementVNode("div", _hoisted_2$7, [
372
- vue.createVNode(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
373
- "model-value": allSelected.value,
374
- indeterminate: someSelected.value,
375
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
376
- }, null, 8, ["model-value", "indeterminate"]),
377
- vue.createElementVNode("span", _hoisted_3$5, vue.toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
378
- __props.selectedItems && __props.selectedItems.size > 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$4, " (" + vue.toDisplayString(__props.selectedItems.size) + " sélectionné" + vue.toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : vue.createCommentVNode("", true)
379
- ])
396
+ vue.createVNode(Button_vue_vue_type_script_setup_true_lang._sfc_main$3, {
397
+ items: __props.loadingItems,
398
+ "show-avatar": "",
399
+ "show-secondary": "",
400
+ "show-action": ""
401
+ }, null, 8, ["items"])
380
402
  ]),
381
403
  _: 1
382
- })) : vue.createCommentVNode("", true),
383
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
384
- return vue.openBlock(), vue.createBlock(_sfc_main$i, {
385
- key: getKey(item),
386
- class: vue.normalizeClass(["hover:shadow-lg transition-all duration-200", {
387
- "ring-2 ring-primary": isSelected(item)
388
- }])
389
- }, {
404
+ })) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
405
+ __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$i, { key: 0 }, {
390
406
  default: vue.withCtx(() => [
391
- vue.createElementVNode("div", _hoisted_5$2, [
392
- __props.selectable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$2, [
393
- isSelectable(item) ? (vue.openBlock(), vue.createBlock(Checkbox_vue_vue_type_script_setup_true_lang._sfc_main, {
394
- key: 0,
395
- "model-value": isSelected(item),
396
- "onUpdate:modelValue": ($event) => handleSelect(item)
397
- }, null, 8, ["model-value", "onUpdate:modelValue"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2))
398
- ])) : vue.createCommentVNode("", true),
399
- vue.renderSlot(_ctx.$slots, "avatar", { item }),
400
- vue.createElementVNode("div", _hoisted_8$2, [
401
- vue.renderSlot(_ctx.$slots, "content", { item })
402
- ]),
403
- vue.createElementVNode("div", _hoisted_9$2, [
404
- vue.renderSlot(_ctx.$slots, "actions", { item })
405
- ])
407
+ vue.createElementVNode("div", _hoisted_2$8, [
408
+ vue.createVNode(index._sfc_main, {
409
+ "model-value": allSelected.value,
410
+ indeterminate: someSelected.value,
411
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
412
+ }, null, 8, ["model-value", "indeterminate"]),
413
+ vue.createElementVNode("span", _hoisted_3$5, vue.toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
414
+ __props.selectedItems && __props.selectedItems.size > 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$4, " (" + vue.toDisplayString(__props.selectedItems.size) + " sélectionné" + vue.toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : vue.createCommentVNode("", true)
406
415
  ])
407
416
  ]),
408
- _: 2
409
- }, 1032, ["class"]);
410
- }), 128)),
411
- __props.items.length === 0 && hasEmptySlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
412
- vue.renderSlot(_ctx.$slots, "empty")
413
- ])) : vue.createCommentVNode("", true)
417
+ _: 1
418
+ })) : vue.createCommentVNode("", true),
419
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
420
+ return vue.openBlock(), vue.createBlock(_sfc_main$i, {
421
+ key: getKey(item),
422
+ class: vue.normalizeClass(["hover:shadow-lg transition-all duration-200", {
423
+ "ring-2 ring-primary": isSelected(item)
424
+ }])
425
+ }, {
426
+ default: vue.withCtx(() => [
427
+ vue.createElementVNode("div", _hoisted_5$2, [
428
+ __props.selectable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$2, [
429
+ isSelectable(item) ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
430
+ key: 0,
431
+ "model-value": isSelected(item),
432
+ "onUpdate:modelValue": ($event) => handleSelect(item)
433
+ }, null, 8, ["model-value", "onUpdate:modelValue"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2))
434
+ ])) : vue.createCommentVNode("", true),
435
+ vue.renderSlot(_ctx.$slots, "avatar", { item }),
436
+ vue.createElementVNode("div", _hoisted_8$2, [
437
+ vue.renderSlot(_ctx.$slots, "content", { item })
438
+ ]),
439
+ vue.createElementVNode("div", _hoisted_9$2, [
440
+ vue.renderSlot(_ctx.$slots, "actions", { item })
441
+ ])
442
+ ])
443
+ ]),
444
+ _: 2
445
+ }, 1032, ["class"]);
446
+ }), 128)),
447
+ __props.items.length === 0 && hasEmptySlot.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
448
+ vue.renderSlot(_ctx.$slots, "empty")
449
+ ])) : vue.createCommentVNode("", true)
450
+ ], 64))
414
451
  ]);
415
452
  };
416
453
  }
417
454
  });
418
- const localProvidedStateMap = /* @__PURE__ */ new WeakMap();
419
- const injectLocal = /* @__NO_SIDE_EFFECTS__ */ (...args) => {
420
- var _getCurrentInstance;
421
- const key = args[0];
422
- const instance = (_getCurrentInstance = vue.getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;
423
- const owner = instance !== null && instance !== void 0 ? instance : vue.getCurrentScope();
424
- if (owner == null && !vue.hasInjectionContext()) throw new Error("injectLocal must be called in setup");
425
- if (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];
426
- return vue.inject(...args);
427
- };
428
- const isClient = typeof window !== "undefined" && typeof document !== "undefined";
429
- typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope;
430
- const toString = Object.prototype.toString;
431
- const isObject = (val) => toString.call(val) === "[object Object]";
432
- function increaseWithUnit(target, delta) {
433
- var _target$match;
434
- if (typeof target === "number") return target + delta;
435
- const value = ((_target$match = target.match(/^-?\d+\.?\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || "";
436
- const unit = target.slice(value.length);
437
- const result = Number.parseFloat(value) + delta;
438
- if (Number.isNaN(result)) return target;
439
- return result + unit;
440
- }
441
- function pxValue(px) {
442
- return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);
443
- }
444
- function toArray(value) {
445
- return Array.isArray(value) ? value : [value];
446
- }
447
- function getLifeCycleTarget(target) {
448
- return vue.getCurrentInstance();
449
- }
450
- function tryOnMounted(fn, sync = true, target) {
451
- if (getLifeCycleTarget()) vue.onMounted(fn, target);
452
- else if (sync) fn();
453
- else vue.nextTick(fn);
454
- }
455
- function watchImmediate(source, cb, options) {
456
- return vue.watch(source, cb, {
457
- ...options,
458
- immediate: true
459
- });
460
- }
461
- const defaultWindow = isClient ? window : void 0;
462
- function unrefElement(elRef) {
463
- var _$el;
464
- const plain = vue.toValue(elRef);
465
- return (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;
466
- }
467
- function useEventListener(...args) {
468
- const register = (el, event, listener, options) => {
469
- el.addEventListener(event, listener, options);
470
- return () => el.removeEventListener(event, listener, options);
471
- };
472
- const firstParamTargets = vue.computed(() => {
473
- const test = toArray(vue.toValue(args[0])).filter((e) => e != null);
474
- return test.every((e) => typeof e !== "string") ? test : void 0;
475
- });
476
- return watchImmediate(() => {
477
- var _firstParamTargets$va, _firstParamTargets$va2;
478
- return [
479
- (_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),
480
- toArray(vue.toValue(firstParamTargets.value ? args[1] : args[0])),
481
- toArray(vue.unref(firstParamTargets.value ? args[2] : args[1])),
482
- vue.toValue(firstParamTargets.value ? args[3] : args[2])
483
- ];
484
- }, ([raw_targets, raw_events, raw_listeners, raw_options], _, onCleanup) => {
485
- if (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;
486
- const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;
487
- const cleanups = raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))));
488
- onCleanup(() => {
489
- cleanups.forEach((fn) => fn());
490
- });
491
- }, { flush: "post" });
492
- }
493
- // @__NO_SIDE_EFFECTS__
494
- function useMounted() {
495
- const isMounted = vue.shallowRef(false);
496
- const instance = vue.getCurrentInstance();
497
- if (instance) vue.onMounted(() => {
498
- isMounted.value = true;
499
- }, instance);
500
- return isMounted;
501
- }
502
- // @__NO_SIDE_EFFECTS__
503
- function useSupported(callback) {
504
- const isMounted = /* @__PURE__ */ useMounted();
505
- return vue.computed(() => {
506
- isMounted.value;
507
- return Boolean(callback());
508
- });
509
- }
510
- const ssrWidthSymbol = Symbol("vueuse-ssr-width");
511
- // @__NO_SIDE_EFFECTS__
512
- function useSSRWidth() {
513
- const ssrWidth = vue.hasInjectionContext() ? /* @__PURE__ */ injectLocal(ssrWidthSymbol, null) : null;
514
- return typeof ssrWidth === "number" ? ssrWidth : void 0;
515
- }
516
- function useMediaQuery(query, options = {}) {
517
- const { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;
518
- const isSupported = /* @__PURE__ */ useSupported(() => window$1 && "matchMedia" in window$1 && typeof window$1.matchMedia === "function");
519
- const ssrSupport = vue.shallowRef(typeof ssrWidth === "number");
520
- const mediaQuery = vue.shallowRef();
521
- const matches = vue.shallowRef(false);
522
- const handler = (event) => {
523
- matches.value = event.matches;
524
- };
525
- vue.watchEffect(() => {
526
- if (ssrSupport.value) {
527
- ssrSupport.value = !isSupported.value;
528
- matches.value = vue.toValue(query).split(",").some((queryString) => {
529
- const not = queryString.includes("not all");
530
- const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
531
- const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);
532
- let res = Boolean(minWidth || maxWidth);
533
- if (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);
534
- if (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);
535
- return not ? !res : res;
536
- });
537
- return;
538
- }
539
- if (!isSupported.value) return;
540
- mediaQuery.value = window$1.matchMedia(vue.toValue(query));
541
- matches.value = mediaQuery.value.matches;
542
- });
543
- useEventListener(mediaQuery, "change", handler, { passive: true });
544
- return vue.computed(() => matches.value);
545
- }
546
- // @__NO_SIDE_EFFECTS__
547
- function useBreakpoints(breakpoints, options = {}) {
548
- function getValue$1(k, delta) {
549
- let v = vue.toValue(breakpoints[vue.toValue(k)]);
550
- if (delta != null) v = increaseWithUnit(v, delta);
551
- if (typeof v === "number") v = `${v}px`;
552
- return v;
553
- }
554
- const { window: window$1 = defaultWindow, strategy = "min-width", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;
555
- const ssrSupport = typeof ssrWidth === "number";
556
- const mounted = ssrSupport ? vue.shallowRef(false) : { value: true };
557
- if (ssrSupport) tryOnMounted(() => mounted.value = !!window$1);
558
- function match(query, size) {
559
- if (!mounted.value && ssrSupport) return query === "min" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);
560
- if (!window$1) return false;
561
- return window$1.matchMedia(`(${query}-width: ${size})`).matches;
562
- }
563
- const greaterOrEqual = (k) => {
564
- return useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options);
565
- };
566
- const smallerOrEqual = (k) => {
567
- return useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options);
568
- };
569
- const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {
570
- Object.defineProperty(shortcuts, k, {
571
- get: () => strategy === "min-width" ? greaterOrEqual(k) : smallerOrEqual(k),
572
- enumerable: true,
573
- configurable: true
574
- });
575
- return shortcuts;
576
- }, {});
577
- function current() {
578
- const points = Object.keys(breakpoints).map((k) => [
579
- k,
580
- shortcutMethods[k],
581
- pxValue(getValue$1(k))
582
- ]).sort((a, b) => a[2] - b[2]);
583
- return vue.computed(() => points.filter(([, v]) => v.value).map(([k]) => k));
584
- }
585
- return Object.assign(shortcutMethods, {
586
- greaterOrEqual,
587
- smallerOrEqual,
588
- greater(k) {
589
- return useMediaQuery(() => `(min-width: ${getValue$1(k, 0.1)})`, options);
590
- },
591
- smaller(k) {
592
- return useMediaQuery(() => `(max-width: ${getValue$1(k, -0.1)})`, options);
593
- },
594
- between(a, b) {
595
- return useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -0.1)})`, options);
596
- },
597
- isGreater(k) {
598
- return match("min", getValue$1(k, 0.1));
599
- },
600
- isGreaterOrEqual(k) {
601
- return match("min", getValue$1(k));
602
- },
603
- isSmaller(k) {
604
- return match("max", getValue$1(k, -0.1));
605
- },
606
- isSmallerOrEqual(k) {
607
- return match("max", getValue$1(k));
608
- },
609
- isInBetween(a, b) {
610
- return match("min", getValue$1(a)) && match("max", getValue$1(b, -0.1));
611
- },
612
- current,
613
- active() {
614
- const bps = current();
615
- return vue.computed(() => bps.value.length === 0 ? "" : bps.value.at(strategy === "min-width" ? -1 : 0));
616
- }
617
- });
618
- }
619
455
  const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
620
456
  __name: "ResponsiveList",
621
457
  props: {
@@ -627,7 +463,9 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
627
463
  selectableFilter: {},
628
464
  breakpoint: { default: "lg" },
629
465
  sortBy: {},
630
- sortDirection: {}
466
+ sortDirection: {},
467
+ loading: { type: Boolean, default: false },
468
+ loadingRows: { default: 5 }
631
469
  },
632
470
  emits: ["select", "selectAll", "sort"],
633
471
  setup(__props, { emit: __emit }) {
@@ -663,7 +501,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
663
501
  return !!slots[`cell-${key}`];
664
502
  };
665
503
  const hasActionsSlot = vue.computed(() => !!slots.actions);
666
- const breakpoints = /* @__PURE__ */ useBreakpoints({
504
+ const breakpoints = index.useBreakpoints({
667
505
  sm: 640,
668
506
  md: 768,
669
507
  lg: 1024,
@@ -680,6 +518,8 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
680
518
  selectable: __props.selectable,
681
519
  "selected-items": __props.selectedItems,
682
520
  "selectable-filter": __props.selectableFilter,
521
+ loading: __props.loading,
522
+ "loading-items": __props.loadingRows,
683
523
  onSelect: _cache[0] || (_cache[0] = ($event) => emit("select", $event)),
684
524
  onSelectAll: _cache[1] || (_cache[1] = ($event) => emit("selectAll"))
685
525
  }, {
@@ -698,7 +538,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
698
538
  vue.renderSlot(_ctx.$slots, "empty")
699
539
  ]),
700
540
  _: 3
701
- }, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter"])) : (vue.openBlock(), vue.createBlock(_sfc_main$i, { key: 1 }, {
541
+ }, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter", "loading", "loading-items"])) : (vue.openBlock(), vue.createBlock(_sfc_main$i, { key: 1 }, {
702
542
  default: vue.withCtx(() => [
703
543
  vue.createVNode(_sfc_main$h, {
704
544
  items: __props.items,
@@ -709,6 +549,8 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
709
549
  "selectable-filter": __props.selectableFilter,
710
550
  "sort-by": __props.sortBy,
711
551
  "sort-direction": __props.sortDirection,
552
+ loading: __props.loading,
553
+ "loading-rows": __props.loadingRows,
712
554
  onSelect: _cache[2] || (_cache[2] = ($event) => emit("select", $event)),
713
555
  onSelectAll: _cache[3] || (_cache[3] = ($event) => emit("selectAll")),
714
556
  onSort: _cache[4] || (_cache[4] = (col, dir) => emit("sort", col, dir))
@@ -739,7 +581,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
739
581
  ]),
740
582
  key: "0"
741
583
  } : void 0
742
- ]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter", "sort-by", "sort-direction"])
584
+ ]), 1032, ["items", "properties", "key-field", "selectable", "selected-items", "selectable-filter", "sort-by", "sort-direction", "loading", "loading-rows"])
743
585
  ]),
744
586
  _: 3
745
587
  }))
@@ -747,11 +589,11 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
747
589
  };
748
590
  }
749
591
  });
750
- const _hoisted_1$9 = {
592
+ const _hoisted_1$a = {
751
593
  key: 0,
752
594
  class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
753
595
  };
754
- const _hoisted_2$6 = { class: "relative" };
596
+ const _hoisted_2$7 = { class: "relative" };
755
597
  const _hoisted_3$4 = ["disabled", "placeholder"];
756
598
  const _hoisted_4$3 = ["disabled"];
757
599
  const _hoisted_5$1 = {
@@ -851,9 +693,9 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
851
693
  const handleKeydown = (event) => {
852
694
  baseHandleKeydown(event, {
853
695
  itemCount: filteredOptions.value.length,
854
- onSelect: (index) => {
855
- if (filteredOptions.value[index]) {
856
- selectOption(filteredOptions.value[index]);
696
+ onSelect: (index2) => {
697
+ if (filteredOptions.value[index2]) {
698
+ selectOption(filteredOptions.value[index2]);
857
699
  }
858
700
  }
859
701
  });
@@ -867,8 +709,8 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
867
709
  ref: containerRef,
868
710
  class: "autocomplete-container"
869
711
  }, [
870
- __props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_1$9, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
871
- vue.createElementVNode("div", _hoisted_2$6, [
712
+ __props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_1$a, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
713
+ vue.createElementVNode("div", _hoisted_2$7, [
872
714
  vue.createElementVNode("div", {
873
715
  ref_key: "inputWrapperRef",
874
716
  ref: inputWrapperRef,
@@ -943,14 +785,14 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
943
785
  ])
944
786
  }, [
945
787
  filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$1, vue.toDisplayString(__props.noResultsText || "No results found"), 1)) : vue.createCommentVNode("", true),
946
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index) => {
788
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index2) => {
947
789
  return vue.openBlock(), vue.createElementBlock("button", {
948
790
  key: option.value,
949
791
  class: vue.normalizeClass([{
950
- "bg-gray-100 dark:bg-gray-700": vue.unref(highlightedIndex) === index,
792
+ "bg-gray-100 dark:bg-gray-700": vue.unref(highlightedIndex) === index2,
951
793
  "bg-primary/10": __props.modelValue === option.value
952
794
  }, "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"]),
953
- "data-index": index,
795
+ "data-index": index2,
954
796
  type: "button",
955
797
  onClick: ($event) => selectOption(option)
956
798
  }, [
@@ -1043,103 +885,10 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
1043
885
  };
1044
886
  }
1045
887
  });
1046
- const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
1047
- __name: "Button",
1048
- props: {
1049
- variant: { default: "primary" },
1050
- size: { default: "md" },
1051
- icon: {},
1052
- iconRight: {},
1053
- loading: { type: Boolean },
1054
- disabled: { type: Boolean },
1055
- block: { type: Boolean },
1056
- href: {},
1057
- to: {},
1058
- type: { default: "button" }
1059
- },
1060
- emits: ["click"],
1061
- setup(__props, { emit: __emit }) {
1062
- const props = __props;
1063
- const emit = __emit;
1064
- const variantClasses = {
1065
- primary: "bg-primary text-primary-foreground hover:bg-primary/90 focus:ring-primary",
1066
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/90 focus:ring-secondary",
1067
- 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",
1068
- ghost: "bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-primary dark:text-gray-300 dark:hover:bg-gray-800",
1069
- danger: "bg-red-500 text-white hover:bg-red-600 focus:ring-red-500",
1070
- success: "bg-green-500 text-white hover:bg-green-600 focus:ring-green-500"
1071
- };
1072
- const sizeClasses = {
1073
- xs: "px-2 py-1 text-xs gap-1",
1074
- sm: "px-3 py-1.5 text-sm gap-1.5",
1075
- md: "px-4 py-2 text-sm gap-2",
1076
- lg: "px-5 py-2.5 text-base gap-2",
1077
- xl: "px-6 py-3 text-lg gap-2.5"
1078
- };
1079
- const iconSizeClasses = {
1080
- xs: "size-3",
1081
- sm: "size-4",
1082
- md: "size-4",
1083
- lg: "size-5",
1084
- xl: "size-6"
1085
- };
1086
- const classes = vue.computed(() => [
1087
- "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",
1088
- variantClasses[props.variant],
1089
- sizeClasses[props.size],
1090
- props.block && "w-full"
1091
- ]);
1092
- const component = vue.computed(() => {
1093
- if (props.to) {
1094
- try {
1095
- const RouterLink = vue.resolveComponent("RouterLink");
1096
- if (typeof RouterLink !== "string") return RouterLink;
1097
- } catch {
1098
- }
1099
- }
1100
- if (props.href) return "a";
1101
- return "button";
1102
- });
1103
- const componentProps = vue.computed(() => {
1104
- if (props.to) return { to: props.to };
1105
- if (props.href) return { href: props.href };
1106
- return { type: props.type, disabled: props.disabled || props.loading };
1107
- });
1108
- const handleClick = (event) => {
1109
- if (props.disabled || props.loading) return;
1110
- emit("click", event);
1111
- };
1112
- return (_ctx, _cache) => {
1113
- return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(component.value), vue.mergeProps(componentProps.value, {
1114
- class: classes.value,
1115
- onClick: handleClick
1116
- }), {
1117
- default: vue.withCtx(() => [
1118
- __props.loading ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1119
- key: 0,
1120
- icon: "lucide:loader-2",
1121
- class: vue.normalizeClass([iconSizeClasses[__props.size], "animate-spin"])
1122
- }, null, 8, ["class"])) : __props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1123
- key: 1,
1124
- icon: __props.icon,
1125
- class: vue.normalizeClass(iconSizeClasses[__props.size])
1126
- }, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true),
1127
- vue.renderSlot(_ctx.$slots, "default"),
1128
- __props.iconRight && !__props.loading ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1129
- key: 2,
1130
- icon: __props.iconRight,
1131
- class: vue.normalizeClass(iconSizeClasses[__props.size])
1132
- }, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true)
1133
- ]),
1134
- _: 3
1135
- }, 16, ["class"]);
1136
- };
1137
- }
1138
- });
1139
- const _hoisted_1$8 = { class: "relative inline-block" };
1140
- const _hoisted_2$5 = ["src", "alt"];
888
+ const _hoisted_1$9 = { class: "relative inline-block" };
889
+ const _hoisted_2$6 = ["src", "alt"];
1141
890
  const _hoisted_3$3 = { key: 1 };
1142
- const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
891
+ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
1143
892
  __name: "Avatar",
1144
893
  props: {
1145
894
  src: {},
@@ -1185,7 +934,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
1185
934
  });
1186
935
  const showImage = vue.computed(() => props.src && !imageError.value);
1187
936
  return (_ctx, _cache) => {
1188
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
937
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
1189
938
  vue.createElementVNode("div", {
1190
939
  class: vue.normalizeClass([
1191
940
  "flex items-center justify-center overflow-hidden bg-gray-200 font-medium text-gray-600 dark:bg-gray-700 dark:text-gray-300",
@@ -1199,7 +948,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
1199
948
  alt: __props.alt || __props.name,
1200
949
  class: "size-full object-cover",
1201
950
  onError: _cache[0] || (_cache[0] = ($event) => imageError.value = true)
1202
- }, null, 40, _hoisted_2$5)) : initials.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$3, vue.toDisplayString(initials.value), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
951
+ }, null, 40, _hoisted_2$6)) : initials.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$3, vue.toDisplayString(initials.value), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1203
952
  key: 2,
1204
953
  icon: "lucide:user",
1205
954
  class: "size-1/2"
@@ -1217,9 +966,9 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
1217
966
  };
1218
967
  }
1219
968
  });
1220
- const _hoisted_1$7 = ["aria-selected", "disabled", "onClick"];
1221
- const _hoisted_2$4 = { class: "mt-4" };
1222
- const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
969
+ const _hoisted_1$8 = ["aria-selected", "disabled", "onClick"];
970
+ const _hoisted_2$5 = { class: "mt-4" };
971
+ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
1223
972
  __name: "Tabs",
1224
973
  props: {
1225
974
  tabs: {},
@@ -1284,18 +1033,18 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
1284
1033
  activeTab.value === tab.key ? variantClasses[__props.variant].active : variantClasses[__props.variant].inactive
1285
1034
  ]),
1286
1035
  onClick: ($event) => selectTab(tab)
1287
- }, vue.toDisplayString(tab.label), 11, _hoisted_1$7);
1036
+ }, vue.toDisplayString(tab.label), 11, _hoisted_1$8);
1288
1037
  }), 128))
1289
1038
  ], 2),
1290
- vue.createElementVNode("div", _hoisted_2$4, [
1039
+ vue.createElementVNode("div", _hoisted_2$5, [
1291
1040
  vue.renderSlot(_ctx.$slots, "default", { activeTab: activeTab.value })
1292
1041
  ])
1293
1042
  ]);
1294
1043
  };
1295
1044
  }
1296
1045
  });
1297
- const _hoisted_1$6 = { role: "tabpanel" };
1298
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
1046
+ const _hoisted_1$7 = { role: "tabpanel" };
1047
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
1299
1048
  __name: "TabPanel",
1300
1049
  props: {
1301
1050
  value: {}
@@ -1305,7 +1054,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
1305
1054
  const activeTab = vue.inject("activeTab");
1306
1055
  const isActive = vue.computed(() => (activeTab == null ? void 0 : activeTab.value) === props.value);
1307
1056
  return (_ctx, _cache) => {
1308
- return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
1057
+ return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
1309
1058
  vue.renderSlot(_ctx.$slots, "default")
1310
1059
  ], 512)), [
1311
1060
  [vue.vShow, isActive.value]
@@ -1313,11 +1062,11 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
1313
1062
  };
1314
1063
  }
1315
1064
  });
1316
- const _hoisted_1$5 = {
1065
+ const _hoisted_1$6 = {
1317
1066
  key: 2,
1318
1067
  class: "text-sm font-semibold"
1319
1068
  };
1320
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1069
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
1321
1070
  __name: "Stepper",
1322
1071
  props: {
1323
1072
  steps: {},
@@ -1329,12 +1078,12 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1329
1078
  const props = __props;
1330
1079
  const getCurrentStepIndex = () => {
1331
1080
  if (props.modelValue === void 0) return 0;
1332
- const index = props.steps.findIndex((s) => s.key === props.modelValue);
1333
- return index >= 0 ? index : 0;
1081
+ const index2 = props.steps.findIndex((s) => s.key === props.modelValue);
1082
+ return index2 >= 0 ? index2 : 0;
1334
1083
  };
1335
- const isStepComplete = (index) => index < getCurrentStepIndex();
1336
- const isStepActive = (index) => index === getCurrentStepIndex();
1337
- const isStepPending = (index) => index > getCurrentStepIndex();
1084
+ const isStepComplete = (index2) => index2 < getCurrentStepIndex();
1085
+ const isStepActive = (index2) => index2 === getCurrentStepIndex();
1086
+ const isStepPending = (index2) => index2 > getCurrentStepIndex();
1338
1087
  return (_ctx, _cache) => {
1339
1088
  return vue.openBlock(), vue.createElementBlock("div", {
1340
1089
  class: vue.normalizeClass([
@@ -1360,7 +1109,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1360
1109
  "aria-hidden": "true"
1361
1110
  }, null, 4)
1362
1111
  ], 64)) : vue.createCommentVNode("", true),
1363
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.steps, (step, index) => {
1112
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.steps, (step, index2) => {
1364
1113
  return vue.openBlock(), vue.createElementBlock("div", {
1365
1114
  key: step.key,
1366
1115
  class: vue.normalizeClass([
@@ -1368,17 +1117,17 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1368
1117
  __props.orientation === "horizontal" ? "flex flex-1 flex-col items-center" : "flex items-start gap-4"
1369
1118
  ])
1370
1119
  }, [
1371
- __props.orientation === "vertical" && index < __props.steps.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1120
+ __props.orientation === "vertical" && index2 < __props.steps.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1372
1121
  key: 0,
1373
- class: vue.normalizeClass(["absolute left-6 top-12 h-full w-0.5 -translate-x-1/2", isStepComplete(index) ? "bg-primary" : "bg-gray-200 dark:bg-gray-700"])
1122
+ class: vue.normalizeClass(["absolute left-6 top-12 h-full w-0.5 -translate-x-1/2", isStepComplete(index2) ? "bg-primary" : "bg-gray-200 dark:bg-gray-700"])
1374
1123
  }, null, 2)) : vue.createCommentVNode("", true),
1375
1124
  vue.createElementVNode("div", {
1376
1125
  class: vue.normalizeClass(["relative z-10 flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-all duration-300", {
1377
- "border-primary bg-primary text-white shadow-lg": isStepActive(index) || isStepComplete(index),
1378
- "border-gray-300 bg-white text-gray-400 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-500": isStepPending(index)
1126
+ "border-primary bg-primary text-white shadow-lg": isStepActive(index2) || isStepComplete(index2),
1127
+ "border-gray-300 bg-white text-gray-400 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-500": isStepPending(index2)
1379
1128
  }])
1380
1129
  }, [
1381
- isStepComplete(index) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1130
+ isStepComplete(index2) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1382
1131
  key: 0,
1383
1132
  icon: "lucide:check",
1384
1133
  class: "size-6"
@@ -1386,7 +1135,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1386
1135
  key: 1,
1387
1136
  icon: step.icon,
1388
1137
  class: "size-6"
1389
- }, null, 8, ["icon"])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$5, vue.toDisplayString(index + 1), 1))
1138
+ }, null, 8, ["icon"])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$6, vue.toDisplayString(index2 + 1), 1))
1390
1139
  ], 2),
1391
1140
  vue.createElementVNode("div", {
1392
1141
  class: vue.normalizeClass([
@@ -1395,15 +1144,15 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1395
1144
  }, [
1396
1145
  vue.createElementVNode("p", {
1397
1146
  class: vue.normalizeClass(["text-sm font-semibold transition-colors", {
1398
- "text-primary dark:text-primary": isStepActive(index) || isStepComplete(index),
1399
- "text-gray-500 dark:text-gray-400": isStepPending(index)
1147
+ "text-primary dark:text-primary": isStepActive(index2) || isStepComplete(index2),
1148
+ "text-gray-500 dark:text-gray-400": isStepPending(index2)
1400
1149
  }])
1401
1150
  }, vue.toDisplayString(step.title), 3),
1402
1151
  step.description ? (vue.openBlock(), vue.createElementBlock("p", {
1403
1152
  key: 0,
1404
1153
  class: vue.normalizeClass(["mt-1 text-xs", {
1405
- "text-gray-600 dark:text-gray-300": isStepActive(index),
1406
- "text-gray-500 dark:text-gray-400": !isStepActive(index)
1154
+ "text-gray-600 dark:text-gray-300": isStepActive(index2),
1155
+ "text-gray-500 dark:text-gray-400": !isStepActive(index2)
1407
1156
  }])
1408
1157
  }, vue.toDisplayString(step.description), 3)) : vue.createCommentVNode("", true)
1409
1158
  ], 2)
@@ -1414,7 +1163,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1414
1163
  };
1415
1164
  }
1416
1165
  });
1417
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
1166
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
1418
1167
  __name: "CollapsibleCard",
1419
1168
  props: {
1420
1169
  title: {},
@@ -1510,7 +1259,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
1510
1259
  };
1511
1260
  }
1512
1261
  });
1513
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
1262
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
1514
1263
  __name: "Tooltip",
1515
1264
  props: {
1516
1265
  content: {},
@@ -1585,7 +1334,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
1585
1334
  };
1586
1335
  }
1587
1336
  });
1588
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1337
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
1589
1338
  __name: "Popover",
1590
1339
  props: {
1591
1340
  position: { default: "bottom" },
@@ -1668,17 +1417,17 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1668
1417
  };
1669
1418
  }
1670
1419
  });
1671
- const _hoisted_1$4 = {
1420
+ const _hoisted_1$5 = {
1672
1421
  key: 0,
1673
1422
  class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700"
1674
1423
  };
1675
- const _hoisted_2$3 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
1424
+ const _hoisted_2$4 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
1676
1425
  const _hoisted_3$2 = { class: "flex-1 overflow-y-auto p-4" };
1677
1426
  const _hoisted_4$2 = {
1678
1427
  key: 1,
1679
1428
  class: "px-4 py-3 border-t border-gray-200 dark:border-gray-700"
1680
1429
  };
1681
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1430
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
1682
1431
  __name: "Drawer",
1683
1432
  props: {
1684
1433
  modelValue: { type: Boolean },
@@ -1797,9 +1546,9 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1797
1546
  role: "dialog",
1798
1547
  "aria-modal": "true"
1799
1548
  }, [
1800
- __props.title || __props.showClose || _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
1549
+ __props.title || __props.showClose || _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
1801
1550
  vue.renderSlot(_ctx.$slots, "header", {}, () => [
1802
- vue.createElementVNode("h2", _hoisted_2$3, vue.toDisplayString(__props.title), 1)
1551
+ vue.createElementVNode("h2", _hoisted_2$4, vue.toDisplayString(__props.title), 1)
1803
1552
  ]),
1804
1553
  __props.showClose ? (vue.openBlock(), vue.createElementBlock("button", {
1805
1554
  key: 0,
@@ -1827,9 +1576,9 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1827
1576
  };
1828
1577
  }
1829
1578
  });
1830
- const _hoisted_1$3 = { "aria-label": "Breadcrumb" };
1831
- const _hoisted_2$2 = { class: "flex items-center flex-wrap gap-1 text-sm" };
1832
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1579
+ const _hoisted_1$4 = { "aria-label": "Breadcrumb" };
1580
+ const _hoisted_2$3 = { class: "flex items-center flex-wrap gap-1 text-sm" };
1581
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
1833
1582
  __name: "Breadcrumb",
1834
1583
  props: {
1835
1584
  items: {},
@@ -1840,14 +1589,14 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1840
1589
  emits: ["click"],
1841
1590
  setup(__props) {
1842
1591
  return (_ctx, _cache) => {
1843
- return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$3, [
1844
- vue.createElementVNode("ol", _hoisted_2$2, [
1845
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
1592
+ return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$4, [
1593
+ vue.createElementVNode("ol", _hoisted_2$3, [
1594
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
1846
1595
  return vue.openBlock(), vue.createElementBlock("li", {
1847
- key: index,
1596
+ key: index2,
1848
1597
  class: "flex items-center"
1849
1598
  }, [
1850
- index > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1599
+ index2 > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1851
1600
  key: 0,
1852
1601
  icon: __props.separator,
1853
1602
  class: "w-4 h-4 mx-2 text-gray-400 dark:text-gray-500 flex-shrink-0"
@@ -1857,13 +1606,13 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1857
1606
  href: item.href,
1858
1607
  class: vue.normalizeClass([
1859
1608
  "flex items-center gap-1.5 transition-colors",
1860
- index === __props.items.length - 1 ? "text-gray-900 dark:text-white font-medium cursor-default" : "text-gray-500 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400"
1609
+ index2 === __props.items.length - 1 ? "text-gray-900 dark:text-white font-medium cursor-default" : "text-gray-500 dark:text-gray-400 hover:text-primary-600 dark:hover:text-primary-400"
1861
1610
  ]),
1862
- "aria-current": index === __props.items.length - 1 ? "page" : void 0,
1863
- onClick: ($event) => _ctx.$emit("click", item, index)
1611
+ "aria-current": index2 === __props.items.length - 1 ? "page" : void 0,
1612
+ onClick: ($event) => _ctx.$emit("click", item, index2)
1864
1613
  }, {
1865
1614
  default: vue.withCtx(() => [
1866
- index === 0 && __props.showHomeIcon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1615
+ index2 === 0 && __props.showHomeIcon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1867
1616
  key: 0,
1868
1617
  icon: item.icon || __props.homeIcon,
1869
1618
  class: "w-4 h-4"
@@ -1883,8 +1632,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1883
1632
  };
1884
1633
  }
1885
1634
  });
1886
- const _hoisted_1$2 = { class: "divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden" };
1887
- const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1635
+ const _hoisted_1$3 = { class: "divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded-lg overflow-hidden" };
1636
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
1888
1637
  __name: "Accordion",
1889
1638
  props: {
1890
1639
  mode: { default: "single" },
@@ -1910,17 +1659,17 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1910
1659
  isOpen
1911
1660
  });
1912
1661
  return (_ctx, _cache) => {
1913
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
1662
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
1914
1663
  vue.renderSlot(_ctx.$slots, "default")
1915
1664
  ]);
1916
1665
  };
1917
1666
  }
1918
1667
  });
1919
- const _hoisted_1$1 = ["disabled", "aria-expanded"];
1920
- const _hoisted_2$1 = { class: "flex items-center gap-2 font-medium" };
1668
+ const _hoisted_1$2 = ["disabled", "aria-expanded"];
1669
+ const _hoisted_2$2 = { class: "flex items-center gap-2 font-medium" };
1921
1670
  const _hoisted_3$1 = { class: "overflow-hidden" };
1922
1671
  const _hoisted_4$1 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
1923
- const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1672
+ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
1924
1673
  __name: "AccordionItem",
1925
1674
  props: {
1926
1675
  itemKey: {},
@@ -1948,7 +1697,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1948
1697
  "aria-expanded": isOpen.value,
1949
1698
  onClick: toggle
1950
1699
  }, [
1951
- vue.createElementVNode("span", _hoisted_2$1, [
1700
+ vue.createElementVNode("span", _hoisted_2$2, [
1952
1701
  __props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
1953
1702
  key: 0,
1954
1703
  icon: __props.icon,
@@ -1960,7 +1709,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1960
1709
  icon: "heroicons:chevron-down",
1961
1710
  class: vue.normalizeClass(["w-5 h-5 transition-transform duration-200", { "rotate-180": isOpen.value }])
1962
1711
  }, null, 8, ["class"])
1963
- ], 10, _hoisted_1$1),
1712
+ ], 10, _hoisted_1$2),
1964
1713
  vue.createVNode(vue.Transition, {
1965
1714
  "enter-active-class": "transition-all duration-200 ease-out",
1966
1715
  "enter-from-class": "opacity-0 max-h-0",
@@ -1984,11 +1733,11 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
1984
1733
  };
1985
1734
  }
1986
1735
  });
1987
- const _hoisted_1 = {
1736
+ const _hoisted_1$1 = {
1988
1737
  key: 0,
1989
1738
  class: "relative"
1990
1739
  };
1991
- const _hoisted_2 = { class: "flex items-start gap-4" };
1740
+ const _hoisted_2$1 = { class: "flex items-start gap-4" };
1992
1741
  const _hoisted_3 = { class: "flex-1 min-w-0 pt-0.5" };
1993
1742
  const _hoisted_4 = { class: "flex items-center justify-between gap-2" };
1994
1743
  const _hoisted_5 = { class: "text-sm font-medium text-gray-900 dark:text-white" };
@@ -2011,7 +1760,7 @@ const _hoisted_12 = {
2011
1760
  key: 0,
2012
1761
  class: "text-xs text-gray-500 dark:text-gray-400"
2013
1762
  };
2014
- const _sfc_main = /* @__PURE__ */ vue.defineComponent({
1763
+ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
2015
1764
  __name: "Timeline",
2016
1765
  props: {
2017
1766
  items: {},
@@ -2057,17 +1806,17 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
2057
1806
  }
2058
1807
  };
2059
1808
  return (_ctx, _cache) => {
2060
- return __props.orientation === "vertical" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
2061
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
1809
+ return __props.orientation === "vertical" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
1810
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
2062
1811
  return vue.openBlock(), vue.createElementBlock("div", {
2063
1812
  key: item.key,
2064
1813
  class: "relative pb-8 last:pb-0"
2065
1814
  }, [
2066
- index < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1815
+ index2 < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
2067
1816
  key: 0,
2068
1817
  class: vue.normalizeClass(["absolute left-4 top-8 w-0.5 h-full -ml-px", getStatusClasses(item.status).line])
2069
1818
  }, null, 2)) : vue.createCommentVNode("", true),
2070
- vue.createElementVNode("div", _hoisted_2, [
1819
+ vue.createElementVNode("div", _hoisted_2$1, [
2071
1820
  vue.createElementVNode("div", {
2072
1821
  class: vue.normalizeClass(["relative z-10 flex items-center justify-center w-8 h-8 rounded-full flex-shrink-0", getStatusClasses(item.status).dot])
2073
1822
  }, [
@@ -2089,10 +1838,10 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
2089
1838
  ]);
2090
1839
  }), 128))
2091
1840
  ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_8, [
2092
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
1841
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
2093
1842
  return vue.openBlock(), vue.createElementBlock("div", {
2094
1843
  key: item.key,
2095
- class: vue.normalizeClass(["flex flex-col items-center flex-shrink-0", { "flex-1": index < __props.items.length - 1 }])
1844
+ class: vue.normalizeClass(["flex flex-col items-center flex-shrink-0", { "flex-1": index2 < __props.items.length - 1 }])
2096
1845
  }, [
2097
1846
  vue.createElementVNode("div", _hoisted_9, [
2098
1847
  vue.createElementVNode("div", {
@@ -2104,7 +1853,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
2104
1853
  class: vue.normalizeClass(["w-4 h-4", getStatusClasses(item.status).icon])
2105
1854
  }, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true)
2106
1855
  ], 2),
2107
- index < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
1856
+ index2 < __props.items.length - 1 ? (vue.openBlock(), vue.createElementBlock("div", {
2108
1857
  key: 0,
2109
1858
  class: vue.normalizeClass(["flex-1 h-0.5 mx-2", getStatusClasses(item.status).line])
2110
1859
  }, null, 2)) : vue.createCommentVNode("", true)
@@ -2119,6 +1868,51 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
2119
1868
  };
2120
1869
  }
2121
1870
  });
1871
+ const _hoisted_1 = ["aria-label"];
1872
+ const _hoisted_2 = {
1873
+ key: 0,
1874
+ class: "text-sm font-medium"
1875
+ };
1876
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
1877
+ __name: "DarkModeToggle",
1878
+ props: {
1879
+ size: { default: "md" },
1880
+ lightIcon: { default: "lucide:sun" },
1881
+ darkIcon: { default: "lucide:moon" },
1882
+ showLabel: { type: Boolean, default: false },
1883
+ storageKey: { default: "dark-mode" }
1884
+ },
1885
+ setup(__props) {
1886
+ const props = __props;
1887
+ const { isDark, toggle } = useDarkMode.useDarkMode({ storageKey: props.storageKey });
1888
+ const sizeClasses = {
1889
+ sm: { button: "p-1.5", icon: "h-4 w-4" },
1890
+ md: { button: "p-2", icon: "h-5 w-5" },
1891
+ lg: { button: "p-2.5", icon: "h-6 w-6" }
1892
+ };
1893
+ return (_ctx, _cache) => {
1894
+ return vue.openBlock(), vue.createElementBlock("button", {
1895
+ type: "button",
1896
+ class: vue.normalizeClass([
1897
+ sizeClasses[__props.size].button,
1898
+ "inline-flex items-center gap-2 rounded-lg transition-colors",
1899
+ "text-gray-600 hover:bg-gray-100 hover:text-gray-900",
1900
+ "dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-100",
1901
+ "focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2"
1902
+ ]),
1903
+ "aria-label": vue.unref(isDark) ? "Switch to light mode" : "Switch to dark mode",
1904
+ onClick: _cache[0] || (_cache[0] = //@ts-ignore
1905
+ (...args) => vue.unref(toggle) && vue.unref(toggle)(...args))
1906
+ }, [
1907
+ vue.createVNode(vue.unref(vue$1.Icon), {
1908
+ icon: vue.unref(isDark) ? __props.darkIcon : __props.lightIcon,
1909
+ class: vue.normalizeClass(sizeClasses[__props.size].icon)
1910
+ }, null, 8, ["icon", "class"]),
1911
+ __props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2, vue.toDisplayString(vue.unref(isDark) ? "Dark" : "Light"), 1)) : vue.createCommentVNode("", true)
1912
+ ], 10, _hoisted_1);
1913
+ };
1914
+ }
1915
+ });
2122
1916
  exports._sfc_main = _sfc_main$i;
2123
1917
  exports._sfc_main$1 = _sfc_main$h;
2124
1918
  exports._sfc_main$10 = _sfc_main$8;
@@ -2138,4 +1932,4 @@ exports._sfc_main$6 = _sfc_main$c;
2138
1932
  exports._sfc_main$7 = _sfc_main$b;
2139
1933
  exports._sfc_main$8 = _sfc_main$a;
2140
1934
  exports._sfc_main$9 = _sfc_main$9;
2141
- //# sourceMappingURL=Timeline.vue_vue_type_script_setup_true_lang-CqeiZOID.cjs.map
1935
+ //# sourceMappingURL=DarkModeToggle.vue_vue_type_script_setup_true_lang-BoB48313.cjs.map