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.
Files changed (65) hide show
  1. package/dist/{FilterTabs.vue_vue_type_script_setup_true_lang-AFYkni3y.js → FilterTabs.vue_vue_type_script_setup_true_lang-C5vnz3qo.js} +2 -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
  3. package/dist/{FormActions.vue_vue_type_script_setup_true_lang-d2aur5Pu.js → TagsInput-CFAC_MSw.js} +1654 -302
  4. package/dist/TagsInput-CFAC_MSw.js.map +1 -0
  5. package/dist/{FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs → TagsInput-DVebLEH2.cjs} +1649 -297
  6. package/dist/TagsInput-DVebLEH2.cjs.map +1 -0
  7. package/dist/cisse-vue-ui.css +10 -0
  8. package/dist/components/core/index.js +1 -1
  9. package/dist/components/form/EmailInput.stories.d.ts +13 -0
  10. package/dist/components/form/EmailInput.test.d.ts +1 -0
  11. package/dist/components/form/EmailInput.vue.d.ts +32 -0
  12. package/dist/components/form/InputWrapper.stories.d.ts +16 -0
  13. package/dist/components/form/InputWrapper.test.d.ts +1 -0
  14. package/dist/components/form/InputWrapper.vue.d.ts +40 -0
  15. package/dist/components/form/MoneyInput.stories.d.ts +16 -0
  16. package/dist/components/form/MoneyInput.test.d.ts +1 -0
  17. package/dist/components/form/MoneyInput.vue.d.ts +40 -0
  18. package/dist/components/form/NumberInput.stories.d.ts +14 -0
  19. package/dist/components/form/NumberInput.test.d.ts +1 -0
  20. package/dist/components/form/NumberInput.vue.d.ts +39 -0
  21. package/dist/components/form/OTPInput.stories.d.ts +13 -0
  22. package/dist/components/form/OTPInput.test.d.ts +1 -0
  23. package/dist/components/form/OTPInput.vue.d.ts +33 -0
  24. package/dist/components/form/PasswordInput.stories.d.ts +15 -0
  25. package/dist/components/form/PasswordInput.test.d.ts +1 -0
  26. package/dist/components/form/PasswordInput.vue.d.ts +36 -0
  27. package/dist/components/form/PercentInput.stories.d.ts +12 -0
  28. package/dist/components/form/PercentInput.test.d.ts +1 -0
  29. package/dist/components/form/PercentInput.vue.d.ts +38 -0
  30. package/dist/components/form/PhoneInput.stories.d.ts +13 -0
  31. package/dist/components/form/PhoneInput.test.d.ts +1 -0
  32. package/dist/components/form/PhoneInput.vue.d.ts +89 -0
  33. package/dist/components/form/QuantityInput.stories.d.ts +12 -0
  34. package/dist/components/form/QuantityInput.test.d.ts +1 -0
  35. package/dist/components/form/QuantityInput.vue.d.ts +32 -0
  36. package/dist/components/form/SearchInput.vue.d.ts +18 -4
  37. package/dist/components/form/TagsInput.stories.d.ts +13 -0
  38. package/dist/components/form/TagsInput.test.d.ts +1 -0
  39. package/dist/components/form/TagsInput.vue.d.ts +37 -0
  40. package/dist/components/form/URLInput.stories.d.ts +11 -0
  41. package/dist/components/form/URLInput.test.d.ts +1 -0
  42. package/dist/components/form/URLInput.vue.d.ts +32 -0
  43. package/dist/components/form/index.cjs +29 -18
  44. package/dist/components/form/index.cjs.map +1 -1
  45. package/dist/components/form/index.d.ts +15 -0
  46. package/dist/components/form/index.js +14 -3
  47. package/dist/components/index.cjs +29 -18
  48. package/dist/components/index.cjs.map +1 -1
  49. package/dist/components/index.js +15 -4
  50. package/dist/{index-Bp7Mpfbi.cjs → index-Bl5eyNdr.cjs} +31 -20
  51. package/dist/index-Bl5eyNdr.cjs.map +1 -0
  52. package/dist/index-Cke8qLRH.js +95 -0
  53. package/dist/index-Cke8qLRH.js.map +1 -0
  54. package/dist/{index-BaWpldIJ.js → index-SNefWfX0.js} +3 -3
  55. package/dist/{index-BaWpldIJ.js.map → index-SNefWfX0.js.map} +1 -1
  56. package/dist/index.cjs +30 -19
  57. package/dist/index.cjs.map +1 -1
  58. package/dist/index.js +26 -15
  59. package/dist/style.css +1 -1
  60. package/package.json +1 -1
  61. package/dist/FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs.map +0 -1
  62. package/dist/FormActions.vue_vue_type_script_setup_true_lang-d2aur5Pu.js.map +0 -1
  63. package/dist/index-6hQQcCpF.js +0 -84
  64. package/dist/index-6hQQcCpF.js.map +0 -1
  65. package/dist/index-Bp7Mpfbi.cjs.map +0 -1
@@ -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$g = ["data-error", "for"];
10
- const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({
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$g);
24
+ ], 8, _hoisted_1$r);
25
25
  };
26
26
  }
27
27
  });
28
- const _hoisted_1$f = ["id", "data-error", "role", "aria-live"];
29
- const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({
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$f);
48
+ ], 8, _hoisted_1$q);
49
49
  };
50
50
  }
51
51
  });
52
- const _hoisted_1$e = {
52
+ const _hoisted_1$p = {
53
53
  key: 0,
54
- class: "relative"
54
+ class: "absolute left-3 top-1/2 -translate-y-1/2 pointer-events-none text-gray-400"
55
55
  };
56
- const _hoisted_2$c = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
57
- const _hoisted_3$b = ["id", "disabled", "name", "placeholder", "type", "required", "aria-invalid", "aria-required", "aria-describedby"];
58
- const baseInputClass = "block w-full rounded-xl border border-gray-200 bg-gray-50 text-sm text-gray-900 placeholder-gray-400 transition-all focus:border-primary-500 focus:ring-2 focus:ring-primary-500 focus:bg-white focus:outline-hidden disabled:border-gray-200 disabled:bg-gray-100 disabled:text-gray-500 disabled:cursor-not-allowed dark:border-slate-600 dark:bg-slate-700 dark:text-white dark:placeholder-gray-500 dark:focus:border-primary-500 dark:focus:ring-primary-500 dark:focus:bg-slate-600 dark:disabled:bg-slate-800 dark:disabled:text-gray-500";
59
- const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({
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 props.icon || props.iconRight ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$e, [
83
- props.icon ? (vue.openBlock(), vue.createBlock(vue.unref(vue$1.Icon), {
84
- key: 0,
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
- name: props.name ?? "",
119
- placeholder: props.placeholder,
120
- type: props.type,
121
- required: props.required,
122
- "aria-invalid": props.invalid || void 0,
123
- "aria-required": props.required || void 0,
124
- "aria-describedby": props.describedBy || void 0,
125
- class: [baseInputClass, "px-4 py-3"]
126
- }, _ctx.$attrs), null, 16, _hoisted_3$b)), [
127
- [vue.vModelDynamic, modelValue.value]
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$d = { class: "relative" };
133
- const _hoisted_2$b = ["id", "disabled", "aria-expanded", "aria-controls", "aria-invalid", "aria-describedby"];
134
- const _hoisted_3$a = { class: "flex-1 truncate" };
135
- const _hoisted_4$8 = ["id", "aria-label"];
136
- const _hoisted_5$7 = {
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$7 = { 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" };
141
- const _hoisted_7$6 = {
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$5 = { class: "py-1" };
147
- const _hoisted_9$3 = ["aria-selected", "data-index", "onClick", "onMouseenter"];
148
- const _hoisted_10$3 = {
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$3 = { class: "flex-1" };
154
- const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
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$d, [
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$a, vue.toDisplayString(displayValue.value), 1)
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$b),
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$7, [
329
- vue.createElementVNode("div", _hoisted_6$7, [
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$6, vue.toDisplayString(__props.noResultsText), 1)) : vue.createCommentVNode("", true),
350
- vue.createElementVNode("div", _hoisted_8$5, [
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$3)),
378
- vue.createElementVNode("span", _hoisted_11$3, vue.toDisplayString(option.label), 1)
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$3);
426
+ ], 42, _hoisted_9$4);
381
427
  }), 128))
382
428
  ])
383
- ], 14, _hoisted_4$8)) : vue.createCommentVNode("", true)
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$c = ["hidden"];
393
- const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({
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$g, {
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$d, vue.mergeProps({
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$e, vue.mergeProps({
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$f, {
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$c);
521
+ ], 12, _hoisted_1$m);
476
522
  };
477
523
  }
478
524
  });
479
- const _hoisted_1$b = { class: "relative" };
480
- const _hoisted_2$a = ["disabled", "placeholder", "value"];
481
- const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
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, default: false }
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, { emit: __emit }) {
491
- const emit = __emit;
492
- const handleInput = (event) => {
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.createElementBlock("div", _hoisted_1$b, [
498
- vue.createVNode(vue.unref(vue$1.Icon), {
499
- icon: __props.icon,
500
- class: "absolute top-1/2 left-3 size-5 -translate-y-1/2 text-gray-400"
501
- }, null, 8, ["icon"]),
502
- vue.createElementVNode("input", {
503
- disabled: __props.disabled,
504
- placeholder: __props.placeholder,
505
- value: __props.modelValue,
506
- class: "focus:border-primary focus:ring-primary w-full rounded-lg border border-gray-300 bg-white py-2 pr-4 pl-10 text-gray-900 placeholder-gray-400 transition-colors disabled:cursor-not-allowed disabled:opacity-50 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-100 dark:placeholder-gray-500",
507
- type: "text",
508
- onInput: handleInput
509
- }, null, 40, _hoisted_2$a)
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$a = ["id", "aria-checked", "aria-labelledby", "aria-describedby", "disabled"];
515
- const _hoisted_2$9 = {
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$9 = ["id"];
520
- const _hoisted_4$7 = ["id"];
521
- const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
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$a),
586
- __props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$9, [
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$9)) : vue.createCommentVNode("", true),
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$7)) : vue.createCommentVNode("", true)
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$9 = { class: "w-full" };
603
- const _hoisted_2$8 = {
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$8 = { class: "text-gray-600 dark:text-gray-400" };
608
- const _hoisted_4$6 = { class: "font-medium text-gray-900 dark:text-white" };
609
- const _hoisted_5$6 = { class: "text-gray-600 dark:text-gray-400" };
610
- const _hoisted_6$6 = { class: "relative" };
611
- const _hoisted_7$5 = ["value", "min", "max", "step", "disabled"];
612
- const _hoisted_8$4 = { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center" };
613
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
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$9, [
645
- __props.showValue ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$8, [
646
- vue.createElementVNode("span", _hoisted_3$8, vue.toDisplayString(__props.min), 1),
647
- vue.createElementVNode("span", _hoisted_4$6, vue.toDisplayString(displayValue.value), 1),
648
- vue.createElementVNode("span", _hoisted_5$6, vue.toDisplayString(__props.max), 1)
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$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$5),
661
- vue.createElementVNode("div", _hoisted_8$4, [
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$9, [["__scopeId", "data-v-c25e2c2a"]]);
673
- const _hoisted_1$8 = { class: "relative" };
674
- const _hoisted_2$7 = ["id", "disabled", "aria-expanded", "aria-controls"];
675
- const _hoisted_3$7 = { class: "flex-1 truncate" };
676
- const _hoisted_4$5 = { class: "flex items-center gap-1" };
677
- const _hoisted_5$5 = ["id", "aria-label"];
678
- const _hoisted_6$5 = { class: "mb-4 flex items-center justify-between" };
679
- const _hoisted_7$4 = {
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$3 = {
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$2 = ["abbr"];
689
- const _hoisted_10$2 = ["id", "aria-label"];
690
- const _hoisted_11$2 = ["aria-label", "aria-selected", "aria-disabled", "disabled", "onClick"];
691
- const _hoisted_12$1 = { class: "mt-4 border-t border-gray-200 pt-3 dark:border-gray-700" };
692
- const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
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$8, [
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$7, vue.toDisplayString(displayValue.value || __props.placeholder), 1),
835
- vue.createElementVNode("div", _hoisted_4$5, [
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$7),
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$5, [
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$4, vue.toDisplayString(monthYear.value), 1),
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$3, [
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$2);
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$2);
995
+ }, vue.toDisplayString(day.date.getDate()), 11, _hoisted_11$3);
942
996
  }), 128))
943
- ], 8, _hoisted_10$2),
944
- vue.createElementVNode("div", _hoisted_12$1, [
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$5)) : vue.createCommentVNode("", true)
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$7 = { class: "space-y-4" };
961
- const _hoisted_2$6 = ["accept", "multiple", "disabled"];
962
- const _hoisted_3$6 = { class: "space-y-2" };
963
- const _hoisted_4$4 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300" };
964
- const _hoisted_5$4 = {
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$4 = {
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$3 = {
1026
+ const _hoisted_7$4 = {
973
1027
  key: 0,
974
1028
  class: "space-y-2"
975
1029
  };
976
- const _hoisted_8$2 = { class: "flex-1 min-w-0" };
977
- const _hoisted_9$1 = { class: "text-sm font-medium text-gray-700 dark:text-gray-300 truncate" };
978
- const _hoisted_10$1 = { class: "text-xs text-gray-500 dark:text-gray-400" };
979
- const _hoisted_11$1 = ["onClick"];
980
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
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$7, [
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$6),
1126
- vue.createElementVNode("div", _hoisted_3$6, [
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$4, vue.toDisplayString(__props.label), 1),
1132
- __props.description ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_5$4, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true),
1133
- __props.maxSize ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_6$4, " Max size: " + vue.toDisplayString(formatSize(__props.maxSize)), 1)) : vue.createCommentVNode("", true)
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$3, [
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$2, [
1147
- vue.createElementVNode("p", _hoisted_9$1, vue.toDisplayString(uploadedFile.file.name), 1),
1148
- vue.createElementVNode("p", _hoisted_10$1, vue.toDisplayString(formatSize(uploadedFile.file.size)), 1)
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$1)
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$6 = { class: "flex items-center gap-1" };
1168
- const _hoisted_2$5 = ["disabled", "onClick", "onMousemove"];
1169
- const _hoisted_3$5 = {
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$6 = /* @__PURE__ */ vue.defineComponent({
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$6, [
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$5);
1322
+ ], 42, _hoisted_2$b);
1269
1323
  }), 128))
1270
1324
  ], 32),
1271
- __props.showValue ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$5, vue.toDisplayString(__props.modelValue.toFixed(__props.allowHalf ? 1 : 0)), 1)) : vue.createCommentVNode("", true)
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$5 = { class: "relative inline-block" };
1277
- const _hoisted_2$4 = {
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$4 = ["disabled"];
1282
- const _hoisted_4$3 = { class: "text-sm font-mono text-gray-700 dark:text-gray-300" };
1283
- const _hoisted_5$3 = { class: "grid grid-cols-5 gap-2 mb-3" };
1284
- const _hoisted_6$3 = ["title", "onClick"];
1285
- const _hoisted_7$2 = {
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$1 = ["value"];
1290
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
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$5, [
1360
- __props.label ? (vue.openBlock(), vue.createElementBlock("label", _hoisted_2$4, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
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$3, vue.toDisplayString(__props.modelValue), 1),
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$4),
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$3, [
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$3);
1469
+ ], 14, _hoisted_6$4);
1416
1470
  }), 128))
1417
1471
  ]),
1418
- __props.showInput ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$2, [
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$1),
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$4 = { class: "space-y-2" };
1451
- const _hoisted_2$3 = {
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$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$4 = /* @__PURE__ */ vue.defineComponent({
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$4, [
1538
- __props.showLabels ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$3, [
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$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$3 = ["aria-expanded", "aria-controls"];
1580
- const _hoisted_2$2 = ["id", "name", "placeholder", "disabled", "aria-controls"];
1581
- const _hoisted_3$2 = { class: "flex items-center gap-1" };
1582
- const _hoisted_4$2 = ["id", "aria-label", "aria-multiselectable"];
1583
- const _hoisted_5$2 = ["aria-selected", "aria-disabled", "disabled", "onClick"];
1584
- const _hoisted_6$2 = { class: "flex-1" };
1585
- const _hoisted_7$1 = {
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$3 = /* @__PURE__ */ vue.defineComponent({
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$2)), [
1775
+ }, null, 8, _hoisted_2$8)), [
1722
1776
  [vue.vModelText, search.value]
1723
1777
  ]),
1724
- vue.createElementVNode("div", _hoisted_3$2, [
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$3),
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$2, vue.toDisplayString(option.label), 1),
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$2);
1805
- }), 128)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$1, vue.toDisplayString(__props.noResultsText), 1))
1806
- ], 8, _hoisted_4$2)) : vue.createCommentVNode("", true)
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$2 = { class: "relative" };
1816
- const _hoisted_2$1 = {
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$1 = ["id", "disabled", "aria-invalid", "aria-describedby"];
1821
- const _hoisted_4$1 = {
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$1 = { class: "flex size-8 items-center justify-center rounded bg-gray-100 dark:bg-gray-800" };
1826
- const _hoisted_6$1 = { class: "text-gray-700 dark:text-gray-300 font-mono text-xs truncate" };
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$2 = /* @__PURE__ */ vue.defineComponent({
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$2, [
1974
- __props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$g, {
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$1, "*")) : vue.createCommentVNode("", true)
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$1, [
1998
- vue.createElementVNode("div", _hoisted_5$1, [
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$1, vue.toDisplayString(modelValue.value), 1)
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$1),
2022
- __props.help && !hasError.value ? (vue.openBlock(), vue.createBlock(_sfc_main$f, {
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$f, {
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$1 = { class: "flex items-center justify-between" };
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$1 = /* @__PURE__ */ vue.defineComponent({
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$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._sfc_main = _sfc_main$g;
2302
- exports._sfc_main$1 = _sfc_main$f;
2303
- exports._sfc_main$10 = _sfc_main$5;
2304
- exports._sfc_main$11 = _sfc_main$4;
2305
- exports._sfc_main$12 = _sfc_main$3;
2306
- exports._sfc_main$13 = _sfc_main$2;
2307
- exports._sfc_main$14 = _sfc_main$1;
2308
- exports._sfc_main$15 = _sfc_main;
2309
- exports._sfc_main$2 = _sfc_main$e;
2310
- exports._sfc_main$3 = _sfc_main$d;
2311
- exports._sfc_main$4 = _sfc_main$c;
2312
- exports._sfc_main$5 = _sfc_main$b;
2313
- exports._sfc_main$6 = _sfc_main$a;
2314
- exports._sfc_main$7 = _sfc_main$8;
2315
- exports._sfc_main$8 = _sfc_main$7;
2316
- exports._sfc_main$9 = _sfc_main$6;
2317
- //# sourceMappingURL=FormActions.vue_vue_type_script_setup_true_lang-DzN_fbUC.cjs.map
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