cisse-vue-ui 0.2.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +666 -664
  2. package/dist/{Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js → DatePicker.vue_vue_type_script_setup_true_lang-DgGJ5-8v.js} +372 -60
  3. package/dist/DatePicker.vue_vue_type_script_setup_true_lang-DgGJ5-8v.js.map +1 -0
  4. package/dist/{Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs → DatePicker.vue_vue_type_script_setup_true_lang-qux1VNn0.cjs} +371 -59
  5. package/dist/DatePicker.vue_vue_type_script_setup_true_lang-qux1VNn0.cjs.map +1 -0
  6. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js.map +1 -1
  7. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs.map +1 -1
  8. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs.map +1 -1
  9. package/dist/PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js.map +1 -1
  10. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js → Popover.vue_vue_type_script_setup_true_lang-Q7gRZsT9.js} +203 -43
  11. package/dist/Popover.vue_vue_type_script_setup_true_lang-Q7gRZsT9.js.map +1 -0
  12. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs → Popover.vue_vue_type_script_setup_true_lang-dvlDTcf1.cjs} +191 -31
  13. package/dist/Popover.vue_vue_type_script_setup_true_lang-dvlDTcf1.cjs.map +1 -0
  14. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs → Skeleton.vue_vue_type_script_setup_true_lang-D2S5g9s5.cjs} +325 -72
  15. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-D2S5g9s5.cjs.map +1 -0
  16. package/dist/{EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js → Skeleton.vue_vue_type_script_setup_true_lang-DRC4EADS.js} +326 -73
  17. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-DRC4EADS.js.map +1 -0
  18. package/dist/_plugin-vue_export-helper-1tPrXgE0.js +11 -0
  19. package/dist/_plugin-vue_export-helper-1tPrXgE0.js.map +1 -0
  20. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs +10 -0
  21. package/dist/_plugin-vue_export-helper-DM9IkUGy.cjs.map +1 -0
  22. package/dist/cisse-vue-ui.css +83 -0
  23. package/dist/components/core/Avatar.stories.d.ts +12 -0
  24. package/dist/components/core/Button.stories.d.ts +18 -0
  25. package/dist/components/core/CardComponent.stories.d.ts +10 -0
  26. package/dist/components/core/CollapsibleCard.stories.d.ts +10 -0
  27. package/dist/components/core/Dropdown.stories.d.ts +11 -0
  28. package/dist/components/core/Popover.stories.d.ts +10 -0
  29. package/dist/components/core/Popover.vue.d.ts +42 -0
  30. package/dist/components/core/StatusBadge.stories.d.ts +13 -0
  31. package/dist/components/core/Stepper.stories.d.ts +12 -0
  32. package/dist/components/core/Tabs.stories.d.ts +10 -0
  33. package/dist/components/core/Tooltip.stories.d.ts +10 -0
  34. package/dist/components/core/Tooltip.vue.d.ts +32 -0
  35. package/dist/components/core/index.cjs +15 -13
  36. package/dist/components/core/index.cjs.map +1 -1
  37. package/dist/components/core/index.d.ts +4 -0
  38. package/dist/components/core/index.js +4 -2
  39. package/dist/components/feedback/Alert.stories.d.ts +13 -0
  40. package/dist/components/feedback/EmptyState.stories.d.ts +13 -0
  41. package/dist/components/feedback/LoadingSpinner.stories.d.ts +11 -0
  42. package/dist/components/feedback/Modal.stories.d.ts +11 -0
  43. package/dist/components/feedback/PaginationControls.stories.d.ts +12 -0
  44. package/dist/components/feedback/Progress.stories.d.ts +14 -0
  45. package/dist/components/feedback/Progress.vue.d.ts +30 -0
  46. package/dist/components/feedback/Skeleton.stories.d.ts +15 -0
  47. package/dist/components/feedback/Skeleton.vue.d.ts +19 -0
  48. package/dist/components/feedback/Toast.stories.d.ts +12 -0
  49. package/dist/components/feedback/Toast.vue.d.ts +23 -0
  50. package/dist/components/feedback/ToastContainer.vue.d.ts +22 -0
  51. package/dist/components/feedback/index.cjs +12 -8
  52. package/dist/components/feedback/index.cjs.map +1 -1
  53. package/dist/components/feedback/index.d.ts +8 -0
  54. package/dist/components/feedback/index.js +6 -2
  55. package/dist/components/form/Checkbox.stories.d.ts +13 -0
  56. package/dist/components/form/DatePicker.stories.d.ts +15 -0
  57. package/dist/components/form/DatePicker.vue.d.ts +34 -0
  58. package/dist/components/form/FormGroup.stories.d.ts +10 -0
  59. package/dist/components/form/FormInput.stories.d.ts +12 -0
  60. package/dist/components/form/FormSelect.stories.d.ts +11 -0
  61. package/dist/components/form/Slider.stories.d.ts +13 -0
  62. package/dist/components/form/Slider.vue.d.ts +29 -0
  63. package/dist/components/form/Switch.stories.d.ts +11 -0
  64. package/dist/components/form/index.cjs +10 -8
  65. package/dist/components/form/index.cjs.map +1 -1
  66. package/dist/components/form/index.d.ts +2 -0
  67. package/dist/components/form/index.js +3 -1
  68. package/dist/components/index.cjs +37 -29
  69. package/dist/components/index.cjs.map +1 -1
  70. package/dist/components/index.js +12 -4
  71. package/dist/components/layout/BaseLayout.stories.d.ts +9 -0
  72. package/dist/components/layout/BaseLayout.vue.d.ts +1 -1
  73. package/dist/components/layout/PageLayout.stories.d.ts +10 -0
  74. package/dist/components/type/BadgeType.stories.d.ts +13 -0
  75. package/dist/components/type/BooleanType.stories.d.ts +12 -0
  76. package/dist/components/type/DateType.stories.d.ts +12 -0
  77. package/dist/components/type/NumberType.stories.d.ts +11 -0
  78. package/dist/components/type/TextType.stories.d.ts +10 -0
  79. package/dist/composables/index.cjs +7 -6
  80. package/dist/composables/index.cjs.map +1 -1
  81. package/dist/composables/index.d.ts +1 -0
  82. package/dist/composables/index.js +3 -2
  83. package/dist/composables/useToast.d.ts +30 -0
  84. package/dist/index-BQtfDfYo.js +59 -0
  85. package/dist/index-BQtfDfYo.js.map +1 -0
  86. package/dist/index-CzzlUYhY.cjs +58 -0
  87. package/dist/index-CzzlUYhY.cjs.map +1 -0
  88. package/dist/index.cjs +45 -36
  89. package/dist/index.cjs.map +1 -1
  90. package/dist/index.js +15 -6
  91. package/dist/style.css +1 -1
  92. package/dist/useDropdown-DHFnd259.cjs.map +1 -1
  93. package/dist/useDropdown-iVu14E6s.js.map +1 -1
  94. package/dist/{useModal-Aq8hn152.js → useToast-DT9hFfpM.js} +49 -1
  95. package/dist/useToast-DT9hFfpM.js.map +1 -0
  96. package/dist/{useModal-DDF_ZS8C.cjs → useToast-nJXpFz_M.cjs} +49 -1
  97. package/dist/useToast-nJXpFz_M.cjs.map +1 -0
  98. package/package.json +21 -2
  99. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-ClNZxjzF.cjs.map +0 -1
  100. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Y1wvT4aS.js.map +0 -1
  101. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-CrVvFwXA.js.map +0 -1
  102. package/dist/EmptyState.vue_vue_type_script_setup_true_lang-mlqLBP5W.cjs.map +0 -1
  103. package/dist/Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js.map +0 -1
  104. package/dist/Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs.map +0 -1
  105. package/dist/index-CCWZb44b.cjs +0 -50
  106. package/dist/index-CCWZb44b.cjs.map +0 -1
  107. package/dist/index-RD8wq3O6.js +0 -51
  108. package/dist/index-RD8wq3O6.js.map +0 -1
  109. package/dist/useModal-Aq8hn152.js.map +0 -1
  110. package/dist/useModal-DDF_ZS8C.cjs.map +0 -1
@@ -2,8 +2,9 @@
2
2
  const vue = require("vue");
3
3
  const vue$1 = require("@iconify/vue");
4
4
  const useDropdown = require("./useDropdown-DHFnd259.cjs");
5
- const _hoisted_1$6 = ["data-error", "for"];
6
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
5
+ const _pluginVue_exportHelper = require("./_plugin-vue_export-helper-DM9IkUGy.cjs");
6
+ const _hoisted_1$8 = ["data-error", "for"];
7
+ const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
7
8
  __name: "FormLabel",
8
9
  props: {
9
10
  error: { type: [String, Boolean] },
@@ -17,12 +18,12 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
17
18
  class: "block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300"
18
19
  }, [
19
20
  vue.renderSlot(_ctx.$slots, "default")
20
- ], 8, _hoisted_1$6);
21
+ ], 8, _hoisted_1$8);
21
22
  };
22
23
  }
23
24
  });
24
- const _hoisted_1$5 = ["data-error"];
25
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
25
+ const _hoisted_1$7 = ["data-error"];
26
+ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
26
27
  __name: "FormHelp",
27
28
  props: {
28
29
  error: { type: Boolean },
@@ -37,12 +38,12 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
37
38
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
38
39
  vue.createTextVNode(vue.toDisplayString(__props.text ?? ""), 1)
39
40
  ])
40
- ], 8, _hoisted_1$5);
41
+ ], 8, _hoisted_1$7);
41
42
  };
42
43
  }
43
44
  });
44
- const _hoisted_1$4 = ["id", "disabled", "name", "placeholder", "type"];
45
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
45
+ const _hoisted_1$6 = ["id", "disabled", "name", "placeholder", "type"];
46
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
46
47
  __name: "FormInput",
47
48
  props: /* @__PURE__ */ vue.mergeModels({
48
49
  type: { default: "text" },
@@ -68,32 +69,32 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
68
69
  placeholder: __props.placeholder,
69
70
  type: __props.type,
70
71
  class: "mt-1 block w-full rounded-md border border-gray-300 bg-white px-3 py-2 text-sm text-gray-800 placeholder-gray-400 shadow-sm invalid:border-pink-500 invalid:text-pink-600 focus:border-primary focus:ring-1 focus:ring-primary focus:outline-none focus:invalid:border-pink-500 focus:invalid:ring-pink-500 disabled:border-gray-200 disabled:bg-gray-50 disabled:text-gray-500 disabled:shadow-none dark:border-gray-700 dark:bg-gray-900 dark:text-gray-200 dark:placeholder-gray-500 dark:focus:border-primary dark:focus:ring-primary dark:disabled:border-gray-800 dark:disabled:bg-gray-950 dark:disabled:text-gray-500"
71
- }, _ctx.$attrs), null, 16, _hoisted_1$4)), [
72
+ }, _ctx.$attrs), null, 16, _hoisted_1$6)), [
72
73
  [vue.vModelDynamic, modelValue.value]
73
74
  ]);
74
75
  };
75
76
  }
76
77
  });
77
- const _hoisted_1$3 = { class: "relative" };
78
- const _hoisted_2$2 = ["id", "disabled"];
79
- const _hoisted_3$1 = { class: "flex-1 truncate" };
80
- const _hoisted_4$1 = {
78
+ const _hoisted_1$5 = { class: "relative" };
79
+ const _hoisted_2$4 = ["id", "disabled"];
80
+ const _hoisted_3$3 = { class: "flex-1 truncate" };
81
+ const _hoisted_4$3 = {
81
82
  key: 0,
82
83
  class: "sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800"
83
84
  };
84
- const _hoisted_5 = { 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" };
85
- const _hoisted_6 = {
85
+ const _hoisted_5$2 = { 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" };
86
+ const _hoisted_6$2 = {
86
87
  key: 1,
87
88
  class: "px-4 py-3 text-sm text-gray-500 dark:text-gray-400"
88
89
  };
89
- const _hoisted_7 = { class: "py-1" };
90
- const _hoisted_8 = ["data-index", "onClick", "onMouseenter"];
91
- const _hoisted_9 = {
90
+ const _hoisted_7$2 = { class: "py-1" };
91
+ const _hoisted_8$2 = ["data-index", "onClick", "onMouseenter"];
92
+ const _hoisted_9$1 = {
92
93
  key: 1,
93
94
  class: "size-4 shrink-0"
94
95
  };
95
- const _hoisted_10 = { class: "flex-1" };
96
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
96
+ const _hoisted_10$1 = { class: "flex-1" };
97
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
97
98
  __name: "FormSelect",
98
99
  props: /* @__PURE__ */ vue.mergeModels({
99
100
  options: {},
@@ -206,7 +207,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
206
207
  return [base, state, text, props.triggerClass];
207
208
  });
208
209
  return (_ctx, _cache) => {
209
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
210
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$5, [
210
211
  vue.createElementVNode("button", {
211
212
  ref_key: "triggerRef",
212
213
  ref: triggerRef,
@@ -221,13 +222,13 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
221
222
  option: selectedOption.value,
222
223
  placeholder: __props.placeholder
223
224
  }, () => [
224
- vue.createElementVNode("span", _hoisted_3$1, vue.toDisplayString(displayValue.value), 1)
225
+ vue.createElementVNode("span", _hoisted_3$3, vue.toDisplayString(displayValue.value), 1)
225
226
  ]),
226
227
  vue.createVNode(vue.unref(vue$1.Icon), {
227
228
  icon: "lucide:chevron-down",
228
229
  class: vue.normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", vue.unref(isOpen) && "rotate-180"])
229
230
  }, null, 8, ["class"])
230
- ], 42, _hoisted_2$2),
231
+ ], 42, _hoisted_2$4),
231
232
  (vue.openBlock(), vue.createBlock(vue.Teleport, {
232
233
  to: "body",
233
234
  disabled: !__props.teleport
@@ -251,8 +252,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
251
252
  !__props.teleport && "absolute mt-1 w-full"
252
253
  ])
253
254
  }, [
254
- __props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
255
- vue.createElementVNode("div", _hoisted_5, [
255
+ __props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$3, [
256
+ vue.createElementVNode("div", _hoisted_5$2, [
256
257
  vue.createVNode(vue.unref(vue$1.Icon), {
257
258
  icon: "lucide:search",
258
259
  class: "size-4 text-gray-400"
@@ -270,8 +271,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
270
271
  ])
271
272
  ])
272
273
  ])) : vue.createCommentVNode("", true),
273
- filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, vue.toDisplayString(__props.noResultsText), 1)) : vue.createCommentVNode("", true),
274
- vue.createElementVNode("div", _hoisted_7, [
274
+ filteredOptions.value.length === 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$2, vue.toDisplayString(__props.noResultsText), 1)) : vue.createCommentVNode("", true),
275
+ vue.createElementVNode("div", _hoisted_7$2, [
275
276
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(filteredOptions.value, (option, index) => {
276
277
  return vue.openBlock(), vue.createElementBlock("button", {
277
278
  key: String(option.value),
@@ -295,10 +296,10 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
295
296
  key: 0,
296
297
  icon: "lucide:check",
297
298
  class: "size-4 shrink-0 text-primary"
298
- })) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_9)),
299
- vue.createElementVNode("span", _hoisted_10, vue.toDisplayString(option.label), 1)
299
+ })) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_9$1)),
300
+ vue.createElementVNode("span", _hoisted_10$1, vue.toDisplayString(option.label), 1)
300
301
  ])
301
- ], 42, _hoisted_8);
302
+ ], 42, _hoisted_8$2);
302
303
  }), 128))
303
304
  ])
304
305
  ], 6)) : vue.createCommentVNode("", true)
@@ -310,8 +311,8 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
310
311
  };
311
312
  }
312
313
  });
313
- const _hoisted_1$2 = ["hidden"];
314
- const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
314
+ const _hoisted_1$4 = ["hidden"];
315
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
315
316
  __name: "FormGroup",
316
317
  props: /* @__PURE__ */ vue.mergeModels({
317
318
  label: {},
@@ -344,7 +345,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
344
345
  }, [
345
346
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
346
347
  vue.renderSlot(_ctx.$slots, "label", {}, () => [
347
- __props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$6, {
348
+ __props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$8, {
348
349
  key: 0,
349
350
  "html-for": __props.id ?? __props.name,
350
351
  error: __props.error
@@ -356,17 +357,17 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
356
357
  }, 8, ["html-for", "error"])) : vue.createCommentVNode("", true)
357
358
  ]),
358
359
  vue.renderSlot(_ctx.$slots, "input", {}, () => [
359
- isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$3, vue.mergeProps({
360
+ isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$5, vue.mergeProps({
360
361
  key: 0,
361
362
  modelValue: modelValue.value,
362
363
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event)
363
- }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_sfc_main$4, vue.mergeProps({
364
+ }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_sfc_main$6, vue.mergeProps({
364
365
  key: 1,
365
366
  modelValue: modelValue.value,
366
367
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event)
367
368
  }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"]))
368
369
  ]),
369
- __props.error && typeof __props.error === "string" ? (vue.openBlock(), vue.createBlock(_sfc_main$5, {
370
+ __props.error && typeof __props.error === "string" ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
370
371
  key: 0,
371
372
  error: true
372
373
  }, {
@@ -376,13 +377,13 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
376
377
  _: 1
377
378
  })) : vue.createCommentVNode("", true)
378
379
  ])
379
- ], 12, _hoisted_1$2);
380
+ ], 12, _hoisted_1$4);
380
381
  };
381
382
  }
382
383
  });
383
- const _hoisted_1$1 = { class: "relative" };
384
- const _hoisted_2$1 = ["disabled", "placeholder", "value"];
385
- const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
384
+ const _hoisted_1$3 = { class: "relative" };
385
+ const _hoisted_2$3 = ["disabled", "placeholder", "value"];
386
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
386
387
  __name: "SearchInput",
387
388
  props: {
388
389
  modelValue: {},
@@ -398,7 +399,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
398
399
  emit("update:modelValue", target.value);
399
400
  };
400
401
  return (_ctx, _cache) => {
401
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
402
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
402
403
  vue.createVNode(vue.unref(vue$1.Icon), {
403
404
  icon: __props.icon,
404
405
  class: "absolute top-1/2 left-3 h-5 w-5 -translate-y-1/2 text-gray-400"
@@ -410,25 +411,25 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
410
411
  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",
411
412
  type: "text",
412
413
  onInput: handleInput
413
- }, null, 40, _hoisted_2$1)
414
+ }, null, 40, _hoisted_2$3)
414
415
  ]);
415
416
  };
416
417
  }
417
418
  });
418
- const _hoisted_1 = ["aria-checked", "disabled"];
419
- const _hoisted_2 = {
419
+ const _hoisted_1$2 = ["aria-checked", "disabled"];
420
+ const _hoisted_2$2 = {
420
421
  key: 0,
421
422
  class: "flex flex-col"
422
423
  };
423
- const _hoisted_3 = {
424
+ const _hoisted_3$2 = {
424
425
  key: 0,
425
426
  class: "text-sm font-medium text-gray-900 dark:text-white"
426
427
  };
427
- const _hoisted_4 = {
428
+ const _hoisted_4$2 = {
428
429
  key: 1,
429
430
  class: "text-sm text-gray-500 dark:text-gray-400"
430
431
  };
431
- const _sfc_main = /* @__PURE__ */ vue.defineComponent({
432
+ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
432
433
  __name: "Switch",
433
434
  props: {
434
435
  modelValue: { type: Boolean, default: false },
@@ -483,20 +484,331 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
483
484
  __props.modelValue ? translateSizes[__props.size] : "translate-x-1"
484
485
  ])
485
486
  }, null, 2)
486
- ], 10, _hoisted_1),
487
- __props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
488
- __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
489
- __props.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true)
487
+ ], 10, _hoisted_1$2),
488
+ __props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$2, [
489
+ __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$2, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
490
+ __props.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$2, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true)
490
491
  ])) : vue.createCommentVNode("", true)
491
492
  ], 2);
492
493
  };
493
494
  }
494
495
  });
495
- exports._sfc_main = _sfc_main$6;
496
- exports._sfc_main$1 = _sfc_main$5;
497
- exports._sfc_main$2 = _sfc_main$4;
498
- exports._sfc_main$3 = _sfc_main$3;
499
- exports._sfc_main$4 = _sfc_main$2;
500
- exports._sfc_main$5 = _sfc_main$1;
501
- exports._sfc_main$6 = _sfc_main;
502
- //# sourceMappingURL=Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs.map
496
+ const _hoisted_1$1 = { class: "w-full" };
497
+ const _hoisted_2$1 = {
498
+ key: 0,
499
+ class: "mb-2 flex justify-between text-sm"
500
+ };
501
+ const _hoisted_3$1 = { class: "text-gray-600 dark:text-gray-400" };
502
+ const _hoisted_4$1 = { class: "font-medium text-gray-900 dark:text-white" };
503
+ const _hoisted_5$1 = { class: "text-gray-600 dark:text-gray-400" };
504
+ const _hoisted_6$1 = { class: "relative" };
505
+ const _hoisted_7$1 = ["value", "min", "max", "step", "disabled"];
506
+ const _hoisted_8$1 = { class: "pointer-events-none absolute inset-y-0 left-0 flex items-center" };
507
+ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
508
+ __name: "Slider",
509
+ props: /* @__PURE__ */ vue.mergeModels({
510
+ min: { default: 0 },
511
+ max: { default: 100 },
512
+ step: { default: 1 },
513
+ disabled: { type: Boolean, default: false },
514
+ showValue: { type: Boolean, default: false },
515
+ formatValue: {}
516
+ }, {
517
+ "modelValue": { default: 0 },
518
+ "modelModifiers": {}
519
+ }),
520
+ emits: ["update:modelValue"],
521
+ setup(__props) {
522
+ const props = __props;
523
+ const modelValue = vue.useModel(__props, "modelValue");
524
+ const percentage = vue.computed(() => {
525
+ return (modelValue.value - props.min) / (props.max - props.min) * 100;
526
+ });
527
+ const displayValue = vue.computed(() => {
528
+ if (props.formatValue) {
529
+ return props.formatValue(modelValue.value);
530
+ }
531
+ return modelValue.value.toString();
532
+ });
533
+ const handleInput = (event) => {
534
+ const target = event.target;
535
+ modelValue.value = Number(target.value);
536
+ };
537
+ return (_ctx, _cache) => {
538
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
539
+ __props.showValue ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [
540
+ vue.createElementVNode("span", _hoisted_3$1, vue.toDisplayString(__props.min), 1),
541
+ vue.createElementVNode("span", _hoisted_4$1, vue.toDisplayString(displayValue.value), 1),
542
+ vue.createElementVNode("span", _hoisted_5$1, vue.toDisplayString(__props.max), 1)
543
+ ])) : vue.createCommentVNode("", true),
544
+ vue.createElementVNode("div", _hoisted_6$1, [
545
+ vue.createElementVNode("input", {
546
+ type: "range",
547
+ value: modelValue.value,
548
+ min: __props.min,
549
+ max: __props.max,
550
+ step: __props.step,
551
+ disabled: __props.disabled,
552
+ class: "slider-input w-full cursor-pointer appearance-none bg-transparent disabled:cursor-not-allowed disabled:opacity-50",
553
+ onInput: handleInput
554
+ }, null, 40, _hoisted_7$1),
555
+ vue.createElementVNode("div", _hoisted_8$1, [
556
+ vue.createElementVNode("div", {
557
+ class: "h-2 rounded-full bg-primary",
558
+ style: vue.normalizeStyle({ width: `${percentage.value}%` })
559
+ }, null, 4)
560
+ ])
561
+ ])
562
+ ]);
563
+ };
564
+ }
565
+ });
566
+ const Slider = /* @__PURE__ */ _pluginVue_exportHelper._export_sfc(_sfc_main$1, [["__scopeId", "data-v-89741e22"]]);
567
+ const _hoisted_1 = { class: "relative" };
568
+ const _hoisted_2 = ["disabled"];
569
+ const _hoisted_3 = { class: "flex-1 truncate" };
570
+ const _hoisted_4 = { class: "flex items-center gap-1" };
571
+ const _hoisted_5 = { class: "mb-4 flex items-center justify-between" };
572
+ const _hoisted_6 = { class: "font-medium text-gray-900 dark:text-white" };
573
+ const _hoisted_7 = { class: "mb-2 grid grid-cols-7 gap-1" };
574
+ const _hoisted_8 = { class: "grid grid-cols-7 gap-1" };
575
+ const _hoisted_9 = ["disabled", "onClick"];
576
+ const _hoisted_10 = { class: "mt-4 border-t border-gray-200 pt-3 dark:border-gray-700" };
577
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
578
+ __name: "DatePicker",
579
+ props: /* @__PURE__ */ vue.mergeModels({
580
+ placeholder: { default: "Select date" },
581
+ format: { default: "short" },
582
+ locale: { default: "en-US" },
583
+ disabled: { type: Boolean, default: false },
584
+ minDate: {},
585
+ maxDate: {},
586
+ teleport: { type: Boolean, default: true }
587
+ }, {
588
+ "modelValue": { default: null },
589
+ "modelModifiers": {}
590
+ }),
591
+ emits: ["update:modelValue"],
592
+ setup(__props) {
593
+ const props = __props;
594
+ const modelValue = vue.useModel(__props, "modelValue");
595
+ const triggerRef = vue.ref();
596
+ const calendarRef = vue.ref();
597
+ const { isOpen, dropdownStyle, toggle, close } = useDropdown.useDropdown(triggerRef, calendarRef, {
598
+ teleport: props.teleport,
599
+ gap: 4
600
+ });
601
+ const currentMonth = vue.ref(modelValue.value ? new Date(modelValue.value) : /* @__PURE__ */ new Date());
602
+ const weekDays = vue.computed(() => {
603
+ const days = [];
604
+ const formatter = new Intl.DateTimeFormat(props.locale, { weekday: "short" });
605
+ for (let i = 0; i < 7; i++) {
606
+ const date = new Date(2024, 0, i);
607
+ days.push(formatter.format(date));
608
+ }
609
+ return days;
610
+ });
611
+ const monthYear = vue.computed(() => {
612
+ const formatter = new Intl.DateTimeFormat(props.locale, { month: "long", year: "numeric" });
613
+ return formatter.format(currentMonth.value);
614
+ });
615
+ const calendarDays = vue.computed(() => {
616
+ const year = currentMonth.value.getFullYear();
617
+ const month = currentMonth.value.getMonth();
618
+ const firstDay = new Date(year, month, 1);
619
+ const lastDay = new Date(year, month + 1, 0);
620
+ const days = [];
621
+ let startDay = firstDay.getDay();
622
+ startDay = startDay === 0 ? 6 : startDay - 1;
623
+ for (let i = startDay - 1; i >= 0; i--) {
624
+ const date = new Date(year, month, -i);
625
+ days.push({
626
+ date,
627
+ isCurrentMonth: false,
628
+ isToday: false,
629
+ isSelected: false,
630
+ isDisabled: isDateDisabled(date)
631
+ });
632
+ }
633
+ const today = /* @__PURE__ */ new Date();
634
+ for (let i = 1; i <= lastDay.getDate(); i++) {
635
+ const date = new Date(year, month, i);
636
+ days.push({
637
+ date,
638
+ isCurrentMonth: true,
639
+ isToday: isSameDay(date, today),
640
+ isSelected: modelValue.value ? isSameDay(date, modelValue.value) : false,
641
+ isDisabled: isDateDisabled(date)
642
+ });
643
+ }
644
+ const remainingDays = 42 - days.length;
645
+ for (let i = 1; i <= remainingDays; i++) {
646
+ const date = new Date(year, month + 1, i);
647
+ days.push({
648
+ date,
649
+ isCurrentMonth: false,
650
+ isToday: false,
651
+ isSelected: false,
652
+ isDisabled: isDateDisabled(date)
653
+ });
654
+ }
655
+ return days;
656
+ });
657
+ const displayValue = vue.computed(() => {
658
+ if (!modelValue.value) return "";
659
+ const formatter = new Intl.DateTimeFormat(props.locale, {
660
+ dateStyle: props.format
661
+ });
662
+ return formatter.format(modelValue.value);
663
+ });
664
+ const isSameDay = (a, b) => {
665
+ return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
666
+ };
667
+ const isDateDisabled = (date) => {
668
+ if (props.minDate && date < props.minDate) return true;
669
+ if (props.maxDate && date > props.maxDate) return true;
670
+ return false;
671
+ };
672
+ const prevMonth = () => {
673
+ currentMonth.value = new Date(currentMonth.value.getFullYear(), currentMonth.value.getMonth() - 1, 1);
674
+ };
675
+ const nextMonth = () => {
676
+ currentMonth.value = new Date(currentMonth.value.getFullYear(), currentMonth.value.getMonth() + 1, 1);
677
+ };
678
+ const selectDate = (day) => {
679
+ if (day.isDisabled) return;
680
+ modelValue.value = day.date;
681
+ close();
682
+ };
683
+ const clear = () => {
684
+ modelValue.value = null;
685
+ };
686
+ return (_ctx, _cache) => {
687
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
688
+ vue.createElementVNode("button", {
689
+ ref_key: "triggerRef",
690
+ ref: triggerRef,
691
+ type: "button",
692
+ disabled: __props.disabled,
693
+ class: vue.normalizeClass([
694
+ "flex w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm text-left transition",
695
+ __props.disabled ? "cursor-not-allowed border-gray-200 bg-gray-50 text-gray-500 dark:border-gray-800 dark:bg-gray-950" : vue.unref(isOpen) ? "border-primary ring-2 ring-primary/20 bg-white dark:bg-gray-900" : "border-gray-300 bg-white hover:border-gray-400 dark:border-gray-700 dark:bg-gray-900",
696
+ modelValue.value ? "text-gray-900 dark:text-white" : "text-gray-400 dark:text-gray-500"
697
+ ]),
698
+ onClick: _cache[0] || (_cache[0] = //@ts-ignore
699
+ (...args) => vue.unref(toggle) && vue.unref(toggle)(...args))
700
+ }, [
701
+ vue.createElementVNode("span", _hoisted_3, vue.toDisplayString(displayValue.value || __props.placeholder), 1),
702
+ vue.createElementVNode("div", _hoisted_4, [
703
+ modelValue.value ? (vue.openBlock(), vue.createElementBlock("button", {
704
+ key: 0,
705
+ type: "button",
706
+ class: "rounded p-0.5 hover:bg-gray-100 dark:hover:bg-gray-800",
707
+ onClick: vue.withModifiers(clear, ["stop"])
708
+ }, [
709
+ vue.createVNode(vue.unref(vue$1.Icon), {
710
+ icon: "lucide:x",
711
+ class: "size-4 text-gray-400"
712
+ })
713
+ ])) : vue.createCommentVNode("", true),
714
+ vue.createVNode(vue.unref(vue$1.Icon), {
715
+ icon: "lucide:calendar",
716
+ class: "size-4 text-gray-400"
717
+ })
718
+ ])
719
+ ], 10, _hoisted_2),
720
+ (vue.openBlock(), vue.createBlock(vue.Teleport, {
721
+ to: "body",
722
+ disabled: !__props.teleport
723
+ }, [
724
+ vue.createVNode(vue.Transition, {
725
+ "enter-active-class": "transition duration-100 ease-out",
726
+ "enter-from-class": "opacity-0 scale-95",
727
+ "enter-to-class": "opacity-100 scale-100",
728
+ "leave-active-class": "transition duration-75 ease-in",
729
+ "leave-from-class": "opacity-100 scale-100",
730
+ "leave-to-class": "opacity-0 scale-95"
731
+ }, {
732
+ default: vue.withCtx(() => [
733
+ vue.unref(isOpen) ? (vue.openBlock(), vue.createElementBlock("div", {
734
+ key: 0,
735
+ ref_key: "calendarRef",
736
+ ref: calendarRef,
737
+ style: vue.normalizeStyle(vue.unref(dropdownStyle)),
738
+ 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"
739
+ }, [
740
+ vue.createElementVNode("div", _hoisted_5, [
741
+ vue.createElementVNode("button", {
742
+ type: "button",
743
+ class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
744
+ onClick: prevMonth
745
+ }, [
746
+ vue.createVNode(vue.unref(vue$1.Icon), {
747
+ icon: "lucide:chevron-left",
748
+ class: "size-5 text-gray-600 dark:text-gray-400"
749
+ })
750
+ ]),
751
+ vue.createElementVNode("span", _hoisted_6, vue.toDisplayString(monthYear.value), 1),
752
+ vue.createElementVNode("button", {
753
+ type: "button",
754
+ class: "rounded p-1 hover:bg-gray-100 dark:hover:bg-gray-700",
755
+ onClick: nextMonth
756
+ }, [
757
+ vue.createVNode(vue.unref(vue$1.Icon), {
758
+ icon: "lucide:chevron-right",
759
+ class: "size-5 text-gray-600 dark:text-gray-400"
760
+ })
761
+ ])
762
+ ]),
763
+ vue.createElementVNode("div", _hoisted_7, [
764
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekDays.value, (day) => {
765
+ return vue.openBlock(), vue.createElementBlock("div", {
766
+ key: day,
767
+ class: "text-center text-xs font-medium text-gray-500 dark:text-gray-400"
768
+ }, vue.toDisplayString(day), 1);
769
+ }), 128))
770
+ ]),
771
+ vue.createElementVNode("div", _hoisted_8, [
772
+ (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(calendarDays.value, (day, index) => {
773
+ return vue.openBlock(), vue.createElementBlock("button", {
774
+ key: index,
775
+ type: "button",
776
+ disabled: day.isDisabled,
777
+ class: vue.normalizeClass([
778
+ "h-8 w-8 rounded text-sm transition",
779
+ day.isDisabled && "cursor-not-allowed opacity-30",
780
+ !day.isCurrentMonth && "text-gray-400 dark:text-gray-600",
781
+ day.isCurrentMonth && !day.isSelected && !day.isToday && "text-gray-900 hover:bg-gray-100 dark:text-white dark:hover:bg-gray-700",
782
+ day.isToday && !day.isSelected && "bg-gray-100 font-semibold text-gray-900 dark:bg-gray-700 dark:text-white",
783
+ day.isSelected && "bg-primary text-white font-semibold"
784
+ ]),
785
+ onClick: ($event) => selectDate(day)
786
+ }, vue.toDisplayString(day.date.getDate()), 11, _hoisted_9);
787
+ }), 128))
788
+ ]),
789
+ vue.createElementVNode("div", _hoisted_10, [
790
+ vue.createElementVNode("button", {
791
+ type: "button",
792
+ class: "w-full rounded py-1.5 text-sm font-medium text-primary hover:bg-primary/10",
793
+ onClick: _cache[1] || (_cache[1] = ($event) => selectDate({ date: /* @__PURE__ */ new Date(), isDisabled: false }))
794
+ }, " Today ")
795
+ ])
796
+ ], 4)) : vue.createCommentVNode("", true)
797
+ ]),
798
+ _: 1
799
+ })
800
+ ], 8, ["disabled"]))
801
+ ]);
802
+ };
803
+ }
804
+ });
805
+ exports.Slider = Slider;
806
+ exports._sfc_main = _sfc_main$8;
807
+ exports._sfc_main$1 = _sfc_main$7;
808
+ exports._sfc_main$2 = _sfc_main$6;
809
+ exports._sfc_main$3 = _sfc_main$5;
810
+ exports._sfc_main$4 = _sfc_main$4;
811
+ exports._sfc_main$5 = _sfc_main$3;
812
+ exports._sfc_main$6 = _sfc_main$2;
813
+ exports._sfc_main$7 = _sfc_main;
814
+ //# sourceMappingURL=DatePicker.vue_vue_type_script_setup_true_lang-qux1VNn0.cjs.map