cisse-vue-ui 0.5.34 → 0.7.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/dist/Button.vue_vue_type_script_setup_true_lang-CBYr0Z2_.js +99 -0
- package/dist/Button.vue_vue_type_script_setup_true_lang-CBYr0Z2_.js.map +1 -0
- package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs +98 -0
- package/dist/Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs.map +1 -0
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-CHIIi5Gu.cjs → ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs} +2 -2
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-CHIIi5Gu.cjs.map → ConfirmDialog.vue_vue_type_script_setup_true_lang-Bine-xfp.cjs.map} +1 -1
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DdCwgxtv.js → ConfirmDialog.vue_vue_type_script_setup_true_lang-DqkA1Zr-.js} +2 -2
- package/dist/{ConfirmDialog.vue_vue_type_script_setup_true_lang-DdCwgxtv.js.map → ConfirmDialog.vue_vue_type_script_setup_true_lang-DqkA1Zr-.js.map} +1 -1
- package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-0K4ucPlO.js → FilterTabs.vue_vue_type_script_setup_true_lang-C5vnz3qo.js} +411 -136
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-C5vnz3qo.js.map +1 -0
- package/dist/{DarkModeToggle.vue_vue_type_script_setup_true_lang-DOrIWBcH.cjs → FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs} +398 -123
- package/dist/FilterTabs.vue_vue_type_script_setup_true_lang-HwjuvIJX.cjs.map +1 -0
- package/dist/{Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js → ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js} +7 -102
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-BwtEbaiT.js.map +1 -0
- package/dist/{Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs → ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs} +6 -101
- package/dist/ListSkeleton.vue_vue_type_script_setup_true_lang-DtwwmfWr.cjs.map +1 -0
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-rMu1Z5uH.js → PageHero.vue_vue_type_script_setup_true_lang-C-YXGDTY.js} +244 -97
- package/dist/PageHero.vue_vue_type_script_setup_true_lang-C-YXGDTY.js.map +1 -0
- package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-hhzpkC6_.cjs → PageHero.vue_vue_type_script_setup_true_lang-CKCmOxOa.cjs} +241 -94
- package/dist/PageHero.vue_vue_type_script_setup_true_lang-CKCmOxOa.cjs.map +1 -0
- package/dist/{IconPicker.vue_vue_type_script_setup_true_lang-Ch1x6Ap9.js → TagsInput-C4wBPfrj.js} +1750 -221
- package/dist/TagsInput-C4wBPfrj.js.map +1 -0
- package/dist/{IconPicker.vue_vue_type_script_setup_true_lang-agY_E72J.cjs → TagsInput-ClqgyR9O.cjs} +1748 -219
- package/dist/TagsInput-ClqgyR9O.cjs.map +1 -0
- package/dist/cisse-vue-ui.css +10 -0
- package/dist/components/core/FilterTabs.stories.d.ts +14 -0
- package/dist/components/core/FilterTabs.test.d.ts +1 -0
- package/dist/components/core/FilterTabs.vue.d.ts +29 -0
- package/dist/components/core/StatsCard.stories.d.ts +15 -0
- package/dist/components/core/StatsCard.test.d.ts +1 -0
- package/dist/components/core/StatsCard.vue.d.ts +44 -0
- package/dist/components/core/StatsGrid.stories.d.ts +12 -0
- package/dist/components/core/StatsGrid.test.d.ts +1 -0
- package/dist/components/core/StatsGrid.vue.d.ts +16 -0
- package/dist/components/core/index.cjs +24 -21
- package/dist/components/core/index.cjs.map +1 -1
- package/dist/components/core/index.d.ts +5 -0
- package/dist/components/core/index.js +5 -2
- package/dist/components/feedback/index.cjs +5 -5
- package/dist/components/feedback/index.js +5 -5
- package/dist/components/form/EmailInput.stories.d.ts +13 -0
- package/dist/components/form/EmailInput.test.d.ts +1 -0
- package/dist/components/form/EmailInput.vue.d.ts +32 -0
- package/dist/components/form/FormActions.stories.d.ts +18 -0
- package/dist/components/form/FormActions.test.d.ts +1 -0
- package/dist/components/form/FormActions.vue.d.ts +56 -0
- package/dist/components/form/FormInput.vue.d.ts +1 -1
- package/dist/components/form/FormSection.stories.d.ts +13 -0
- package/dist/components/form/FormSection.test.d.ts +1 -0
- package/dist/components/form/FormSection.vue.d.ts +49 -0
- package/dist/components/form/InputWrapper.stories.d.ts +16 -0
- package/dist/components/form/InputWrapper.test.d.ts +1 -0
- package/dist/components/form/InputWrapper.vue.d.ts +40 -0
- package/dist/components/form/MoneyInput.stories.d.ts +16 -0
- package/dist/components/form/MoneyInput.test.d.ts +1 -0
- package/dist/components/form/MoneyInput.vue.d.ts +40 -0
- package/dist/components/form/NumberInput.stories.d.ts +14 -0
- package/dist/components/form/NumberInput.test.d.ts +1 -0
- package/dist/components/form/NumberInput.vue.d.ts +39 -0
- package/dist/components/form/OTPInput.stories.d.ts +13 -0
- package/dist/components/form/OTPInput.test.d.ts +1 -0
- package/dist/components/form/OTPInput.vue.d.ts +33 -0
- package/dist/components/form/PasswordInput.stories.d.ts +15 -0
- package/dist/components/form/PasswordInput.test.d.ts +1 -0
- package/dist/components/form/PasswordInput.vue.d.ts +36 -0
- package/dist/components/form/PercentInput.stories.d.ts +12 -0
- package/dist/components/form/PercentInput.test.d.ts +1 -0
- package/dist/components/form/PercentInput.vue.d.ts +38 -0
- package/dist/components/form/PhoneInput.stories.d.ts +13 -0
- package/dist/components/form/PhoneInput.test.d.ts +1 -0
- package/dist/components/form/PhoneInput.vue.d.ts +76 -0
- package/dist/components/form/QuantityInput.stories.d.ts +12 -0
- package/dist/components/form/QuantityInput.test.d.ts +1 -0
- package/dist/components/form/QuantityInput.vue.d.ts +32 -0
- package/dist/components/form/TagsInput.stories.d.ts +13 -0
- package/dist/components/form/TagsInput.test.d.ts +1 -0
- package/dist/components/form/TagsInput.vue.d.ts +37 -0
- package/dist/components/form/URLInput.stories.d.ts +11 -0
- package/dist/components/form/URLInput.test.d.ts +1 -0
- package/dist/components/form/URLInput.vue.d.ts +32 -0
- package/dist/components/form/index.cjs +29 -16
- package/dist/components/form/index.cjs.map +1 -1
- package/dist/components/form/index.d.ts +17 -0
- package/dist/components/form/index.js +16 -3
- package/dist/components/index.cjs +63 -45
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +35 -17
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/PageHero.stories.d.ts +11 -0
- package/dist/components/layout/PageHero.test.d.ts +1 -0
- package/dist/components/layout/PageHero.vue.d.ts +51 -0
- package/dist/components/layout/index.cjs +5 -4
- package/dist/components/layout/index.cjs.map +1 -1
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +2 -1
- package/dist/index-CRoTVc47.cjs +94 -0
- package/dist/index-CRoTVc47.cjs.map +1 -0
- package/dist/index-D49k0PP0.js +95 -0
- package/dist/index-D49k0PP0.js.map +1 -0
- package/dist/{index-BaWpldIJ.js → index-SNefWfX0.js} +3 -3
- package/dist/{index-BaWpldIJ.js.map → index-SNefWfX0.js.map} +1 -1
- package/dist/index.cjs +64 -46
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +46 -28
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/form.d.ts +4 -0
- package/package.json +1 -1
- package/dist/Button.vue_vue_type_script_setup_true_lang-BHpVJnRn.js.map +0 -1
- package/dist/Button.vue_vue_type_script_setup_true_lang-CLmHDal2.cjs.map +0 -1
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-0K4ucPlO.js.map +0 -1
- package/dist/DarkModeToggle.vue_vue_type_script_setup_true_lang-DOrIWBcH.cjs.map +0 -1
- package/dist/IconPicker.vue_vue_type_script_setup_true_lang-Ch1x6Ap9.js.map +0 -1
- package/dist/IconPicker.vue_vue_type_script_setup_true_lang-agY_E72J.cjs.map +0 -1
- package/dist/PageLayout.vue_vue_type_script_setup_true_lang-hhzpkC6_.cjs.map +0 -1
- package/dist/PageLayout.vue_vue_type_script_setup_true_lang-rMu1Z5uH.js.map +0 -1
- package/dist/index-BBUxkeI7.js +0 -77
- package/dist/index-BBUxkeI7.js.map +0 -1
- package/dist/index-BlwU8BWn.cjs +0 -76
- package/dist/index-BlwU8BWn.cjs.map +0 -1
package/dist/{IconPicker.vue_vue_type_script_setup_true_lang-Ch1x6Ap9.js → TagsInput-C4wBPfrj.js}
RENAMED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { defineComponent, createElementBlock, openBlock, renderSlot, createTextVNode, toDisplayString, mergeModels, useModel, withDirectives,
|
|
1
|
+
import { defineComponent, createElementBlock, openBlock, renderSlot, createTextVNode, toDisplayString, mergeModels, useModel, withDirectives, createBlock, createCommentVNode, unref, createElementVNode, mergeProps, vModelDynamic, computed, ref, watch, normalizeClass, createVNode, Teleport, Transition, withCtx, normalizeStyle, vModelText, Fragment, renderList, nextTick, withModifiers, withKeys, vShow, useSlots, createSlots, onMounted, TransitionGroup } from "vue";
|
|
2
2
|
import { u as useId } from "./useId-xeHj7rkg.js";
|
|
3
3
|
import { Icon } from "@iconify/vue";
|
|
4
4
|
import { u as useDropdown } from "./useDropdown-iVu14E6s.js";
|
|
5
5
|
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.js";
|
|
6
|
-
import { o as onClickOutside,
|
|
7
|
-
|
|
8
|
-
const
|
|
6
|
+
import { o as onClickOutside, a as useDebounceFn } from "./index-SNefWfX0.js";
|
|
7
|
+
import { _ as _sfc_main$s } from "./Button.vue_vue_type_script_setup_true_lang-CBYr0Z2_.js";
|
|
8
|
+
const _hoisted_1$r = ["data-error", "for"];
|
|
9
|
+
const _sfc_main$r = /* @__PURE__ */ defineComponent({
|
|
9
10
|
__name: "FormLabel",
|
|
10
11
|
props: {
|
|
11
12
|
error: { type: [String, Boolean] },
|
|
@@ -19,12 +20,12 @@ const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
|
19
20
|
class: "block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300"
|
|
20
21
|
}, [
|
|
21
22
|
renderSlot(_ctx.$slots, "default")
|
|
22
|
-
], 8, _hoisted_1$
|
|
23
|
+
], 8, _hoisted_1$r);
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
});
|
|
26
|
-
const _hoisted_1$
|
|
27
|
-
const _sfc_main$
|
|
27
|
+
const _hoisted_1$q = ["id", "data-error", "role", "aria-live"];
|
|
28
|
+
const _sfc_main$q = /* @__PURE__ */ defineComponent({
|
|
28
29
|
__name: "FormHelp",
|
|
29
30
|
props: {
|
|
30
31
|
id: {},
|
|
@@ -43,12 +44,18 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
|
43
44
|
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
44
45
|
createTextVNode(toDisplayString(__props.text ?? ""), 1)
|
|
45
46
|
])
|
|
46
|
-
], 8, _hoisted_1$
|
|
47
|
+
], 8, _hoisted_1$q);
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
});
|
|
50
|
-
const _hoisted_1$
|
|
51
|
-
|
|
51
|
+
const _hoisted_1$p = {
|
|
52
|
+
key: 0,
|
|
53
|
+
class: "relative"
|
|
54
|
+
};
|
|
55
|
+
const _hoisted_2$j = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
56
|
+
const _hoisted_3$g = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
57
|
+
const baseInputClass = "block w-full rounded-xl border border-gray-200 bg-gray-50 text-sm text-gray-900 placeholder-gray-400 transition-all focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:bg-white focus:outline-hidden disabled:border-gray-200 disabled:bg-gray-100 disabled:text-gray-500 disabled:cursor-not-allowed dark:border-slate-600 dark:bg-slate-700 dark:text-white dark:placeholder-gray-500 dark:focus:border-primary-500 dark:focus:ring-primary-500 dark:focus:bg-slate-600 dark:disabled:bg-slate-800 dark:disabled:text-gray-500";
|
|
58
|
+
const _sfc_main$p = /* @__PURE__ */ defineComponent({
|
|
52
59
|
__name: "FormInput",
|
|
53
60
|
props: /* @__PURE__ */ mergeModels({
|
|
54
61
|
type: { default: "text" },
|
|
@@ -59,7 +66,9 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
|
59
66
|
id: {},
|
|
60
67
|
name: {},
|
|
61
68
|
required: { type: Boolean },
|
|
62
|
-
describedBy: {}
|
|
69
|
+
describedBy: {},
|
|
70
|
+
icon: {},
|
|
71
|
+
iconRight: {}
|
|
63
72
|
}, {
|
|
64
73
|
"modelValue": {},
|
|
65
74
|
"modelModifiers": {}
|
|
@@ -69,9 +78,41 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
|
69
78
|
const props = __props;
|
|
70
79
|
const modelValue = useModel(__props, "modelValue");
|
|
71
80
|
return (_ctx, _cache) => {
|
|
72
|
-
return
|
|
81
|
+
return props.icon || props.iconRight ? (openBlock(), createElementBlock("div", _hoisted_1$p, [
|
|
82
|
+
props.icon ? (openBlock(), createBlock(unref(Icon), {
|
|
83
|
+
key: 0,
|
|
84
|
+
icon: props.icon,
|
|
85
|
+
class: "absolute left-3 top-1/2 -translate-y-1/2 size-5 text-gray-400 pointer-events-none"
|
|
86
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true),
|
|
87
|
+
withDirectives(createElementVNode("input", mergeProps({
|
|
88
|
+
id: props.id ?? props.name ?? "",
|
|
89
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
90
|
+
disabled: props.disabled,
|
|
91
|
+
name: props.name ?? "",
|
|
92
|
+
placeholder: props.placeholder,
|
|
93
|
+
type: props.type,
|
|
94
|
+
required: props.required,
|
|
95
|
+
"aria-invalid": props.invalid || void 0,
|
|
96
|
+
"aria-required": props.required || void 0,
|
|
97
|
+
"aria-describedby": props.describedBy || void 0,
|
|
98
|
+
class: [
|
|
99
|
+
baseInputClass,
|
|
100
|
+
"py-3",
|
|
101
|
+
props.icon ? "pl-10" : "pl-4",
|
|
102
|
+
props.iconRight ? "pr-10" : "pr-4"
|
|
103
|
+
]
|
|
104
|
+
}, _ctx.$attrs), null, 16, _hoisted_2$j), [
|
|
105
|
+
[vModelDynamic, modelValue.value]
|
|
106
|
+
]),
|
|
107
|
+
props.iconRight ? (openBlock(), createBlock(unref(Icon), {
|
|
108
|
+
key: 1,
|
|
109
|
+
icon: props.iconRight,
|
|
110
|
+
class: "absolute right-3 top-1/2 -translate-y-1/2 size-5 text-gray-400 pointer-events-none"
|
|
111
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true)
|
|
112
|
+
])) : withDirectives((openBlock(), createElementBlock("input", mergeProps({
|
|
113
|
+
key: 1,
|
|
73
114
|
id: props.id ?? props.name ?? "",
|
|
74
|
-
"onUpdate:modelValue": _cache[
|
|
115
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event),
|
|
75
116
|
disabled: props.disabled,
|
|
76
117
|
name: props.name ?? "",
|
|
77
118
|
placeholder: props.placeholder,
|
|
@@ -80,36 +121,36 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
|
80
121
|
"aria-invalid": props.invalid || void 0,
|
|
81
122
|
"aria-required": props.required || void 0,
|
|
82
123
|
"aria-describedby": props.describedBy || void 0,
|
|
83
|
-
class: "
|
|
84
|
-
}, _ctx.$attrs), null, 16,
|
|
124
|
+
class: [baseInputClass, "px-4 py-3"]
|
|
125
|
+
}, _ctx.$attrs), null, 16, _hoisted_3$g)), [
|
|
85
126
|
[vModelDynamic, modelValue.value]
|
|
86
127
|
]);
|
|
87
128
|
};
|
|
88
129
|
}
|
|
89
130
|
});
|
|
90
|
-
const _hoisted_1$
|
|
91
|
-
const _hoisted_2$
|
|
92
|
-
const _hoisted_3$
|
|
93
|
-
const _hoisted_4$
|
|
94
|
-
const _hoisted_5$
|
|
131
|
+
const _hoisted_1$o = { class: "relative" };
|
|
132
|
+
const _hoisted_2$i = ["id", "disabled", "aria-expanded", "aria-controls", "aria-invalid", "aria-describedby"];
|
|
133
|
+
const _hoisted_3$f = { class: "flex-1 truncate" };
|
|
134
|
+
const _hoisted_4$b = ["id", "aria-label"];
|
|
135
|
+
const _hoisted_5$8 = {
|
|
95
136
|
key: 0,
|
|
96
137
|
class: "sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800"
|
|
97
138
|
};
|
|
98
|
-
const _hoisted_6$
|
|
99
|
-
const _hoisted_7$
|
|
139
|
+
const _hoisted_6$8 = { class: "flex items-center gap-2 rounded-md border border-gray-300 bg-gray-50 px-2 py-1.5 dark:border-gray-600 dark:bg-gray-900" };
|
|
140
|
+
const _hoisted_7$7 = {
|
|
100
141
|
key: 1,
|
|
101
142
|
class: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400",
|
|
102
143
|
role: "status"
|
|
103
144
|
};
|
|
104
|
-
const _hoisted_8$
|
|
105
|
-
const _hoisted_9$
|
|
106
|
-
const _hoisted_10$
|
|
145
|
+
const _hoisted_8$6 = { class: "py-1" };
|
|
146
|
+
const _hoisted_9$4 = ["aria-selected", "data-index", "onClick", "onMouseenter"];
|
|
147
|
+
const _hoisted_10$4 = {
|
|
107
148
|
key: 1,
|
|
108
149
|
class: "size-4 shrink-0",
|
|
109
150
|
"aria-hidden": "true"
|
|
110
151
|
};
|
|
111
|
-
const _hoisted_11$
|
|
112
|
-
const _sfc_main$
|
|
152
|
+
const _hoisted_11$4 = { class: "flex-1" };
|
|
153
|
+
const _sfc_main$o = /* @__PURE__ */ defineComponent({
|
|
113
154
|
__name: "FormSelect",
|
|
114
155
|
props: /* @__PURE__ */ mergeModels({
|
|
115
156
|
options: {},
|
|
@@ -122,6 +163,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
122
163
|
name: {},
|
|
123
164
|
required: { type: Boolean },
|
|
124
165
|
describedBy: {},
|
|
166
|
+
icon: {},
|
|
167
|
+
iconRight: {},
|
|
125
168
|
teleport: { type: Boolean, default: true },
|
|
126
169
|
searchable: { type: Boolean, default: false },
|
|
127
170
|
noResultsText: { default: "No results found" },
|
|
@@ -227,7 +270,7 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
227
270
|
return [base, state, text, props.triggerClass];
|
|
228
271
|
});
|
|
229
272
|
return (_ctx, _cache) => {
|
|
230
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
273
|
+
return openBlock(), createElementBlock("div", _hoisted_1$o, [
|
|
231
274
|
createElementVNode("button", {
|
|
232
275
|
id: triggerId.value,
|
|
233
276
|
ref_key: "triggerRef",
|
|
@@ -247,14 +290,14 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
247
290
|
option: selectedOption.value,
|
|
248
291
|
placeholder: __props.placeholder
|
|
249
292
|
}, () => [
|
|
250
|
-
createElementVNode("span", _hoisted_3$
|
|
293
|
+
createElementVNode("span", _hoisted_3$f, toDisplayString(displayValue.value), 1)
|
|
251
294
|
]),
|
|
252
295
|
createVNode(unref(Icon), {
|
|
253
296
|
icon: "lucide:chevron-down",
|
|
254
297
|
class: normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", unref(isOpen) && "rotate-180"]),
|
|
255
298
|
"aria-hidden": "true"
|
|
256
299
|
}, null, 8, ["class"])
|
|
257
|
-
], 42, _hoisted_2$
|
|
300
|
+
], 42, _hoisted_2$i),
|
|
258
301
|
(openBlock(), createBlock(Teleport, {
|
|
259
302
|
to: "body",
|
|
260
303
|
disabled: !__props.teleport
|
|
@@ -281,8 +324,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
281
324
|
!__props.teleport && "absolute mt-1 w-full"
|
|
282
325
|
])
|
|
283
326
|
}, [
|
|
284
|
-
__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_5$
|
|
285
|
-
createElementVNode("div", _hoisted_6$
|
|
327
|
+
__props.searchable ? (openBlock(), createElementBlock("div", _hoisted_5$8, [
|
|
328
|
+
createElementVNode("div", _hoisted_6$8, [
|
|
286
329
|
createVNode(unref(Icon), {
|
|
287
330
|
icon: "lucide:search",
|
|
288
331
|
class: "size-4 text-gray-400",
|
|
@@ -302,8 +345,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
302
345
|
])
|
|
303
346
|
])
|
|
304
347
|
])) : createCommentVNode("", true),
|
|
305
|
-
filteredOptions.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_7$
|
|
306
|
-
createElementVNode("div", _hoisted_8$
|
|
348
|
+
filteredOptions.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_7$7, toDisplayString(__props.noResultsText), 1)) : createCommentVNode("", true),
|
|
349
|
+
createElementVNode("div", _hoisted_8$6, [
|
|
307
350
|
(openBlock(true), createElementBlock(Fragment, null, renderList(filteredOptions.value, (option, index) => {
|
|
308
351
|
return openBlock(), createElementBlock("button", {
|
|
309
352
|
key: String(option.value),
|
|
@@ -330,13 +373,13 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
330
373
|
icon: "lucide:check",
|
|
331
374
|
class: "size-4 shrink-0 text-primary",
|
|
332
375
|
"aria-hidden": "true"
|
|
333
|
-
})) : (openBlock(), createElementBlock("span", _hoisted_10$
|
|
334
|
-
createElementVNode("span", _hoisted_11$
|
|
376
|
+
})) : (openBlock(), createElementBlock("span", _hoisted_10$4)),
|
|
377
|
+
createElementVNode("span", _hoisted_11$4, toDisplayString(option.label), 1)
|
|
335
378
|
])
|
|
336
|
-
], 42, _hoisted_9$
|
|
379
|
+
], 42, _hoisted_9$4);
|
|
337
380
|
}), 128))
|
|
338
381
|
])
|
|
339
|
-
], 14, _hoisted_4$
|
|
382
|
+
], 14, _hoisted_4$b)) : createCommentVNode("", true)
|
|
340
383
|
]),
|
|
341
384
|
_: 3
|
|
342
385
|
})
|
|
@@ -345,8 +388,8 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
|
345
388
|
};
|
|
346
389
|
}
|
|
347
390
|
});
|
|
348
|
-
const _hoisted_1$
|
|
349
|
-
const _sfc_main$
|
|
391
|
+
const _hoisted_1$n = ["hidden"];
|
|
392
|
+
const _sfc_main$n = /* @__PURE__ */ defineComponent({
|
|
350
393
|
__name: "FormGroup",
|
|
351
394
|
props: /* @__PURE__ */ mergeModels({
|
|
352
395
|
label: {},
|
|
@@ -363,6 +406,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
363
406
|
name: {},
|
|
364
407
|
required: { type: Boolean },
|
|
365
408
|
describedBy: {},
|
|
409
|
+
icon: {},
|
|
410
|
+
iconRight: {},
|
|
366
411
|
options: {}
|
|
367
412
|
}, {
|
|
368
413
|
"modelValue": {},
|
|
@@ -385,7 +430,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
385
430
|
}, [
|
|
386
431
|
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
387
432
|
renderSlot(_ctx.$slots, "label", {}, () => [
|
|
388
|
-
__props.label ? (openBlock(), createBlock(_sfc_main$
|
|
433
|
+
__props.label ? (openBlock(), createBlock(_sfc_main$r, {
|
|
389
434
|
key: 0,
|
|
390
435
|
"html-for": inputId.value,
|
|
391
436
|
error: __props.error
|
|
@@ -397,7 +442,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
397
442
|
}, 8, ["html-for", "error"])) : createCommentVNode("", true)
|
|
398
443
|
]),
|
|
399
444
|
renderSlot(_ctx.$slots, "input", {}, () => [
|
|
400
|
-
isSelect.value ? (openBlock(), createBlock(_sfc_main$
|
|
445
|
+
isSelect.value ? (openBlock(), createBlock(_sfc_main$o, mergeProps({
|
|
401
446
|
key: 0,
|
|
402
447
|
modelValue: modelValue.value,
|
|
403
448
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event)
|
|
@@ -405,7 +450,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
405
450
|
id: inputId.value,
|
|
406
451
|
invalid: Boolean(__props.error),
|
|
407
452
|
"described-by": hasError.value ? helpId.value : void 0
|
|
408
|
-
}), null, 16, ["modelValue", "id", "invalid", "described-by"])) : (openBlock(), createBlock(_sfc_main$
|
|
453
|
+
}), null, 16, ["modelValue", "id", "invalid", "described-by"])) : (openBlock(), createBlock(_sfc_main$p, mergeProps({
|
|
409
454
|
key: 1,
|
|
410
455
|
modelValue: modelValue.value,
|
|
411
456
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event)
|
|
@@ -415,7 +460,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
415
460
|
"described-by": hasError.value ? helpId.value : void 0
|
|
416
461
|
}), null, 16, ["modelValue", "id", "invalid", "described-by"]))
|
|
417
462
|
]),
|
|
418
|
-
hasError.value ? (openBlock(), createBlock(_sfc_main$
|
|
463
|
+
hasError.value ? (openBlock(), createBlock(_sfc_main$q, {
|
|
419
464
|
key: 0,
|
|
420
465
|
id: helpId.value,
|
|
421
466
|
error: true
|
|
@@ -426,13 +471,13 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
|
426
471
|
_: 1
|
|
427
472
|
}, 8, ["id"])) : createCommentVNode("", true)
|
|
428
473
|
])
|
|
429
|
-
], 12, _hoisted_1$
|
|
474
|
+
], 12, _hoisted_1$n);
|
|
430
475
|
};
|
|
431
476
|
}
|
|
432
477
|
});
|
|
433
|
-
const _hoisted_1$
|
|
434
|
-
const _hoisted_2$
|
|
435
|
-
const _sfc_main$
|
|
478
|
+
const _hoisted_1$m = { class: "relative" };
|
|
479
|
+
const _hoisted_2$h = ["disabled", "placeholder", "value"];
|
|
480
|
+
const _sfc_main$m = /* @__PURE__ */ defineComponent({
|
|
436
481
|
__name: "SearchInput",
|
|
437
482
|
props: {
|
|
438
483
|
modelValue: {},
|
|
@@ -448,7 +493,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
|
448
493
|
emit("update:modelValue", target.value);
|
|
449
494
|
};
|
|
450
495
|
return (_ctx, _cache) => {
|
|
451
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
496
|
+
return openBlock(), createElementBlock("div", _hoisted_1$m, [
|
|
452
497
|
createVNode(unref(Icon), {
|
|
453
498
|
icon: __props.icon,
|
|
454
499
|
class: "absolute top-1/2 left-3 size-5 -translate-y-1/2 text-gray-400"
|
|
@@ -460,19 +505,19 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
|
460
505
|
class: "focus:border-primary focus:ring-primary w-full rounded-lg border border-gray-300 bg-white py-2 pr-4 pl-10 text-gray-900 placeholder-gray-400 transition-colors disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder-gray-500",
|
|
461
506
|
type: "text",
|
|
462
507
|
onInput: handleInput
|
|
463
|
-
}, null, 40, _hoisted_2$
|
|
508
|
+
}, null, 40, _hoisted_2$h)
|
|
464
509
|
]);
|
|
465
510
|
};
|
|
466
511
|
}
|
|
467
512
|
});
|
|
468
|
-
const _hoisted_1$
|
|
469
|
-
const _hoisted_2$
|
|
513
|
+
const _hoisted_1$l = ["id", "aria-checked", "aria-labelledby", "aria-describedby", "disabled"];
|
|
514
|
+
const _hoisted_2$g = {
|
|
470
515
|
key: 0,
|
|
471
516
|
class: "flex flex-col"
|
|
472
517
|
};
|
|
473
|
-
const _hoisted_3$
|
|
474
|
-
const _hoisted_4$
|
|
475
|
-
const _sfc_main$
|
|
518
|
+
const _hoisted_3$e = ["id"];
|
|
519
|
+
const _hoisted_4$a = ["id"];
|
|
520
|
+
const _sfc_main$l = /* @__PURE__ */ defineComponent({
|
|
476
521
|
__name: "Switch",
|
|
477
522
|
props: {
|
|
478
523
|
modelValue: { type: Boolean, default: false },
|
|
@@ -536,35 +581,35 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
|
536
581
|
]),
|
|
537
582
|
"aria-hidden": "true"
|
|
538
583
|
}, null, 2)
|
|
539
|
-
], 10, _hoisted_1$
|
|
540
|
-
__props.label || __props.description ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
584
|
+
], 10, _hoisted_1$l),
|
|
585
|
+
__props.label || __props.description ? (openBlock(), createElementBlock("div", _hoisted_2$g, [
|
|
541
586
|
__props.label ? (openBlock(), createElementBlock("span", {
|
|
542
587
|
key: 0,
|
|
543
588
|
id: labelId.value,
|
|
544
589
|
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
545
|
-
}, toDisplayString(__props.label), 9, _hoisted_3$
|
|
590
|
+
}, toDisplayString(__props.label), 9, _hoisted_3$e)) : createCommentVNode("", true),
|
|
546
591
|
__props.description ? (openBlock(), createElementBlock("span", {
|
|
547
592
|
key: 1,
|
|
548
593
|
id: descriptionId.value,
|
|
549
594
|
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
550
|
-
}, toDisplayString(__props.description), 9, _hoisted_4$
|
|
595
|
+
}, toDisplayString(__props.description), 9, _hoisted_4$a)) : createCommentVNode("", true)
|
|
551
596
|
])) : createCommentVNode("", true)
|
|
552
597
|
], 2);
|
|
553
598
|
};
|
|
554
599
|
}
|
|
555
600
|
});
|
|
556
|
-
const _hoisted_1$
|
|
557
|
-
const _hoisted_2$
|
|
601
|
+
const _hoisted_1$k = { class: "w-full" };
|
|
602
|
+
const _hoisted_2$f = {
|
|
558
603
|
key: 0,
|
|
559
604
|
class: "mb-2 flex justify-between text-sm"
|
|
560
605
|
};
|
|
561
|
-
const _hoisted_3$
|
|
562
|
-
const _hoisted_4$
|
|
563
|
-
const _hoisted_5$
|
|
564
|
-
const _hoisted_6$
|
|
565
|
-
const _hoisted_7$
|
|
566
|
-
const _hoisted_8$
|
|
567
|
-
const _sfc_main$
|
|
606
|
+
const _hoisted_3$d = { class: "text-gray-600 dark:text-gray-400" };
|
|
607
|
+
const _hoisted_4$9 = { class: "font-medium text-gray-900 dark:text-white" };
|
|
608
|
+
const _hoisted_5$7 = { class: "text-gray-600 dark:text-gray-400" };
|
|
609
|
+
const _hoisted_6$7 = { class: "relative" };
|
|
610
|
+
const _hoisted_7$6 = ["value", "min", "max", "step", "disabled"];
|
|
611
|
+
const _hoisted_8$5 = { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center" };
|
|
612
|
+
const _sfc_main$k = /* @__PURE__ */ defineComponent({
|
|
568
613
|
__name: "Slider",
|
|
569
614
|
props: /* @__PURE__ */ mergeModels({
|
|
570
615
|
min: { default: 0 },
|
|
@@ -595,13 +640,13 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
|
595
640
|
modelValue.value = Number(target.value);
|
|
596
641
|
};
|
|
597
642
|
return (_ctx, _cache) => {
|
|
598
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
599
|
-
__props.showValue ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
600
|
-
createElementVNode("span", _hoisted_3$
|
|
601
|
-
createElementVNode("span", _hoisted_4$
|
|
602
|
-
createElementVNode("span", _hoisted_5$
|
|
643
|
+
return openBlock(), createElementBlock("div", _hoisted_1$k, [
|
|
644
|
+
__props.showValue ? (openBlock(), createElementBlock("div", _hoisted_2$f, [
|
|
645
|
+
createElementVNode("span", _hoisted_3$d, toDisplayString(__props.min), 1),
|
|
646
|
+
createElementVNode("span", _hoisted_4$9, toDisplayString(displayValue.value), 1),
|
|
647
|
+
createElementVNode("span", _hoisted_5$7, toDisplayString(__props.max), 1)
|
|
603
648
|
])) : createCommentVNode("", true),
|
|
604
|
-
createElementVNode("div", _hoisted_6$
|
|
649
|
+
createElementVNode("div", _hoisted_6$7, [
|
|
605
650
|
createElementVNode("input", {
|
|
606
651
|
type: "range",
|
|
607
652
|
value: modelValue.value,
|
|
@@ -611,8 +656,8 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
|
611
656
|
disabled: __props.disabled,
|
|
612
657
|
class: "slider-input w-full cursor-pointer appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50",
|
|
613
658
|
onInput: handleInput
|
|
614
|
-
}, null, 40, _hoisted_7$
|
|
615
|
-
createElementVNode("div", _hoisted_8$
|
|
659
|
+
}, null, 40, _hoisted_7$6),
|
|
660
|
+
createElementVNode("div", _hoisted_8$5, [
|
|
616
661
|
createElementVNode("div", {
|
|
617
662
|
class: "h-2 rounded-full bg-primary",
|
|
618
663
|
style: normalizeStyle({ width: `${percentage.value}%` })
|
|
@@ -623,27 +668,27 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
|
623
668
|
};
|
|
624
669
|
}
|
|
625
670
|
});
|
|
626
|
-
const Slider = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
627
|
-
const _hoisted_1$
|
|
628
|
-
const _hoisted_2$
|
|
629
|
-
const _hoisted_3$
|
|
630
|
-
const _hoisted_4$
|
|
631
|
-
const _hoisted_5$
|
|
632
|
-
const _hoisted_6$
|
|
633
|
-
const _hoisted_7$
|
|
671
|
+
const Slider = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-c25e2c2a"]]);
|
|
672
|
+
const _hoisted_1$j = { class: "relative" };
|
|
673
|
+
const _hoisted_2$e = ["id", "disabled", "aria-expanded", "aria-controls"];
|
|
674
|
+
const _hoisted_3$c = { class: "flex-1 truncate" };
|
|
675
|
+
const _hoisted_4$8 = { class: "flex items-center gap-1" };
|
|
676
|
+
const _hoisted_5$6 = ["id", "aria-label"];
|
|
677
|
+
const _hoisted_6$6 = { class: "mb-4 flex items-center justify-between" };
|
|
678
|
+
const _hoisted_7$5 = {
|
|
634
679
|
class: "font-medium text-gray-900 dark:text-white",
|
|
635
680
|
"aria-live": "polite",
|
|
636
681
|
"aria-atomic": "true"
|
|
637
682
|
};
|
|
638
|
-
const _hoisted_8$
|
|
683
|
+
const _hoisted_8$4 = {
|
|
639
684
|
class: "mb-2 grid grid-cols-7 gap-1",
|
|
640
685
|
role: "row"
|
|
641
686
|
};
|
|
642
|
-
const _hoisted_9$
|
|
643
|
-
const _hoisted_10$
|
|
644
|
-
const _hoisted_11$
|
|
645
|
-
const _hoisted_12$
|
|
646
|
-
const _sfc_main$
|
|
687
|
+
const _hoisted_9$3 = ["abbr"];
|
|
688
|
+
const _hoisted_10$3 = ["id", "aria-label"];
|
|
689
|
+
const _hoisted_11$3 = ["aria-label", "aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
690
|
+
const _hoisted_12$2 = { class: "mt-4 border-t border-gray-200 pt-3 dark:border-gray-700" };
|
|
691
|
+
const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
647
692
|
__name: "DatePicker",
|
|
648
693
|
props: /* @__PURE__ */ mergeModels({
|
|
649
694
|
placeholder: { default: "Select date" },
|
|
@@ -767,7 +812,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
767
812
|
return formatter.format(date);
|
|
768
813
|
};
|
|
769
814
|
return (_ctx, _cache) => {
|
|
770
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
815
|
+
return openBlock(), createElementBlock("div", _hoisted_1$j, [
|
|
771
816
|
createElementVNode("button", {
|
|
772
817
|
id: triggerId.value,
|
|
773
818
|
ref_key: "triggerRef",
|
|
@@ -785,8 +830,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
785
830
|
onClick: _cache[0] || (_cache[0] = //@ts-ignore
|
|
786
831
|
(...args) => unref(toggle) && unref(toggle)(...args))
|
|
787
832
|
}, [
|
|
788
|
-
createElementVNode("span", _hoisted_3$
|
|
789
|
-
createElementVNode("div", _hoisted_4$
|
|
833
|
+
createElementVNode("span", _hoisted_3$c, toDisplayString(displayValue.value || __props.placeholder), 1),
|
|
834
|
+
createElementVNode("div", _hoisted_4$8, [
|
|
790
835
|
modelValue.value ? (openBlock(), createElementBlock("button", {
|
|
791
836
|
key: 0,
|
|
792
837
|
type: "button",
|
|
@@ -806,7 +851,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
806
851
|
"aria-hidden": "true"
|
|
807
852
|
})
|
|
808
853
|
])
|
|
809
|
-
], 10, _hoisted_2$
|
|
854
|
+
], 10, _hoisted_2$e),
|
|
810
855
|
(openBlock(), createBlock(Teleport, {
|
|
811
856
|
to: "body",
|
|
812
857
|
disabled: !__props.teleport
|
|
@@ -831,7 +876,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
831
876
|
style: normalizeStyle(unref(dropdownStyle)),
|
|
832
877
|
class: "z-9999 w-72 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
|
|
833
878
|
}, [
|
|
834
|
-
createElementVNode("div", _hoisted_6$
|
|
879
|
+
createElementVNode("div", _hoisted_6$6, [
|
|
835
880
|
createElementVNode("button", {
|
|
836
881
|
type: "button",
|
|
837
882
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
@@ -844,7 +889,7 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
844
889
|
"aria-hidden": "true"
|
|
845
890
|
})
|
|
846
891
|
]),
|
|
847
|
-
createElementVNode("span", _hoisted_7$
|
|
892
|
+
createElementVNode("span", _hoisted_7$5, toDisplayString(monthYear.value), 1),
|
|
848
893
|
createElementVNode("button", {
|
|
849
894
|
type: "button",
|
|
850
895
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
@@ -858,14 +903,14 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
858
903
|
})
|
|
859
904
|
])
|
|
860
905
|
]),
|
|
861
|
-
createElementVNode("div", _hoisted_8$
|
|
906
|
+
createElementVNode("div", _hoisted_8$4, [
|
|
862
907
|
(openBlock(true), createElementBlock(Fragment, null, renderList(weekDays.value, (day) => {
|
|
863
908
|
return openBlock(), createElementBlock("div", {
|
|
864
909
|
key: day,
|
|
865
910
|
class: "text-center text-xs font-medium text-gray-500 dark:text-gray-400",
|
|
866
911
|
role: "columnheader",
|
|
867
912
|
abbr: day
|
|
868
|
-
}, toDisplayString(day), 9, _hoisted_9$
|
|
913
|
+
}, toDisplayString(day), 9, _hoisted_9$3);
|
|
869
914
|
}), 128))
|
|
870
915
|
]),
|
|
871
916
|
createElementVNode("div", {
|
|
@@ -892,17 +937,17 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
892
937
|
day.isSelected && "bg-primary text-white font-semibold"
|
|
893
938
|
]),
|
|
894
939
|
onClick: ($event) => selectDate(day)
|
|
895
|
-
}, toDisplayString(day.date.getDate()), 11, _hoisted_11$
|
|
940
|
+
}, toDisplayString(day.date.getDate()), 11, _hoisted_11$3);
|
|
896
941
|
}), 128))
|
|
897
|
-
], 8, _hoisted_10$
|
|
898
|
-
createElementVNode("div", _hoisted_12$
|
|
942
|
+
], 8, _hoisted_10$3),
|
|
943
|
+
createElementVNode("div", _hoisted_12$2, [
|
|
899
944
|
createElementVNode("button", {
|
|
900
945
|
type: "button",
|
|
901
946
|
class: "w-full rounded py-1.5 text-sm font-medium text-primary hover:bg-primary/10",
|
|
902
947
|
onClick: _cache[1] || (_cache[1] = ($event) => selectDate({ date: /* @__PURE__ */ new Date(), isDisabled: false }))
|
|
903
948
|
}, " Today ")
|
|
904
949
|
])
|
|
905
|
-
], 12, _hoisted_5$
|
|
950
|
+
], 12, _hoisted_5$6)) : createCommentVNode("", true)
|
|
906
951
|
]),
|
|
907
952
|
_: 1
|
|
908
953
|
})
|
|
@@ -911,27 +956,27 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
|
911
956
|
};
|
|
912
957
|
}
|
|
913
958
|
});
|
|
914
|
-
const _hoisted_1$
|
|
915
|
-
const _hoisted_2$
|
|
916
|
-
const _hoisted_3$
|
|
917
|
-
const _hoisted_4$
|
|
918
|
-
const _hoisted_5$
|
|
959
|
+
const _hoisted_1$i = { class: "space-y-4" };
|
|
960
|
+
const _hoisted_2$d = ["accept", "multiple", "disabled"];
|
|
961
|
+
const _hoisted_3$b = { class: "space-y-2" };
|
|
962
|
+
const _hoisted_4$7 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300" };
|
|
963
|
+
const _hoisted_5$5 = {
|
|
919
964
|
key: 0,
|
|
920
965
|
class: "text-xs text-gray-500 dark:text-gray-400"
|
|
921
966
|
};
|
|
922
|
-
const _hoisted_6$
|
|
967
|
+
const _hoisted_6$5 = {
|
|
923
968
|
key: 1,
|
|
924
969
|
class: "text-xs text-gray-500 dark:text-gray-400"
|
|
925
970
|
};
|
|
926
|
-
const _hoisted_7$
|
|
971
|
+
const _hoisted_7$4 = {
|
|
927
972
|
key: 0,
|
|
928
973
|
class: "space-y-2"
|
|
929
974
|
};
|
|
930
|
-
const _hoisted_8$
|
|
931
|
-
const _hoisted_9$
|
|
932
|
-
const _hoisted_10$
|
|
933
|
-
const _hoisted_11$
|
|
934
|
-
const _sfc_main$
|
|
975
|
+
const _hoisted_8$3 = { class: "flex-1 min-w-0" };
|
|
976
|
+
const _hoisted_9$2 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300 truncate" };
|
|
977
|
+
const _hoisted_10$2 = { class: "text-xs text-gray-500 dark:text-gray-400" };
|
|
978
|
+
const _hoisted_11$2 = ["onClick"];
|
|
979
|
+
const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
935
980
|
__name: "FileUpload",
|
|
936
981
|
props: {
|
|
937
982
|
accept: {},
|
|
@@ -1059,7 +1104,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
1059
1104
|
return "heroicons:document";
|
|
1060
1105
|
};
|
|
1061
1106
|
return (_ctx, _cache) => {
|
|
1062
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
1107
|
+
return openBlock(), createElementBlock("div", _hoisted_1$i, [
|
|
1063
1108
|
createElementVNode("div", {
|
|
1064
1109
|
class: normalizeClass(dropzoneClasses.value),
|
|
1065
1110
|
onDrop: withModifiers(handleDrop, ["prevent"]),
|
|
@@ -1076,18 +1121,18 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
1076
1121
|
multiple: __props.multiple,
|
|
1077
1122
|
disabled: __props.disabled,
|
|
1078
1123
|
onChange: handleInputChange
|
|
1079
|
-
}, null, 40, _hoisted_2$
|
|
1080
|
-
createElementVNode("div", _hoisted_3$
|
|
1124
|
+
}, null, 40, _hoisted_2$d),
|
|
1125
|
+
createElementVNode("div", _hoisted_3$b, [
|
|
1081
1126
|
createVNode(unref(Icon), {
|
|
1082
1127
|
icon: "heroicons:cloud-arrow-up",
|
|
1083
1128
|
class: normalizeClass(["size-12 mx-auto text-gray-400", { "text-primary-500": isDragging.value }])
|
|
1084
1129
|
}, null, 8, ["class"]),
|
|
1085
|
-
createElementVNode("p", _hoisted_4$
|
|
1086
|
-
__props.description ? (openBlock(), createElementBlock("p", _hoisted_5$
|
|
1087
|
-
__props.maxSize ? (openBlock(), createElementBlock("p", _hoisted_6$
|
|
1130
|
+
createElementVNode("p", _hoisted_4$7, toDisplayString(__props.label), 1),
|
|
1131
|
+
__props.description ? (openBlock(), createElementBlock("p", _hoisted_5$5, toDisplayString(__props.description), 1)) : createCommentVNode("", true),
|
|
1132
|
+
__props.maxSize ? (openBlock(), createElementBlock("p", _hoisted_6$5, " Max size: " + toDisplayString(formatSize(__props.maxSize)), 1)) : createCommentVNode("", true)
|
|
1088
1133
|
])
|
|
1089
1134
|
], 34),
|
|
1090
|
-
files.value.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_7$
|
|
1135
|
+
files.value.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_7$4, [
|
|
1091
1136
|
(openBlock(true), createElementBlock(Fragment, null, renderList(files.value, (uploadedFile) => {
|
|
1092
1137
|
return openBlock(), createElementBlock("li", {
|
|
1093
1138
|
key: uploadedFile.id,
|
|
@@ -1097,9 +1142,9 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
1097
1142
|
icon: getFileIcon(uploadedFile.file),
|
|
1098
1143
|
class: "size-8 text-gray-400"
|
|
1099
1144
|
}, null, 8, ["icon"]),
|
|
1100
|
-
createElementVNode("div", _hoisted_8$
|
|
1101
|
-
createElementVNode("p", _hoisted_9$
|
|
1102
|
-
createElementVNode("p", _hoisted_10$
|
|
1145
|
+
createElementVNode("div", _hoisted_8$3, [
|
|
1146
|
+
createElementVNode("p", _hoisted_9$2, toDisplayString(uploadedFile.file.name), 1),
|
|
1147
|
+
createElementVNode("p", _hoisted_10$2, toDisplayString(formatSize(uploadedFile.file.size)), 1)
|
|
1103
1148
|
]),
|
|
1104
1149
|
createElementVNode("button", {
|
|
1105
1150
|
type: "button",
|
|
@@ -1110,7 +1155,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
1110
1155
|
icon: "heroicons:x-mark",
|
|
1111
1156
|
class: "size-5"
|
|
1112
1157
|
})
|
|
1113
|
-
], 8, _hoisted_11$
|
|
1158
|
+
], 8, _hoisted_11$2)
|
|
1114
1159
|
]);
|
|
1115
1160
|
}), 128))
|
|
1116
1161
|
])) : createCommentVNode("", true)
|
|
@@ -1118,13 +1163,13 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
1118
1163
|
};
|
|
1119
1164
|
}
|
|
1120
1165
|
});
|
|
1121
|
-
const _hoisted_1$
|
|
1122
|
-
const _hoisted_2$
|
|
1123
|
-
const _hoisted_3$
|
|
1166
|
+
const _hoisted_1$h = { class: "flex items-center gap-1" };
|
|
1167
|
+
const _hoisted_2$c = ["disabled", "onClick", "onMousemove"];
|
|
1168
|
+
const _hoisted_3$a = {
|
|
1124
1169
|
key: 0,
|
|
1125
1170
|
class: "ml-2 text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
1126
1171
|
};
|
|
1127
|
-
const _sfc_main$
|
|
1172
|
+
const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
1128
1173
|
__name: "Rating",
|
|
1129
1174
|
props: {
|
|
1130
1175
|
modelValue: { default: 0 },
|
|
@@ -1187,7 +1232,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
1187
1232
|
hoverValue.value = null;
|
|
1188
1233
|
};
|
|
1189
1234
|
return (_ctx, _cache) => {
|
|
1190
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
1235
|
+
return openBlock(), createElementBlock("div", _hoisted_1$h, [
|
|
1191
1236
|
createElementVNode("div", {
|
|
1192
1237
|
class: "flex items-center",
|
|
1193
1238
|
onMouseleave: handleMouseLeave
|
|
@@ -1219,29 +1264,29 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
|
1219
1264
|
class: normalizeClass([sizeClasses.value, __props.color])
|
|
1220
1265
|
}, null, 8, ["icon", "class"])
|
|
1221
1266
|
], 4)
|
|
1222
|
-
], 42, _hoisted_2$
|
|
1267
|
+
], 42, _hoisted_2$c);
|
|
1223
1268
|
}), 128))
|
|
1224
1269
|
], 32),
|
|
1225
|
-
__props.showValue ? (openBlock(), createElementBlock("span", _hoisted_3$
|
|
1270
|
+
__props.showValue ? (openBlock(), createElementBlock("span", _hoisted_3$a, toDisplayString(__props.modelValue.toFixed(__props.allowHalf ? 1 : 0)), 1)) : createCommentVNode("", true)
|
|
1226
1271
|
]);
|
|
1227
1272
|
};
|
|
1228
1273
|
}
|
|
1229
1274
|
});
|
|
1230
|
-
const _hoisted_1$
|
|
1231
|
-
const _hoisted_2$
|
|
1275
|
+
const _hoisted_1$g = { class: "relative inline-block" };
|
|
1276
|
+
const _hoisted_2$b = {
|
|
1232
1277
|
key: 0,
|
|
1233
1278
|
class: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"
|
|
1234
1279
|
};
|
|
1235
|
-
const _hoisted_3$
|
|
1236
|
-
const _hoisted_4$
|
|
1237
|
-
const _hoisted_5$
|
|
1238
|
-
const _hoisted_6$
|
|
1239
|
-
const _hoisted_7$
|
|
1280
|
+
const _hoisted_3$9 = ["disabled"];
|
|
1281
|
+
const _hoisted_4$6 = { class: "text-sm font-mono text-gray-700 dark:text-gray-300" };
|
|
1282
|
+
const _hoisted_5$4 = { class: "grid grid-cols-5 gap-2 mb-3" };
|
|
1283
|
+
const _hoisted_6$4 = ["title", "onClick"];
|
|
1284
|
+
const _hoisted_7$3 = {
|
|
1240
1285
|
key: 0,
|
|
1241
1286
|
class: "flex items-center gap-2 pt-3 border-t border-gray-200 dark:border-gray-700"
|
|
1242
1287
|
};
|
|
1243
|
-
const _hoisted_8$
|
|
1244
|
-
const _sfc_main$
|
|
1288
|
+
const _hoisted_8$2 = ["value"];
|
|
1289
|
+
const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
1245
1290
|
__name: "ColorPicker",
|
|
1246
1291
|
props: {
|
|
1247
1292
|
modelValue: { default: "#3b82f6" },
|
|
@@ -1310,8 +1355,8 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
1310
1355
|
isOpen.value = false;
|
|
1311
1356
|
};
|
|
1312
1357
|
return (_ctx, _cache) => {
|
|
1313
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
1314
|
-
__props.label ? (openBlock(), createElementBlock("label", _hoisted_2$
|
|
1358
|
+
return openBlock(), createElementBlock("div", _hoisted_1$g, [
|
|
1359
|
+
__props.label ? (openBlock(), createElementBlock("label", _hoisted_2$b, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
|
|
1315
1360
|
createElementVNode("button", {
|
|
1316
1361
|
type: "button",
|
|
1317
1362
|
class: normalizeClass(["flex items-center gap-2 px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-lg bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors", { "opacity-50 cursor-not-allowed": __props.disabled }]),
|
|
@@ -1322,12 +1367,12 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
1322
1367
|
class: "size-6 rounded border border-gray-200 dark:border-gray-600",
|
|
1323
1368
|
style: normalizeStyle({ backgroundColor: __props.modelValue })
|
|
1324
1369
|
}, null, 4),
|
|
1325
|
-
createElementVNode("span", _hoisted_4$
|
|
1370
|
+
createElementVNode("span", _hoisted_4$6, toDisplayString(__props.modelValue), 1),
|
|
1326
1371
|
createVNode(unref(Icon), {
|
|
1327
1372
|
icon: "heroicons:chevron-down",
|
|
1328
1373
|
class: normalizeClass(["size-4 text-gray-400", { "rotate-180": isOpen.value }])
|
|
1329
1374
|
}, null, 8, ["class"])
|
|
1330
|
-
], 10, _hoisted_3$
|
|
1375
|
+
], 10, _hoisted_3$9),
|
|
1331
1376
|
(openBlock(), createBlock(Teleport, {
|
|
1332
1377
|
to: teleportTarget.value,
|
|
1333
1378
|
disabled: teleportDisabled.value
|
|
@@ -1347,7 +1392,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
1347
1392
|
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
|
1348
1393
|
}, ["stop"]))
|
|
1349
1394
|
}, [
|
|
1350
|
-
createElementVNode("div", _hoisted_5$
|
|
1395
|
+
createElementVNode("div", _hoisted_5$4, [
|
|
1351
1396
|
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.swatches, (color) => {
|
|
1352
1397
|
return openBlock(), createElementBlock("button", {
|
|
1353
1398
|
key: color,
|
|
@@ -1366,16 +1411,16 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
1366
1411
|
["#ffffff", "#f9fafb", "#f3f4f6", "#e5e7eb", "#eab308", "#f59e0b"].includes(color) ? "text-gray-800" : "text-white"
|
|
1367
1412
|
]])
|
|
1368
1413
|
}, null, 8, ["class"])) : createCommentVNode("", true)
|
|
1369
|
-
], 14, _hoisted_6$
|
|
1414
|
+
], 14, _hoisted_6$4);
|
|
1370
1415
|
}), 128))
|
|
1371
1416
|
]),
|
|
1372
|
-
__props.showInput ? (openBlock(), createElementBlock("div", _hoisted_7$
|
|
1417
|
+
__props.showInput ? (openBlock(), createElementBlock("div", _hoisted_7$3, [
|
|
1373
1418
|
createElementVNode("input", {
|
|
1374
1419
|
type: "color",
|
|
1375
1420
|
value: __props.modelValue,
|
|
1376
1421
|
class: "size-8 rounded cursor-pointer border-0 p-0",
|
|
1377
1422
|
onInput: handleNativeInput
|
|
1378
|
-
}, null, 40, _hoisted_8$
|
|
1423
|
+
}, null, 40, _hoisted_8$2),
|
|
1379
1424
|
withDirectives(createElementVNode("input", {
|
|
1380
1425
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputValue.value = $event),
|
|
1381
1426
|
type: "text",
|
|
@@ -1401,16 +1446,16 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
|
1401
1446
|
};
|
|
1402
1447
|
}
|
|
1403
1448
|
});
|
|
1404
|
-
const _hoisted_1$
|
|
1405
|
-
const _hoisted_2$
|
|
1449
|
+
const _hoisted_1$f = { class: "space-y-2" };
|
|
1450
|
+
const _hoisted_2$a = {
|
|
1406
1451
|
key: 0,
|
|
1407
1452
|
class: "flex justify-between text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
1408
1453
|
};
|
|
1409
|
-
const _hoisted_3$
|
|
1454
|
+
const _hoisted_3$8 = {
|
|
1410
1455
|
key: 1,
|
|
1411
1456
|
class: "flex justify-between text-xs text-gray-500 dark:text-gray-400"
|
|
1412
1457
|
};
|
|
1413
|
-
const _sfc_main$
|
|
1458
|
+
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
1414
1459
|
__name: "RangeSlider",
|
|
1415
1460
|
props: {
|
|
1416
1461
|
modelValue: { default: () => [25, 75] },
|
|
@@ -1488,8 +1533,8 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
1488
1533
|
}
|
|
1489
1534
|
};
|
|
1490
1535
|
return (_ctx, _cache) => {
|
|
1491
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
1492
|
-
__props.showLabels ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
1536
|
+
return openBlock(), createElementBlock("div", _hoisted_1$f, [
|
|
1537
|
+
__props.showLabels ? (openBlock(), createElementBlock("div", _hoisted_2$a, [
|
|
1493
1538
|
createElementVNode("span", null, toDisplayString(__props.formatLabel(minValue.value)), 1),
|
|
1494
1539
|
createElementVNode("span", null, toDisplayString(__props.formatLabel(maxValue.value)), 1)
|
|
1495
1540
|
])) : createCommentVNode("", true),
|
|
@@ -1522,7 +1567,7 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
1522
1567
|
onMousedown: _cache[1] || (_cache[1] = ($event) => handleMouseDown("max"))
|
|
1523
1568
|
}, null, 38)
|
|
1524
1569
|
], 2),
|
|
1525
|
-
__props.showMinMax ? (openBlock(), createElementBlock("div", _hoisted_3$
|
|
1570
|
+
__props.showMinMax ? (openBlock(), createElementBlock("div", _hoisted_3$8, [
|
|
1526
1571
|
createElementVNode("span", null, toDisplayString(__props.formatLabel(__props.min)), 1),
|
|
1527
1572
|
createElementVNode("span", null, toDisplayString(__props.formatLabel(__props.max)), 1)
|
|
1528
1573
|
])) : createCommentVNode("", true)
|
|
@@ -1530,18 +1575,18 @@ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
|
1530
1575
|
};
|
|
1531
1576
|
}
|
|
1532
1577
|
});
|
|
1533
|
-
const _hoisted_1$
|
|
1534
|
-
const _hoisted_2$
|
|
1535
|
-
const _hoisted_3$
|
|
1536
|
-
const _hoisted_4$
|
|
1537
|
-
const _hoisted_5$
|
|
1538
|
-
const _hoisted_6$
|
|
1539
|
-
const _hoisted_7$
|
|
1578
|
+
const _hoisted_1$e = ["aria-expanded", "aria-controls"];
|
|
1579
|
+
const _hoisted_2$9 = ["id", "name", "placeholder", "disabled", "aria-controls"];
|
|
1580
|
+
const _hoisted_3$7 = { class: "flex items-center gap-1" };
|
|
1581
|
+
const _hoisted_4$5 = ["id", "aria-label", "aria-multiselectable"];
|
|
1582
|
+
const _hoisted_5$3 = ["aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
1583
|
+
const _hoisted_6$3 = { class: "flex-1" };
|
|
1584
|
+
const _hoisted_7$2 = {
|
|
1540
1585
|
key: 1,
|
|
1541
1586
|
class: "px-3 py-2 text-center text-sm text-gray-500 dark:text-gray-400",
|
|
1542
1587
|
role: "status"
|
|
1543
1588
|
};
|
|
1544
|
-
const _sfc_main$
|
|
1589
|
+
const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
1545
1590
|
__name: "Combobox",
|
|
1546
1591
|
props: {
|
|
1547
1592
|
modelValue: {},
|
|
@@ -1672,10 +1717,10 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
1672
1717
|
class: "flex-1 border-none bg-transparent text-sm text-gray-900 outline-hidden placeholder:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500",
|
|
1673
1718
|
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
|
1674
1719
|
}, ["stop"]))
|
|
1675
|
-
}, null, 8, _hoisted_2$
|
|
1720
|
+
}, null, 8, _hoisted_2$9)), [
|
|
1676
1721
|
[vModelText, search.value]
|
|
1677
1722
|
]),
|
|
1678
|
-
createElementVNode("div", _hoisted_3$
|
|
1723
|
+
createElementVNode("div", _hoisted_3$7, [
|
|
1679
1724
|
__props.clearable && selectedOptions.value.length > 0 && !__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
1680
1725
|
key: 0,
|
|
1681
1726
|
type: "button",
|
|
@@ -1698,7 +1743,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
1698
1743
|
"aria-hidden": "true"
|
|
1699
1744
|
}, null, 8, ["class"])
|
|
1700
1745
|
])
|
|
1701
|
-
], 10, _hoisted_1$
|
|
1746
|
+
], 10, _hoisted_1$e),
|
|
1702
1747
|
(openBlock(), createBlock(Teleport, {
|
|
1703
1748
|
to: teleportTarget.value,
|
|
1704
1749
|
disabled: teleportDisabled.value
|
|
@@ -1748,16 +1793,16 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
1748
1793
|
class: "size-3"
|
|
1749
1794
|
})) : createCommentVNode("", true)
|
|
1750
1795
|
], 2)) : createCommentVNode("", true),
|
|
1751
|
-
createElementVNode("span", _hoisted_6$
|
|
1796
|
+
createElementVNode("span", _hoisted_6$3, toDisplayString(option.label), 1),
|
|
1752
1797
|
!__props.multiple && isSelected(option) ? (openBlock(), createBlock(unref(Icon), {
|
|
1753
1798
|
key: 1,
|
|
1754
1799
|
icon: "lucide:check",
|
|
1755
1800
|
class: "size-4 text-primary",
|
|
1756
1801
|
"aria-hidden": "true"
|
|
1757
1802
|
})) : createCommentVNode("", true)
|
|
1758
|
-
], 10, _hoisted_5$
|
|
1759
|
-
}), 128)) : (openBlock(), createElementBlock("div", _hoisted_7$
|
|
1760
|
-
], 8, _hoisted_4$
|
|
1803
|
+
], 10, _hoisted_5$3);
|
|
1804
|
+
}), 128)) : (openBlock(), createElementBlock("div", _hoisted_7$2, toDisplayString(__props.noResultsText), 1))
|
|
1805
|
+
], 8, _hoisted_4$5)) : createCommentVNode("", true)
|
|
1761
1806
|
]),
|
|
1762
1807
|
_: 1
|
|
1763
1808
|
})
|
|
@@ -1766,30 +1811,30 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
|
1766
1811
|
};
|
|
1767
1812
|
}
|
|
1768
1813
|
});
|
|
1769
|
-
const _hoisted_1 = { class: "relative" };
|
|
1770
|
-
const _hoisted_2 = {
|
|
1814
|
+
const _hoisted_1$d = { class: "relative" };
|
|
1815
|
+
const _hoisted_2$8 = {
|
|
1771
1816
|
key: 0,
|
|
1772
1817
|
class: "text-red-500 ml-0.5"
|
|
1773
1818
|
};
|
|
1774
|
-
const _hoisted_3 = ["id", "disabled", "aria-invalid", "aria-describedby"];
|
|
1775
|
-
const _hoisted_4 = {
|
|
1819
|
+
const _hoisted_3$6 = ["id", "disabled", "aria-invalid", "aria-describedby"];
|
|
1820
|
+
const _hoisted_4$4 = {
|
|
1776
1821
|
key: 0,
|
|
1777
1822
|
class: "flex items-center gap-2 flex-1"
|
|
1778
1823
|
};
|
|
1779
|
-
const _hoisted_5 = { class: "flex
|
|
1780
|
-
const _hoisted_6 = { class: "text-gray-700 dark:text-gray-300 font-mono text-xs truncate" };
|
|
1781
|
-
const _hoisted_7 = {
|
|
1824
|
+
const _hoisted_5$2 = { class: "flex size-8 items-center justify-center rounded bg-gray-100 dark:bg-gray-800" };
|
|
1825
|
+
const _hoisted_6$2 = { class: "text-gray-700 dark:text-gray-300 font-mono text-xs truncate" };
|
|
1826
|
+
const _hoisted_7$1 = {
|
|
1782
1827
|
key: 1,
|
|
1783
1828
|
class: "flex-1 text-gray-400 dark:text-gray-500"
|
|
1784
1829
|
};
|
|
1785
|
-
const _hoisted_8 = { class: "relative mb-4" };
|
|
1786
|
-
const _hoisted_9 = ["placeholder"];
|
|
1787
|
-
const _hoisted_10 = {
|
|
1830
|
+
const _hoisted_8$1 = { class: "relative mb-4" };
|
|
1831
|
+
const _hoisted_9$1 = ["placeholder"];
|
|
1832
|
+
const _hoisted_10$1 = {
|
|
1788
1833
|
key: 0,
|
|
1789
1834
|
class: "absolute right-3 top-1/2 -translate-y-1/2"
|
|
1790
1835
|
};
|
|
1791
|
-
const _hoisted_11 = { class: "max-h-64 overflow-y-auto" };
|
|
1792
|
-
const _hoisted_12 = {
|
|
1836
|
+
const _hoisted_11$1 = { class: "max-h-64 overflow-y-auto" };
|
|
1837
|
+
const _hoisted_12$1 = {
|
|
1793
1838
|
key: 0,
|
|
1794
1839
|
class: "py-8 text-center text-sm text-gray-500"
|
|
1795
1840
|
};
|
|
@@ -1800,7 +1845,7 @@ const _hoisted_13 = {
|
|
|
1800
1845
|
const _hoisted_14 = ["title", "onClick"];
|
|
1801
1846
|
const _hoisted_15 = { class: "mt-4 flex items-center justify-between border-t border-gray-200 pt-4 dark:border-gray-700" };
|
|
1802
1847
|
const _hoisted_16 = { class: "text-xs text-gray-500" };
|
|
1803
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
1848
|
+
const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
1804
1849
|
__name: "IconPicker",
|
|
1805
1850
|
props: /* @__PURE__ */ mergeModels({
|
|
1806
1851
|
label: {},
|
|
@@ -1924,15 +1969,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1924
1969
|
searchQuery.value = "";
|
|
1925
1970
|
}
|
|
1926
1971
|
return (_ctx, _cache) => {
|
|
1927
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
1928
|
-
__props.label ? (openBlock(), createBlock(_sfc_main$
|
|
1972
|
+
return openBlock(), createElementBlock("div", _hoisted_1$d, [
|
|
1973
|
+
__props.label ? (openBlock(), createBlock(_sfc_main$r, {
|
|
1929
1974
|
key: 0,
|
|
1930
1975
|
"html-for": inputId.value,
|
|
1931
1976
|
error: __props.error
|
|
1932
1977
|
}, {
|
|
1933
1978
|
default: withCtx(() => [
|
|
1934
1979
|
createTextVNode(toDisplayString(__props.label) + " ", 1),
|
|
1935
|
-
__props.required ? (openBlock(), createElementBlock("span", _hoisted_2, "*")) : createCommentVNode("", true)
|
|
1980
|
+
__props.required ? (openBlock(), createElementBlock("span", _hoisted_2$8, "*")) : createCommentVNode("", true)
|
|
1936
1981
|
]),
|
|
1937
1982
|
_: 1
|
|
1938
1983
|
}, 8, ["html-for", "error"])) : createCommentVNode("", true),
|
|
@@ -1948,15 +1993,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1948
1993
|
]]),
|
|
1949
1994
|
onClick: openPicker
|
|
1950
1995
|
}, [
|
|
1951
|
-
modelValue.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
1952
|
-
createElementVNode("div", _hoisted_5, [
|
|
1996
|
+
modelValue.value ? (openBlock(), createElementBlock("div", _hoisted_4$4, [
|
|
1997
|
+
createElementVNode("div", _hoisted_5$2, [
|
|
1953
1998
|
createVNode(unref(Icon), {
|
|
1954
1999
|
icon: modelValue.value,
|
|
1955
|
-
class: "
|
|
2000
|
+
class: "size-5 text-gray-700 dark:text-gray-300"
|
|
1956
2001
|
}, null, 8, ["icon"])
|
|
1957
2002
|
]),
|
|
1958
|
-
createElementVNode("span", _hoisted_6, toDisplayString(modelValue.value), 1)
|
|
1959
|
-
])) : (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(__props.placeholder), 1)),
|
|
2003
|
+
createElementVNode("span", _hoisted_6$2, toDisplayString(modelValue.value), 1)
|
|
2004
|
+
])) : (openBlock(), createElementBlock("span", _hoisted_7$1, toDisplayString(__props.placeholder), 1)),
|
|
1960
2005
|
modelValue.value && !__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
1961
2006
|
key: 2,
|
|
1962
2007
|
type: "button",
|
|
@@ -1965,15 +2010,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1965
2010
|
}, [
|
|
1966
2011
|
createVNode(unref(Icon), {
|
|
1967
2012
|
icon: "lucide:x",
|
|
1968
|
-
class: "
|
|
2013
|
+
class: "size-4"
|
|
1969
2014
|
})
|
|
1970
2015
|
])) : createCommentVNode("", true),
|
|
1971
2016
|
createVNode(unref(Icon), {
|
|
1972
2017
|
icon: "lucide:chevron-down",
|
|
1973
|
-
class: "
|
|
2018
|
+
class: "size-4 text-gray-400"
|
|
1974
2019
|
})
|
|
1975
|
-
], 10, _hoisted_3),
|
|
1976
|
-
__props.help && !hasError.value ? (openBlock(), createBlock(_sfc_main$
|
|
2020
|
+
], 10, _hoisted_3$6),
|
|
2021
|
+
__props.help && !hasError.value ? (openBlock(), createBlock(_sfc_main$q, {
|
|
1977
2022
|
key: 1,
|
|
1978
2023
|
id: helpId.value
|
|
1979
2024
|
}, {
|
|
@@ -1982,7 +2027,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1982
2027
|
]),
|
|
1983
2028
|
_: 1
|
|
1984
2029
|
}, 8, ["id"])) : createCommentVNode("", true),
|
|
1985
|
-
hasError.value ? (openBlock(), createBlock(_sfc_main$
|
|
2030
|
+
hasError.value ? (openBlock(), createBlock(_sfc_main$q, {
|
|
1986
2031
|
key: 2,
|
|
1987
2032
|
id: helpId.value,
|
|
1988
2033
|
error: true
|
|
@@ -2003,10 +2048,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2003
2048
|
onClick: _cache[1] || (_cache[1] = withModifiers(() => {
|
|
2004
2049
|
}, ["stop"]))
|
|
2005
2050
|
}, [
|
|
2006
|
-
createElementVNode("div", _hoisted_8, [
|
|
2051
|
+
createElementVNode("div", _hoisted_8$1, [
|
|
2007
2052
|
createVNode(unref(Icon), {
|
|
2008
2053
|
icon: "lucide:search",
|
|
2009
|
-
class: "absolute left-3 top-1/2
|
|
2054
|
+
class: "absolute left-3 top-1/2 size-4 -translate-y-1/2 text-gray-400"
|
|
2010
2055
|
}),
|
|
2011
2056
|
withDirectives(createElementVNode("input", {
|
|
2012
2057
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
|
|
@@ -2014,23 +2059,23 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2014
2059
|
placeholder: __props.placeholder,
|
|
2015
2060
|
class: "w-full rounded-md border border-gray-300 bg-white py-2 pl-10 pr-4 text-sm text-gray-800 placeholder-gray-400 focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary dark:border-gray-700 dark:bg-gray-800 dark:text-gray-200 dark:placeholder-gray-500",
|
|
2016
2061
|
autofocus: ""
|
|
2017
|
-
}, null, 8, _hoisted_9), [
|
|
2062
|
+
}, null, 8, _hoisted_9$1), [
|
|
2018
2063
|
[vModelText, searchQuery.value]
|
|
2019
2064
|
]),
|
|
2020
|
-
isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_10, [
|
|
2065
|
+
isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_10$1, [
|
|
2021
2066
|
createVNode(unref(Icon), {
|
|
2022
2067
|
icon: "lucide:loader-2",
|
|
2023
|
-
class: "
|
|
2068
|
+
class: "size-4 animate-spin text-gray-400"
|
|
2024
2069
|
})
|
|
2025
2070
|
])) : createCommentVNode("", true)
|
|
2026
2071
|
]),
|
|
2027
|
-
createElementVNode("div", _hoisted_11, [
|
|
2028
|
-
displayedIcons.value.length === 0 && searchQuery.value ? (openBlock(), createElementBlock("div", _hoisted_12, ' Aucune icône trouvée pour "' + toDisplayString(searchQuery.value) + '" ', 1)) : (openBlock(), createElementBlock("div", _hoisted_13, [
|
|
2072
|
+
createElementVNode("div", _hoisted_11$1, [
|
|
2073
|
+
displayedIcons.value.length === 0 && searchQuery.value ? (openBlock(), createElementBlock("div", _hoisted_12$1, ' Aucune icône trouvée pour "' + toDisplayString(searchQuery.value) + '" ', 1)) : (openBlock(), createElementBlock("div", _hoisted_13, [
|
|
2029
2074
|
(openBlock(true), createElementBlock(Fragment, null, renderList(displayedIcons.value, (icon) => {
|
|
2030
2075
|
return openBlock(), createElementBlock("button", {
|
|
2031
2076
|
key: icon,
|
|
2032
2077
|
type: "button",
|
|
2033
|
-
class: normalizeClass(["flex
|
|
2078
|
+
class: normalizeClass(["flex size-9 items-center justify-center rounded transition-colors", [
|
|
2034
2079
|
modelValue.value === icon ? "bg-primary text-white" : "hover:bg-gray-100 dark:hover:bg-gray-800 text-gray-700 dark:text-gray-300"
|
|
2035
2080
|
]]),
|
|
2036
2081
|
title: icon,
|
|
@@ -2038,7 +2083,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2038
2083
|
}, [
|
|
2039
2084
|
createVNode(unref(Icon), {
|
|
2040
2085
|
icon,
|
|
2041
|
-
class: "
|
|
2086
|
+
class: "size-5"
|
|
2042
2087
|
}, null, 8, ["icon"])
|
|
2043
2088
|
], 10, _hoisted_14);
|
|
2044
2089
|
}), 128))
|
|
@@ -2059,21 +2104,1505 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
2059
2104
|
};
|
|
2060
2105
|
}
|
|
2061
2106
|
});
|
|
2107
|
+
const _hoisted_1$c = { class: "flex items-center justify-between" };
|
|
2108
|
+
const _hoisted_2$7 = { class: "flex items-center gap-3" };
|
|
2109
|
+
const _hoisted_3$5 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
|
|
2110
|
+
const _hoisted_4$3 = {
|
|
2111
|
+
key: 0,
|
|
2112
|
+
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
2113
|
+
};
|
|
2114
|
+
const _hoisted_5$1 = { class: "p-5 sm:p-6" };
|
|
2115
|
+
const _hoisted_6$1 = {
|
|
2116
|
+
key: 0,
|
|
2117
|
+
class: "px-5 py-4 bg-gray-50 dark:bg-slate-800/50 border-t border-gray-100 dark:border-slate-700"
|
|
2118
|
+
};
|
|
2119
|
+
const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
2120
|
+
__name: "FormSection",
|
|
2121
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2122
|
+
title: {},
|
|
2123
|
+
subtitle: {},
|
|
2124
|
+
icon: {},
|
|
2125
|
+
iconColor: { default: "primary" },
|
|
2126
|
+
bordered: { type: Boolean, default: true },
|
|
2127
|
+
collapsible: { type: Boolean, default: false },
|
|
2128
|
+
collapsed: { type: Boolean, default: false }
|
|
2129
|
+
}, {
|
|
2130
|
+
"collapsed": { type: Boolean, ...{ default: false } },
|
|
2131
|
+
"collapsedModifiers": {}
|
|
2132
|
+
}),
|
|
2133
|
+
emits: ["update:collapsed"],
|
|
2134
|
+
setup(__props) {
|
|
2135
|
+
const isCollapsed = useModel(__props, "collapsed");
|
|
2136
|
+
function toggleCollapse() {
|
|
2137
|
+
isCollapsed.value = !isCollapsed.value;
|
|
2138
|
+
}
|
|
2139
|
+
return (_ctx, _cache) => {
|
|
2140
|
+
return openBlock(), createElementBlock("div", {
|
|
2141
|
+
class: normalizeClass([
|
|
2142
|
+
"bg-white dark:bg-slate-800 rounded-2xl overflow-hidden",
|
|
2143
|
+
__props.bordered && "border border-gray-100 dark:border-slate-700 shadow-sm"
|
|
2144
|
+
])
|
|
2145
|
+
}, [
|
|
2146
|
+
createElementVNode("div", {
|
|
2147
|
+
class: normalizeClass([
|
|
2148
|
+
"p-5 border-b border-gray-100 dark:border-slate-700 bg-linear-to-r from-gray-50 to-white dark:from-slate-800 dark:to-slate-800",
|
|
2149
|
+
__props.collapsible && "cursor-pointer hover:bg-gray-50 dark:hover:bg-slate-700/50 transition-colors"
|
|
2150
|
+
]),
|
|
2151
|
+
onClick: _cache[0] || (_cache[0] = ($event) => __props.collapsible && toggleCollapse())
|
|
2152
|
+
}, [
|
|
2153
|
+
createElementVNode("div", _hoisted_1$c, [
|
|
2154
|
+
createElementVNode("div", _hoisted_2$7, [
|
|
2155
|
+
__props.icon ? (openBlock(), createElementBlock("div", {
|
|
2156
|
+
key: 0,
|
|
2157
|
+
class: normalizeClass([
|
|
2158
|
+
"size-10 rounded-xl flex items-center justify-center",
|
|
2159
|
+
__props.iconColor === "primary" && "bg-primary-100 dark:bg-primary-900/30",
|
|
2160
|
+
__props.iconColor === "gray" && "bg-gray-100 dark:bg-slate-700",
|
|
2161
|
+
__props.iconColor === "success" && "bg-emerald-100 dark:bg-emerald-900/30",
|
|
2162
|
+
__props.iconColor === "warning" && "bg-amber-100 dark:bg-amber-900/30",
|
|
2163
|
+
__props.iconColor === "danger" && "bg-red-100 dark:bg-red-900/30"
|
|
2164
|
+
])
|
|
2165
|
+
}, [
|
|
2166
|
+
createVNode(unref(Icon), {
|
|
2167
|
+
icon: __props.icon,
|
|
2168
|
+
class: normalizeClass([
|
|
2169
|
+
"size-5",
|
|
2170
|
+
__props.iconColor === "primary" && "text-primary-600 dark:text-primary-400",
|
|
2171
|
+
__props.iconColor === "gray" && "text-gray-600 dark:text-gray-400",
|
|
2172
|
+
__props.iconColor === "success" && "text-emerald-600 dark:text-emerald-400",
|
|
2173
|
+
__props.iconColor === "warning" && "text-amber-600 dark:text-amber-400",
|
|
2174
|
+
__props.iconColor === "danger" && "text-red-600 dark:text-red-400"
|
|
2175
|
+
])
|
|
2176
|
+
}, null, 8, ["icon", "class"])
|
|
2177
|
+
], 2)) : createCommentVNode("", true),
|
|
2178
|
+
createElementVNode("div", null, [
|
|
2179
|
+
createElementVNode("h2", _hoisted_3$5, [
|
|
2180
|
+
renderSlot(_ctx.$slots, "title", {}, () => [
|
|
2181
|
+
createTextVNode(toDisplayString(__props.title), 1)
|
|
2182
|
+
])
|
|
2183
|
+
]),
|
|
2184
|
+
__props.subtitle ? (openBlock(), createElementBlock("p", _hoisted_4$3, [
|
|
2185
|
+
renderSlot(_ctx.$slots, "subtitle", {}, () => [
|
|
2186
|
+
createTextVNode(toDisplayString(__props.subtitle), 1)
|
|
2187
|
+
])
|
|
2188
|
+
])) : createCommentVNode("", true)
|
|
2189
|
+
])
|
|
2190
|
+
]),
|
|
2191
|
+
__props.collapsible ? (openBlock(), createElementBlock("button", {
|
|
2192
|
+
key: 0,
|
|
2193
|
+
type: "button",
|
|
2194
|
+
class: "p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-slate-700 transition-colors",
|
|
2195
|
+
onClick: withModifiers(toggleCollapse, ["stop"])
|
|
2196
|
+
}, [
|
|
2197
|
+
createVNode(unref(Icon), {
|
|
2198
|
+
icon: "heroicons:chevron-down",
|
|
2199
|
+
class: normalizeClass([
|
|
2200
|
+
"w-5 h-5 text-gray-400 transition-transform duration-200",
|
|
2201
|
+
isCollapsed.value && "-rotate-90"
|
|
2202
|
+
])
|
|
2203
|
+
}, null, 8, ["class"])
|
|
2204
|
+
])) : createCommentVNode("", true),
|
|
2205
|
+
renderSlot(_ctx.$slots, "header-actions")
|
|
2206
|
+
])
|
|
2207
|
+
], 2),
|
|
2208
|
+
withDirectives(createElementVNode("div", _hoisted_5$1, [
|
|
2209
|
+
renderSlot(_ctx.$slots, "default")
|
|
2210
|
+
], 512), [
|
|
2211
|
+
[vShow, !isCollapsed.value]
|
|
2212
|
+
]),
|
|
2213
|
+
_ctx.$slots.footer ? withDirectives((openBlock(), createElementBlock("div", _hoisted_6$1, [
|
|
2214
|
+
renderSlot(_ctx.$slots, "footer")
|
|
2215
|
+
], 512)), [
|
|
2216
|
+
[vShow, !isCollapsed.value]
|
|
2217
|
+
]) : createCommentVNode("", true)
|
|
2218
|
+
], 2);
|
|
2219
|
+
};
|
|
2220
|
+
}
|
|
2221
|
+
});
|
|
2222
|
+
const _hoisted_1$b = { key: 1 };
|
|
2223
|
+
const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
2224
|
+
__name: "FormActions",
|
|
2225
|
+
props: {
|
|
2226
|
+
submitLabel: { default: "Enregistrer" },
|
|
2227
|
+
cancelLabel: { default: "Annuler" },
|
|
2228
|
+
submitIcon: { default: "heroicons:check" },
|
|
2229
|
+
cancelIcon: { default: "heroicons:x-mark" },
|
|
2230
|
+
loading: { type: Boolean },
|
|
2231
|
+
loadingLabel: {},
|
|
2232
|
+
disabled: { type: Boolean },
|
|
2233
|
+
showCancel: { type: Boolean, default: true },
|
|
2234
|
+
align: { default: "right" },
|
|
2235
|
+
stackOnMobile: { type: Boolean, default: false },
|
|
2236
|
+
submitVariant: { default: "primary" }
|
|
2237
|
+
},
|
|
2238
|
+
emits: ["submit", "cancel"],
|
|
2239
|
+
setup(__props, { emit: __emit }) {
|
|
2240
|
+
const emit = __emit;
|
|
2241
|
+
return (_ctx, _cache) => {
|
|
2242
|
+
return openBlock(), createElementBlock("div", {
|
|
2243
|
+
class: normalizeClass([
|
|
2244
|
+
"flex gap-3 pt-2",
|
|
2245
|
+
__props.align === "left" && "justify-start",
|
|
2246
|
+
__props.align === "center" && "justify-center",
|
|
2247
|
+
__props.align === "right" && "justify-end",
|
|
2248
|
+
__props.align === "stretch" && "[&>*]:flex-1",
|
|
2249
|
+
__props.stackOnMobile && "flex-col sm:flex-row"
|
|
2250
|
+
])
|
|
2251
|
+
}, [
|
|
2252
|
+
__props.showCancel ? (openBlock(), createBlock(_sfc_main$s, {
|
|
2253
|
+
key: 0,
|
|
2254
|
+
type: "button",
|
|
2255
|
+
variant: "outline",
|
|
2256
|
+
disabled: __props.loading,
|
|
2257
|
+
class: normalizeClass([
|
|
2258
|
+
__props.stackOnMobile && "order-2 sm:order-1"
|
|
2259
|
+
]),
|
|
2260
|
+
onClick: _cache[0] || (_cache[0] = ($event) => emit("cancel"))
|
|
2261
|
+
}, {
|
|
2262
|
+
default: withCtx(() => [
|
|
2263
|
+
__props.cancelIcon ? (openBlock(), createBlock(unref(Icon), {
|
|
2264
|
+
key: 0,
|
|
2265
|
+
icon: __props.cancelIcon,
|
|
2266
|
+
class: "w-5 h-5"
|
|
2267
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true),
|
|
2268
|
+
createTextVNode(" " + toDisplayString(__props.cancelLabel), 1)
|
|
2269
|
+
]),
|
|
2270
|
+
_: 1
|
|
2271
|
+
}, 8, ["disabled", "class"])) : createCommentVNode("", true),
|
|
2272
|
+
createVNode(_sfc_main$s, {
|
|
2273
|
+
type: "submit",
|
|
2274
|
+
variant: __props.submitVariant,
|
|
2275
|
+
disabled: __props.disabled || __props.loading,
|
|
2276
|
+
loading: __props.loading,
|
|
2277
|
+
class: normalizeClass([
|
|
2278
|
+
__props.stackOnMobile && "order-1 sm:order-2"
|
|
2279
|
+
]),
|
|
2280
|
+
onClick: _cache[1] || (_cache[1] = ($event) => emit("submit"))
|
|
2281
|
+
}, {
|
|
2282
|
+
default: withCtx(() => [
|
|
2283
|
+
!__props.loading ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
2284
|
+
__props.submitIcon ? (openBlock(), createBlock(unref(Icon), {
|
|
2285
|
+
key: 0,
|
|
2286
|
+
icon: __props.submitIcon,
|
|
2287
|
+
class: "w-5 h-5"
|
|
2288
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true),
|
|
2289
|
+
createTextVNode(" " + toDisplayString(__props.submitLabel), 1)
|
|
2290
|
+
], 64)) : (openBlock(), createElementBlock("span", _hoisted_1$b, toDisplayString(__props.loadingLabel || __props.submitLabel + "..."), 1))
|
|
2291
|
+
]),
|
|
2292
|
+
_: 1
|
|
2293
|
+
}, 8, ["variant", "disabled", "loading", "class"]),
|
|
2294
|
+
renderSlot(_ctx.$slots, "extra")
|
|
2295
|
+
], 2);
|
|
2296
|
+
};
|
|
2297
|
+
}
|
|
2298
|
+
});
|
|
2299
|
+
const _hoisted_1$a = {
|
|
2300
|
+
key: 0,
|
|
2301
|
+
class: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-gray-400"
|
|
2302
|
+
};
|
|
2303
|
+
const _hoisted_2$6 = {
|
|
2304
|
+
key: 1,
|
|
2305
|
+
class: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1"
|
|
2306
|
+
};
|
|
2307
|
+
const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
2308
|
+
__name: "InputWrapper",
|
|
2309
|
+
props: {
|
|
2310
|
+
icon: {},
|
|
2311
|
+
iconRight: {},
|
|
2312
|
+
size: { default: "md" },
|
|
2313
|
+
invalid: { type: Boolean },
|
|
2314
|
+
disabled: { type: Boolean },
|
|
2315
|
+
wrapperClass: {}
|
|
2316
|
+
},
|
|
2317
|
+
setup(__props, { expose: __expose }) {
|
|
2318
|
+
const props = __props;
|
|
2319
|
+
const slots = useSlots();
|
|
2320
|
+
const hasLeftIcon = computed(() => props.icon || slots.icon);
|
|
2321
|
+
const hasRightContent = computed(() => props.iconRight || slots.actions);
|
|
2322
|
+
const inputClass = computed(() => [
|
|
2323
|
+
// Base styles
|
|
2324
|
+
"block w-full rounded-xl border text-sm transition-all",
|
|
2325
|
+
"border-gray-200 bg-gray-50 text-gray-900 placeholder-gray-400",
|
|
2326
|
+
"focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:bg-white focus:outline-hidden",
|
|
2327
|
+
"disabled:border-gray-200 disabled:bg-gray-100 disabled:text-gray-500 disabled:cursor-not-allowed",
|
|
2328
|
+
// Dark mode
|
|
2329
|
+
"dark:border-slate-600 dark:bg-slate-700 dark:text-white dark:placeholder-gray-500",
|
|
2330
|
+
"dark:focus:border-primary-500 dark:focus:ring-primary-500 dark:focus:bg-slate-600",
|
|
2331
|
+
"dark:disabled:bg-slate-800 dark:disabled:text-gray-500",
|
|
2332
|
+
// Padding based on icons/actions
|
|
2333
|
+
hasLeftIcon.value ? "pl-10" : "pl-4",
|
|
2334
|
+
hasRightContent.value ? "pr-10" : "pr-4",
|
|
2335
|
+
// Size
|
|
2336
|
+
props.size === "sm" && "py-2 text-xs",
|
|
2337
|
+
props.size === "md" && "py-3 text-sm",
|
|
2338
|
+
props.size === "lg" && "py-4 text-base",
|
|
2339
|
+
// Invalid state
|
|
2340
|
+
props.invalid && "border-red-500 focus:border-red-500 focus:ring-red-500 dark:border-red-500"
|
|
2341
|
+
]);
|
|
2342
|
+
__expose({ inputClass });
|
|
2343
|
+
return (_ctx, _cache) => {
|
|
2344
|
+
return openBlock(), createElementBlock("div", {
|
|
2345
|
+
class: normalizeClass(["relative", __props.wrapperClass])
|
|
2346
|
+
}, [
|
|
2347
|
+
hasLeftIcon.value ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
|
|
2348
|
+
renderSlot(_ctx.$slots, "icon", {}, () => [
|
|
2349
|
+
__props.icon ? (openBlock(), createBlock(unref(Icon), {
|
|
2350
|
+
key: 0,
|
|
2351
|
+
icon: __props.icon,
|
|
2352
|
+
class: "size-5"
|
|
2353
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true)
|
|
2354
|
+
])
|
|
2355
|
+
])) : createCommentVNode("", true),
|
|
2356
|
+
renderSlot(_ctx.$slots, "default", { inputClass: inputClass.value }),
|
|
2357
|
+
hasRightContent.value ? (openBlock(), createElementBlock("div", _hoisted_2$6, [
|
|
2358
|
+
renderSlot(_ctx.$slots, "actions", {}, () => [
|
|
2359
|
+
__props.iconRight ? (openBlock(), createBlock(unref(Icon), {
|
|
2360
|
+
key: 0,
|
|
2361
|
+
icon: __props.iconRight,
|
|
2362
|
+
class: "size-5 text-gray-400 pointer-events-none"
|
|
2363
|
+
}, null, 8, ["icon"])) : createCommentVNode("", true)
|
|
2364
|
+
])
|
|
2365
|
+
])) : createCommentVNode("", true)
|
|
2366
|
+
], 2);
|
|
2367
|
+
};
|
|
2368
|
+
}
|
|
2369
|
+
});
|
|
2370
|
+
const _hoisted_1$9 = ["id", "name", "placeholder", "disabled", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
2371
|
+
const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
2372
|
+
__name: "EmailInput",
|
|
2373
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2374
|
+
placeholder: { default: "Enter email address..." },
|
|
2375
|
+
size: { default: "md" },
|
|
2376
|
+
disabled: { type: Boolean },
|
|
2377
|
+
showValidation: { type: Boolean, default: true },
|
|
2378
|
+
name: {},
|
|
2379
|
+
id: {},
|
|
2380
|
+
required: { type: Boolean },
|
|
2381
|
+
describedBy: {}
|
|
2382
|
+
}, {
|
|
2383
|
+
"modelValue": { default: "" },
|
|
2384
|
+
"modelModifiers": {}
|
|
2385
|
+
}),
|
|
2386
|
+
emits: ["update:modelValue"],
|
|
2387
|
+
setup(__props) {
|
|
2388
|
+
const props = __props;
|
|
2389
|
+
const modelValue = useModel(__props, "modelValue");
|
|
2390
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
2391
|
+
const isValid = computed(() => {
|
|
2392
|
+
if (!modelValue.value) return null;
|
|
2393
|
+
return emailRegex.test(modelValue.value);
|
|
2394
|
+
});
|
|
2395
|
+
const isTouched = ref(false);
|
|
2396
|
+
const showStatus = computed(() => {
|
|
2397
|
+
return props.showValidation && isTouched.value && !!modelValue.value;
|
|
2398
|
+
});
|
|
2399
|
+
function handleBlur() {
|
|
2400
|
+
isTouched.value = true;
|
|
2401
|
+
}
|
|
2402
|
+
return (_ctx, _cache) => {
|
|
2403
|
+
return openBlock(), createBlock(_sfc_main$a, {
|
|
2404
|
+
icon: "lucide:mail",
|
|
2405
|
+
size: __props.size,
|
|
2406
|
+
disabled: __props.disabled,
|
|
2407
|
+
invalid: showStatus.value && isValid.value === false
|
|
2408
|
+
}, {
|
|
2409
|
+
default: withCtx(({ inputClass }) => [
|
|
2410
|
+
withDirectives(createElementVNode("input", {
|
|
2411
|
+
id: __props.id ?? __props.name,
|
|
2412
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
2413
|
+
type: "email",
|
|
2414
|
+
name: __props.name,
|
|
2415
|
+
placeholder: __props.placeholder,
|
|
2416
|
+
disabled: __props.disabled,
|
|
2417
|
+
required: __props.required,
|
|
2418
|
+
"aria-invalid": showStatus.value && isValid.value === false || void 0,
|
|
2419
|
+
"aria-required": __props.required || void 0,
|
|
2420
|
+
"aria-describedby": __props.describedBy,
|
|
2421
|
+
class: normalizeClass(inputClass),
|
|
2422
|
+
onBlur: handleBlur
|
|
2423
|
+
}, null, 42, _hoisted_1$9), [
|
|
2424
|
+
[vModelText, modelValue.value]
|
|
2425
|
+
])
|
|
2426
|
+
]),
|
|
2427
|
+
actions: withCtx(() => [
|
|
2428
|
+
showStatus.value && isValid.value ? (openBlock(), createBlock(unref(Icon), {
|
|
2429
|
+
key: 0,
|
|
2430
|
+
icon: "lucide:check-circle",
|
|
2431
|
+
class: "size-5 text-emerald-500"
|
|
2432
|
+
})) : showStatus.value && isValid.value === false ? (openBlock(), createBlock(unref(Icon), {
|
|
2433
|
+
key: 1,
|
|
2434
|
+
icon: "lucide:alert-circle",
|
|
2435
|
+
class: "size-5 text-red-500"
|
|
2436
|
+
})) : createCommentVNode("", true)
|
|
2437
|
+
]),
|
|
2438
|
+
_: 1
|
|
2439
|
+
}, 8, ["size", "disabled", "invalid"]);
|
|
2440
|
+
};
|
|
2441
|
+
}
|
|
2442
|
+
});
|
|
2443
|
+
const _hoisted_1$8 = ["id", "type", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2444
|
+
const _hoisted_2$5 = ["disabled"];
|
|
2445
|
+
const _hoisted_3$4 = {
|
|
2446
|
+
key: 0,
|
|
2447
|
+
class: "mt-2"
|
|
2448
|
+
};
|
|
2449
|
+
const _hoisted_4$2 = { class: "h-1.5 w-full rounded-full bg-gray-200 dark:bg-slate-700 overflow-hidden" };
|
|
2450
|
+
const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
2451
|
+
__name: "PasswordInput",
|
|
2452
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2453
|
+
placeholder: { default: "Enter password..." },
|
|
2454
|
+
size: { default: "md" },
|
|
2455
|
+
disabled: { type: Boolean },
|
|
2456
|
+
showStrength: { type: Boolean, default: false },
|
|
2457
|
+
name: {},
|
|
2458
|
+
id: {},
|
|
2459
|
+
required: { type: Boolean },
|
|
2460
|
+
describedBy: {},
|
|
2461
|
+
minLength: { default: 8 }
|
|
2462
|
+
}, {
|
|
2463
|
+
"modelValue": { default: "" },
|
|
2464
|
+
"modelModifiers": {}
|
|
2465
|
+
}),
|
|
2466
|
+
emits: ["update:modelValue"],
|
|
2467
|
+
setup(__props) {
|
|
2468
|
+
const props = __props;
|
|
2469
|
+
const modelValue = useModel(__props, "modelValue");
|
|
2470
|
+
const showPassword = ref(false);
|
|
2471
|
+
const strength = computed(() => {
|
|
2472
|
+
const password = modelValue.value;
|
|
2473
|
+
if (!password) return null;
|
|
2474
|
+
let score = 0;
|
|
2475
|
+
if (password.length >= props.minLength) score++;
|
|
2476
|
+
if (password.length >= 12) score++;
|
|
2477
|
+
if (/[a-z]/.test(password)) score++;
|
|
2478
|
+
if (/[A-Z]/.test(password)) score++;
|
|
2479
|
+
if (/[0-9]/.test(password)) score++;
|
|
2480
|
+
if (/[^a-zA-Z0-9]/.test(password)) score++;
|
|
2481
|
+
if (score <= 2) return "weak";
|
|
2482
|
+
if (score <= 3) return "fair";
|
|
2483
|
+
if (score <= 4) return "good";
|
|
2484
|
+
return "strong";
|
|
2485
|
+
});
|
|
2486
|
+
const strengthConfig = computed(() => {
|
|
2487
|
+
const configs = {
|
|
2488
|
+
weak: { label: "Weak", color: "bg-red-500", width: "w-1/4" },
|
|
2489
|
+
fair: { label: "Fair", color: "bg-orange-500", width: "w-2/4" },
|
|
2490
|
+
good: { label: "Good", color: "bg-yellow-500", width: "w-3/4" },
|
|
2491
|
+
strong: { label: "Strong", color: "bg-emerald-500", width: "w-full" }
|
|
2492
|
+
};
|
|
2493
|
+
return strength.value ? configs[strength.value] : null;
|
|
2494
|
+
});
|
|
2495
|
+
function toggleVisibility() {
|
|
2496
|
+
showPassword.value = !showPassword.value;
|
|
2497
|
+
}
|
|
2498
|
+
return (_ctx, _cache) => {
|
|
2499
|
+
var _a, _b;
|
|
2500
|
+
return openBlock(), createElementBlock("div", null, [
|
|
2501
|
+
createVNode(_sfc_main$a, {
|
|
2502
|
+
icon: "lucide:lock",
|
|
2503
|
+
size: __props.size,
|
|
2504
|
+
disabled: __props.disabled
|
|
2505
|
+
}, {
|
|
2506
|
+
default: withCtx(({ inputClass }) => [
|
|
2507
|
+
withDirectives(createElementVNode("input", {
|
|
2508
|
+
id: __props.id ?? __props.name,
|
|
2509
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
2510
|
+
type: showPassword.value ? "text" : "password",
|
|
2511
|
+
name: __props.name,
|
|
2512
|
+
placeholder: __props.placeholder,
|
|
2513
|
+
disabled: __props.disabled,
|
|
2514
|
+
required: __props.required,
|
|
2515
|
+
"aria-required": __props.required || void 0,
|
|
2516
|
+
"aria-describedby": __props.describedBy,
|
|
2517
|
+
class: normalizeClass(inputClass),
|
|
2518
|
+
autocomplete: "new-password"
|
|
2519
|
+
}, null, 10, _hoisted_1$8), [
|
|
2520
|
+
[vModelDynamic, modelValue.value]
|
|
2521
|
+
])
|
|
2522
|
+
]),
|
|
2523
|
+
actions: withCtx(() => [
|
|
2524
|
+
createElementVNode("button", {
|
|
2525
|
+
type: "button",
|
|
2526
|
+
disabled: __props.disabled,
|
|
2527
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
2528
|
+
onClick: toggleVisibility
|
|
2529
|
+
}, [
|
|
2530
|
+
createVNode(unref(Icon), {
|
|
2531
|
+
icon: showPassword.value ? "lucide:eye-off" : "lucide:eye",
|
|
2532
|
+
class: "size-5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"
|
|
2533
|
+
}, null, 8, ["icon"])
|
|
2534
|
+
], 8, _hoisted_2$5)
|
|
2535
|
+
]),
|
|
2536
|
+
_: 1
|
|
2537
|
+
}, 8, ["size", "disabled"]),
|
|
2538
|
+
__props.showStrength && modelValue.value ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
|
|
2539
|
+
createElementVNode("div", _hoisted_4$2, [
|
|
2540
|
+
createElementVNode("div", {
|
|
2541
|
+
class: normalizeClass([
|
|
2542
|
+
"h-full rounded-full transition-all duration-300",
|
|
2543
|
+
(_a = strengthConfig.value) == null ? void 0 : _a.color,
|
|
2544
|
+
(_b = strengthConfig.value) == null ? void 0 : _b.width
|
|
2545
|
+
])
|
|
2546
|
+
}, null, 2)
|
|
2547
|
+
]),
|
|
2548
|
+
strengthConfig.value ? (openBlock(), createElementBlock("p", {
|
|
2549
|
+
key: 0,
|
|
2550
|
+
class: normalizeClass([
|
|
2551
|
+
"mt-1 text-xs font-medium",
|
|
2552
|
+
strength.value === "weak" && "text-red-500",
|
|
2553
|
+
strength.value === "fair" && "text-orange-500",
|
|
2554
|
+
strength.value === "good" && "text-yellow-600 dark:text-yellow-500",
|
|
2555
|
+
strength.value === "strong" && "text-emerald-500"
|
|
2556
|
+
])
|
|
2557
|
+
}, toDisplayString(strengthConfig.value.label), 3)) : createCommentVNode("", true)
|
|
2558
|
+
])) : createCommentVNode("", true)
|
|
2559
|
+
]);
|
|
2560
|
+
};
|
|
2561
|
+
}
|
|
2562
|
+
});
|
|
2563
|
+
const _hoisted_1$7 = ["disabled"];
|
|
2564
|
+
const _hoisted_2$4 = { class: "text-lg leading-none" };
|
|
2565
|
+
const _hoisted_3$3 = ["id", "value", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2566
|
+
const _hoisted_4$1 = { class: "text-xs text-gray-400 font-medium" };
|
|
2567
|
+
const _hoisted_5 = {
|
|
2568
|
+
key: 0,
|
|
2569
|
+
class: "absolute z-50 mt-1 w-full bg-white dark:bg-slate-800 border border-gray-200 dark:border-slate-700 rounded-xl shadow-lg overflow-hidden"
|
|
2570
|
+
};
|
|
2571
|
+
const _hoisted_6 = { class: "p-2 border-b border-gray-100 dark:border-slate-700" };
|
|
2572
|
+
const _hoisted_7 = { class: "max-h-48 overflow-y-auto" };
|
|
2573
|
+
const _hoisted_8 = ["onClick"];
|
|
2574
|
+
const _hoisted_9 = { class: "text-lg" };
|
|
2575
|
+
const _hoisted_10 = { class: "flex-1 text-sm text-gray-700 dark:text-gray-300" };
|
|
2576
|
+
const _hoisted_11 = { class: "text-sm text-gray-400" };
|
|
2577
|
+
const _hoisted_12 = {
|
|
2578
|
+
key: 0,
|
|
2579
|
+
class: "px-3 py-4 text-center text-sm text-gray-500"
|
|
2580
|
+
};
|
|
2581
|
+
const defaultCountries = [
|
|
2582
|
+
{ code: "FR", name: "France", dialCode: "+33", flag: "🇫🇷" },
|
|
2583
|
+
{ code: "US", name: "United States", dialCode: "+1", flag: "🇺🇸" },
|
|
2584
|
+
{ code: "GB", name: "United Kingdom", dialCode: "+44", flag: "🇬🇧" },
|
|
2585
|
+
{ code: "DE", name: "Germany", dialCode: "+49", flag: "🇩🇪" },
|
|
2586
|
+
{ code: "ES", name: "Spain", dialCode: "+34", flag: "🇪🇸" },
|
|
2587
|
+
{ code: "IT", name: "Italy", dialCode: "+39", flag: "🇮🇹" },
|
|
2588
|
+
{ code: "BE", name: "Belgium", dialCode: "+32", flag: "🇧🇪" },
|
|
2589
|
+
{ code: "CH", name: "Switzerland", dialCode: "+41", flag: "🇨🇭" },
|
|
2590
|
+
{ code: "CA", name: "Canada", dialCode: "+1", flag: "🇨🇦" },
|
|
2591
|
+
{ code: "AU", name: "Australia", dialCode: "+61", flag: "🇦🇺" },
|
|
2592
|
+
{ code: "ML", name: "Mali", dialCode: "+223", flag: "🇲🇱" },
|
|
2593
|
+
{ code: "SN", name: "Senegal", dialCode: "+221", flag: "🇸🇳" },
|
|
2594
|
+
{ code: "CI", name: "Côte d'Ivoire", dialCode: "+225", flag: "🇨🇮" },
|
|
2595
|
+
{ code: "MA", name: "Morocco", dialCode: "+212", flag: "🇲🇦" },
|
|
2596
|
+
{ code: "TN", name: "Tunisia", dialCode: "+216", flag: "🇹🇳" },
|
|
2597
|
+
{ code: "DZ", name: "Algeria", dialCode: "+213", flag: "🇩🇿" }
|
|
2598
|
+
];
|
|
2599
|
+
const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
2600
|
+
__name: "PhoneInput",
|
|
2601
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2602
|
+
placeholder: { default: "Phone number" },
|
|
2603
|
+
size: { default: "md" },
|
|
2604
|
+
disabled: { type: Boolean },
|
|
2605
|
+
name: {},
|
|
2606
|
+
id: {},
|
|
2607
|
+
required: { type: Boolean },
|
|
2608
|
+
describedBy: {},
|
|
2609
|
+
defaultCountry: { default: "FR" },
|
|
2610
|
+
countries: { default: () => defaultCountries }
|
|
2611
|
+
}, {
|
|
2612
|
+
"modelValue": { default: "" },
|
|
2613
|
+
"modelModifiers": {}
|
|
2614
|
+
}),
|
|
2615
|
+
emits: ["update:modelValue"],
|
|
2616
|
+
setup(__props, { expose: __expose }) {
|
|
2617
|
+
const props = __props;
|
|
2618
|
+
const modelValue = useModel(__props, "modelValue");
|
|
2619
|
+
const selectedCountry = ref(
|
|
2620
|
+
props.countries.find((c) => c.code === props.defaultCountry) || props.countries[0]
|
|
2621
|
+
);
|
|
2622
|
+
const showDropdown = ref(false);
|
|
2623
|
+
const searchQuery = ref("");
|
|
2624
|
+
const dropdownRef = ref(null);
|
|
2625
|
+
const filteredCountries = computed(() => {
|
|
2626
|
+
if (!searchQuery.value) return props.countries;
|
|
2627
|
+
const query = searchQuery.value.toLowerCase();
|
|
2628
|
+
return props.countries.filter(
|
|
2629
|
+
(c) => c.name.toLowerCase().includes(query) || c.dialCode.includes(query) || c.code.toLowerCase().includes(query)
|
|
2630
|
+
);
|
|
2631
|
+
});
|
|
2632
|
+
const fullNumber = computed(() => {
|
|
2633
|
+
if (!modelValue.value) return "";
|
|
2634
|
+
return `${selectedCountry.value.dialCode}${modelValue.value}`;
|
|
2635
|
+
});
|
|
2636
|
+
function selectCountry(country) {
|
|
2637
|
+
selectedCountry.value = country;
|
|
2638
|
+
showDropdown.value = false;
|
|
2639
|
+
searchQuery.value = "";
|
|
2640
|
+
}
|
|
2641
|
+
function formatPhoneNumber(value) {
|
|
2642
|
+
const cleaned = value.replace(/\D/g, "");
|
|
2643
|
+
return cleaned;
|
|
2644
|
+
}
|
|
2645
|
+
function handleInput(event) {
|
|
2646
|
+
const target = event.target;
|
|
2647
|
+
const formatted = formatPhoneNumber(target.value);
|
|
2648
|
+
modelValue.value = formatted;
|
|
2649
|
+
}
|
|
2650
|
+
function handleClickOutside(event) {
|
|
2651
|
+
if (dropdownRef.value && !dropdownRef.value.contains(event.target)) {
|
|
2652
|
+
showDropdown.value = false;
|
|
2653
|
+
searchQuery.value = "";
|
|
2654
|
+
}
|
|
2655
|
+
}
|
|
2656
|
+
watch(showDropdown, (isOpen) => {
|
|
2657
|
+
if (isOpen) {
|
|
2658
|
+
document.addEventListener("click", handleClickOutside);
|
|
2659
|
+
} else {
|
|
2660
|
+
document.removeEventListener("click", handleClickOutside);
|
|
2661
|
+
}
|
|
2662
|
+
});
|
|
2663
|
+
__expose({ selectedCountry, fullNumber });
|
|
2664
|
+
return (_ctx, _cache) => {
|
|
2665
|
+
return openBlock(), createElementBlock("div", {
|
|
2666
|
+
class: "relative",
|
|
2667
|
+
ref_key: "dropdownRef",
|
|
2668
|
+
ref: dropdownRef
|
|
2669
|
+
}, [
|
|
2670
|
+
createVNode(_sfc_main$a, {
|
|
2671
|
+
size: __props.size,
|
|
2672
|
+
disabled: __props.disabled
|
|
2673
|
+
}, {
|
|
2674
|
+
icon: withCtx(() => [
|
|
2675
|
+
createElementVNode("button", {
|
|
2676
|
+
type: "button",
|
|
2677
|
+
disabled: __props.disabled,
|
|
2678
|
+
class: "flex items-center gap-1 pr-2 border-r border-gray-200 dark:border-slate-600 hover:bg-gray-50 dark:hover:bg-slate-600 -ml-1 pl-1 py-1 rounded-l transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
2679
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => showDropdown.value = !showDropdown.value, ["stop"]))
|
|
2680
|
+
}, [
|
|
2681
|
+
createElementVNode("span", _hoisted_2$4, toDisplayString(selectedCountry.value.flag), 1),
|
|
2682
|
+
createVNode(unref(Icon), {
|
|
2683
|
+
icon: "lucide:chevron-down",
|
|
2684
|
+
class: normalizeClass([
|
|
2685
|
+
"size-3 text-gray-400 transition-transform",
|
|
2686
|
+
showDropdown.value && "rotate-180"
|
|
2687
|
+
])
|
|
2688
|
+
}, null, 8, ["class"])
|
|
2689
|
+
], 8, _hoisted_1$7)
|
|
2690
|
+
]),
|
|
2691
|
+
default: withCtx(({ inputClass }) => [
|
|
2692
|
+
createElementVNode("input", {
|
|
2693
|
+
id: __props.id ?? __props.name,
|
|
2694
|
+
value: modelValue.value,
|
|
2695
|
+
type: "tel",
|
|
2696
|
+
name: __props.name,
|
|
2697
|
+
placeholder: __props.placeholder,
|
|
2698
|
+
disabled: __props.disabled,
|
|
2699
|
+
required: __props.required,
|
|
2700
|
+
"aria-required": __props.required || void 0,
|
|
2701
|
+
"aria-describedby": __props.describedBy,
|
|
2702
|
+
class: normalizeClass([inputClass, "pl-20"]),
|
|
2703
|
+
onInput: handleInput
|
|
2704
|
+
}, null, 42, _hoisted_3$3)
|
|
2705
|
+
]),
|
|
2706
|
+
actions: withCtx(() => [
|
|
2707
|
+
createElementVNode("span", _hoisted_4$1, toDisplayString(selectedCountry.value.dialCode), 1)
|
|
2708
|
+
]),
|
|
2709
|
+
_: 1
|
|
2710
|
+
}, 8, ["size", "disabled"]),
|
|
2711
|
+
createVNode(Transition, {
|
|
2712
|
+
"enter-active-class": "transition-all duration-200 ease-out",
|
|
2713
|
+
"enter-from-class": "opacity-0 -translate-y-2",
|
|
2714
|
+
"enter-to-class": "opacity-100 translate-y-0",
|
|
2715
|
+
"leave-active-class": "transition-all duration-150 ease-in",
|
|
2716
|
+
"leave-from-class": "opacity-100 translate-y-0",
|
|
2717
|
+
"leave-to-class": "opacity-0 -translate-y-2"
|
|
2718
|
+
}, {
|
|
2719
|
+
default: withCtx(() => [
|
|
2720
|
+
showDropdown.value ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
2721
|
+
createElementVNode("div", _hoisted_6, [
|
|
2722
|
+
withDirectives(createElementVNode("input", {
|
|
2723
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => searchQuery.value = $event),
|
|
2724
|
+
type: "text",
|
|
2725
|
+
placeholder: "Search countries...",
|
|
2726
|
+
class: "w-full px-3 py-2 text-sm border border-gray-200 dark:border-slate-600 rounded-lg bg-gray-50 dark:bg-slate-700 text-gray-900 dark:text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-primary-500"
|
|
2727
|
+
}, null, 512), [
|
|
2728
|
+
[vModelText, searchQuery.value]
|
|
2729
|
+
])
|
|
2730
|
+
]),
|
|
2731
|
+
createElementVNode("ul", _hoisted_7, [
|
|
2732
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(filteredCountries.value, (country) => {
|
|
2733
|
+
return openBlock(), createElementBlock("li", {
|
|
2734
|
+
key: country.code,
|
|
2735
|
+
class: normalizeClass(["flex items-center gap-3 px-3 py-2 cursor-pointer hover:bg-gray-50 dark:hover:bg-slate-700 transition-colors", selectedCountry.value.code === country.code && "bg-primary-50 dark:bg-primary-900/20"]),
|
|
2736
|
+
onClick: ($event) => selectCountry(country)
|
|
2737
|
+
}, [
|
|
2738
|
+
createElementVNode("span", _hoisted_9, toDisplayString(country.flag), 1),
|
|
2739
|
+
createElementVNode("span", _hoisted_10, toDisplayString(country.name), 1),
|
|
2740
|
+
createElementVNode("span", _hoisted_11, toDisplayString(country.dialCode), 1)
|
|
2741
|
+
], 10, _hoisted_8);
|
|
2742
|
+
}), 128)),
|
|
2743
|
+
filteredCountries.value.length === 0 ? (openBlock(), createElementBlock("li", _hoisted_12, " No countries found ")) : createCommentVNode("", true)
|
|
2744
|
+
])
|
|
2745
|
+
])) : createCommentVNode("", true)
|
|
2746
|
+
]),
|
|
2747
|
+
_: 1
|
|
2748
|
+
})
|
|
2749
|
+
], 512);
|
|
2750
|
+
};
|
|
2751
|
+
}
|
|
2752
|
+
});
|
|
2753
|
+
const _hoisted_1$6 = ["disabled"];
|
|
2754
|
+
const _hoisted_2$3 = ["id", "value", "name", "placeholder", "disabled", "required", "min", "max", "step", "aria-required", "aria-describedby"];
|
|
2755
|
+
const _hoisted_3$2 = ["disabled"];
|
|
2756
|
+
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
2757
|
+
__name: "NumberInput",
|
|
2758
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2759
|
+
placeholder: { default: "0" },
|
|
2760
|
+
size: { default: "md" },
|
|
2761
|
+
disabled: { type: Boolean },
|
|
2762
|
+
min: {},
|
|
2763
|
+
max: {},
|
|
2764
|
+
step: { default: 1 },
|
|
2765
|
+
name: {},
|
|
2766
|
+
id: {},
|
|
2767
|
+
required: { type: Boolean },
|
|
2768
|
+
describedBy: {},
|
|
2769
|
+
showStepper: { type: Boolean, default: true }
|
|
2770
|
+
}, {
|
|
2771
|
+
"modelValue": { default: null },
|
|
2772
|
+
"modelModifiers": {}
|
|
2773
|
+
}),
|
|
2774
|
+
emits: ["update:modelValue"],
|
|
2775
|
+
setup(__props) {
|
|
2776
|
+
const props = __props;
|
|
2777
|
+
const modelValue = useModel(__props, "modelValue");
|
|
2778
|
+
const canDecrement = computed(() => {
|
|
2779
|
+
if (props.disabled) return false;
|
|
2780
|
+
if (modelValue.value === null) return true;
|
|
2781
|
+
if (props.min !== void 0) return modelValue.value > props.min;
|
|
2782
|
+
return true;
|
|
2783
|
+
});
|
|
2784
|
+
const canIncrement = computed(() => {
|
|
2785
|
+
if (props.disabled) return false;
|
|
2786
|
+
if (modelValue.value === null) return true;
|
|
2787
|
+
if (props.max !== void 0) return modelValue.value < props.max;
|
|
2788
|
+
return true;
|
|
2789
|
+
});
|
|
2790
|
+
function increment() {
|
|
2791
|
+
if (!canIncrement.value) return;
|
|
2792
|
+
const current = modelValue.value ?? 0;
|
|
2793
|
+
const newValue = current + props.step;
|
|
2794
|
+
modelValue.value = props.max !== void 0 ? Math.min(newValue, props.max) : newValue;
|
|
2795
|
+
}
|
|
2796
|
+
function decrement() {
|
|
2797
|
+
if (!canDecrement.value) return;
|
|
2798
|
+
const current = modelValue.value ?? 0;
|
|
2799
|
+
const newValue = current - props.step;
|
|
2800
|
+
modelValue.value = props.min !== void 0 ? Math.max(newValue, props.min) : newValue;
|
|
2801
|
+
}
|
|
2802
|
+
function handleInput(event) {
|
|
2803
|
+
const target = event.target;
|
|
2804
|
+
const value = target.value === "" ? null : parseFloat(target.value);
|
|
2805
|
+
if (value !== null && !isNaN(value)) {
|
|
2806
|
+
let clampedValue = value;
|
|
2807
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
2808
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
2809
|
+
modelValue.value = clampedValue;
|
|
2810
|
+
} else {
|
|
2811
|
+
modelValue.value = null;
|
|
2812
|
+
}
|
|
2813
|
+
}
|
|
2814
|
+
return (_ctx, _cache) => {
|
|
2815
|
+
return openBlock(), createBlock(_sfc_main$a, {
|
|
2816
|
+
size: __props.size,
|
|
2817
|
+
disabled: __props.disabled
|
|
2818
|
+
}, createSlots({
|
|
2819
|
+
default: withCtx(({ inputClass }) => [
|
|
2820
|
+
createElementVNode("input", {
|
|
2821
|
+
id: __props.id ?? __props.name,
|
|
2822
|
+
value: modelValue.value,
|
|
2823
|
+
type: "number",
|
|
2824
|
+
name: __props.name,
|
|
2825
|
+
placeholder: __props.placeholder,
|
|
2826
|
+
disabled: __props.disabled,
|
|
2827
|
+
required: __props.required,
|
|
2828
|
+
min: __props.min,
|
|
2829
|
+
max: __props.max,
|
|
2830
|
+
step: __props.step,
|
|
2831
|
+
"aria-required": __props.required || void 0,
|
|
2832
|
+
"aria-describedby": __props.describedBy,
|
|
2833
|
+
class: normalizeClass([inputClass, "text-center", __props.showStepper && "pl-12 pr-12"]),
|
|
2834
|
+
onInput: handleInput
|
|
2835
|
+
}, null, 42, _hoisted_2$3)
|
|
2836
|
+
]),
|
|
2837
|
+
_: 2
|
|
2838
|
+
}, [
|
|
2839
|
+
__props.showStepper ? {
|
|
2840
|
+
name: "icon",
|
|
2841
|
+
fn: withCtx(() => [
|
|
2842
|
+
createElementVNode("button", {
|
|
2843
|
+
type: "button",
|
|
2844
|
+
disabled: !canDecrement.value,
|
|
2845
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
2846
|
+
onClick: decrement
|
|
2847
|
+
}, [
|
|
2848
|
+
createVNode(unref(Icon), {
|
|
2849
|
+
icon: "lucide:minus",
|
|
2850
|
+
class: "size-4 text-gray-500"
|
|
2851
|
+
})
|
|
2852
|
+
], 8, _hoisted_1$6)
|
|
2853
|
+
]),
|
|
2854
|
+
key: "0"
|
|
2855
|
+
} : void 0,
|
|
2856
|
+
__props.showStepper ? {
|
|
2857
|
+
name: "actions",
|
|
2858
|
+
fn: withCtx(() => [
|
|
2859
|
+
createElementVNode("button", {
|
|
2860
|
+
type: "button",
|
|
2861
|
+
disabled: !canIncrement.value,
|
|
2862
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
2863
|
+
onClick: increment
|
|
2864
|
+
}, [
|
|
2865
|
+
createVNode(unref(Icon), {
|
|
2866
|
+
icon: "lucide:plus",
|
|
2867
|
+
class: "size-4 text-gray-500"
|
|
2868
|
+
})
|
|
2869
|
+
], 8, _hoisted_3$2)
|
|
2870
|
+
]),
|
|
2871
|
+
key: "1"
|
|
2872
|
+
} : void 0
|
|
2873
|
+
]), 1032, ["size", "disabled"]);
|
|
2874
|
+
};
|
|
2875
|
+
}
|
|
2876
|
+
});
|
|
2877
|
+
const _hoisted_1$5 = { class: "text-sm font-medium text-gray-500 dark:text-gray-400" };
|
|
2878
|
+
const _hoisted_2$2 = ["id", "value", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2879
|
+
const _hoisted_3$1 = { class: "text-sm font-medium text-gray-500 dark:text-gray-400" };
|
|
2880
|
+
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
2881
|
+
__name: "MoneyInput",
|
|
2882
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2883
|
+
placeholder: { default: "0.00" },
|
|
2884
|
+
size: { default: "md" },
|
|
2885
|
+
disabled: { type: Boolean },
|
|
2886
|
+
currency: { default: "EUR" },
|
|
2887
|
+
min: {},
|
|
2888
|
+
max: {},
|
|
2889
|
+
decimals: { default: 2 },
|
|
2890
|
+
name: {},
|
|
2891
|
+
id: {},
|
|
2892
|
+
required: { type: Boolean },
|
|
2893
|
+
describedBy: {}
|
|
2894
|
+
}, {
|
|
2895
|
+
"modelValue": { default: null },
|
|
2896
|
+
"modelModifiers": {}
|
|
2897
|
+
}),
|
|
2898
|
+
emits: ["update:modelValue"],
|
|
2899
|
+
setup(__props) {
|
|
2900
|
+
const currencyConfig = {
|
|
2901
|
+
EUR: { symbol: "€", locale: "fr-FR", position: "suffix" },
|
|
2902
|
+
USD: { symbol: "$", locale: "en-US", position: "prefix" },
|
|
2903
|
+
GBP: { symbol: "£", locale: "en-GB", position: "prefix" },
|
|
2904
|
+
XOF: { symbol: "CFA", locale: "fr-FR", position: "suffix" },
|
|
2905
|
+
MAD: { symbol: "DH", locale: "fr-MA", position: "suffix" },
|
|
2906
|
+
CHF: { symbol: "CHF", locale: "fr-CH", position: "suffix" },
|
|
2907
|
+
CAD: { symbol: "CA$", locale: "en-CA", position: "prefix" }
|
|
2908
|
+
};
|
|
2909
|
+
const props = __props;
|
|
2910
|
+
const modelValue = useModel(__props, "modelValue");
|
|
2911
|
+
const config = computed(() => currencyConfig[props.currency]);
|
|
2912
|
+
const displayValue = ref("");
|
|
2913
|
+
function formatForDisplay(value) {
|
|
2914
|
+
if (value === null) return "";
|
|
2915
|
+
return value.toLocaleString(config.value.locale, {
|
|
2916
|
+
minimumFractionDigits: props.decimals,
|
|
2917
|
+
maximumFractionDigits: props.decimals
|
|
2918
|
+
});
|
|
2919
|
+
}
|
|
2920
|
+
function parseDisplayValue(value) {
|
|
2921
|
+
if (!value) return null;
|
|
2922
|
+
const cleaned = value.replace(/\s/g, "").replace(/,/g, ".");
|
|
2923
|
+
const parsed = parseFloat(cleaned);
|
|
2924
|
+
return isNaN(parsed) ? null : parsed;
|
|
2925
|
+
}
|
|
2926
|
+
watch(
|
|
2927
|
+
() => modelValue.value,
|
|
2928
|
+
(newValue) => {
|
|
2929
|
+
displayValue.value = formatForDisplay(newValue);
|
|
2930
|
+
},
|
|
2931
|
+
{ immediate: true }
|
|
2932
|
+
);
|
|
2933
|
+
function handleInput(event) {
|
|
2934
|
+
const target = event.target;
|
|
2935
|
+
displayValue.value = target.value;
|
|
2936
|
+
}
|
|
2937
|
+
function handleBlur() {
|
|
2938
|
+
const parsed = parseDisplayValue(displayValue.value);
|
|
2939
|
+
if (parsed !== null) {
|
|
2940
|
+
let clampedValue = parsed;
|
|
2941
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
2942
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
2943
|
+
modelValue.value = clampedValue;
|
|
2944
|
+
displayValue.value = formatForDisplay(clampedValue);
|
|
2945
|
+
} else {
|
|
2946
|
+
modelValue.value = null;
|
|
2947
|
+
displayValue.value = "";
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2950
|
+
return (_ctx, _cache) => {
|
|
2951
|
+
return openBlock(), createBlock(_sfc_main$a, {
|
|
2952
|
+
size: __props.size,
|
|
2953
|
+
disabled: __props.disabled
|
|
2954
|
+
}, createSlots({
|
|
2955
|
+
default: withCtx(({ inputClass }) => [
|
|
2956
|
+
createElementVNode("input", {
|
|
2957
|
+
id: __props.id ?? __props.name,
|
|
2958
|
+
value: displayValue.value,
|
|
2959
|
+
type: "text",
|
|
2960
|
+
inputmode: "decimal",
|
|
2961
|
+
name: __props.name,
|
|
2962
|
+
placeholder: __props.placeholder,
|
|
2963
|
+
disabled: __props.disabled,
|
|
2964
|
+
required: __props.required,
|
|
2965
|
+
"aria-required": __props.required || void 0,
|
|
2966
|
+
"aria-describedby": __props.describedBy,
|
|
2967
|
+
class: normalizeClass([inputClass, "text-right"]),
|
|
2968
|
+
onInput: handleInput,
|
|
2969
|
+
onBlur: handleBlur
|
|
2970
|
+
}, null, 42, _hoisted_2$2)
|
|
2971
|
+
]),
|
|
2972
|
+
_: 2
|
|
2973
|
+
}, [
|
|
2974
|
+
config.value.position === "prefix" ? {
|
|
2975
|
+
name: "icon",
|
|
2976
|
+
fn: withCtx(() => [
|
|
2977
|
+
createElementVNode("span", _hoisted_1$5, toDisplayString(config.value.symbol), 1)
|
|
2978
|
+
]),
|
|
2979
|
+
key: "0"
|
|
2980
|
+
} : void 0,
|
|
2981
|
+
config.value.position === "suffix" ? {
|
|
2982
|
+
name: "actions",
|
|
2983
|
+
fn: withCtx(() => [
|
|
2984
|
+
createElementVNode("span", _hoisted_3$1, toDisplayString(config.value.symbol), 1)
|
|
2985
|
+
]),
|
|
2986
|
+
key: "1"
|
|
2987
|
+
} : void 0
|
|
2988
|
+
]), 1032, ["size", "disabled"]);
|
|
2989
|
+
};
|
|
2990
|
+
}
|
|
2991
|
+
});
|
|
2992
|
+
const _hoisted_1$4 = ["id", "value", "name", "placeholder", "disabled", "required", "min", "max", "step", "aria-required", "aria-describedby"];
|
|
2993
|
+
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
2994
|
+
__name: "PercentInput",
|
|
2995
|
+
props: /* @__PURE__ */ mergeModels({
|
|
2996
|
+
placeholder: { default: "0" },
|
|
2997
|
+
size: { default: "md" },
|
|
2998
|
+
disabled: { type: Boolean },
|
|
2999
|
+
min: { default: 0 },
|
|
3000
|
+
max: { default: 100 },
|
|
3001
|
+
decimals: { default: 0 },
|
|
3002
|
+
name: {},
|
|
3003
|
+
id: {},
|
|
3004
|
+
required: { type: Boolean },
|
|
3005
|
+
describedBy: {}
|
|
3006
|
+
}, {
|
|
3007
|
+
"modelValue": { default: null },
|
|
3008
|
+
"modelModifiers": {}
|
|
3009
|
+
}),
|
|
3010
|
+
emits: ["update:modelValue"],
|
|
3011
|
+
setup(__props) {
|
|
3012
|
+
const props = __props;
|
|
3013
|
+
const modelValue = useModel(__props, "modelValue");
|
|
3014
|
+
const displayValue = computed({
|
|
3015
|
+
get: () => modelValue.value !== null ? modelValue.value.toString() : "",
|
|
3016
|
+
set: (val) => {
|
|
3017
|
+
if (val === "") {
|
|
3018
|
+
modelValue.value = null;
|
|
3019
|
+
return;
|
|
3020
|
+
}
|
|
3021
|
+
const parsed = parseFloat(val);
|
|
3022
|
+
if (!isNaN(parsed)) {
|
|
3023
|
+
let clamped = parsed;
|
|
3024
|
+
if (props.min !== void 0) clamped = Math.max(clamped, props.min);
|
|
3025
|
+
if (props.max !== void 0) clamped = Math.min(clamped, props.max);
|
|
3026
|
+
modelValue.value = clamped;
|
|
3027
|
+
}
|
|
3028
|
+
}
|
|
3029
|
+
});
|
|
3030
|
+
function handleInput(event) {
|
|
3031
|
+
const target = event.target;
|
|
3032
|
+
displayValue.value = target.value;
|
|
3033
|
+
}
|
|
3034
|
+
return (_ctx, _cache) => {
|
|
3035
|
+
return openBlock(), createBlock(_sfc_main$a, {
|
|
3036
|
+
size: __props.size,
|
|
3037
|
+
disabled: __props.disabled
|
|
3038
|
+
}, {
|
|
3039
|
+
default: withCtx(({ inputClass }) => [
|
|
3040
|
+
createElementVNode("input", {
|
|
3041
|
+
id: __props.id ?? __props.name,
|
|
3042
|
+
value: displayValue.value,
|
|
3043
|
+
type: "number",
|
|
3044
|
+
inputmode: "decimal",
|
|
3045
|
+
name: __props.name,
|
|
3046
|
+
placeholder: __props.placeholder,
|
|
3047
|
+
disabled: __props.disabled,
|
|
3048
|
+
required: __props.required,
|
|
3049
|
+
min: __props.min,
|
|
3050
|
+
max: __props.max,
|
|
3051
|
+
step: __props.decimals > 0 ? Math.pow(10, -__props.decimals) : 1,
|
|
3052
|
+
"aria-required": __props.required || void 0,
|
|
3053
|
+
"aria-describedby": __props.describedBy,
|
|
3054
|
+
class: normalizeClass([inputClass, "text-right pr-10"]),
|
|
3055
|
+
onInput: handleInput
|
|
3056
|
+
}, null, 42, _hoisted_1$4)
|
|
3057
|
+
]),
|
|
3058
|
+
actions: withCtx(() => [..._cache[0] || (_cache[0] = [
|
|
3059
|
+
createElementVNode("span", { class: "text-sm font-medium text-gray-500 dark:text-gray-400" }, "%", -1)
|
|
3060
|
+
])]),
|
|
3061
|
+
_: 1
|
|
3062
|
+
}, 8, ["size", "disabled"]);
|
|
3063
|
+
};
|
|
3064
|
+
}
|
|
3065
|
+
});
|
|
3066
|
+
const _hoisted_1$3 = { class: "inline-flex items-center gap-2 bg-gray-50 dark:bg-slate-700 rounded-xl p-1 border border-gray-200 dark:border-slate-600" };
|
|
3067
|
+
const _hoisted_2$1 = ["disabled"];
|
|
3068
|
+
const _hoisted_3 = ["id", "value", "name", "disabled", "required", "min", "max"];
|
|
3069
|
+
const _hoisted_4 = ["disabled"];
|
|
3070
|
+
const _sfc_main$3 = /* @__PURE__ */ defineComponent({
|
|
3071
|
+
__name: "QuantityInput",
|
|
3072
|
+
props: /* @__PURE__ */ mergeModels({
|
|
3073
|
+
size: { default: "md" },
|
|
3074
|
+
disabled: { type: Boolean },
|
|
3075
|
+
min: { default: 1 },
|
|
3076
|
+
max: {},
|
|
3077
|
+
step: { default: 1 },
|
|
3078
|
+
name: {},
|
|
3079
|
+
id: {},
|
|
3080
|
+
required: { type: Boolean }
|
|
3081
|
+
}, {
|
|
3082
|
+
"modelValue": { default: 1 },
|
|
3083
|
+
"modelModifiers": {}
|
|
3084
|
+
}),
|
|
3085
|
+
emits: ["update:modelValue"],
|
|
3086
|
+
setup(__props) {
|
|
3087
|
+
const props = __props;
|
|
3088
|
+
const modelValue = useModel(__props, "modelValue");
|
|
3089
|
+
const canDecrement = computed(() => {
|
|
3090
|
+
if (props.disabled) return false;
|
|
3091
|
+
if (props.min !== void 0) return modelValue.value > props.min;
|
|
3092
|
+
return true;
|
|
3093
|
+
});
|
|
3094
|
+
const canIncrement = computed(() => {
|
|
3095
|
+
if (props.disabled) return false;
|
|
3096
|
+
if (props.max !== void 0) return modelValue.value < props.max;
|
|
3097
|
+
return true;
|
|
3098
|
+
});
|
|
3099
|
+
function increment() {
|
|
3100
|
+
if (!canIncrement.value) return;
|
|
3101
|
+
const newValue = modelValue.value + props.step;
|
|
3102
|
+
modelValue.value = props.max !== void 0 ? Math.min(newValue, props.max) : newValue;
|
|
3103
|
+
}
|
|
3104
|
+
function decrement() {
|
|
3105
|
+
if (!canDecrement.value) return;
|
|
3106
|
+
const newValue = modelValue.value - props.step;
|
|
3107
|
+
modelValue.value = props.min !== void 0 ? Math.max(newValue, props.min) : newValue;
|
|
3108
|
+
}
|
|
3109
|
+
function handleInput(event) {
|
|
3110
|
+
const target = event.target;
|
|
3111
|
+
const value = parseInt(target.value, 10);
|
|
3112
|
+
if (!isNaN(value)) {
|
|
3113
|
+
let clampedValue = value;
|
|
3114
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
3115
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
3116
|
+
modelValue.value = clampedValue;
|
|
3117
|
+
}
|
|
3118
|
+
}
|
|
3119
|
+
const sizeClasses = computed(() => ({
|
|
3120
|
+
button: {
|
|
3121
|
+
sm: "size-7",
|
|
3122
|
+
md: "size-9",
|
|
3123
|
+
lg: "size-11"
|
|
3124
|
+
}[props.size],
|
|
3125
|
+
icon: {
|
|
3126
|
+
sm: "size-3",
|
|
3127
|
+
md: "size-4",
|
|
3128
|
+
lg: "size-5"
|
|
3129
|
+
}[props.size],
|
|
3130
|
+
input: {
|
|
3131
|
+
sm: "text-sm w-10",
|
|
3132
|
+
md: "text-base w-12",
|
|
3133
|
+
lg: "text-lg w-14"
|
|
3134
|
+
}[props.size]
|
|
3135
|
+
}));
|
|
3136
|
+
return (_ctx, _cache) => {
|
|
3137
|
+
return openBlock(), createElementBlock("div", _hoisted_1$3, [
|
|
3138
|
+
createElementVNode("button", {
|
|
3139
|
+
type: "button",
|
|
3140
|
+
disabled: !canDecrement.value,
|
|
3141
|
+
class: normalizeClass([
|
|
3142
|
+
"flex items-center justify-center rounded-lg bg-white dark:bg-slate-600 border border-gray-200 dark:border-slate-500 transition-all",
|
|
3143
|
+
"hover:bg-gray-50 dark:hover:bg-slate-500 hover:border-gray-300 dark:hover:border-slate-400",
|
|
3144
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-white dark:disabled:hover:bg-slate-600",
|
|
3145
|
+
"shadow-sm",
|
|
3146
|
+
sizeClasses.value.button
|
|
3147
|
+
]),
|
|
3148
|
+
onClick: decrement
|
|
3149
|
+
}, [
|
|
3150
|
+
createVNode(unref(Icon), {
|
|
3151
|
+
icon: "lucide:minus",
|
|
3152
|
+
class: normalizeClass(["text-gray-600 dark:text-gray-300", sizeClasses.value.icon])
|
|
3153
|
+
}, null, 8, ["class"])
|
|
3154
|
+
], 10, _hoisted_2$1),
|
|
3155
|
+
createElementVNode("input", {
|
|
3156
|
+
id: __props.id ?? __props.name,
|
|
3157
|
+
value: modelValue.value,
|
|
3158
|
+
type: "number",
|
|
3159
|
+
name: __props.name,
|
|
3160
|
+
disabled: __props.disabled,
|
|
3161
|
+
required: __props.required,
|
|
3162
|
+
min: __props.min,
|
|
3163
|
+
max: __props.max,
|
|
3164
|
+
class: normalizeClass([
|
|
3165
|
+
"bg-transparent text-center font-semibold text-gray-900 dark:text-white",
|
|
3166
|
+
"focus:outline-none appearance-none",
|
|
3167
|
+
"[&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none",
|
|
3168
|
+
"disabled:opacity-50",
|
|
3169
|
+
sizeClasses.value.input
|
|
3170
|
+
]),
|
|
3171
|
+
onInput: handleInput
|
|
3172
|
+
}, null, 42, _hoisted_3),
|
|
3173
|
+
createElementVNode("button", {
|
|
3174
|
+
type: "button",
|
|
3175
|
+
disabled: !canIncrement.value,
|
|
3176
|
+
class: normalizeClass([
|
|
3177
|
+
"flex items-center justify-center rounded-lg bg-white dark:bg-slate-600 border border-gray-200 dark:border-slate-500 transition-all",
|
|
3178
|
+
"hover:bg-gray-50 dark:hover:bg-slate-500 hover:border-gray-300 dark:hover:border-slate-400",
|
|
3179
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-white dark:disabled:hover:bg-slate-600",
|
|
3180
|
+
"shadow-sm",
|
|
3181
|
+
sizeClasses.value.button
|
|
3182
|
+
]),
|
|
3183
|
+
onClick: increment
|
|
3184
|
+
}, [
|
|
3185
|
+
createVNode(unref(Icon), {
|
|
3186
|
+
icon: "lucide:plus",
|
|
3187
|
+
class: normalizeClass(["text-gray-600 dark:text-gray-300", sizeClasses.value.icon])
|
|
3188
|
+
}, null, 8, ["class"])
|
|
3189
|
+
], 10, _hoisted_4)
|
|
3190
|
+
]);
|
|
3191
|
+
};
|
|
3192
|
+
}
|
|
3193
|
+
});
|
|
3194
|
+
const _hoisted_1$2 = ["id", "name", "placeholder", "disabled", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
3195
|
+
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
|
3196
|
+
__name: "URLInput",
|
|
3197
|
+
props: /* @__PURE__ */ mergeModels({
|
|
3198
|
+
placeholder: { default: "https://example.com" },
|
|
3199
|
+
size: { default: "md" },
|
|
3200
|
+
disabled: { type: Boolean },
|
|
3201
|
+
showValidation: { type: Boolean, default: true },
|
|
3202
|
+
name: {},
|
|
3203
|
+
id: {},
|
|
3204
|
+
required: { type: Boolean },
|
|
3205
|
+
describedBy: {}
|
|
3206
|
+
}, {
|
|
3207
|
+
"modelValue": { default: "" },
|
|
3208
|
+
"modelModifiers": {}
|
|
3209
|
+
}),
|
|
3210
|
+
emits: ["update:modelValue"],
|
|
3211
|
+
setup(__props) {
|
|
3212
|
+
const props = __props;
|
|
3213
|
+
const modelValue = useModel(__props, "modelValue");
|
|
3214
|
+
const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
|
|
3215
|
+
const isValid = computed(() => {
|
|
3216
|
+
if (!modelValue.value) return null;
|
|
3217
|
+
return urlRegex.test(modelValue.value);
|
|
3218
|
+
});
|
|
3219
|
+
const isTouched = ref(false);
|
|
3220
|
+
const showStatus = computed(() => {
|
|
3221
|
+
return props.showValidation && isTouched.value && !!modelValue.value;
|
|
3222
|
+
});
|
|
3223
|
+
function handleBlur() {
|
|
3224
|
+
isTouched.value = true;
|
|
3225
|
+
}
|
|
3226
|
+
function openUrl() {
|
|
3227
|
+
if (isValid.value && modelValue.value) {
|
|
3228
|
+
const url = modelValue.value.startsWith("http") ? modelValue.value : `https://${modelValue.value}`;
|
|
3229
|
+
window.open(url, "_blank");
|
|
3230
|
+
}
|
|
3231
|
+
}
|
|
3232
|
+
return (_ctx, _cache) => {
|
|
3233
|
+
return openBlock(), createBlock(_sfc_main$a, {
|
|
3234
|
+
icon: "lucide:link",
|
|
3235
|
+
size: __props.size,
|
|
3236
|
+
disabled: __props.disabled,
|
|
3237
|
+
invalid: showStatus.value && isValid.value === false
|
|
3238
|
+
}, {
|
|
3239
|
+
default: withCtx(({ inputClass }) => [
|
|
3240
|
+
withDirectives(createElementVNode("input", {
|
|
3241
|
+
id: __props.id ?? __props.name,
|
|
3242
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
3243
|
+
type: "url",
|
|
3244
|
+
name: __props.name,
|
|
3245
|
+
placeholder: __props.placeholder,
|
|
3246
|
+
disabled: __props.disabled,
|
|
3247
|
+
required: __props.required,
|
|
3248
|
+
"aria-invalid": showStatus.value && isValid.value === false || void 0,
|
|
3249
|
+
"aria-required": __props.required || void 0,
|
|
3250
|
+
"aria-describedby": __props.describedBy,
|
|
3251
|
+
class: normalizeClass(inputClass),
|
|
3252
|
+
onBlur: handleBlur
|
|
3253
|
+
}, null, 42, _hoisted_1$2), [
|
|
3254
|
+
[vModelText, modelValue.value]
|
|
3255
|
+
])
|
|
3256
|
+
]),
|
|
3257
|
+
actions: withCtx(() => [
|
|
3258
|
+
showStatus.value && isValid.value && modelValue.value ? (openBlock(), createElementBlock("button", {
|
|
3259
|
+
key: 0,
|
|
3260
|
+
type: "button",
|
|
3261
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors",
|
|
3262
|
+
title: "Open URL",
|
|
3263
|
+
onClick: openUrl
|
|
3264
|
+
}, [
|
|
3265
|
+
createVNode(unref(Icon), {
|
|
3266
|
+
icon: "lucide:external-link",
|
|
3267
|
+
class: "size-4 text-gray-400 hover:text-primary-500"
|
|
3268
|
+
})
|
|
3269
|
+
])) : showStatus.value && isValid.value === false ? (openBlock(), createBlock(unref(Icon), {
|
|
3270
|
+
key: 1,
|
|
3271
|
+
icon: "lucide:alert-circle",
|
|
3272
|
+
class: "size-5 text-red-500"
|
|
3273
|
+
})) : createCommentVNode("", true)
|
|
3274
|
+
]),
|
|
3275
|
+
_: 1
|
|
3276
|
+
}, 8, ["size", "disabled", "invalid"]);
|
|
3277
|
+
};
|
|
3278
|
+
}
|
|
3279
|
+
});
|
|
3280
|
+
const _hoisted_1$1 = ["value", "type", "name", "disabled", "onInput", "onKeydown"];
|
|
3281
|
+
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
3282
|
+
__name: "OTPInput",
|
|
3283
|
+
props: /* @__PURE__ */ mergeModels({
|
|
3284
|
+
length: { default: 6 },
|
|
3285
|
+
size: { default: "md" },
|
|
3286
|
+
disabled: { type: Boolean },
|
|
3287
|
+
autoFocus: { type: Boolean, default: true },
|
|
3288
|
+
name: {},
|
|
3289
|
+
masked: { type: Boolean, default: false }
|
|
3290
|
+
}, {
|
|
3291
|
+
"modelValue": { default: "" },
|
|
3292
|
+
"modelModifiers": {}
|
|
3293
|
+
}),
|
|
3294
|
+
emits: /* @__PURE__ */ mergeModels(["complete"], ["update:modelValue"]),
|
|
3295
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
3296
|
+
const props = __props;
|
|
3297
|
+
const emit = __emit;
|
|
3298
|
+
const modelValue = useModel(__props, "modelValue");
|
|
3299
|
+
const inputRefs = ref([]);
|
|
3300
|
+
const digits = computed(() => {
|
|
3301
|
+
const arr = modelValue.value.split("");
|
|
3302
|
+
while (arr.length < props.length) {
|
|
3303
|
+
arr.push("");
|
|
3304
|
+
}
|
|
3305
|
+
return arr.slice(0, props.length);
|
|
3306
|
+
});
|
|
3307
|
+
const sizeClasses = computed(() => ({
|
|
3308
|
+
input: {
|
|
3309
|
+
sm: "size-10 text-lg",
|
|
3310
|
+
md: "size-12 text-xl",
|
|
3311
|
+
lg: "size-14 text-2xl"
|
|
3312
|
+
}[props.size],
|
|
3313
|
+
gap: {
|
|
3314
|
+
sm: "gap-2",
|
|
3315
|
+
md: "gap-3",
|
|
3316
|
+
lg: "gap-4"
|
|
3317
|
+
}[props.size]
|
|
3318
|
+
}));
|
|
3319
|
+
function updateValue(index, value) {
|
|
3320
|
+
const newDigits = [...digits.value];
|
|
3321
|
+
newDigits[index] = value.slice(-1);
|
|
3322
|
+
modelValue.value = newDigits.join("");
|
|
3323
|
+
if (modelValue.value.length === props.length && !modelValue.value.includes("")) {
|
|
3324
|
+
emit("complete", modelValue.value);
|
|
3325
|
+
}
|
|
3326
|
+
}
|
|
3327
|
+
function handleInput(event, index) {
|
|
3328
|
+
const target = event.target;
|
|
3329
|
+
const value = target.value.replace(/\D/g, "");
|
|
3330
|
+
if (value) {
|
|
3331
|
+
updateValue(index, value);
|
|
3332
|
+
if (index < props.length - 1) {
|
|
3333
|
+
nextTick(() => {
|
|
3334
|
+
var _a;
|
|
3335
|
+
(_a = inputRefs.value[index + 1]) == null ? void 0 : _a.focus();
|
|
3336
|
+
});
|
|
3337
|
+
}
|
|
3338
|
+
}
|
|
3339
|
+
}
|
|
3340
|
+
function handleKeydown(event, index) {
|
|
3341
|
+
var _a, _b, _c;
|
|
3342
|
+
const target = event.target;
|
|
3343
|
+
if (event.key === "Backspace") {
|
|
3344
|
+
if (!target.value && index > 0) {
|
|
3345
|
+
(_a = inputRefs.value[index - 1]) == null ? void 0 : _a.focus();
|
|
3346
|
+
}
|
|
3347
|
+
updateValue(index, "");
|
|
3348
|
+
} else if (event.key === "ArrowLeft" && index > 0) {
|
|
3349
|
+
(_b = inputRefs.value[index - 1]) == null ? void 0 : _b.focus();
|
|
3350
|
+
} else if (event.key === "ArrowRight" && index < props.length - 1) {
|
|
3351
|
+
(_c = inputRefs.value[index + 1]) == null ? void 0 : _c.focus();
|
|
3352
|
+
}
|
|
3353
|
+
}
|
|
3354
|
+
function handlePaste(event) {
|
|
3355
|
+
var _a;
|
|
3356
|
+
event.preventDefault();
|
|
3357
|
+
const pastedData = (_a = event.clipboardData) == null ? void 0 : _a.getData("text").replace(/\D/g, "").slice(0, props.length);
|
|
3358
|
+
if (pastedData) {
|
|
3359
|
+
modelValue.value = pastedData;
|
|
3360
|
+
const focusIndex = Math.min(pastedData.length, props.length - 1);
|
|
3361
|
+
nextTick(() => {
|
|
3362
|
+
var _a2;
|
|
3363
|
+
(_a2 = inputRefs.value[focusIndex]) == null ? void 0 : _a2.focus();
|
|
3364
|
+
});
|
|
3365
|
+
}
|
|
3366
|
+
}
|
|
3367
|
+
function handleFocus(event) {
|
|
3368
|
+
const target = event.target;
|
|
3369
|
+
target.select();
|
|
3370
|
+
}
|
|
3371
|
+
watch(
|
|
3372
|
+
() => modelValue.value,
|
|
3373
|
+
(newValue) => {
|
|
3374
|
+
if (newValue.length === props.length) {
|
|
3375
|
+
emit("complete", newValue);
|
|
3376
|
+
}
|
|
3377
|
+
}
|
|
3378
|
+
);
|
|
3379
|
+
onMounted(() => {
|
|
3380
|
+
var _a;
|
|
3381
|
+
if (props.autoFocus) {
|
|
3382
|
+
(_a = inputRefs.value[0]) == null ? void 0 : _a.focus();
|
|
3383
|
+
}
|
|
3384
|
+
});
|
|
3385
|
+
function setInputRef(el, index) {
|
|
3386
|
+
if (el) {
|
|
3387
|
+
inputRefs.value[index] = el;
|
|
3388
|
+
}
|
|
3389
|
+
}
|
|
3390
|
+
__expose({ focus: () => {
|
|
3391
|
+
var _a;
|
|
3392
|
+
return (_a = inputRefs.value[0]) == null ? void 0 : _a.focus();
|
|
3393
|
+
} });
|
|
3394
|
+
return (_ctx, _cache) => {
|
|
3395
|
+
return openBlock(), createElementBlock("div", {
|
|
3396
|
+
class: normalizeClass(["inline-flex", sizeClasses.value.gap])
|
|
3397
|
+
}, [
|
|
3398
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(digits.value, (digit, index) => {
|
|
3399
|
+
return openBlock(), createElementBlock("input", {
|
|
3400
|
+
key: index,
|
|
3401
|
+
ref_for: true,
|
|
3402
|
+
ref: (el) => setInputRef(el, index),
|
|
3403
|
+
value: digit,
|
|
3404
|
+
type: __props.masked ? "password" : "text",
|
|
3405
|
+
inputmode: "numeric",
|
|
3406
|
+
name: __props.name ? `${__props.name}-${index}` : void 0,
|
|
3407
|
+
disabled: __props.disabled,
|
|
3408
|
+
maxlength: "1",
|
|
3409
|
+
autocomplete: "one-time-code",
|
|
3410
|
+
class: normalizeClass([
|
|
3411
|
+
"text-center font-semibold rounded-xl border-2 transition-all",
|
|
3412
|
+
"bg-gray-50 dark:bg-slate-700 text-gray-900 dark:text-white",
|
|
3413
|
+
"border-gray-200 dark:border-slate-600",
|
|
3414
|
+
"focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 focus:outline-none",
|
|
3415
|
+
"disabled:opacity-50 disabled:cursor-not-allowed",
|
|
3416
|
+
digit ? "border-primary-300 dark:border-primary-500/50" : "",
|
|
3417
|
+
sizeClasses.value.input
|
|
3418
|
+
]),
|
|
3419
|
+
onInput: ($event) => handleInput($event, index),
|
|
3420
|
+
onKeydown: ($event) => handleKeydown($event, index),
|
|
3421
|
+
onPaste: handlePaste,
|
|
3422
|
+
onFocus: handleFocus
|
|
3423
|
+
}, null, 42, _hoisted_1$1);
|
|
3424
|
+
}), 128))
|
|
3425
|
+
], 2);
|
|
3426
|
+
};
|
|
3427
|
+
}
|
|
3428
|
+
});
|
|
3429
|
+
const _hoisted_1 = ["onClick"];
|
|
3430
|
+
const _hoisted_2 = ["id", "name", "placeholder", "disabled", "required"];
|
|
3431
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
3432
|
+
__name: "TagsInput",
|
|
3433
|
+
props: /* @__PURE__ */ mergeModels({
|
|
3434
|
+
placeholder: { default: "Add tag..." },
|
|
3435
|
+
size: { default: "md" },
|
|
3436
|
+
disabled: { type: Boolean },
|
|
3437
|
+
max: {},
|
|
3438
|
+
allowDuplicates: { type: Boolean, default: false },
|
|
3439
|
+
name: {},
|
|
3440
|
+
id: {},
|
|
3441
|
+
required: { type: Boolean }
|
|
3442
|
+
}, {
|
|
3443
|
+
"modelValue": { default: () => [] },
|
|
3444
|
+
"modelModifiers": {}
|
|
3445
|
+
}),
|
|
3446
|
+
emits: ["update:modelValue"],
|
|
3447
|
+
setup(__props, { expose: __expose }) {
|
|
3448
|
+
const props = __props;
|
|
3449
|
+
const modelValue = useModel(__props, "modelValue");
|
|
3450
|
+
const inputValue = ref("");
|
|
3451
|
+
const inputRef = ref(null);
|
|
3452
|
+
const canAddMore = computed(() => {
|
|
3453
|
+
if (props.max !== void 0) return modelValue.value.length < props.max;
|
|
3454
|
+
return true;
|
|
3455
|
+
});
|
|
3456
|
+
const sizeClasses = computed(() => ({
|
|
3457
|
+
wrapper: {
|
|
3458
|
+
sm: "min-h-9 py-1.5 px-2 gap-1",
|
|
3459
|
+
md: "min-h-11 py-2 px-3 gap-1.5",
|
|
3460
|
+
lg: "min-h-13 py-2.5 px-4 gap-2"
|
|
3461
|
+
}[props.size],
|
|
3462
|
+
tag: {
|
|
3463
|
+
sm: "text-xs px-2 py-0.5",
|
|
3464
|
+
md: "text-sm px-2.5 py-1",
|
|
3465
|
+
lg: "text-base px-3 py-1.5"
|
|
3466
|
+
}[props.size],
|
|
3467
|
+
input: {
|
|
3468
|
+
sm: "text-xs",
|
|
3469
|
+
md: "text-sm",
|
|
3470
|
+
lg: "text-base"
|
|
3471
|
+
}[props.size],
|
|
3472
|
+
icon: {
|
|
3473
|
+
sm: "size-3",
|
|
3474
|
+
md: "size-3.5",
|
|
3475
|
+
lg: "size-4"
|
|
3476
|
+
}[props.size]
|
|
3477
|
+
}));
|
|
3478
|
+
function addTag(value) {
|
|
3479
|
+
const trimmed = value.trim();
|
|
3480
|
+
if (!trimmed) return;
|
|
3481
|
+
if (!canAddMore.value) return;
|
|
3482
|
+
if (!props.allowDuplicates && modelValue.value.includes(trimmed)) return;
|
|
3483
|
+
modelValue.value = [...modelValue.value, trimmed];
|
|
3484
|
+
inputValue.value = "";
|
|
3485
|
+
}
|
|
3486
|
+
function removeTag(index) {
|
|
3487
|
+
if (props.disabled) return;
|
|
3488
|
+
modelValue.value = modelValue.value.filter((_, i) => i !== index);
|
|
3489
|
+
}
|
|
3490
|
+
function handleKeydown(event) {
|
|
3491
|
+
if (event.key === "Enter" || event.key === ",") {
|
|
3492
|
+
event.preventDefault();
|
|
3493
|
+
addTag(inputValue.value);
|
|
3494
|
+
} else if (event.key === "Backspace" && !inputValue.value && modelValue.value.length > 0) {
|
|
3495
|
+
removeTag(modelValue.value.length - 1);
|
|
3496
|
+
}
|
|
3497
|
+
}
|
|
3498
|
+
function handleBlur() {
|
|
3499
|
+
if (inputValue.value) {
|
|
3500
|
+
addTag(inputValue.value);
|
|
3501
|
+
}
|
|
3502
|
+
}
|
|
3503
|
+
function focusInput() {
|
|
3504
|
+
var _a;
|
|
3505
|
+
(_a = inputRef.value) == null ? void 0 : _a.focus();
|
|
3506
|
+
}
|
|
3507
|
+
__expose({ focus: focusInput });
|
|
3508
|
+
return (_ctx, _cache) => {
|
|
3509
|
+
return openBlock(), createElementBlock("div", {
|
|
3510
|
+
class: normalizeClass([
|
|
3511
|
+
"flex flex-wrap items-center rounded-xl border transition-all cursor-text",
|
|
3512
|
+
"bg-gray-50 dark:bg-slate-700",
|
|
3513
|
+
"border-gray-200 dark:border-slate-600",
|
|
3514
|
+
"focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500 focus-within:bg-white dark:focus-within:bg-slate-600",
|
|
3515
|
+
__props.disabled && "opacity-50 cursor-not-allowed",
|
|
3516
|
+
sizeClasses.value.wrapper
|
|
3517
|
+
]),
|
|
3518
|
+
onClick: focusInput
|
|
3519
|
+
}, [
|
|
3520
|
+
createVNode(TransitionGroup, {
|
|
3521
|
+
name: "tag",
|
|
3522
|
+
tag: "div",
|
|
3523
|
+
class: "flex flex-wrap gap-1.5"
|
|
3524
|
+
}, {
|
|
3525
|
+
default: withCtx(() => [
|
|
3526
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(modelValue.value, (tag, index) => {
|
|
3527
|
+
return openBlock(), createElementBlock("span", {
|
|
3528
|
+
key: tag + index,
|
|
3529
|
+
class: normalizeClass([
|
|
3530
|
+
"inline-flex items-center gap-1 rounded-lg font-medium",
|
|
3531
|
+
"bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300",
|
|
3532
|
+
sizeClasses.value.tag
|
|
3533
|
+
])
|
|
3534
|
+
}, [
|
|
3535
|
+
createTextVNode(toDisplayString(tag) + " ", 1),
|
|
3536
|
+
!__props.disabled ? (openBlock(), createElementBlock("button", {
|
|
3537
|
+
key: 0,
|
|
3538
|
+
type: "button",
|
|
3539
|
+
class: "rounded-full hover:bg-primary-200 dark:hover:bg-primary-800/50 transition-colors p-0.5",
|
|
3540
|
+
onClick: withModifiers(($event) => removeTag(index), ["stop"])
|
|
3541
|
+
}, [
|
|
3542
|
+
createVNode(unref(Icon), {
|
|
3543
|
+
icon: "lucide:x",
|
|
3544
|
+
class: normalizeClass(["text-primary-500", sizeClasses.value.icon])
|
|
3545
|
+
}, null, 8, ["class"])
|
|
3546
|
+
], 8, _hoisted_1)) : createCommentVNode("", true)
|
|
3547
|
+
], 2);
|
|
3548
|
+
}), 128))
|
|
3549
|
+
]),
|
|
3550
|
+
_: 1
|
|
3551
|
+
}),
|
|
3552
|
+
canAddMore.value ? withDirectives((openBlock(), createElementBlock("input", {
|
|
3553
|
+
key: 0,
|
|
3554
|
+
id: __props.id ?? __props.name,
|
|
3555
|
+
ref_key: "inputRef",
|
|
3556
|
+
ref: inputRef,
|
|
3557
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputValue.value = $event),
|
|
3558
|
+
type: "text",
|
|
3559
|
+
name: __props.name,
|
|
3560
|
+
placeholder: modelValue.value.length === 0 ? __props.placeholder : "",
|
|
3561
|
+
disabled: __props.disabled,
|
|
3562
|
+
required: __props.required && modelValue.value.length === 0,
|
|
3563
|
+
class: normalizeClass([
|
|
3564
|
+
"flex-1 min-w-20 bg-transparent border-none focus:outline-none",
|
|
3565
|
+
"text-gray-900 dark:text-white placeholder-gray-400",
|
|
3566
|
+
sizeClasses.value.input
|
|
3567
|
+
]),
|
|
3568
|
+
onKeydown: handleKeydown,
|
|
3569
|
+
onBlur: handleBlur
|
|
3570
|
+
}, null, 42, _hoisted_2)), [
|
|
3571
|
+
[vModelText, inputValue.value]
|
|
3572
|
+
]) : createCommentVNode("", true)
|
|
3573
|
+
], 2);
|
|
3574
|
+
};
|
|
3575
|
+
}
|
|
3576
|
+
});
|
|
3577
|
+
const TagsInput = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-7949bfa4"]]);
|
|
2062
3578
|
export {
|
|
2063
3579
|
Slider as S,
|
|
2064
|
-
|
|
2065
|
-
_sfc_main$
|
|
2066
|
-
_sfc_main$
|
|
2067
|
-
_sfc_main$
|
|
2068
|
-
_sfc_main$
|
|
2069
|
-
_sfc_main$
|
|
2070
|
-
_sfc_main$
|
|
2071
|
-
_sfc_main$
|
|
2072
|
-
_sfc_main$
|
|
2073
|
-
_sfc_main$
|
|
2074
|
-
_sfc_main$
|
|
2075
|
-
_sfc_main$
|
|
2076
|
-
_sfc_main$
|
|
2077
|
-
_sfc_main as
|
|
3580
|
+
TagsInput as T,
|
|
3581
|
+
_sfc_main$r as _,
|
|
3582
|
+
_sfc_main$q as a,
|
|
3583
|
+
_sfc_main$p as b,
|
|
3584
|
+
_sfc_main$o as c,
|
|
3585
|
+
_sfc_main$n as d,
|
|
3586
|
+
_sfc_main$m as e,
|
|
3587
|
+
_sfc_main$l as f,
|
|
3588
|
+
_sfc_main$j as g,
|
|
3589
|
+
_sfc_main$i as h,
|
|
3590
|
+
_sfc_main$h as i,
|
|
3591
|
+
_sfc_main$g as j,
|
|
3592
|
+
_sfc_main$f as k,
|
|
3593
|
+
_sfc_main$e as l,
|
|
3594
|
+
_sfc_main$d as m,
|
|
3595
|
+
_sfc_main$c as n,
|
|
3596
|
+
_sfc_main$b as o,
|
|
3597
|
+
_sfc_main$a as p,
|
|
3598
|
+
_sfc_main$9 as q,
|
|
3599
|
+
_sfc_main$8 as r,
|
|
3600
|
+
_sfc_main$7 as s,
|
|
3601
|
+
_sfc_main$6 as t,
|
|
3602
|
+
_sfc_main$5 as u,
|
|
3603
|
+
_sfc_main$4 as v,
|
|
3604
|
+
_sfc_main$3 as w,
|
|
3605
|
+
_sfc_main$2 as x,
|
|
3606
|
+
_sfc_main$1 as y
|
|
2078
3607
|
};
|
|
2079
|
-
//# sourceMappingURL=
|
|
3608
|
+
//# sourceMappingURL=TagsInput-C4wBPfrj.js.map
|