cisse-vue-ui 0.8.4 → 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.
- package/README.md +666 -4
- package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-B190Yija.js → CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js} +2 -2
- package/dist/{CheckboxGroup.vue_vue_type_script_setup_true_lang-B190Yija.js.map → CheckboxGroup.vue_vue_type_script_setup_true_lang-ZP02bMgY.js.map} +1 -1
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js} +37 -184
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-C5KHLMvx.js.map +1 -0
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-BGUoa5fT.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs} +33 -180
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-CLfy0-Wb.cjs.map +1 -0
- package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-BmJHgkBs.js → FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js} +1568 -384
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-CJnvcF8Z.js.map +1 -0
- package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-DYxh-wFx.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs} +1564 -380
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map +1 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js +298 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BHopJ9RG.js.map +1 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs +297 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs.map +1 -0
- package/dist/components/core/Breadcrumb.stories.d.ts +5 -0
- package/dist/components/core/CardWrapper.stories.d.ts +32 -0
- package/dist/components/core/CardWrapper.vue.d.ts +129 -0
- package/dist/components/core/CollapsibleCard.vue.d.ts +1 -1
- package/dist/components/core/DataTable.stories.d.ts +38 -0
- package/dist/components/core/Dropdown.vue.d.ts +1 -1
- package/dist/components/core/Popover.vue.d.ts +2 -2
- package/dist/components/core/StatItem.stories.d.ts +25 -0
- package/dist/components/core/StatItem.test.d.ts +1 -0
- package/dist/components/core/StatItem.vue.d.ts +81 -0
- package/dist/components/core/Stats.stories.d.ts +24 -0
- package/dist/components/core/Stats.test.d.ts +1 -0
- package/dist/components/core/Stats.vue.d.ts +41 -0
- package/dist/components/core/Tooltip.stories.d.ts +3 -0
- package/dist/components/core/index.cjs +41 -22
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.d.ts +10 -4
- package/dist/components/core/index.js +41 -22
- package/dist/components/core/table/DataTable.test.d.ts +1 -0
- package/dist/components/core/{TableComponent.vue.d.ts → table/DataTable.vue.d.ts} +60 -7
- package/dist/components/core/table/Table.stories.d.ts +27 -0
- package/dist/components/core/table/atoms/Caption.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Caption.vue.d.ts +26 -0
- package/dist/components/core/table/atoms/Col.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Col.vue.d.ts +8 -0
- package/dist/components/core/table/atoms/Colgroup.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Colgroup.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Table.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Table.vue.d.ts +46 -0
- package/dist/components/core/table/atoms/Tbody.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tbody.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Td.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Td.vue.d.ts +43 -0
- package/dist/components/core/table/atoms/Tfoot.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tfoot.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Th.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Th.vue.d.ts +64 -0
- package/dist/components/core/table/atoms/Thead.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Thead.vue.d.ts +17 -0
- package/dist/components/core/table/atoms/Tr.test.d.ts +1 -0
- package/dist/components/core/table/atoms/Tr.vue.d.ts +35 -0
- package/dist/components/core/table/atoms/index.d.ts +10 -0
- package/dist/components/core/table/index.d.ts +3 -0
- package/dist/components/core/table/molecules/ExpandableRow.test.d.ts +1 -0
- package/dist/components/core/table/molecules/ExpandableRow.vue.d.ts +47 -0
- package/dist/components/core/table/molecules/TableFooter.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableFooter.vue.d.ts +21 -0
- package/dist/components/core/table/molecules/TableHeader.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableHeader.vue.d.ts +49 -0
- package/dist/components/core/table/molecules/TableRow.test.d.ts +1 -0
- package/dist/components/core/table/molecules/TableRow.vue.d.ts +59 -0
- package/dist/components/core/table/molecules/index.d.ts +4 -0
- package/dist/components/feedback/Progress.vue.d.ts +1 -1
- package/dist/components/feedback/TableSkeleton.vue.d.ts +1 -1
- package/dist/components/feedback/index.cjs +14 -14
- package/dist/components/feedback/index.js +14 -14
- package/dist/components/form/Combobox.vue.d.ts +1 -1
- package/dist/components/form/DatePicker.vue.d.ts +1 -1
- package/dist/components/form/FormSection.vue.d.ts +1 -1
- package/dist/components/form/IconPicker.stories.d.ts +19 -0
- package/dist/components/form/IconPicker.test.d.ts +1 -0
- package/dist/components/form/InputWrapper.stories.d.ts +0 -5
- package/dist/components/form/Rating.vue.d.ts +1 -1
- package/dist/components/form/SearchInput.vue.d.ts +1 -1
- package/dist/components/form/index.js +2 -2
- package/dist/components/index.cjs +55 -36
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +67 -48
- package/dist/composables/index.cjs +15 -8
- package/dist/composables/index.cjs.map +1 -1
- package/dist/composables/index.d.ts +7 -0
- package/dist/composables/index.js +12 -5
- package/dist/composables/useColumnResize.d.ts +38 -0
- package/dist/composables/useColumnResize.test.d.ts +1 -0
- package/dist/composables/useColumnVisibility.d.ts +44 -0
- package/dist/composables/useColumnVisibility.test.d.ts +1 -0
- package/dist/composables/useEditableCell.d.ts +51 -0
- package/dist/composables/useEditableCell.test.d.ts +1 -0
- package/dist/composables/usePagination.d.ts +44 -0
- package/dist/composables/usePagination.test.d.ts +1 -0
- package/dist/composables/usePinnedRows.d.ts +41 -0
- package/dist/composables/usePinnedRows.test.d.ts +1 -0
- package/dist/composables/useTableKeyboardNavigation.d.ts +52 -0
- package/dist/composables/useTableKeyboardNavigation.test.d.ts +1 -0
- package/dist/composables/useVirtualScroll.d.ts +32 -0
- package/dist/composables/useVirtualScroll.test.d.ts +1 -0
- package/dist/{index-SNefWfX0.js → index-BaWpldIJ.js} +3 -3
- package/dist/{index-SNefWfX0.js.map → index-BaWpldIJ.js.map} +1 -1
- package/dist/{index-LFQFhClN.cjs → index-CYXOfUOG.cjs} +56 -37
- package/dist/{index-LFQFhClN.cjs.map → index-CYXOfUOG.cjs.map} +1 -1
- package/dist/index-C_N7WRnM.js +116 -0
- package/dist/index-C_N7WRnM.js.map +1 -0
- package/dist/index.cjs +71 -45
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +81 -55
- package/dist/style.css +1 -1
- package/dist/types/components.d.ts +1 -1
- package/dist/types/property.d.ts +8 -0
- package/dist/usePagination-BGwbICFC.js +135 -0
- package/dist/usePagination-BGwbICFC.js.map +1 -0
- package/dist/usePagination-gvvh1zqA.cjs +134 -0
- package/dist/usePagination-gvvh1zqA.cjs.map +1 -0
- package/dist/useVirtualScroll-BivP86fA.cjs +869 -0
- package/dist/useVirtualScroll-BivP86fA.cjs.map +1 -0
- package/dist/useVirtualScroll-YeZru2Eo.js +870 -0
- package/dist/useVirtualScroll-YeZru2Eo.js.map +1 -0
- package/package.json +1 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-BGUoa5fT.cjs.map +0 -1
- package/dist/ConfirmDialog.vue_vue_type_script_setup_true_lang-DWs2V7xX.js.map +0 -1
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-BmJHgkBs.js.map +0 -1
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-DYxh-wFx.cjs.map +0 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js +0 -150
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js.map +0 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs +0 -149
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +0 -1
- package/dist/components/core/StatsCard.stories.d.ts +0 -15
- package/dist/components/core/StatsCard.vue.d.ts +0 -44
- package/dist/components/core/StatsGrid.stories.d.ts +0 -12
- package/dist/components/core/StatsGrid.vue.d.ts +0 -16
- package/dist/components/core/TableComponent.stories.d.ts +0 -16
- package/dist/index-CyL_6V7D.js +0 -97
- package/dist/index-CyL_6V7D.js.map +0 -1
- package/dist/useDarkMode-Cl5QWTlC.js +0 -53
- package/dist/useDarkMode-Cl5QWTlC.js.map +0 -1
- package/dist/useDarkMode-DLZcJEUQ.cjs +0 -52
- package/dist/useDarkMode-DLZcJEUQ.cjs.map +0 -1
- package/dist/useToast-Bk60GArg.cjs +0 -176
- package/dist/useToast-Bk60GArg.cjs.map +0 -1
- package/dist/useToast-ina5g3mj.js +0 -177
- package/dist/useToast-ina5g3mj.js.map +0 -1
- /package/dist/components/core/{StatsCard.test.d.ts → AccordionItem.test.d.ts} +0 -0
- /package/dist/components/core/{StatsGrid.test.d.ts → CardWrapper.test.d.ts} +0 -0
|
@@ -1,118 +1,1130 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
const vue = require("vue");
|
|
3
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-
|
|
4
|
+
const ListSkeleton_vue_vue_type_script_setup_true_lang = require("./ListSkeleton.vue_vue_type_script_setup_true_lang-Bo3HqgX0.cjs");
|
|
5
5
|
const BadgeType_vue_vue_type_script_setup_true_lang = require("./BadgeType.vue_vue_type_script_setup_true_lang-zs0NXN4g.cjs");
|
|
6
|
+
const usePagination = require("./usePagination-gvvh1zqA.cjs");
|
|
6
7
|
const vue$1 = require("@iconify/vue");
|
|
7
8
|
const useDropdown = require("./useDropdown-HI7ABBLe.cjs");
|
|
8
9
|
const useId = require("./useId-nxrBaIC9.cjs");
|
|
9
|
-
const
|
|
10
|
-
const _hoisted_1$h = {
|
|
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$
|
|
15
|
-
const _hoisted_3$
|
|
14
|
+
const _hoisted_2$h = { class: "flex flex-col gap-0.5" };
|
|
15
|
+
const _hoisted_3$a = {
|
|
16
16
|
key: 1,
|
|
17
17
|
class: "text-sm font-normal text-gray-600 dark:text-gray-400"
|
|
18
18
|
};
|
|
19
|
-
const _hoisted_4$
|
|
20
|
-
const _sfc_main$
|
|
19
|
+
const _hoisted_4$7 = { class: "flex gap-2" };
|
|
20
|
+
const _sfc_main$A = /* @__PURE__ */ vue.defineComponent({
|
|
21
21
|
__name: "CardComponent",
|
|
22
22
|
props: {
|
|
23
|
-
title: {},
|
|
24
|
-
description: {},
|
|
25
|
-
titleClass: {},
|
|
26
|
-
dividerClass: {},
|
|
27
|
-
loading: { type: Boolean, default: false },
|
|
28
|
-
loadingLines: { default: 3 },
|
|
29
|
-
loadingAvatar: { type: Boolean, default: false },
|
|
30
|
-
loadingActions: { type: Boolean, default: false }
|
|
23
|
+
title: {},
|
|
24
|
+
description: {},
|
|
25
|
+
titleClass: {},
|
|
26
|
+
dividerClass: {},
|
|
27
|
+
loading: { type: Boolean, default: false },
|
|
28
|
+
loadingLines: { default: 3 },
|
|
29
|
+
loadingAvatar: { type: Boolean, default: false },
|
|
30
|
+
loadingActions: { type: Boolean, default: false }
|
|
31
|
+
},
|
|
32
|
+
setup(__props) {
|
|
33
|
+
const props = __props;
|
|
34
|
+
const titleClasses = vue.computed(
|
|
35
|
+
() => props.titleClass || "text-gray-800 dark:text-gray-200"
|
|
36
|
+
);
|
|
37
|
+
const dividerClasses = vue.computed(
|
|
38
|
+
() => props.dividerClass || "border-gray-200 dark:border-gray-700"
|
|
39
|
+
);
|
|
40
|
+
return (_ctx, _cache) => {
|
|
41
|
+
return __props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$2, {
|
|
42
|
+
key: 0,
|
|
43
|
+
lines: __props.loadingLines,
|
|
44
|
+
"show-avatar": __props.loadingAvatar,
|
|
45
|
+
"show-actions": __props.loadingActions
|
|
46
|
+
}, null, 8, ["lines", "show-avatar", "show-actions"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$o, [
|
|
47
|
+
_ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
48
|
+
key: 0,
|
|
49
|
+
class: vue.normalizeClass(["border-b", dividerClasses.value])
|
|
50
|
+
}, [
|
|
51
|
+
vue.renderSlot(_ctx.$slots, "header")
|
|
52
|
+
], 2)) : __props.title || __props.description || _ctx.$slots.title || _ctx.$slots.description || _ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
53
|
+
key: 1,
|
|
54
|
+
class: vue.normalizeClass(["flex items-center justify-between border-b px-5 py-3", dividerClasses.value])
|
|
55
|
+
}, [
|
|
56
|
+
vue.createElementVNode("div", _hoisted_2$h, [
|
|
57
|
+
__props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
58
|
+
key: 0,
|
|
59
|
+
class: vue.normalizeClass(["text-md font-semibold", titleClasses.value])
|
|
60
|
+
}, [
|
|
61
|
+
vue.renderSlot(_ctx.$slots, "title", {}, () => [
|
|
62
|
+
vue.createTextVNode(vue.toDisplayString(__props.title), 1)
|
|
63
|
+
])
|
|
64
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
65
|
+
__props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$a, [
|
|
66
|
+
vue.renderSlot(_ctx.$slots, "description", {}, () => [
|
|
67
|
+
vue.createTextVNode(vue.toDisplayString(__props.description), 1)
|
|
68
|
+
])
|
|
69
|
+
])) : vue.createCommentVNode("", true)
|
|
70
|
+
]),
|
|
71
|
+
vue.createElementVNode("div", _hoisted_4$7, [
|
|
72
|
+
vue.renderSlot(_ctx.$slots, "actions")
|
|
73
|
+
])
|
|
74
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
75
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
76
|
+
]));
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
const _hoisted_1$n = ["role", "tabindex", "onKeydown"];
|
|
81
|
+
const _hoisted_2$g = ["src", "alt"];
|
|
82
|
+
const _hoisted_3$9 = ["src", "alt"];
|
|
83
|
+
const _hoisted_4$6 = { class: "flex items-center gap-3" };
|
|
84
|
+
const _hoisted_5$4 = { class: "flex flex-col gap-0.5" };
|
|
85
|
+
const _hoisted_6$3 = ["src", "alt"];
|
|
86
|
+
const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
|
|
87
|
+
__name: "CardWrapper",
|
|
88
|
+
props: {
|
|
89
|
+
title: {},
|
|
90
|
+
description: {},
|
|
91
|
+
icon: {},
|
|
92
|
+
shadow: { default: "md" },
|
|
93
|
+
rounded: { default: "lg" },
|
|
94
|
+
padding: { default: "none" },
|
|
95
|
+
headerPadding: { default: "md" },
|
|
96
|
+
border: { default: "none" },
|
|
97
|
+
variant: { default: "default" },
|
|
98
|
+
accent: { default: "none" },
|
|
99
|
+
headerDivider: { type: Boolean, default: true },
|
|
100
|
+
footerDivider: { type: Boolean, default: true },
|
|
101
|
+
clickable: { type: Boolean, default: false },
|
|
102
|
+
selected: { type: Boolean, default: false },
|
|
103
|
+
disabled: { type: Boolean, default: false },
|
|
104
|
+
image: {},
|
|
105
|
+
imageAlt: {},
|
|
106
|
+
imagePosition: { default: "top" },
|
|
107
|
+
imageHeight: { default: "200px" },
|
|
108
|
+
imageWidth: { default: "200px" },
|
|
109
|
+
loading: { type: Boolean, default: false },
|
|
110
|
+
loadingLines: { default: 3 },
|
|
111
|
+
loadingAvatar: { type: Boolean, default: false },
|
|
112
|
+
loadingActions: { type: Boolean, default: false },
|
|
113
|
+
cardClass: {},
|
|
114
|
+
headerClass: {},
|
|
115
|
+
titleClass: {},
|
|
116
|
+
descriptionClass: {},
|
|
117
|
+
iconClass: {},
|
|
118
|
+
iconElementClass: {},
|
|
119
|
+
contentClass: {},
|
|
120
|
+
footerClass: {},
|
|
121
|
+
dividerClass: {},
|
|
122
|
+
actionsClass: {},
|
|
123
|
+
imageClass: {}
|
|
124
|
+
},
|
|
125
|
+
emits: ["click"],
|
|
126
|
+
setup(__props, { emit: __emit }) {
|
|
127
|
+
const props = __props;
|
|
128
|
+
const emit = __emit;
|
|
129
|
+
const slots = vue.useSlots();
|
|
130
|
+
const hasHeader = vue.computed(
|
|
131
|
+
() => props.title || props.description || props.icon || slots.header || slots.title || slots.description || slots.icon || slots.actions
|
|
132
|
+
);
|
|
133
|
+
const hasFooter = vue.computed(() => !!slots.footer);
|
|
134
|
+
const hasImage = vue.computed(() => !!props.image || !!slots.image);
|
|
135
|
+
const isHorizontal = vue.computed(() => props.imagePosition === "left" || props.imagePosition === "right");
|
|
136
|
+
const shadowClasses = vue.computed(() => {
|
|
137
|
+
const map = {
|
|
138
|
+
none: "",
|
|
139
|
+
sm: "shadow-sm",
|
|
140
|
+
md: "shadow-md",
|
|
141
|
+
lg: "shadow-lg",
|
|
142
|
+
xl: "shadow-xl"
|
|
143
|
+
};
|
|
144
|
+
return map[props.shadow];
|
|
145
|
+
});
|
|
146
|
+
const roundedClasses = vue.computed(() => {
|
|
147
|
+
const map = {
|
|
148
|
+
none: "rounded-none",
|
|
149
|
+
sm: "rounded-sm",
|
|
150
|
+
md: "rounded-md",
|
|
151
|
+
lg: "rounded-lg",
|
|
152
|
+
xl: "rounded-xl",
|
|
153
|
+
full: "rounded-3xl"
|
|
154
|
+
};
|
|
155
|
+
return map[props.rounded];
|
|
156
|
+
});
|
|
157
|
+
const paddingClasses = vue.computed(() => {
|
|
158
|
+
const map = {
|
|
159
|
+
none: "",
|
|
160
|
+
sm: "p-3",
|
|
161
|
+
md: "p-5",
|
|
162
|
+
lg: "p-6"
|
|
163
|
+
};
|
|
164
|
+
return map[props.padding];
|
|
165
|
+
});
|
|
166
|
+
const headerPaddingClasses = vue.computed(() => {
|
|
167
|
+
const map = {
|
|
168
|
+
none: "",
|
|
169
|
+
sm: "px-3 py-2",
|
|
170
|
+
md: "px-5 py-3",
|
|
171
|
+
lg: "px-6 py-4"
|
|
172
|
+
};
|
|
173
|
+
return map[props.headerPadding];
|
|
174
|
+
});
|
|
175
|
+
const footerPaddingClasses = vue.computed(() => {
|
|
176
|
+
const map = {
|
|
177
|
+
none: "",
|
|
178
|
+
sm: "px-3 py-2",
|
|
179
|
+
md: "px-5 py-3",
|
|
180
|
+
lg: "px-6 py-4"
|
|
181
|
+
};
|
|
182
|
+
return map[props.headerPadding];
|
|
183
|
+
});
|
|
184
|
+
const borderClasses = vue.computed(() => {
|
|
185
|
+
const map = {
|
|
186
|
+
none: "",
|
|
187
|
+
default: "border border-gray-200 dark:border-gray-700",
|
|
188
|
+
primary: "border border-primary-500 dark:border-primary-400",
|
|
189
|
+
secondary: "border border-secondary-500 dark:border-secondary-400"
|
|
190
|
+
};
|
|
191
|
+
return map[props.border];
|
|
192
|
+
});
|
|
193
|
+
const variantClasses = vue.computed(() => {
|
|
194
|
+
const map = {
|
|
195
|
+
default: "bg-white dark:bg-slate-950",
|
|
196
|
+
glass: "bg-white/15 backdrop-blur-sm",
|
|
197
|
+
outline: "bg-transparent",
|
|
198
|
+
flat: "bg-gray-50 dark:bg-slate-900"
|
|
199
|
+
};
|
|
200
|
+
return map[props.variant];
|
|
201
|
+
});
|
|
202
|
+
const accentClasses = vue.computed(() => {
|
|
203
|
+
if (props.accent === "none") return "";
|
|
204
|
+
const colorMap = {
|
|
205
|
+
primary: "border-primary-500",
|
|
206
|
+
secondary: "border-secondary-500",
|
|
207
|
+
success: "border-emerald-500",
|
|
208
|
+
warning: "border-amber-500",
|
|
209
|
+
danger: "border-red-500",
|
|
210
|
+
info: "border-blue-500"
|
|
211
|
+
};
|
|
212
|
+
const position = isHorizontal.value ? "border-l-4" : "border-t-4";
|
|
213
|
+
return `${position} ${colorMap[props.accent]}`;
|
|
214
|
+
});
|
|
215
|
+
const interactiveClasses = vue.computed(() => {
|
|
216
|
+
if (props.disabled) {
|
|
217
|
+
return "opacity-60 cursor-not-allowed";
|
|
218
|
+
}
|
|
219
|
+
if (props.clickable) {
|
|
220
|
+
return "cursor-pointer transition-all duration-200 hover:shadow-lg hover:-translate-y-0.5 active:translate-y-0 active:shadow-md";
|
|
221
|
+
}
|
|
222
|
+
return "";
|
|
223
|
+
});
|
|
224
|
+
const selectedClasses = vue.computed(() => {
|
|
225
|
+
if (!props.selected) return "";
|
|
226
|
+
return "ring-2 ring-primary-500 ring-offset-2 dark:ring-offset-slate-900";
|
|
227
|
+
});
|
|
228
|
+
const computedDividerClass = vue.computed(
|
|
229
|
+
() => props.dividerClass || "border-gray-200 dark:border-gray-700"
|
|
230
|
+
);
|
|
231
|
+
const computedTitleClass = vue.computed(
|
|
232
|
+
() => props.titleClass || "text-gray-800 dark:text-gray-200"
|
|
233
|
+
);
|
|
234
|
+
const computedDescriptionClass = vue.computed(
|
|
235
|
+
() => props.descriptionClass || "text-gray-600 dark:text-gray-400"
|
|
236
|
+
);
|
|
237
|
+
const computedIconClass = vue.computed(
|
|
238
|
+
() => props.iconClass || "flex items-center justify-center size-10 rounded-lg bg-primary-100 dark:bg-primary-900/30"
|
|
239
|
+
);
|
|
240
|
+
const computedIconElementClass = vue.computed(
|
|
241
|
+
() => props.iconElementClass || "size-5 text-primary-600 dark:text-primary-400"
|
|
242
|
+
);
|
|
243
|
+
const imageContainerClasses = vue.computed(() => {
|
|
244
|
+
const base = "overflow-hidden flex-shrink-0";
|
|
245
|
+
switch (props.imagePosition) {
|
|
246
|
+
case "left":
|
|
247
|
+
return `${base} rounded-l-lg`;
|
|
248
|
+
case "right":
|
|
249
|
+
return `${base} rounded-r-lg`;
|
|
250
|
+
case "top":
|
|
251
|
+
return `${base} rounded-t-lg`;
|
|
252
|
+
case "bottom":
|
|
253
|
+
return `${base} rounded-b-lg`;
|
|
254
|
+
case "background":
|
|
255
|
+
return "absolute inset-0";
|
|
256
|
+
default:
|
|
257
|
+
return base;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
const imageStyle = vue.computed(() => {
|
|
261
|
+
if (props.imagePosition === "background") {
|
|
262
|
+
return {};
|
|
263
|
+
}
|
|
264
|
+
if (isHorizontal.value) {
|
|
265
|
+
return { width: props.imageWidth };
|
|
266
|
+
}
|
|
267
|
+
return { height: props.imageHeight };
|
|
268
|
+
});
|
|
269
|
+
const handleClick = (event) => {
|
|
270
|
+
if (props.disabled) return;
|
|
271
|
+
if (props.clickable) {
|
|
272
|
+
emit("click", event);
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
return (_ctx, _cache) => {
|
|
276
|
+
return __props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$2, {
|
|
277
|
+
key: 0,
|
|
278
|
+
lines: __props.loadingLines,
|
|
279
|
+
"show-avatar": __props.loadingAvatar,
|
|
280
|
+
"show-actions": __props.loadingActions
|
|
281
|
+
}, null, 8, ["lines", "show-avatar", "show-actions"])) : (vue.openBlock(), vue.createElementBlock("div", {
|
|
282
|
+
key: 1,
|
|
283
|
+
class: vue.normalizeClass([
|
|
284
|
+
"overflow-hidden relative",
|
|
285
|
+
isHorizontal.value ? "flex" : "flex flex-col",
|
|
286
|
+
__props.imagePosition === "right" && "flex-row-reverse",
|
|
287
|
+
shadowClasses.value,
|
|
288
|
+
roundedClasses.value,
|
|
289
|
+
borderClasses.value,
|
|
290
|
+
variantClasses.value,
|
|
291
|
+
accentClasses.value,
|
|
292
|
+
interactiveClasses.value,
|
|
293
|
+
selectedClasses.value,
|
|
294
|
+
__props.cardClass
|
|
295
|
+
]),
|
|
296
|
+
role: __props.clickable ? "button" : void 0,
|
|
297
|
+
tabindex: __props.clickable && !__props.disabled ? 0 : void 0,
|
|
298
|
+
onClick: handleClick,
|
|
299
|
+
onKeydown: [
|
|
300
|
+
vue.withKeys(handleClick, ["enter"]),
|
|
301
|
+
vue.withKeys(vue.withModifiers(handleClick, ["prevent"]), ["space"])
|
|
302
|
+
]
|
|
303
|
+
}, [
|
|
304
|
+
hasImage.value && __props.imagePosition === "background" ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
305
|
+
key: 0,
|
|
306
|
+
class: vue.normalizeClass(imageContainerClasses.value)
|
|
307
|
+
}, [
|
|
308
|
+
vue.renderSlot(_ctx.$slots, "image", {}, () => [
|
|
309
|
+
__props.image ? (vue.openBlock(), vue.createElementBlock("img", {
|
|
310
|
+
key: 0,
|
|
311
|
+
src: __props.image,
|
|
312
|
+
alt: __props.imageAlt || "",
|
|
313
|
+
class: vue.normalizeClass(["w-full h-full object-cover", __props.imageClass])
|
|
314
|
+
}, null, 10, _hoisted_2$g)) : vue.createCommentVNode("", true)
|
|
315
|
+
]),
|
|
316
|
+
_cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent" }, null, -1))
|
|
317
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
318
|
+
hasImage.value && (__props.imagePosition === "left" || __props.imagePosition === "top") ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
319
|
+
key: 1,
|
|
320
|
+
class: vue.normalizeClass(imageContainerClasses.value),
|
|
321
|
+
style: vue.normalizeStyle(imageStyle.value)
|
|
322
|
+
}, [
|
|
323
|
+
vue.renderSlot(_ctx.$slots, "image", {}, () => [
|
|
324
|
+
__props.image ? (vue.openBlock(), vue.createElementBlock("img", {
|
|
325
|
+
key: 0,
|
|
326
|
+
src: __props.image,
|
|
327
|
+
alt: __props.imageAlt || "",
|
|
328
|
+
class: vue.normalizeClass(["w-full h-full object-cover", __props.imageClass])
|
|
329
|
+
}, null, 10, _hoisted_3$9)) : vue.createCommentVNode("", true)
|
|
330
|
+
])
|
|
331
|
+
], 6)) : vue.createCommentVNode("", true),
|
|
332
|
+
vue.createElementVNode("div", {
|
|
333
|
+
class: vue.normalizeClass(["flex flex-col flex-1 min-w-0", __props.imagePosition === "background" && "relative z-10"])
|
|
334
|
+
}, [
|
|
335
|
+
_ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
336
|
+
key: 0,
|
|
337
|
+
class: vue.normalizeClass([
|
|
338
|
+
__props.headerDivider && "border-b",
|
|
339
|
+
computedDividerClass.value,
|
|
340
|
+
__props.headerClass
|
|
341
|
+
])
|
|
342
|
+
}, [
|
|
343
|
+
vue.renderSlot(_ctx.$slots, "header")
|
|
344
|
+
], 2)) : hasHeader.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
345
|
+
key: 1,
|
|
346
|
+
class: vue.normalizeClass([
|
|
347
|
+
"flex items-center justify-between gap-4",
|
|
348
|
+
headerPaddingClasses.value,
|
|
349
|
+
__props.headerDivider && "border-b",
|
|
350
|
+
computedDividerClass.value,
|
|
351
|
+
__props.headerClass,
|
|
352
|
+
__props.imagePosition === "background" && "text-white border-white/20"
|
|
353
|
+
])
|
|
354
|
+
}, [
|
|
355
|
+
vue.createElementVNode("div", _hoisted_4$6, [
|
|
356
|
+
__props.icon || _ctx.$slots.icon ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
357
|
+
key: 0,
|
|
358
|
+
class: vue.normalizeClass(computedIconClass.value)
|
|
359
|
+
}, [
|
|
360
|
+
vue.renderSlot(_ctx.$slots, "icon", {}, () => [
|
|
361
|
+
__props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
362
|
+
key: 0,
|
|
363
|
+
icon: __props.icon,
|
|
364
|
+
class: vue.normalizeClass(computedIconElementClass.value)
|
|
365
|
+
}, null, 8, ["icon", "class"])) : vue.createCommentVNode("", true)
|
|
366
|
+
])
|
|
367
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
368
|
+
vue.createElementVNode("div", _hoisted_5$4, [
|
|
369
|
+
__props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
370
|
+
key: 0,
|
|
371
|
+
class: vue.normalizeClass([
|
|
372
|
+
"text-md font-semibold",
|
|
373
|
+
__props.imagePosition === "background" ? "text-white" : computedTitleClass.value
|
|
374
|
+
])
|
|
375
|
+
}, [
|
|
376
|
+
vue.renderSlot(_ctx.$slots, "title", {}, () => [
|
|
377
|
+
vue.createTextVNode(vue.toDisplayString(__props.title), 1)
|
|
378
|
+
])
|
|
379
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
380
|
+
__props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
381
|
+
key: 1,
|
|
382
|
+
class: vue.normalizeClass([
|
|
383
|
+
"text-sm font-normal",
|
|
384
|
+
__props.imagePosition === "background" ? "text-white/80" : computedDescriptionClass.value
|
|
385
|
+
])
|
|
386
|
+
}, [
|
|
387
|
+
vue.renderSlot(_ctx.$slots, "description", {}, () => [
|
|
388
|
+
vue.createTextVNode(vue.toDisplayString(__props.description), 1)
|
|
389
|
+
])
|
|
390
|
+
], 2)) : vue.createCommentVNode("", true)
|
|
391
|
+
])
|
|
392
|
+
]),
|
|
393
|
+
_ctx.$slots.actions ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
394
|
+
key: 0,
|
|
395
|
+
class: vue.normalizeClass(["flex gap-2", __props.actionsClass])
|
|
396
|
+
}, [
|
|
397
|
+
vue.renderSlot(_ctx.$slots, "actions")
|
|
398
|
+
], 2)) : vue.createCommentVNode("", true)
|
|
399
|
+
], 2)) : vue.createCommentVNode("", true),
|
|
400
|
+
vue.createElementVNode("div", {
|
|
401
|
+
class: vue.normalizeClass(["flex-1", paddingClasses.value, __props.contentClass])
|
|
402
|
+
}, [
|
|
403
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
404
|
+
], 2),
|
|
405
|
+
hasFooter.value ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
406
|
+
key: 2,
|
|
407
|
+
class: vue.normalizeClass([
|
|
408
|
+
__props.footerDivider && "border-t",
|
|
409
|
+
computedDividerClass.value,
|
|
410
|
+
footerPaddingClasses.value,
|
|
411
|
+
__props.footerClass,
|
|
412
|
+
__props.imagePosition === "background" && "text-white border-white/20"
|
|
413
|
+
])
|
|
414
|
+
}, [
|
|
415
|
+
vue.renderSlot(_ctx.$slots, "footer")
|
|
416
|
+
], 2)) : vue.createCommentVNode("", true)
|
|
417
|
+
], 2),
|
|
418
|
+
hasImage.value && (__props.imagePosition === "right" || __props.imagePosition === "bottom") ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
419
|
+
key: 2,
|
|
420
|
+
class: vue.normalizeClass(imageContainerClasses.value),
|
|
421
|
+
style: vue.normalizeStyle(imageStyle.value)
|
|
422
|
+
}, [
|
|
423
|
+
vue.renderSlot(_ctx.$slots, "image", {}, () => [
|
|
424
|
+
__props.image ? (vue.openBlock(), vue.createElementBlock("img", {
|
|
425
|
+
key: 0,
|
|
426
|
+
src: __props.image,
|
|
427
|
+
alt: __props.imageAlt || "",
|
|
428
|
+
class: vue.normalizeClass(["w-full h-full object-cover", __props.imageClass])
|
|
429
|
+
}, null, 10, _hoisted_6$3)) : vue.createCommentVNode("", true)
|
|
430
|
+
])
|
|
431
|
+
], 6)) : vue.createCommentVNode("", true)
|
|
432
|
+
], 42, _hoisted_1$n));
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
});
|
|
436
|
+
const _hoisted_1$m = { class: "overflow-x-auto" };
|
|
437
|
+
const TableContextKey = Symbol("TableContext");
|
|
438
|
+
const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({
|
|
439
|
+
...{
|
|
440
|
+
inheritAttrs: false
|
|
441
|
+
},
|
|
442
|
+
__name: "Table",
|
|
443
|
+
props: {
|
|
444
|
+
striped: { type: Boolean, default: false },
|
|
445
|
+
bordered: { type: Boolean, default: false },
|
|
446
|
+
hover: { type: Boolean, default: true },
|
|
447
|
+
compact: { type: Boolean, default: false },
|
|
448
|
+
stickyHeader: { type: Boolean, default: false }
|
|
449
|
+
},
|
|
450
|
+
setup(__props) {
|
|
451
|
+
const attrs = vue.useAttrs();
|
|
452
|
+
const props = __props;
|
|
453
|
+
const tableClasses = vue.computed(() => [
|
|
454
|
+
"w-full text-left",
|
|
455
|
+
props.bordered ? "border border-gray-200 dark:border-gray-700" : ""
|
|
456
|
+
]);
|
|
457
|
+
const wrapperClasses = vue.computed(() => [
|
|
458
|
+
"overflow-hidden",
|
|
459
|
+
props.stickyHeader ? "max-h-[600px] overflow-y-auto" : ""
|
|
460
|
+
]);
|
|
461
|
+
const { striped, bordered, hover, compact, stickyHeader } = vue.toRefs(props);
|
|
462
|
+
vue.provide(TableContextKey, vue.reactive({
|
|
463
|
+
striped,
|
|
464
|
+
bordered,
|
|
465
|
+
hover,
|
|
466
|
+
compact,
|
|
467
|
+
stickyHeader
|
|
468
|
+
}));
|
|
469
|
+
return (_ctx, _cache) => {
|
|
470
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
471
|
+
class: vue.normalizeClass(wrapperClasses.value)
|
|
472
|
+
}, [
|
|
473
|
+
vue.createElementVNode("div", _hoisted_1$m, [
|
|
474
|
+
vue.createElementVNode("table", vue.mergeProps(vue.unref(attrs), { class: tableClasses.value }), [
|
|
475
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
476
|
+
], 16)
|
|
477
|
+
])
|
|
478
|
+
], 2);
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({
|
|
483
|
+
...{
|
|
484
|
+
inheritAttrs: false
|
|
485
|
+
},
|
|
486
|
+
__name: "Caption",
|
|
487
|
+
props: {
|
|
488
|
+
position: { default: "top" },
|
|
489
|
+
srOnly: { type: Boolean, default: false }
|
|
490
|
+
},
|
|
491
|
+
setup(__props) {
|
|
492
|
+
const attrs = vue.useAttrs();
|
|
493
|
+
return (_ctx, _cache) => {
|
|
494
|
+
return vue.openBlock(), vue.createElementBlock("caption", vue.mergeProps(vue.unref(attrs), {
|
|
495
|
+
class: [
|
|
496
|
+
__props.position === "bottom" ? "caption-bottom" : "caption-top",
|
|
497
|
+
__props.srOnly ? "sr-only" : "py-2 text-sm text-gray-600 dark:text-gray-400"
|
|
498
|
+
]
|
|
499
|
+
}), [
|
|
500
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
501
|
+
], 16);
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({
|
|
506
|
+
...{
|
|
507
|
+
inheritAttrs: false
|
|
508
|
+
},
|
|
509
|
+
__name: "Colgroup",
|
|
510
|
+
setup(__props) {
|
|
511
|
+
const attrs = vue.useAttrs();
|
|
512
|
+
return (_ctx, _cache) => {
|
|
513
|
+
return vue.openBlock(), vue.createElementBlock("colgroup", vue.normalizeProps(vue.guardReactiveProps(vue.unref(attrs))), [
|
|
514
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
515
|
+
], 16);
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
});
|
|
519
|
+
const _hoisted_1$l = ["span"];
|
|
520
|
+
const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({
|
|
521
|
+
...{
|
|
522
|
+
inheritAttrs: false
|
|
523
|
+
},
|
|
524
|
+
__name: "Col",
|
|
525
|
+
props: {
|
|
526
|
+
span: {},
|
|
527
|
+
width: {}
|
|
528
|
+
},
|
|
529
|
+
setup(__props) {
|
|
530
|
+
const props = __props;
|
|
531
|
+
const attrs = vue.useAttrs();
|
|
532
|
+
const colStyles = vue.computed(() => ({
|
|
533
|
+
width: props.width
|
|
534
|
+
}));
|
|
535
|
+
return (_ctx, _cache) => {
|
|
536
|
+
return vue.openBlock(), vue.createElementBlock("col", vue.mergeProps(vue.unref(attrs), {
|
|
537
|
+
span: __props.span,
|
|
538
|
+
style: colStyles.value
|
|
539
|
+
}), null, 16, _hoisted_1$l);
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
});
|
|
543
|
+
const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
|
|
544
|
+
...{
|
|
545
|
+
inheritAttrs: false
|
|
546
|
+
},
|
|
547
|
+
__name: "Thead",
|
|
548
|
+
setup(__props) {
|
|
549
|
+
const context = vue.inject(TableContextKey);
|
|
550
|
+
const attrs = vue.useAttrs();
|
|
551
|
+
const theadClasses = vue.computed(() => [
|
|
552
|
+
"text-sm font-semibold text-gray-600 uppercase dark:text-gray-400",
|
|
553
|
+
(context == null ? void 0 : context.bordered) ? "border-b border-gray-200 dark:border-gray-700" : "border-b border-black/10 dark:border-white/10",
|
|
554
|
+
(context == null ? void 0 : context.stickyHeader) ? "sticky top-0 z-10" : ""
|
|
555
|
+
]);
|
|
556
|
+
return (_ctx, _cache) => {
|
|
557
|
+
return vue.openBlock(), vue.createElementBlock("thead", vue.mergeProps(vue.unref(attrs), {
|
|
558
|
+
class: [theadClasses.value, "bg-black/5 dark:bg-white/5"]
|
|
559
|
+
}), [
|
|
560
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
561
|
+
], 16);
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
});
|
|
565
|
+
const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({
|
|
566
|
+
...{
|
|
567
|
+
inheritAttrs: false
|
|
568
|
+
},
|
|
569
|
+
__name: "Tbody",
|
|
570
|
+
setup(__props) {
|
|
571
|
+
const context = vue.inject(TableContextKey);
|
|
572
|
+
const attrs = vue.useAttrs();
|
|
573
|
+
const tbodyClasses = vue.computed(() => [
|
|
574
|
+
"font-medium",
|
|
575
|
+
(context == null ? void 0 : context.bordered) ? "divide-y divide-gray-200 dark:divide-gray-700" : "divide-y divide-black/10 dark:divide-white/10"
|
|
576
|
+
]);
|
|
577
|
+
return (_ctx, _cache) => {
|
|
578
|
+
return vue.openBlock(), vue.createElementBlock("tbody", vue.mergeProps(vue.unref(attrs), { class: tbodyClasses.value }), [
|
|
579
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
580
|
+
], 16);
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({
|
|
585
|
+
...{
|
|
586
|
+
inheritAttrs: false
|
|
587
|
+
},
|
|
588
|
+
__name: "Tfoot",
|
|
589
|
+
setup(__props) {
|
|
590
|
+
const context = vue.inject(TableContextKey);
|
|
591
|
+
const attrs = vue.useAttrs();
|
|
592
|
+
const tfootClasses = vue.computed(() => [
|
|
593
|
+
"text-sm font-medium text-gray-600 dark:text-gray-400",
|
|
594
|
+
(context == null ? void 0 : context.bordered) ? "border-t border-gray-200 dark:border-gray-700" : "border-t border-black/10 dark:border-white/10"
|
|
595
|
+
]);
|
|
596
|
+
return (_ctx, _cache) => {
|
|
597
|
+
return vue.openBlock(), vue.createElementBlock("tfoot", vue.mergeProps(vue.unref(attrs), {
|
|
598
|
+
class: [tfootClasses.value, "bg-black/5 dark:bg-white/5"]
|
|
599
|
+
}), [
|
|
600
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
601
|
+
], 16);
|
|
602
|
+
};
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
|
|
606
|
+
...{
|
|
607
|
+
inheritAttrs: false
|
|
608
|
+
},
|
|
609
|
+
__name: "Tr",
|
|
610
|
+
props: {
|
|
611
|
+
selected: { type: Boolean, default: false },
|
|
612
|
+
clickable: { type: Boolean, default: false },
|
|
613
|
+
disabled: { type: Boolean, default: false },
|
|
614
|
+
even: { type: Boolean }
|
|
615
|
+
},
|
|
616
|
+
emits: ["click"],
|
|
617
|
+
setup(__props, { emit: __emit }) {
|
|
618
|
+
const props = __props;
|
|
619
|
+
const attrs = vue.useAttrs();
|
|
620
|
+
const emit = __emit;
|
|
621
|
+
const context = vue.inject(TableContextKey);
|
|
622
|
+
const rowClasses = vue.computed(() => [
|
|
623
|
+
"transition-colors",
|
|
624
|
+
// Hover effect
|
|
625
|
+
(context == null ? void 0 : context.hover) && !props.disabled ? "hover:bg-black/5 dark:hover:bg-white/5" : "",
|
|
626
|
+
// Selected state
|
|
627
|
+
props.selected ? "bg-primary-50 dark:bg-primary-900/20" : "",
|
|
628
|
+
// Striped (only apply if not selected)
|
|
629
|
+
(context == null ? void 0 : context.striped) && props.even && !props.selected ? "bg-black/[0.02] dark:bg-white/[0.02]" : "",
|
|
630
|
+
// Clickable
|
|
631
|
+
props.clickable && !props.disabled ? "cursor-pointer" : "",
|
|
632
|
+
// Disabled
|
|
633
|
+
props.disabled ? "opacity-50 cursor-not-allowed" : ""
|
|
634
|
+
]);
|
|
635
|
+
const handleClick = (event) => {
|
|
636
|
+
if (props.clickable && !props.disabled) {
|
|
637
|
+
emit("click", event);
|
|
638
|
+
}
|
|
639
|
+
};
|
|
640
|
+
return (_ctx, _cache) => {
|
|
641
|
+
return vue.openBlock(), vue.createElementBlock("tr", vue.mergeProps(vue.unref(attrs), {
|
|
642
|
+
class: rowClasses.value,
|
|
643
|
+
onClick: handleClick
|
|
644
|
+
}), [
|
|
645
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
646
|
+
], 16);
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
const _hoisted_1$k = ["colspan", "rowspan", "scope", "aria-sort"];
|
|
651
|
+
const _hoisted_2$f = {
|
|
652
|
+
key: 0,
|
|
653
|
+
d: "M7 14l5-5 5 5H7z"
|
|
654
|
+
};
|
|
655
|
+
const _hoisted_3$8 = {
|
|
656
|
+
key: 1,
|
|
657
|
+
d: "M7 10l5 5 5-5H7z"
|
|
658
|
+
};
|
|
659
|
+
const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
660
|
+
...{
|
|
661
|
+
inheritAttrs: false
|
|
662
|
+
},
|
|
663
|
+
__name: "Th",
|
|
664
|
+
props: {
|
|
665
|
+
sortable: { type: Boolean, default: false },
|
|
666
|
+
sorted: { type: Boolean, default: false },
|
|
667
|
+
sortDirection: { default: "asc" },
|
|
668
|
+
align: { default: "left" },
|
|
669
|
+
width: {},
|
|
670
|
+
minWidth: {},
|
|
671
|
+
maxWidth: {},
|
|
672
|
+
sticky: { type: Boolean, default: false },
|
|
673
|
+
stickyLeft: { default: "0" },
|
|
674
|
+
colspan: {},
|
|
675
|
+
rowspan: {},
|
|
676
|
+
scope: { default: "col" },
|
|
677
|
+
resizable: { type: Boolean, default: false },
|
|
678
|
+
resizing: { type: Boolean, default: false }
|
|
679
|
+
},
|
|
680
|
+
emits: ["sort", "resizeStart"],
|
|
681
|
+
setup(__props, { emit: __emit }) {
|
|
682
|
+
const props = __props;
|
|
683
|
+
const attrs = vue.useAttrs();
|
|
684
|
+
const emit = __emit;
|
|
685
|
+
const context = vue.inject(TableContextKey);
|
|
686
|
+
const thClasses = vue.computed(() => [
|
|
687
|
+
// Padding
|
|
688
|
+
(context == null ? void 0 : context.compact) ? "px-2 py-2" : "px-3 py-3",
|
|
689
|
+
// Alignment
|
|
690
|
+
props.align === "center" ? "text-center" : props.align === "right" ? "text-right" : "text-left",
|
|
691
|
+
// Sortable hover
|
|
692
|
+
props.sortable ? "cursor-pointer select-none hover:bg-black/5 dark:hover:bg-white/5" : "",
|
|
693
|
+
// Border for bordered tables
|
|
694
|
+
(context == null ? void 0 : context.bordered) ? "border-r border-gray-200 dark:border-gray-700 last:border-r-0" : "",
|
|
695
|
+
// Sticky column
|
|
696
|
+
props.sticky ? "sticky bg-black/5 dark:bg-white/5 z-20" : "",
|
|
697
|
+
// Resizable
|
|
698
|
+
props.resizable ? "relative" : ""
|
|
699
|
+
]);
|
|
700
|
+
const thStyles = vue.computed(() => ({
|
|
701
|
+
width: props.width,
|
|
702
|
+
minWidth: props.minWidth,
|
|
703
|
+
maxWidth: props.maxWidth,
|
|
704
|
+
left: props.sticky ? props.stickyLeft : void 0
|
|
705
|
+
}));
|
|
706
|
+
const handleSort = () => {
|
|
707
|
+
if (props.sortable) {
|
|
708
|
+
emit("sort");
|
|
709
|
+
}
|
|
710
|
+
};
|
|
711
|
+
return (_ctx, _cache) => {
|
|
712
|
+
return vue.openBlock(), vue.createElementBlock("th", vue.mergeProps(vue.unref(attrs), {
|
|
713
|
+
class: thClasses.value,
|
|
714
|
+
style: thStyles.value,
|
|
715
|
+
colspan: __props.colspan,
|
|
716
|
+
rowspan: __props.rowspan,
|
|
717
|
+
scope: __props.scope,
|
|
718
|
+
"aria-sort": __props.sortable ? __props.sorted ? __props.sortDirection === "asc" ? "ascending" : "descending" : "none" : void 0,
|
|
719
|
+
onClick: handleSort
|
|
720
|
+
}), [
|
|
721
|
+
vue.createElementVNode("div", {
|
|
722
|
+
class: vue.normalizeClass(["flex items-center gap-1", {
|
|
723
|
+
"justify-center": __props.align === "center",
|
|
724
|
+
"justify-end": __props.align === "right"
|
|
725
|
+
}])
|
|
726
|
+
}, [
|
|
727
|
+
vue.renderSlot(_ctx.$slots, "default"),
|
|
728
|
+
__props.sortable ? (vue.openBlock(), vue.createElementBlock("svg", {
|
|
729
|
+
key: 0,
|
|
730
|
+
class: vue.normalizeClass([
|
|
731
|
+
"size-4 transition-colors flex-shrink-0",
|
|
732
|
+
__props.sorted ? "text-primary-500" : "text-gray-400"
|
|
733
|
+
]),
|
|
734
|
+
viewBox: "0 0 24 24",
|
|
735
|
+
fill: "currentColor"
|
|
736
|
+
}, [
|
|
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
|
+
_cache[2] || (_cache[2] = vue.createElementVNode("path", {
|
|
739
|
+
d: "M7 14l5-5 5 5H7z",
|
|
740
|
+
class: "opacity-40"
|
|
741
|
+
}, null, -1)),
|
|
742
|
+
_cache[3] || (_cache[3] = vue.createElementVNode("path", {
|
|
743
|
+
d: "M7 10l5 5 5-5H7z",
|
|
744
|
+
class: "opacity-40"
|
|
745
|
+
}, null, -1))
|
|
746
|
+
], 64))
|
|
747
|
+
], 2)) : vue.createCommentVNode("", true)
|
|
748
|
+
], 2),
|
|
749
|
+
__props.resizable ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
750
|
+
key: 0,
|
|
751
|
+
class: vue.normalizeClass([
|
|
752
|
+
"absolute top-0 right-0 bottom-0 w-1 cursor-col-resize select-none",
|
|
753
|
+
"hover:bg-primary-400 dark:hover:bg-primary-500",
|
|
754
|
+
"transition-colors",
|
|
755
|
+
__props.resizing ? "bg-primary-500" : "bg-transparent"
|
|
756
|
+
]),
|
|
757
|
+
role: "separator",
|
|
758
|
+
"aria-orientation": "vertical",
|
|
759
|
+
tabindex: "-1",
|
|
760
|
+
onMousedown: _cache[0] || (_cache[0] = vue.withModifiers(($event) => emit("resizeStart", $event), ["stop"])),
|
|
761
|
+
onTouchstart: _cache[1] || (_cache[1] = vue.withModifiers(($event) => emit("resizeStart", $event), ["stop"]))
|
|
762
|
+
}, null, 34)) : vue.createCommentVNode("", true)
|
|
763
|
+
], 16, _hoisted_1$k);
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
});
|
|
767
|
+
const _hoisted_1$j = ["colspan", "rowspan"];
|
|
768
|
+
const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
|
|
769
|
+
...{
|
|
770
|
+
inheritAttrs: false
|
|
771
|
+
},
|
|
772
|
+
__name: "Td",
|
|
773
|
+
props: {
|
|
774
|
+
align: { default: "left" },
|
|
775
|
+
main: { type: Boolean, default: false },
|
|
776
|
+
className: {},
|
|
777
|
+
truncate: { type: Boolean, default: false },
|
|
778
|
+
width: {},
|
|
779
|
+
sticky: { type: Boolean, default: false },
|
|
780
|
+
stickyLeft: { default: "0" },
|
|
781
|
+
colspan: {},
|
|
782
|
+
rowspan: {}
|
|
783
|
+
},
|
|
784
|
+
setup(__props) {
|
|
785
|
+
const props = __props;
|
|
786
|
+
const attrs = vue.useAttrs();
|
|
787
|
+
const context = vue.inject(TableContextKey);
|
|
788
|
+
const tdClasses = vue.computed(() => [
|
|
789
|
+
// Padding
|
|
790
|
+
(context == null ? void 0 : context.compact) ? "px-2 py-2" : "px-3 py-4",
|
|
791
|
+
// Alignment
|
|
792
|
+
props.align === "center" ? "text-center" : props.align === "right" ? "text-right" : "text-left",
|
|
793
|
+
// Main column styling
|
|
794
|
+
props.main ? "text-sm font-semibold text-gray-900 dark:text-gray-100" : "text-xs font-medium text-gray-600 dark:text-gray-400",
|
|
795
|
+
// Truncate
|
|
796
|
+
props.truncate ? "truncate" : "",
|
|
797
|
+
// Border for bordered tables
|
|
798
|
+
(context == null ? void 0 : context.bordered) ? "border-r border-gray-200 dark:border-gray-700 last:border-r-0" : "",
|
|
799
|
+
// Sticky column
|
|
800
|
+
props.sticky ? "sticky bg-white dark:bg-gray-900 z-10" : "",
|
|
801
|
+
// Custom className
|
|
802
|
+
props.className || ""
|
|
803
|
+
]);
|
|
804
|
+
const tdStyles = vue.computed(() => ({
|
|
805
|
+
width: props.width,
|
|
806
|
+
maxWidth: props.truncate ? props.width || "200px" : void 0,
|
|
807
|
+
left: props.sticky ? props.stickyLeft : void 0
|
|
808
|
+
}));
|
|
809
|
+
return (_ctx, _cache) => {
|
|
810
|
+
return vue.openBlock(), vue.createElementBlock("td", vue.mergeProps(vue.unref(attrs), {
|
|
811
|
+
class: tdClasses.value,
|
|
812
|
+
style: tdStyles.value,
|
|
813
|
+
colspan: __props.colspan,
|
|
814
|
+
rowspan: __props.rowspan
|
|
815
|
+
}), [
|
|
816
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
817
|
+
], 16, _hoisted_1$j);
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
});
|
|
821
|
+
const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
|
|
822
|
+
__name: "TableHeader",
|
|
823
|
+
props: {
|
|
824
|
+
columns: {},
|
|
825
|
+
selectable: { type: Boolean, default: false },
|
|
826
|
+
allSelected: { type: Boolean, default: false },
|
|
827
|
+
someSelected: { type: Boolean, default: false },
|
|
828
|
+
selectableCount: { default: 0 },
|
|
829
|
+
sortBy: {},
|
|
830
|
+
sortDirection: {},
|
|
831
|
+
showActions: { type: Boolean, default: false }
|
|
832
|
+
},
|
|
833
|
+
emits: ["selectAll", "sort"],
|
|
834
|
+
setup(__props, { emit: __emit }) {
|
|
835
|
+
const props = __props;
|
|
836
|
+
const emit = __emit;
|
|
837
|
+
const handleSort = (property) => {
|
|
838
|
+
if (!property.sortable) return;
|
|
839
|
+
const newDirection = props.sortBy === property.name && props.sortDirection === "asc" ? "desc" : "asc";
|
|
840
|
+
emit("sort", property.name, newDirection);
|
|
841
|
+
};
|
|
842
|
+
return (_ctx, _cache) => {
|
|
843
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$r, null, {
|
|
844
|
+
default: vue.withCtx(() => [
|
|
845
|
+
__props.selectable ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
846
|
+
key: 0,
|
|
847
|
+
width: "48px"
|
|
848
|
+
}, {
|
|
849
|
+
default: vue.withCtx(() => [
|
|
850
|
+
vue.createVNode(index._sfc_main, {
|
|
851
|
+
"model-value": __props.allSelected,
|
|
852
|
+
indeterminate: __props.someSelected,
|
|
853
|
+
disabled: __props.selectableCount === 0,
|
|
854
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
|
|
855
|
+
}, null, 8, ["model-value", "indeterminate", "disabled"])
|
|
856
|
+
]),
|
|
857
|
+
_: 1
|
|
858
|
+
})) : vue.createCommentVNode("", true),
|
|
859
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.columns, (column) => {
|
|
860
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
861
|
+
key: column.name,
|
|
862
|
+
sortable: column.sortable,
|
|
863
|
+
sorted: __props.sortBy === column.name,
|
|
864
|
+
"sort-direction": __props.sortDirection,
|
|
865
|
+
align: column.align,
|
|
866
|
+
width: column.width,
|
|
867
|
+
"min-width": column.minWidth,
|
|
868
|
+
"max-width": column.maxWidth,
|
|
869
|
+
onSort: ($event) => handleSort(column)
|
|
870
|
+
}, {
|
|
871
|
+
default: vue.withCtx(() => [
|
|
872
|
+
vue.renderSlot(_ctx.$slots, "header-" + column.name, { column }, () => [
|
|
873
|
+
vue.createTextVNode(vue.toDisplayString(column.label ?? column.name), 1)
|
|
874
|
+
])
|
|
875
|
+
]),
|
|
876
|
+
_: 2
|
|
877
|
+
}, 1032, ["sortable", "sorted", "sort-direction", "align", "width", "min-width", "max-width", "onSort"]);
|
|
878
|
+
}), 128)),
|
|
879
|
+
__props.showActions ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
880
|
+
key: 1,
|
|
881
|
+
align: "right",
|
|
882
|
+
width: "100px"
|
|
883
|
+
})) : vue.createCommentVNode("", true)
|
|
884
|
+
]),
|
|
885
|
+
_: 3
|
|
886
|
+
});
|
|
887
|
+
};
|
|
888
|
+
}
|
|
889
|
+
});
|
|
890
|
+
const _hoisted_1$i = { class: "flex items-center justify-end gap-2" };
|
|
891
|
+
const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
|
|
892
|
+
__name: "TableRow",
|
|
893
|
+
props: {
|
|
894
|
+
item: {},
|
|
895
|
+
columns: {},
|
|
896
|
+
selectable: { type: Boolean, default: false },
|
|
897
|
+
selected: { type: Boolean, default: false },
|
|
898
|
+
canSelect: { type: Boolean, default: true },
|
|
899
|
+
clickable: { type: Boolean, default: false },
|
|
900
|
+
even: { type: Boolean, default: false },
|
|
901
|
+
showActions: { type: Boolean, default: false }
|
|
902
|
+
},
|
|
903
|
+
emits: ["select", "click"],
|
|
904
|
+
setup(__props, { emit: __emit }) {
|
|
905
|
+
const emit = __emit;
|
|
906
|
+
const typeComponents = {
|
|
907
|
+
text: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1,
|
|
908
|
+
number: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$2,
|
|
909
|
+
date: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$3,
|
|
910
|
+
boolean: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$4,
|
|
911
|
+
badge: BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$5
|
|
912
|
+
};
|
|
913
|
+
const getTypeComponent = (type = "text") => {
|
|
914
|
+
return typeComponents[type] || BadgeType_vue_vue_type_script_setup_true_lang._sfc_main$1;
|
|
915
|
+
};
|
|
916
|
+
const getItemValue = (item, property) => {
|
|
917
|
+
if (property.name.includes(".")) {
|
|
918
|
+
let value = item;
|
|
919
|
+
for (const key of property.name.split(".")) {
|
|
920
|
+
if (value && typeof value === "object" && key in value) {
|
|
921
|
+
value = value[key];
|
|
922
|
+
} else {
|
|
923
|
+
return void 0;
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
return value;
|
|
927
|
+
}
|
|
928
|
+
return item[property.name];
|
|
929
|
+
};
|
|
930
|
+
return (_ctx, _cache) => {
|
|
931
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$r, {
|
|
932
|
+
selected: __props.selected,
|
|
933
|
+
clickable: __props.clickable,
|
|
934
|
+
even: __props.even,
|
|
935
|
+
onClick: _cache[1] || (_cache[1] = (e) => emit("click", e))
|
|
936
|
+
}, {
|
|
937
|
+
default: vue.withCtx(() => [
|
|
938
|
+
__props.selectable ? (vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
939
|
+
key: 0,
|
|
940
|
+
width: "48px"
|
|
941
|
+
}, {
|
|
942
|
+
default: vue.withCtx(() => [
|
|
943
|
+
__props.canSelect ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
|
|
944
|
+
key: 0,
|
|
945
|
+
"model-value": __props.selected,
|
|
946
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("select"))
|
|
947
|
+
}, null, 8, ["model-value"])) : vue.createCommentVNode("", true)
|
|
948
|
+
]),
|
|
949
|
+
_: 1
|
|
950
|
+
})) : vue.createCommentVNode("", true),
|
|
951
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.columns, (column) => {
|
|
952
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
953
|
+
key: column.name,
|
|
954
|
+
align: column.align,
|
|
955
|
+
main: column.main,
|
|
956
|
+
"class-name": column.className,
|
|
957
|
+
truncate: column.truncate,
|
|
958
|
+
width: column.width
|
|
959
|
+
}, {
|
|
960
|
+
default: vue.withCtx(() => [
|
|
961
|
+
vue.renderSlot(_ctx.$slots, "cell-" + column.name, {
|
|
962
|
+
item: __props.item,
|
|
963
|
+
value: getItemValue(__props.item, column),
|
|
964
|
+
column
|
|
965
|
+
}, () => [
|
|
966
|
+
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getTypeComponent(column.type || "text")), {
|
|
967
|
+
value: getItemValue(__props.item, column)
|
|
968
|
+
}, null, 8, ["value"]))
|
|
969
|
+
])
|
|
970
|
+
]),
|
|
971
|
+
_: 2
|
|
972
|
+
}, 1032, ["align", "main", "class-name", "truncate", "width"]);
|
|
973
|
+
}), 128)),
|
|
974
|
+
__props.showActions ? (vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
975
|
+
key: 1,
|
|
976
|
+
align: "right"
|
|
977
|
+
}, {
|
|
978
|
+
default: vue.withCtx(() => [
|
|
979
|
+
vue.createElementVNode("div", _hoisted_1$i, [
|
|
980
|
+
vue.renderSlot(_ctx.$slots, "actions", { item: __props.item })
|
|
981
|
+
])
|
|
982
|
+
]),
|
|
983
|
+
_: 3
|
|
984
|
+
})) : vue.createCommentVNode("", true)
|
|
985
|
+
]),
|
|
986
|
+
_: 3
|
|
987
|
+
}, 8, ["selected", "clickable", "even"]);
|
|
988
|
+
};
|
|
989
|
+
}
|
|
990
|
+
});
|
|
991
|
+
const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
|
|
992
|
+
__name: "TableFooter",
|
|
993
|
+
props: {
|
|
994
|
+
colSpan: {}
|
|
995
|
+
},
|
|
996
|
+
setup(__props) {
|
|
997
|
+
return (_ctx, _cache) => {
|
|
998
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$r, null, {
|
|
999
|
+
default: vue.withCtx(() => [
|
|
1000
|
+
vue.createVNode(_sfc_main$p, {
|
|
1001
|
+
colspan: __props.colSpan,
|
|
1002
|
+
class: "text-center"
|
|
1003
|
+
}, {
|
|
1004
|
+
default: vue.withCtx(() => [
|
|
1005
|
+
vue.renderSlot(_ctx.$slots, "default")
|
|
1006
|
+
]),
|
|
1007
|
+
_: 3
|
|
1008
|
+
}, 8, ["colspan"])
|
|
1009
|
+
]),
|
|
1010
|
+
_: 3
|
|
1011
|
+
});
|
|
1012
|
+
};
|
|
1013
|
+
}
|
|
1014
|
+
});
|
|
1015
|
+
const _hoisted_1$h = ["disabled", "aria-expanded"];
|
|
1016
|
+
const _hoisted_2$e = { class: "p-4" };
|
|
1017
|
+
const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
|
|
1018
|
+
...{
|
|
1019
|
+
inheritAttrs: false
|
|
1020
|
+
},
|
|
1021
|
+
__name: "ExpandableRow",
|
|
1022
|
+
props: {
|
|
1023
|
+
colspan: {},
|
|
1024
|
+
defaultExpanded: { type: Boolean, default: false },
|
|
1025
|
+
expanded: { type: Boolean, default: void 0 },
|
|
1026
|
+
selected: { type: Boolean, default: false },
|
|
1027
|
+
disabled: { type: Boolean, default: false },
|
|
1028
|
+
expandOnRowClick: { type: Boolean, default: false }
|
|
31
1029
|
},
|
|
32
|
-
|
|
1030
|
+
emits: ["update:expanded", "click"],
|
|
1031
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
33
1032
|
const props = __props;
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
);
|
|
37
|
-
const
|
|
38
|
-
() => props.
|
|
39
|
-
|
|
1033
|
+
const emit = __emit;
|
|
1034
|
+
const attrs = vue.useAttrs();
|
|
1035
|
+
const internalExpanded = vue.ref(props.defaultExpanded);
|
|
1036
|
+
const isExpanded = vue.computed({
|
|
1037
|
+
get: () => props.expanded !== void 0 ? props.expanded : internalExpanded.value,
|
|
1038
|
+
set: (value) => {
|
|
1039
|
+
internalExpanded.value = value;
|
|
1040
|
+
emit("update:expanded", value);
|
|
1041
|
+
}
|
|
1042
|
+
});
|
|
1043
|
+
const toggle = () => {
|
|
1044
|
+
if (!props.disabled) {
|
|
1045
|
+
isExpanded.value = !isExpanded.value;
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
const handleRowClick = (event) => {
|
|
1049
|
+
emit("click", event);
|
|
1050
|
+
if (props.expandOnRowClick) {
|
|
1051
|
+
toggle();
|
|
1052
|
+
}
|
|
1053
|
+
};
|
|
1054
|
+
__expose({ toggle, isExpanded });
|
|
40
1055
|
return (_ctx, _cache) => {
|
|
41
|
-
return
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
1056
|
+
return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [
|
|
1057
|
+
vue.createVNode(_sfc_main$r, vue.mergeProps(vue.unref(attrs), {
|
|
1058
|
+
selected: __props.selected,
|
|
1059
|
+
disabled: __props.disabled,
|
|
1060
|
+
clickable: "",
|
|
1061
|
+
onClick: handleRowClick
|
|
1062
|
+
}), {
|
|
1063
|
+
default: vue.withCtx(() => [
|
|
1064
|
+
vue.createVNode(_sfc_main$p, {
|
|
1065
|
+
width: "40px",
|
|
1066
|
+
class: "!p-2"
|
|
1067
|
+
}, {
|
|
1068
|
+
default: vue.withCtx(() => [
|
|
1069
|
+
vue.createElementVNode("button", {
|
|
1070
|
+
type: "button",
|
|
1071
|
+
disabled: __props.disabled,
|
|
1072
|
+
class: "flex size-6 items-center justify-center rounded transition-colors hover:bg-black/10 dark:hover:bg-white/10 disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1073
|
+
"aria-expanded": isExpanded.value,
|
|
1074
|
+
"aria-label": "Toggle row details",
|
|
1075
|
+
onClick: vue.withModifiers(toggle, ["stop"])
|
|
1076
|
+
}, [
|
|
1077
|
+
(vue.openBlock(), vue.createElementBlock("svg", {
|
|
1078
|
+
class: vue.normalizeClass(["size-4 transition-transform", { "rotate-90": isExpanded.value }]),
|
|
1079
|
+
viewBox: "0 0 24 24",
|
|
1080
|
+
fill: "currentColor"
|
|
1081
|
+
}, [..._cache[0] || (_cache[0] = [
|
|
1082
|
+
vue.createElementVNode("path", { d: "M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z" }, null, -1)
|
|
1083
|
+
])], 2))
|
|
1084
|
+
], 8, _hoisted_1$h)
|
|
1085
|
+
]),
|
|
1086
|
+
_: 1
|
|
1087
|
+
}),
|
|
1088
|
+
vue.renderSlot(_ctx.$slots, "row")
|
|
1089
|
+
]),
|
|
1090
|
+
_: 3
|
|
1091
|
+
}, 16, ["selected", "disabled"]),
|
|
1092
|
+
isExpanded.value ? (vue.openBlock(), vue.createBlock(_sfc_main$r, {
|
|
48
1093
|
key: 0,
|
|
49
|
-
class:
|
|
50
|
-
},
|
|
51
|
-
vue.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
])
|
|
64
|
-
], 2)) : vue.createCommentVNode("", true),
|
|
65
|
-
__props.description || _ctx.$slots.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$8, [
|
|
66
|
-
vue.renderSlot(_ctx.$slots, "description", {}, () => [
|
|
67
|
-
vue.createTextVNode(vue.toDisplayString(__props.description), 1)
|
|
68
|
-
])
|
|
69
|
-
])) : vue.createCommentVNode("", true)
|
|
1094
|
+
class: "bg-gray-50 dark:bg-gray-800/50"
|
|
1095
|
+
}, {
|
|
1096
|
+
default: vue.withCtx(() => [
|
|
1097
|
+
vue.createVNode(_sfc_main$p, {
|
|
1098
|
+
colspan: __props.colspan + 1,
|
|
1099
|
+
class: "!p-0"
|
|
1100
|
+
}, {
|
|
1101
|
+
default: vue.withCtx(() => [
|
|
1102
|
+
vue.createElementVNode("div", _hoisted_2$e, [
|
|
1103
|
+
vue.renderSlot(_ctx.$slots, "expanded")
|
|
1104
|
+
])
|
|
1105
|
+
]),
|
|
1106
|
+
_: 3
|
|
1107
|
+
}, 8, ["colspan"])
|
|
70
1108
|
]),
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
], 2)) : vue.createCommentVNode("", true),
|
|
75
|
-
vue.renderSlot(_ctx.$slots, "default")
|
|
76
|
-
]));
|
|
1109
|
+
_: 3
|
|
1110
|
+
})) : vue.createCommentVNode("", true)
|
|
1111
|
+
], 64);
|
|
77
1112
|
};
|
|
78
1113
|
}
|
|
79
1114
|
});
|
|
80
1115
|
const _hoisted_1$g = { class: "overflow-hidden" };
|
|
81
|
-
const _hoisted_2$
|
|
1116
|
+
const _hoisted_2$d = {
|
|
82
1117
|
key: 1,
|
|
83
|
-
class: "
|
|
1118
|
+
class: "flex flex-col items-center justify-center py-12 text-center"
|
|
84
1119
|
};
|
|
85
|
-
const _hoisted_3$7 = { class: "
|
|
86
|
-
const _hoisted_4$5 = { class: "
|
|
1120
|
+
const _hoisted_3$7 = { class: "flex flex-col items-center gap-3" };
|
|
1121
|
+
const _hoisted_4$5 = { class: "text-sm text-gray-600 dark:text-gray-400" };
|
|
87
1122
|
const _hoisted_5$3 = {
|
|
88
|
-
key:
|
|
89
|
-
class: "
|
|
90
|
-
};
|
|
91
|
-
const _hoisted_6$3 = ["onClick"];
|
|
92
|
-
const _hoisted_7$3 = {
|
|
93
|
-
key: 0,
|
|
94
|
-
d: "M7 14l5-5 5 5H7z"
|
|
95
|
-
};
|
|
96
|
-
const _hoisted_8$3 = {
|
|
97
|
-
key: 1,
|
|
98
|
-
d: "M7 10l5 5 5-5H7z"
|
|
1123
|
+
key: 3,
|
|
1124
|
+
class: "flex flex-col items-center justify-center py-12 text-center"
|
|
99
1125
|
};
|
|
100
|
-
const _hoisted_9$3 = {
|
|
101
|
-
key: 1,
|
|
102
|
-
class: "px-3 py-3 text-right"
|
|
103
|
-
};
|
|
104
|
-
const _hoisted_10$2 = { class: "divide-y divide-black/10 font-medium dark:divide-white/10" };
|
|
105
|
-
const _hoisted_11$1 = {
|
|
106
|
-
key: 0,
|
|
107
|
-
class: "px-3 py-4"
|
|
108
|
-
};
|
|
109
|
-
const _hoisted_12$1 = {
|
|
110
|
-
key: 1,
|
|
111
|
-
class: "flex items-center justify-end gap-2 px-3 py-4"
|
|
112
|
-
};
|
|
113
|
-
const _hoisted_13 = { key: 0 };
|
|
114
1126
|
const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
|
|
115
|
-
__name: "
|
|
1127
|
+
__name: "DataTable",
|
|
116
1128
|
props: {
|
|
117
1129
|
properties: {},
|
|
118
1130
|
items: {},
|
|
@@ -123,58 +1135,65 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
|
|
|
123
1135
|
sortBy: {},
|
|
124
1136
|
sortDirection: {},
|
|
125
1137
|
loading: { type: Boolean, default: false },
|
|
126
|
-
loadingRows: { default: 5 }
|
|
1138
|
+
loadingRows: { default: 5 },
|
|
1139
|
+
error: { type: Boolean, default: false },
|
|
1140
|
+
errorMessage: { default: "An error occurred while loading data." },
|
|
1141
|
+
striped: { type: Boolean, default: false },
|
|
1142
|
+
bordered: { type: Boolean, default: false },
|
|
1143
|
+
hover: { type: Boolean, default: true },
|
|
1144
|
+
compact: { type: Boolean, default: false },
|
|
1145
|
+
stickyHeader: { type: Boolean, default: false },
|
|
1146
|
+
clickableRows: { type: Boolean, default: false },
|
|
1147
|
+
paginated: { type: Boolean, default: false },
|
|
1148
|
+
pageSize: { default: 10 },
|
|
1149
|
+
pageSizeOptions: { default: () => [10, 20, 50, 100] },
|
|
1150
|
+
showPageSize: { type: Boolean, default: true },
|
|
1151
|
+
currentPage: {},
|
|
1152
|
+
totalItems: {}
|
|
127
1153
|
},
|
|
128
|
-
emits: ["select", "selectAll", "sort"],
|
|
1154
|
+
emits: ["select", "selectAll", "sort", "rowClick", "update:currentPage", "update:pageSize"],
|
|
129
1155
|
setup(__props, { emit: __emit }) {
|
|
130
1156
|
const slots = vue.useSlots();
|
|
131
1157
|
const props = __props;
|
|
132
1158
|
const emit = __emit;
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
1159
|
+
const visibleProperties = vue.computed(() => props.properties.filter((p) => !p.hidden));
|
|
1160
|
+
const {
|
|
1161
|
+
currentPage: internalPage,
|
|
1162
|
+
pageSize: internalPageSize,
|
|
1163
|
+
totalPages,
|
|
1164
|
+
paginatedItems,
|
|
1165
|
+
setPageSize: setInternalPageSize,
|
|
1166
|
+
goToPage
|
|
1167
|
+
} = usePagination.usePagination({
|
|
1168
|
+
items: vue.computed(() => props.items),
|
|
1169
|
+
pageSize: props.pageSize,
|
|
1170
|
+
initialPage: props.currentPage ?? 1
|
|
1171
|
+
});
|
|
1172
|
+
const effectivePage = vue.computed(() => props.currentPage ?? internalPage.value);
|
|
1173
|
+
const effectivePageSize = vue.computed(() => props.pageSize ?? internalPageSize.value);
|
|
1174
|
+
const effectiveTotalPages = vue.computed(() => {
|
|
1175
|
+
if (props.totalItems !== void 0) {
|
|
1176
|
+
return Math.ceil(props.totalItems / effectivePageSize.value);
|
|
1177
|
+
}
|
|
1178
|
+
return totalPages.value;
|
|
1179
|
+
});
|
|
1180
|
+
const displayItems = vue.computed(() => {
|
|
1181
|
+
if (!props.paginated) return props.items;
|
|
1182
|
+
if (props.totalItems !== void 0) return props.items;
|
|
1183
|
+
return paginatedItems.value;
|
|
1184
|
+
});
|
|
1185
|
+
const handlePageChange = (page) => {
|
|
1186
|
+
goToPage(page);
|
|
1187
|
+
emit("update:currentPage", page);
|
|
139
1188
|
};
|
|
140
|
-
const
|
|
141
|
-
|
|
1189
|
+
const handlePageSizeChange = (size) => {
|
|
1190
|
+
setInternalPageSize(size);
|
|
1191
|
+
emit("update:pageSize", size);
|
|
142
1192
|
};
|
|
143
|
-
const visibleProperties = vue.computed(() => props.properties.filter((p) => !p.hidden));
|
|
144
1193
|
const getKey = (item) => {
|
|
145
1194
|
const keyValue = item[props.keyField];
|
|
146
1195
|
return String(keyValue ?? Math.random());
|
|
147
1196
|
};
|
|
148
|
-
const getItemValue = (item, property) => {
|
|
149
|
-
if (property.name.includes(".")) {
|
|
150
|
-
let value = item;
|
|
151
|
-
for (const key of property.name.split(".")) {
|
|
152
|
-
if (value && typeof value === "object" && key in value) {
|
|
153
|
-
value = value[key];
|
|
154
|
-
} else {
|
|
155
|
-
return void 0;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return value;
|
|
159
|
-
}
|
|
160
|
-
return item[property.name];
|
|
161
|
-
};
|
|
162
|
-
const getAlignmentClass = (align) => {
|
|
163
|
-
switch (align) {
|
|
164
|
-
case "center":
|
|
165
|
-
return "text-center";
|
|
166
|
-
case "right":
|
|
167
|
-
return "text-right";
|
|
168
|
-
default:
|
|
169
|
-
return "text-left";
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
const getMainClass = (main) => {
|
|
173
|
-
if (main) {
|
|
174
|
-
return "text-sm font-semibold text-gray-900 dark:text-gray-100";
|
|
175
|
-
}
|
|
176
|
-
return "text-xs font-medium text-gray-600 dark:text-gray-400";
|
|
177
|
-
};
|
|
178
1197
|
const selectableItems = vue.computed(() => {
|
|
179
1198
|
if (!props.selectableFilter) return props.items;
|
|
180
1199
|
return props.items.filter(props.selectableFilter);
|
|
@@ -202,129 +1221,145 @@ const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
|
|
|
202
1221
|
const handleSelect = (item) => {
|
|
203
1222
|
emit("select", getKey(item));
|
|
204
1223
|
};
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
emit("sort", property.name, newDirection);
|
|
210
|
-
};
|
|
211
|
-
const isSortedColumn = (property) => {
|
|
212
|
-
return props.sortBy === property.name;
|
|
1224
|
+
const handleRowClick = (item, event) => {
|
|
1225
|
+
if (props.clickableRows) {
|
|
1226
|
+
emit("rowClick", item, event);
|
|
1227
|
+
}
|
|
213
1228
|
};
|
|
1229
|
+
const hasActionSlot = vue.computed(() => !!slots.action);
|
|
214
1230
|
return (_ctx, _cache) => {
|
|
215
1231
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [
|
|
216
|
-
__props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
1232
|
+
__props.loading ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$1, {
|
|
217
1233
|
key: 0,
|
|
218
1234
|
rows: __props.loadingRows,
|
|
219
1235
|
columns: visibleProperties.value.length
|
|
220
|
-
}, null, 8, ["rows", "columns"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$
|
|
221
|
-
vue.
|
|
222
|
-
vue.createElementVNode("
|
|
223
|
-
vue.createElementVNode("
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
1236
|
+
}, null, 8, ["rows", "columns"])) : __props.error ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$d, [
|
|
1237
|
+
vue.renderSlot(_ctx.$slots, "error", {}, () => [
|
|
1238
|
+
vue.createElementVNode("div", _hoisted_3$7, [
|
|
1239
|
+
_cache[2] || (_cache[2] = vue.createElementVNode("svg", {
|
|
1240
|
+
class: "size-12 text-red-400",
|
|
1241
|
+
fill: "none",
|
|
1242
|
+
viewBox: "0 0 24 24",
|
|
1243
|
+
stroke: "currentColor"
|
|
1244
|
+
}, [
|
|
1245
|
+
vue.createElementVNode("path", {
|
|
1246
|
+
"stroke-linecap": "round",
|
|
1247
|
+
"stroke-linejoin": "round",
|
|
1248
|
+
"stroke-width": "1.5",
|
|
1249
|
+
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"
|
|
1250
|
+
})
|
|
1251
|
+
], -1)),
|
|
1252
|
+
vue.createElementVNode("p", _hoisted_4$5, vue.toDisplayString(__props.errorMessage), 1)
|
|
1253
|
+
])
|
|
1254
|
+
])
|
|
1255
|
+
])) : __props.items && __props.items.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$y, {
|
|
1256
|
+
key: 2,
|
|
1257
|
+
striped: __props.striped,
|
|
1258
|
+
bordered: __props.bordered,
|
|
1259
|
+
hover: __props.hover,
|
|
1260
|
+
compact: __props.compact,
|
|
1261
|
+
"sticky-header": __props.stickyHeader
|
|
1262
|
+
}, {
|
|
1263
|
+
default: vue.withCtx(() => [
|
|
1264
|
+
vue.createVNode(_sfc_main$u, null, {
|
|
1265
|
+
default: vue.withCtx(() => [
|
|
1266
|
+
vue.createVNode(_sfc_main$o, {
|
|
1267
|
+
columns: visibleProperties.value,
|
|
1268
|
+
selectable: __props.selectable,
|
|
1269
|
+
"all-selected": allSelected.value,
|
|
1270
|
+
"some-selected": someSelected.value,
|
|
1271
|
+
"selectable-count": selectableItems.value.length,
|
|
1272
|
+
"sort-by": __props.sortBy,
|
|
1273
|
+
"sort-direction": __props.sortDirection,
|
|
1274
|
+
"show-actions": hasActionSlot.value,
|
|
1275
|
+
onSelectAll: _cache[0] || (_cache[0] = ($event) => emit("selectAll")),
|
|
1276
|
+
onSort: _cache[1] || (_cache[1] = (col, dir) => emit("sort", col, dir))
|
|
1277
|
+
}, vue.createSlots({ _: 2 }, [
|
|
1278
|
+
vue.renderList(visibleProperties.value, (column) => {
|
|
1279
|
+
return {
|
|
1280
|
+
name: `header-${column.name}`,
|
|
1281
|
+
fn: vue.withCtx((slotProps) => [
|
|
1282
|
+
vue.renderSlot(_ctx.$slots, "header-" + column.name, vue.normalizeProps(vue.guardReactiveProps(slotProps)))
|
|
1283
|
+
])
|
|
1284
|
+
};
|
|
1285
|
+
})
|
|
1286
|
+
]), 1032, ["columns", "selectable", "all-selected", "some-selected", "selectable-count", "sort-by", "sort-direction", "show-actions"])
|
|
1287
|
+
]),
|
|
1288
|
+
_: 3
|
|
1289
|
+
}),
|
|
1290
|
+
vue.createVNode(_sfc_main$t, null, {
|
|
1291
|
+
default: vue.withCtx(() => [
|
|
1292
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(displayItems.value, (item, index2) => {
|
|
1293
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$n, {
|
|
1294
|
+
key: getKey(item),
|
|
1295
|
+
item,
|
|
1296
|
+
columns: visibleProperties.value,
|
|
1297
|
+
selectable: __props.selectable,
|
|
1298
|
+
selected: isSelected(item),
|
|
1299
|
+
"can-select": isSelectable(item),
|
|
1300
|
+
clickable: __props.clickableRows,
|
|
1301
|
+
even: index2 % 2 === 1,
|
|
1302
|
+
"show-actions": hasActionSlot.value,
|
|
1303
|
+
onSelect: ($event) => handleSelect(item),
|
|
1304
|
+
onClick: (e) => handleRowClick(item, e)
|
|
1305
|
+
}, vue.createSlots({
|
|
1306
|
+
actions: vue.withCtx(({ item: rowItem }) => [
|
|
1307
|
+
vue.renderSlot(_ctx.$slots, "action", { item: rowItem })
|
|
239
1308
|
]),
|
|
240
|
-
|
|
1309
|
+
_: 2
|
|
241
1310
|
}, [
|
|
242
|
-
vue.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
isSortedColumn(property) ? "text-primary-500" : "text-gray-400"
|
|
256
|
-
]),
|
|
257
|
-
viewBox: "0 0 24 24",
|
|
258
|
-
fill: "currentColor"
|
|
259
|
-
}, [
|
|
260
|
-
isSortedColumn(property) && __props.sortDirection === "asc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_7$3)) : isSortedColumn(property) && __props.sortDirection === "desc" ? (vue.openBlock(), vue.createElementBlock("path", _hoisted_8$3)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [
|
|
261
|
-
_cache[1] || (_cache[1] = vue.createElementVNode("path", {
|
|
262
|
-
d: "M7 14l5-5 5 5H7z",
|
|
263
|
-
class: "opacity-40"
|
|
264
|
-
}, null, -1)),
|
|
265
|
-
_cache[2] || (_cache[2] = vue.createElementVNode("path", {
|
|
266
|
-
d: "M7 10l5 5 5-5H7z",
|
|
267
|
-
class: "opacity-40"
|
|
268
|
-
}, null, -1))
|
|
269
|
-
], 64))
|
|
270
|
-
], 2)) : vue.createCommentVNode("", true)
|
|
271
|
-
], 2)
|
|
272
|
-
], 10, _hoisted_6$3);
|
|
273
|
-
}), 128)),
|
|
274
|
-
hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("th", _hoisted_9$3)) : vue.createCommentVNode("", true)
|
|
275
|
-
])
|
|
276
|
-
]),
|
|
277
|
-
vue.createElementVNode("tbody", _hoisted_10$2, [
|
|
278
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
279
|
-
return vue.openBlock(), vue.createElementBlock("tr", {
|
|
280
|
-
key: getKey(item),
|
|
281
|
-
class: vue.normalizeClass(["hover:bg-black/5 dark:hover:bg-white/5 transition-colors", { "bg-primary/5 dark:bg-primary/10": isSelected(item) }])
|
|
282
|
-
}, [
|
|
283
|
-
__props.selectable ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_11$1, [
|
|
284
|
-
isSelectable(item) ? (vue.openBlock(), vue.createBlock(index._sfc_main, {
|
|
285
|
-
key: 0,
|
|
286
|
-
"model-value": isSelected(item),
|
|
287
|
-
"onUpdate:modelValue": ($event) => handleSelect(item)
|
|
288
|
-
}, null, 8, ["model-value", "onUpdate:modelValue"])) : vue.createCommentVNode("", true)
|
|
289
|
-
])) : vue.createCommentVNode("", true),
|
|
290
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(visibleProperties.value, (property) => {
|
|
291
|
-
return vue.openBlock(), vue.createElementBlock("td", {
|
|
292
|
-
key: property.name,
|
|
293
|
-
class: vue.normalizeClass([
|
|
294
|
-
getAlignmentClass(property.align),
|
|
295
|
-
getMainClass(property.main),
|
|
296
|
-
property.className,
|
|
297
|
-
"px-3 py-4"
|
|
298
|
-
])
|
|
299
|
-
}, [
|
|
300
|
-
vue.renderSlot(_ctx.$slots, "item-" + property.name, {
|
|
301
|
-
item,
|
|
302
|
-
property,
|
|
303
|
-
value: getItemValue(item, property)
|
|
304
|
-
}, () => [
|
|
305
|
-
(vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(getTypeComponent(property.type || "text")), {
|
|
306
|
-
value: getItemValue(item, property)
|
|
307
|
-
}, null, 8, ["value"]))
|
|
308
|
-
])
|
|
309
|
-
], 2);
|
|
310
|
-
}), 128)),
|
|
311
|
-
hasActionSlot.value ? (vue.openBlock(), vue.createElementBlock("td", _hoisted_12$1, [
|
|
312
|
-
vue.renderSlot(_ctx.$slots, "action", { item })
|
|
313
|
-
])) : vue.createCommentVNode("", true)
|
|
314
|
-
], 2);
|
|
315
|
-
}), 128))
|
|
316
|
-
])
|
|
1311
|
+
vue.renderList(visibleProperties.value, (column) => {
|
|
1312
|
+
return {
|
|
1313
|
+
name: `cell-${column.name}`,
|
|
1314
|
+
fn: vue.withCtx((slotProps) => [
|
|
1315
|
+
vue.renderSlot(_ctx.$slots, "item-" + column.name, vue.mergeProps({ ref_for: true }, slotProps))
|
|
1316
|
+
])
|
|
1317
|
+
};
|
|
1318
|
+
})
|
|
1319
|
+
]), 1032, ["item", "columns", "selectable", "selected", "can-select", "clickable", "even", "show-actions", "onSelect", "onClick"]);
|
|
1320
|
+
}), 128))
|
|
1321
|
+
]),
|
|
1322
|
+
_: 3
|
|
1323
|
+
})
|
|
317
1324
|
]),
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
1325
|
+
_: 3
|
|
1326
|
+
}, 8, ["striped", "bordered", "hover", "compact", "sticky-header"])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$3, [
|
|
1327
|
+
vue.renderSlot(_ctx.$slots, "empty", {}, () => [
|
|
1328
|
+
_cache[3] || (_cache[3] = vue.createElementVNode("div", { class: "flex flex-col items-center gap-3" }, [
|
|
1329
|
+
vue.createElementVNode("svg", {
|
|
1330
|
+
class: "size-12 text-gray-300 dark:text-gray-600",
|
|
1331
|
+
fill: "none",
|
|
1332
|
+
viewBox: "0 0 24 24",
|
|
1333
|
+
stroke: "currentColor"
|
|
1334
|
+
}, [
|
|
1335
|
+
vue.createElementVNode("path", {
|
|
1336
|
+
"stroke-linecap": "round",
|
|
1337
|
+
"stroke-linejoin": "round",
|
|
1338
|
+
"stroke-width": "1.5",
|
|
1339
|
+
d: "M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4"
|
|
1340
|
+
})
|
|
1341
|
+
]),
|
|
1342
|
+
vue.createElementVNode("p", { class: "text-sm text-gray-500 dark:text-gray-400" }, "No data available")
|
|
1343
|
+
], -1))
|
|
1344
|
+
])
|
|
1345
|
+
])),
|
|
1346
|
+
__props.paginated && __props.items && __props.items.length > 0 && !__props.loading && !__props.error ? (vue.openBlock(), vue.createBlock(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main, {
|
|
1347
|
+
key: 4,
|
|
1348
|
+
"current-page": effectivePage.value,
|
|
1349
|
+
"total-pages": effectiveTotalPages.value,
|
|
1350
|
+
"page-size": effectivePageSize.value,
|
|
1351
|
+
"page-size-options": __props.pageSizeOptions,
|
|
1352
|
+
"show-page-size": __props.showPageSize,
|
|
1353
|
+
class: "mt-4",
|
|
1354
|
+
"onUpdate:currentPage": handlePageChange,
|
|
1355
|
+
"onUpdate:pageSize": handlePageSizeChange
|
|
1356
|
+
}, null, 8, ["current-page", "total-pages", "page-size", "page-size-options", "show-page-size"])) : vue.createCommentVNode("", true)
|
|
322
1357
|
]);
|
|
323
1358
|
};
|
|
324
1359
|
}
|
|
325
1360
|
});
|
|
326
1361
|
const _hoisted_1$f = { class: "space-y-3" };
|
|
327
|
-
const _hoisted_2$
|
|
1362
|
+
const _hoisted_2$c = { class: "flex items-center gap-3 p-3" };
|
|
328
1363
|
const _hoisted_3$6 = { class: "text-sm text-gray-600 dark:text-gray-400" };
|
|
329
1364
|
const _hoisted_4$4 = {
|
|
330
1365
|
key: 0,
|
|
@@ -392,9 +1427,9 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
|
|
|
392
1427
|
const hasEmptySlot = vue.computed(() => !!slots.empty);
|
|
393
1428
|
return (_ctx, _cache) => {
|
|
394
1429
|
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
|
|
395
|
-
__props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1430
|
+
__props.loading ? (vue.openBlock(), vue.createBlock(_sfc_main$A, { key: 0 }, {
|
|
396
1431
|
default: vue.withCtx(() => [
|
|
397
|
-
vue.createVNode(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$
|
|
1432
|
+
vue.createVNode(ListSkeleton_vue_vue_type_script_setup_true_lang._sfc_main$3, {
|
|
398
1433
|
items: __props.loadingItems,
|
|
399
1434
|
"show-avatar": "",
|
|
400
1435
|
"show-secondary": "",
|
|
@@ -403,9 +1438,9 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
|
|
|
403
1438
|
]),
|
|
404
1439
|
_: 1
|
|
405
1440
|
})) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
|
|
406
|
-
__props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1441
|
+
__props.selectable && selectableItems.value.length > 0 ? (vue.openBlock(), vue.createBlock(_sfc_main$A, { key: 0 }, {
|
|
407
1442
|
default: vue.withCtx(() => [
|
|
408
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
1443
|
+
vue.createElementVNode("div", _hoisted_2$c, [
|
|
409
1444
|
vue.createVNode(index._sfc_main, {
|
|
410
1445
|
"model-value": allSelected.value,
|
|
411
1446
|
indeterminate: someSelected.value,
|
|
@@ -418,7 +1453,7 @@ const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
|
|
|
418
1453
|
_: 1
|
|
419
1454
|
})) : vue.createCommentVNode("", true),
|
|
420
1455
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
421
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1456
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$A, {
|
|
422
1457
|
key: getKey(item),
|
|
423
1458
|
class: vue.normalizeClass(["hover:shadow-lg transition-all duration-200", {
|
|
424
1459
|
"ring-2 ring-primary": isSelected(item)
|
|
@@ -539,9 +1574,9 @@ const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
|
|
|
539
1574
|
vue.renderSlot(_ctx.$slots, "empty")
|
|
540
1575
|
]),
|
|
541
1576
|
_: 3
|
|
542
|
-
}, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter", "loading", "loading-items"])) : (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
1577
|
+
}, 8, ["items", "key-field", "selectable", "selected-items", "selectable-filter", "loading", "loading-items"])) : (vue.openBlock(), vue.createBlock(_sfc_main$A, { key: 1 }, {
|
|
543
1578
|
default: vue.withCtx(() => [
|
|
544
|
-
vue.createVNode(_sfc_main$k, {
|
|
1579
|
+
vue.createVNode(vue.unref(_sfc_main$k), {
|
|
545
1580
|
items: __props.items,
|
|
546
1581
|
properties: tableProperties.value,
|
|
547
1582
|
"key-field": __props.keyField,
|
|
@@ -594,7 +1629,7 @@ const _hoisted_1$e = {
|
|
|
594
1629
|
key: 0,
|
|
595
1630
|
class: "mb-2 block text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
596
1631
|
};
|
|
597
|
-
const _hoisted_2$
|
|
1632
|
+
const _hoisted_2$b = { class: "relative" };
|
|
598
1633
|
const _hoisted_3$5 = ["disabled", "placeholder"];
|
|
599
1634
|
const _hoisted_4$3 = ["disabled"];
|
|
600
1635
|
const _hoisted_5$1 = {
|
|
@@ -711,7 +1746,7 @@ const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
|
|
|
711
1746
|
class: "autocomplete-container"
|
|
712
1747
|
}, [
|
|
713
1748
|
__props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_1$e, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
|
|
714
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
1749
|
+
vue.createElementVNode("div", _hoisted_2$b, [
|
|
715
1750
|
vue.createElementVNode("div", {
|
|
716
1751
|
ref_key: "inputWrapperRef",
|
|
717
1752
|
ref: inputWrapperRef,
|
|
@@ -887,7 +1922,7 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
|
|
|
887
1922
|
}
|
|
888
1923
|
});
|
|
889
1924
|
const _hoisted_1$d = { class: "relative inline-block" };
|
|
890
|
-
const _hoisted_2$
|
|
1925
|
+
const _hoisted_2$a = ["src", "alt"];
|
|
891
1926
|
const _hoisted_3$4 = { key: 1 };
|
|
892
1927
|
const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
|
|
893
1928
|
__name: "Avatar",
|
|
@@ -1009,7 +2044,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
|
|
|
1009
2044
|
alt: __props.alt || __props.name,
|
|
1010
2045
|
class: "size-full object-cover",
|
|
1011
2046
|
onError: _cache[0] || (_cache[0] = ($event) => imageError.value = true)
|
|
1012
|
-
}, null, 40, _hoisted_2$
|
|
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), {
|
|
1013
2048
|
key: 2,
|
|
1014
2049
|
icon: "lucide:user",
|
|
1015
2050
|
class: "size-1/2"
|
|
@@ -1028,7 +2063,7 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
|
|
|
1028
2063
|
}
|
|
1029
2064
|
});
|
|
1030
2065
|
const _hoisted_1$c = ["aria-selected", "disabled", "onClick"];
|
|
1031
|
-
const _hoisted_2$
|
|
2066
|
+
const _hoisted_2$9 = { class: "mt-4" };
|
|
1032
2067
|
const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
|
|
1033
2068
|
__name: "Tabs",
|
|
1034
2069
|
props: {
|
|
@@ -1097,7 +2132,7 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
|
|
|
1097
2132
|
}, vue.toDisplayString(tab.label), 11, _hoisted_1$c);
|
|
1098
2133
|
}), 128))
|
|
1099
2134
|
], 2),
|
|
1100
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
2135
|
+
vue.createElementVNode("div", _hoisted_2$9, [
|
|
1101
2136
|
vue.renderSlot(_ctx.$slots, "default", { activeTab: activeTab.value })
|
|
1102
2137
|
])
|
|
1103
2138
|
]);
|
|
@@ -1242,7 +2277,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
1242
2277
|
};
|
|
1243
2278
|
const hasCustomHeader = () => !!slots.header;
|
|
1244
2279
|
return (_ctx, _cache) => {
|
|
1245
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
2280
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$A, null, vue.createSlots({
|
|
1246
2281
|
default: vue.withCtx(() => [
|
|
1247
2282
|
vue.createVNode(vue.Transition, {
|
|
1248
2283
|
"enter-active-class": "transition-all duration-200 ease-out",
|
|
@@ -1321,7 +2356,7 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
1321
2356
|
}
|
|
1322
2357
|
});
|
|
1323
2358
|
const _hoisted_1$9 = ["aria-describedby"];
|
|
1324
|
-
const _hoisted_2$
|
|
2359
|
+
const _hoisted_2$8 = ["id"];
|
|
1325
2360
|
const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
1326
2361
|
__name: "Tooltip",
|
|
1327
2362
|
props: {
|
|
@@ -1393,7 +2428,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
1393
2428
|
id: vue.unref(tooltipId),
|
|
1394
2429
|
class: vue.normalizeClass(positionClasses.value),
|
|
1395
2430
|
role: "tooltip"
|
|
1396
|
-
}, vue.toDisplayString(__props.content), 11, _hoisted_2$
|
|
2431
|
+
}, vue.toDisplayString(__props.content), 11, _hoisted_2$8)) : vue.createCommentVNode("", true)
|
|
1397
2432
|
]),
|
|
1398
2433
|
_: 1
|
|
1399
2434
|
})
|
|
@@ -1402,7 +2437,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
1402
2437
|
}
|
|
1403
2438
|
});
|
|
1404
2439
|
const _hoisted_1$8 = ["id", "aria-expanded", "aria-controls"];
|
|
1405
|
-
const _hoisted_2$
|
|
2440
|
+
const _hoisted_2$7 = ["id", "aria-labelledby"];
|
|
1406
2441
|
const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
1407
2442
|
__name: "Popover",
|
|
1408
2443
|
props: {
|
|
@@ -1487,7 +2522,7 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1487
2522
|
])
|
|
1488
2523
|
}, [
|
|
1489
2524
|
vue.renderSlot(_ctx.$slots, "default", { close: vue.unref(close) })
|
|
1490
|
-
], 14, _hoisted_2$
|
|
2525
|
+
], 14, _hoisted_2$7)) : vue.createCommentVNode("", true)
|
|
1491
2526
|
]),
|
|
1492
2527
|
_: 3
|
|
1493
2528
|
})
|
|
@@ -1500,7 +2535,7 @@ const _hoisted_1$7 = {
|
|
|
1500
2535
|
key: 0,
|
|
1501
2536
|
class: "flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700"
|
|
1502
2537
|
};
|
|
1503
|
-
const _hoisted_2$
|
|
2538
|
+
const _hoisted_2$6 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
|
|
1504
2539
|
const _hoisted_3$3 = { class: "flex-1 overflow-y-auto p-4" };
|
|
1505
2540
|
const _hoisted_4$2 = {
|
|
1506
2541
|
key: 1,
|
|
@@ -1627,7 +2662,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1627
2662
|
}, [
|
|
1628
2663
|
__props.title || __props.showClose || _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
|
|
1629
2664
|
vue.renderSlot(_ctx.$slots, "header", {}, () => [
|
|
1630
|
-
vue.createElementVNode("h2", _hoisted_2$
|
|
2665
|
+
vue.createElementVNode("h2", _hoisted_2$6, vue.toDisplayString(__props.title), 1)
|
|
1631
2666
|
]),
|
|
1632
2667
|
__props.showClose ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
1633
2668
|
key: 0,
|
|
@@ -1656,7 +2691,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1656
2691
|
}
|
|
1657
2692
|
});
|
|
1658
2693
|
const _hoisted_1$6 = { "aria-label": "Breadcrumb" };
|
|
1659
|
-
const _hoisted_2$
|
|
2694
|
+
const _hoisted_2$5 = { class: "flex items-center flex-wrap gap-1 text-sm" };
|
|
1660
2695
|
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
1661
2696
|
__name: "Breadcrumb",
|
|
1662
2697
|
props: {
|
|
@@ -1669,7 +2704,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1669
2704
|
setup(__props) {
|
|
1670
2705
|
return (_ctx, _cache) => {
|
|
1671
2706
|
return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$6, [
|
|
1672
|
-
vue.createElementVNode("ol", _hoisted_2$
|
|
2707
|
+
vue.createElementVNode("ol", _hoisted_2$5, [
|
|
1673
2708
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index2) => {
|
|
1674
2709
|
return vue.openBlock(), vue.createElementBlock("li", {
|
|
1675
2710
|
key: index2,
|
|
@@ -1745,7 +2780,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1745
2780
|
}
|
|
1746
2781
|
});
|
|
1747
2782
|
const _hoisted_1$4 = ["id", "disabled", "aria-expanded", "aria-controls"];
|
|
1748
|
-
const _hoisted_2$
|
|
2783
|
+
const _hoisted_2$4 = { class: "flex items-center gap-2 font-medium" };
|
|
1749
2784
|
const _hoisted_3$2 = ["id", "aria-labelledby"];
|
|
1750
2785
|
const _hoisted_4$1 = { class: "px-4 py-3 bg-gray-50 dark:bg-gray-900 text-gray-700 dark:text-gray-300" };
|
|
1751
2786
|
const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
@@ -1782,7 +2817,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1782
2817
|
"aria-controls": panelId.value,
|
|
1783
2818
|
onClick: toggle
|
|
1784
2819
|
}, [
|
|
1785
|
-
vue.createElementVNode("span", _hoisted_2$
|
|
2820
|
+
vue.createElementVNode("span", _hoisted_2$4, [
|
|
1786
2821
|
__props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
1787
2822
|
key: 0,
|
|
1788
2823
|
icon: __props.icon,
|
|
@@ -1829,7 +2864,7 @@ const _hoisted_1$3 = {
|
|
|
1829
2864
|
key: 0,
|
|
1830
2865
|
class: "relative"
|
|
1831
2866
|
};
|
|
1832
|
-
const _hoisted_2$
|
|
2867
|
+
const _hoisted_2$3 = { class: "flex items-start gap-4" };
|
|
1833
2868
|
const _hoisted_3$1 = { class: "flex-1 min-w-0 pt-0.5" };
|
|
1834
2869
|
const _hoisted_4 = { class: "flex items-center justify-between gap-2" };
|
|
1835
2870
|
const _hoisted_5 = { class: "text-sm font-medium text-gray-900 dark:text-white" };
|
|
@@ -1908,7 +2943,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1908
2943
|
key: 0,
|
|
1909
2944
|
class: vue.normalizeClass(["absolute left-4 top-8 w-0.5 h-full -ml-px", getStatusClasses(item.status).line])
|
|
1910
2945
|
}, null, 2)) : vue.createCommentVNode("", true),
|
|
1911
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
2946
|
+
vue.createElementVNode("div", _hoisted_2$3, [
|
|
1912
2947
|
vue.createElementVNode("div", {
|
|
1913
2948
|
class: vue.normalizeClass(["relative z-10 flex items-center justify-center size-8 rounded-full shrink-0", getStatusClasses(item.status).dot])
|
|
1914
2949
|
}, [
|
|
@@ -1961,7 +2996,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1961
2996
|
}
|
|
1962
2997
|
});
|
|
1963
2998
|
const _hoisted_1$2 = ["aria-label"];
|
|
1964
|
-
const _hoisted_2$
|
|
2999
|
+
const _hoisted_2$2 = {
|
|
1965
3000
|
key: 0,
|
|
1966
3001
|
class: "text-sm font-medium"
|
|
1967
3002
|
};
|
|
@@ -1976,7 +3011,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1976
3011
|
},
|
|
1977
3012
|
setup(__props) {
|
|
1978
3013
|
const props = __props;
|
|
1979
|
-
const { isDark, toggle } =
|
|
3014
|
+
const { isDark, toggle } = usePagination.useDarkMode({ storageKey: props.storageKey });
|
|
1980
3015
|
const sizeClasses = {
|
|
1981
3016
|
sm: { button: "p-1.5", icon: "size-4" },
|
|
1982
3017
|
md: { button: "p-2", icon: "size-5" },
|
|
@@ -2000,129 +3035,258 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2000
3035
|
icon: vue.unref(isDark) ? __props.darkIcon : __props.lightIcon,
|
|
2001
3036
|
class: vue.normalizeClass(sizeClasses[__props.size].icon)
|
|
2002
3037
|
}, null, 8, ["icon", "class"]),
|
|
2003
|
-
__props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$
|
|
3038
|
+
__props.showLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$2, vue.toDisplayString(vue.unref(isDark) ? "Dark" : "Light"), 1)) : vue.createCommentVNode("", true)
|
|
2004
3039
|
], 10, _hoisted_1$2);
|
|
2005
3040
|
};
|
|
2006
3041
|
}
|
|
2007
3042
|
});
|
|
2008
|
-
const _hoisted_1$1 = {
|
|
2009
|
-
|
|
3043
|
+
const _hoisted_1$1 = { key: 0 };
|
|
3044
|
+
const _hoisted_2$1 = {
|
|
3045
|
+
key: 1,
|
|
2010
3046
|
class: "text-gray-400"
|
|
2011
3047
|
};
|
|
2012
3048
|
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
2013
|
-
__name: "
|
|
3049
|
+
__name: "StatItem",
|
|
2014
3050
|
props: {
|
|
2015
3051
|
label: {},
|
|
2016
3052
|
value: {},
|
|
2017
3053
|
icon: {},
|
|
3054
|
+
iconPosition: { default: "top" },
|
|
2018
3055
|
change: {},
|
|
2019
3056
|
changeLabel: {},
|
|
3057
|
+
trend: {},
|
|
3058
|
+
trendOnly: { type: Boolean, default: false },
|
|
3059
|
+
size: { default: "md" },
|
|
2020
3060
|
variant: { default: "default" },
|
|
2021
|
-
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: {}
|
|
2022
3068
|
},
|
|
3069
|
+
emits: ["click"],
|
|
2023
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
|
+
});
|
|
2024
3183
|
return (_ctx, _cache) => {
|
|
2025
|
-
return vue.openBlock(), vue.
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
|
|
2072
|
-
|
|
2073
|
-
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
}, [
|
|
2096
|
-
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2097
|
-
icon: __props.change >= 0 ? "heroicons:arrow-trending-up" : "heroicons:arrow-trending-down",
|
|
2098
|
-
class: "size-3.5"
|
|
2099
|
-
}, null, 8, ["icon"]),
|
|
2100
|
-
vue.createElementVNode("span", null, vue.toDisplayString(__props.change >= 0 ? "+" : "") + vue.toDisplayString(__props.change) + "%", 1),
|
|
2101
|
-
__props.changeLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$1, vue.toDisplayString(__props.changeLabel), 1)) : vue.createCommentVNode("", true)
|
|
2102
|
-
], 2)) : vue.createCommentVNode("", true)
|
|
2103
|
-
], 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"]);
|
|
2104
3254
|
};
|
|
2105
3255
|
}
|
|
2106
3256
|
});
|
|
2107
3257
|
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
2108
|
-
__name: "
|
|
3258
|
+
__name: "Stats",
|
|
2109
3259
|
props: {
|
|
2110
3260
|
stats: {},
|
|
2111
3261
|
cols: {},
|
|
3262
|
+
gap: { default: "md" },
|
|
2112
3263
|
variant: { default: "default" },
|
|
3264
|
+
size: { default: "md" },
|
|
3265
|
+
iconPosition: { default: "top" },
|
|
2113
3266
|
color: { default: "primary" }
|
|
2114
3267
|
},
|
|
2115
3268
|
setup(__props) {
|
|
2116
3269
|
return (_ctx, _cache) => {
|
|
3270
|
+
var _a, _b, _c, _d;
|
|
2117
3271
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
2118
|
-
class: vue.normalizeClass(["grid
|
|
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",
|
|
2119
3279
|
__props.cols === 2 && "grid-cols-2",
|
|
2120
3280
|
__props.cols === 3 && "grid-cols-3",
|
|
2121
3281
|
__props.cols === 4 && "grid-cols-2 sm:grid-cols-4",
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
!__props.cols && __props.stats.length
|
|
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"
|
|
2126
3290
|
]])
|
|
2127
3291
|
}, [
|
|
2128
3292
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.stats, (stat, index2) => {
|
|
@@ -2133,10 +3297,14 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2133
3297
|
icon: stat.icon,
|
|
2134
3298
|
change: stat.change,
|
|
2135
3299
|
"change-label": stat.changeLabel,
|
|
3300
|
+
trend: stat.trend,
|
|
2136
3301
|
variant: __props.variant,
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
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")
|
|
2140
3308
|
], 2);
|
|
2141
3309
|
};
|
|
2142
3310
|
}
|
|
@@ -2277,26 +3445,42 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
2277
3445
|
};
|
|
2278
3446
|
}
|
|
2279
3447
|
});
|
|
2280
|
-
exports.
|
|
2281
|
-
exports._sfc_main
|
|
2282
|
-
exports._sfc_main$
|
|
2283
|
-
exports._sfc_main$
|
|
2284
|
-
exports._sfc_main$
|
|
2285
|
-
exports._sfc_main$
|
|
2286
|
-
exports._sfc_main$
|
|
2287
|
-
exports._sfc_main$
|
|
2288
|
-
exports._sfc_main$
|
|
2289
|
-
exports._sfc_main$
|
|
2290
|
-
exports._sfc_main$
|
|
2291
|
-
exports._sfc_main$
|
|
2292
|
-
exports._sfc_main$
|
|
2293
|
-
exports._sfc_main$
|
|
2294
|
-
exports._sfc_main$
|
|
2295
|
-
exports._sfc_main$
|
|
2296
|
-
exports._sfc_main$
|
|
2297
|
-
exports._sfc_main$
|
|
2298
|
-
exports._sfc_main$
|
|
2299
|
-
exports._sfc_main$
|
|
2300
|
-
exports._sfc_main$
|
|
2301
|
-
exports._sfc_main$
|
|
2302
|
-
|
|
3448
|
+
exports.TableContextKey = TableContextKey;
|
|
3449
|
+
exports._sfc_main = _sfc_main$A;
|
|
3450
|
+
exports._sfc_main$1 = _sfc_main$z;
|
|
3451
|
+
exports._sfc_main$10 = _sfc_main$q;
|
|
3452
|
+
exports._sfc_main$11 = _sfc_main$p;
|
|
3453
|
+
exports._sfc_main$12 = _sfc_main$o;
|
|
3454
|
+
exports._sfc_main$13 = _sfc_main$n;
|
|
3455
|
+
exports._sfc_main$14 = _sfc_main$m;
|
|
3456
|
+
exports._sfc_main$15 = _sfc_main$l;
|
|
3457
|
+
exports._sfc_main$16 = _sfc_main$k;
|
|
3458
|
+
exports._sfc_main$17 = _sfc_main$j;
|
|
3459
|
+
exports._sfc_main$18 = _sfc_main$i;
|
|
3460
|
+
exports._sfc_main$19 = _sfc_main$h;
|
|
3461
|
+
exports._sfc_main$2 = _sfc_main$y;
|
|
3462
|
+
exports._sfc_main$20 = _sfc_main$g;
|
|
3463
|
+
exports._sfc_main$21 = _sfc_main$f;
|
|
3464
|
+
exports._sfc_main$22 = _sfc_main$e;
|
|
3465
|
+
exports._sfc_main$23 = _sfc_main$d;
|
|
3466
|
+
exports._sfc_main$24 = _sfc_main$c;
|
|
3467
|
+
exports._sfc_main$25 = _sfc_main$b;
|
|
3468
|
+
exports._sfc_main$26 = _sfc_main$a;
|
|
3469
|
+
exports._sfc_main$27 = _sfc_main$9;
|
|
3470
|
+
exports._sfc_main$28 = _sfc_main$8;
|
|
3471
|
+
exports._sfc_main$29 = _sfc_main$7;
|
|
3472
|
+
exports._sfc_main$3 = _sfc_main$x;
|
|
3473
|
+
exports._sfc_main$30 = _sfc_main$6;
|
|
3474
|
+
exports._sfc_main$31 = _sfc_main$5;
|
|
3475
|
+
exports._sfc_main$32 = _sfc_main$4;
|
|
3476
|
+
exports._sfc_main$33 = _sfc_main$3;
|
|
3477
|
+
exports._sfc_main$34 = _sfc_main$2;
|
|
3478
|
+
exports._sfc_main$35 = _sfc_main$1;
|
|
3479
|
+
exports._sfc_main$36 = _sfc_main;
|
|
3480
|
+
exports._sfc_main$4 = _sfc_main$w;
|
|
3481
|
+
exports._sfc_main$5 = _sfc_main$v;
|
|
3482
|
+
exports._sfc_main$6 = _sfc_main$u;
|
|
3483
|
+
exports._sfc_main$7 = _sfc_main$t;
|
|
3484
|
+
exports._sfc_main$8 = _sfc_main$s;
|
|
3485
|
+
exports._sfc_main$9 = _sfc_main$r;
|
|
3486
|
+
//# sourceMappingURL=FilterTabs.vue_vue_type_script_setup_true_lang-l8lJzwoY.cjs.map
|