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