cisse-vue-ui 0.5.16 → 0.5.21
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 -666
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-C3pr8BwC.js.map +1 -1
- package/dist/Dropdown.vue_vue_type_script_setup_true_lang-DKxcVBKu.cjs.map +1 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-CrEu33_J.cjs +140 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-CrEu33_J.cjs.map +1 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-D3_Oddwt.js +141 -0
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-D3_Oddwt.js.map +1 -0
- package/dist/PageLayout.vue_vue_type_script_setup_true_lang-D22uNeS1.cjs.map +1 -1
- package/dist/PageLayout.vue_vue_type_script_setup_true_lang-kT7np2ir.js.map +1 -1
- package/dist/{RangeSlider.vue_vue_type_script_setup_true_lang-DD9UxnCU.js → RangeSlider.vue_vue_type_script_setup_true_lang-B79_S1JL.js} +4 -4
- package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-B79_S1JL.js.map +1 -0
- package/dist/{RangeSlider.vue_vue_type_script_setup_true_lang-BRNkkx89.cjs → RangeSlider.vue_vue_type_script_setup_true_lang-ClH-pyK8.cjs} +4 -4
- package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-ClH-pyK8.cjs.map +1 -0
- package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-CHoagJ0-.cjs → Skeleton.vue_vue_type_script_setup_true_lang-CsDMGhaT.cjs} +87 -224
- package/dist/Skeleton.vue_vue_type_script_setup_true_lang-CsDMGhaT.cjs.map +1 -0
- package/dist/{ListSkeleton.vue_vue_type_script_setup_true_lang-Bech-H58.js → Skeleton.vue_vue_type_script_setup_true_lang-Q4PcIELi.js} +87 -224
- package/dist/Skeleton.vue_vue_type_script_setup_true_lang-Q4PcIELi.js.map +1 -0
- package/dist/{Timeline.vue_vue_type_script_setup_true_lang-CqeiZOID.cjs → Timeline.vue_vue_type_script_setup_true_lang-C5SKEGPG.cjs} +98 -56
- package/dist/Timeline.vue_vue_type_script_setup_true_lang-C5SKEGPG.cjs.map +1 -0
- package/dist/{Timeline.vue_vue_type_script_setup_true_lang-CuPF4MPe.js → Timeline.vue_vue_type_script_setup_true_lang-ykGksWXN.js} +109 -67
- package/dist/Timeline.vue_vue_type_script_setup_true_lang-ykGksWXN.js.map +1 -0
- package/dist/cisse-vue-ui.css +51 -51
- package/dist/components/core/AccordionItem.stories.d.ts +10 -0
- package/dist/components/core/Avatar.vue.d.ts +1 -1
- package/dist/components/core/Button.vue.d.ts +1 -1
- package/dist/components/core/CardComponent.stories.d.ts +3 -0
- package/dist/components/core/CardComponent.vue.d.ts +15 -2
- package/dist/components/core/MobileList.stories.d.ts +13 -0
- package/dist/components/core/MobileList.vue.d.ts +6 -0
- package/dist/components/core/ResponsiveList.stories.d.ts +15 -0
- package/dist/components/core/ResponsiveList.vue.d.ts +6 -0
- package/dist/components/core/TabPanel.stories.d.ts +8 -0
- package/dist/components/core/TableAction.stories.d.ts +14 -0
- package/dist/components/core/TableComponent.stories.d.ts +2 -0
- package/dist/components/core/TableComponent.vue.d.ts +6 -0
- package/dist/components/core/index.cjs +1 -1
- package/dist/components/core/index.js +1 -1
- package/dist/components/feedback/CardSkeleton.stories.d.ts +11 -0
- package/dist/components/feedback/CardSkeleton.test.d.ts +1 -0
- package/dist/components/feedback/CardSkeleton.vue.d.ts +1 -1
- package/dist/components/feedback/ListSkeleton.stories.d.ts +12 -0
- package/dist/components/feedback/ListSkeleton.test.d.ts +1 -0
- package/dist/components/feedback/ListSkeleton.vue.d.ts +1 -1
- package/dist/components/feedback/NotificationComponent.stories.d.ts +14 -0
- package/dist/components/feedback/NotificationList.stories.d.ts +11 -0
- package/dist/components/feedback/Skeleton.vue.d.ts +1 -1
- package/dist/components/feedback/TableSkeleton.stories.d.ts +12 -0
- package/dist/components/feedback/TableSkeleton.test.d.ts +1 -0
- package/dist/components/feedback/TableSkeleton.vue.d.ts +1 -1
- package/dist/components/feedback/ToastContainer.stories.d.ts +15 -0
- package/dist/components/feedback/index.cjs +16 -15
- package/dist/components/feedback/index.cjs.map +1 -1
- package/dist/components/feedback/index.js +5 -4
- package/dist/components/feedback/index.js.map +1 -1
- package/dist/components/form/FileUpload.vue.d.ts +1 -1
- package/dist/components/form/FormHelp.stories.d.ts +11 -0
- package/dist/components/form/FormLabel.stories.d.ts +12 -0
- package/dist/components/form/FormSelect.stories.d.ts +2 -0
- package/dist/components/form/index.cjs +1 -1
- package/dist/components/form/index.js +1 -1
- package/dist/components/index.cjs +18 -17
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +10 -9
- package/dist/components/index.js.map +1 -1
- package/dist/{index-BFry5KjP.js → index-C3NAM2ds.js} +5 -4
- package/dist/index-C3NAM2ds.js.map +1 -0
- package/dist/{index-CgX0zCi8.cjs → index-Ti1RIOEG.cjs} +19 -18
- package/dist/index-Ti1RIOEG.cjs.map +1 -0
- package/dist/index.cjs +19 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -13
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/useDropdown-DHFnd259.cjs.map +1 -1
- package/dist/useDropdown-iVu14E6s.js.map +1 -1
- package/dist/useToast-CRh_sG82.cjs.map +1 -1
- package/dist/useToast-DwFOkewC.js.map +1 -1
- package/package.json +168 -168
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-Bech-H58.js.map +0 -1
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-CHoagJ0-.cjs.map +0 -1
- package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-BRNkkx89.cjs.map +0 -1
- package/dist/RangeSlider.vue_vue_type_script_setup_true_lang-DD9UxnCU.js.map +0 -1
- package/dist/Timeline.vue_vue_type_script_setup_true_lang-CqeiZOID.cjs.map +0 -1
- package/dist/Timeline.vue_vue_type_script_setup_true_lang-CuPF4MPe.js.map +0 -1
- package/dist/index-BFry5KjP.js.map +0 -1
- package/dist/index-CgX0zCi8.cjs.map +0 -1
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
const vue = require("vue");
|
|
3
3
|
const vue$1 = require("@iconify/vue");
|
|
4
4
|
const _pluginVue_exportHelper = require("./_plugin-vue_export-helper-DM9IkUGy.cjs");
|
|
5
|
-
const _hoisted_1$
|
|
6
|
-
const _hoisted_2$
|
|
7
|
-
const _hoisted_3$
|
|
5
|
+
const _hoisted_1$9 = { class: "flex items-center justify-center py-12" };
|
|
6
|
+
const _hoisted_2$7 = { class: "text-center" };
|
|
7
|
+
const _hoisted_3$7 = {
|
|
8
8
|
key: 0,
|
|
9
9
|
class: "mt-4 text-gray-600 dark:text-gray-400"
|
|
10
10
|
};
|
|
11
|
-
const _sfc_main$
|
|
11
|
+
const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
12
12
|
__name: "LoadingSpinner",
|
|
13
13
|
props: {
|
|
14
14
|
text: {},
|
|
@@ -21,29 +21,29 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
21
21
|
lg: "h-16 w-16"
|
|
22
22
|
};
|
|
23
23
|
return (_ctx, _cache) => {
|
|
24
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
25
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
24
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
|
|
25
|
+
vue.createElementVNode("div", _hoisted_2$7, [
|
|
26
26
|
vue.createElementVNode("div", {
|
|
27
27
|
class: vue.normalizeClass([sizeClasses[__props.size], "border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent"])
|
|
28
28
|
}, null, 2),
|
|
29
|
-
__props.text ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$
|
|
29
|
+
__props.text ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_3$7, vue.toDisplayString(__props.text), 1)) : vue.createCommentVNode("", true)
|
|
30
30
|
])
|
|
31
31
|
]);
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
});
|
|
35
|
-
const _hoisted_1$
|
|
35
|
+
const _hoisted_1$8 = {
|
|
36
36
|
key: 0,
|
|
37
37
|
class: "flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700"
|
|
38
38
|
};
|
|
39
|
-
const _hoisted_2$
|
|
40
|
-
const _hoisted_3$
|
|
41
|
-
const _hoisted_4$
|
|
39
|
+
const _hoisted_2$6 = { class: "text-xl font-semibold text-gray-900 dark:text-gray-100" };
|
|
40
|
+
const _hoisted_3$6 = { class: "sr-only" };
|
|
41
|
+
const _hoisted_4$4 = { class: "flex-1 overflow-y-auto px-6 py-4" };
|
|
42
42
|
const _hoisted_5$1 = {
|
|
43
43
|
key: 1,
|
|
44
44
|
class: "flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700"
|
|
45
45
|
};
|
|
46
|
-
const _sfc_main$
|
|
46
|
+
const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
47
47
|
__name: "Modal",
|
|
48
48
|
props: {
|
|
49
49
|
title: { default: "" },
|
|
@@ -88,8 +88,8 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
88
88
|
vue.createElementVNode("div", {
|
|
89
89
|
class: vue.normalizeClass([sizeClasses[__props.size], "flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900"])
|
|
90
90
|
}, [
|
|
91
|
-
__props.title || _ctx.$slots.header || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
92
|
-
vue.createElementVNode("h3", _hoisted_2$
|
|
91
|
+
__props.title || _ctx.$slots.header || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$8, [
|
|
92
|
+
vue.createElementVNode("h3", _hoisted_2$6, [
|
|
93
93
|
vue.renderSlot(_ctx.$slots, "header", {}, () => [
|
|
94
94
|
vue.renderSlot(_ctx.$slots, "title", {}, () => [
|
|
95
95
|
vue.createTextVNode(vue.toDisplayString(__props.title), 1)
|
|
@@ -105,10 +105,10 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
105
105
|
class: "h-5 w-5",
|
|
106
106
|
icon: "lucide:x"
|
|
107
107
|
}),
|
|
108
|
-
vue.createElementVNode("span", _hoisted_3$
|
|
108
|
+
vue.createElementVNode("span", _hoisted_3$6, vue.toDisplayString(__props.closeButtonLabel), 1)
|
|
109
109
|
])
|
|
110
110
|
])) : vue.createCommentVNode("", true),
|
|
111
|
-
vue.createElementVNode("div", _hoisted_4$
|
|
111
|
+
vue.createElementVNode("div", _hoisted_4$4, [
|
|
112
112
|
vue.renderSlot(_ctx.$slots, "default")
|
|
113
113
|
]),
|
|
114
114
|
_ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$1, [
|
|
@@ -119,13 +119,13 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
119
119
|
};
|
|
120
120
|
}
|
|
121
121
|
});
|
|
122
|
-
const _hoisted_1$
|
|
122
|
+
const _hoisted_1$7 = {
|
|
123
123
|
key: 0,
|
|
124
124
|
class: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700"
|
|
125
125
|
};
|
|
126
|
-
const _hoisted_2$
|
|
127
|
-
const _hoisted_3$
|
|
128
|
-
const _hoisted_4$
|
|
126
|
+
const _hoisted_2$5 = { class: "flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4" };
|
|
127
|
+
const _hoisted_3$5 = { class: "text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left" };
|
|
128
|
+
const _hoisted_4$3 = {
|
|
129
129
|
key: 0,
|
|
130
130
|
class: "flex items-center justify-center sm:justify-start gap-2"
|
|
131
131
|
};
|
|
@@ -140,7 +140,7 @@ const _hoisted_9 = ["disabled"];
|
|
|
140
140
|
const _hoisted_10 = { class: "hidden sm:inline" };
|
|
141
141
|
const _hoisted_11 = ["disabled"];
|
|
142
142
|
const _hoisted_12 = { class: "hidden sm:inline" };
|
|
143
|
-
const _sfc_main$
|
|
143
|
+
const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
144
144
|
__name: "PaginationControls",
|
|
145
145
|
props: {
|
|
146
146
|
currentPage: {},
|
|
@@ -168,10 +168,10 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
168
168
|
emit("update:pageSize", Number(target.value));
|
|
169
169
|
};
|
|
170
170
|
return (_ctx, _cache) => {
|
|
171
|
-
return __props.totalPages > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
172
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
173
|
-
vue.createElementVNode("div", _hoisted_3$
|
|
174
|
-
__props.showPageSize ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$
|
|
171
|
+
return __props.totalPages > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$7, [
|
|
172
|
+
vue.createElementVNode("div", _hoisted_2$5, [
|
|
173
|
+
vue.createElementVNode("div", _hoisted_3$5, vue.toDisplayString(__props.pageLabel) + " " + vue.toDisplayString(__props.currentPage) + " " + vue.toDisplayString(__props.ofLabel) + " " + vue.toDisplayString(__props.totalPages), 1),
|
|
174
|
+
__props.showPageSize ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$3, [
|
|
175
175
|
vue.createElementVNode("label", _hoisted_5, vue.toDisplayString(__props.itemsPerPageLabel), 1),
|
|
176
176
|
vue.createElementVNode("select", {
|
|
177
177
|
id: "page-size",
|
|
@@ -216,17 +216,17 @@ const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
|
216
216
|
};
|
|
217
217
|
}
|
|
218
218
|
});
|
|
219
|
-
const _hoisted_1$
|
|
220
|
-
const _hoisted_2$
|
|
221
|
-
const _hoisted_3$
|
|
219
|
+
const _hoisted_1$6 = { class: "flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black" };
|
|
220
|
+
const _hoisted_2$4 = { class: "flex min-w-0 flex-1 flex-col" };
|
|
221
|
+
const _hoisted_3$4 = {
|
|
222
222
|
key: 0,
|
|
223
223
|
class: "text-sm font-semibold text-gray-900 dark:text-gray-100"
|
|
224
224
|
};
|
|
225
|
-
const _hoisted_4$
|
|
225
|
+
const _hoisted_4$2 = {
|
|
226
226
|
key: 1,
|
|
227
227
|
class: "mt-1 text-sm text-gray-600 dark:text-gray-400"
|
|
228
228
|
};
|
|
229
|
-
const _sfc_main$
|
|
229
|
+
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
230
230
|
__name: "NotificationComponent",
|
|
231
231
|
props: {
|
|
232
232
|
notification: {},
|
|
@@ -293,7 +293,7 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
293
293
|
}
|
|
294
294
|
});
|
|
295
295
|
return (_ctx, _cache) => {
|
|
296
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
296
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$6, [
|
|
297
297
|
vue.createElementVNode("div", {
|
|
298
298
|
class: vue.normalizeClass([bgColor.value, "flex items-center justify-center rounded-full p-2"])
|
|
299
299
|
}, [
|
|
@@ -302,9 +302,9 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
302
302
|
icon: iconName.value
|
|
303
303
|
}, null, 8, ["class", "icon"])
|
|
304
304
|
], 2),
|
|
305
|
-
vue.createElementVNode("div", _hoisted_2$
|
|
306
|
-
__props.notification.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_3$
|
|
307
|
-
__props.notification.message ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4$
|
|
305
|
+
vue.createElementVNode("div", _hoisted_2$4, [
|
|
306
|
+
__props.notification.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_3$4, vue.toDisplayString(__props.notification.title), 1)) : vue.createCommentVNode("", true),
|
|
307
|
+
__props.notification.message ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4$2, vue.toDisplayString(__props.notification.message), 1)) : vue.createCommentVNode("", true)
|
|
308
308
|
]),
|
|
309
309
|
vue.createElementVNode("button", {
|
|
310
310
|
class: "shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400",
|
|
@@ -319,8 +319,8 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
319
319
|
};
|
|
320
320
|
}
|
|
321
321
|
});
|
|
322
|
-
const _hoisted_1$
|
|
323
|
-
const _sfc_main$
|
|
322
|
+
const _hoisted_1$5 = { class: "fixed top-5 right-5 z-50 flex flex-col gap-3" };
|
|
323
|
+
const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
324
324
|
__name: "NotificationList",
|
|
325
325
|
props: {
|
|
326
326
|
notifications: {},
|
|
@@ -331,9 +331,9 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
331
331
|
setup(__props, { emit: __emit }) {
|
|
332
332
|
const emit = __emit;
|
|
333
333
|
return (_ctx, _cache) => {
|
|
334
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
334
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
|
|
335
335
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.notifications, (notification) => {
|
|
336
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
336
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$7, {
|
|
337
337
|
key: notification.id,
|
|
338
338
|
notification,
|
|
339
339
|
"auto-dismiss": __props.autoDismiss,
|
|
@@ -345,13 +345,13 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
345
345
|
};
|
|
346
346
|
}
|
|
347
347
|
});
|
|
348
|
-
const _hoisted_1$
|
|
349
|
-
const _hoisted_2$
|
|
348
|
+
const _hoisted_1$4 = { class: "flex-1" };
|
|
349
|
+
const _hoisted_2$3 = {
|
|
350
350
|
key: 0,
|
|
351
351
|
class: "mb-1 font-medium text-gray-900 dark:text-white"
|
|
352
352
|
};
|
|
353
|
-
const _hoisted_3$
|
|
354
|
-
const _sfc_main$
|
|
353
|
+
const _hoisted_3$3 = { class: "text-sm text-gray-700 dark:text-gray-300" };
|
|
354
|
+
const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
355
355
|
__name: "Alert",
|
|
356
356
|
props: {
|
|
357
357
|
variant: { default: "info" },
|
|
@@ -403,9 +403,9 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
403
403
|
icon: __props.icon || vue.unref(styles).icon,
|
|
404
404
|
class: vue.normalizeClass(["size-5 shrink-0", vue.unref(styles).iconColor])
|
|
405
405
|
}, null, 8, ["icon", "class"]),
|
|
406
|
-
vue.createElementVNode("div", _hoisted_1$
|
|
407
|
-
__props.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_2$
|
|
408
|
-
vue.createElementVNode("div", _hoisted_3$
|
|
406
|
+
vue.createElementVNode("div", _hoisted_1$4, [
|
|
407
|
+
__props.title ? (vue.openBlock(), vue.createElementBlock("h4", _hoisted_2$3, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
|
|
408
|
+
vue.createElementVNode("div", _hoisted_3$3, [
|
|
409
409
|
vue.renderSlot(_ctx.$slots, "default")
|
|
410
410
|
])
|
|
411
411
|
]),
|
|
@@ -424,17 +424,17 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
424
424
|
};
|
|
425
425
|
}
|
|
426
426
|
});
|
|
427
|
-
const _hoisted_1$
|
|
428
|
-
const _hoisted_2$
|
|
427
|
+
const _hoisted_1$3 = { class: "py-12 text-center" };
|
|
428
|
+
const _hoisted_2$2 = {
|
|
429
429
|
key: 1,
|
|
430
430
|
class: "mb-2 text-lg font-medium text-gray-900 dark:text-white"
|
|
431
431
|
};
|
|
432
|
-
const _hoisted_3$
|
|
433
|
-
const _hoisted_4$
|
|
432
|
+
const _hoisted_3$2 = { class: "text-gray-500 dark:text-gray-400" };
|
|
433
|
+
const _hoisted_4$1 = {
|
|
434
434
|
key: 2,
|
|
435
435
|
class: "mt-4"
|
|
436
436
|
};
|
|
437
|
-
const _sfc_main$
|
|
437
|
+
const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
438
438
|
__name: "EmptyState",
|
|
439
439
|
props: {
|
|
440
440
|
message: { default: "No results found" },
|
|
@@ -443,32 +443,32 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
443
443
|
},
|
|
444
444
|
setup(__props) {
|
|
445
445
|
return (_ctx, _cache) => {
|
|
446
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
446
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
|
|
447
447
|
__props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
448
448
|
key: 0,
|
|
449
449
|
icon: __props.icon,
|
|
450
450
|
class: "mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500"
|
|
451
451
|
}, null, 8, ["icon"])) : vue.createCommentVNode("", true),
|
|
452
|
-
__props.title ? (vue.openBlock(), vue.createElementBlock("h3", _hoisted_2$
|
|
453
|
-
vue.createElementVNode("p", _hoisted_3$
|
|
452
|
+
__props.title ? (vue.openBlock(), vue.createElementBlock("h3", _hoisted_2$2, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
|
|
453
|
+
vue.createElementVNode("p", _hoisted_3$2, [
|
|
454
454
|
vue.renderSlot(_ctx.$slots, "default", {}, () => [
|
|
455
455
|
vue.createTextVNode(vue.toDisplayString(__props.message), 1)
|
|
456
456
|
])
|
|
457
457
|
]),
|
|
458
|
-
_ctx.$slots.action ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$
|
|
458
|
+
_ctx.$slots.action ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
|
|
459
459
|
vue.renderSlot(_ctx.$slots, "action")
|
|
460
460
|
])) : vue.createCommentVNode("", true)
|
|
461
461
|
]);
|
|
462
462
|
};
|
|
463
463
|
}
|
|
464
464
|
});
|
|
465
|
-
const _hoisted_1$
|
|
466
|
-
const _hoisted_2$
|
|
465
|
+
const _hoisted_1$2 = { class: "flex-1 min-w-0" };
|
|
466
|
+
const _hoisted_2$1 = {
|
|
467
467
|
key: 0,
|
|
468
468
|
class: "font-medium text-gray-900 dark:text-white"
|
|
469
469
|
};
|
|
470
|
-
const _hoisted_3$
|
|
471
|
-
const _sfc_main$
|
|
470
|
+
const _hoisted_3$1 = { class: "text-sm text-gray-700 dark:text-gray-300" };
|
|
471
|
+
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
472
472
|
__name: "Toast",
|
|
473
473
|
props: {
|
|
474
474
|
message: {},
|
|
@@ -521,9 +521,9 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
521
521
|
icon: vue.unref(config).icon,
|
|
522
522
|
class: vue.normalizeClass(["size-5 shrink-0", vue.unref(config).iconColor])
|
|
523
523
|
}, null, 8, ["icon", "class"]),
|
|
524
|
-
vue.createElementVNode("div", _hoisted_1$
|
|
525
|
-
__props.title ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$
|
|
526
|
-
vue.createElementVNode("p", _hoisted_3$
|
|
524
|
+
vue.createElementVNode("div", _hoisted_1$2, [
|
|
525
|
+
__props.title ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$1, vue.toDisplayString(__props.title), 1)) : vue.createCommentVNode("", true),
|
|
526
|
+
vue.createElementVNode("p", _hoisted_3$1, vue.toDisplayString(__props.message), 1)
|
|
527
527
|
]),
|
|
528
528
|
__props.closable ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
529
529
|
key: 0,
|
|
@@ -540,7 +540,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
540
540
|
};
|
|
541
541
|
}
|
|
542
542
|
});
|
|
543
|
-
const _sfc_main$
|
|
543
|
+
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
544
544
|
__name: "ToastContainer",
|
|
545
545
|
props: {
|
|
546
546
|
toasts: {},
|
|
@@ -583,7 +583,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
583
583
|
}, {
|
|
584
584
|
default: vue.withCtx(() => [
|
|
585
585
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.toasts, (toast) => {
|
|
586
|
-
return vue.openBlock(), vue.createBlock(_sfc_main$
|
|
586
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$3, {
|
|
587
587
|
key: toast.id,
|
|
588
588
|
message: toast.message,
|
|
589
589
|
type: toast.type,
|
|
@@ -600,14 +600,14 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
600
600
|
};
|
|
601
601
|
}
|
|
602
602
|
});
|
|
603
|
-
const _hoisted_1$
|
|
604
|
-
const _hoisted_2
|
|
603
|
+
const _hoisted_1$1 = { class: "w-full" };
|
|
604
|
+
const _hoisted_2 = {
|
|
605
605
|
key: 0,
|
|
606
606
|
class: "mb-1 flex justify-between text-sm"
|
|
607
607
|
};
|
|
608
|
-
const _hoisted_3
|
|
609
|
-
const _hoisted_4
|
|
610
|
-
const _sfc_main$
|
|
608
|
+
const _hoisted_3 = { class: "font-medium text-gray-900 dark:text-white" };
|
|
609
|
+
const _hoisted_4 = ["aria-valuenow", "aria-valuemax"];
|
|
610
|
+
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
611
611
|
__name: "Progress",
|
|
612
612
|
props: {
|
|
613
613
|
value: {},
|
|
@@ -637,10 +637,10 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
637
637
|
error: "bg-red-500"
|
|
638
638
|
};
|
|
639
639
|
return (_ctx, _cache) => {
|
|
640
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
641
|
-
__props.showLabel && !__props.indeterminate ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2
|
|
640
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
|
|
641
|
+
__props.showLabel && !__props.indeterminate ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
|
|
642
642
|
_cache[0] || (_cache[0] = vue.createElementVNode("span", { class: "text-gray-600 dark:text-gray-400" }, "Progress", -1)),
|
|
643
|
-
vue.createElementVNode("span", _hoisted_3
|
|
643
|
+
vue.createElementVNode("span", _hoisted_3, vue.toDisplayString(Math.round(percentage.value)) + "%", 1)
|
|
644
644
|
])) : vue.createCommentVNode("", true),
|
|
645
645
|
vue.createElementVNode("div", {
|
|
646
646
|
class: vue.normalizeClass([
|
|
@@ -662,17 +662,17 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
662
662
|
]),
|
|
663
663
|
style: vue.normalizeStyle({ width: __props.indeterminate ? "30%" : `${percentage.value}%` })
|
|
664
664
|
}, null, 6)
|
|
665
|
-
], 10, _hoisted_4
|
|
665
|
+
], 10, _hoisted_4)
|
|
666
666
|
]);
|
|
667
667
|
};
|
|
668
668
|
}
|
|
669
669
|
});
|
|
670
|
-
const Progress = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$
|
|
671
|
-
const _hoisted_1
|
|
670
|
+
const Progress = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$1, [["__scopeId", "data-v-546a3ae5"]]);
|
|
671
|
+
const _hoisted_1 = {
|
|
672
672
|
key: 0,
|
|
673
673
|
class: "space-y-2"
|
|
674
674
|
};
|
|
675
|
-
const _sfc_main
|
|
675
|
+
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
676
676
|
__name: "Skeleton",
|
|
677
677
|
props: {
|
|
678
678
|
variant: { default: "text" },
|
|
@@ -689,7 +689,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
689
689
|
rounded: "rounded-lg"
|
|
690
690
|
};
|
|
691
691
|
return (_ctx, _cache) => {
|
|
692
|
-
return __props.variant === "text" && __props.lines > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1
|
|
692
|
+
return __props.variant === "text" && __props.lines > 1 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
693
693
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.lines, (i) => {
|
|
694
694
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
695
695
|
key: i,
|
|
@@ -719,152 +719,15 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
719
719
|
};
|
|
720
720
|
}
|
|
721
721
|
});
|
|
722
|
-
const _hoisted_1$2 = { class: "w-full" };
|
|
723
|
-
const _hoisted_2$2 = {
|
|
724
|
-
key: 0,
|
|
725
|
-
class: "flex gap-4 px-4 py-3 border-b border-gray-200 dark:border-gray-700"
|
|
726
|
-
};
|
|
727
|
-
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
728
|
-
__name: "TableSkeleton",
|
|
729
|
-
props: {
|
|
730
|
-
rows: { default: 5 },
|
|
731
|
-
columns: { default: 4 },
|
|
732
|
-
showHeader: { type: Boolean, default: true }
|
|
733
|
-
},
|
|
734
|
-
setup(__props) {
|
|
735
|
-
return (_ctx, _cache) => {
|
|
736
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
|
|
737
|
-
__props.showHeader ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
|
|
738
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.columns, (col) => {
|
|
739
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
740
|
-
key: `header-${col}`,
|
|
741
|
-
class: "flex-1 h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse",
|
|
742
|
-
style: vue.normalizeStyle({ maxWidth: col === 1 ? "30%" : "20%" })
|
|
743
|
-
}, null, 4);
|
|
744
|
-
}), 128))
|
|
745
|
-
])) : vue.createCommentVNode("", true),
|
|
746
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.rows, (row) => {
|
|
747
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
748
|
-
key: `row-${row}`,
|
|
749
|
-
class: "flex items-center gap-4 px-4 py-4 border-b border-gray-100 dark:border-gray-800"
|
|
750
|
-
}, [
|
|
751
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.columns, (col) => {
|
|
752
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
753
|
-
key: `cell-${row}-${col}`,
|
|
754
|
-
class: "flex-1 h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse",
|
|
755
|
-
style: vue.normalizeStyle({
|
|
756
|
-
maxWidth: col === 1 ? "40%" : col === __props.columns ? "15%" : "25%",
|
|
757
|
-
opacity: 1 - row * 0.1
|
|
758
|
-
})
|
|
759
|
-
}, null, 4);
|
|
760
|
-
}), 128))
|
|
761
|
-
]);
|
|
762
|
-
}), 128))
|
|
763
|
-
]);
|
|
764
|
-
};
|
|
765
|
-
}
|
|
766
|
-
});
|
|
767
|
-
const _hoisted_1$1 = { class: "bg-white dark:bg-gray-900 rounded-lg shadow-md p-4 space-y-4" };
|
|
768
|
-
const _hoisted_2$1 = {
|
|
769
|
-
key: 0,
|
|
770
|
-
class: "flex items-center gap-3"
|
|
771
|
-
};
|
|
772
|
-
const _hoisted_3$1 = { class: "space-y-2" };
|
|
773
|
-
const _hoisted_4$1 = {
|
|
774
|
-
key: 1,
|
|
775
|
-
class: "flex justify-end gap-2 pt-2"
|
|
776
|
-
};
|
|
777
|
-
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
778
|
-
__name: "CardSkeleton",
|
|
779
|
-
props: {
|
|
780
|
-
showAvatar: { type: Boolean, default: false },
|
|
781
|
-
lines: { default: 3 },
|
|
782
|
-
showActions: { type: Boolean, default: false }
|
|
783
|
-
},
|
|
784
|
-
setup(__props) {
|
|
785
|
-
return (_ctx, _cache) => {
|
|
786
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
|
|
787
|
-
__props.showAvatar ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [..._cache[0] || (_cache[0] = [
|
|
788
|
-
vue.createElementVNode("div", { class: "w-10 h-10 rounded-full bg-gray-200 dark:bg-gray-700 animate-pulse" }, null, -1),
|
|
789
|
-
vue.createElementVNode("div", { class: "flex-1 space-y-2" }, [
|
|
790
|
-
vue.createElementVNode("div", { class: "h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse w-1/2" }),
|
|
791
|
-
vue.createElementVNode("div", { class: "h-3 bg-gray-200 dark:bg-gray-700 rounded animate-pulse w-1/3" })
|
|
792
|
-
], -1)
|
|
793
|
-
])])) : vue.createCommentVNode("", true),
|
|
794
|
-
vue.createElementVNode("div", _hoisted_3$1, [
|
|
795
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.lines, (line) => {
|
|
796
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
797
|
-
key: line,
|
|
798
|
-
class: "h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse",
|
|
799
|
-
style: vue.normalizeStyle({ width: line === __props.lines ? "60%" : "100%" })
|
|
800
|
-
}, null, 4);
|
|
801
|
-
}), 128))
|
|
802
|
-
]),
|
|
803
|
-
__props.showActions ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [..._cache[1] || (_cache[1] = [
|
|
804
|
-
vue.createElementVNode("div", { class: "h-8 w-20 bg-gray-200 dark:bg-gray-700 rounded animate-pulse" }, null, -1),
|
|
805
|
-
vue.createElementVNode("div", { class: "h-8 w-20 bg-gray-200 dark:bg-gray-700 rounded animate-pulse" }, null, -1)
|
|
806
|
-
])])) : vue.createCommentVNode("", true)
|
|
807
|
-
]);
|
|
808
|
-
};
|
|
809
|
-
}
|
|
810
|
-
});
|
|
811
|
-
const _hoisted_1 = { class: "divide-y divide-gray-200 dark:divide-gray-700" };
|
|
812
|
-
const _hoisted_2 = {
|
|
813
|
-
key: 0,
|
|
814
|
-
class: "flex-shrink-0 w-10 h-10 rounded-full bg-gray-200 dark:bg-gray-700 animate-pulse"
|
|
815
|
-
};
|
|
816
|
-
const _hoisted_3 = { class: "flex-1 min-w-0 space-y-2" };
|
|
817
|
-
const _hoisted_4 = {
|
|
818
|
-
key: 1,
|
|
819
|
-
class: "flex-shrink-0 w-8 h-8 rounded bg-gray-200 dark:bg-gray-700 animate-pulse"
|
|
820
|
-
};
|
|
821
|
-
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
822
|
-
__name: "ListSkeleton",
|
|
823
|
-
props: {
|
|
824
|
-
items: { default: 5 },
|
|
825
|
-
showAvatar: { type: Boolean, default: true },
|
|
826
|
-
showSecondary: { type: Boolean, default: true },
|
|
827
|
-
showAction: { type: Boolean, default: false }
|
|
828
|
-
},
|
|
829
|
-
setup(__props) {
|
|
830
|
-
return (_ctx, _cache) => {
|
|
831
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
832
|
-
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item) => {
|
|
833
|
-
return vue.openBlock(), vue.createElementBlock("div", {
|
|
834
|
-
key: item,
|
|
835
|
-
class: "flex items-center gap-4 py-4 px-4"
|
|
836
|
-
}, [
|
|
837
|
-
__props.showAvatar ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2)) : vue.createCommentVNode("", true),
|
|
838
|
-
vue.createElementVNode("div", _hoisted_3, [
|
|
839
|
-
vue.createElementVNode("div", {
|
|
840
|
-
class: "h-4 bg-gray-200 dark:bg-gray-700 rounded animate-pulse",
|
|
841
|
-
style: vue.normalizeStyle({ width: `${60 + Math.random() * 30}%` })
|
|
842
|
-
}, null, 4),
|
|
843
|
-
__props.showSecondary ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
844
|
-
key: 0,
|
|
845
|
-
class: "h-3 bg-gray-200 dark:bg-gray-700 rounded animate-pulse",
|
|
846
|
-
style: vue.normalizeStyle({ width: `${40 + Math.random() * 20}%` })
|
|
847
|
-
}, null, 4)) : vue.createCommentVNode("", true)
|
|
848
|
-
]),
|
|
849
|
-
__props.showAction ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4)) : vue.createCommentVNode("", true)
|
|
850
|
-
]);
|
|
851
|
-
}), 128))
|
|
852
|
-
]);
|
|
853
|
-
};
|
|
854
|
-
}
|
|
855
|
-
});
|
|
856
722
|
exports.Progress = Progress;
|
|
857
|
-
exports._sfc_main = _sfc_main$
|
|
858
|
-
exports._sfc_main$1 = _sfc_main$
|
|
859
|
-
exports._sfc_main$
|
|
860
|
-
exports._sfc_main$
|
|
861
|
-
exports._sfc_main$
|
|
862
|
-
exports._sfc_main$
|
|
863
|
-
exports._sfc_main$
|
|
864
|
-
exports._sfc_main$
|
|
865
|
-
exports._sfc_main$
|
|
866
|
-
exports._sfc_main$
|
|
867
|
-
|
|
868
|
-
exports._sfc_main$8 = _sfc_main$5;
|
|
869
|
-
exports._sfc_main$9 = _sfc_main$3;
|
|
870
|
-
//# sourceMappingURL=ListSkeleton.vue_vue_type_script_setup_true_lang-CHoagJ0-.cjs.map
|
|
723
|
+
exports._sfc_main = _sfc_main$a;
|
|
724
|
+
exports._sfc_main$1 = _sfc_main$9;
|
|
725
|
+
exports._sfc_main$2 = _sfc_main$8;
|
|
726
|
+
exports._sfc_main$3 = _sfc_main$7;
|
|
727
|
+
exports._sfc_main$4 = _sfc_main$6;
|
|
728
|
+
exports._sfc_main$5 = _sfc_main$5;
|
|
729
|
+
exports._sfc_main$6 = _sfc_main$4;
|
|
730
|
+
exports._sfc_main$7 = _sfc_main$3;
|
|
731
|
+
exports._sfc_main$8 = _sfc_main$2;
|
|
732
|
+
exports._sfc_main$9 = _sfc_main;
|
|
733
|
+
//# sourceMappingURL=Skeleton.vue_vue_type_script_setup_true_lang-CsDMGhaT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.vue_vue_type_script_setup_true_lang-CsDMGhaT.cjs","sources":["../src/components/feedback/LoadingSpinner.vue","../src/components/feedback/Modal.vue","../src/components/feedback/PaginationControls.vue","../src/components/feedback/NotificationComponent.vue","../src/components/feedback/NotificationList.vue","../src/components/feedback/Alert.vue","../src/components/feedback/EmptyState.vue","../src/components/feedback/Toast.vue","../src/components/feedback/ToastContainer.vue","../src/components/feedback/Progress.vue","../src/components/feedback/Skeleton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { SpinnerSize } from '@/types'\n\nconst { text, size = 'md' } = defineProps<{\n text?: string\n size?: SpinnerSize\n}>()\n\nconst sizeClasses: Record<SpinnerSize, string> = {\n sm: 'h-8 w-8',\n md: 'h-12 w-12',\n lg: 'h-16 w-16',\n}\n</script>\n\n<template>\n <div class=\"flex items-center justify-center py-12\">\n <div class=\"text-center\">\n <div\n :class=\"sizeClasses[size]\"\n class=\"border-primary inline-block animate-spin rounded-full border-4 border-solid border-r-transparent\"\n />\n <p\n v-if=\"text\"\n class=\"mt-4 text-gray-600 dark:text-gray-400\"\n >\n {{ text }}\n </p>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\nimport { onMounted, onUnmounted } from 'vue'\nimport type { ModalSize } from '@/types'\n\nconst {\n title = '',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n closeButtonLabel = 'Close',\n} = defineProps<{\n title?: string\n size?: ModalSize\n closeOnBackdrop?: boolean\n closeOnEscape?: boolean\n closeButtonLabel?: string\n}>()\n\nconst emit = defineEmits<{\n close: []\n}>()\n\nconst sizeClasses: Record<ModalSize, string> = {\n sm: 'max-w-md',\n default: 'max-w-3xl',\n lg: 'max-w-5xl',\n xl: 'max-w-7xl',\n full: 'max-w-full mx-4',\n}\n\nconst handleBackdropClick = () => {\n if (closeOnBackdrop) {\n emit('close')\n }\n}\n\nconst handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && closeOnEscape) {\n emit('close')\n }\n}\n\nonMounted(() => {\n document.addEventListener('keydown', handleEscape)\n document.body.style.overflow = 'hidden'\n})\n\nonUnmounted(() => {\n document.removeEventListener('keydown', handleEscape)\n document.body.style.overflow = ''\n})\n</script>\n\n<template>\n <div\n class=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50 p-4\"\n @click.self=\"handleBackdropClick\"\n >\n <div\n :class=\"sizeClasses[size]\"\n class=\"flex max-h-[90vh] w-full flex-col rounded-lg bg-white shadow-xl dark:bg-gray-900\"\n >\n <!-- Header -->\n <div\n v-if=\"title || $slots.header || $slots.title\"\n class=\"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <h3 class=\"text-xl font-semibold text-gray-900 dark:text-gray-100\">\n <slot name=\"header\">\n <slot name=\"title\">\n {{ title }}\n </slot>\n </slot>\n </h3>\n <button\n class=\"rounded-lg p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 dark:hover:bg-gray-800 dark:hover:text-gray-100\"\n type=\"button\"\n @click=\"emit('close')\"\n >\n <Icon\n class=\"h-5 w-5\"\n icon=\"lucide:x\"\n />\n <span class=\"sr-only\">{{ closeButtonLabel }}</span>\n </button>\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto px-6 py-4\">\n <slot />\n </div>\n\n <!-- Footer -->\n <div\n v-if=\"$slots.footer\"\n class=\"flex items-center justify-end gap-3 border-t border-gray-200 px-6 py-4 dark:border-gray-700\"\n >\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nconst {\r\n currentPage,\r\n totalPages,\r\n loading = false,\r\n pageSize = 10,\r\n pageSizeOptions = [10, 20, 50, 100],\r\n showPageSize = true,\r\n pageLabel = 'Page',\r\n ofLabel = 'of',\r\n itemsPerPageLabel = 'Items per page:',\r\n previousLabel = 'Previous',\r\n nextLabel = 'Next',\r\n} = defineProps<{\r\n currentPage: number\r\n totalPages: number\r\n loading?: boolean\r\n pageSize?: number\r\n pageSizeOptions?: number[]\r\n showPageSize?: boolean\r\n pageLabel?: string\r\n ofLabel?: string\r\n itemsPerPageLabel?: string\r\n previousLabel?: string\r\n nextLabel?: string\r\n}>()\r\n\r\nconst emit = defineEmits<{\r\n 'update:page': [page: number]\r\n 'update:pageSize': [size: number]\r\n}>()\r\n\r\nconst changePage = (page: number) => {\r\n if (page >= 1 && page <= totalPages && !loading) {\r\n emit('update:page', page)\r\n }\r\n}\r\n\r\nconst changePageSize = (event: Event) => {\r\n const target = event.target as HTMLSelectElement\r\n emit('update:pageSize', Number(target.value))\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"totalPages > 1\"\r\n class=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 border-t border-gray-200 px-4 sm:px-6 py-4 dark:border-gray-700\"\r\n >\r\n <!-- Info and page size -->\r\n <div class=\"flex flex-col sm:flex-row sm:items-center gap-3 sm:gap-4\">\r\n <div class=\"text-sm text-gray-700 dark:text-gray-300 text-center sm:text-left\">\r\n {{ pageLabel }} {{ currentPage }} {{ ofLabel }} {{ totalPages }}\r\n </div>\r\n <div\n v-if=\"showPageSize\"\n class=\"flex items-center justify-center sm:justify-start gap-2\"\n >\r\n <label\n class=\"text-sm text-gray-600 dark:text-gray-400 hidden sm:inline\"\n for=\"page-size\"\n >\r\n {{ itemsPerPageLabel }}\r\n </label>\r\n <select\r\n id=\"page-size\"\r\n :value=\"pageSize\"\r\n class=\"focus:border-primary focus:ring-primary rounded border border-gray-300 bg-white px-2 py-1 text-sm text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100\"\r\n @change=\"changePageSize\"\r\n >\r\n <option\n v-for=\"size in pageSizeOptions\"\n :key=\"size\"\n :value=\"size\"\n >\r\n {{ size }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!-- Navigation buttons -->\r\n <div class=\"flex justify-center sm:justify-end gap-2\">\r\n <button\r\n :disabled=\"currentPage === 1 || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage - 1)\"\r\n >\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-left\"\n />\r\n <span class=\"hidden sm:inline\">{{ previousLabel }}</span>\r\n </button>\r\n <button\r\n :disabled=\"currentPage === totalPages || loading\"\r\n class=\"focus:ring-primary inline-flex items-center gap-1 rounded-lg border border-gray-300 bg-white px-3 sm:px-4 py-2 text-sm font-medium text-gray-700 hover:bg-gray-50 disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200 dark:hover:bg-gray-700\"\r\n @click=\"changePage(currentPage + 1)\"\r\n >\r\n <span class=\"hidden sm:inline\">{{ nextLabel }}</span>\r\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:chevron-right\"\n />\r\n </button>\r\n </div>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport { computed, onMounted } from 'vue'\nimport { Icon } from '@iconify/vue'\n\nconst props = defineProps<{\n notification: Notification\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n\nconst iconName = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'lucide:check-circle'\n case 'info':\n return 'lucide:info'\n case 'warning':\n return 'lucide:alert-triangle'\n case 'error':\n return 'lucide:x-circle'\n default:\n return 'lucide:bell'\n }\n})\n\nconst iconColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'text-green-600 dark:text-green-400'\n case 'info':\n return 'text-blue-600 dark:text-blue-400'\n case 'warning':\n return 'text-yellow-600 dark:text-yellow-400'\n case 'error':\n return 'text-red-600 dark:text-red-400'\n default:\n return 'text-gray-600 dark:text-gray-400'\n }\n})\n\nconst bgColor = computed(() => {\n switch (props.notification.type) {\n case 'success':\n return 'bg-green-50 dark:bg-green-950'\n case 'info':\n return 'bg-blue-50 dark:bg-blue-950'\n case 'warning':\n return 'bg-yellow-50 dark:bg-yellow-950'\n case 'error':\n return 'bg-red-50 dark:bg-red-950'\n default:\n return 'bg-gray-50 dark:bg-gray-950'\n }\n})\n\nconst handleDismiss = () => {\n if (props.notification.id) {\n emit('dismiss', props.notification.id)\n }\n}\n\nonMounted(() => {\n const duration = props.notification.duration ?? props.duration ?? 5000\n if (props.autoDismiss !== false && duration > 0) {\n setTimeout(() => {\n handleDismiss()\n }, duration)\n }\n})\n</script>\n\n<template>\n <div\n class=\"flex max-w-md items-start space-x-3 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-800 dark:bg-black\"\n >\n <div :class=\"[bgColor, 'flex items-center justify-center rounded-full p-2']\">\n <Icon\n :class=\"iconColor\"\n :icon=\"iconName\"\n class=\"h-5 w-5\"\n />\n </div>\n\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <h4\n v-if=\"notification.title\"\n class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\"\n >\n {{ notification.title }}\n </h4>\n <p\n v-if=\"notification.message\"\n class=\"mt-1 text-sm text-gray-600 dark:text-gray-400\"\n >\n {{ notification.message }}\n </p>\n </div>\n\n <button\n class=\"shrink-0 text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-600 dark:hover:text-gray-400\"\n @click=\"handleDismiss\"\n >\n <Icon\n class=\"h-4 w-4\"\n icon=\"lucide:x\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Notification } from '@/types'\nimport NotificationComponent from './NotificationComponent.vue'\n\ndefineProps<{\n notifications: Notification[]\n autoDismiss?: boolean\n duration?: number\n}>()\n\nconst emit = defineEmits<{\n dismiss: [id: string]\n}>()\n</script>\n\n<template>\n <div class=\"fixed top-5 right-5 z-50 flex flex-col gap-3\">\n <NotificationComponent\n v-for=\"notification in notifications\"\n :key=\"notification.id\"\n :notification=\"notification\"\n :auto-dismiss=\"autoDismiss\"\n :duration=\"duration\"\n @dismiss=\"emit('dismiss', $event)\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nexport type AlertVariant = 'info' | 'success' | 'warning' | 'error'\n\nconst props = withDefaults(\n defineProps<{\n /** Alert variant */\n variant?: AlertVariant\n /** Title text */\n title?: string\n /** Show close button */\n dismissible?: boolean\n /** Custom icon */\n icon?: string\n }>(),\n {\n variant: 'info',\n },\n)\n\nconst emit = defineEmits<{\n dismiss: []\n}>()\n\nconst variantStyles: Record<AlertVariant, { bg: string; border: string; icon: string; iconColor: string }> = {\n info: {\n bg: 'bg-blue-50 dark:bg-blue-900/20',\n border: 'border-blue-200 dark:border-blue-800',\n icon: 'lucide:info',\n iconColor: 'text-blue-500',\n },\n success: {\n bg: 'bg-green-50 dark:bg-green-900/20',\n border: 'border-green-200 dark:border-green-800',\n icon: 'lucide:check-circle',\n iconColor: 'text-green-500',\n },\n warning: {\n bg: 'bg-yellow-50 dark:bg-yellow-900/20',\n border: 'border-yellow-200 dark:border-yellow-800',\n icon: 'lucide:alert-triangle',\n iconColor: 'text-yellow-500',\n },\n error: {\n bg: 'bg-red-50 dark:bg-red-900/20',\n border: 'border-red-200 dark:border-red-800',\n icon: 'lucide:alert-circle',\n iconColor: 'text-red-500',\n },\n}\n\nconst styles = variantStyles[props.variant]\n</script>\n\n<template>\n <div\n :class=\"[\n 'flex gap-3 rounded-lg border p-4',\n styles.bg,\n styles.border,\n ]\"\n role=\"alert\"\n >\n <Icon\n :icon=\"icon || styles.icon\"\n :class=\"['size-5 shrink-0', styles.iconColor]\"\n />\n <div class=\"flex-1\">\n <h4\n v-if=\"title\"\n class=\"mb-1 font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h4>\n <div class=\"text-sm text-gray-700 dark:text-gray-300\">\n <slot />\n </div>\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\n @click=\"emit('dismiss')\"\n >\n <Icon\n icon=\"lucide:x\"\n class=\"size-4\"\n />\n </button>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nwithDefaults(\n defineProps<{\n /** Message to display */\n message?: string\n /** Icon name (iconify format) */\n icon?: string\n /** Title text */\n title?: string\n }>(),\n {\n message: 'No results found',\n icon: 'lucide:inbox',\n },\n)\n</script>\n\n<template>\n <div class=\"py-12 text-center\">\n <Icon\n v-if=\"icon\"\n :icon=\"icon\"\n class=\"mx-auto mb-4 size-12 text-gray-400 dark:text-gray-500\"\n />\n <h3\n v-if=\"title\"\n class=\"mb-2 text-lg font-medium text-gray-900 dark:text-white\"\n >\n {{ title }}\n </h3>\n <p class=\"text-gray-500 dark:text-gray-400\">\n <slot>{{ message }}</slot>\n </p>\n <div\n v-if=\"$slots.action\"\n class=\"mt-4\"\n >\n <slot name=\"action\" />\n </div>\n </div>\n</template>\n","<script lang=\"ts\" setup>\r\nimport { Icon } from '@iconify/vue'\r\n\r\nexport type ToastType = 'success' | 'error' | 'warning' | 'info'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Toast message */\r\n message: string\r\n /** Toast type */\r\n type?: ToastType\r\n /** Title (optional) */\r\n title?: string\r\n /** Show close button */\r\n closable?: boolean\r\n /** Duration in ms (0 = no auto-close) */\r\n duration?: number\r\n }>(),\r\n {\r\n type: 'info',\r\n closable: true,\r\n duration: 5000,\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: []\r\n}>()\r\n\r\nconst typeConfig: Record<ToastType, { icon: string; bg: string; iconColor: string }> = {\r\n success: {\r\n icon: 'lucide:check-circle',\r\n bg: 'bg-green-50 border-green-200 dark:bg-green-900/20 dark:border-green-800',\r\n iconColor: 'text-green-500',\r\n },\r\n error: {\r\n icon: 'lucide:x-circle',\r\n bg: 'bg-red-50 border-red-200 dark:bg-red-900/20 dark:border-red-800',\r\n iconColor: 'text-red-500',\r\n },\r\n warning: {\r\n icon: 'lucide:alert-triangle',\r\n bg: 'bg-yellow-50 border-yellow-200 dark:bg-yellow-900/20 dark:border-yellow-800',\r\n iconColor: 'text-yellow-500',\r\n },\r\n info: {\r\n icon: 'lucide:info',\r\n bg: 'bg-blue-50 border-blue-200 dark:bg-blue-900/20 dark:border-blue-800',\r\n iconColor: 'text-blue-500',\r\n },\r\n}\r\n\r\nconst config = typeConfig[props.type]\r\n\r\n// Auto-close\r\nif (props.duration > 0) {\r\n setTimeout(() => {\r\n emit('close')\r\n }, props.duration)\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\r\n :class=\"[\r\n 'flex items-start gap-3 rounded-lg border p-4 shadow-lg',\r\n config.bg,\r\n ]\"\r\n role=\"alert\"\r\n >\r\n <Icon\n :icon=\"config.icon\"\n :class=\"['size-5 shrink-0', config.iconColor]\"\n />\r\n <div class=\"flex-1 min-w-0\">\r\n <p\n v-if=\"title\"\n class=\"font-medium text-gray-900 dark:text-white\"\n >\r\n {{ title }}\r\n </p>\r\n <p class=\"text-sm text-gray-700 dark:text-gray-300\">\r\n {{ message }}\r\n </p>\r\n </div>\r\n <button\r\n v-if=\"closable\"\r\n type=\"button\"\r\n class=\"shrink-0 rounded p-1 text-gray-400 hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300\"\r\n @click=\"emit('close')\"\r\n >\r\n <Icon\n icon=\"lucide:x\"\n class=\"size-4\"\n />\r\n </button>\r\n </div>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\nimport Toast from './Toast.vue'\r\nimport type { ToastType } from './Toast.vue'\r\n\r\nexport interface ToastItem {\r\n id: string\r\n message: string\r\n type?: ToastType\r\n title?: string\r\n duration?: number\r\n}\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Array of toast items */\r\n toasts: ToastItem[]\r\n /** Position of the container */\r\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center'\r\n /** Custom top offset (e.g., '80px', '5rem') to account for fixed headers */\r\n topOffset?: string\r\n }>(),\r\n {\r\n position: 'top-right',\r\n },\r\n)\r\n\r\nconst emit = defineEmits<{\r\n close: [id: string]\r\n}>()\r\n\r\nconst positionClasses: Record<string, string> = {\r\n 'top-right': 'right-4',\r\n 'top-left': 'left-4',\r\n 'bottom-right': 'bottom-4 right-4',\r\n 'bottom-left': 'bottom-4 left-4',\r\n 'top-center': 'left-1/2 -translate-x-1/2',\r\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\r\n}\r\n\r\nconst isTopPosition = computed(() => props.position?.startsWith('top'))\r\n\r\nconst topStyle = computed(() => {\r\n if (!isTopPosition.value) return {}\r\n return { top: props.topOffset || '1rem' }\r\n})\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <div :class=\"['fixed z-[9999] flex flex-col gap-2 w-full max-w-sm', positionClasses[position]]\" :style=\"topStyle\">\r\n <TransitionGroup\r\n enter-active-class=\"transition duration-300 ease-out\"\r\n enter-from-class=\"opacity-0 translate-x-4\"\r\n enter-to-class=\"opacity-100 translate-x-0\"\r\n leave-active-class=\"transition duration-200 ease-in\"\r\n leave-from-class=\"opacity-100 translate-x-0\"\r\n leave-to-class=\"opacity-0 translate-x-4\"\r\n >\r\n <Toast\r\n v-for=\"toast in toasts\"\r\n :key=\"toast.id\"\r\n :message=\"toast.message\"\r\n :type=\"toast.type\"\r\n :title=\"toast.title\"\r\n :duration=\"toast.duration\"\r\n @close=\"emit('close', toast.id)\"\r\n />\r\n </TransitionGroup>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script lang=\"ts\" setup>\r\nimport { computed } from 'vue'\r\n\r\nexport type ProgressSize = 'sm' | 'md' | 'lg'\r\nexport type ProgressVariant = 'default' | 'success' | 'warning' | 'error'\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n /** Current value (0-100) */\r\n value: number\r\n /** Maximum value */\r\n max?: number\r\n /** Size variant */\r\n size?: ProgressSize\r\n /** Color variant */\r\n variant?: ProgressVariant\r\n /** Show percentage label */\r\n showLabel?: boolean\r\n /** Striped animation */\r\n striped?: boolean\r\n /** Animated stripes */\r\n animated?: boolean\r\n /** Indeterminate state (loading) */\r\n indeterminate?: boolean\r\n }>(),\r\n {\r\n max: 100,\r\n size: 'md',\r\n variant: 'default',\r\n showLabel: false,\r\n striped: false,\r\n animated: false,\r\n indeterminate: false,\r\n },\r\n)\r\n\r\nconst percentage = computed(() => {\r\n if (props.indeterminate) return 100\r\n return Math.min(Math.max((props.value / props.max) * 100, 0), 100)\r\n})\r\n\r\nconst sizeClasses: Record<ProgressSize, string> = {\r\n sm: 'h-1',\r\n md: 'h-2',\r\n lg: 'h-4',\r\n}\r\n\r\nconst variantClasses: Record<ProgressVariant, string> = {\r\n default: 'bg-primary',\r\n success: 'bg-green-500',\r\n warning: 'bg-yellow-500',\r\n error: 'bg-red-500',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div class=\"w-full\">\r\n <div\n v-if=\"showLabel && !indeterminate\"\n class=\"mb-1 flex justify-between text-sm\"\n >\r\n <span class=\"text-gray-600 dark:text-gray-400\">Progress</span>\r\n <span class=\"font-medium text-gray-900 dark:text-white\">{{ Math.round(percentage) }}%</span>\r\n </div>\r\n <div\r\n :class=\"[\r\n 'w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700',\r\n sizeClasses[size],\r\n ]\"\r\n role=\"progressbar\"\r\n :aria-valuenow=\"indeterminate ? undefined : value\"\r\n :aria-valuemin=\"0\"\r\n :aria-valuemax=\"max\"\r\n >\r\n <div\r\n :class=\"[\r\n 'h-full rounded-full transition-all duration-300',\r\n variantClasses[variant],\r\n striped && 'bg-stripes',\r\n animated && 'animate-stripes',\r\n indeterminate && 'animate-indeterminate',\r\n ]\"\r\n :style=\"{ width: indeterminate ? '30%' : `${percentage}%` }\"\r\n />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.bg-stripes {\r\n background-image: linear-gradient(\r\n 45deg,\r\n rgba(255, 255, 255, 0.15) 25%,\r\n transparent 25%,\r\n transparent 50%,\r\n rgba(255, 255, 255, 0.15) 50%,\r\n rgba(255, 255, 255, 0.15) 75%,\r\n transparent 75%,\r\n transparent\r\n );\r\n background-size: 1rem 1rem;\r\n}\r\n\r\n.animate-stripes {\r\n animation: stripes 1s linear infinite;\r\n}\r\n\r\n@keyframes stripes {\r\n from {\r\n background-position: 1rem 0;\r\n }\r\n to {\r\n background-position: 0 0;\r\n }\r\n}\r\n\r\n.animate-indeterminate {\r\n animation: indeterminate 1.5s ease-in-out infinite;\r\n}\r\n\r\n@keyframes indeterminate {\r\n 0% {\r\n transform: translateX(-100%);\r\n }\r\n 100% {\r\n transform: translateX(400%);\r\n }\r\n}\r\n</style>\r\n","<script lang=\"ts\" setup>\r\nexport type SkeletonVariant = 'text' | 'circular' | 'rectangular' | 'rounded'\r\n\r\nwithDefaults(\r\n defineProps<{\r\n /** Variant style */\r\n variant?: SkeletonVariant\r\n /** Width (CSS value) */\r\n width?: string\r\n /** Height (CSS value) */\r\n height?: string\r\n /** Number of lines (for text variant) */\r\n lines?: number\r\n /** Animate the skeleton */\r\n animate?: boolean\r\n }>(),\r\n {\r\n variant: 'text',\r\n animate: true,\r\n lines: 1,\r\n },\r\n)\r\n\r\nconst variantClasses: Record<SkeletonVariant, string> = {\r\n text: 'h-4 rounded',\r\n circular: 'rounded-full',\r\n rectangular: '',\r\n rounded: 'rounded-lg',\r\n}\r\n</script>\r\n\r\n<template>\r\n <div\n v-if=\"variant === 'text' && lines > 1\"\n class=\"space-y-2\"\n >\r\n <div\r\n v-for=\"i in lines\"\r\n :key=\"i\"\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: i === lines ? '75%' : width || '100%',\r\n height: height,\r\n }\"\r\n />\r\n </div>\r\n <div\r\n v-else\r\n :class=\"[\r\n 'bg-gray-200 dark:bg-gray-700',\r\n variantClasses[variant],\r\n animate && 'animate-pulse',\r\n ]\"\r\n :style=\"{\r\n width: width || (variant === 'circular' ? '3rem' : '100%'),\r\n height: height || (variant === 'circular' ? '3rem' : variant === 'text' ? '1rem' : '6rem'),\r\n }\"\r\n />\r\n</template>\r\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_normalizeClass","_hoisted_3","_toDisplayString","onMounted","onUnmounted","$slots","_renderSlot","_createVNode","_unref","Icon","_hoisted_4","_hoisted_5","_Fragment","_renderList","computed","_createBlock","NotificationComponent","_Teleport","_TransitionGroup","Toast","_normalizeStyle"],"mappings":"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"}
|