cisse-vue-ui 0.10.0 → 0.10.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.
Files changed (35) hide show
  1. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-DhPNxKgF.js} +40 -94
  2. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DhPNxKgF.js.map +1 -0
  3. package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-DwW3MT85.cjs} +37 -91
  4. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DwW3MT85.cjs.map +1 -0
  5. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-CwcJkw3D.cjs} +295 -94
  6. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map → FilterTabs.vue_vue_type_script_setup_true_lang-CwcJkw3D.cjs.map} +1 -1
  7. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js → FilterTabs.vue_vue_type_script_setup_true_lang-aPs8YGWB.js} +290 -89
  8. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js.map → FilterTabs.vue_vue_type_script_setup_true_lang-aPs8YGWB.js.map} +1 -1
  9. package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs → Skeleton.vue_vue_type_script_setup_true_lang-ahmyY81P.cjs} +70 -16
  10. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-ahmyY81P.cjs.map +1 -0
  11. package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js → Skeleton.vue_vue_type_script_setup_true_lang-mcD2ZqKf.js} +70 -16
  12. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-mcD2ZqKf.js.map +1 -0
  13. package/dist/components/core/StatItem.stories.d.ts +19 -0
  14. package/dist/components/core/StatItem.vue.d.ts +59 -5
  15. package/dist/components/core/Stats.stories.d.ts +21 -0
  16. package/dist/components/core/Stats.vue.d.ts +60 -4
  17. package/dist/components/core/index.cjs +1 -1
  18. package/dist/components/core/index.d.ts +2 -2
  19. package/dist/components/core/index.js +1 -1
  20. package/dist/components/feedback/index.cjs +8 -8
  21. package/dist/components/feedback/index.js +7 -7
  22. package/dist/components/index.cjs +9 -9
  23. package/dist/components/index.js +8 -8
  24. package/dist/{index-CYXOfUOG.cjs → index-CKd33NtQ.cjs} +10 -10
  25. package/dist/{index-CYXOfUOG.cjs.map → index-CKd33NtQ.cjs.map} +1 -1
  26. package/dist/{index-C_N7WRnM.js → index-D-VE0o-l.js} +4 -4
  27. package/dist/{index-C_N7WRnM.js.map → index-D-VE0o-l.js.map} +1 -1
  28. package/dist/index.cjs +10 -10
  29. package/dist/index.js +12 -12
  30. package/dist/style.css +1 -1
  31. package/package.json +1 -1
  32. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js.map +0 -1
  33. package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs.map +0 -1
  34. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js.map +0 -1
  35. package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { defineComponent, computed, createBlock, createElementBlock, openBlock, createCommentVNode, renderSlot, normalizeClass, createElementVNode, createTextVNode, toDisplayString, useSlots, withKeys, withModifiers, normalizeStyle, unref, useAttrs, toRefs, provide, reactive, mergeProps, normalizeProps, guardReactiveProps, inject, Fragment, withCtx, createVNode, renderList, resolveDynamicComponent, ref, createSlots, watch, withDirectives, vModelText, Teleport, Transition, nextTick, resolveComponent, vShow, onMounted, onUnmounted, mergeModels, useModel } from "vue";
2
2
  import { _ as _sfc_main$C, a as useBreakpoints } from "./index-BaWpldIJ.js";
3
- import { b as _sfc_main$B, a as _sfc_main$I, _ as _sfc_main$J, c as _sfc_main$K } from "./ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js";
3
+ import { c as _sfc_main$B, b as _sfc_main$I, _ as _sfc_main$J, d as _sfc_main$K, a as _sfc_main$L } from "./Skeleton.vue_vue_type_script_setup_true_lang-mcD2ZqKf.js";
4
4
  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-tHRMWBb-.js";
5
5
  import { a as usePagination, u as useDarkMode } from "./usePagination-BGwbICFC.js";
6
6
  import { Icon } from "@iconify/vue";
@@ -11,11 +11,11 @@ const _hoisted_1$o = {
11
11
  class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950"
12
12
  };
13
13
  const _hoisted_2$h = { class: "flex flex-col gap-0.5" };
14
- const _hoisted_3$a = {
14
+ const _hoisted_3$b = {
15
15
  key: 1,
16
16
  class: "text-sm font-normal text-gray-600 dark:text-gray-400"
17
17
  };
18
- const _hoisted_4$7 = { class: "flex gap-2" };
18
+ const _hoisted_4$8 = { class: "flex gap-2" };
19
19
  const _sfc_main$A = /* @__PURE__ */ defineComponent({
20
20
  __name: "CardComponent",
21
21
  props: {
@@ -61,13 +61,13 @@ const _sfc_main$A = /* @__PURE__ */ defineComponent({
61
61
  createTextVNode(toDisplayString(__props.title), 1)
62
62
  ])
63
63
  ], 2)) : createCommentVNode("", true),
64
- __props.description || _ctx.$slots.description ? (openBlock(), createElementBlock("span", _hoisted_3$a, [
64
+ __props.description || _ctx.$slots.description ? (openBlock(), createElementBlock("span", _hoisted_3$b, [
65
65
  renderSlot(_ctx.$slots, "description", {}, () => [
66
66
  createTextVNode(toDisplayString(__props.description), 1)
67
67
  ])
68
68
  ])) : createCommentVNode("", true)
69
69
  ]),
70
- createElementVNode("div", _hoisted_4$7, [
70
+ createElementVNode("div", _hoisted_4$8, [
71
71
  renderSlot(_ctx.$slots, "actions")
72
72
  ])
73
73
  ], 2)) : createCommentVNode("", true),
@@ -78,8 +78,8 @@ const _sfc_main$A = /* @__PURE__ */ defineComponent({
78
78
  });
79
79
  const _hoisted_1$n = ["role", "tabindex", "onKeydown"];
80
80
  const _hoisted_2$g = ["src", "alt"];
81
- const _hoisted_3$9 = ["src", "alt"];
82
- const _hoisted_4$6 = { class: "flex items-center gap-3" };
81
+ const _hoisted_3$a = ["src", "alt"];
82
+ const _hoisted_4$7 = { class: "flex items-center gap-3" };
83
83
  const _hoisted_5$4 = { class: "flex flex-col gap-0.5" };
84
84
  const _hoisted_6$3 = ["src", "alt"];
85
85
  const _sfc_main$z = /* @__PURE__ */ defineComponent({
@@ -325,7 +325,7 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
325
325
  src: __props.image,
326
326
  alt: __props.imageAlt || "",
327
327
  class: normalizeClass(["w-full h-full object-cover", __props.imageClass])
328
- }, null, 10, _hoisted_3$9)) : createCommentVNode("", true)
328
+ }, null, 10, _hoisted_3$a)) : createCommentVNode("", true)
329
329
  ])
330
330
  ], 6)) : createCommentVNode("", true),
331
331
  createElementVNode("div", {
@@ -351,7 +351,7 @@ const _sfc_main$z = /* @__PURE__ */ defineComponent({
351
351
  __props.imagePosition === "background" && "text-white border-white/20"
352
352
  ])
353
353
  }, [
354
- createElementVNode("div", _hoisted_4$6, [
354
+ createElementVNode("div", _hoisted_4$7, [
355
355
  __props.icon || _ctx.$slots.icon ? (openBlock(), createElementBlock("div", {
356
356
  key: 0,
357
357
  class: normalizeClass(computedIconClass.value)
@@ -651,7 +651,7 @@ const _hoisted_2$f = {
651
651
  key: 0,
652
652
  d: "M7 14l5-5 5 5H7z"
653
653
  };
654
- const _hoisted_3$8 = {
654
+ const _hoisted_3$9 = {
655
655
  key: 1,
656
656
  d: "M7 10l5 5 5-5H7z"
657
657
  };
@@ -733,7 +733,7 @@ const _sfc_main$q = /* @__PURE__ */ defineComponent({
733
733
  viewBox: "0 0 24 24",
734
734
  fill: "currentColor"
735
735
  }, [
736
- __props.sorted && __props.sortDirection === "asc" ? (openBlock(), createElementBlock("path", _hoisted_2$f)) : __props.sorted && __props.sortDirection === "desc" ? (openBlock(), createElementBlock("path", _hoisted_3$8)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
736
+ __props.sorted && __props.sortDirection === "asc" ? (openBlock(), createElementBlock("path", _hoisted_2$f)) : __props.sorted && __props.sortDirection === "desc" ? (openBlock(), createElementBlock("path", _hoisted_3$9)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
737
737
  _cache[2] || (_cache[2] = createElementVNode("path", {
738
738
  d: "M7 14l5-5 5 5H7z",
739
739
  class: "opacity-40"
@@ -1116,8 +1116,8 @@ const _hoisted_2$d = {
1116
1116
  key: 1,
1117
1117
  class: "flex flex-col items-center justify-center py-12 text-center"
1118
1118
  };
1119
- const _hoisted_3$7 = { class: "flex flex-col items-center gap-3" };
1120
- const _hoisted_4$5 = { class: "text-sm text-gray-600 dark:text-gray-400" };
1119
+ const _hoisted_3$8 = { class: "flex flex-col items-center gap-3" };
1120
+ const _hoisted_4$6 = { class: "text-sm text-gray-600 dark:text-gray-400" };
1121
1121
  const _hoisted_5$3 = {
1122
1122
  key: 3,
1123
1123
  class: "flex flex-col items-center justify-center py-12 text-center"
@@ -1234,7 +1234,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1234
1234
  columns: visibleProperties.value.length
1235
1235
  }, null, 8, ["rows", "columns"])) : __props.error ? (openBlock(), createElementBlock("div", _hoisted_2$d, [
1236
1236
  renderSlot(_ctx.$slots, "error", {}, () => [
1237
- createElementVNode("div", _hoisted_3$7, [
1237
+ createElementVNode("div", _hoisted_3$8, [
1238
1238
  _cache[2] || (_cache[2] = createElementVNode("svg", {
1239
1239
  class: "size-12 text-red-400",
1240
1240
  fill: "none",
@@ -1248,7 +1248,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1248
1248
  d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
1249
1249
  })
1250
1250
  ], -1)),
1251
- createElementVNode("p", _hoisted_4$5, toDisplayString(__props.errorMessage), 1)
1251
+ createElementVNode("p", _hoisted_4$6, toDisplayString(__props.errorMessage), 1)
1252
1252
  ])
1253
1253
  ])
1254
1254
  ])) : __props.items && __props.items.length > 0 ? (openBlock(), createBlock(_sfc_main$y, {
@@ -1359,8 +1359,8 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1359
1359
  });
1360
1360
  const _hoisted_1$f = { class: "space-y-3" };
1361
1361
  const _hoisted_2$c = { class: "flex items-center gap-3 p-3" };
1362
- const _hoisted_3$6 = { class: "text-sm text-gray-600 dark:text-gray-400" };
1363
- const _hoisted_4$4 = {
1362
+ const _hoisted_3$7 = { class: "text-sm text-gray-600 dark:text-gray-400" };
1363
+ const _hoisted_4$5 = {
1364
1364
  key: 0,
1365
1365
  class: "text-sm text-primary font-medium"
1366
1366
  };
@@ -1445,8 +1445,8 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1445
1445
  indeterminate: someSelected.value,
1446
1446
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
1447
1447
  }, null, 8, ["model-value", "indeterminate"]),
1448
- createElementVNode("span", _hoisted_3$6, toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
1449
- __props.selectedItems && __props.selectedItems.size > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$4, " (" + toDisplayString(__props.selectedItems.size) + " sélectionné" + toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : createCommentVNode("", true)
1448
+ createElementVNode("span", _hoisted_3$7, toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
1449
+ __props.selectedItems && __props.selectedItems.size > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$5, " (" + toDisplayString(__props.selectedItems.size) + " sélectionné" + toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : createCommentVNode("", true)
1450
1450
  ])
1451
1451
  ]),
1452
1452
  _: 1
@@ -1629,8 +1629,8 @@ const _hoisted_1$e = {
1629
1629
  class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
1630
1630
  };
1631
1631
  const _hoisted_2$b = { class: "relative" };
1632
- const _hoisted_3$5 = ["disabled", "placeholder"];
1633
- const _hoisted_4$3 = ["disabled"];
1632
+ const _hoisted_3$6 = ["disabled", "placeholder"];
1633
+ const _hoisted_4$4 = ["disabled"];
1634
1634
  const _hoisted_5$1 = {
1635
1635
  key: 0,
1636
1636
  class: "px-4 py-3 text-sm text-gray-500"
@@ -1770,7 +1770,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1770
1770
  type: "text",
1771
1771
  onFocus: openDropdown,
1772
1772
  onKeydown: handleKeydown
1773
- }, null, 40, _hoisted_3$5), [
1773
+ }, null, 40, _hoisted_3$6), [
1774
1774
  [vModelText, searchQuery.value]
1775
1775
  ]),
1776
1776
  __props.modelValue && !__props.disabled ? (openBlock(), createElementBlock("button", {
@@ -1794,7 +1794,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1794
1794
  class: normalizeClass([{ "rotate-180": unref(isOpen) }, "size-4 text-gray-400 transition"]),
1795
1795
  icon: "lucide:chevron-down"
1796
1796
  }, null, 8, ["class"])
1797
- ], 8, _hoisted_4$3)
1797
+ ], 8, _hoisted_4$4)
1798
1798
  ], 2),
1799
1799
  (openBlock(), createBlock(Teleport, {
1800
1800
  to: "body",
@@ -1922,7 +1922,7 @@ const _sfc_main$g = /* @__PURE__ */ defineComponent({
1922
1922
  });
1923
1923
  const _hoisted_1$d = { class: "relative inline-block" };
1924
1924
  const _hoisted_2$a = ["src", "alt"];
1925
- const _hoisted_3$4 = { key: 1 };
1925
+ const _hoisted_3$5 = { key: 1 };
1926
1926
  const _sfc_main$f = /* @__PURE__ */ defineComponent({
1927
1927
  __name: "Avatar",
1928
1928
  props: {
@@ -2043,7 +2043,7 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
2043
2043
  alt: __props.alt || __props.name,
2044
2044
  class: "size-full object-cover",
2045
2045
  onError: _cache[0] || (_cache[0] = ($event) => imageError.value = true)
2046
- }, null, 40, _hoisted_2$a)) : initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$4, toDisplayString(initials.value), 1)) : (openBlock(), createBlock(unref(Icon), {
2046
+ }, null, 40, _hoisted_2$a)) : initials.value ? (openBlock(), createElementBlock("span", _hoisted_3$5, toDisplayString(initials.value), 1)) : (openBlock(), createBlock(unref(Icon), {
2047
2047
  key: 2,
2048
2048
  icon: "lucide:user",
2049
2049
  class: "size-1/2"
@@ -2535,8 +2535,8 @@ const _hoisted_1$7 = {
2535
2535
  class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700"
2536
2536
  };
2537
2537
  const _hoisted_2$6 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
2538
- const _hoisted_3$3 = { class: "flex-1 overflow-y-auto p-4" };
2539
- const _hoisted_4$2 = {
2538
+ const _hoisted_3$4 = { class: "flex-1 overflow-y-auto p-4" };
2539
+ const _hoisted_4$3 = {
2540
2540
  key: 1,
2541
2541
  class: "px-4 py-3 border-t border-gray-200 dark:border-gray-700"
2542
2542
  };
@@ -2675,10 +2675,10 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
2675
2675
  })
2676
2676
  ])) : createCommentVNode("", true)
2677
2677
  ])) : createCommentVNode("", true),
2678
- createElementVNode("div", _hoisted_3$3, [
2678
+ createElementVNode("div", _hoisted_3$4, [
2679
2679
  renderSlot(_ctx.$slots, "default")
2680
2680
  ]),
2681
- _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$2, [
2681
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_4$3, [
2682
2682
  renderSlot(_ctx.$slots, "footer")
2683
2683
  ])) : createCommentVNode("", true)
2684
2684
  ], 2)) : createCommentVNode("", true)
@@ -2780,8 +2780,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
2780
2780
  });
2781
2781
  const _hoisted_1$4 = ["id", "disabled", "aria-expanded", "aria-controls"];
2782
2782
  const _hoisted_2$4 = { class: "flex items-center gap-2 font-medium" };
2783
- const _hoisted_3$2 = ["id", "aria-labelledby"];
2784
- const _hoisted_4$1 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
2783
+ const _hoisted_3$3 = ["id", "aria-labelledby"];
2784
+ const _hoisted_4$2 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
2785
2785
  const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2786
2786
  __name: "AccordionItem",
2787
2787
  props: {
@@ -2846,10 +2846,10 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
2846
2846
  "aria-labelledby": headerId.value,
2847
2847
  class: "overflow-hidden"
2848
2848
  }, [
2849
- createElementVNode("div", _hoisted_4$1, [
2849
+ createElementVNode("div", _hoisted_4$2, [
2850
2850
  renderSlot(_ctx.$slots, "default")
2851
2851
  ])
2852
- ], 8, _hoisted_3$2), [
2852
+ ], 8, _hoisted_3$3), [
2853
2853
  [vShow, isOpen.value]
2854
2854
  ])
2855
2855
  ]),
@@ -2864,8 +2864,8 @@ const _hoisted_1$3 = {
2864
2864
  class: "relative"
2865
2865
  };
2866
2866
  const _hoisted_2$3 = { class: "flex items-start gap-4" };
2867
- const _hoisted_3$1 = { class: "flex-1 min-w-0 pt-0.5" };
2868
- const _hoisted_4 = { class: "flex items-center justify-between gap-2" };
2867
+ const _hoisted_3$2 = { class: "flex-1 min-w-0 pt-0.5" };
2868
+ const _hoisted_4$1 = { class: "flex items-center justify-between gap-2" };
2869
2869
  const _hoisted_5 = { class: "text-sm font-medium text-gray-900 dark:text-white" };
2870
2870
  const _hoisted_6 = {
2871
2871
  key: 0,
@@ -2952,8 +2952,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
2952
2952
  class: normalizeClass(["size-4", getStatusClasses(item.status).icon])
2953
2953
  }, null, 8, ["icon", "class"])) : createCommentVNode("", true)
2954
2954
  ], 2),
2955
- createElementVNode("div", _hoisted_3$1, [
2956
- createElementVNode("div", _hoisted_4, [
2955
+ createElementVNode("div", _hoisted_3$2, [
2956
+ createElementVNode("div", _hoisted_4$1, [
2957
2957
  createElementVNode("h3", _hoisted_5, toDisplayString(item.title), 1),
2958
2958
  item.date ? (openBlock(), createElementBlock("time", _hoisted_6, toDisplayString(item.date), 1)) : createCommentVNode("", true)
2959
2959
  ]),
@@ -3039,9 +3039,17 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
3039
3039
  };
3040
3040
  }
3041
3041
  });
3042
- const _hoisted_1$1 = { key: 0 };
3042
+ const _hoisted_1$1 = {
3043
+ key: 0,
3044
+ class: "mr-0.5"
3045
+ };
3043
3046
  const _hoisted_2$1 = {
3044
3047
  key: 1,
3048
+ class: "ml-0.5"
3049
+ };
3050
+ const _hoisted_3$1 = { key: 1 };
3051
+ const _hoisted_4 = {
3052
+ key: 2,
3045
3053
  class: "text-gray-400"
3046
3054
  };
3047
3055
  const _sfc_main$2 = /* @__PURE__ */ defineComponent({
@@ -3049,28 +3057,46 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3049
3057
  props: {
3050
3058
  label: {},
3051
3059
  value: {},
3060
+ description: {},
3061
+ prefix: {},
3062
+ suffix: {},
3052
3063
  icon: {},
3053
3064
  iconPosition: { default: "top" },
3065
+ iconRounded: { default: "xl" },
3066
+ hideIconBg: { type: Boolean, default: false },
3054
3067
  change: {},
3055
3068
  changeLabel: {},
3056
3069
  trend: {},
3057
3070
  trendOnly: { type: Boolean, default: false },
3071
+ hideTrendIcon: { type: Boolean, default: false },
3072
+ invertTrendColors: { type: Boolean, default: false },
3058
3073
  size: { default: "md" },
3059
3074
  variant: { default: "default" },
3060
3075
  color: { default: "primary" },
3061
3076
  clickable: { type: Boolean, default: false },
3062
3077
  centered: { type: Boolean },
3078
+ labelFirst: { type: Boolean, default: false },
3079
+ compact: { type: Boolean, default: false },
3080
+ loading: { type: Boolean, default: false },
3081
+ shadow: { default: "sm" },
3082
+ rounded: { default: "xl" },
3083
+ border: { default: "none" },
3084
+ accent: { default: "none" },
3063
3085
  cardClass: {},
3086
+ iconWrapperClass: {},
3064
3087
  iconClass: {},
3065
3088
  valueClass: {},
3066
- labelClass: {}
3089
+ labelClass: {},
3090
+ descriptionClass: {},
3091
+ trendClass: {},
3092
+ contentClass: {}
3067
3093
  },
3068
3094
  emits: ["click"],
3069
3095
  setup(__props) {
3070
3096
  const props = __props;
3071
3097
  const isCentered = computed(() => {
3072
3098
  if (props.centered !== void 0) return props.centered;
3073
- return props.iconPosition === "top";
3099
+ return props.iconPosition === "top" || props.iconPosition === "bottom";
3074
3100
  });
3075
3101
  const effectiveTrend = computed(() => {
3076
3102
  if (props.trend) return props.trend;
@@ -3081,38 +3107,73 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3081
3107
  });
3082
3108
  const sizeClasses = computed(() => {
3083
3109
  const sizes = {
3110
+ xs: {
3111
+ padding: props.compact ? "none" : "sm",
3112
+ icon: "size-6",
3113
+ iconInner: "size-3",
3114
+ value: "text-lg font-bold",
3115
+ label: "text-xs",
3116
+ description: "text-xs",
3117
+ change: "text-xs",
3118
+ gap: "gap-0.5"
3119
+ },
3084
3120
  sm: {
3085
- padding: "sm",
3121
+ padding: props.compact ? "sm" : "sm",
3086
3122
  icon: "size-8",
3087
3123
  iconInner: "size-4",
3088
3124
  value: "text-xl font-bold",
3089
3125
  label: "text-xs",
3126
+ description: "text-xs",
3090
3127
  change: "text-xs",
3091
3128
  gap: "gap-1"
3092
3129
  },
3093
3130
  md: {
3094
- padding: "md",
3131
+ padding: props.compact ? "sm" : "md",
3095
3132
  icon: "size-10",
3096
3133
  iconInner: "size-5",
3097
3134
  value: "text-2xl sm:text-3xl font-bold",
3098
3135
  label: "text-xs sm:text-sm",
3136
+ description: "text-xs sm:text-sm",
3099
3137
  change: "text-xs",
3100
3138
  gap: "gap-2"
3101
3139
  },
3102
3140
  lg: {
3103
- padding: "lg",
3141
+ padding: props.compact ? "md" : "lg",
3104
3142
  icon: "size-12",
3105
3143
  iconInner: "size-6",
3106
3144
  value: "text-3xl sm:text-4xl font-bold",
3107
3145
  label: "text-sm sm:text-base",
3146
+ description: "text-sm",
3108
3147
  change: "text-sm",
3109
3148
  gap: "gap-3"
3149
+ },
3150
+ xl: {
3151
+ padding: props.compact ? "md" : "lg",
3152
+ icon: "size-14",
3153
+ iconInner: "size-7",
3154
+ value: "text-4xl sm:text-5xl font-bold",
3155
+ label: "text-base sm:text-lg",
3156
+ description: "text-sm sm:text-base",
3157
+ change: "text-sm",
3158
+ gap: "gap-4"
3110
3159
  }
3111
3160
  };
3112
3161
  return sizes[props.size];
3113
3162
  });
3163
+ const iconRoundedClasses = computed(() => {
3164
+ const map = {
3165
+ none: "rounded-none",
3166
+ sm: "rounded-sm",
3167
+ md: "rounded-md",
3168
+ lg: "rounded-lg",
3169
+ xl: "rounded-xl",
3170
+ full: "rounded-full"
3171
+ };
3172
+ return map[props.iconRounded];
3173
+ });
3114
3174
  const iconBgClasses = computed(() => {
3115
- if (props.variant === "glass") return "bg-white/20";
3175
+ if (props.hideIconBg) return "";
3176
+ if (props.variant === "glass" || props.variant === "solid") return "bg-white/20";
3116
3177
  const colors = {
3117
3178
  primary: "bg-primary-100 dark:bg-primary-900/30",
3118
3179
  secondary: "bg-secondary-100 dark:bg-secondary-900/30",
@@ -3124,7 +3185,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3124
3185
  return colors[props.color];
3125
3186
  });
3126
3187
  const iconColorClasses = computed(() => {
3127
- if (props.variant === "glass") return "text-white";
3188
+ if (props.variant === "glass" || props.variant === "solid") return "text-white";
3128
3189
  const colors = {
3129
3190
  primary: "text-primary-600 dark:text-primary-400",
3130
3191
  secondary: "text-secondary-600 dark:text-secondary-400",
@@ -3135,19 +3196,43 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3135
3196
  };
3136
3197
  return colors[props.color];
3137
3198
  });
3199
+ const solidBgClasses = computed(() => {
3200
+ if (props.variant !== "solid") return "";
3201
+ const colors = {
3202
+ primary: "bg-primary-500",
3203
+ secondary: "bg-secondary-500",
3204
+ success: "bg-emerald-500",
3205
+ warning: "bg-amber-500",
3206
+ danger: "bg-red-500",
3207
+ info: "bg-blue-500"
3208
+ };
3209
+ return colors[props.color];
3210
+ });
3138
3211
  const valueTextClasses = computed(() => {
3139
- if (props.variant === "glass") return "text-white";
3212
+ if (props.variant === "glass" || props.variant === "solid") return "text-white";
3140
3213
  return "text-gray-900 dark:text-white";
3141
3214
  });
3142
3215
  const labelTextClasses = computed(() => {
3143
3216
  if (props.variant === "glass") return "text-white/80";
3217
+ if (props.variant === "solid") return "text-white/90";
3144
3218
  return "text-gray-500 dark:text-gray-400";
3145
3219
  });
3220
+ const descriptionTextClasses = computed(() => {
3221
+ if (props.variant === "glass") return "text-white/70";
3222
+ if (props.variant === "solid") return "text-white/80";
3223
+ return "text-gray-400 dark:text-gray-500";
3224
+ });
3146
3225
  const trendColorClasses = computed(() => {
3147
3226
  if (!effectiveTrend.value || effectiveTrend.value === "neutral") {
3148
3227
  return "text-gray-500";
3149
3228
  }
3150
- return effectiveTrend.value === "up" ? "text-emerald-500" : "text-red-500";
3229
+ const isUp = effectiveTrend.value === "up";
3230
+ const greenColor = "text-emerald-500";
3231
+ const redColor = "text-red-500";
3232
+ if (props.invertTrendColors) {
3233
+ return isUp ? redColor : greenColor;
3234
+ }
3235
+ return isUp ? greenColor : redColor;
3151
3236
  });
3152
3237
  const trendIcon = computed(() => {
3153
3238
  if (!effectiveTrend.value || effectiveTrend.value === "neutral") {
@@ -3156,100 +3241,170 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
3156
3241
  return effectiveTrend.value === "up" ? "heroicons:arrow-trending-up" : "heroicons:arrow-trending-down";
3157
3242
  });
3158
3243
  const cardVariant = computed(() => {
3159
- const map = {
3160
- default: "default",
3161
- glass: "glass",
3162
- outline: "outline",
3163
- flat: "flat"
3164
- };
3165
- return map[props.variant];
3244
+ if (props.variant === "solid") return "default";
3245
+ return props.variant;
3246
+ });
3247
+ const effectiveShadow = computed(() => {
3248
+ if (props.variant === "glass") return "none";
3249
+ return props.shadow;
3250
+ });
3251
+ const effectiveBorder = computed(() => {
3252
+ if (props.variant === "outline") return "default";
3253
+ return props.border;
3166
3254
  });
3167
3255
  const layoutClasses = computed(() => {
3168
- if (props.iconPosition === "top") {
3169
- return isCentered.value ? "flex flex-col items-center text-center" : "flex flex-col";
3256
+ const centered = isCentered.value ? "items-center text-center" : "";
3257
+ switch (props.iconPosition) {
3258
+ case "top":
3259
+ return `flex flex-col ${centered}`;
3260
+ case "bottom":
3261
+ return `flex flex-col-reverse ${centered}`;
3262
+ case "left":
3263
+ return "flex flex-row items-center";
3264
+ case "right":
3265
+ return "flex flex-row-reverse items-center";
3266
+ default:
3267
+ return `flex flex-col ${centered}`;
3170
3268
  }
3171
- if (props.iconPosition === "left") {
3172
- return "flex flex-row items-center";
3269
+ });
3270
+ const iconMarginClasses = computed(() => {
3271
+ switch (props.iconPosition) {
3272
+ case "top":
3273
+ return "mb-2";
3274
+ case "bottom":
3275
+ return "mt-2";
3276
+ case "left":
3277
+ return "mr-3";
3278
+ case "right":
3279
+ return "ml-3";
3280
+ default:
3281
+ return "";
3173
3282
  }
3174
- return "flex flex-row-reverse items-center";
3175
3283
  });
3176
- const contentClasses = computed(() => {
3177
- if (props.iconPosition === "top") {
3178
- return "flex flex-col " + sizeClasses.value.gap;
3284
+ const computedContentClasses = computed(() => {
3285
+ const isVertical = props.iconPosition === "top" || props.iconPosition === "bottom";
3286
+ if (isVertical) {
3287
+ return `flex flex-col ${sizeClasses.value.gap}`;
3179
3288
  }
3180
- return "flex flex-col flex-1 min-w-0 " + (props.iconPosition === "left" ? "ml-3" : "mr-3");
3289
+ return `flex flex-col flex-1 min-w-0 ${sizeClasses.value.gap}`;
3181
3290
  });
3182
3291
  return (_ctx, _cache) => {
3183
3292
  return openBlock(), createBlock(_sfc_main$z, {
3184
3293
  variant: cardVariant.value,
3185
3294
  padding: sizeClasses.value.padding,
3186
3295
  clickable: __props.clickable,
3187
- shadow: __props.variant === "glass" ? "none" : "sm",
3188
- border: __props.variant === "outline" ? "default" : "none",
3189
- rounded: "xl",
3296
+ shadow: effectiveShadow.value,
3297
+ border: effectiveBorder.value,
3298
+ rounded: __props.rounded,
3299
+ accent: __props.accent,
3190
3300
  "header-divider": false,
3191
- class: normalizeClass(__props.cardClass),
3301
+ class: normalizeClass([__props.cardClass, solidBgClasses.value, __props.variant === "solid" && "text-white"]),
3192
3302
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
3193
3303
  }, {
3194
3304
  default: withCtx(() => [
3195
- createElementVNode("div", {
3305
+ __props.loading ? (openBlock(), createElementBlock("div", {
3306
+ key: 0,
3196
3307
  class: normalizeClass(layoutClasses.value)
3197
3308
  }, [
3198
- __props.icon ? (openBlock(), createElementBlock("div", {
3309
+ __props.icon ? (openBlock(), createBlock(_sfc_main$L, {
3310
+ key: 0,
3311
+ class: normalizeClass([sizeClasses.value.icon, iconRoundedClasses.value, iconMarginClasses.value])
3312
+ }, null, 8, ["class"])) : createCommentVNode("", true),
3313
+ createElementVNode("div", {
3314
+ class: normalizeClass(computedContentClasses.value)
3315
+ }, [
3316
+ createVNode(_sfc_main$L, {
3317
+ class: normalizeClass(sizeClasses.value.value),
3318
+ width: "60%",
3319
+ height: "1.5em"
3320
+ }, null, 8, ["class"]),
3321
+ createVNode(_sfc_main$L, {
3322
+ class: normalizeClass(sizeClasses.value.label),
3323
+ width: "80%",
3324
+ height: "1em"
3325
+ }, null, 8, ["class"])
3326
+ ], 2)
3327
+ ], 2)) : (openBlock(), createElementBlock("div", {
3328
+ key: 1,
3329
+ class: normalizeClass(layoutClasses.value)
3330
+ }, [
3331
+ __props.icon || _ctx.$slots.icon ? (openBlock(), createElementBlock("div", {
3199
3332
  key: 0,
3200
3333
  class: normalizeClass([
3201
- "rounded-xl flex items-center justify-center flex-shrink-0",
3334
+ "flex items-center justify-center flex-shrink-0",
3202
3335
  sizeClasses.value.icon,
3336
+ iconRoundedClasses.value,
3203
3337
  iconBgClasses.value,
3204
- __props.iconPosition === "top" && "mb-2",
3205
- __props.iconClass
3338
+ iconMarginClasses.value,
3339
+ __props.iconWrapperClass
3206
3340
  ])
3207
3341
  }, [
3208
3342
  renderSlot(_ctx.$slots, "icon", {}, () => [
3209
3343
  createVNode(unref(Icon), {
3210
3344
  icon: __props.icon,
3211
- class: normalizeClass([sizeClasses.value.iconInner, iconColorClasses.value])
3345
+ class: normalizeClass([sizeClasses.value.iconInner, iconColorClasses.value, __props.iconClass])
3212
3346
  }, null, 8, ["icon", "class"])
3213
3347
  ])
3214
3348
  ], 2)) : createCommentVNode("", true),
3215
3349
  createElementVNode("div", {
3216
- class: normalizeClass(contentClasses.value)
3350
+ class: normalizeClass([computedContentClasses.value, __props.contentClass])
3217
3351
  }, [
3352
+ __props.labelFirst ? (openBlock(), createElementBlock("div", {
3353
+ key: 0,
3354
+ class: normalizeClass([sizeClasses.value.label, labelTextClasses.value, __props.labelClass])
3355
+ }, [
3356
+ renderSlot(_ctx.$slots, "label", {}, () => [
3357
+ createTextVNode(toDisplayString(__props.label), 1)
3358
+ ])
3359
+ ], 2)) : createCommentVNode("", true),
3218
3360
  createElementVNode("div", {
3219
3361
  class: normalizeClass([sizeClasses.value.value, valueTextClasses.value, __props.valueClass])
3220
3362
  }, [
3221
3363
  renderSlot(_ctx.$slots, "value", {}, () => [
3222
- createTextVNode(toDisplayString(__props.value), 1)
3364
+ __props.prefix ? (openBlock(), createElementBlock("span", _hoisted_1$1, toDisplayString(__props.prefix), 1)) : createCommentVNode("", true),
3365
+ createTextVNode(" " + toDisplayString(__props.value) + " ", 1),
3366
+ __props.suffix ? (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(__props.suffix), 1)) : createCommentVNode("", true)
3223
3367
  ])
3224
3368
  ], 2),
3225
- createElementVNode("div", {
3369
+ !__props.labelFirst ? (openBlock(), createElementBlock("div", {
3370
+ key: 1,
3226
3371
  class: normalizeClass([sizeClasses.value.label, labelTextClasses.value, __props.labelClass])
3227
3372
  }, [
3228
3373
  renderSlot(_ctx.$slots, "label", {}, () => [
3229
3374
  createTextVNode(toDisplayString(__props.label), 1)
3230
3375
  ])
3231
- ], 2),
3376
+ ], 2)) : createCommentVNode("", true),
3377
+ __props.description || _ctx.$slots.description ? (openBlock(), createElementBlock("div", {
3378
+ key: 2,
3379
+ class: normalizeClass([sizeClasses.value.description, descriptionTextClasses.value, __props.descriptionClass])
3380
+ }, [
3381
+ renderSlot(_ctx.$slots, "description", {}, () => [
3382
+ createTextVNode(toDisplayString(__props.description), 1)
3383
+ ])
3384
+ ], 2)) : createCommentVNode("", true),
3232
3385
  __props.change !== void 0 || __props.trend ? (openBlock(), createElementBlock("div", {
3233
- key: 0,
3386
+ key: 3,
3234
3387
  class: normalizeClass([
3235
3388
  "mt-1 font-medium inline-flex items-center gap-1",
3236
3389
  sizeClasses.value.change,
3237
- trendColorClasses.value
3390
+ trendColorClasses.value,
3391
+ __props.trendClass
3238
3392
  ])
3239
3393
  }, [
3240
- createVNode(unref(Icon), {
3394
+ !__props.hideTrendIcon ? (openBlock(), createBlock(unref(Icon), {
3395
+ key: 0,
3241
3396
  icon: trendIcon.value,
3242
3397
  class: "size-3.5"
3243
- }, null, 8, ["icon"]),
3244
- !__props.trendOnly && __props.change !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_1$1, toDisplayString(__props.change >= 0 ? "+" : "") + toDisplayString(__props.change) + "% ", 1)) : createCommentVNode("", true),
3245
- __props.changeLabel ? (openBlock(), createElementBlock("span", _hoisted_2$1, toDisplayString(__props.changeLabel), 1)) : createCommentVNode("", true)
3398
+ }, null, 8, ["icon"])) : createCommentVNode("", true),
3399
+ !__props.trendOnly && __props.change !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_3$1, toDisplayString(__props.change >= 0 ? "+" : "") + toDisplayString(__props.change) + "% ", 1)) : createCommentVNode("", true),
3400
+ __props.changeLabel ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.changeLabel), 1)) : createCommentVNode("", true)
3246
3401
  ], 2)) : createCommentVNode("", true)
3247
3402
  ], 2)
3248
- ], 2),
3403
+ ], 2)),
3249
3404
  renderSlot(_ctx.$slots, "extra")
3250
3405
  ]),
3251
3406
  _: 3
3252
- }, 8, ["variant", "padding", "clickable", "shadow", "border", "class"]);
3407
+ }, 8, ["variant", "padding", "clickable", "shadow", "border", "rounded", "accent", "class"]);
3253
3408
  };
3254
3409
  }
3255
3410
  });
@@ -3262,17 +3417,41 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
3262
3417
  variant: { default: "default" },
3263
3418
  size: { default: "md" },
3264
3419
  iconPosition: { default: "top" },
3265
- color: { default: "primary" }
3420
+ iconRounded: { default: "xl" },
3421
+ hideIconBg: { type: Boolean, default: false },
3422
+ color: { default: "primary" },
3423
+ labelFirst: { type: Boolean, default: false },
3424
+ compact: { type: Boolean, default: false },
3425
+ loading: { type: Boolean, default: false },
3426
+ shadow: { default: "sm" },
3427
+ rounded: { default: "xl" },
3428
+ border: { default: "none" },
3429
+ accent: { default: "none" },
3430
+ clickable: { type: Boolean, default: false },
3431
+ centered: { type: Boolean },
3432
+ invertTrendColors: { type: Boolean, default: false },
3433
+ hideTrendIcon: { type: Boolean, default: false },
3434
+ gridClass: {},
3435
+ cardClass: {},
3436
+ iconWrapperClass: {},
3437
+ iconClass: {},
3438
+ valueClass: {},
3439
+ labelClass: {}
3266
3440
  },
3441
+ emits: ["item-click"],
3267
3442
  setup(__props) {
3268
3443
  return (_ctx, _cache) => {
3269
3444
  var _a, _b, _c, _d;
3270
3445
  return openBlock(), createElementBlock("div", {
3271
3446
  class: normalizeClass(["grid", [
3447
+ __props.gridClass,
3272
3448
  // Gap classes
3449
+ __props.gap === "none" && "gap-0",
3450
+ __props.gap === "xs" && "gap-1 sm:gap-2",
3273
3451
  __props.gap === "sm" && "gap-2 sm:gap-3",
3274
3452
  __props.gap === "md" && "gap-3 sm:gap-4",
3275
3453
  __props.gap === "lg" && "gap-4 sm:gap-6",
3454
+ __props.gap === "xl" && "gap-6 sm:gap-8",
3276
3455
  // Column classes
3277
3456
  __props.cols === 1 && "grid-cols-1",
3278
3457
  __props.cols === 2 && "grid-cols-2",
@@ -3297,11 +3476,33 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
3297
3476
  change: stat.change,
3298
3477
  "change-label": stat.changeLabel,
3299
3478
  trend: stat.trend,
3479
+ description: stat.description,
3480
+ prefix: stat.prefix,
3481
+ suffix: stat.suffix,
3300
3482
  variant: __props.variant,
3301
3483
  size: __props.size,
3302
3484
  "icon-position": __props.iconPosition,
3303
- color: stat.color || __props.color
3304
- }, null, 8, ["label", "value", "icon", "change", "change-label", "trend", "variant", "size", "icon-position", "color"]);
3485
+ "icon-rounded": __props.iconRounded,
3486
+ "hide-icon-bg": __props.hideIconBg,
3487
+ color: stat.color || __props.color,
3488
+ "label-first": __props.labelFirst,
3489
+ compact: __props.compact,
3490
+ loading: __props.loading,
3491
+ shadow: __props.shadow,
3492
+ rounded: __props.rounded,
3493
+ border: __props.border,
3494
+ accent: __props.accent,
3495
+ clickable: __props.clickable,
3496
+ centered: __props.centered,
3497
+ "invert-trend-colors": __props.invertTrendColors,
3498
+ "hide-trend-icon": __props.hideTrendIcon,
3499
+ "card-class": __props.cardClass,
3500
+ "icon-wrapper-class": __props.iconWrapperClass,
3501
+ "icon-class": __props.iconClass,
3502
+ "value-class": __props.valueClass,
3503
+ "label-class": __props.labelClass,
3504
+ onClick: ($event) => _ctx.$emit("item-click", index, stat, $event)
3505
+ }, null, 8, ["label", "value", "icon", "change", "change-label", "trend", "description", "prefix", "suffix", "variant", "size", "icon-position", "icon-rounded", "hide-icon-bg", "color", "label-first", "compact", "loading", "shadow", "rounded", "border", "accent", "clickable", "centered", "invert-trend-colors", "hide-trend-icon", "card-class", "icon-wrapper-class", "icon-class", "value-class", "label-class", "onClick"]);
3305
3506
  }), 128)),
3306
3507
  renderSlot(_ctx.$slots, "default")
3307
3508
  ], 2);
@@ -3484,4 +3685,4 @@ export {
3484
3685
  _sfc_main$b as y,
3485
3686
  _sfc_main$a as z
3486
3687
  };
3487
- //# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js.map
3688
+ //# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-aPs8YGWB.js.map