cisse-vue-ui 0.6.0 → 0.7.1
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/{FilterTabs.vue_vue_type_script_setup_true_lang-AFYkni3y.js → FilterTabs.vue_vue_type_script_setup_true_lang-C5vnz3qo.js} +2 -2
- package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-AFYkni3y.js.map → FilterTabs.vue_vue_type_script_setup_true_lang-C5vnz3qo.js.map} +1 -1
- package/dist/{FormActions.vue_vue_type_script_setup_true_lang-d2aur5Pu.js → TagsInput-CFAC_MSw.js} +1654 -302
- package/dist/TagsInput-CFAC_MSw.js.map +1 -0
- package/dist/{FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs → TagsInput-DVebLEH2.cjs} +1649 -297
- package/dist/TagsInput-DVebLEH2.cjs.map +1 -0
- package/dist/cisse-vue-ui.css +10 -0
- package/dist/components/core/index.js +1 -1
- 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/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 +89 -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/SearchInput.vue.d.ts +18 -4
- 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 -18
- package/dist/components/form/index.cjs.map +1 -1
- package/dist/components/form/index.d.ts +15 -0
- package/dist/components/form/index.js +14 -3
- package/dist/components/index.cjs +29 -18
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +15 -4
- package/dist/{index-Bp7Mpfbi.cjs → index-Bl5eyNdr.cjs} +31 -20
- package/dist/index-Bl5eyNdr.cjs.map +1 -0
- package/dist/index-Cke8qLRH.js +95 -0
- package/dist/index-Cke8qLRH.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 +30 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -15
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs.map +0 -1
- package/dist/FormActions.vue_vue_type_script_setup_true_lang-d2aur5Pu.js.map +0 -1
- package/dist/index-6hQQcCpF.js +0 -84
- package/dist/index-6hQQcCpF.js.map +0 -1
- package/dist/index-Bp7Mpfbi.cjs.map +0 -1
package/dist/{FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs → TagsInput-DVebLEH2.cjs}
RENAMED
|
@@ -6,8 +6,8 @@ const useDropdown = require("./useDropdown-DHFnd259.cjs");
|
|
|
6
6
|
const _pluginVue_exportHelper = require("./_plugin-vue_export-helper-DM9IkUGy.cjs");
|
|
7
7
|
const index = require("./index-D1x3TH9k.cjs");
|
|
8
8
|
const Button_vue_vue_type_script_setup_true_lang = require("./Button.vue_vue_type_script_setup_true_lang-CXRj7LEP.cjs");
|
|
9
|
-
const _hoisted_1$
|
|
10
|
-
const _sfc_main$
|
|
9
|
+
const _hoisted_1$r = ["data-error", "for"];
|
|
10
|
+
const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
|
|
11
11
|
__name: "FormLabel",
|
|
12
12
|
props: {
|
|
13
13
|
error: { type: [String, Boolean] },
|
|
@@ -21,12 +21,12 @@ const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
|
|
|
21
21
|
class: "block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300"
|
|
22
22
|
}, [
|
|
23
23
|
vue.renderSlot(_ctx.$slots, "default")
|
|
24
|
-
], 8, _hoisted_1$
|
|
24
|
+
], 8, _hoisted_1$r);
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
-
const _hoisted_1$
|
|
29
|
-
const _sfc_main$
|
|
28
|
+
const _hoisted_1$q = ["id", "data-error", "role", "aria-live"];
|
|
29
|
+
const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
|
|
30
30
|
__name: "FormHelp",
|
|
31
31
|
props: {
|
|
32
32
|
id: {},
|
|
@@ -45,18 +45,86 @@ const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
|
|
|
45
45
|
vue.renderSlot(_ctx.$slots, "default", {}, () => [
|
|
46
46
|
vue.createTextVNode(vue.toDisplayString(__props.text ?? ""), 1)
|
|
47
47
|
])
|
|
48
|
-
], 8, _hoisted_1$
|
|
48
|
+
], 8, _hoisted_1$q);
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
|
-
const _hoisted_1$
|
|
52
|
+
const _hoisted_1$p = {
|
|
53
53
|
key: 0,
|
|
54
|
-
class: "
|
|
54
|
+
class: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-gray-400"
|
|
55
55
|
};
|
|
56
|
-
const _hoisted_2$
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
const _hoisted_2$h = {
|
|
57
|
+
key: 1,
|
|
58
|
+
class: "absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-1"
|
|
59
|
+
};
|
|
60
|
+
const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
|
|
61
|
+
__name: "InputWrapper",
|
|
62
|
+
props: {
|
|
63
|
+
icon: {},
|
|
64
|
+
iconRight: {},
|
|
65
|
+
size: { default: "md" },
|
|
66
|
+
invalid: { type: Boolean },
|
|
67
|
+
disabled: { type: Boolean },
|
|
68
|
+
wrapperClass: {}
|
|
69
|
+
},
|
|
70
|
+
setup(__props, { expose: __expose }) {
|
|
71
|
+
const props = __props;
|
|
72
|
+
const slots = vue.useSlots();
|
|
73
|
+
const hasLeftIcon = vue.computed(() => props.icon || slots.icon);
|
|
74
|
+
const hasRightContent = vue.computed(() => props.iconRight || slots.actions);
|
|
75
|
+
const inputClass = vue.computed(() => [
|
|
76
|
+
// Base styles
|
|
77
|
+
"block w-full rounded-xl border text-sm transition-all",
|
|
78
|
+
"border-gray-200 bg-gray-50 text-gray-900 placeholder-gray-400",
|
|
79
|
+
"focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:bg-white focus:outline-hidden",
|
|
80
|
+
"disabled:border-gray-200 disabled:bg-gray-100 disabled:text-gray-500 disabled:cursor-not-allowed",
|
|
81
|
+
// Dark mode
|
|
82
|
+
"dark:border-slate-600 dark:bg-slate-700 dark:text-white dark:placeholder-gray-500",
|
|
83
|
+
"dark:focus:border-primary-500 dark:focus:ring-primary-500 dark:focus:bg-slate-600",
|
|
84
|
+
"dark:disabled:bg-slate-800 dark:disabled:text-gray-500",
|
|
85
|
+
// Padding based on icons/actions
|
|
86
|
+
hasLeftIcon.value ? "pl-10" : "pl-4",
|
|
87
|
+
hasRightContent.value ? "pr-10" : "pr-4",
|
|
88
|
+
// Size
|
|
89
|
+
props.size === "sm" && "py-2 text-xs",
|
|
90
|
+
props.size === "md" && "py-3 text-sm",
|
|
91
|
+
props.size === "lg" && "py-4 text-base",
|
|
92
|
+
// Invalid state
|
|
93
|
+
props.invalid && "border-red-500 focus:border-red-500 focus:ring-red-500 dark:border-red-500"
|
|
94
|
+
]);
|
|
95
|
+
__expose({ inputClass });
|
|
96
|
+
return (_ctx, _cache) => {
|
|
97
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
98
|
+
class: vue.normalizeClass(["relative", __props.wrapperClass])
|
|
99
|
+
}, [
|
|
100
|
+
hasLeftIcon.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$p, [
|
|
101
|
+
vue.renderSlot(_ctx.$slots, "icon", {}, () => [
|
|
102
|
+
__props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
103
|
+
key: 0,
|
|
104
|
+
icon: __props.icon,
|
|
105
|
+
class: "size-5"
|
|
106
|
+
}, null, 8, ["icon"])) : vue.createCommentVNode("", true)
|
|
107
|
+
])
|
|
108
|
+
])) : vue.createCommentVNode("", true),
|
|
109
|
+
vue.renderSlot(_ctx.$slots, "default", { inputClass: inputClass.value }),
|
|
110
|
+
hasRightContent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$h, [
|
|
111
|
+
vue.renderSlot(_ctx.$slots, "actions", {}, () => [
|
|
112
|
+
__props.iconRight ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
113
|
+
key: 0,
|
|
114
|
+
icon: __props.iconRight,
|
|
115
|
+
class: "size-5 text-gray-400 pointer-events-none"
|
|
116
|
+
}, null, 8, ["icon"])) : vue.createCommentVNode("", true)
|
|
117
|
+
])
|
|
118
|
+
])) : vue.createCommentVNode("", true)
|
|
119
|
+
], 2);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const _hoisted_1$o = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
124
|
+
const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({
|
|
125
|
+
...{
|
|
126
|
+
inheritAttrs: false
|
|
127
|
+
},
|
|
60
128
|
__name: "FormInput",
|
|
61
129
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
62
130
|
type: { default: "text" },
|
|
@@ -79,79 +147,57 @@ const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
|
|
|
79
147
|
const props = __props;
|
|
80
148
|
const modelValue = vue.useModel(__props, "modelValue");
|
|
81
149
|
return (_ctx, _cache) => {
|
|
82
|
-
return
|
|
83
|
-
props.icon
|
|
84
|
-
|
|
85
|
-
icon: props.icon,
|
|
86
|
-
class: "absolute left-3 top-1/2 -translate-y-1/2 size-5 text-gray-400 pointer-events-none"
|
|
87
|
-
}, null, 8, ["icon"])) : vue.createCommentVNode("", true),
|
|
88
|
-
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
89
|
-
id: props.id ?? props.name ?? "",
|
|
90
|
-
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
91
|
-
disabled: props.disabled,
|
|
92
|
-
name: props.name ?? "",
|
|
93
|
-
placeholder: props.placeholder,
|
|
94
|
-
type: props.type,
|
|
95
|
-
required: props.required,
|
|
96
|
-
"aria-invalid": props.invalid || void 0,
|
|
97
|
-
"aria-required": props.required || void 0,
|
|
98
|
-
"aria-describedby": props.describedBy || void 0,
|
|
99
|
-
class: [
|
|
100
|
-
baseInputClass,
|
|
101
|
-
"py-3",
|
|
102
|
-
props.icon ? "pl-10" : "pl-4",
|
|
103
|
-
props.iconRight ? "pr-10" : "pr-4"
|
|
104
|
-
]
|
|
105
|
-
}, _ctx.$attrs), null, 16, _hoisted_2$c), [
|
|
106
|
-
[vue.vModelDynamic, modelValue.value]
|
|
107
|
-
]),
|
|
108
|
-
props.iconRight ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
109
|
-
key: 1,
|
|
110
|
-
icon: props.iconRight,
|
|
111
|
-
class: "absolute right-3 top-1/2 -translate-y-1/2 size-5 text-gray-400 pointer-events-none"
|
|
112
|
-
}, null, 8, ["icon"])) : vue.createCommentVNode("", true)
|
|
113
|
-
])) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", vue.mergeProps({
|
|
114
|
-
key: 1,
|
|
115
|
-
id: props.id ?? props.name ?? "",
|
|
116
|
-
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event),
|
|
150
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
151
|
+
icon: props.icon,
|
|
152
|
+
"icon-right": props.iconRight,
|
|
117
153
|
disabled: props.disabled,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
154
|
+
invalid: props.invalid
|
|
155
|
+
}, {
|
|
156
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
157
|
+
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
158
|
+
id: props.id ?? props.name ?? "",
|
|
159
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
160
|
+
disabled: props.disabled,
|
|
161
|
+
name: props.name ?? "",
|
|
162
|
+
placeholder: props.placeholder,
|
|
163
|
+
type: props.type,
|
|
164
|
+
required: props.required,
|
|
165
|
+
"aria-invalid": props.invalid || void 0,
|
|
166
|
+
"aria-required": props.required || void 0,
|
|
167
|
+
"aria-describedby": props.describedBy || void 0,
|
|
168
|
+
class: inputClass
|
|
169
|
+
}, _ctx.$attrs), null, 16, _hoisted_1$o), [
|
|
170
|
+
[vue.vModelDynamic, modelValue.value]
|
|
171
|
+
])
|
|
172
|
+
]),
|
|
173
|
+
_: 1
|
|
174
|
+
}, 8, ["icon", "icon-right", "disabled", "invalid"]);
|
|
129
175
|
};
|
|
130
176
|
}
|
|
131
177
|
});
|
|
132
|
-
const _hoisted_1$
|
|
133
|
-
const _hoisted_2$
|
|
134
|
-
const _hoisted_3$
|
|
135
|
-
const _hoisted_4$
|
|
136
|
-
const _hoisted_5$
|
|
178
|
+
const _hoisted_1$n = { class: "relative" };
|
|
179
|
+
const _hoisted_2$g = ["id", "disabled", "aria-expanded", "aria-controls", "aria-invalid", "aria-describedby"];
|
|
180
|
+
const _hoisted_3$f = { class: "flex-1 truncate" };
|
|
181
|
+
const _hoisted_4$b = ["id", "aria-label"];
|
|
182
|
+
const _hoisted_5$8 = {
|
|
137
183
|
key: 0,
|
|
138
184
|
class: "sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800"
|
|
139
185
|
};
|
|
140
|
-
const _hoisted_6$
|
|
141
|
-
const _hoisted_7$
|
|
186
|
+
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" };
|
|
187
|
+
const _hoisted_7$7 = {
|
|
142
188
|
key: 1,
|
|
143
189
|
class: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400",
|
|
144
190
|
role: "status"
|
|
145
191
|
};
|
|
146
|
-
const _hoisted_8$
|
|
147
|
-
const _hoisted_9$
|
|
148
|
-
const _hoisted_10$
|
|
192
|
+
const _hoisted_8$6 = { class: "py-1" };
|
|
193
|
+
const _hoisted_9$4 = ["aria-selected", "data-index", "onClick", "onMouseenter"];
|
|
194
|
+
const _hoisted_10$4 = {
|
|
149
195
|
key: 1,
|
|
150
196
|
class: "size-4 shrink-0",
|
|
151
197
|
"aria-hidden": "true"
|
|
152
198
|
};
|
|
153
|
-
const _hoisted_11$
|
|
154
|
-
const _sfc_main$
|
|
199
|
+
const _hoisted_11$4 = { class: "flex-1" };
|
|
200
|
+
const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({
|
|
155
201
|
__name: "FormSelect",
|
|
156
202
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
157
203
|
options: {},
|
|
@@ -271,7 +317,7 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
271
317
|
return [base, state, text, props.triggerClass];
|
|
272
318
|
});
|
|
273
319
|
return (_ctx, _cache) => {
|
|
274
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
320
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$n, [
|
|
275
321
|
vue.createElementVNode("button", {
|
|
276
322
|
id: triggerId.value,
|
|
277
323
|
ref_key: "triggerRef",
|
|
@@ -291,14 +337,14 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
291
337
|
option: selectedOption.value,
|
|
292
338
|
placeholder: __props.placeholder
|
|
293
339
|
}, () => [
|
|
294
|
-
vue.createElementVNode("span", _hoisted_3$
|
|
340
|
+
vue.createElementVNode("span", _hoisted_3$f, vue.toDisplayString(displayValue.value), 1)
|
|
295
341
|
]),
|
|
296
342
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
297
343
|
icon: "lucide:chevron-down",
|
|
298
344
|
class: vue.normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", vue.unref(isOpen) && "rotate-180"]),
|
|
299
345
|
"aria-hidden": "true"
|
|
300
346
|
}, null, 8, ["class"])
|
|
301
|
-
], 42, _hoisted_2$
|
|
347
|
+
], 42, _hoisted_2$g),
|
|
302
348
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
303
349
|
to: "body",
|
|
304
350
|
disabled: !__props.teleport
|
|
@@ -325,8 +371,8 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
325
371
|
!__props.teleport && "absolute mt-1 w-full"
|
|
326
372
|
])
|
|
327
373
|
}, [
|
|
328
|
-
__props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$
|
|
329
|
-
vue.createElementVNode("div", _hoisted_6$
|
|
374
|
+
__props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$8, [
|
|
375
|
+
vue.createElementVNode("div", _hoisted_6$8, [
|
|
330
376
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
331
377
|
icon: "lucide:search",
|
|
332
378
|
class: "size-4 text-gray-400",
|
|
@@ -346,8 +392,8 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
346
392
|
])
|
|
347
393
|
])
|
|
348
394
|
])) : vue.createCommentVNode("", true),
|
|
349
|
-
filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$
|
|
350
|
-
vue.createElementVNode("div", _hoisted_8$
|
|
395
|
+
filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$7, vue.toDisplayString(__props.noResultsText), 1)) : vue.createCommentVNode("", true),
|
|
396
|
+
vue.createElementVNode("div", _hoisted_8$6, [
|
|
351
397
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index2) => {
|
|
352
398
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
353
399
|
key: String(option.value),
|
|
@@ -374,13 +420,13 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
374
420
|
icon: "lucide:check",
|
|
375
421
|
class: "size-4 shrink-0 text-primary",
|
|
376
422
|
"aria-hidden": "true"
|
|
377
|
-
})) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_10$
|
|
378
|
-
vue.createElementVNode("span", _hoisted_11$
|
|
423
|
+
})) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_10$4)),
|
|
424
|
+
vue.createElementVNode("span", _hoisted_11$4, vue.toDisplayString(option.label), 1)
|
|
379
425
|
])
|
|
380
|
-
], 42, _hoisted_9$
|
|
426
|
+
], 42, _hoisted_9$4);
|
|
381
427
|
}), 128))
|
|
382
428
|
])
|
|
383
|
-
], 14, _hoisted_4$
|
|
429
|
+
], 14, _hoisted_4$b)) : vue.createCommentVNode("", true)
|
|
384
430
|
]),
|
|
385
431
|
_: 3
|
|
386
432
|
})
|
|
@@ -389,8 +435,8 @@ const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
|
389
435
|
};
|
|
390
436
|
}
|
|
391
437
|
});
|
|
392
|
-
const _hoisted_1$
|
|
393
|
-
const _sfc_main$
|
|
438
|
+
const _hoisted_1$m = ["hidden"];
|
|
439
|
+
const _sfc_main$m = /* @__PURE__ */ vue.defineComponent({
|
|
394
440
|
__name: "FormGroup",
|
|
395
441
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
396
442
|
label: {},
|
|
@@ -431,7 +477,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
431
477
|
}, [
|
|
432
478
|
vue.renderSlot(_ctx.$slots, "default", {}, () => [
|
|
433
479
|
vue.renderSlot(_ctx.$slots, "label", {}, () => [
|
|
434
|
-
__props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
480
|
+
__props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$r, {
|
|
435
481
|
key: 0,
|
|
436
482
|
"html-for": inputId.value,
|
|
437
483
|
error: __props.error
|
|
@@ -443,7 +489,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
443
489
|
}, 8, ["html-for", "error"])) : vue.createCommentVNode("", true)
|
|
444
490
|
]),
|
|
445
491
|
vue.renderSlot(_ctx.$slots, "input", {}, () => [
|
|
446
|
-
isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
492
|
+
isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$n, vue.mergeProps({
|
|
447
493
|
key: 0,
|
|
448
494
|
modelValue: modelValue.value,
|
|
449
495
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event)
|
|
@@ -451,7 +497,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
451
497
|
id: inputId.value,
|
|
452
498
|
invalid: Boolean(__props.error),
|
|
453
499
|
"described-by": hasError.value ? helpId.value : void 0
|
|
454
|
-
}), null, 16, ["modelValue", "id", "invalid", "described-by"])) : (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
500
|
+
}), null, 16, ["modelValue", "id", "invalid", "described-by"])) : (vue.openBlock(), vue.createBlock(_sfc_main$o, vue.mergeProps({
|
|
455
501
|
key: 1,
|
|
456
502
|
modelValue: modelValue.value,
|
|
457
503
|
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event)
|
|
@@ -461,7 +507,7 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
461
507
|
"described-by": hasError.value ? helpId.value : void 0
|
|
462
508
|
}), null, 16, ["modelValue", "id", "invalid", "described-by"]))
|
|
463
509
|
]),
|
|
464
|
-
hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
510
|
+
hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
465
511
|
key: 0,
|
|
466
512
|
id: helpId.value,
|
|
467
513
|
error: true
|
|
@@ -472,53 +518,61 @@ const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
|
472
518
|
_: 1
|
|
473
519
|
}, 8, ["id"])) : vue.createCommentVNode("", true)
|
|
474
520
|
])
|
|
475
|
-
], 12, _hoisted_1$
|
|
521
|
+
], 12, _hoisted_1$m);
|
|
476
522
|
};
|
|
477
523
|
}
|
|
478
524
|
});
|
|
479
|
-
const _hoisted_1$
|
|
480
|
-
const
|
|
481
|
-
|
|
525
|
+
const _hoisted_1$l = ["name", "placeholder", "disabled"];
|
|
526
|
+
const _sfc_main$l = /* @__PURE__ */ vue.defineComponent({
|
|
527
|
+
...{
|
|
528
|
+
inheritAttrs: false
|
|
529
|
+
},
|
|
482
530
|
__name: "SearchInput",
|
|
483
|
-
props: {
|
|
484
|
-
modelValue: {},
|
|
531
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
485
532
|
placeholder: { default: "Search..." },
|
|
486
533
|
icon: { default: "lucide:search" },
|
|
487
|
-
disabled: { type: Boolean
|
|
488
|
-
|
|
534
|
+
disabled: { type: Boolean },
|
|
535
|
+
size: { default: "md" },
|
|
536
|
+
name: {}
|
|
537
|
+
}, {
|
|
538
|
+
"modelValue": { default: "" },
|
|
539
|
+
"modelModifiers": {}
|
|
540
|
+
}),
|
|
489
541
|
emits: ["update:modelValue"],
|
|
490
|
-
setup(__props
|
|
491
|
-
const
|
|
492
|
-
const
|
|
493
|
-
const target = event.target;
|
|
494
|
-
emit("update:modelValue", target.value);
|
|
495
|
-
};
|
|
542
|
+
setup(__props) {
|
|
543
|
+
const props = __props;
|
|
544
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
496
545
|
return (_ctx, _cache) => {
|
|
497
|
-
return vue.openBlock(), vue.
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
vue.
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
546
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
547
|
+
icon: props.icon,
|
|
548
|
+
size: props.size,
|
|
549
|
+
disabled: props.disabled
|
|
550
|
+
}, {
|
|
551
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
552
|
+
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
553
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
554
|
+
type: "text",
|
|
555
|
+
name: props.name,
|
|
556
|
+
placeholder: props.placeholder,
|
|
557
|
+
disabled: props.disabled,
|
|
558
|
+
class: inputClass
|
|
559
|
+
}, _ctx.$attrs), null, 16, _hoisted_1$l), [
|
|
560
|
+
[vue.vModelText, modelValue.value]
|
|
561
|
+
])
|
|
562
|
+
]),
|
|
563
|
+
_: 1
|
|
564
|
+
}, 8, ["icon", "size", "disabled"]);
|
|
511
565
|
};
|
|
512
566
|
}
|
|
513
567
|
});
|
|
514
|
-
const _hoisted_1$
|
|
515
|
-
const _hoisted_2$
|
|
568
|
+
const _hoisted_1$k = ["id", "aria-checked", "aria-labelledby", "aria-describedby", "disabled"];
|
|
569
|
+
const _hoisted_2$f = {
|
|
516
570
|
key: 0,
|
|
517
571
|
class: "flex flex-col"
|
|
518
572
|
};
|
|
519
|
-
const _hoisted_3$
|
|
520
|
-
const _hoisted_4$
|
|
521
|
-
const _sfc_main$
|
|
573
|
+
const _hoisted_3$e = ["id"];
|
|
574
|
+
const _hoisted_4$a = ["id"];
|
|
575
|
+
const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
|
|
522
576
|
__name: "Switch",
|
|
523
577
|
props: {
|
|
524
578
|
modelValue: { type: Boolean, default: false },
|
|
@@ -582,35 +636,35 @@ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
|
582
636
|
]),
|
|
583
637
|
"aria-hidden": "true"
|
|
584
638
|
}, null, 2)
|
|
585
|
-
], 10, _hoisted_1$
|
|
586
|
-
__props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$
|
|
639
|
+
], 10, _hoisted_1$k),
|
|
640
|
+
__props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$f, [
|
|
587
641
|
__props.label ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
588
642
|
key: 0,
|
|
589
643
|
id: labelId.value,
|
|
590
644
|
class: "text-sm font-medium text-gray-900 dark:text-white"
|
|
591
|
-
}, vue.toDisplayString(__props.label), 9, _hoisted_3$
|
|
645
|
+
}, vue.toDisplayString(__props.label), 9, _hoisted_3$e)) : vue.createCommentVNode("", true),
|
|
592
646
|
__props.description ? (vue.openBlock(), vue.createElementBlock("span", {
|
|
593
647
|
key: 1,
|
|
594
648
|
id: descriptionId.value,
|
|
595
649
|
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
596
|
-
}, vue.toDisplayString(__props.description), 9, _hoisted_4$
|
|
650
|
+
}, vue.toDisplayString(__props.description), 9, _hoisted_4$a)) : vue.createCommentVNode("", true)
|
|
597
651
|
])) : vue.createCommentVNode("", true)
|
|
598
652
|
], 2);
|
|
599
653
|
};
|
|
600
654
|
}
|
|
601
655
|
});
|
|
602
|
-
const _hoisted_1$
|
|
603
|
-
const _hoisted_2$
|
|
656
|
+
const _hoisted_1$j = { class: "w-full" };
|
|
657
|
+
const _hoisted_2$e = {
|
|
604
658
|
key: 0,
|
|
605
659
|
class: "mb-2 flex justify-between text-sm"
|
|
606
660
|
};
|
|
607
|
-
const _hoisted_3$
|
|
608
|
-
const _hoisted_4$
|
|
609
|
-
const _hoisted_5$
|
|
610
|
-
const _hoisted_6$
|
|
611
|
-
const _hoisted_7$
|
|
612
|
-
const _hoisted_8$
|
|
613
|
-
const _sfc_main$
|
|
661
|
+
const _hoisted_3$d = { class: "text-gray-600 dark:text-gray-400" };
|
|
662
|
+
const _hoisted_4$9 = { class: "font-medium text-gray-900 dark:text-white" };
|
|
663
|
+
const _hoisted_5$7 = { class: "text-gray-600 dark:text-gray-400" };
|
|
664
|
+
const _hoisted_6$7 = { class: "relative" };
|
|
665
|
+
const _hoisted_7$6 = ["value", "min", "max", "step", "disabled"];
|
|
666
|
+
const _hoisted_8$5 = { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center" };
|
|
667
|
+
const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
|
|
614
668
|
__name: "Slider",
|
|
615
669
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
616
670
|
min: { default: 0 },
|
|
@@ -641,13 +695,13 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
641
695
|
modelValue.value = Number(target.value);
|
|
642
696
|
};
|
|
643
697
|
return (_ctx, _cache) => {
|
|
644
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
645
|
-
__props.showValue ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$
|
|
646
|
-
vue.createElementVNode("span", _hoisted_3$
|
|
647
|
-
vue.createElementVNode("span", _hoisted_4$
|
|
648
|
-
vue.createElementVNode("span", _hoisted_5$
|
|
698
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$j, [
|
|
699
|
+
__props.showValue ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$e, [
|
|
700
|
+
vue.createElementVNode("span", _hoisted_3$d, vue.toDisplayString(__props.min), 1),
|
|
701
|
+
vue.createElementVNode("span", _hoisted_4$9, vue.toDisplayString(displayValue.value), 1),
|
|
702
|
+
vue.createElementVNode("span", _hoisted_5$7, vue.toDisplayString(__props.max), 1)
|
|
649
703
|
])) : vue.createCommentVNode("", true),
|
|
650
|
-
vue.createElementVNode("div", _hoisted_6$
|
|
704
|
+
vue.createElementVNode("div", _hoisted_6$7, [
|
|
651
705
|
vue.createElementVNode("input", {
|
|
652
706
|
type: "range",
|
|
653
707
|
value: modelValue.value,
|
|
@@ -657,8 +711,8 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
657
711
|
disabled: __props.disabled,
|
|
658
712
|
class: "slider-input w-full cursor-pointer appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50",
|
|
659
713
|
onInput: handleInput
|
|
660
|
-
}, null, 40, _hoisted_7$
|
|
661
|
-
vue.createElementVNode("div", _hoisted_8$
|
|
714
|
+
}, null, 40, _hoisted_7$6),
|
|
715
|
+
vue.createElementVNode("div", _hoisted_8$5, [
|
|
662
716
|
vue.createElementVNode("div", {
|
|
663
717
|
class: "h-2 rounded-full bg-primary",
|
|
664
718
|
style: vue.normalizeStyle({ width: `${percentage.value}%` })
|
|
@@ -669,27 +723,27 @@ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
|
669
723
|
};
|
|
670
724
|
}
|
|
671
725
|
});
|
|
672
|
-
const Slider = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$
|
|
673
|
-
const _hoisted_1$
|
|
674
|
-
const _hoisted_2$
|
|
675
|
-
const _hoisted_3$
|
|
676
|
-
const _hoisted_4$
|
|
677
|
-
const _hoisted_5$
|
|
678
|
-
const _hoisted_6$
|
|
679
|
-
const _hoisted_7$
|
|
726
|
+
const Slider = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$j, [["__scopeId", "data-v-c25e2c2a"]]);
|
|
727
|
+
const _hoisted_1$i = { class: "relative" };
|
|
728
|
+
const _hoisted_2$d = ["id", "disabled", "aria-expanded", "aria-controls"];
|
|
729
|
+
const _hoisted_3$c = { class: "flex-1 truncate" };
|
|
730
|
+
const _hoisted_4$8 = { class: "flex items-center gap-1" };
|
|
731
|
+
const _hoisted_5$6 = ["id", "aria-label"];
|
|
732
|
+
const _hoisted_6$6 = { class: "mb-4 flex items-center justify-between" };
|
|
733
|
+
const _hoisted_7$5 = {
|
|
680
734
|
class: "font-medium text-gray-900 dark:text-white",
|
|
681
735
|
"aria-live": "polite",
|
|
682
736
|
"aria-atomic": "true"
|
|
683
737
|
};
|
|
684
|
-
const _hoisted_8$
|
|
738
|
+
const _hoisted_8$4 = {
|
|
685
739
|
class: "mb-2 grid grid-cols-7 gap-1",
|
|
686
740
|
role: "row"
|
|
687
741
|
};
|
|
688
|
-
const _hoisted_9$
|
|
689
|
-
const _hoisted_10$
|
|
690
|
-
const _hoisted_11$
|
|
691
|
-
const _hoisted_12$
|
|
692
|
-
const _sfc_main$
|
|
742
|
+
const _hoisted_9$3 = ["abbr"];
|
|
743
|
+
const _hoisted_10$3 = ["id", "aria-label"];
|
|
744
|
+
const _hoisted_11$3 = ["aria-label", "aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
745
|
+
const _hoisted_12$2 = { class: "mt-4 border-t border-gray-200 pt-3 dark:border-gray-700" };
|
|
746
|
+
const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({
|
|
693
747
|
__name: "DatePicker",
|
|
694
748
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
695
749
|
placeholder: { default: "Select date" },
|
|
@@ -813,7 +867,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
813
867
|
return formatter.format(date);
|
|
814
868
|
};
|
|
815
869
|
return (_ctx, _cache) => {
|
|
816
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
870
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$i, [
|
|
817
871
|
vue.createElementVNode("button", {
|
|
818
872
|
id: triggerId.value,
|
|
819
873
|
ref_key: "triggerRef",
|
|
@@ -831,8 +885,8 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
831
885
|
onClick: _cache[0] || (_cache[0] = //@ts-ignore
|
|
832
886
|
(...args) => vue.unref(toggle) && vue.unref(toggle)(...args))
|
|
833
887
|
}, [
|
|
834
|
-
vue.createElementVNode("span", _hoisted_3$
|
|
835
|
-
vue.createElementVNode("div", _hoisted_4$
|
|
888
|
+
vue.createElementVNode("span", _hoisted_3$c, vue.toDisplayString(displayValue.value || __props.placeholder), 1),
|
|
889
|
+
vue.createElementVNode("div", _hoisted_4$8, [
|
|
836
890
|
modelValue.value ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
837
891
|
key: 0,
|
|
838
892
|
type: "button",
|
|
@@ -852,7 +906,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
852
906
|
"aria-hidden": "true"
|
|
853
907
|
})
|
|
854
908
|
])
|
|
855
|
-
], 10, _hoisted_2$
|
|
909
|
+
], 10, _hoisted_2$d),
|
|
856
910
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
857
911
|
to: "body",
|
|
858
912
|
disabled: !__props.teleport
|
|
@@ -877,7 +931,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
877
931
|
style: vue.normalizeStyle(vue.unref(dropdownStyle)),
|
|
878
932
|
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"
|
|
879
933
|
}, [
|
|
880
|
-
vue.createElementVNode("div", _hoisted_6$
|
|
934
|
+
vue.createElementVNode("div", _hoisted_6$6, [
|
|
881
935
|
vue.createElementVNode("button", {
|
|
882
936
|
type: "button",
|
|
883
937
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
@@ -890,7 +944,7 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
890
944
|
"aria-hidden": "true"
|
|
891
945
|
})
|
|
892
946
|
]),
|
|
893
|
-
vue.createElementVNode("span", _hoisted_7$
|
|
947
|
+
vue.createElementVNode("span", _hoisted_7$5, vue.toDisplayString(monthYear.value), 1),
|
|
894
948
|
vue.createElementVNode("button", {
|
|
895
949
|
type: "button",
|
|
896
950
|
class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
|
|
@@ -904,14 +958,14 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
904
958
|
})
|
|
905
959
|
])
|
|
906
960
|
]),
|
|
907
|
-
vue.createElementVNode("div", _hoisted_8$
|
|
961
|
+
vue.createElementVNode("div", _hoisted_8$4, [
|
|
908
962
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekDays.value, (day) => {
|
|
909
963
|
return vue.openBlock(), vue.createElementBlock("div", {
|
|
910
964
|
key: day,
|
|
911
965
|
class: "text-center text-xs font-medium text-gray-500 dark:text-gray-400",
|
|
912
966
|
role: "columnheader",
|
|
913
967
|
abbr: day
|
|
914
|
-
}, vue.toDisplayString(day), 9, _hoisted_9$
|
|
968
|
+
}, vue.toDisplayString(day), 9, _hoisted_9$3);
|
|
915
969
|
}), 128))
|
|
916
970
|
]),
|
|
917
971
|
vue.createElementVNode("div", {
|
|
@@ -938,17 +992,17 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
938
992
|
day.isSelected && "bg-primary text-white font-semibold"
|
|
939
993
|
]),
|
|
940
994
|
onClick: ($event) => selectDate(day)
|
|
941
|
-
}, vue.toDisplayString(day.date.getDate()), 11, _hoisted_11$
|
|
995
|
+
}, vue.toDisplayString(day.date.getDate()), 11, _hoisted_11$3);
|
|
942
996
|
}), 128))
|
|
943
|
-
], 8, _hoisted_10$
|
|
944
|
-
vue.createElementVNode("div", _hoisted_12$
|
|
997
|
+
], 8, _hoisted_10$3),
|
|
998
|
+
vue.createElementVNode("div", _hoisted_12$2, [
|
|
945
999
|
vue.createElementVNode("button", {
|
|
946
1000
|
type: "button",
|
|
947
1001
|
class: "w-full rounded py-1.5 text-sm font-medium text-primary hover:bg-primary/10",
|
|
948
1002
|
onClick: _cache[1] || (_cache[1] = ($event) => selectDate({ date: /* @__PURE__ */ new Date(), isDisabled: false }))
|
|
949
1003
|
}, " Today ")
|
|
950
1004
|
])
|
|
951
|
-
], 12, _hoisted_5$
|
|
1005
|
+
], 12, _hoisted_5$6)) : vue.createCommentVNode("", true)
|
|
952
1006
|
]),
|
|
953
1007
|
_: 1
|
|
954
1008
|
})
|
|
@@ -957,27 +1011,27 @@ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
|
957
1011
|
};
|
|
958
1012
|
}
|
|
959
1013
|
});
|
|
960
|
-
const _hoisted_1$
|
|
961
|
-
const _hoisted_2$
|
|
962
|
-
const _hoisted_3$
|
|
963
|
-
const _hoisted_4$
|
|
964
|
-
const _hoisted_5$
|
|
1014
|
+
const _hoisted_1$h = { class: "space-y-4" };
|
|
1015
|
+
const _hoisted_2$c = ["accept", "multiple", "disabled"];
|
|
1016
|
+
const _hoisted_3$b = { class: "space-y-2" };
|
|
1017
|
+
const _hoisted_4$7 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300" };
|
|
1018
|
+
const _hoisted_5$5 = {
|
|
965
1019
|
key: 0,
|
|
966
1020
|
class: "text-xs text-gray-500 dark:text-gray-400"
|
|
967
1021
|
};
|
|
968
|
-
const _hoisted_6$
|
|
1022
|
+
const _hoisted_6$5 = {
|
|
969
1023
|
key: 1,
|
|
970
1024
|
class: "text-xs text-gray-500 dark:text-gray-400"
|
|
971
1025
|
};
|
|
972
|
-
const _hoisted_7$
|
|
1026
|
+
const _hoisted_7$4 = {
|
|
973
1027
|
key: 0,
|
|
974
1028
|
class: "space-y-2"
|
|
975
1029
|
};
|
|
976
|
-
const _hoisted_8$
|
|
977
|
-
const _hoisted_9$
|
|
978
|
-
const _hoisted_10$
|
|
979
|
-
const _hoisted_11$
|
|
980
|
-
const _sfc_main$
|
|
1030
|
+
const _hoisted_8$3 = { class: "flex-1 min-w-0" };
|
|
1031
|
+
const _hoisted_9$2 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300 truncate" };
|
|
1032
|
+
const _hoisted_10$2 = { class: "text-xs text-gray-500 dark:text-gray-400" };
|
|
1033
|
+
const _hoisted_11$2 = ["onClick"];
|
|
1034
|
+
const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({
|
|
981
1035
|
__name: "FileUpload",
|
|
982
1036
|
props: {
|
|
983
1037
|
accept: {},
|
|
@@ -1105,7 +1159,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1105
1159
|
return "heroicons:document";
|
|
1106
1160
|
};
|
|
1107
1161
|
return (_ctx, _cache) => {
|
|
1108
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
1162
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$h, [
|
|
1109
1163
|
vue.createElementVNode("div", {
|
|
1110
1164
|
class: vue.normalizeClass(dropzoneClasses.value),
|
|
1111
1165
|
onDrop: vue.withModifiers(handleDrop, ["prevent"]),
|
|
@@ -1122,18 +1176,18 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1122
1176
|
multiple: __props.multiple,
|
|
1123
1177
|
disabled: __props.disabled,
|
|
1124
1178
|
onChange: handleInputChange
|
|
1125
|
-
}, null, 40, _hoisted_2$
|
|
1126
|
-
vue.createElementVNode("div", _hoisted_3$
|
|
1179
|
+
}, null, 40, _hoisted_2$c),
|
|
1180
|
+
vue.createElementVNode("div", _hoisted_3$b, [
|
|
1127
1181
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
1128
1182
|
icon: "heroicons:cloud-arrow-up",
|
|
1129
1183
|
class: vue.normalizeClass(["size-12 mx-auto text-gray-400", { "text-primary-500": isDragging.value }])
|
|
1130
1184
|
}, null, 8, ["class"]),
|
|
1131
|
-
vue.createElementVNode("p", _hoisted_4$
|
|
1132
|
-
__props.description ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_5$
|
|
1133
|
-
__props.maxSize ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_6$
|
|
1185
|
+
vue.createElementVNode("p", _hoisted_4$7, vue.toDisplayString(__props.label), 1),
|
|
1186
|
+
__props.description ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_5$5, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true),
|
|
1187
|
+
__props.maxSize ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_6$5, " Max size: " + vue.toDisplayString(formatSize(__props.maxSize)), 1)) : vue.createCommentVNode("", true)
|
|
1134
1188
|
])
|
|
1135
1189
|
], 34),
|
|
1136
|
-
files.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_7$
|
|
1190
|
+
files.value.length > 0 ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_7$4, [
|
|
1137
1191
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(files.value, (uploadedFile) => {
|
|
1138
1192
|
return vue.openBlock(), vue.createElementBlock("li", {
|
|
1139
1193
|
key: uploadedFile.id,
|
|
@@ -1143,9 +1197,9 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1143
1197
|
icon: getFileIcon(uploadedFile.file),
|
|
1144
1198
|
class: "size-8 text-gray-400"
|
|
1145
1199
|
}, null, 8, ["icon"]),
|
|
1146
|
-
vue.createElementVNode("div", _hoisted_8$
|
|
1147
|
-
vue.createElementVNode("p", _hoisted_9$
|
|
1148
|
-
vue.createElementVNode("p", _hoisted_10$
|
|
1200
|
+
vue.createElementVNode("div", _hoisted_8$3, [
|
|
1201
|
+
vue.createElementVNode("p", _hoisted_9$2, vue.toDisplayString(uploadedFile.file.name), 1),
|
|
1202
|
+
vue.createElementVNode("p", _hoisted_10$2, vue.toDisplayString(formatSize(uploadedFile.file.size)), 1)
|
|
1149
1203
|
]),
|
|
1150
1204
|
vue.createElementVNode("button", {
|
|
1151
1205
|
type: "button",
|
|
@@ -1156,7 +1210,7 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1156
1210
|
icon: "heroicons:x-mark",
|
|
1157
1211
|
class: "size-5"
|
|
1158
1212
|
})
|
|
1159
|
-
], 8, _hoisted_11$
|
|
1213
|
+
], 8, _hoisted_11$2)
|
|
1160
1214
|
]);
|
|
1161
1215
|
}), 128))
|
|
1162
1216
|
])) : vue.createCommentVNode("", true)
|
|
@@ -1164,13 +1218,13 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1164
1218
|
};
|
|
1165
1219
|
}
|
|
1166
1220
|
});
|
|
1167
|
-
const _hoisted_1$
|
|
1168
|
-
const _hoisted_2$
|
|
1169
|
-
const _hoisted_3$
|
|
1221
|
+
const _hoisted_1$g = { class: "flex items-center gap-1" };
|
|
1222
|
+
const _hoisted_2$b = ["disabled", "onClick", "onMousemove"];
|
|
1223
|
+
const _hoisted_3$a = {
|
|
1170
1224
|
key: 0,
|
|
1171
1225
|
class: "ml-2 text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
1172
1226
|
};
|
|
1173
|
-
const _sfc_main$
|
|
1227
|
+
const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
|
|
1174
1228
|
__name: "Rating",
|
|
1175
1229
|
props: {
|
|
1176
1230
|
modelValue: { default: 0 },
|
|
@@ -1233,7 +1287,7 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1233
1287
|
hoverValue.value = null;
|
|
1234
1288
|
};
|
|
1235
1289
|
return (_ctx, _cache) => {
|
|
1236
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
1290
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$g, [
|
|
1237
1291
|
vue.createElementVNode("div", {
|
|
1238
1292
|
class: "flex items-center",
|
|
1239
1293
|
onMouseleave: handleMouseLeave
|
|
@@ -1265,29 +1319,29 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1265
1319
|
class: vue.normalizeClass([sizeClasses.value, __props.color])
|
|
1266
1320
|
}, null, 8, ["icon", "class"])
|
|
1267
1321
|
], 4)
|
|
1268
|
-
], 42, _hoisted_2$
|
|
1322
|
+
], 42, _hoisted_2$b);
|
|
1269
1323
|
}), 128))
|
|
1270
1324
|
], 32),
|
|
1271
|
-
__props.showValue ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$
|
|
1325
|
+
__props.showValue ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$a, vue.toDisplayString(__props.modelValue.toFixed(__props.allowHalf ? 1 : 0)), 1)) : vue.createCommentVNode("", true)
|
|
1272
1326
|
]);
|
|
1273
1327
|
};
|
|
1274
1328
|
}
|
|
1275
1329
|
});
|
|
1276
|
-
const _hoisted_1$
|
|
1277
|
-
const _hoisted_2$
|
|
1330
|
+
const _hoisted_1$f = { class: "relative inline-block" };
|
|
1331
|
+
const _hoisted_2$a = {
|
|
1278
1332
|
key: 0,
|
|
1279
1333
|
class: "block text-sm font-medium text-gray-700 dark:text-gray-300 mb-1"
|
|
1280
1334
|
};
|
|
1281
|
-
const _hoisted_3$
|
|
1282
|
-
const _hoisted_4$
|
|
1283
|
-
const _hoisted_5$
|
|
1284
|
-
const _hoisted_6$
|
|
1285
|
-
const _hoisted_7$
|
|
1335
|
+
const _hoisted_3$9 = ["disabled"];
|
|
1336
|
+
const _hoisted_4$6 = { class: "text-sm font-mono text-gray-700 dark:text-gray-300" };
|
|
1337
|
+
const _hoisted_5$4 = { class: "grid grid-cols-5 gap-2 mb-3" };
|
|
1338
|
+
const _hoisted_6$4 = ["title", "onClick"];
|
|
1339
|
+
const _hoisted_7$3 = {
|
|
1286
1340
|
key: 0,
|
|
1287
1341
|
class: "flex items-center gap-2 pt-3 border-t border-gray-200 dark:border-gray-700"
|
|
1288
1342
|
};
|
|
1289
|
-
const _hoisted_8$
|
|
1290
|
-
const _sfc_main$
|
|
1343
|
+
const _hoisted_8$2 = ["value"];
|
|
1344
|
+
const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
|
|
1291
1345
|
__name: "ColorPicker",
|
|
1292
1346
|
props: {
|
|
1293
1347
|
modelValue: { default: "#3b82f6" },
|
|
@@ -1356,8 +1410,8 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1356
1410
|
isOpen.value = false;
|
|
1357
1411
|
};
|
|
1358
1412
|
return (_ctx, _cache) => {
|
|
1359
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
1360
|
-
__props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_2$
|
|
1413
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$f, [
|
|
1414
|
+
__props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_2$a, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
|
|
1361
1415
|
vue.createElementVNode("button", {
|
|
1362
1416
|
type: "button",
|
|
1363
1417
|
class: vue.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 }]),
|
|
@@ -1368,12 +1422,12 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1368
1422
|
class: "size-6 rounded border border-gray-200 dark:border-gray-600",
|
|
1369
1423
|
style: vue.normalizeStyle({ backgroundColor: __props.modelValue })
|
|
1370
1424
|
}, null, 4),
|
|
1371
|
-
vue.createElementVNode("span", _hoisted_4$
|
|
1425
|
+
vue.createElementVNode("span", _hoisted_4$6, vue.toDisplayString(__props.modelValue), 1),
|
|
1372
1426
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
1373
1427
|
icon: "heroicons:chevron-down",
|
|
1374
1428
|
class: vue.normalizeClass(["size-4 text-gray-400", { "rotate-180": isOpen.value }])
|
|
1375
1429
|
}, null, 8, ["class"])
|
|
1376
|
-
], 10, _hoisted_3$
|
|
1430
|
+
], 10, _hoisted_3$9),
|
|
1377
1431
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
1378
1432
|
to: teleportTarget.value,
|
|
1379
1433
|
disabled: teleportDisabled.value
|
|
@@ -1393,7 +1447,7 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1393
1447
|
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
|
1394
1448
|
}, ["stop"]))
|
|
1395
1449
|
}, [
|
|
1396
|
-
vue.createElementVNode("div", _hoisted_5$
|
|
1450
|
+
vue.createElementVNode("div", _hoisted_5$4, [
|
|
1397
1451
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.swatches, (color) => {
|
|
1398
1452
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
1399
1453
|
key: color,
|
|
@@ -1412,16 +1466,16 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1412
1466
|
["#ffffff", "#f9fafb", "#f3f4f6", "#e5e7eb", "#eab308", "#f59e0b"].includes(color) ? "text-gray-800" : "text-white"
|
|
1413
1467
|
]])
|
|
1414
1468
|
}, null, 8, ["class"])) : vue.createCommentVNode("", true)
|
|
1415
|
-
], 14, _hoisted_6$
|
|
1469
|
+
], 14, _hoisted_6$4);
|
|
1416
1470
|
}), 128))
|
|
1417
1471
|
]),
|
|
1418
|
-
__props.showInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$
|
|
1472
|
+
__props.showInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$3, [
|
|
1419
1473
|
vue.createElementVNode("input", {
|
|
1420
1474
|
type: "color",
|
|
1421
1475
|
value: __props.modelValue,
|
|
1422
1476
|
class: "size-8 rounded cursor-pointer border-0 p-0",
|
|
1423
1477
|
onInput: handleNativeInput
|
|
1424
|
-
}, null, 40, _hoisted_8$
|
|
1478
|
+
}, null, 40, _hoisted_8$2),
|
|
1425
1479
|
vue.withDirectives(vue.createElementVNode("input", {
|
|
1426
1480
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputValue.value = $event),
|
|
1427
1481
|
type: "text",
|
|
@@ -1447,16 +1501,16 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1447
1501
|
};
|
|
1448
1502
|
}
|
|
1449
1503
|
});
|
|
1450
|
-
const _hoisted_1$
|
|
1451
|
-
const _hoisted_2$
|
|
1504
|
+
const _hoisted_1$e = { class: "space-y-2" };
|
|
1505
|
+
const _hoisted_2$9 = {
|
|
1452
1506
|
key: 0,
|
|
1453
1507
|
class: "flex justify-between text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
1454
1508
|
};
|
|
1455
|
-
const _hoisted_3$
|
|
1509
|
+
const _hoisted_3$8 = {
|
|
1456
1510
|
key: 1,
|
|
1457
1511
|
class: "flex justify-between text-xs text-gray-500 dark:text-gray-400"
|
|
1458
1512
|
};
|
|
1459
|
-
const _sfc_main$
|
|
1513
|
+
const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
|
|
1460
1514
|
__name: "RangeSlider",
|
|
1461
1515
|
props: {
|
|
1462
1516
|
modelValue: { default: () => [25, 75] },
|
|
@@ -1534,8 +1588,8 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1534
1588
|
}
|
|
1535
1589
|
};
|
|
1536
1590
|
return (_ctx, _cache) => {
|
|
1537
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
1538
|
-
__props.showLabels ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$
|
|
1591
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
|
|
1592
|
+
__props.showLabels ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$9, [
|
|
1539
1593
|
vue.createElementVNode("span", null, vue.toDisplayString(__props.formatLabel(minValue.value)), 1),
|
|
1540
1594
|
vue.createElementVNode("span", null, vue.toDisplayString(__props.formatLabel(maxValue.value)), 1)
|
|
1541
1595
|
])) : vue.createCommentVNode("", true),
|
|
@@ -1568,7 +1622,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1568
1622
|
onMousedown: _cache[1] || (_cache[1] = ($event) => handleMouseDown("max"))
|
|
1569
1623
|
}, null, 38)
|
|
1570
1624
|
], 2),
|
|
1571
|
-
__props.showMinMax ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$
|
|
1625
|
+
__props.showMinMax ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$8, [
|
|
1572
1626
|
vue.createElementVNode("span", null, vue.toDisplayString(__props.formatLabel(__props.min)), 1),
|
|
1573
1627
|
vue.createElementVNode("span", null, vue.toDisplayString(__props.formatLabel(__props.max)), 1)
|
|
1574
1628
|
])) : vue.createCommentVNode("", true)
|
|
@@ -1576,18 +1630,18 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1576
1630
|
};
|
|
1577
1631
|
}
|
|
1578
1632
|
});
|
|
1579
|
-
const _hoisted_1$
|
|
1580
|
-
const _hoisted_2$
|
|
1581
|
-
const _hoisted_3$
|
|
1582
|
-
const _hoisted_4$
|
|
1583
|
-
const _hoisted_5$
|
|
1584
|
-
const _hoisted_6$
|
|
1585
|
-
const _hoisted_7$
|
|
1633
|
+
const _hoisted_1$d = ["aria-expanded", "aria-controls"];
|
|
1634
|
+
const _hoisted_2$8 = ["id", "name", "placeholder", "disabled", "aria-controls"];
|
|
1635
|
+
const _hoisted_3$7 = { class: "flex items-center gap-1" };
|
|
1636
|
+
const _hoisted_4$5 = ["id", "aria-label", "aria-multiselectable"];
|
|
1637
|
+
const _hoisted_5$3 = ["aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
1638
|
+
const _hoisted_6$3 = { class: "flex-1" };
|
|
1639
|
+
const _hoisted_7$2 = {
|
|
1586
1640
|
key: 1,
|
|
1587
1641
|
class: "px-3 py-2 text-center text-sm text-gray-500 dark:text-gray-400",
|
|
1588
1642
|
role: "status"
|
|
1589
1643
|
};
|
|
1590
|
-
const _sfc_main$
|
|
1644
|
+
const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
|
|
1591
1645
|
__name: "Combobox",
|
|
1592
1646
|
props: {
|
|
1593
1647
|
modelValue: {},
|
|
@@ -1718,10 +1772,10 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1718
1772
|
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",
|
|
1719
1773
|
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
|
1720
1774
|
}, ["stop"]))
|
|
1721
|
-
}, null, 8, _hoisted_2$
|
|
1775
|
+
}, null, 8, _hoisted_2$8)), [
|
|
1722
1776
|
[vue.vModelText, search.value]
|
|
1723
1777
|
]),
|
|
1724
|
-
vue.createElementVNode("div", _hoisted_3$
|
|
1778
|
+
vue.createElementVNode("div", _hoisted_3$7, [
|
|
1725
1779
|
__props.clearable && selectedOptions.value.length > 0 && !__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
1726
1780
|
key: 0,
|
|
1727
1781
|
type: "button",
|
|
@@ -1744,7 +1798,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1744
1798
|
"aria-hidden": "true"
|
|
1745
1799
|
}, null, 8, ["class"])
|
|
1746
1800
|
])
|
|
1747
|
-
], 10, _hoisted_1$
|
|
1801
|
+
], 10, _hoisted_1$d),
|
|
1748
1802
|
(vue.openBlock(), vue.createBlock(vue.Teleport, {
|
|
1749
1803
|
to: teleportTarget.value,
|
|
1750
1804
|
disabled: teleportDisabled.value
|
|
@@ -1794,16 +1848,16 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1794
1848
|
class: "size-3"
|
|
1795
1849
|
})) : vue.createCommentVNode("", true)
|
|
1796
1850
|
], 2)) : vue.createCommentVNode("", true),
|
|
1797
|
-
vue.createElementVNode("span", _hoisted_6$
|
|
1851
|
+
vue.createElementVNode("span", _hoisted_6$3, vue.toDisplayString(option.label), 1),
|
|
1798
1852
|
!__props.multiple && isSelected(option) ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
1799
1853
|
key: 1,
|
|
1800
1854
|
icon: "lucide:check",
|
|
1801
1855
|
class: "size-4 text-primary",
|
|
1802
1856
|
"aria-hidden": "true"
|
|
1803
1857
|
})) : vue.createCommentVNode("", true)
|
|
1804
|
-
], 10, _hoisted_5$
|
|
1805
|
-
}), 128)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$
|
|
1806
|
-
], 8, _hoisted_4$
|
|
1858
|
+
], 10, _hoisted_5$3);
|
|
1859
|
+
}), 128)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2, vue.toDisplayString(__props.noResultsText), 1))
|
|
1860
|
+
], 8, _hoisted_4$5)) : vue.createCommentVNode("", true)
|
|
1807
1861
|
]),
|
|
1808
1862
|
_: 1
|
|
1809
1863
|
})
|
|
@@ -1812,30 +1866,30 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1812
1866
|
};
|
|
1813
1867
|
}
|
|
1814
1868
|
});
|
|
1815
|
-
const _hoisted_1$
|
|
1816
|
-
const _hoisted_2$
|
|
1869
|
+
const _hoisted_1$c = { class: "relative" };
|
|
1870
|
+
const _hoisted_2$7 = {
|
|
1817
1871
|
key: 0,
|
|
1818
1872
|
class: "text-red-500 ml-0.5"
|
|
1819
1873
|
};
|
|
1820
|
-
const _hoisted_3$
|
|
1821
|
-
const _hoisted_4$
|
|
1874
|
+
const _hoisted_3$6 = ["id", "disabled", "aria-invalid", "aria-describedby"];
|
|
1875
|
+
const _hoisted_4$4 = {
|
|
1822
1876
|
key: 0,
|
|
1823
1877
|
class: "flex items-center gap-2 flex-1"
|
|
1824
1878
|
};
|
|
1825
|
-
const _hoisted_5$
|
|
1826
|
-
const _hoisted_6$
|
|
1827
|
-
const _hoisted_7 = {
|
|
1879
|
+
const _hoisted_5$2 = { class: "flex size-8 items-center justify-center rounded bg-gray-100 dark:bg-gray-800" };
|
|
1880
|
+
const _hoisted_6$2 = { class: "text-gray-700 dark:text-gray-300 font-mono text-xs truncate" };
|
|
1881
|
+
const _hoisted_7$1 = {
|
|
1828
1882
|
key: 1,
|
|
1829
1883
|
class: "flex-1 text-gray-400 dark:text-gray-500"
|
|
1830
1884
|
};
|
|
1831
|
-
const _hoisted_8 = { class: "relative mb-4" };
|
|
1832
|
-
const _hoisted_9 = ["placeholder"];
|
|
1833
|
-
const _hoisted_10 = {
|
|
1885
|
+
const _hoisted_8$1 = { class: "relative mb-4" };
|
|
1886
|
+
const _hoisted_9$1 = ["placeholder"];
|
|
1887
|
+
const _hoisted_10$1 = {
|
|
1834
1888
|
key: 0,
|
|
1835
1889
|
class: "absolute right-3 top-1/2 -translate-y-1/2"
|
|
1836
1890
|
};
|
|
1837
|
-
const _hoisted_11 = { class: "max-h-64 overflow-y-auto" };
|
|
1838
|
-
const _hoisted_12 = {
|
|
1891
|
+
const _hoisted_11$1 = { class: "max-h-64 overflow-y-auto" };
|
|
1892
|
+
const _hoisted_12$1 = {
|
|
1839
1893
|
key: 0,
|
|
1840
1894
|
class: "py-8 text-center text-sm text-gray-500"
|
|
1841
1895
|
};
|
|
@@ -1846,7 +1900,7 @@ const _hoisted_13 = {
|
|
|
1846
1900
|
const _hoisted_14 = ["title", "onClick"];
|
|
1847
1901
|
const _hoisted_15 = { class: "mt-4 flex items-center justify-between border-t border-gray-200 pt-4 dark:border-gray-700" };
|
|
1848
1902
|
const _hoisted_16 = { class: "text-xs text-gray-500" };
|
|
1849
|
-
const _sfc_main$
|
|
1903
|
+
const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
|
|
1850
1904
|
__name: "IconPicker",
|
|
1851
1905
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
1852
1906
|
label: {},
|
|
@@ -1970,15 +2024,15 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1970
2024
|
searchQuery.value = "";
|
|
1971
2025
|
}
|
|
1972
2026
|
return (_ctx, _cache) => {
|
|
1973
|
-
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$
|
|
1974
|
-
__props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
2027
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$c, [
|
|
2028
|
+
__props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$r, {
|
|
1975
2029
|
key: 0,
|
|
1976
2030
|
"html-for": inputId.value,
|
|
1977
2031
|
error: __props.error
|
|
1978
2032
|
}, {
|
|
1979
2033
|
default: vue.withCtx(() => [
|
|
1980
2034
|
vue.createTextVNode(vue.toDisplayString(__props.label) + " ", 1),
|
|
1981
|
-
__props.required ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$
|
|
2035
|
+
__props.required ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$7, "*")) : vue.createCommentVNode("", true)
|
|
1982
2036
|
]),
|
|
1983
2037
|
_: 1
|
|
1984
2038
|
}, 8, ["html-for", "error"])) : vue.createCommentVNode("", true),
|
|
@@ -1994,15 +2048,15 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
1994
2048
|
]]),
|
|
1995
2049
|
onClick: openPicker
|
|
1996
2050
|
}, [
|
|
1997
|
-
modelValue.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$
|
|
1998
|
-
vue.createElementVNode("div", _hoisted_5$
|
|
2051
|
+
modelValue.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$4, [
|
|
2052
|
+
vue.createElementVNode("div", _hoisted_5$2, [
|
|
1999
2053
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2000
2054
|
icon: modelValue.value,
|
|
2001
2055
|
class: "size-5 text-gray-700 dark:text-gray-300"
|
|
2002
2056
|
}, null, 8, ["icon"])
|
|
2003
2057
|
]),
|
|
2004
|
-
vue.createElementVNode("span", _hoisted_6$
|
|
2005
|
-
])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_7, vue.toDisplayString(__props.placeholder), 1)),
|
|
2058
|
+
vue.createElementVNode("span", _hoisted_6$2, vue.toDisplayString(modelValue.value), 1)
|
|
2059
|
+
])) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$1, vue.toDisplayString(__props.placeholder), 1)),
|
|
2006
2060
|
modelValue.value && !__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
2007
2061
|
key: 2,
|
|
2008
2062
|
type: "button",
|
|
@@ -2018,8 +2072,8 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2018
2072
|
icon: "lucide:chevron-down",
|
|
2019
2073
|
class: "size-4 text-gray-400"
|
|
2020
2074
|
})
|
|
2021
|
-
], 10, _hoisted_3$
|
|
2022
|
-
__props.help && !hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
2075
|
+
], 10, _hoisted_3$6),
|
|
2076
|
+
__props.help && !hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
2023
2077
|
key: 1,
|
|
2024
2078
|
id: helpId.value
|
|
2025
2079
|
}, {
|
|
@@ -2028,7 +2082,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2028
2082
|
]),
|
|
2029
2083
|
_: 1
|
|
2030
2084
|
}, 8, ["id"])) : vue.createCommentVNode("", true),
|
|
2031
|
-
hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$
|
|
2085
|
+
hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$q, {
|
|
2032
2086
|
key: 2,
|
|
2033
2087
|
id: helpId.value,
|
|
2034
2088
|
error: true
|
|
@@ -2049,7 +2103,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2049
2103
|
onClick: _cache[1] || (_cache[1] = vue.withModifiers(() => {
|
|
2050
2104
|
}, ["stop"]))
|
|
2051
2105
|
}, [
|
|
2052
|
-
vue.createElementVNode("div", _hoisted_8, [
|
|
2106
|
+
vue.createElementVNode("div", _hoisted_8$1, [
|
|
2053
2107
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2054
2108
|
icon: "lucide:search",
|
|
2055
2109
|
class: "absolute left-3 top-1/2 size-4 -translate-y-1/2 text-gray-400"
|
|
@@ -2060,18 +2114,18 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2060
2114
|
placeholder: __props.placeholder,
|
|
2061
2115
|
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",
|
|
2062
2116
|
autofocus: ""
|
|
2063
|
-
}, null, 8, _hoisted_9), [
|
|
2117
|
+
}, null, 8, _hoisted_9$1), [
|
|
2064
2118
|
[vue.vModelText, searchQuery.value]
|
|
2065
2119
|
]),
|
|
2066
|
-
isLoading.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
|
|
2120
|
+
isLoading.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10$1, [
|
|
2067
2121
|
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2068
2122
|
icon: "lucide:loader-2",
|
|
2069
2123
|
class: "size-4 animate-spin text-gray-400"
|
|
2070
2124
|
})
|
|
2071
2125
|
])) : vue.createCommentVNode("", true)
|
|
2072
2126
|
]),
|
|
2073
|
-
vue.createElementVNode("div", _hoisted_11, [
|
|
2074
|
-
displayedIcons.value.length === 0 && searchQuery.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12, ' Aucune icône trouvée pour "' + vue.toDisplayString(searchQuery.value) + '" ', 1)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
|
|
2127
|
+
vue.createElementVNode("div", _hoisted_11$1, [
|
|
2128
|
+
displayedIcons.value.length === 0 && searchQuery.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$1, ' Aucune icône trouvée pour "' + vue.toDisplayString(searchQuery.value) + '" ', 1)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_13, [
|
|
2075
2129
|
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(displayedIcons.value, (icon) => {
|
|
2076
2130
|
return vue.openBlock(), vue.createElementBlock("button", {
|
|
2077
2131
|
key: icon,
|
|
@@ -2105,19 +2159,19 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2105
2159
|
};
|
|
2106
2160
|
}
|
|
2107
2161
|
});
|
|
2108
|
-
const _hoisted_1$
|
|
2109
|
-
const _hoisted_2 = { class: "flex items-center gap-3" };
|
|
2110
|
-
const _hoisted_3 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
|
|
2111
|
-
const _hoisted_4 = {
|
|
2162
|
+
const _hoisted_1$b = { class: "flex items-center justify-between" };
|
|
2163
|
+
const _hoisted_2$6 = { class: "flex items-center gap-3" };
|
|
2164
|
+
const _hoisted_3$5 = { class: "text-lg font-semibold text-gray-900 dark:text-white" };
|
|
2165
|
+
const _hoisted_4$3 = {
|
|
2112
2166
|
key: 0,
|
|
2113
2167
|
class: "text-sm text-gray-500 dark:text-gray-400"
|
|
2114
2168
|
};
|
|
2115
|
-
const _hoisted_5 = { class: "p-5 sm:p-6" };
|
|
2116
|
-
const _hoisted_6 = {
|
|
2169
|
+
const _hoisted_5$1 = { class: "p-5 sm:p-6" };
|
|
2170
|
+
const _hoisted_6$1 = {
|
|
2117
2171
|
key: 0,
|
|
2118
2172
|
class: "px-5 py-4 bg-gray-50 dark:bg-slate-800/50 border-t border-gray-100 dark:border-slate-700"
|
|
2119
2173
|
};
|
|
2120
|
-
const _sfc_main$
|
|
2174
|
+
const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
|
|
2121
2175
|
__name: "FormSection",
|
|
2122
2176
|
props: /* @__PURE__ */ vue.mergeModels({
|
|
2123
2177
|
title: {},
|
|
@@ -2151,8 +2205,8 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2151
2205
|
]),
|
|
2152
2206
|
onClick: _cache[0] || (_cache[0] = ($event) => __props.collapsible && toggleCollapse())
|
|
2153
2207
|
}, [
|
|
2154
|
-
vue.createElementVNode("div", _hoisted_1$
|
|
2155
|
-
vue.createElementVNode("div", _hoisted_2, [
|
|
2208
|
+
vue.createElementVNode("div", _hoisted_1$b, [
|
|
2209
|
+
vue.createElementVNode("div", _hoisted_2$6, [
|
|
2156
2210
|
__props.icon ? (vue.openBlock(), vue.createElementBlock("div", {
|
|
2157
2211
|
key: 0,
|
|
2158
2212
|
class: vue.normalizeClass([
|
|
@@ -2177,12 +2231,12 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2177
2231
|
}, null, 8, ["icon", "class"])
|
|
2178
2232
|
], 2)) : vue.createCommentVNode("", true),
|
|
2179
2233
|
vue.createElementVNode("div", null, [
|
|
2180
|
-
vue.createElementVNode("h2", _hoisted_3, [
|
|
2234
|
+
vue.createElementVNode("h2", _hoisted_3$5, [
|
|
2181
2235
|
vue.renderSlot(_ctx.$slots, "title", {}, () => [
|
|
2182
2236
|
vue.createTextVNode(vue.toDisplayString(__props.title), 1)
|
|
2183
2237
|
])
|
|
2184
2238
|
]),
|
|
2185
|
-
__props.subtitle ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4, [
|
|
2239
|
+
__props.subtitle ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_4$3, [
|
|
2186
2240
|
vue.renderSlot(_ctx.$slots, "subtitle", {}, () => [
|
|
2187
2241
|
vue.createTextVNode(vue.toDisplayString(__props.subtitle), 1)
|
|
2188
2242
|
])
|
|
@@ -2206,12 +2260,12 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2206
2260
|
vue.renderSlot(_ctx.$slots, "header-actions")
|
|
2207
2261
|
])
|
|
2208
2262
|
], 2),
|
|
2209
|
-
vue.withDirectives(vue.createElementVNode("div", _hoisted_5, [
|
|
2263
|
+
vue.withDirectives(vue.createElementVNode("div", _hoisted_5$1, [
|
|
2210
2264
|
vue.renderSlot(_ctx.$slots, "default")
|
|
2211
2265
|
], 512), [
|
|
2212
2266
|
[vue.vShow, !isCollapsed.value]
|
|
2213
2267
|
]),
|
|
2214
|
-
_ctx.$slots.footer ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
|
|
2268
|
+
_ctx.$slots.footer ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", _hoisted_6$1, [
|
|
2215
2269
|
vue.renderSlot(_ctx.$slots, "footer")
|
|
2216
2270
|
], 512)), [
|
|
2217
2271
|
[vue.vShow, !isCollapsed.value]
|
|
@@ -2220,8 +2274,8 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
|
2220
2274
|
};
|
|
2221
2275
|
}
|
|
2222
2276
|
});
|
|
2223
|
-
const _hoisted_1 = { key: 1 };
|
|
2224
|
-
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
2277
|
+
const _hoisted_1$a = { key: 1 };
|
|
2278
|
+
const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
|
|
2225
2279
|
__name: "FormActions",
|
|
2226
2280
|
props: {
|
|
2227
2281
|
submitLabel: { default: "Enregistrer" },
|
|
@@ -2288,7 +2342,7 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
2288
2342
|
class: "w-5 h-5"
|
|
2289
2343
|
}, null, 8, ["icon"])) : vue.createCommentVNode("", true),
|
|
2290
2344
|
vue.createTextVNode(" " + vue.toDisplayString(__props.submitLabel), 1)
|
|
2291
|
-
], 64)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_1, vue.toDisplayString(__props.loadingLabel || __props.submitLabel + "..."), 1))
|
|
2345
|
+
], 64)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_1$a, vue.toDisplayString(__props.loadingLabel || __props.submitLabel + "..."), 1))
|
|
2292
2346
|
]),
|
|
2293
2347
|
_: 1
|
|
2294
2348
|
}, 8, ["variant", "disabled", "loading", "class"]),
|
|
@@ -2297,21 +2351,1319 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
2297
2351
|
};
|
|
2298
2352
|
}
|
|
2299
2353
|
});
|
|
2354
|
+
const _hoisted_1$9 = ["id", "name", "placeholder", "disabled", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
2355
|
+
const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
|
|
2356
|
+
...{
|
|
2357
|
+
inheritAttrs: false
|
|
2358
|
+
},
|
|
2359
|
+
__name: "EmailInput",
|
|
2360
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
2361
|
+
placeholder: { default: "Enter email address..." },
|
|
2362
|
+
size: { default: "md" },
|
|
2363
|
+
disabled: { type: Boolean },
|
|
2364
|
+
showValidation: { type: Boolean, default: true },
|
|
2365
|
+
name: {},
|
|
2366
|
+
id: {},
|
|
2367
|
+
required: { type: Boolean },
|
|
2368
|
+
describedBy: {}
|
|
2369
|
+
}, {
|
|
2370
|
+
"modelValue": { default: "" },
|
|
2371
|
+
"modelModifiers": {}
|
|
2372
|
+
}),
|
|
2373
|
+
emits: ["update:modelValue"],
|
|
2374
|
+
setup(__props) {
|
|
2375
|
+
const props = __props;
|
|
2376
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
2377
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
2378
|
+
const isValid = vue.computed(() => {
|
|
2379
|
+
if (!modelValue.value) return null;
|
|
2380
|
+
return emailRegex.test(modelValue.value);
|
|
2381
|
+
});
|
|
2382
|
+
const isTouched = vue.ref(false);
|
|
2383
|
+
const showStatus = vue.computed(() => {
|
|
2384
|
+
return props.showValidation && isTouched.value && !!modelValue.value;
|
|
2385
|
+
});
|
|
2386
|
+
function handleBlur() {
|
|
2387
|
+
isTouched.value = true;
|
|
2388
|
+
}
|
|
2389
|
+
return (_ctx, _cache) => {
|
|
2390
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
2391
|
+
icon: "lucide:mail",
|
|
2392
|
+
size: __props.size,
|
|
2393
|
+
disabled: __props.disabled,
|
|
2394
|
+
invalid: showStatus.value && isValid.value === false
|
|
2395
|
+
}, {
|
|
2396
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
2397
|
+
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
2398
|
+
id: __props.id ?? __props.name,
|
|
2399
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
2400
|
+
type: "email",
|
|
2401
|
+
name: __props.name,
|
|
2402
|
+
placeholder: __props.placeholder,
|
|
2403
|
+
disabled: __props.disabled,
|
|
2404
|
+
required: __props.required,
|
|
2405
|
+
"aria-invalid": showStatus.value && isValid.value === false || void 0,
|
|
2406
|
+
"aria-required": __props.required || void 0,
|
|
2407
|
+
"aria-describedby": __props.describedBy,
|
|
2408
|
+
class: inputClass
|
|
2409
|
+
}, _ctx.$attrs, { onBlur: handleBlur }), null, 16, _hoisted_1$9), [
|
|
2410
|
+
[vue.vModelText, modelValue.value]
|
|
2411
|
+
])
|
|
2412
|
+
]),
|
|
2413
|
+
actions: vue.withCtx(() => [
|
|
2414
|
+
showStatus.value && isValid.value ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
2415
|
+
key: 0,
|
|
2416
|
+
icon: "lucide:check-circle",
|
|
2417
|
+
class: "size-5 text-emerald-500"
|
|
2418
|
+
})) : showStatus.value && isValid.value === false ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
2419
|
+
key: 1,
|
|
2420
|
+
icon: "lucide:alert-circle",
|
|
2421
|
+
class: "size-5 text-red-500"
|
|
2422
|
+
})) : vue.createCommentVNode("", true)
|
|
2423
|
+
]),
|
|
2424
|
+
_: 1
|
|
2425
|
+
}, 8, ["size", "disabled", "invalid"]);
|
|
2426
|
+
};
|
|
2427
|
+
}
|
|
2428
|
+
});
|
|
2429
|
+
const _hoisted_1$8 = ["id", "type", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2430
|
+
const _hoisted_2$5 = ["disabled"];
|
|
2431
|
+
const _hoisted_3$4 = {
|
|
2432
|
+
key: 0,
|
|
2433
|
+
class: "mt-2"
|
|
2434
|
+
};
|
|
2435
|
+
const _hoisted_4$2 = { class: "h-1.5 w-full rounded-full bg-gray-200 dark:bg-slate-700 overflow-hidden" };
|
|
2436
|
+
const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
|
|
2437
|
+
...{
|
|
2438
|
+
inheritAttrs: false
|
|
2439
|
+
},
|
|
2440
|
+
__name: "PasswordInput",
|
|
2441
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
2442
|
+
placeholder: { default: "Enter password..." },
|
|
2443
|
+
size: { default: "md" },
|
|
2444
|
+
disabled: { type: Boolean },
|
|
2445
|
+
showStrength: { type: Boolean, default: false },
|
|
2446
|
+
name: {},
|
|
2447
|
+
id: {},
|
|
2448
|
+
required: { type: Boolean },
|
|
2449
|
+
describedBy: {},
|
|
2450
|
+
minLength: { default: 8 }
|
|
2451
|
+
}, {
|
|
2452
|
+
"modelValue": { default: "" },
|
|
2453
|
+
"modelModifiers": {}
|
|
2454
|
+
}),
|
|
2455
|
+
emits: ["update:modelValue"],
|
|
2456
|
+
setup(__props) {
|
|
2457
|
+
const props = __props;
|
|
2458
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
2459
|
+
const showPassword = vue.ref(false);
|
|
2460
|
+
const strength = vue.computed(() => {
|
|
2461
|
+
const password = modelValue.value;
|
|
2462
|
+
if (!password) return null;
|
|
2463
|
+
let score = 0;
|
|
2464
|
+
if (password.length >= props.minLength) score++;
|
|
2465
|
+
if (password.length >= 12) score++;
|
|
2466
|
+
if (/[a-z]/.test(password)) score++;
|
|
2467
|
+
if (/[A-Z]/.test(password)) score++;
|
|
2468
|
+
if (/[0-9]/.test(password)) score++;
|
|
2469
|
+
if (/[^a-zA-Z0-9]/.test(password)) score++;
|
|
2470
|
+
if (score <= 2) return "weak";
|
|
2471
|
+
if (score <= 3) return "fair";
|
|
2472
|
+
if (score <= 4) return "good";
|
|
2473
|
+
return "strong";
|
|
2474
|
+
});
|
|
2475
|
+
const strengthConfig = vue.computed(() => {
|
|
2476
|
+
const configs = {
|
|
2477
|
+
weak: { label: "Weak", color: "bg-red-500", width: "w-1/4" },
|
|
2478
|
+
fair: { label: "Fair", color: "bg-orange-500", width: "w-2/4" },
|
|
2479
|
+
good: { label: "Good", color: "bg-yellow-500", width: "w-3/4" },
|
|
2480
|
+
strong: { label: "Strong", color: "bg-emerald-500", width: "w-full" }
|
|
2481
|
+
};
|
|
2482
|
+
return strength.value ? configs[strength.value] : null;
|
|
2483
|
+
});
|
|
2484
|
+
function toggleVisibility() {
|
|
2485
|
+
showPassword.value = !showPassword.value;
|
|
2486
|
+
}
|
|
2487
|
+
return (_ctx, _cache) => {
|
|
2488
|
+
var _a, _b;
|
|
2489
|
+
return vue.openBlock(), vue.createElementBlock("div", null, [
|
|
2490
|
+
vue.createVNode(_sfc_main$p, {
|
|
2491
|
+
icon: "lucide:lock",
|
|
2492
|
+
size: __props.size,
|
|
2493
|
+
disabled: __props.disabled
|
|
2494
|
+
}, {
|
|
2495
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
2496
|
+
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
2497
|
+
id: __props.id ?? __props.name,
|
|
2498
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
2499
|
+
type: showPassword.value ? "text" : "password",
|
|
2500
|
+
name: __props.name,
|
|
2501
|
+
placeholder: __props.placeholder,
|
|
2502
|
+
disabled: __props.disabled,
|
|
2503
|
+
required: __props.required,
|
|
2504
|
+
"aria-required": __props.required || void 0,
|
|
2505
|
+
"aria-describedby": __props.describedBy,
|
|
2506
|
+
class: inputClass
|
|
2507
|
+
}, _ctx.$attrs, { autocomplete: "new-password" }), null, 16, _hoisted_1$8), [
|
|
2508
|
+
[vue.vModelDynamic, modelValue.value]
|
|
2509
|
+
])
|
|
2510
|
+
]),
|
|
2511
|
+
actions: vue.withCtx(() => [
|
|
2512
|
+
vue.createElementVNode("button", {
|
|
2513
|
+
type: "button",
|
|
2514
|
+
disabled: __props.disabled,
|
|
2515
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
2516
|
+
onClick: toggleVisibility
|
|
2517
|
+
}, [
|
|
2518
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2519
|
+
icon: showPassword.value ? "lucide:eye-off" : "lucide:eye",
|
|
2520
|
+
class: "size-5 text-gray-400 hover:text-gray-600 dark:hover:text-gray-300"
|
|
2521
|
+
}, null, 8, ["icon"])
|
|
2522
|
+
], 8, _hoisted_2$5)
|
|
2523
|
+
]),
|
|
2524
|
+
_: 1
|
|
2525
|
+
}, 8, ["size", "disabled"]),
|
|
2526
|
+
__props.showStrength && modelValue.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$4, [
|
|
2527
|
+
vue.createElementVNode("div", _hoisted_4$2, [
|
|
2528
|
+
vue.createElementVNode("div", {
|
|
2529
|
+
class: vue.normalizeClass([
|
|
2530
|
+
"h-full rounded-full transition-all duration-300",
|
|
2531
|
+
(_a = strengthConfig.value) == null ? void 0 : _a.color,
|
|
2532
|
+
(_b = strengthConfig.value) == null ? void 0 : _b.width
|
|
2533
|
+
])
|
|
2534
|
+
}, null, 2)
|
|
2535
|
+
]),
|
|
2536
|
+
strengthConfig.value ? (vue.openBlock(), vue.createElementBlock("p", {
|
|
2537
|
+
key: 0,
|
|
2538
|
+
class: vue.normalizeClass([
|
|
2539
|
+
"mt-1 text-xs font-medium",
|
|
2540
|
+
strength.value === "weak" && "text-red-500",
|
|
2541
|
+
strength.value === "fair" && "text-orange-500",
|
|
2542
|
+
strength.value === "good" && "text-yellow-600 dark:text-yellow-500",
|
|
2543
|
+
strength.value === "strong" && "text-emerald-500"
|
|
2544
|
+
])
|
|
2545
|
+
}, vue.toDisplayString(strengthConfig.value.label), 3)) : vue.createCommentVNode("", true)
|
|
2546
|
+
])) : vue.createCommentVNode("", true)
|
|
2547
|
+
]);
|
|
2548
|
+
};
|
|
2549
|
+
}
|
|
2550
|
+
});
|
|
2551
|
+
const _hoisted_1$7 = ["disabled"];
|
|
2552
|
+
const _hoisted_2$4 = { class: "text-lg leading-none" };
|
|
2553
|
+
const _hoisted_3$3 = ["id", "value", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2554
|
+
const _hoisted_4$1 = { class: "text-xs text-gray-400 font-medium" };
|
|
2555
|
+
const _hoisted_5 = {
|
|
2556
|
+
key: 0,
|
|
2557
|
+
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"
|
|
2558
|
+
};
|
|
2559
|
+
const _hoisted_6 = { class: "p-2 border-b border-gray-100 dark:border-slate-700" };
|
|
2560
|
+
const _hoisted_7 = { class: "max-h-48 overflow-y-auto" };
|
|
2561
|
+
const _hoisted_8 = ["onClick"];
|
|
2562
|
+
const _hoisted_9 = { class: "text-lg" };
|
|
2563
|
+
const _hoisted_10 = { class: "flex-1 text-sm text-gray-700 dark:text-gray-300" };
|
|
2564
|
+
const _hoisted_11 = { class: "text-sm text-gray-400" };
|
|
2565
|
+
const _hoisted_12 = {
|
|
2566
|
+
key: 0,
|
|
2567
|
+
class: "px-3 py-4 text-center text-sm text-gray-500"
|
|
2568
|
+
};
|
|
2569
|
+
const defaultCountries = [
|
|
2570
|
+
{ code: "FR", name: "France", dialCode: "+33", flag: "🇫🇷", format: "# ## ## ## ##" },
|
|
2571
|
+
{ code: "US", name: "United States", dialCode: "+1", flag: "🇺🇸", format: "(###) ###-####" },
|
|
2572
|
+
{ code: "GB", name: "United Kingdom", dialCode: "+44", flag: "🇬🇧", format: "#### ######" },
|
|
2573
|
+
{ code: "DE", name: "Germany", dialCode: "+49", flag: "🇩🇪", format: "### #######" },
|
|
2574
|
+
{ code: "ES", name: "Spain", dialCode: "+34", flag: "🇪🇸", format: "### ### ###" },
|
|
2575
|
+
{ code: "IT", name: "Italy", dialCode: "+39", flag: "🇮🇹", format: "### ### ####" },
|
|
2576
|
+
{ code: "BE", name: "Belgium", dialCode: "+32", flag: "🇧🇪", format: "### ## ## ##" },
|
|
2577
|
+
{ code: "CH", name: "Switzerland", dialCode: "+41", flag: "🇨🇭", format: "## ### ## ##" },
|
|
2578
|
+
{ code: "CA", name: "Canada", dialCode: "+1", flag: "🇨🇦", format: "(###) ###-####" },
|
|
2579
|
+
{ code: "AU", name: "Australia", dialCode: "+61", flag: "🇦🇺", format: "### ### ###" },
|
|
2580
|
+
{ code: "ML", name: "Mali", dialCode: "+223", flag: "🇲🇱", format: "## ## ## ##" },
|
|
2581
|
+
{ code: "SN", name: "Senegal", dialCode: "+221", flag: "🇸🇳", format: "## ### ## ##" },
|
|
2582
|
+
{ code: "CI", name: "Côte d'Ivoire", dialCode: "+225", flag: "🇨🇮", format: "## ## ## ## ##" },
|
|
2583
|
+
{ code: "MA", name: "Morocco", dialCode: "+212", flag: "🇲🇦", format: "## ## ## ## ##" },
|
|
2584
|
+
{ code: "TN", name: "Tunisia", dialCode: "+216", flag: "🇹🇳", format: "## ### ###" },
|
|
2585
|
+
{ code: "DZ", name: "Algeria", dialCode: "+213", flag: "🇩🇿", format: "### ## ## ##" }
|
|
2586
|
+
];
|
|
2587
|
+
function formatPhoneWithPattern(value, pattern) {
|
|
2588
|
+
if (!pattern) return value;
|
|
2589
|
+
const digits = value.replace(/\D/g, "");
|
|
2590
|
+
let result = "";
|
|
2591
|
+
let digitIndex = 0;
|
|
2592
|
+
for (const char of pattern) {
|
|
2593
|
+
if (digitIndex >= digits.length) break;
|
|
2594
|
+
if (char === "#") {
|
|
2595
|
+
result += digits[digitIndex];
|
|
2596
|
+
digitIndex++;
|
|
2597
|
+
} else {
|
|
2598
|
+
result += char;
|
|
2599
|
+
}
|
|
2600
|
+
}
|
|
2601
|
+
return result;
|
|
2602
|
+
}
|
|
2603
|
+
function getPhoneDigits(value) {
|
|
2604
|
+
return value.replace(/\D/g, "");
|
|
2605
|
+
}
|
|
2606
|
+
const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
|
|
2607
|
+
...{
|
|
2608
|
+
inheritAttrs: false
|
|
2609
|
+
},
|
|
2610
|
+
__name: "PhoneInput",
|
|
2611
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
2612
|
+
placeholder: { default: "Phone number" },
|
|
2613
|
+
size: { default: "md" },
|
|
2614
|
+
disabled: { type: Boolean },
|
|
2615
|
+
showDialCode: { type: Boolean, default: false },
|
|
2616
|
+
name: {},
|
|
2617
|
+
id: {},
|
|
2618
|
+
required: { type: Boolean },
|
|
2619
|
+
describedBy: {},
|
|
2620
|
+
defaultCountry: { default: "FR" },
|
|
2621
|
+
countries: { default: () => defaultCountries }
|
|
2622
|
+
}, {
|
|
2623
|
+
"modelValue": { default: "" },
|
|
2624
|
+
"modelModifiers": {}
|
|
2625
|
+
}),
|
|
2626
|
+
emits: ["update:modelValue"],
|
|
2627
|
+
setup(__props, { expose: __expose }) {
|
|
2628
|
+
const props = __props;
|
|
2629
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
2630
|
+
const selectedCountry = vue.ref(
|
|
2631
|
+
props.countries.find((c) => c.code === props.defaultCountry) || props.countries[0]
|
|
2632
|
+
);
|
|
2633
|
+
const showDropdown = vue.ref(false);
|
|
2634
|
+
const searchQuery = vue.ref("");
|
|
2635
|
+
const dropdownRef = vue.ref(null);
|
|
2636
|
+
const filteredCountries = vue.computed(() => {
|
|
2637
|
+
if (!searchQuery.value) return props.countries;
|
|
2638
|
+
const query = searchQuery.value.toLowerCase();
|
|
2639
|
+
return props.countries.filter(
|
|
2640
|
+
(c) => c.name.toLowerCase().includes(query) || c.dialCode.includes(query) || c.code.toLowerCase().includes(query)
|
|
2641
|
+
);
|
|
2642
|
+
});
|
|
2643
|
+
const fullNumber = vue.computed(() => {
|
|
2644
|
+
if (!modelValue.value) return "";
|
|
2645
|
+
return `${selectedCountry.value.dialCode}${modelValue.value}`;
|
|
2646
|
+
});
|
|
2647
|
+
const displayValue = vue.computed(() => {
|
|
2648
|
+
const formatted = formatPhoneWithPattern(modelValue.value, selectedCountry.value.format);
|
|
2649
|
+
if (props.showDialCode && modelValue.value) {
|
|
2650
|
+
return `${selectedCountry.value.dialCode} ${formatted}`;
|
|
2651
|
+
}
|
|
2652
|
+
return formatted;
|
|
2653
|
+
});
|
|
2654
|
+
function selectCountry(country) {
|
|
2655
|
+
selectedCountry.value = country;
|
|
2656
|
+
showDropdown.value = false;
|
|
2657
|
+
searchQuery.value = "";
|
|
2658
|
+
}
|
|
2659
|
+
function parsePhoneWithDialCode(value) {
|
|
2660
|
+
const cleaned = value.replace(/\s/g, "");
|
|
2661
|
+
if (cleaned.startsWith("+") || cleaned.startsWith("00")) {
|
|
2662
|
+
const withPlus = cleaned.startsWith("00") ? "+" + cleaned.slice(2) : cleaned;
|
|
2663
|
+
for (const country of props.countries) {
|
|
2664
|
+
if (withPlus.startsWith(country.dialCode)) {
|
|
2665
|
+
const digits = withPlus.slice(country.dialCode.length).replace(/\D/g, "");
|
|
2666
|
+
return { digits, country };
|
|
2667
|
+
}
|
|
2668
|
+
}
|
|
2669
|
+
}
|
|
2670
|
+
return { digits: getPhoneDigits(value) };
|
|
2671
|
+
}
|
|
2672
|
+
function handleInput(event) {
|
|
2673
|
+
const target = event.target;
|
|
2674
|
+
const inputValue = target.value;
|
|
2675
|
+
const { digits, country } = parsePhoneWithDialCode(inputValue);
|
|
2676
|
+
if (country) {
|
|
2677
|
+
selectedCountry.value = country;
|
|
2678
|
+
}
|
|
2679
|
+
modelValue.value = digits;
|
|
2680
|
+
}
|
|
2681
|
+
function handlePaste(event) {
|
|
2682
|
+
var _a;
|
|
2683
|
+
const pastedData = (_a = event.clipboardData) == null ? void 0 : _a.getData("text");
|
|
2684
|
+
if (!pastedData) return;
|
|
2685
|
+
const { digits, country } = parsePhoneWithDialCode(pastedData);
|
|
2686
|
+
if (country) {
|
|
2687
|
+
event.preventDefault();
|
|
2688
|
+
selectedCountry.value = country;
|
|
2689
|
+
modelValue.value = digits;
|
|
2690
|
+
}
|
|
2691
|
+
}
|
|
2692
|
+
function handleClickOutside(event) {
|
|
2693
|
+
if (dropdownRef.value && !dropdownRef.value.contains(event.target)) {
|
|
2694
|
+
showDropdown.value = false;
|
|
2695
|
+
searchQuery.value = "";
|
|
2696
|
+
}
|
|
2697
|
+
}
|
|
2698
|
+
vue.watch(showDropdown, (isOpen) => {
|
|
2699
|
+
if (isOpen) {
|
|
2700
|
+
document.addEventListener("click", handleClickOutside);
|
|
2701
|
+
} else {
|
|
2702
|
+
document.removeEventListener("click", handleClickOutside);
|
|
2703
|
+
}
|
|
2704
|
+
});
|
|
2705
|
+
__expose({ selectedCountry, fullNumber });
|
|
2706
|
+
return (_ctx, _cache) => {
|
|
2707
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
2708
|
+
class: "relative",
|
|
2709
|
+
ref_key: "dropdownRef",
|
|
2710
|
+
ref: dropdownRef
|
|
2711
|
+
}, [
|
|
2712
|
+
vue.createVNode(_sfc_main$p, {
|
|
2713
|
+
size: __props.size,
|
|
2714
|
+
disabled: __props.disabled
|
|
2715
|
+
}, {
|
|
2716
|
+
icon: vue.withCtx(() => [
|
|
2717
|
+
vue.createElementVNode("button", {
|
|
2718
|
+
type: "button",
|
|
2719
|
+
disabled: __props.disabled,
|
|
2720
|
+
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",
|
|
2721
|
+
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => showDropdown.value = !showDropdown.value, ["stop"]))
|
|
2722
|
+
}, [
|
|
2723
|
+
vue.createElementVNode("span", _hoisted_2$4, vue.toDisplayString(selectedCountry.value.flag), 1),
|
|
2724
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2725
|
+
icon: "lucide:chevron-down",
|
|
2726
|
+
class: vue.normalizeClass([
|
|
2727
|
+
"size-3 text-gray-400 transition-transform",
|
|
2728
|
+
showDropdown.value && "rotate-180"
|
|
2729
|
+
])
|
|
2730
|
+
}, null, 8, ["class"])
|
|
2731
|
+
], 8, _hoisted_1$7)
|
|
2732
|
+
]),
|
|
2733
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
2734
|
+
vue.createElementVNode("input", vue.mergeProps({
|
|
2735
|
+
id: __props.id ?? __props.name,
|
|
2736
|
+
value: displayValue.value,
|
|
2737
|
+
type: "tel",
|
|
2738
|
+
name: __props.name,
|
|
2739
|
+
placeholder: __props.placeholder,
|
|
2740
|
+
disabled: __props.disabled,
|
|
2741
|
+
required: __props.required,
|
|
2742
|
+
"aria-required": __props.required || void 0,
|
|
2743
|
+
"aria-describedby": __props.describedBy,
|
|
2744
|
+
class: [inputClass, "pl-20"]
|
|
2745
|
+
}, _ctx.$attrs, {
|
|
2746
|
+
onInput: handleInput,
|
|
2747
|
+
onPaste: handlePaste
|
|
2748
|
+
}), null, 16, _hoisted_3$3)
|
|
2749
|
+
]),
|
|
2750
|
+
actions: vue.withCtx(() => [
|
|
2751
|
+
vue.createElementVNode("span", _hoisted_4$1, vue.toDisplayString(selectedCountry.value.dialCode), 1)
|
|
2752
|
+
]),
|
|
2753
|
+
_: 1
|
|
2754
|
+
}, 8, ["size", "disabled"]),
|
|
2755
|
+
vue.createVNode(vue.Transition, {
|
|
2756
|
+
"enter-active-class": "transition-all duration-200 ease-out",
|
|
2757
|
+
"enter-from-class": "opacity-0 -translate-y-2",
|
|
2758
|
+
"enter-to-class": "opacity-100 translate-y-0",
|
|
2759
|
+
"leave-active-class": "transition-all duration-150 ease-in",
|
|
2760
|
+
"leave-from-class": "opacity-100 translate-y-0",
|
|
2761
|
+
"leave-to-class": "opacity-0 -translate-y-2"
|
|
2762
|
+
}, {
|
|
2763
|
+
default: vue.withCtx(() => [
|
|
2764
|
+
showDropdown.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
|
|
2765
|
+
vue.createElementVNode("div", _hoisted_6, [
|
|
2766
|
+
vue.withDirectives(vue.createElementVNode("input", {
|
|
2767
|
+
"onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => searchQuery.value = $event),
|
|
2768
|
+
type: "text",
|
|
2769
|
+
placeholder: "Search countries...",
|
|
2770
|
+
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"
|
|
2771
|
+
}, null, 512), [
|
|
2772
|
+
[vue.vModelText, searchQuery.value]
|
|
2773
|
+
])
|
|
2774
|
+
]),
|
|
2775
|
+
vue.createElementVNode("ul", _hoisted_7, [
|
|
2776
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredCountries.value, (country) => {
|
|
2777
|
+
return vue.openBlock(), vue.createElementBlock("li", {
|
|
2778
|
+
key: country.code,
|
|
2779
|
+
class: vue.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"]),
|
|
2780
|
+
onClick: ($event) => selectCountry(country)
|
|
2781
|
+
}, [
|
|
2782
|
+
vue.createElementVNode("span", _hoisted_9, vue.toDisplayString(country.flag), 1),
|
|
2783
|
+
vue.createElementVNode("span", _hoisted_10, vue.toDisplayString(country.name), 1),
|
|
2784
|
+
vue.createElementVNode("span", _hoisted_11, vue.toDisplayString(country.dialCode), 1)
|
|
2785
|
+
], 10, _hoisted_8);
|
|
2786
|
+
}), 128)),
|
|
2787
|
+
filteredCountries.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_12, " No countries found ")) : vue.createCommentVNode("", true)
|
|
2788
|
+
])
|
|
2789
|
+
])) : vue.createCommentVNode("", true)
|
|
2790
|
+
]),
|
|
2791
|
+
_: 1
|
|
2792
|
+
})
|
|
2793
|
+
], 512);
|
|
2794
|
+
};
|
|
2795
|
+
}
|
|
2796
|
+
});
|
|
2797
|
+
const _hoisted_1$6 = ["disabled"];
|
|
2798
|
+
const _hoisted_2$3 = ["id", "value", "name", "placeholder", "disabled", "required", "min", "max", "step", "aria-required", "aria-describedby"];
|
|
2799
|
+
const _hoisted_3$2 = ["disabled"];
|
|
2800
|
+
const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
|
|
2801
|
+
...{
|
|
2802
|
+
inheritAttrs: false
|
|
2803
|
+
},
|
|
2804
|
+
__name: "NumberInput",
|
|
2805
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
2806
|
+
placeholder: { default: "0" },
|
|
2807
|
+
size: { default: "md" },
|
|
2808
|
+
disabled: { type: Boolean },
|
|
2809
|
+
min: {},
|
|
2810
|
+
max: {},
|
|
2811
|
+
step: { default: 1 },
|
|
2812
|
+
name: {},
|
|
2813
|
+
id: {},
|
|
2814
|
+
required: { type: Boolean },
|
|
2815
|
+
describedBy: {},
|
|
2816
|
+
showStepper: { type: Boolean, default: true }
|
|
2817
|
+
}, {
|
|
2818
|
+
"modelValue": { default: null },
|
|
2819
|
+
"modelModifiers": {}
|
|
2820
|
+
}),
|
|
2821
|
+
emits: ["update:modelValue"],
|
|
2822
|
+
setup(__props) {
|
|
2823
|
+
const props = __props;
|
|
2824
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
2825
|
+
const canDecrement = vue.computed(() => {
|
|
2826
|
+
if (props.disabled) return false;
|
|
2827
|
+
if (modelValue.value === null) return true;
|
|
2828
|
+
if (props.min !== void 0) return modelValue.value > props.min;
|
|
2829
|
+
return true;
|
|
2830
|
+
});
|
|
2831
|
+
const canIncrement = vue.computed(() => {
|
|
2832
|
+
if (props.disabled) return false;
|
|
2833
|
+
if (modelValue.value === null) return true;
|
|
2834
|
+
if (props.max !== void 0) return modelValue.value < props.max;
|
|
2835
|
+
return true;
|
|
2836
|
+
});
|
|
2837
|
+
function increment() {
|
|
2838
|
+
if (!canIncrement.value) return;
|
|
2839
|
+
const current = modelValue.value ?? 0;
|
|
2840
|
+
const newValue = current + props.step;
|
|
2841
|
+
modelValue.value = props.max !== void 0 ? Math.min(newValue, props.max) : newValue;
|
|
2842
|
+
}
|
|
2843
|
+
function decrement() {
|
|
2844
|
+
if (!canDecrement.value) return;
|
|
2845
|
+
const current = modelValue.value ?? 0;
|
|
2846
|
+
const newValue = current - props.step;
|
|
2847
|
+
modelValue.value = props.min !== void 0 ? Math.max(newValue, props.min) : newValue;
|
|
2848
|
+
}
|
|
2849
|
+
function handleInput(event) {
|
|
2850
|
+
const target = event.target;
|
|
2851
|
+
const value = target.value === "" ? null : parseFloat(target.value);
|
|
2852
|
+
if (value !== null && !isNaN(value)) {
|
|
2853
|
+
let clampedValue = value;
|
|
2854
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
2855
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
2856
|
+
modelValue.value = clampedValue;
|
|
2857
|
+
} else {
|
|
2858
|
+
modelValue.value = null;
|
|
2859
|
+
}
|
|
2860
|
+
}
|
|
2861
|
+
return (_ctx, _cache) => {
|
|
2862
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
2863
|
+
size: __props.size,
|
|
2864
|
+
disabled: __props.disabled
|
|
2865
|
+
}, vue.createSlots({
|
|
2866
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
2867
|
+
vue.createElementVNode("input", vue.mergeProps({
|
|
2868
|
+
id: __props.id ?? __props.name,
|
|
2869
|
+
value: modelValue.value,
|
|
2870
|
+
type: "number",
|
|
2871
|
+
name: __props.name,
|
|
2872
|
+
placeholder: __props.placeholder,
|
|
2873
|
+
disabled: __props.disabled,
|
|
2874
|
+
required: __props.required,
|
|
2875
|
+
min: __props.min,
|
|
2876
|
+
max: __props.max,
|
|
2877
|
+
step: __props.step,
|
|
2878
|
+
"aria-required": __props.required || void 0,
|
|
2879
|
+
"aria-describedby": __props.describedBy,
|
|
2880
|
+
class: [inputClass, "text-center", __props.showStepper && "pl-12 pr-12"]
|
|
2881
|
+
}, _ctx.$attrs, { onInput: handleInput }), null, 16, _hoisted_2$3)
|
|
2882
|
+
]),
|
|
2883
|
+
_: 2
|
|
2884
|
+
}, [
|
|
2885
|
+
__props.showStepper ? {
|
|
2886
|
+
name: "icon",
|
|
2887
|
+
fn: vue.withCtx(() => [
|
|
2888
|
+
vue.createElementVNode("button", {
|
|
2889
|
+
type: "button",
|
|
2890
|
+
disabled: !canDecrement.value,
|
|
2891
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
2892
|
+
onClick: decrement
|
|
2893
|
+
}, [
|
|
2894
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2895
|
+
icon: "lucide:minus",
|
|
2896
|
+
class: "size-4 text-gray-500"
|
|
2897
|
+
})
|
|
2898
|
+
], 8, _hoisted_1$6)
|
|
2899
|
+
]),
|
|
2900
|
+
key: "0"
|
|
2901
|
+
} : void 0,
|
|
2902
|
+
__props.showStepper ? {
|
|
2903
|
+
name: "actions",
|
|
2904
|
+
fn: vue.withCtx(() => [
|
|
2905
|
+
vue.createElementVNode("button", {
|
|
2906
|
+
type: "button",
|
|
2907
|
+
disabled: !canIncrement.value,
|
|
2908
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors disabled:opacity-30 disabled:cursor-not-allowed",
|
|
2909
|
+
onClick: increment
|
|
2910
|
+
}, [
|
|
2911
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
2912
|
+
icon: "lucide:plus",
|
|
2913
|
+
class: "size-4 text-gray-500"
|
|
2914
|
+
})
|
|
2915
|
+
], 8, _hoisted_3$2)
|
|
2916
|
+
]),
|
|
2917
|
+
key: "1"
|
|
2918
|
+
} : void 0
|
|
2919
|
+
]), 1032, ["size", "disabled"]);
|
|
2920
|
+
};
|
|
2921
|
+
}
|
|
2922
|
+
});
|
|
2923
|
+
const _hoisted_1$5 = { class: "text-sm font-medium text-gray-500 dark:text-gray-400" };
|
|
2924
|
+
const _hoisted_2$2 = ["id", "value", "name", "placeholder", "disabled", "required", "aria-required", "aria-describedby"];
|
|
2925
|
+
const _hoisted_3$1 = { class: "text-sm font-medium text-gray-500 dark:text-gray-400" };
|
|
2926
|
+
const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
|
|
2927
|
+
...{
|
|
2928
|
+
inheritAttrs: false
|
|
2929
|
+
},
|
|
2930
|
+
__name: "MoneyInput",
|
|
2931
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
2932
|
+
placeholder: { default: "0.00" },
|
|
2933
|
+
size: { default: "md" },
|
|
2934
|
+
disabled: { type: Boolean },
|
|
2935
|
+
currency: { default: "EUR" },
|
|
2936
|
+
min: {},
|
|
2937
|
+
max: {},
|
|
2938
|
+
decimals: { default: 2 },
|
|
2939
|
+
name: {},
|
|
2940
|
+
id: {},
|
|
2941
|
+
required: { type: Boolean },
|
|
2942
|
+
describedBy: {}
|
|
2943
|
+
}, {
|
|
2944
|
+
"modelValue": { default: null },
|
|
2945
|
+
"modelModifiers": {}
|
|
2946
|
+
}),
|
|
2947
|
+
emits: ["update:modelValue"],
|
|
2948
|
+
setup(__props) {
|
|
2949
|
+
const currencyConfig = {
|
|
2950
|
+
EUR: { symbol: "€", locale: "fr-FR", position: "suffix" },
|
|
2951
|
+
USD: { symbol: "$", locale: "en-US", position: "prefix" },
|
|
2952
|
+
GBP: { symbol: "£", locale: "en-GB", position: "prefix" },
|
|
2953
|
+
XOF: { symbol: "CFA", locale: "fr-FR", position: "suffix" },
|
|
2954
|
+
MAD: { symbol: "DH", locale: "fr-MA", position: "suffix" },
|
|
2955
|
+
CHF: { symbol: "CHF", locale: "fr-CH", position: "suffix" },
|
|
2956
|
+
CAD: { symbol: "CA$", locale: "en-CA", position: "prefix" }
|
|
2957
|
+
};
|
|
2958
|
+
const props = __props;
|
|
2959
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
2960
|
+
const config = vue.computed(() => currencyConfig[props.currency]);
|
|
2961
|
+
const displayValue = vue.ref("");
|
|
2962
|
+
function formatForDisplay(value) {
|
|
2963
|
+
if (value === null) return "";
|
|
2964
|
+
return value.toLocaleString(config.value.locale, {
|
|
2965
|
+
minimumFractionDigits: props.decimals,
|
|
2966
|
+
maximumFractionDigits: props.decimals
|
|
2967
|
+
});
|
|
2968
|
+
}
|
|
2969
|
+
function parseDisplayValue(value) {
|
|
2970
|
+
if (!value) return null;
|
|
2971
|
+
const cleaned = value.replace(/\s/g, "").replace(/,/g, ".");
|
|
2972
|
+
const parsed = parseFloat(cleaned);
|
|
2973
|
+
return isNaN(parsed) ? null : parsed;
|
|
2974
|
+
}
|
|
2975
|
+
vue.watch(
|
|
2976
|
+
() => modelValue.value,
|
|
2977
|
+
(newValue) => {
|
|
2978
|
+
displayValue.value = formatForDisplay(newValue);
|
|
2979
|
+
},
|
|
2980
|
+
{ immediate: true }
|
|
2981
|
+
);
|
|
2982
|
+
function handleInput(event) {
|
|
2983
|
+
const target = event.target;
|
|
2984
|
+
displayValue.value = target.value;
|
|
2985
|
+
}
|
|
2986
|
+
function handleBlur() {
|
|
2987
|
+
const parsed = parseDisplayValue(displayValue.value);
|
|
2988
|
+
if (parsed !== null) {
|
|
2989
|
+
let clampedValue = parsed;
|
|
2990
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
2991
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
2992
|
+
modelValue.value = clampedValue;
|
|
2993
|
+
displayValue.value = formatForDisplay(clampedValue);
|
|
2994
|
+
} else {
|
|
2995
|
+
modelValue.value = null;
|
|
2996
|
+
displayValue.value = "";
|
|
2997
|
+
}
|
|
2998
|
+
}
|
|
2999
|
+
return (_ctx, _cache) => {
|
|
3000
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
3001
|
+
size: __props.size,
|
|
3002
|
+
disabled: __props.disabled
|
|
3003
|
+
}, vue.createSlots({
|
|
3004
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
3005
|
+
vue.createElementVNode("input", vue.mergeProps({
|
|
3006
|
+
id: __props.id ?? __props.name,
|
|
3007
|
+
value: displayValue.value,
|
|
3008
|
+
type: "text",
|
|
3009
|
+
inputmode: "decimal",
|
|
3010
|
+
name: __props.name,
|
|
3011
|
+
placeholder: __props.placeholder,
|
|
3012
|
+
disabled: __props.disabled,
|
|
3013
|
+
required: __props.required,
|
|
3014
|
+
"aria-required": __props.required || void 0,
|
|
3015
|
+
"aria-describedby": __props.describedBy,
|
|
3016
|
+
class: [inputClass, "text-right"]
|
|
3017
|
+
}, _ctx.$attrs, {
|
|
3018
|
+
onInput: handleInput,
|
|
3019
|
+
onBlur: handleBlur
|
|
3020
|
+
}), null, 16, _hoisted_2$2)
|
|
3021
|
+
]),
|
|
3022
|
+
_: 2
|
|
3023
|
+
}, [
|
|
3024
|
+
config.value.position === "prefix" ? {
|
|
3025
|
+
name: "icon",
|
|
3026
|
+
fn: vue.withCtx(() => [
|
|
3027
|
+
vue.createElementVNode("span", _hoisted_1$5, vue.toDisplayString(config.value.symbol), 1)
|
|
3028
|
+
]),
|
|
3029
|
+
key: "0"
|
|
3030
|
+
} : void 0,
|
|
3031
|
+
config.value.position === "suffix" ? {
|
|
3032
|
+
name: "actions",
|
|
3033
|
+
fn: vue.withCtx(() => [
|
|
3034
|
+
vue.createElementVNode("span", _hoisted_3$1, vue.toDisplayString(config.value.symbol), 1)
|
|
3035
|
+
]),
|
|
3036
|
+
key: "1"
|
|
3037
|
+
} : void 0
|
|
3038
|
+
]), 1032, ["size", "disabled"]);
|
|
3039
|
+
};
|
|
3040
|
+
}
|
|
3041
|
+
});
|
|
3042
|
+
const _hoisted_1$4 = ["id", "value", "name", "placeholder", "disabled", "required", "min", "max", "step", "aria-required", "aria-describedby"];
|
|
3043
|
+
const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
|
|
3044
|
+
...{
|
|
3045
|
+
inheritAttrs: false
|
|
3046
|
+
},
|
|
3047
|
+
__name: "PercentInput",
|
|
3048
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
3049
|
+
placeholder: { default: "0" },
|
|
3050
|
+
size: { default: "md" },
|
|
3051
|
+
disabled: { type: Boolean },
|
|
3052
|
+
min: { default: 0 },
|
|
3053
|
+
max: { default: 100 },
|
|
3054
|
+
decimals: { default: 0 },
|
|
3055
|
+
name: {},
|
|
3056
|
+
id: {},
|
|
3057
|
+
required: { type: Boolean },
|
|
3058
|
+
describedBy: {}
|
|
3059
|
+
}, {
|
|
3060
|
+
"modelValue": { default: null },
|
|
3061
|
+
"modelModifiers": {}
|
|
3062
|
+
}),
|
|
3063
|
+
emits: ["update:modelValue"],
|
|
3064
|
+
setup(__props) {
|
|
3065
|
+
const props = __props;
|
|
3066
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
3067
|
+
const displayValue = vue.computed({
|
|
3068
|
+
get: () => modelValue.value !== null ? modelValue.value.toString() : "",
|
|
3069
|
+
set: (val) => {
|
|
3070
|
+
if (val === "") {
|
|
3071
|
+
modelValue.value = null;
|
|
3072
|
+
return;
|
|
3073
|
+
}
|
|
3074
|
+
const parsed = parseFloat(val);
|
|
3075
|
+
if (!isNaN(parsed)) {
|
|
3076
|
+
let clamped = parsed;
|
|
3077
|
+
if (props.min !== void 0) clamped = Math.max(clamped, props.min);
|
|
3078
|
+
if (props.max !== void 0) clamped = Math.min(clamped, props.max);
|
|
3079
|
+
modelValue.value = clamped;
|
|
3080
|
+
}
|
|
3081
|
+
}
|
|
3082
|
+
});
|
|
3083
|
+
function handleInput(event) {
|
|
3084
|
+
const target = event.target;
|
|
3085
|
+
displayValue.value = target.value;
|
|
3086
|
+
}
|
|
3087
|
+
return (_ctx, _cache) => {
|
|
3088
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
3089
|
+
size: __props.size,
|
|
3090
|
+
disabled: __props.disabled
|
|
3091
|
+
}, {
|
|
3092
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
3093
|
+
vue.createElementVNode("input", vue.mergeProps({
|
|
3094
|
+
id: __props.id ?? __props.name,
|
|
3095
|
+
value: displayValue.value,
|
|
3096
|
+
type: "number",
|
|
3097
|
+
inputmode: "decimal",
|
|
3098
|
+
name: __props.name,
|
|
3099
|
+
placeholder: __props.placeholder,
|
|
3100
|
+
disabled: __props.disabled,
|
|
3101
|
+
required: __props.required,
|
|
3102
|
+
min: __props.min,
|
|
3103
|
+
max: __props.max,
|
|
3104
|
+
step: __props.decimals > 0 ? Math.pow(10, -__props.decimals) : 1,
|
|
3105
|
+
"aria-required": __props.required || void 0,
|
|
3106
|
+
"aria-describedby": __props.describedBy,
|
|
3107
|
+
class: [inputClass, "text-right pr-10"]
|
|
3108
|
+
}, _ctx.$attrs, { onInput: handleInput }), null, 16, _hoisted_1$4)
|
|
3109
|
+
]),
|
|
3110
|
+
actions: vue.withCtx(() => [..._cache[0] || (_cache[0] = [
|
|
3111
|
+
vue.createElementVNode("span", { class: "text-sm font-medium text-gray-500 dark:text-gray-400" }, "%", -1)
|
|
3112
|
+
])]),
|
|
3113
|
+
_: 1
|
|
3114
|
+
}, 8, ["size", "disabled"]);
|
|
3115
|
+
};
|
|
3116
|
+
}
|
|
3117
|
+
});
|
|
3118
|
+
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" };
|
|
3119
|
+
const _hoisted_2$1 = ["disabled"];
|
|
3120
|
+
const _hoisted_3 = ["id", "value", "name", "disabled", "required", "min", "max"];
|
|
3121
|
+
const _hoisted_4 = ["disabled"];
|
|
3122
|
+
const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
|
|
3123
|
+
...{
|
|
3124
|
+
inheritAttrs: false
|
|
3125
|
+
},
|
|
3126
|
+
__name: "QuantityInput",
|
|
3127
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
3128
|
+
size: { default: "md" },
|
|
3129
|
+
disabled: { type: Boolean },
|
|
3130
|
+
min: { default: 1 },
|
|
3131
|
+
max: {},
|
|
3132
|
+
step: { default: 1 },
|
|
3133
|
+
name: {},
|
|
3134
|
+
id: {},
|
|
3135
|
+
required: { type: Boolean }
|
|
3136
|
+
}, {
|
|
3137
|
+
"modelValue": { default: 1 },
|
|
3138
|
+
"modelModifiers": {}
|
|
3139
|
+
}),
|
|
3140
|
+
emits: ["update:modelValue"],
|
|
3141
|
+
setup(__props) {
|
|
3142
|
+
const props = __props;
|
|
3143
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
3144
|
+
const canDecrement = vue.computed(() => {
|
|
3145
|
+
if (props.disabled) return false;
|
|
3146
|
+
if (props.min !== void 0) return modelValue.value > props.min;
|
|
3147
|
+
return true;
|
|
3148
|
+
});
|
|
3149
|
+
const canIncrement = vue.computed(() => {
|
|
3150
|
+
if (props.disabled) return false;
|
|
3151
|
+
if (props.max !== void 0) return modelValue.value < props.max;
|
|
3152
|
+
return true;
|
|
3153
|
+
});
|
|
3154
|
+
function increment() {
|
|
3155
|
+
if (!canIncrement.value) return;
|
|
3156
|
+
const newValue = modelValue.value + props.step;
|
|
3157
|
+
modelValue.value = props.max !== void 0 ? Math.min(newValue, props.max) : newValue;
|
|
3158
|
+
}
|
|
3159
|
+
function decrement() {
|
|
3160
|
+
if (!canDecrement.value) return;
|
|
3161
|
+
const newValue = modelValue.value - props.step;
|
|
3162
|
+
modelValue.value = props.min !== void 0 ? Math.max(newValue, props.min) : newValue;
|
|
3163
|
+
}
|
|
3164
|
+
function handleInput(event) {
|
|
3165
|
+
const target = event.target;
|
|
3166
|
+
const value = parseInt(target.value, 10);
|
|
3167
|
+
if (!isNaN(value)) {
|
|
3168
|
+
let clampedValue = value;
|
|
3169
|
+
if (props.min !== void 0) clampedValue = Math.max(clampedValue, props.min);
|
|
3170
|
+
if (props.max !== void 0) clampedValue = Math.min(clampedValue, props.max);
|
|
3171
|
+
modelValue.value = clampedValue;
|
|
3172
|
+
}
|
|
3173
|
+
}
|
|
3174
|
+
const sizeClasses = vue.computed(() => ({
|
|
3175
|
+
button: {
|
|
3176
|
+
sm: "size-7",
|
|
3177
|
+
md: "size-9",
|
|
3178
|
+
lg: "size-11"
|
|
3179
|
+
}[props.size],
|
|
3180
|
+
icon: {
|
|
3181
|
+
sm: "size-3",
|
|
3182
|
+
md: "size-4",
|
|
3183
|
+
lg: "size-5"
|
|
3184
|
+
}[props.size],
|
|
3185
|
+
input: {
|
|
3186
|
+
sm: "text-sm w-10",
|
|
3187
|
+
md: "text-base w-12",
|
|
3188
|
+
lg: "text-lg w-14"
|
|
3189
|
+
}[props.size]
|
|
3190
|
+
}));
|
|
3191
|
+
return (_ctx, _cache) => {
|
|
3192
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
|
|
3193
|
+
vue.createElementVNode("button", {
|
|
3194
|
+
type: "button",
|
|
3195
|
+
disabled: !canDecrement.value,
|
|
3196
|
+
class: vue.normalizeClass([
|
|
3197
|
+
"flex items-center justify-center rounded-lg bg-white dark:bg-slate-600 border border-gray-200 dark:border-slate-500 transition-all",
|
|
3198
|
+
"hover:bg-gray-50 dark:hover:bg-slate-500 hover:border-gray-300 dark:hover:border-slate-400",
|
|
3199
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-white dark:disabled:hover:bg-slate-600",
|
|
3200
|
+
"shadow-sm",
|
|
3201
|
+
sizeClasses.value.button
|
|
3202
|
+
]),
|
|
3203
|
+
onClick: decrement
|
|
3204
|
+
}, [
|
|
3205
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
3206
|
+
icon: "lucide:minus",
|
|
3207
|
+
class: vue.normalizeClass(["text-gray-600 dark:text-gray-300", sizeClasses.value.icon])
|
|
3208
|
+
}, null, 8, ["class"])
|
|
3209
|
+
], 10, _hoisted_2$1),
|
|
3210
|
+
vue.createElementVNode("input", vue.mergeProps({
|
|
3211
|
+
id: __props.id ?? __props.name,
|
|
3212
|
+
value: modelValue.value,
|
|
3213
|
+
type: "number",
|
|
3214
|
+
name: __props.name,
|
|
3215
|
+
disabled: __props.disabled,
|
|
3216
|
+
required: __props.required,
|
|
3217
|
+
min: __props.min,
|
|
3218
|
+
max: __props.max,
|
|
3219
|
+
class: [
|
|
3220
|
+
"bg-transparent text-center font-semibold text-gray-900 dark:text-white",
|
|
3221
|
+
"focus:outline-none appearance-none",
|
|
3222
|
+
"[&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none",
|
|
3223
|
+
"disabled:opacity-50",
|
|
3224
|
+
sizeClasses.value.input
|
|
3225
|
+
]
|
|
3226
|
+
}, _ctx.$attrs, { onInput: handleInput }), null, 16, _hoisted_3),
|
|
3227
|
+
vue.createElementVNode("button", {
|
|
3228
|
+
type: "button",
|
|
3229
|
+
disabled: !canIncrement.value,
|
|
3230
|
+
class: vue.normalizeClass([
|
|
3231
|
+
"flex items-center justify-center rounded-lg bg-white dark:bg-slate-600 border border-gray-200 dark:border-slate-500 transition-all",
|
|
3232
|
+
"hover:bg-gray-50 dark:hover:bg-slate-500 hover:border-gray-300 dark:hover:border-slate-400",
|
|
3233
|
+
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-white dark:disabled:hover:bg-slate-600",
|
|
3234
|
+
"shadow-sm",
|
|
3235
|
+
sizeClasses.value.button
|
|
3236
|
+
]),
|
|
3237
|
+
onClick: increment
|
|
3238
|
+
}, [
|
|
3239
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
3240
|
+
icon: "lucide:plus",
|
|
3241
|
+
class: vue.normalizeClass(["text-gray-600 dark:text-gray-300", sizeClasses.value.icon])
|
|
3242
|
+
}, null, 8, ["class"])
|
|
3243
|
+
], 10, _hoisted_4)
|
|
3244
|
+
]);
|
|
3245
|
+
};
|
|
3246
|
+
}
|
|
3247
|
+
});
|
|
3248
|
+
const _hoisted_1$2 = ["id", "name", "placeholder", "disabled", "required", "aria-invalid", "aria-required", "aria-describedby"];
|
|
3249
|
+
const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
|
|
3250
|
+
...{
|
|
3251
|
+
inheritAttrs: false
|
|
3252
|
+
},
|
|
3253
|
+
__name: "URLInput",
|
|
3254
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
3255
|
+
placeholder: { default: "https://example.com" },
|
|
3256
|
+
size: { default: "md" },
|
|
3257
|
+
disabled: { type: Boolean },
|
|
3258
|
+
showValidation: { type: Boolean, default: true },
|
|
3259
|
+
name: {},
|
|
3260
|
+
id: {},
|
|
3261
|
+
required: { type: Boolean },
|
|
3262
|
+
describedBy: {}
|
|
3263
|
+
}, {
|
|
3264
|
+
"modelValue": { default: "" },
|
|
3265
|
+
"modelModifiers": {}
|
|
3266
|
+
}),
|
|
3267
|
+
emits: ["update:modelValue"],
|
|
3268
|
+
setup(__props) {
|
|
3269
|
+
const props = __props;
|
|
3270
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
3271
|
+
const urlRegex = /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/;
|
|
3272
|
+
const isValid = vue.computed(() => {
|
|
3273
|
+
if (!modelValue.value) return null;
|
|
3274
|
+
return urlRegex.test(modelValue.value);
|
|
3275
|
+
});
|
|
3276
|
+
const isTouched = vue.ref(false);
|
|
3277
|
+
const showStatus = vue.computed(() => {
|
|
3278
|
+
return props.showValidation && isTouched.value && !!modelValue.value;
|
|
3279
|
+
});
|
|
3280
|
+
function handleBlur() {
|
|
3281
|
+
isTouched.value = true;
|
|
3282
|
+
}
|
|
3283
|
+
function openUrl() {
|
|
3284
|
+
if (isValid.value && modelValue.value) {
|
|
3285
|
+
const url = modelValue.value.startsWith("http") ? modelValue.value : `https://${modelValue.value}`;
|
|
3286
|
+
window.open(url, "_blank");
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
return (_ctx, _cache) => {
|
|
3290
|
+
return vue.openBlock(), vue.createBlock(_sfc_main$p, {
|
|
3291
|
+
icon: "lucide:link",
|
|
3292
|
+
size: __props.size,
|
|
3293
|
+
disabled: __props.disabled,
|
|
3294
|
+
invalid: showStatus.value && isValid.value === false
|
|
3295
|
+
}, {
|
|
3296
|
+
default: vue.withCtx(({ inputClass }) => [
|
|
3297
|
+
vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({
|
|
3298
|
+
id: __props.id ?? __props.name,
|
|
3299
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event),
|
|
3300
|
+
type: "url",
|
|
3301
|
+
name: __props.name,
|
|
3302
|
+
placeholder: __props.placeholder,
|
|
3303
|
+
disabled: __props.disabled,
|
|
3304
|
+
required: __props.required,
|
|
3305
|
+
"aria-invalid": showStatus.value && isValid.value === false || void 0,
|
|
3306
|
+
"aria-required": __props.required || void 0,
|
|
3307
|
+
"aria-describedby": __props.describedBy,
|
|
3308
|
+
class: inputClass
|
|
3309
|
+
}, _ctx.$attrs, { onBlur: handleBlur }), null, 16, _hoisted_1$2), [
|
|
3310
|
+
[vue.vModelText, modelValue.value]
|
|
3311
|
+
])
|
|
3312
|
+
]),
|
|
3313
|
+
actions: vue.withCtx(() => [
|
|
3314
|
+
showStatus.value && isValid.value && modelValue.value ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
3315
|
+
key: 0,
|
|
3316
|
+
type: "button",
|
|
3317
|
+
class: "p-1 rounded hover:bg-gray-100 dark:hover:bg-slate-600 transition-colors",
|
|
3318
|
+
title: "Open URL",
|
|
3319
|
+
onClick: openUrl
|
|
3320
|
+
}, [
|
|
3321
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
3322
|
+
icon: "lucide:external-link",
|
|
3323
|
+
class: "size-4 text-gray-400 hover:text-primary-500"
|
|
3324
|
+
})
|
|
3325
|
+
])) : showStatus.value && isValid.value === false ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
|
|
3326
|
+
key: 1,
|
|
3327
|
+
icon: "lucide:alert-circle",
|
|
3328
|
+
class: "size-5 text-red-500"
|
|
3329
|
+
})) : vue.createCommentVNode("", true)
|
|
3330
|
+
]),
|
|
3331
|
+
_: 1
|
|
3332
|
+
}, 8, ["size", "disabled", "invalid"]);
|
|
3333
|
+
};
|
|
3334
|
+
}
|
|
3335
|
+
});
|
|
3336
|
+
const _hoisted_1$1 = ["value", "type", "name", "disabled", "onInput", "onKeydown"];
|
|
3337
|
+
const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
|
|
3338
|
+
...{
|
|
3339
|
+
inheritAttrs: false
|
|
3340
|
+
},
|
|
3341
|
+
__name: "OTPInput",
|
|
3342
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
3343
|
+
length: { default: 6 },
|
|
3344
|
+
size: { default: "md" },
|
|
3345
|
+
disabled: { type: Boolean },
|
|
3346
|
+
autoFocus: { type: Boolean, default: true },
|
|
3347
|
+
name: {},
|
|
3348
|
+
masked: { type: Boolean, default: false }
|
|
3349
|
+
}, {
|
|
3350
|
+
"modelValue": { default: "" },
|
|
3351
|
+
"modelModifiers": {}
|
|
3352
|
+
}),
|
|
3353
|
+
emits: /* @__PURE__ */ vue.mergeModels(["complete"], ["update:modelValue"]),
|
|
3354
|
+
setup(__props, { expose: __expose, emit: __emit }) {
|
|
3355
|
+
const props = __props;
|
|
3356
|
+
const emit = __emit;
|
|
3357
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
3358
|
+
const inputRefs = vue.ref([]);
|
|
3359
|
+
const digits = vue.computed(() => {
|
|
3360
|
+
const arr = modelValue.value.split("");
|
|
3361
|
+
while (arr.length < props.length) {
|
|
3362
|
+
arr.push("");
|
|
3363
|
+
}
|
|
3364
|
+
return arr.slice(0, props.length);
|
|
3365
|
+
});
|
|
3366
|
+
const sizeClasses = vue.computed(() => ({
|
|
3367
|
+
input: {
|
|
3368
|
+
sm: "size-10 text-lg",
|
|
3369
|
+
md: "size-12 text-xl",
|
|
3370
|
+
lg: "size-14 text-2xl"
|
|
3371
|
+
}[props.size],
|
|
3372
|
+
gap: {
|
|
3373
|
+
sm: "gap-2",
|
|
3374
|
+
md: "gap-3",
|
|
3375
|
+
lg: "gap-4"
|
|
3376
|
+
}[props.size]
|
|
3377
|
+
}));
|
|
3378
|
+
function updateValue(index2, value) {
|
|
3379
|
+
const newDigits = [...digits.value];
|
|
3380
|
+
newDigits[index2] = value.slice(-1);
|
|
3381
|
+
modelValue.value = newDigits.join("");
|
|
3382
|
+
if (modelValue.value.length === props.length && !modelValue.value.includes("")) {
|
|
3383
|
+
emit("complete", modelValue.value);
|
|
3384
|
+
}
|
|
3385
|
+
}
|
|
3386
|
+
function handleInput(event, index2) {
|
|
3387
|
+
const target = event.target;
|
|
3388
|
+
const value = target.value.replace(/\D/g, "");
|
|
3389
|
+
if (value) {
|
|
3390
|
+
updateValue(index2, value);
|
|
3391
|
+
if (index2 < props.length - 1) {
|
|
3392
|
+
vue.nextTick(() => {
|
|
3393
|
+
var _a;
|
|
3394
|
+
(_a = inputRefs.value[index2 + 1]) == null ? void 0 : _a.focus();
|
|
3395
|
+
});
|
|
3396
|
+
}
|
|
3397
|
+
}
|
|
3398
|
+
}
|
|
3399
|
+
function handleKeydown(event, index2) {
|
|
3400
|
+
var _a, _b, _c;
|
|
3401
|
+
const target = event.target;
|
|
3402
|
+
if (event.key === "Backspace") {
|
|
3403
|
+
if (!target.value && index2 > 0) {
|
|
3404
|
+
(_a = inputRefs.value[index2 - 1]) == null ? void 0 : _a.focus();
|
|
3405
|
+
}
|
|
3406
|
+
updateValue(index2, "");
|
|
3407
|
+
} else if (event.key === "ArrowLeft" && index2 > 0) {
|
|
3408
|
+
(_b = inputRefs.value[index2 - 1]) == null ? void 0 : _b.focus();
|
|
3409
|
+
} else if (event.key === "ArrowRight" && index2 < props.length - 1) {
|
|
3410
|
+
(_c = inputRefs.value[index2 + 1]) == null ? void 0 : _c.focus();
|
|
3411
|
+
}
|
|
3412
|
+
}
|
|
3413
|
+
function handlePaste(event) {
|
|
3414
|
+
var _a;
|
|
3415
|
+
event.preventDefault();
|
|
3416
|
+
const pastedData = (_a = event.clipboardData) == null ? void 0 : _a.getData("text").replace(/\D/g, "").slice(0, props.length);
|
|
3417
|
+
if (pastedData) {
|
|
3418
|
+
modelValue.value = pastedData;
|
|
3419
|
+
const focusIndex = Math.min(pastedData.length, props.length - 1);
|
|
3420
|
+
vue.nextTick(() => {
|
|
3421
|
+
var _a2;
|
|
3422
|
+
(_a2 = inputRefs.value[focusIndex]) == null ? void 0 : _a2.focus();
|
|
3423
|
+
});
|
|
3424
|
+
}
|
|
3425
|
+
}
|
|
3426
|
+
function handleFocus(event) {
|
|
3427
|
+
const target = event.target;
|
|
3428
|
+
target.select();
|
|
3429
|
+
}
|
|
3430
|
+
vue.watch(
|
|
3431
|
+
() => modelValue.value,
|
|
3432
|
+
(newValue) => {
|
|
3433
|
+
if (newValue.length === props.length) {
|
|
3434
|
+
emit("complete", newValue);
|
|
3435
|
+
}
|
|
3436
|
+
}
|
|
3437
|
+
);
|
|
3438
|
+
vue.onMounted(() => {
|
|
3439
|
+
var _a;
|
|
3440
|
+
if (props.autoFocus) {
|
|
3441
|
+
(_a = inputRefs.value[0]) == null ? void 0 : _a.focus();
|
|
3442
|
+
}
|
|
3443
|
+
});
|
|
3444
|
+
function setInputRef(el, index2) {
|
|
3445
|
+
if (el) {
|
|
3446
|
+
inputRefs.value[index2] = el;
|
|
3447
|
+
}
|
|
3448
|
+
}
|
|
3449
|
+
__expose({ focus: () => {
|
|
3450
|
+
var _a;
|
|
3451
|
+
return (_a = inputRefs.value[0]) == null ? void 0 : _a.focus();
|
|
3452
|
+
} });
|
|
3453
|
+
return (_ctx, _cache) => {
|
|
3454
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
3455
|
+
class: vue.normalizeClass(["inline-flex", sizeClasses.value.gap])
|
|
3456
|
+
}, [
|
|
3457
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(digits.value, (digit, index2) => {
|
|
3458
|
+
return vue.openBlock(), vue.createElementBlock("input", {
|
|
3459
|
+
key: index2,
|
|
3460
|
+
ref_for: true,
|
|
3461
|
+
ref: (el) => setInputRef(el, index2),
|
|
3462
|
+
value: digit,
|
|
3463
|
+
type: __props.masked ? "password" : "text",
|
|
3464
|
+
inputmode: "numeric",
|
|
3465
|
+
name: __props.name ? `${__props.name}-${index2}` : void 0,
|
|
3466
|
+
disabled: __props.disabled,
|
|
3467
|
+
maxlength: "1",
|
|
3468
|
+
autocomplete: "one-time-code",
|
|
3469
|
+
class: vue.normalizeClass([
|
|
3470
|
+
"text-center font-semibold rounded-xl border-2 transition-all",
|
|
3471
|
+
"bg-gray-50 dark:bg-slate-700 text-gray-900 dark:text-white",
|
|
3472
|
+
"border-gray-200 dark:border-slate-600",
|
|
3473
|
+
"focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:ring-offset-2 focus:outline-none",
|
|
3474
|
+
"disabled:opacity-50 disabled:cursor-not-allowed",
|
|
3475
|
+
digit ? "border-primary-300 dark:border-primary-500/50" : "",
|
|
3476
|
+
sizeClasses.value.input
|
|
3477
|
+
]),
|
|
3478
|
+
onInput: ($event) => handleInput($event, index2),
|
|
3479
|
+
onKeydown: ($event) => handleKeydown($event, index2),
|
|
3480
|
+
onPaste: handlePaste,
|
|
3481
|
+
onFocus: handleFocus
|
|
3482
|
+
}, null, 42, _hoisted_1$1);
|
|
3483
|
+
}), 128))
|
|
3484
|
+
], 2);
|
|
3485
|
+
};
|
|
3486
|
+
}
|
|
3487
|
+
});
|
|
3488
|
+
const _hoisted_1 = ["onClick"];
|
|
3489
|
+
const _hoisted_2 = ["id", "name", "placeholder", "disabled", "required"];
|
|
3490
|
+
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
3491
|
+
...{
|
|
3492
|
+
inheritAttrs: false
|
|
3493
|
+
},
|
|
3494
|
+
__name: "TagsInput",
|
|
3495
|
+
props: /* @__PURE__ */ vue.mergeModels({
|
|
3496
|
+
placeholder: { default: "Add tag..." },
|
|
3497
|
+
size: { default: "md" },
|
|
3498
|
+
disabled: { type: Boolean },
|
|
3499
|
+
max: {},
|
|
3500
|
+
allowDuplicates: { type: Boolean, default: false },
|
|
3501
|
+
name: {},
|
|
3502
|
+
id: {},
|
|
3503
|
+
required: { type: Boolean }
|
|
3504
|
+
}, {
|
|
3505
|
+
"modelValue": { default: () => [] },
|
|
3506
|
+
"modelModifiers": {}
|
|
3507
|
+
}),
|
|
3508
|
+
emits: ["update:modelValue"],
|
|
3509
|
+
setup(__props, { expose: __expose }) {
|
|
3510
|
+
const props = __props;
|
|
3511
|
+
const modelValue = vue.useModel(__props, "modelValue");
|
|
3512
|
+
const inputValue = vue.ref("");
|
|
3513
|
+
const inputRef = vue.ref(null);
|
|
3514
|
+
const canAddMore = vue.computed(() => {
|
|
3515
|
+
if (props.max !== void 0) return modelValue.value.length < props.max;
|
|
3516
|
+
return true;
|
|
3517
|
+
});
|
|
3518
|
+
const sizeClasses = vue.computed(() => ({
|
|
3519
|
+
wrapper: {
|
|
3520
|
+
sm: "min-h-9 py-1.5 px-2 gap-1",
|
|
3521
|
+
md: "min-h-11 py-2 px-3 gap-1.5",
|
|
3522
|
+
lg: "min-h-13 py-2.5 px-4 gap-2"
|
|
3523
|
+
}[props.size],
|
|
3524
|
+
tag: {
|
|
3525
|
+
sm: "text-xs px-2 py-0.5",
|
|
3526
|
+
md: "text-sm px-2.5 py-1",
|
|
3527
|
+
lg: "text-base px-3 py-1.5"
|
|
3528
|
+
}[props.size],
|
|
3529
|
+
input: {
|
|
3530
|
+
sm: "text-xs",
|
|
3531
|
+
md: "text-sm",
|
|
3532
|
+
lg: "text-base"
|
|
3533
|
+
}[props.size],
|
|
3534
|
+
icon: {
|
|
3535
|
+
sm: "size-3",
|
|
3536
|
+
md: "size-3.5",
|
|
3537
|
+
lg: "size-4"
|
|
3538
|
+
}[props.size]
|
|
3539
|
+
}));
|
|
3540
|
+
function addTag(value) {
|
|
3541
|
+
const trimmed = value.trim();
|
|
3542
|
+
if (!trimmed) return;
|
|
3543
|
+
if (!canAddMore.value) return;
|
|
3544
|
+
if (!props.allowDuplicates && modelValue.value.includes(trimmed)) return;
|
|
3545
|
+
modelValue.value = [...modelValue.value, trimmed];
|
|
3546
|
+
inputValue.value = "";
|
|
3547
|
+
}
|
|
3548
|
+
function removeTag(index2) {
|
|
3549
|
+
if (props.disabled) return;
|
|
3550
|
+
modelValue.value = modelValue.value.filter((_, i) => i !== index2);
|
|
3551
|
+
}
|
|
3552
|
+
function handleKeydown(event) {
|
|
3553
|
+
if (event.key === "Enter" || event.key === ",") {
|
|
3554
|
+
event.preventDefault();
|
|
3555
|
+
addTag(inputValue.value);
|
|
3556
|
+
} else if (event.key === "Backspace" && !inputValue.value && modelValue.value.length > 0) {
|
|
3557
|
+
removeTag(modelValue.value.length - 1);
|
|
3558
|
+
}
|
|
3559
|
+
}
|
|
3560
|
+
function handleBlur() {
|
|
3561
|
+
if (inputValue.value) {
|
|
3562
|
+
addTag(inputValue.value);
|
|
3563
|
+
}
|
|
3564
|
+
}
|
|
3565
|
+
function focusInput() {
|
|
3566
|
+
var _a;
|
|
3567
|
+
(_a = inputRef.value) == null ? void 0 : _a.focus();
|
|
3568
|
+
}
|
|
3569
|
+
__expose({ focus: focusInput });
|
|
3570
|
+
return (_ctx, _cache) => {
|
|
3571
|
+
return vue.openBlock(), vue.createElementBlock("div", {
|
|
3572
|
+
class: vue.normalizeClass([
|
|
3573
|
+
"flex flex-wrap items-center rounded-xl border transition-all cursor-text",
|
|
3574
|
+
"bg-gray-50 dark:bg-slate-700",
|
|
3575
|
+
"border-gray-200 dark:border-slate-600",
|
|
3576
|
+
"focus-within:border-primary-500 focus-within:ring-2 focus-within:ring-primary-500 focus-within:bg-white dark:focus-within:bg-slate-600",
|
|
3577
|
+
__props.disabled && "opacity-50 cursor-not-allowed",
|
|
3578
|
+
sizeClasses.value.wrapper
|
|
3579
|
+
]),
|
|
3580
|
+
onClick: focusInput
|
|
3581
|
+
}, [
|
|
3582
|
+
vue.createVNode(vue.TransitionGroup, {
|
|
3583
|
+
name: "tag",
|
|
3584
|
+
tag: "div",
|
|
3585
|
+
class: "flex flex-wrap gap-1.5"
|
|
3586
|
+
}, {
|
|
3587
|
+
default: vue.withCtx(() => [
|
|
3588
|
+
(vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(modelValue.value, (tag, index2) => {
|
|
3589
|
+
return vue.openBlock(), vue.createElementBlock("span", {
|
|
3590
|
+
key: tag + index2,
|
|
3591
|
+
class: vue.normalizeClass([
|
|
3592
|
+
"inline-flex items-center gap-1 rounded-lg font-medium",
|
|
3593
|
+
"bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300",
|
|
3594
|
+
sizeClasses.value.tag
|
|
3595
|
+
])
|
|
3596
|
+
}, [
|
|
3597
|
+
vue.createTextVNode(vue.toDisplayString(tag) + " ", 1),
|
|
3598
|
+
!__props.disabled ? (vue.openBlock(), vue.createElementBlock("button", {
|
|
3599
|
+
key: 0,
|
|
3600
|
+
type: "button",
|
|
3601
|
+
class: "rounded-full hover:bg-primary-200 dark:hover:bg-primary-800/50 transition-colors p-0.5",
|
|
3602
|
+
onClick: vue.withModifiers(($event) => removeTag(index2), ["stop"])
|
|
3603
|
+
}, [
|
|
3604
|
+
vue.createVNode(vue.unref(vue$1.Icon), {
|
|
3605
|
+
icon: "lucide:x",
|
|
3606
|
+
class: vue.normalizeClass(["text-primary-500", sizeClasses.value.icon])
|
|
3607
|
+
}, null, 8, ["class"])
|
|
3608
|
+
], 8, _hoisted_1)) : vue.createCommentVNode("", true)
|
|
3609
|
+
], 2);
|
|
3610
|
+
}), 128))
|
|
3611
|
+
]),
|
|
3612
|
+
_: 1
|
|
3613
|
+
}),
|
|
3614
|
+
canAddMore.value ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", vue.mergeProps({
|
|
3615
|
+
key: 0,
|
|
3616
|
+
id: __props.id ?? __props.name,
|
|
3617
|
+
ref_key: "inputRef",
|
|
3618
|
+
ref: inputRef,
|
|
3619
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => inputValue.value = $event),
|
|
3620
|
+
type: "text",
|
|
3621
|
+
name: __props.name,
|
|
3622
|
+
placeholder: modelValue.value.length === 0 ? __props.placeholder : "",
|
|
3623
|
+
disabled: __props.disabled,
|
|
3624
|
+
required: __props.required && modelValue.value.length === 0,
|
|
3625
|
+
class: [
|
|
3626
|
+
"flex-1 min-w-20 bg-transparent border-none focus:outline-none",
|
|
3627
|
+
"text-gray-900 dark:text-white placeholder-gray-400",
|
|
3628
|
+
sizeClasses.value.input
|
|
3629
|
+
]
|
|
3630
|
+
}, _ctx.$attrs, {
|
|
3631
|
+
onKeydown: handleKeydown,
|
|
3632
|
+
onBlur: handleBlur
|
|
3633
|
+
}), null, 16, _hoisted_2)), [
|
|
3634
|
+
[vue.vModelText, inputValue.value]
|
|
3635
|
+
]) : vue.createCommentVNode("", true)
|
|
3636
|
+
], 2);
|
|
3637
|
+
};
|
|
3638
|
+
}
|
|
3639
|
+
});
|
|
3640
|
+
const TagsInput = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main, [["__scopeId", "data-v-fcace07c"]]);
|
|
2300
3641
|
exports.Slider = Slider;
|
|
2301
|
-
exports.
|
|
2302
|
-
exports._sfc_main
|
|
2303
|
-
exports._sfc_main$
|
|
2304
|
-
exports._sfc_main$
|
|
2305
|
-
exports._sfc_main$
|
|
2306
|
-
exports._sfc_main$
|
|
2307
|
-
exports._sfc_main$
|
|
2308
|
-
exports._sfc_main$
|
|
2309
|
-
exports._sfc_main$
|
|
2310
|
-
exports._sfc_main$
|
|
2311
|
-
exports._sfc_main$
|
|
2312
|
-
exports._sfc_main$
|
|
2313
|
-
exports._sfc_main$
|
|
2314
|
-
exports._sfc_main$
|
|
2315
|
-
exports._sfc_main$
|
|
2316
|
-
exports._sfc_main$
|
|
2317
|
-
|
|
3642
|
+
exports.TagsInput = TagsInput;
|
|
3643
|
+
exports._sfc_main = _sfc_main$r;
|
|
3644
|
+
exports._sfc_main$1 = _sfc_main$q;
|
|
3645
|
+
exports._sfc_main$10 = _sfc_main$f;
|
|
3646
|
+
exports._sfc_main$11 = _sfc_main$e;
|
|
3647
|
+
exports._sfc_main$12 = _sfc_main$d;
|
|
3648
|
+
exports._sfc_main$13 = _sfc_main$c;
|
|
3649
|
+
exports._sfc_main$14 = _sfc_main$b;
|
|
3650
|
+
exports._sfc_main$15 = _sfc_main$a;
|
|
3651
|
+
exports._sfc_main$16 = _sfc_main$p;
|
|
3652
|
+
exports._sfc_main$17 = _sfc_main$9;
|
|
3653
|
+
exports._sfc_main$18 = _sfc_main$8;
|
|
3654
|
+
exports._sfc_main$19 = _sfc_main$7;
|
|
3655
|
+
exports._sfc_main$2 = _sfc_main$o;
|
|
3656
|
+
exports._sfc_main$20 = _sfc_main$6;
|
|
3657
|
+
exports._sfc_main$21 = _sfc_main$5;
|
|
3658
|
+
exports._sfc_main$22 = _sfc_main$4;
|
|
3659
|
+
exports._sfc_main$23 = _sfc_main$3;
|
|
3660
|
+
exports._sfc_main$24 = _sfc_main$2;
|
|
3661
|
+
exports._sfc_main$25 = _sfc_main$1;
|
|
3662
|
+
exports._sfc_main$3 = _sfc_main$n;
|
|
3663
|
+
exports._sfc_main$4 = _sfc_main$m;
|
|
3664
|
+
exports._sfc_main$5 = _sfc_main$l;
|
|
3665
|
+
exports._sfc_main$6 = _sfc_main$k;
|
|
3666
|
+
exports._sfc_main$7 = _sfc_main$i;
|
|
3667
|
+
exports._sfc_main$8 = _sfc_main$h;
|
|
3668
|
+
exports._sfc_main$9 = _sfc_main$g;
|
|
3669
|
+
//# sourceMappingURL=TagsInput-DVebLEH2.cjs.map
|