cisse-vue-ui 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-CzpYHtc5.js → FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js} +260 -127
  2. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js.map +1 -0
  3. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-COkZbeGG.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs} +260 -127
  4. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map +1 -0
  5. package/dist/components/core/StatItem.stories.d.ts +25 -0
  6. package/dist/components/core/StatItem.vue.d.ts +81 -0
  7. package/dist/components/core/Stats.stories.d.ts +24 -0
  8. package/dist/components/core/Stats.vue.d.ts +41 -0
  9. package/dist/components/core/index.cjs +3 -1
  10. package/dist/components/core/index.cjs.map +1 -1
  11. package/dist/components/core/index.d.ts +6 -3
  12. package/dist/components/core/index.js +5 -3
  13. package/dist/components/index.cjs +3 -1
  14. package/dist/components/index.cjs.map +1 -1
  15. package/dist/components/index.js +5 -3
  16. package/dist/{index-BMSH4AOz.cjs → index-CYXOfUOG.cjs} +4 -2
  17. package/dist/{index-BMSH4AOz.cjs.map → index-CYXOfUOG.cjs.map} +1 -1
  18. package/dist/{index-0kwQORZJ.js → index-C_N7WRnM.js} +4 -2
  19. package/dist/{index-0kwQORZJ.js.map → index-C_N7WRnM.js.map} +1 -1
  20. package/dist/index.cjs +4 -2
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.js +6 -4
  23. package/dist/style.css +1 -1
  24. package/package.json +1 -1
  25. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-COkZbeGG.cjs.map +0 -1
  26. package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CzpYHtc5.js.map +0 -1
  27. package/dist/components/core/StatsCard.stories.d.ts +0 -15
  28. package/dist/components/core/StatsCard.vue.d.ts +0 -44
  29. package/dist/components/core/StatsGrid.stories.d.ts +0 -12
  30. package/dist/components/core/StatsGrid.vue.d.ts +0 -16
  31. /package/dist/components/core/{StatsCard.test.d.ts → StatItem.test.d.ts} +0 -0
  32. /package/dist/components/core/{StatsGrid.test.d.ts → Stats.test.d.ts} +0 -0
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
- const vue$1 = require("@iconify/vue");
4
- const ListSkeleton_vue_vue_type_script_setup_true_lang = require("./ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs");
5
3
  const index = require("./index-D1x3TH9k.cjs");
4
+ const ListSkeleton_vue_vue_type_script_setup_true_lang = require("./ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs");
6
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs");
7
6
  const usePagination = require("./usePagination-gvvh1zqA.cjs");
7
+ const vue$1 = require("@iconify/vue");
8
8
  const useDropdown = require("./useDropdown-HI7ABBLe.cjs");
9
9
  const useId = require("./useId-nxrBaIC9.cjs");
10
10
  const _hoisted_1$o = {
11
11
  key: 1,
12
12
  class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950"
13
13
  };
14
- const _hoisted_2$g = { class: "flex flex-col gap-0.5" };
14
+ const _hoisted_2$h = { class: "flex flex-col gap-0.5" };
15
15
  const _hoisted_3$a = {
16
16
  key: 1,
17
17
  class: "text-sm font-normal text-gray-600 dark:text-gray-400"
@@ -53,7 +53,7 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
53
53
  key: 1,
54
54
  class: vue.normalizeClass(["flex items-center justify-between border-b px-5 py-3", dividerClasses.value])
55
55
  }, [
56
- vue.createElementVNode("div", _hoisted_2$g, [
56
+ vue.createElementVNode("div", _hoisted_2$h, [
57
57
  __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", {
58
58
  key: 0,
59
59
  class: vue.normalizeClass(["text-md font-semibold", titleClasses.value])
@@ -78,7 +78,7 @@ const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
78
78
  }
79
79
  });
80
80
  const _hoisted_1$n = ["role", "tabindex", "onKeydown"];
81
- const _hoisted_2$f = ["src", "alt"];
81
+ const _hoisted_2$g = ["src", "alt"];
82
82
  const _hoisted_3$9 = ["src", "alt"];
83
83
  const _hoisted_4$6 = { class: "flex items-center gap-3" };
84
84
  const _hoisted_5$4 = { class: "flex flex-col gap-0.5" };
@@ -311,7 +311,7 @@ const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
311
311
  src: __props.image,
312
312
  alt: __props.imageAlt || "",
313
313
  class: vue.normalizeClass(["w-full h-full object-cover", __props.imageClass])
314
- }, null, 10, _hoisted_2$f)) : vue.createCommentVNode("", true)
314
+ }, null, 10, _hoisted_2$g)) : vue.createCommentVNode("", true)
315
315
  ]),
316
316
  _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent" }, null, -1))
317
317
  ], 2)) : vue.createCommentVNode("", true),
@@ -648,7 +648,7 @@ const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
648
648
  }
649
649
  });
650
650
  const _hoisted_1$k = ["colspan", "rowspan", "scope", "aria-sort"];
651
- const _hoisted_2$e = {
651
+ const _hoisted_2$f = {
652
652
  key: 0,
653
653
  d: "M7 14l5-5 5 5H7z"
654
654
  };
@@ -734,7 +734,7 @@ const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
734
734
  viewBox: "0 0 24 24",
735
735
  fill: "currentColor"
736
736
  }, [
737
- __props.sorted && __props.sortDirection === "asc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_2$e)) : __props.sorted && __props.sortDirection === "desc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_3$8)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
737
+ __props.sorted && __props.sortDirection === "asc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_2$f)) : __props.sorted && __props.sortDirection === "desc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_3$8)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
738
738
  _cache[2] || (_cache[2] = vue.createElementVNode("path", {
739
739
  d: "M7 14l5-5 5 5H7z",
740
740
  class: "opacity-40"
@@ -1013,7 +1013,7 @@ const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
1013
1013
  }
1014
1014
  });
1015
1015
  const _hoisted_1$h = ["disabled", "aria-expanded"];
1016
- const _hoisted_2$d = { class: "p-4" };
1016
+ const _hoisted_2$e = { class: "p-4" };
1017
1017
  const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
1018
1018
  ...{
1019
1019
  inheritAttrs: false
@@ -1099,7 +1099,7 @@ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
1099
1099
  class: "!p-0"
1100
1100
  }, {
1101
1101
  default: vue.withCtx(() => [
1102
- vue.createElementVNode("div", _hoisted_2$d, [
1102
+ vue.createElementVNode("div", _hoisted_2$e, [
1103
1103
  vue.renderSlot(_ctx.$slots, "expanded")
1104
1104
  ])
1105
1105
  ]),
@@ -1113,7 +1113,7 @@ const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
1113
1113
  }
1114
1114
  });
1115
1115
  const _hoisted_1$g = { class: "overflow-hidden" };
1116
- const _hoisted_2$c = {
1116
+ const _hoisted_2$d = {
1117
1117
  key: 1,
1118
1118
  class: "flex flex-col items-center justify-center py-12 text-center"
1119
1119
  };
@@ -1233,7 +1233,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
1233
1233
  key: 0,
1234
1234
  rows: __props.loadingRows,
1235
1235
  columns: visibleProperties.value.length
1236
- }, null, 8, ["rows", "columns"])) : __props.error ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$c, [
1236
+ }, null, 8, ["rows", "columns"])) : __props.error ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$d, [
1237
1237
  vue.renderSlot(_ctx.$slots, "error", {}, () => [
1238
1238
  vue.createElementVNode("div", _hoisted_3$7, [
1239
1239
  _cache[2] || (_cache[2] = vue.createElementVNode("svg", {
@@ -1359,7 +1359,7 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
1359
1359
  }
1360
1360
  });
1361
1361
  const _hoisted_1$f = { class: "space-y-3" };
1362
- const _hoisted_2$b = { class: "flex items-center gap-3 p-3" };
1362
+ const _hoisted_2$c = { class: "flex items-center gap-3 p-3" };
1363
1363
  const _hoisted_3$6 = { class: "text-sm text-gray-600 dark:text-gray-400" };
1364
1364
  const _hoisted_4$4 = {
1365
1365
  key: 0,
@@ -1440,7 +1440,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
1440
1440
  })) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
1441
1441
  __props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$A, { key: 0 }, {
1442
1442
  default: vue.withCtx(() => [
1443
- vue.createElementVNode("div", _hoisted_2$b, [
1443
+ vue.createElementVNode("div", _hoisted_2$c, [
1444
1444
  vue.createVNode(index._sfc_main, {
1445
1445
  "model-value": allSelected.value,
1446
1446
  indeterminate: someSelected.value,
@@ -1629,7 +1629,7 @@ const _hoisted_1$e = {
1629
1629
  key: 0,
1630
1630
  class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
1631
1631
  };
1632
- const _hoisted_2$a = { class: "relative" };
1632
+ const _hoisted_2$b = { class: "relative" };
1633
1633
  const _hoisted_3$5 = ["disabled", "placeholder"];
1634
1634
  const _hoisted_4$3 = ["disabled"];
1635
1635
  const _hoisted_5$1 = {
@@ -1746,7 +1746,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
1746
1746
  class: "autocomplete-container"
1747
1747
  }, [
1748
1748
  __props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_1$e, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
1749
- vue.createElementVNode("div", _hoisted_2$a, [
1749
+ vue.createElementVNode("div", _hoisted_2$b, [
1750
1750
  vue.createElementVNode("div", {
1751
1751
  ref_key: "inputWrapperRef",
1752
1752
  ref: inputWrapperRef,
@@ -1922,7 +1922,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
1922
1922
  }
1923
1923
  });
1924
1924
  const _hoisted_1$d = { class: "relative inline-block" };
1925
- const _hoisted_2$9 = ["src", "alt"];
1925
+ const _hoisted_2$a = ["src", "alt"];
1926
1926
  const _hoisted_3$4 = { key: 1 };
1927
1927
  const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
1928
1928
  __name: "Avatar",
@@ -2044,7 +2044,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
2044
2044
  alt: __props.alt || __props.name,
2045
2045
  class: "size-full object-cover",
2046
2046
  onError: _cache[0] || (_cache[0] = ($event) => imageError.value = true)
2047
- }, null, 40, _hoisted_2$9)) : initials.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$4, vue.toDisplayString(initials.value), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2047
+ }, null, 40, _hoisted_2$a)) : initials.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$4, vue.toDisplayString(initials.value), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2048
2048
  key: 2,
2049
2049
  icon: "lucide:user",
2050
2050
  class: "size-1/2"
@@ -2063,7 +2063,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
2063
2063
  }
2064
2064
  });
2065
2065
  const _hoisted_1$c = ["aria-selected", "disabled", "onClick"];
2066
- const _hoisted_2$8 = { class: "mt-4" };
2066
+ const _hoisted_2$9 = { class: "mt-4" };
2067
2067
  const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
2068
2068
  __name: "Tabs",
2069
2069
  props: {
@@ -2132,7 +2132,7 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
2132
2132
  }, vue.toDisplayString(tab.label), 11, _hoisted_1$c);
2133
2133
  }), 128))
2134
2134
  ], 2),
2135
- vue.createElementVNode("div", _hoisted_2$8, [
2135
+ vue.createElementVNode("div", _hoisted_2$9, [
2136
2136
  vue.renderSlot(_ctx.$slots, "default", { activeTab: activeTab.value })
2137
2137
  ])
2138
2138
  ]);
@@ -2356,7 +2356,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
2356
2356
  }
2357
2357
  });
2358
2358
  const _hoisted_1$9 = ["aria-describedby"];
2359
- const _hoisted_2$7 = ["id"];
2359
+ const _hoisted_2$8 = ["id"];
2360
2360
  const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
2361
2361
  __name: "Tooltip",
2362
2362
  props: {
@@ -2428,7 +2428,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
2428
2428
  id: vue.unref(tooltipId),
2429
2429
  class: vue.normalizeClass(positionClasses.value),
2430
2430
  role: "tooltip"
2431
- }, vue.toDisplayString(__props.content), 11, _hoisted_2$7)) : vue.createCommentVNode("", true)
2431
+ }, vue.toDisplayString(__props.content), 11, _hoisted_2$8)) : vue.createCommentVNode("", true)
2432
2432
  ]),
2433
2433
  _: 1
2434
2434
  })
@@ -2437,7 +2437,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
2437
2437
  }
2438
2438
  });
2439
2439
  const _hoisted_1$8 = ["id", "aria-expanded", "aria-controls"];
2440
- const _hoisted_2$6 = ["id", "aria-labelledby"];
2440
+ const _hoisted_2$7 = ["id", "aria-labelledby"];
2441
2441
  const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
2442
2442
  __name: "Popover",
2443
2443
  props: {
@@ -2522,7 +2522,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
2522
2522
  ])
2523
2523
  }, [
2524
2524
  vue.renderSlot(_ctx.$slots, "default", { close: vue.unref(close) })
2525
- ], 14, _hoisted_2$6)) : vue.createCommentVNode("", true)
2525
+ ], 14, _hoisted_2$7)) : vue.createCommentVNode("", true)
2526
2526
  ]),
2527
2527
  _: 3
2528
2528
  })
@@ -2535,7 +2535,7 @@ const _hoisted_1$7 = {
2535
2535
  key: 0,
2536
2536
  class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700"
2537
2537
  };
2538
- const _hoisted_2$5 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
2538
+ const _hoisted_2$6 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
2539
2539
  const _hoisted_3$3 = { class: "flex-1 overflow-y-auto p-4" };
2540
2540
  const _hoisted_4$2 = {
2541
2541
  key: 1,
@@ -2662,7 +2662,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
2662
2662
  }, [
2663
2663
  __props.title || __props.showClose || _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
2664
2664
  vue.renderSlot(_ctx.$slots, "header", {}, () => [
2665
- vue.createElementVNode("h2", _hoisted_2$5, vue.toDisplayString(__props.title), 1)
2665
+ vue.createElementVNode("h2", _hoisted_2$6, vue.toDisplayString(__props.title), 1)
2666
2666
  ]),
2667
2667
  __props.showClose ? (vue.openBlock(), vue.createElementBlock("button", {
2668
2668
  key: 0,
@@ -2691,7 +2691,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
2691
2691
  }
2692
2692
  });
2693
2693
  const _hoisted_1$6 = { "aria-label": "Breadcrumb" };
2694
- const _hoisted_2$4 = { class: "flex items-center flex-wrap gap-1 text-sm" };
2694
+ const _hoisted_2$5 = { class: "flex items-center flex-wrap gap-1 text-sm" };
2695
2695
  const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
2696
2696
  __name: "Breadcrumb",
2697
2697
  props: {
@@ -2704,7 +2704,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
2704
2704
  setup(__props) {
2705
2705
  return (_ctx, _cache) => {
2706
2706
  return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$6, [
2707
- vue.createElementVNode("ol", _hoisted_2$4, [
2707
+ vue.createElementVNode("ol", _hoisted_2$5, [
2708
2708
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
2709
2709
  return vue.openBlock(), vue.createElementBlock("li", {
2710
2710
  key: index2,
@@ -2780,7 +2780,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
2780
2780
  }
2781
2781
  });
2782
2782
  const _hoisted_1$4 = ["id", "disabled", "aria-expanded", "aria-controls"];
2783
- const _hoisted_2$3 = { class: "flex items-center gap-2 font-medium" };
2783
+ const _hoisted_2$4 = { class: "flex items-center gap-2 font-medium" };
2784
2784
  const _hoisted_3$2 = ["id", "aria-labelledby"];
2785
2785
  const _hoisted_4$1 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
2786
2786
  const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
@@ -2817,7 +2817,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
2817
2817
  "aria-controls": panelId.value,
2818
2818
  onClick: toggle
2819
2819
  }, [
2820
- vue.createElementVNode("span", _hoisted_2$3, [
2820
+ vue.createElementVNode("span", _hoisted_2$4, [
2821
2821
  __props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
2822
2822
  key: 0,
2823
2823
  icon: __props.icon,
@@ -2864,7 +2864,7 @@ const _hoisted_1$3 = {
2864
2864
  key: 0,
2865
2865
  class: "relative"
2866
2866
  };
2867
- const _hoisted_2$2 = { class: "flex items-start gap-4" };
2867
+ const _hoisted_2$3 = { class: "flex items-start gap-4" };
2868
2868
  const _hoisted_3$1 = { class: "flex-1 min-w-0 pt-0.5" };
2869
2869
  const _hoisted_4 = { class: "flex items-center justify-between gap-2" };
2870
2870
  const _hoisted_5 = { class: "text-sm font-medium text-gray-900 dark:text-white" };
@@ -2943,7 +2943,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
2943
2943
  key: 0,
2944
2944
  class: vue.normalizeClass(["absolute left-4 top-8 w-0.5 h-full -ml-px", getStatusClasses(item.status).line])
2945
2945
  }, null, 2)) : vue.createCommentVNode("", true),
2946
- vue.createElementVNode("div", _hoisted_2$2, [
2946
+ vue.createElementVNode("div", _hoisted_2$3, [
2947
2947
  vue.createElementVNode("div", {
2948
2948
  class: vue.normalizeClass(["relative z-10 flex items-center justify-center size-8 rounded-full shrink-0", getStatusClasses(item.status).dot])
2949
2949
  }, [
@@ -2996,7 +2996,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
2996
2996
  }
2997
2997
  });
2998
2998
  const _hoisted_1$2 = ["aria-label"];
2999
- const _hoisted_2$1 = {
2999
+ const _hoisted_2$2 = {
3000
3000
  key: 0,
3001
3001
  class: "text-sm font-medium"
3002
3002
  };
@@ -3035,129 +3035,258 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
3035
3035
  icon: vue.unref(isDark) ? __props.darkIcon : __props.lightIcon,
3036
3036
  class: vue.normalizeClass(sizeClasses[__props.size].icon)
3037
3037
  }, null, 8, ["icon", "class"]),
3038
- __props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$1, vue.toDisplayString(vue.unref(isDark) ? "Dark" : "Light"), 1)) : vue.createCommentVNode("", true)
3038
+ __props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$2, vue.toDisplayString(vue.unref(isDark) ? "Dark" : "Light"), 1)) : vue.createCommentVNode("", true)
3039
3039
  ], 10, _hoisted_1$2);
3040
3040
  };
3041
3041
  }
3042
3042
  });
3043
- const _hoisted_1$1 = {
3044
- key: 0,
3043
+ const _hoisted_1$1 = { key: 0 };
3044
+ const _hoisted_2$1 = {
3045
+ key: 1,
3045
3046
  class: "text-gray-400"
3046
3047
  };
3047
3048
  const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
3048
- __name: "StatsCard",
3049
+ __name: "StatItem",
3049
3050
  props: {
3050
3051
  label: {},
3051
3052
  value: {},
3052
3053
  icon: {},
3054
+ iconPosition: { default: "top" },
3053
3055
  change: {},
3054
3056
  changeLabel: {},
3057
+ trend: {},
3058
+ trendOnly: { type: Boolean, default: false },
3059
+ size: { default: "md" },
3055
3060
  variant: { default: "default" },
3056
- color: { default: "primary" }
3061
+ color: { default: "primary" },
3062
+ clickable: { type: Boolean, default: false },
3063
+ centered: { type: Boolean },
3064
+ cardClass: {},
3065
+ iconClass: {},
3066
+ valueClass: {},
3067
+ labelClass: {}
3057
3068
  },
3069
+ emits: ["click"],
3058
3070
  setup(__props) {
3071
+ const props = __props;
3072
+ const isCentered = vue.computed(() => {
3073
+ if (props.centered !== void 0) return props.centered;
3074
+ return props.iconPosition === "top";
3075
+ });
3076
+ const effectiveTrend = vue.computed(() => {
3077
+ if (props.trend) return props.trend;
3078
+ if (props.change === void 0) return void 0;
3079
+ if (props.change > 0) return "up";
3080
+ if (props.change < 0) return "down";
3081
+ return "neutral";
3082
+ });
3083
+ const sizeClasses = vue.computed(() => {
3084
+ const sizes = {
3085
+ sm: {
3086
+ padding: "sm",
3087
+ icon: "size-8",
3088
+ iconInner: "size-4",
3089
+ value: "text-xl font-bold",
3090
+ label: "text-xs",
3091
+ change: "text-xs",
3092
+ gap: "gap-1"
3093
+ },
3094
+ md: {
3095
+ padding: "md",
3096
+ icon: "size-10",
3097
+ iconInner: "size-5",
3098
+ value: "text-2xl sm:text-3xl font-bold",
3099
+ label: "text-xs sm:text-sm",
3100
+ change: "text-xs",
3101
+ gap: "gap-2"
3102
+ },
3103
+ lg: {
3104
+ padding: "lg",
3105
+ icon: "size-12",
3106
+ iconInner: "size-6",
3107
+ value: "text-3xl sm:text-4xl font-bold",
3108
+ label: "text-sm sm:text-base",
3109
+ change: "text-sm",
3110
+ gap: "gap-3"
3111
+ }
3112
+ };
3113
+ return sizes[props.size];
3114
+ });
3115
+ const iconBgClasses = vue.computed(() => {
3116
+ if (props.variant === "glass") return "bg-white/20";
3117
+ const colors = {
3118
+ primary: "bg-primary-100 dark:bg-primary-900/30",
3119
+ secondary: "bg-secondary-100 dark:bg-secondary-900/30",
3120
+ success: "bg-emerald-100 dark:bg-emerald-900/30",
3121
+ warning: "bg-amber-100 dark:bg-amber-900/30",
3122
+ danger: "bg-red-100 dark:bg-red-900/30",
3123
+ info: "bg-blue-100 dark:bg-blue-900/30"
3124
+ };
3125
+ return colors[props.color];
3126
+ });
3127
+ const iconColorClasses = vue.computed(() => {
3128
+ if (props.variant === "glass") return "text-white";
3129
+ const colors = {
3130
+ primary: "text-primary-600 dark:text-primary-400",
3131
+ secondary: "text-secondary-600 dark:text-secondary-400",
3132
+ success: "text-emerald-600 dark:text-emerald-400",
3133
+ warning: "text-amber-600 dark:text-amber-400",
3134
+ danger: "text-red-600 dark:text-red-400",
3135
+ info: "text-blue-600 dark:text-blue-400"
3136
+ };
3137
+ return colors[props.color];
3138
+ });
3139
+ const valueTextClasses = vue.computed(() => {
3140
+ if (props.variant === "glass") return "text-white";
3141
+ return "text-gray-900 dark:text-white";
3142
+ });
3143
+ const labelTextClasses = vue.computed(() => {
3144
+ if (props.variant === "glass") return "text-white/80";
3145
+ return "text-gray-500 dark:text-gray-400";
3146
+ });
3147
+ const trendColorClasses = vue.computed(() => {
3148
+ if (!effectiveTrend.value || effectiveTrend.value === "neutral") {
3149
+ return "text-gray-500";
3150
+ }
3151
+ return effectiveTrend.value === "up" ? "text-emerald-500" : "text-red-500";
3152
+ });
3153
+ const trendIcon = vue.computed(() => {
3154
+ if (!effectiveTrend.value || effectiveTrend.value === "neutral") {
3155
+ return "heroicons:minus";
3156
+ }
3157
+ return effectiveTrend.value === "up" ? "heroicons:arrow-trending-up" : "heroicons:arrow-trending-down";
3158
+ });
3159
+ const cardVariant = vue.computed(() => {
3160
+ const map = {
3161
+ default: "default",
3162
+ glass: "glass",
3163
+ outline: "outline",
3164
+ flat: "flat"
3165
+ };
3166
+ return map[props.variant];
3167
+ });
3168
+ const layoutClasses = vue.computed(() => {
3169
+ if (props.iconPosition === "top") {
3170
+ return isCentered.value ? "flex flex-col items-center text-center" : "flex flex-col";
3171
+ }
3172
+ if (props.iconPosition === "left") {
3173
+ return "flex flex-row items-center";
3174
+ }
3175
+ return "flex flex-row-reverse items-center";
3176
+ });
3177
+ const contentClasses = vue.computed(() => {
3178
+ if (props.iconPosition === "top") {
3179
+ return "flex flex-col " + sizeClasses.value.gap;
3180
+ }
3181
+ return "flex flex-col flex-1 min-w-0 " + (props.iconPosition === "left" ? "ml-3" : "mr-3");
3182
+ });
3059
3183
  return (_ctx, _cache) => {
3060
- return vue.openBlock(), vue.createElementBlock("div", {
3061
- class: vue.normalizeClass([
3062
- "rounded-2xl p-4 text-center transition-all",
3063
- __props.variant === "default" && "bg-white dark:bg-slate-800 border border-gray-100 dark:border-slate-700 shadow-sm",
3064
- __props.variant === "glass" && "bg-white/15 backdrop-blur-sm border border-white/20",
3065
- __props.variant === "outline" && "border-2 border-gray-200 dark:border-slate-600",
3066
- __props.variant === "solid" && __props.color === "primary" && "bg-primary-500 text-white",
3067
- __props.variant === "solid" && __props.color === "success" && "bg-emerald-500 text-white",
3068
- __props.variant === "solid" && __props.color === "warning" && "bg-amber-500 text-white",
3069
- __props.variant === "solid" && __props.color === "danger" && "bg-red-500 text-white",
3070
- __props.variant === "solid" && __props.color === "info" && "bg-blue-500 text-white"
3071
- ])
3072
- }, [
3073
- __props.icon ? (vue.openBlock(), vue.createElementBlock("div", {
3074
- key: 0,
3075
- class: vue.normalizeClass([
3076
- "size-10 mx-auto mb-2 rounded-xl flex items-center justify-center",
3077
- __props.variant === "glass" && "bg-white/20",
3078
- __props.variant === "solid" && "bg-white/20",
3079
- __props.variant === "default" && __props.color === "primary" && "bg-primary-100 dark:bg-primary-900/30",
3080
- __props.variant === "default" && __props.color === "success" && "bg-emerald-100 dark:bg-emerald-900/30",
3081
- __props.variant === "default" && __props.color === "warning" && "bg-amber-100 dark:bg-amber-900/30",
3082
- __props.variant === "default" && __props.color === "danger" && "bg-red-100 dark:bg-red-900/30",
3083
- __props.variant === "default" && __props.color === "info" && "bg-blue-100 dark:bg-blue-900/30",
3084
- __props.variant === "outline" && "bg-gray-100 dark:bg-slate-700"
3085
- ])
3086
- }, [
3087
- vue.createVNode(vue.unref(vue$1.Icon), {
3088
- icon: __props.icon,
3089
- class: vue.normalizeClass([
3090
- "size-5",
3091
- (__props.variant === "glass" || __props.variant === "solid") && "text-white",
3092
- __props.variant === "default" && __props.color === "primary" && "text-primary-600 dark:text-primary-400",
3093
- __props.variant === "default" && __props.color === "success" && "text-emerald-600 dark:text-emerald-400",
3094
- __props.variant === "default" && __props.color === "warning" && "text-amber-600 dark:text-amber-400",
3095
- __props.variant === "default" && __props.color === "danger" && "text-red-600 dark:text-red-400",
3096
- __props.variant === "default" && __props.color === "info" && "text-blue-600 dark:text-blue-400",
3097
- __props.variant === "outline" && "text-gray-600 dark:text-gray-400"
3098
- ])
3099
- }, null, 8, ["icon", "class"])
3100
- ], 2)) : vue.createCommentVNode("", true),
3101
- vue.createElementVNode("div", {
3102
- class: vue.normalizeClass([
3103
- "text-2xl sm:text-3xl font-bold",
3104
- (__props.variant === "glass" || __props.variant === "solid") && "text-white",
3105
- (__props.variant === "default" || __props.variant === "outline") && "text-gray-900 dark:text-white"
3106
- ])
3107
- }, [
3108
- vue.renderSlot(_ctx.$slots, "value", {}, () => [
3109
- vue.createTextVNode(vue.toDisplayString(__props.value), 1)
3110
- ])
3111
- ], 2),
3112
- vue.createElementVNode("div", {
3113
- class: vue.normalizeClass([
3114
- "text-xs sm:text-sm",
3115
- __props.variant === "glass" && "text-white/80",
3116
- __props.variant === "solid" && "text-white/90",
3117
- (__props.variant === "default" || __props.variant === "outline") && "text-gray-500 dark:text-gray-400"
3118
- ])
3119
- }, [
3120
- vue.renderSlot(_ctx.$slots, "label", {}, () => [
3121
- vue.createTextVNode(vue.toDisplayString(__props.label), 1)
3122
- ])
3123
- ], 2),
3124
- __props.change !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", {
3125
- key: 1,
3126
- class: vue.normalizeClass([
3127
- "mt-2 text-xs font-medium inline-flex items-center gap-1",
3128
- __props.change >= 0 ? "text-emerald-500" : "text-red-500"
3129
- ])
3130
- }, [
3131
- vue.createVNode(vue.unref(vue$1.Icon), {
3132
- icon: __props.change >= 0 ? "heroicons:arrow-trending-up" : "heroicons:arrow-trending-down",
3133
- class: "size-3.5"
3134
- }, null, 8, ["icon"]),
3135
- vue.createElementVNode("span", null, vue.toDisplayString(__props.change >= 0 ? "+" : "") + vue.toDisplayString(__props.change) + "%", 1),
3136
- __props.changeLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$1, vue.toDisplayString(__props.changeLabel), 1)) : vue.createCommentVNode("", true)
3137
- ], 2)) : vue.createCommentVNode("", true)
3138
- ], 2);
3184
+ return vue.openBlock(), vue.createBlock(_sfc_main$z, {
3185
+ variant: cardVariant.value,
3186
+ padding: sizeClasses.value.padding,
3187
+ clickable: __props.clickable,
3188
+ shadow: __props.variant === "glass" ? "none" : "sm",
3189
+ border: __props.variant === "outline" ? "default" : "none",
3190
+ rounded: "xl",
3191
+ "header-divider": false,
3192
+ class: vue.normalizeClass(__props.cardClass),
3193
+ onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$emit("click", $event))
3194
+ }, {
3195
+ default: vue.withCtx(() => [
3196
+ vue.createElementVNode("div", {
3197
+ class: vue.normalizeClass(layoutClasses.value)
3198
+ }, [
3199
+ __props.icon ? (vue.openBlock(), vue.createElementBlock("div", {
3200
+ key: 0,
3201
+ class: vue.normalizeClass([
3202
+ "rounded-xl flex items-center justify-center flex-shrink-0",
3203
+ sizeClasses.value.icon,
3204
+ iconBgClasses.value,
3205
+ __props.iconPosition === "top" && "mb-2",
3206
+ __props.iconClass
3207
+ ])
3208
+ }, [
3209
+ vue.renderSlot(_ctx.$slots, "icon", {}, () => [
3210
+ vue.createVNode(vue.unref(vue$1.Icon), {
3211
+ icon: __props.icon,
3212
+ class: vue.normalizeClass([sizeClasses.value.iconInner, iconColorClasses.value])
3213
+ }, null, 8, ["icon", "class"])
3214
+ ])
3215
+ ], 2)) : vue.createCommentVNode("", true),
3216
+ vue.createElementVNode("div", {
3217
+ class: vue.normalizeClass(contentClasses.value)
3218
+ }, [
3219
+ vue.createElementVNode("div", {
3220
+ class: vue.normalizeClass([sizeClasses.value.value, valueTextClasses.value, __props.valueClass])
3221
+ }, [
3222
+ vue.renderSlot(_ctx.$slots, "value", {}, () => [
3223
+ vue.createTextVNode(vue.toDisplayString(__props.value), 1)
3224
+ ])
3225
+ ], 2),
3226
+ vue.createElementVNode("div", {
3227
+ class: vue.normalizeClass([sizeClasses.value.label, labelTextClasses.value, __props.labelClass])
3228
+ }, [
3229
+ vue.renderSlot(_ctx.$slots, "label", {}, () => [
3230
+ vue.createTextVNode(vue.toDisplayString(__props.label), 1)
3231
+ ])
3232
+ ], 2),
3233
+ __props.change !== void 0 || __props.trend ? (vue.openBlock(), vue.createElementBlock("div", {
3234
+ key: 0,
3235
+ class: vue.normalizeClass([
3236
+ "mt-1 font-medium inline-flex items-center gap-1",
3237
+ sizeClasses.value.change,
3238
+ trendColorClasses.value
3239
+ ])
3240
+ }, [
3241
+ vue.createVNode(vue.unref(vue$1.Icon), {
3242
+ icon: trendIcon.value,
3243
+ class: "size-3.5"
3244
+ }, null, 8, ["icon"]),
3245
+ !__props.trendOnly && __props.change !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$1, vue.toDisplayString(__props.change >= 0 ? "+" : "") + vue.toDisplayString(__props.change) + "% ", 1)) : vue.createCommentVNode("", true),
3246
+ __props.changeLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$1, vue.toDisplayString(__props.changeLabel), 1)) : vue.createCommentVNode("", true)
3247
+ ], 2)) : vue.createCommentVNode("", true)
3248
+ ], 2)
3249
+ ], 2),
3250
+ vue.renderSlot(_ctx.$slots, "extra")
3251
+ ]),
3252
+ _: 3
3253
+ }, 8, ["variant", "padding", "clickable", "shadow", "border", "class"]);
3139
3254
  };
3140
3255
  }
3141
3256
  });
3142
3257
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
3143
- __name: "StatsGrid",
3258
+ __name: "Stats",
3144
3259
  props: {
3145
3260
  stats: {},
3146
3261
  cols: {},
3262
+ gap: { default: "md" },
3147
3263
  variant: { default: "default" },
3264
+ size: { default: "md" },
3265
+ iconPosition: { default: "top" },
3148
3266
  color: { default: "primary" }
3149
3267
  },
3150
3268
  setup(__props) {
3151
3269
  return (_ctx, _cache) => {
3270
+ var _a, _b, _c, _d;
3152
3271
  return vue.openBlock(), vue.createElementBlock("div", {
3153
- class: vue.normalizeClass(["grid gap-3 sm:gap-4", [
3272
+ class: vue.normalizeClass(["grid", [
3273
+ // Gap classes
3274
+ __props.gap === "sm" && "gap-2 sm:gap-3",
3275
+ __props.gap === "md" && "gap-3 sm:gap-4",
3276
+ __props.gap === "lg" && "gap-4 sm:gap-6",
3277
+ // Column classes
3278
+ __props.cols === 1 && "grid-cols-1",
3154
3279
  __props.cols === 2 && "grid-cols-2",
3155
3280
  __props.cols === 3 && "grid-cols-3",
3156
3281
  __props.cols === 4 && "grid-cols-2 sm:grid-cols-4",
3157
- !__props.cols && __props.stats.length === 2 && "grid-cols-2",
3158
- !__props.cols && __props.stats.length === 3 && "grid-cols-3",
3159
- !__props.cols && __props.stats.length === 4 && "grid-cols-2 sm:grid-cols-4",
3160
- !__props.cols && __props.stats.length > 4 && "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"
3282
+ __props.cols === 5 && "grid-cols-2 sm:grid-cols-3 lg:grid-cols-5",
3283
+ __props.cols === 6 && "grid-cols-2 sm:grid-cols-3 lg:grid-cols-6",
3284
+ // Auto columns based on stats length
3285
+ !__props.cols && ((_a = __props.stats) == null ? void 0 : _a.length) === 1 && "grid-cols-1",
3286
+ !__props.cols && ((_b = __props.stats) == null ? void 0 : _b.length) === 2 && "grid-cols-2",
3287
+ !__props.cols && ((_c = __props.stats) == null ? void 0 : _c.length) === 3 && "grid-cols-3",
3288
+ !__props.cols && ((_d = __props.stats) == null ? void 0 : _d.length) === 4 && "grid-cols-2 sm:grid-cols-4",
3289
+ !__props.cols && __props.stats && __props.stats.length > 4 && "grid-cols-2 sm:grid-cols-3 lg:grid-cols-4"
3161
3290
  ]])
3162
3291
  }, [
3163
3292
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.stats, (stat, index2) => {
@@ -3168,10 +3297,14 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
3168
3297
  icon: stat.icon,
3169
3298
  change: stat.change,
3170
3299
  "change-label": stat.changeLabel,
3300
+ trend: stat.trend,
3171
3301
  variant: __props.variant,
3172
- color: __props.color
3173
- }, null, 8, ["label", "value", "icon", "change", "change-label", "variant", "color"]);
3174
- }), 128))
3302
+ size: __props.size,
3303
+ "icon-position": __props.iconPosition,
3304
+ color: stat.color || __props.color
3305
+ }, null, 8, ["label", "value", "icon", "change", "change-label", "trend", "variant", "size", "icon-position", "color"]);
3306
+ }), 128)),
3307
+ vue.renderSlot(_ctx.$slots, "default")
3175
3308
  ], 2);
3176
3309
  };
3177
3310
  }
@@ -3350,4 +3483,4 @@ exports._sfc_main$6 = _sfc_main$u;
3350
3483
  exports._sfc_main$7 = _sfc_main$t;
3351
3484
  exports._sfc_main$8 = _sfc_main$s;
3352
3485
  exports._sfc_main$9 = _sfc_main$r;
3353
- //# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-COkZbeGG.cjs.map
3486
+ //# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map