cisse-vue-ui 0.1.9 → 0.2.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 (46) hide show
  1. package/README.md +162 -8
  2. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js +54 -0
  3. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js.map +1 -0
  4. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs +53 -0
  5. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DIoHDji4.cjs.map +1 -0
  6. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs → CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs} +398 -79
  7. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs.map +1 -0
  8. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js} +406 -87
  9. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-DTGAuLCh.js.map +1 -0
  10. package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-DVkcMcSN.js → Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js} +46 -95
  11. package/dist/Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js.map +1 -0
  12. package/dist/{Checkbox.vue_vue_type_script_setup_true_lang-DQD2I1Wk.cjs → Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs} +46 -95
  13. package/dist/Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs.map +1 -0
  14. package/dist/components/core/MobileList.vue.d.ts +80 -0
  15. package/dist/components/core/ResponsiveList.vue.d.ts +115 -0
  16. package/dist/components/core/TableComponent.vue.d.ts +26 -28
  17. package/dist/components/core/index.cjs +11 -9
  18. package/dist/components/core/index.cjs.map +1 -1
  19. package/dist/components/core/index.d.ts +4 -0
  20. package/dist/components/core/index.js +11 -9
  21. package/dist/components/form/index.cjs +10 -9
  22. package/dist/components/form/index.cjs.map +1 -1
  23. package/dist/components/form/index.js +3 -2
  24. package/dist/components/form/index.js.map +1 -1
  25. package/dist/components/index.cjs +21 -18
  26. package/dist/components/index.cjs.map +1 -1
  27. package/dist/components/index.js +18 -15
  28. package/dist/components/index.js.map +1 -1
  29. package/dist/index-Ck4eaNes.js +51 -0
  30. package/dist/index-Ck4eaNes.js.map +1 -0
  31. package/dist/{index-BW9nN-BL.cjs → index-c27X2k2e.cjs} +22 -19
  32. package/dist/index-c27X2k2e.cjs.map +1 -0
  33. package/dist/index.cjs +22 -19
  34. package/dist/index.cjs.map +1 -1
  35. package/dist/index.js +19 -16
  36. package/dist/index.js.map +1 -1
  37. package/dist/style.css +1 -1
  38. package/dist/types/form.d.ts +2 -0
  39. package/package.json +1 -1
  40. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DQD2I1Wk.cjs.map +0 -1
  41. package/dist/Checkbox.vue_vue_type_script_setup_true_lang-DVkcMcSN.js.map +0 -1
  42. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs.map +0 -1
  43. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-l4KQ8HX8.js.map +0 -1
  44. package/dist/index-BQb_cz3-.js +0 -48
  45. package/dist/index-BQb_cz3-.js.map +0 -1
  46. package/dist/index-BW9nN-BL.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  const vue = require("vue");
3
3
  const vue$1 = require("@iconify/vue");
4
- const _hoisted_1$7 = ["data-error", "for"];
5
- const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
4
+ const _hoisted_1$6 = ["data-error", "for"];
5
+ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
6
6
  __name: "FormLabel",
7
7
  props: {
8
8
  error: { type: [String, Boolean] },
@@ -16,12 +16,12 @@ const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({
16
16
  class: "block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300"
17
17
  }, [
18
18
  vue.renderSlot(_ctx.$slots, "default")
19
- ], 8, _hoisted_1$7);
19
+ ], 8, _hoisted_1$6);
20
20
  };
21
21
  }
22
22
  });
23
- const _hoisted_1$6 = ["data-error"];
24
- const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
23
+ const _hoisted_1$5 = ["data-error"];
24
+ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
25
25
  __name: "FormHelp",
26
26
  props: {
27
27
  error: { type: Boolean },
@@ -36,12 +36,12 @@ const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({
36
36
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
37
37
  vue.createTextVNode(vue.toDisplayString(__props.text ?? ""), 1)
38
38
  ])
39
- ], 8, _hoisted_1$6);
39
+ ], 8, _hoisted_1$5);
40
40
  };
41
41
  }
42
42
  });
43
- const _hoisted_1$5 = ["id", "disabled", "name", "placeholder", "type"];
44
- const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
43
+ const _hoisted_1$4 = ["id", "disabled", "name", "placeholder", "type"];
44
+ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
45
45
  __name: "FormInput",
46
46
  props: /* @__PURE__ */ vue.mergeModels({
47
47
  type: { default: "text" },
@@ -67,16 +67,16 @@ const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
67
67
  placeholder: __props.placeholder,
68
68
  type: __props.type,
69
69
  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"
70
- }, _ctx.$attrs), null, 16, _hoisted_1$5)), [
70
+ }, _ctx.$attrs), null, 16, _hoisted_1$4)), [
71
71
  [vue.vModelDynamic, modelValue.value]
72
72
  ]);
73
73
  };
74
74
  }
75
75
  });
76
- const _hoisted_1$4 = { class: "relative" };
77
- const _hoisted_2$3 = ["id", "disabled"];
78
- const _hoisted_3$2 = { class: "flex-1 truncate" };
79
- const _hoisted_4$2 = {
76
+ const _hoisted_1$3 = { class: "relative" };
77
+ const _hoisted_2$2 = ["id", "disabled"];
78
+ const _hoisted_3$1 = { class: "flex-1 truncate" };
79
+ const _hoisted_4$1 = {
80
80
  key: 0,
81
81
  class: "sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800"
82
82
  };
@@ -92,7 +92,7 @@ const _hoisted_9 = {
92
92
  class: "size-4 shrink-0"
93
93
  };
94
94
  const _hoisted_10 = { class: "flex-1" };
95
- const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
95
+ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
96
96
  __name: "FormSelect",
97
97
  props: /* @__PURE__ */ vue.mergeModels({
98
98
  options: {},
@@ -276,7 +276,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
276
276
  return [base, state, text, props.triggerClass];
277
277
  });
278
278
  return (_ctx, _cache) => {
279
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$4, [
279
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$3, [
280
280
  vue.createElementVNode("button", {
281
281
  ref_key: "triggerRef",
282
282
  ref: triggerRef,
@@ -291,13 +291,13 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
291
291
  option: selectedOption.value,
292
292
  placeholder: __props.placeholder
293
293
  }, () => [
294
- vue.createElementVNode("span", _hoisted_3$2, vue.toDisplayString(displayValue.value), 1)
294
+ vue.createElementVNode("span", _hoisted_3$1, vue.toDisplayString(displayValue.value), 1)
295
295
  ]),
296
296
  vue.createVNode(vue.unref(vue$1.Icon), {
297
297
  icon: "lucide:chevron-down",
298
298
  class: vue.normalizeClass(["size-4 shrink-0 text-gray-400 transition-transform", isOpen.value && "rotate-180"])
299
299
  }, null, 8, ["class"])
300
- ], 42, _hoisted_2$3),
300
+ ], 42, _hoisted_2$2),
301
301
  (vue.openBlock(), vue.createBlock(vue.Teleport, {
302
302
  to: "body",
303
303
  disabled: !__props.teleport
@@ -321,7 +321,7 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
321
321
  !__props.teleport && "absolute mt-1 w-full"
322
322
  ])
323
323
  }, [
324
- __props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$2, [
324
+ __props.searchable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$1, [
325
325
  vue.createElementVNode("div", _hoisted_5, [
326
326
  vue.createVNode(vue.unref(vue$1.Icon), {
327
327
  icon: "lucide:search",
@@ -380,14 +380,15 @@ const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
380
380
  };
381
381
  }
382
382
  });
383
- const _hoisted_1$3 = ["hidden"];
384
- const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
383
+ const _hoisted_1$2 = ["hidden"];
384
+ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
385
385
  __name: "FormGroup",
386
386
  props: /* @__PURE__ */ vue.mergeModels({
387
387
  label: {},
388
388
  cols: { default: 6 },
389
389
  hidden: { type: Boolean },
390
390
  error: { type: [String, Boolean] },
391
+ select: { type: Boolean },
391
392
  type: {},
392
393
  value: {},
393
394
  placeholder: {},
@@ -405,7 +406,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
405
406
  const props = __props;
406
407
  const modelValue = vue.useModel(__props, "modelValue");
407
408
  const computedCols = vue.computed(() => `span ${props.cols} / span ${props.cols}`);
408
- const isSelect = vue.computed(() => props.type === "select");
409
+ const isSelect = vue.computed(() => props.select === true);
409
410
  return (_ctx, _cache) => {
410
411
  return vue.openBlock(), vue.createElementBlock("div", {
411
412
  style: vue.normalizeStyle({ gridColumn: computedCols.value }),
@@ -413,7 +414,7 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
413
414
  }, [
414
415
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
415
416
  vue.renderSlot(_ctx.$slots, "label", {}, () => [
416
- __props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$7, {
417
+ __props.label ? (vue.openBlock(), vue.createBlock(_sfc_main$6, {
417
418
  key: 0,
418
419
  "html-for": __props.id ?? __props.name,
419
420
  error: __props.error
@@ -425,17 +426,17 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
425
426
  }, 8, ["html-for", "error"])) : vue.createCommentVNode("", true)
426
427
  ]),
427
428
  vue.renderSlot(_ctx.$slots, "input", {}, () => [
428
- isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$4, vue.mergeProps({
429
+ isSelect.value ? (vue.openBlock(), vue.createBlock(_sfc_main$3, vue.mergeProps({
429
430
  key: 0,
430
431
  modelValue: modelValue.value,
431
432
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => modelValue.value = $event)
432
- }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_sfc_main$5, vue.mergeProps({
433
+ }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"])) : (vue.openBlock(), vue.createBlock(_sfc_main$4, vue.mergeProps({
433
434
  key: 1,
434
435
  modelValue: modelValue.value,
435
436
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => modelValue.value = $event)
436
437
  }, { ..._ctx.$attrs, ..._ctx.$props }), null, 16, ["modelValue"]))
437
438
  ]),
438
- __props.error && typeof __props.error === "string" ? (vue.openBlock(), vue.createBlock(_sfc_main$6, {
439
+ __props.error && typeof __props.error === "string" ? (vue.openBlock(), vue.createBlock(_sfc_main$5, {
439
440
  key: 0,
440
441
  error: true
441
442
  }, {
@@ -445,13 +446,13 @@ const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({
445
446
  _: 1
446
447
  })) : vue.createCommentVNode("", true)
447
448
  ])
448
- ], 12, _hoisted_1$3);
449
+ ], 12, _hoisted_1$2);
449
450
  };
450
451
  }
451
452
  });
452
- const _hoisted_1$2 = { class: "relative" };
453
- const _hoisted_2$2 = ["disabled", "placeholder", "value"];
454
- const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
453
+ const _hoisted_1$1 = { class: "relative" };
454
+ const _hoisted_2$1 = ["disabled", "placeholder", "value"];
455
+ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
455
456
  __name: "SearchInput",
456
457
  props: {
457
458
  modelValue: {},
@@ -467,7 +468,7 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
467
468
  emit("update:modelValue", target.value);
468
469
  };
469
470
  return (_ctx, _cache) => {
470
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$2, [
471
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$1, [
471
472
  vue.createVNode(vue.unref(vue$1.Icon), {
472
473
  icon: __props.icon,
473
474
  class: "absolute top-1/2 left-3 h-5 w-5 -translate-y-1/2 text-gray-400"
@@ -479,25 +480,25 @@ const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
479
480
  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",
480
481
  type: "text",
481
482
  onInput: handleInput
482
- }, null, 40, _hoisted_2$2)
483
+ }, null, 40, _hoisted_2$1)
483
484
  ]);
484
485
  };
485
486
  }
486
487
  });
487
- const _hoisted_1$1 = ["aria-checked", "disabled"];
488
- const _hoisted_2$1 = {
488
+ const _hoisted_1 = ["aria-checked", "disabled"];
489
+ const _hoisted_2 = {
489
490
  key: 0,
490
491
  class: "flex flex-col"
491
492
  };
492
- const _hoisted_3$1 = {
493
+ const _hoisted_3 = {
493
494
  key: 0,
494
495
  class: "text-sm font-medium text-gray-900 dark:text-white"
495
496
  };
496
- const _hoisted_4$1 = {
497
+ const _hoisted_4 = {
497
498
  key: 1,
498
499
  class: "text-sm text-gray-500 dark:text-gray-400"
499
500
  };
500
- const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
501
+ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
501
502
  __name: "Switch",
502
503
  props: {
503
504
  modelValue: { type: Boolean, default: false },
@@ -552,56 +553,7 @@ const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
552
553
  __props.modelValue ? translateSizes[__props.size] : "translate-x-1"
553
554
  ])
554
555
  }, null, 2)
555
- ], 10, _hoisted_1$1),
556
- __props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$1, [
557
- __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$1, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
558
- __props.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$1, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true)
559
- ])) : vue.createCommentVNode("", true)
560
- ], 2);
561
- };
562
- }
563
- });
564
- const _hoisted_1 = ["checked", "disabled", "indeterminate"];
565
- const _hoisted_2 = {
566
- key: 0,
567
- class: "flex flex-col"
568
- };
569
- const _hoisted_3 = {
570
- key: 0,
571
- class: "text-sm font-medium text-gray-900 dark:text-white"
572
- };
573
- const _hoisted_4 = {
574
- key: 1,
575
- class: "text-sm text-gray-500 dark:text-gray-400"
576
- };
577
- const _sfc_main = /* @__PURE__ */ vue.defineComponent({
578
- __name: "Checkbox",
579
- props: {
580
- modelValue: { type: Boolean, default: false },
581
- label: {},
582
- description: {},
583
- disabled: { type: Boolean },
584
- indeterminate: { type: Boolean }
585
- },
586
- emits: ["update:modelValue"],
587
- setup(__props, { emit: __emit }) {
588
- const emit = __emit;
589
- const toggle = (event) => {
590
- const target = event.target;
591
- emit("update:modelValue", target.checked);
592
- };
593
- return (_ctx, _cache) => {
594
- return vue.openBlock(), vue.createElementBlock("label", {
595
- class: vue.normalizeClass(["inline-flex items-start gap-3", __props.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer"])
596
- }, [
597
- vue.createElementVNode("input", {
598
- type: "checkbox",
599
- checked: __props.modelValue,
600
- disabled: __props.disabled,
601
- indeterminate: __props.indeterminate,
602
- class: "mt-0.5 size-4 rounded border-gray-300 text-primary/90 focus:ring-2 focus:ring-primary focus:ring-offset-2 disabled:cursor-not-allowed dark:border-gray-600 dark:bg-gray-800 dark:focus:ring-offset-gray-900",
603
- onChange: toggle
604
- }, null, 40, _hoisted_1),
556
+ ], 10, _hoisted_1),
605
557
  __props.label || __props.description ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
606
558
  __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3, vue.toDisplayString(__props.label), 1)) : vue.createCommentVNode("", true),
607
559
  __props.description ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString(__props.description), 1)) : vue.createCommentVNode("", true)
@@ -610,12 +562,11 @@ const _sfc_main = /* @__PURE__ */ vue.defineComponent({
610
562
  };
611
563
  }
612
564
  });
613
- exports._sfc_main = _sfc_main$7;
614
- exports._sfc_main$1 = _sfc_main$6;
615
- exports._sfc_main$2 = _sfc_main$5;
616
- exports._sfc_main$3 = _sfc_main$4;
617
- exports._sfc_main$4 = _sfc_main$3;
618
- exports._sfc_main$5 = _sfc_main$2;
619
- exports._sfc_main$6 = _sfc_main$1;
620
- exports._sfc_main$7 = _sfc_main;
621
- //# sourceMappingURL=Checkbox.vue_vue_type_script_setup_true_lang-DQD2I1Wk.cjs.map
565
+ exports._sfc_main = _sfc_main$6;
566
+ exports._sfc_main$1 = _sfc_main$5;
567
+ exports._sfc_main$2 = _sfc_main$4;
568
+ exports._sfc_main$3 = _sfc_main$3;
569
+ exports._sfc_main$4 = _sfc_main$2;
570
+ exports._sfc_main$5 = _sfc_main$1;
571
+ exports._sfc_main$6 = _sfc_main;
572
+ //# sourceMappingURL=Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs","sources":["../src/components/form/FormLabel.vue","../src/components/form/FormHelp.vue","../src/components/form/FormInput.vue","../src/components/form/FormSelect.vue","../src/components/form/FormGroup.vue","../src/components/form/SearchInput.vue","../src/components/form/Switch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\ndefineProps<{\n error?: string | boolean\n htmlFor?: string\n}>()\n</script>\n\n<template>\n <label\n :data-error=\"!!error\"\n :for=\"htmlFor ?? ''\"\n class=\"block text-sm font-medium text-gray-700 data-[error=true]:text-red-500 dark:text-gray-300\"\n >\n <slot />\n </label>\n</template>\n","<script lang=\"ts\" setup>\ndefineProps<{\n error?: boolean\n text?: string\n}>()\n</script>\n\n<template>\n <p\n :data-error=\"error\"\n class=\"mt-2 text-sm text-gray-400 peer-invalid:visible data-[error=true]:text-red-500 dark:text-gray-500\"\n >\n <slot>{{ text ?? '' }}</slot>\n </p>\n</template>\n","<script lang=\"ts\" setup>\nimport type { InputProps } from '@/types'\n\nwithDefaults(defineProps<InputProps>(), {\n type: 'text',\n})\n\nconst modelValue = defineModel<string>()\n</script>\n\n<template>\n <input\n :id=\"id ?? name ?? ''\"\n v-model=\"modelValue\"\n :disabled=\"disabled\"\n :name=\"name ?? ''\"\n :placeholder=\"placeholder\"\n :type=\"type\"\n 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\"\n v-bind=\"$attrs\"\n />\n</template>\n","<script lang=\"ts\" setup>\nimport { computed, ref, watch, nextTick, onUnmounted } from 'vue'\nimport { Icon } from '@iconify/vue'\nimport type { SelectProps, SelectOption } from '@/types'\n\nconst props = withDefaults(\n defineProps<\n SelectProps & {\n /** Use teleport to body to avoid overflow clipping */\n teleport?: boolean\n /** Show search input in dropdown */\n searchable?: boolean\n /** Text shown when no results match search */\n noResultsText?: string\n /** Custom class for the trigger button */\n triggerClass?: string\n }\n >(),\n {\n teleport: true,\n searchable: false,\n noResultsText: 'No results found',\n },\n)\n\nconst modelValue = defineModel<string | number | boolean | null>()\n\nconst isOpen = ref(false)\nconst searchQuery = ref('')\nconst highlightedIndex = ref(-1)\nconst triggerRef = ref<HTMLElement>()\nconst dropdownRef = ref<HTMLElement>()\nconst searchInputRef = ref<HTMLInputElement>()\nconst dropdownPosition = ref({ top: 0, left: 0, width: 0 })\n\nconst visibleOptions = computed(() => {\n return (props.options ?? []).filter((opt) => !opt.hidden)\n})\n\nconst filteredOptions = computed(() => {\n if (!props.searchable || !searchQuery.value) {\n return visibleOptions.value\n }\n const query = searchQuery.value.toLowerCase()\n return visibleOptions.value.filter((opt) =>\n opt.label.toLowerCase().includes(query) ||\n String(opt.value).toLowerCase().includes(query)\n )\n})\n\nconst selectedOption = computed(() => {\n return visibleOptions.value.find((opt) => opt.value === modelValue.value)\n})\n\nconst displayValue = computed(() => {\n if (selectedOption.value) {\n return selectedOption.value.label\n }\n return props.placeholder || 'Select...'\n})\n\nconst updatePosition = () => {\n if (!triggerRef.value || !props.teleport) return\n const rect = triggerRef.value.getBoundingClientRect()\n dropdownPosition.value = {\n top: rect.bottom + window.scrollY + 4,\n left: rect.left + window.scrollX,\n width: rect.width,\n }\n}\n\nconst open = () => {\n if (props.disabled) return\n isOpen.value = true\n searchQuery.value = ''\n highlightedIndex.value = filteredOptions.value.findIndex(\n (opt) => opt.value === modelValue.value\n )\n nextTick(() => {\n updatePosition()\n if (props.searchable) {\n searchInputRef.value?.focus()\n }\n })\n}\n\nconst close = () => {\n isOpen.value = false\n searchQuery.value = ''\n highlightedIndex.value = -1\n}\n\nconst toggle = () => {\n if (isOpen.value) {\n close()\n } else {\n open()\n }\n}\n\nconst selectOption = (option: SelectOption) => {\n modelValue.value = option.value\n close()\n}\n\nconst handleKeydown = (event: KeyboardEvent) => {\n if (!isOpen.value) {\n if (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown') {\n event.preventDefault()\n open()\n }\n return\n }\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n highlightedIndex.value = Math.min(\n highlightedIndex.value + 1,\n filteredOptions.value.length - 1\n )\n scrollToHighlighted()\n break\n case 'ArrowUp':\n event.preventDefault()\n highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0)\n scrollToHighlighted()\n break\n case 'Enter':\n event.preventDefault()\n if (highlightedIndex.value >= 0 && filteredOptions.value[highlightedIndex.value]) {\n selectOption(filteredOptions.value[highlightedIndex.value])\n }\n break\n case 'Escape':\n event.preventDefault()\n close()\n break\n case 'Tab':\n close()\n break\n }\n}\n\nconst scrollToHighlighted = () => {\n nextTick(() => {\n if (dropdownRef.value) {\n const highlighted = dropdownRef.value.querySelector(\n `[data-index=\"${highlightedIndex.value}\"]`\n ) as HTMLElement\n if (highlighted) {\n highlighted.scrollIntoView({ block: 'nearest' })\n }\n }\n })\n}\n\nconst handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node\n const isInsideTrigger = triggerRef.value?.contains(target)\n const isInsideDropdown = dropdownRef.value?.contains(target)\n if (!isInsideTrigger && !isInsideDropdown) {\n close()\n }\n}\n\nwatch(isOpen, (newValue) => {\n if (newValue) {\n document.addEventListener('click', handleClickOutside)\n window.addEventListener('scroll', updatePosition, true)\n window.addEventListener('resize', updatePosition)\n } else {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n }\n})\n\nwatch(searchQuery, () => {\n highlightedIndex.value = 0\n})\n\nonUnmounted(() => {\n document.removeEventListener('click', handleClickOutside)\n window.removeEventListener('scroll', updatePosition, true)\n window.removeEventListener('resize', updatePosition)\n})\n\nconst dropdownStyle = computed(() => {\n if (!props.teleport) return {}\n return {\n position: 'absolute' as const,\n top: `${dropdownPosition.value.top}px`,\n left: `${dropdownPosition.value.left}px`,\n width: `${dropdownPosition.value.width}px`,\n }\n})\n\nconst triggerClasses = computed(() => {\n const base = 'flex w-full items-center justify-between gap-2 rounded-md border px-3 py-2 text-sm text-left transition'\n const state = props.disabled\n ? 'cursor-not-allowed border-gray-200 bg-gray-50 text-gray-500 dark:border-gray-800 dark:bg-gray-950 dark:text-gray-500'\n : isOpen.value\n ? 'border-primary ring-2 ring-primary/20 bg-white dark:bg-gray-900'\n : 'border-gray-300 bg-white hover:border-gray-400 dark:border-gray-700 dark:bg-gray-900 dark:hover:border-gray-600'\n const text = selectedOption.value\n ? 'text-gray-800 dark:text-gray-200'\n : 'text-gray-400 dark:text-gray-500'\n return [base, state, text, props.triggerClass]\n})\n</script>\n\n<template>\n <div class=\"relative\">\n <!-- Trigger -->\n <button\n ref=\"triggerRef\"\n type=\"button\"\n :id=\"id ?? name ?? undefined\"\n :disabled=\"disabled\"\n :class=\"triggerClasses\"\n @click=\"toggle\"\n @keydown=\"handleKeydown\"\n >\n <slot name=\"selected\" :option=\"selectedOption\" :placeholder=\"placeholder\">\n <span class=\"flex-1 truncate\">{{ displayValue }}</span>\n </slot>\n <Icon\n icon=\"lucide:chevron-down\"\n :class=\"['size-4 shrink-0 text-gray-400 transition-transform', isOpen && 'rotate-180']\"\n />\n </button>\n\n <!-- Dropdown -->\n <Teleport to=\"body\" :disabled=\"!teleport\">\n <Transition\n enter-active-class=\"transition duration-100 ease-out\"\n enter-from-class=\"opacity-0 scale-95\"\n enter-to-class=\"opacity-100 scale-100\"\n leave-active-class=\"transition duration-75 ease-in\"\n leave-from-class=\"opacity-100 scale-100\"\n leave-to-class=\"opacity-0 scale-95\"\n >\n <div\n v-if=\"isOpen\"\n ref=\"dropdownRef\"\n :style=\"dropdownStyle\"\n :class=\"[\n 'z-[9999] max-h-60 overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-700 dark:bg-gray-800',\n !teleport && 'absolute mt-1 w-full',\n ]\"\n >\n <!-- Search input -->\n <div v-if=\"searchable\" class=\"sticky top-0 border-b border-gray-200 bg-white p-2 dark:border-gray-700 dark:bg-gray-800\">\n <div 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\">\n <Icon icon=\"lucide:search\" class=\"size-4 text-gray-400\" />\n <input\n ref=\"searchInputRef\"\n v-model=\"searchQuery\"\n type=\"text\"\n class=\"flex-1 bg-transparent text-sm outline-none dark:text-white\"\n placeholder=\"Search...\"\n @keydown=\"handleKeydown\"\n />\n </div>\n </div>\n\n <!-- Empty state -->\n <div\n v-if=\"filteredOptions.length === 0\"\n class=\"px-4 py-3 text-sm text-gray-500 dark:text-gray-400\"\n >\n {{ noResultsText }}\n </div>\n\n <!-- Options -->\n <div class=\"py-1\">\n <button\n v-for=\"(option, index) in filteredOptions\"\n :key=\"String(option.value)\"\n type=\"button\"\n :data-index=\"index\"\n :class=\"[\n 'flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors',\n highlightedIndex === index && 'bg-gray-100 dark:bg-gray-700',\n modelValue === option.value && 'bg-primary/10 text-primary',\n modelValue !== option.value && 'text-gray-700 dark:text-gray-200',\n ]\"\n @click=\"selectOption(option)\"\n @mouseenter=\"highlightedIndex = index\"\n >\n <slot name=\"option\" :option=\"option\" :selected=\"modelValue === option.value\" :index=\"index\">\n <Icon\n v-if=\"modelValue === option.value\"\n icon=\"lucide:check\"\n class=\"size-4 shrink-0 text-primary\"\n />\n <span v-else class=\"size-4 shrink-0\" />\n <span class=\"flex-1\">{{ option.label }}</span>\n </slot>\n </button>\n </div>\n </div>\n </Transition>\n </Teleport>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport type { FormGroupProps } from '@/types'\nimport FormLabel from './FormLabel.vue'\nimport FormInput from './FormInput.vue'\nimport FormSelect from './FormSelect.vue'\nimport FormHelp from './FormHelp.vue'\n\nconst props = withDefaults(defineProps<FormGroupProps>(), {\n cols: 6,\n})\n\nconst modelValue = defineModel()\n\nconst computedCols = computed(() => `span ${props.cols} / span ${props.cols}`)\n\nconst isSelect = computed(() => props.select === true)\n</script>\n\n<template>\n <div :style=\"{ gridColumn: computedCols }\" :hidden=\"hidden\">\n <slot>\n <slot name=\"label\">\n <FormLabel v-if=\"label\" :html-for=\"id ?? name\" :error=\"error\">\n {{ label }}\n </FormLabel>\n </slot>\n\n <slot name=\"input\">\n <FormSelect\n v-if=\"isSelect\"\n v-model=\"modelValue\"\n v-bind=\"{ ...$attrs, ...$props }\"\n />\n <FormInput\n v-else\n v-model=\"modelValue\"\n v-bind=\"{ ...$attrs, ...$props }\"\n />\n </slot>\n\n <FormHelp v-if=\"error && typeof error === 'string'\" :error=\"true\">\n {{ error }}\n </FormHelp>\n </slot>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { Icon } from '@iconify/vue'\n\nconst {\n placeholder = 'Search...',\n icon = 'lucide:search',\n disabled = false,\n} = defineProps<{\n modelValue?: string\n placeholder?: string\n icon?: string\n disabled?: boolean\n}>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: string]\n}>()\n\nconst handleInput = (event: Event) => {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div class=\"relative\">\n <Icon :icon=\"icon\" class=\"absolute top-1/2 left-3 h-5 w-5 -translate-y-1/2 text-gray-400\" />\n <input\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n 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\"\n type=\"text\"\n @input=\"handleInput\"\n />\n </div>\n</template>\n","<script lang=\"ts\" setup>\n\nconst props = withDefaults(\n defineProps<{\n /** v-model value */\n modelValue?: boolean\n /** Label text */\n label?: string\n /** Description text */\n description?: string\n /** Disabled state */\n disabled?: boolean\n /** Size variant */\n size?: 'sm' | 'md' | 'lg'\n }>(),\n {\n modelValue: false,\n size: 'md',\n },\n)\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: boolean]\n}>()\n\nconst toggle = () => {\n if (props.disabled) return\n emit('update:modelValue', !props.modelValue)\n}\n\nconst switchSizes = {\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n}\n\nconst dotSizes = {\n sm: 'size-3',\n md: 'size-4',\n lg: 'size-5',\n}\n\nconst translateSizes = {\n sm: 'translate-x-5',\n md: 'translate-x-6',\n lg: 'translate-x-8',\n}\n</script>\n\n<template>\n <label\n class=\"inline-flex items-start gap-3\"\n :class=\"disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'\"\n >\n <button\n type=\"button\"\n role=\"switch\"\n :aria-checked=\"modelValue\"\n :disabled=\"disabled\"\n :class=\"[\n 'relative inline-flex shrink-0 items-center rounded-full transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2',\n switchSizes[size],\n modelValue ? 'bg-primary' : 'bg-gray-300 dark:bg-gray-600',\n ]\"\n @click=\"toggle\"\n >\n <span\n :class=\"[\n 'inline-block transform rounded-full bg-white shadow-sm transition-transform',\n dotSizes[size],\n modelValue ? translateSizes[size] : 'translate-x-1',\n ]\"\n />\n </button>\n <div v-if=\"label || description\" class=\"flex flex-col\">\n <span v-if=\"label\" class=\"text-sm font-medium text-gray-900 dark:text-white\">\n {{ label }}\n </span>\n <span v-if=\"description\" class=\"text-sm text-gray-500 dark:text-gray-400\">\n {{ description }}\n </span>\n </div>\n </label>\n</template>\n"],"names":["_createElementBlock","_renderSlot","_useModel","_withDirectives","_openBlock","_mergeProps","$attrs","_hoisted_1","ref","computed","nextTick","watch","onUnmounted","_createElementVNode","_hoisted_3","_toDisplayString","_createVNode","_unref","Icon","_createBlock","_Teleport","_Transition","_normalizeClass","_hoisted_4","_Fragment","_renderList","FormLabel","FormSelect","$props","FormInput","FormHelp"],"mappings":";;;;;;;;;;;;8BAQEA,IAAAA,mBAMQ,SAAA;AAAA,QALL,gBAAc,QAAA;AAAA,QACd,KAAK,QAAA,WAAO;AAAA,QACb,OAAM;AAAA,MAAA;QAENC,eAAQ,KAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;8BCLVD,IAAAA,mBAKI,KAAA;AAAA,QAJD,cAAY,QAAA;AAAA,QACb,OAAM;AAAA,MAAA;QAENC,IAAAA,WAA6B,4BAA7B,MAA6B;AAAA,kDAApB,QAAA,QAAI,EAAA,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;ACLjB,UAAM,aAAaC,IAAAA,SAAmB,SAAA,YAAC;;AAIrC,aAAAC,IAAAA,gBAAAC,IAAAA,UAAA,GAAAJ,IAAAA,mBASE,SATFK,IAAAA,WASE;AAAA,QARC,IAAI,QAAA,MAAM,QAAA,QAAI;AAAA,qEACN,WAAU,QAAA;AAAA,QAClB,UAAU,QAAA;AAAA,QACV,MAAM,QAAA,QAAI;AAAA,QACV,aAAa,QAAA;AAAA,QACb,MAAM,QAAA;AAAA,QACP,OAAM;AAAA,MAAA,GACEC,KAAAA,MAAM,GAAA,MAAA,IAAAC,YAAA,IAAA;AAAA,4BANL,WAAA,KAAU;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACRvB,UAAM,QAAQ;AAoBd,UAAM,aAAaL,IAAAA,SAA6C,SAAA,YAAC;AAEjE,UAAM,SAASM,IAAAA,IAAI,KAAK;AACxB,UAAM,cAAcA,IAAAA,IAAI,EAAE;AAC1B,UAAM,mBAAmBA,IAAAA,IAAI,EAAE;AAC/B,UAAM,aAAaA,IAAAA,IAAA;AACnB,UAAM,cAAcA,IAAAA,IAAA;AACpB,UAAM,iBAAiBA,IAAAA,IAAA;AACvB,UAAM,mBAAmBA,QAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG;AAE1D,UAAM,iBAAiBC,IAAAA,SAAS,MAAM;AACpC,cAAQ,MAAM,WAAW,CAAA,GAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,MAAM;AAAA,IAC1D,CAAC;AAED,UAAM,kBAAkBA,IAAAA,SAAS,MAAM;AACrC,UAAI,CAAC,MAAM,cAAc,CAAC,YAAY,OAAO;AAC3C,eAAO,eAAe;AAAA,MACxB;AACA,YAAM,QAAQ,YAAY,MAAM,YAAA;AAChC,aAAO,eAAe,MAAM;AAAA,QAAO,CAAC,QAClC,IAAI,MAAM,YAAA,EAAc,SAAS,KAAK,KACtC,OAAO,IAAI,KAAK,EAAE,YAAA,EAAc,SAAS,KAAK;AAAA,MAAA;AAAA,IAElD,CAAC;AAED,UAAM,iBAAiBA,IAAAA,SAAS,MAAM;AACpC,aAAO,eAAe,MAAM,KAAK,CAAC,QAAQ,IAAI,UAAU,WAAW,KAAK;AAAA,IAC1E,CAAC;AAED,UAAM,eAAeA,IAAAA,SAAS,MAAM;AAClC,UAAI,eAAe,OAAO;AACxB,eAAO,eAAe,MAAM;AAAA,MAC9B;AACA,aAAO,MAAM,eAAe;AAAA,IAC9B,CAAC;AAED,UAAM,iBAAiB,MAAM;AAC3B,UAAI,CAAC,WAAW,SAAS,CAAC,MAAM,SAAU;AAC1C,YAAM,OAAO,WAAW,MAAM,sBAAA;AAC9B,uBAAiB,QAAQ;AAAA,QACvB,KAAK,KAAK,SAAS,OAAO,UAAU;AAAA,QACpC,MAAM,KAAK,OAAO,OAAO;AAAA,QACzB,OAAO,KAAK;AAAA,MAAA;AAAA,IAEhB;AAEA,UAAM,OAAO,MAAM;AACjB,UAAI,MAAM,SAAU;AACpB,aAAO,QAAQ;AACf,kBAAY,QAAQ;AACpB,uBAAiB,QAAQ,gBAAgB,MAAM;AAAA,QAC7C,CAAC,QAAQ,IAAI,UAAU,WAAW;AAAA,MAAA;AAEpCC,UAAAA,SAAS,MAAM;;AACb,uBAAA;AACA,YAAI,MAAM,YAAY;AACpB,+BAAe,UAAf,mBAAsB;AAAA,QACxB;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ,MAAM;AAClB,aAAO,QAAQ;AACf,kBAAY,QAAQ;AACpB,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,UAAM,SAAS,MAAM;AACnB,UAAI,OAAO,OAAO;AAChB,cAAA;AAAA,MACF,OAAO;AACL,aAAA;AAAA,MACF;AAAA,IACF;AAEA,UAAM,eAAe,CAAC,WAAyB;AAC7C,iBAAW,QAAQ,OAAO;AAC1B,YAAA;AAAA,IACF;AAEA,UAAM,gBAAgB,CAAC,UAAyB;AAC9C,UAAI,CAAC,OAAO,OAAO;AACjB,YAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAO,MAAM,QAAQ,aAAa;AAC3E,gBAAM,eAAA;AACN,eAAA;AAAA,QACF;AACA;AAAA,MACF;AAEA,cAAQ,MAAM,KAAA;AAAA,QACZ,KAAK;AACH,gBAAM,eAAA;AACN,2BAAiB,QAAQ,KAAK;AAAA,YAC5B,iBAAiB,QAAQ;AAAA,YACzB,gBAAgB,MAAM,SAAS;AAAA,UAAA;AAEjC,8BAAA;AACA;AAAA,QACF,KAAK;AACH,gBAAM,eAAA;AACN,2BAAiB,QAAQ,KAAK,IAAI,iBAAiB,QAAQ,GAAG,CAAC;AAC/D,8BAAA;AACA;AAAA,QACF,KAAK;AACH,gBAAM,eAAA;AACN,cAAI,iBAAiB,SAAS,KAAK,gBAAgB,MAAM,iBAAiB,KAAK,GAAG;AAChF,yBAAa,gBAAgB,MAAM,iBAAiB,KAAK,CAAC;AAAA,UAC5D;AACA;AAAA,QACF,KAAK;AACH,gBAAM,eAAA;AACN,gBAAA;AACA;AAAA,QACF,KAAK;AACH,gBAAA;AACA;AAAA,MAAA;AAAA,IAEN;AAEA,UAAM,sBAAsB,MAAM;AAChCA,UAAAA,SAAS,MAAM;AACb,YAAI,YAAY,OAAO;AACrB,gBAAM,cAAc,YAAY,MAAM;AAAA,YACpC,gBAAgB,iBAAiB,KAAK;AAAA,UAAA;AAExC,cAAI,aAAa;AACf,wBAAY,eAAe,EAAE,OAAO,UAAA,CAAW;AAAA,UACjD;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,qBAAqB,CAAC,UAAsB;;AAChD,YAAM,SAAS,MAAM;AACrB,YAAM,mBAAkB,gBAAW,UAAX,mBAAkB,SAAS;AACnD,YAAM,oBAAmB,iBAAY,UAAZ,mBAAmB,SAAS;AACrD,UAAI,CAAC,mBAAmB,CAAC,kBAAkB;AACzC,cAAA;AAAA,MACF;AAAA,IACF;AAEAC,cAAM,QAAQ,CAAC,aAAa;AAC1B,UAAI,UAAU;AACZ,iBAAS,iBAAiB,SAAS,kBAAkB;AACrD,eAAO,iBAAiB,UAAU,gBAAgB,IAAI;AACtD,eAAO,iBAAiB,UAAU,cAAc;AAAA,MAClD,OAAO;AACL,iBAAS,oBAAoB,SAAS,kBAAkB;AACxD,eAAO,oBAAoB,UAAU,gBAAgB,IAAI;AACzD,eAAO,oBAAoB,UAAU,cAAc;AAAA,MACrD;AAAA,IACF,CAAC;AAEDA,QAAAA,MAAM,aAAa,MAAM;AACvB,uBAAiB,QAAQ;AAAA,IAC3B,CAAC;AAEDC,QAAAA,YAAY,MAAM;AAChB,eAAS,oBAAoB,SAAS,kBAAkB;AACxD,aAAO,oBAAoB,UAAU,gBAAgB,IAAI;AACzD,aAAO,oBAAoB,UAAU,cAAc;AAAA,IACrD,CAAC;AAED,UAAM,gBAAgBH,IAAAA,SAAS,MAAM;AACnC,UAAI,CAAC,MAAM,SAAU,QAAO,CAAA;AAC5B,aAAO;AAAA,QACL,UAAU;AAAA,QACV,KAAK,GAAG,iBAAiB,MAAM,GAAG;AAAA,QAClC,MAAM,GAAG,iBAAiB,MAAM,IAAI;AAAA,QACpC,OAAO,GAAG,iBAAiB,MAAM,KAAK;AAAA,MAAA;AAAA,IAE1C,CAAC;AAED,UAAM,iBAAiBA,IAAAA,SAAS,MAAM;AACpC,YAAM,OAAO;AACb,YAAM,QAAQ,MAAM,WAChB,yHACA,OAAO,QACL,oEACA;AACN,YAAM,OAAO,eAAe,QACxB,qCACA;AACJ,aAAO,CAAC,MAAM,OAAO,MAAM,MAAM,YAAY;AAAA,IAC/C,CAAC;;AAIC,aAAAL,cAAA,GAAAJ,uBA4FM,OA5FNO,cA4FM;AAAA,QA1FJM,IAAAA,mBAgBS,UAAA;AAAA,mBAfH;AAAA,UAAJ,KAAI;AAAA,UACJ,MAAK;AAAA,UACJ,IAAI,QAAA,MAAM,QAAA,QAAQ;AAAA,UAClB,UAAU,QAAA;AAAA,UACV,0BAAO,eAAA,KAAc;AAAA,UACrB,SAAO;AAAA,UACP,WAAS;AAAA,QAAA;UAEVZ,eAEO,KAAA,QAAA,YAAA;AAAA,YAFgB,QAAQ,eAAA;AAAA,YAAiB,aAAa,QAAA;AAAA,UAAA,GAA7D,MAEO;AAAA,YADLY,IAAAA,mBAAuD,QAAvDC,cAAuDC,IAAAA,gBAAtB,aAAA,KAAY,GAAA,CAAA;AAAA,UAAA;UAE/CC,gBAGEC,IAAAA,MAAAC,MAAAA,IAAA,GAAA;AAAA,YAFA,MAAK;AAAA,YACJ,iFAA8D,OAAA,SAAM,YAAA,CAAA;AAAA,UAAA;;0BAKzEC,IAAAA,YAsEWC,cAAA;AAAA,UAtED,IAAG;AAAA,UAAQ,WAAW,QAAA;AAAA,QAAA;UAC9BJ,IAAAA,YAoEaK,IAAAA,YAAA;AAAA,YAnEX,sBAAmB;AAAA,YACnB,oBAAiB;AAAA,YACjB,kBAAe;AAAA,YACf,sBAAmB;AAAA,YACnB,oBAAiB;AAAA,YACjB,kBAAe;AAAA,UAAA;iCAEf,MA2DM;AAAA,cA1DE,OAAA,0BADRrB,IAAAA,mBA2DM,OAAA;AAAA;yBAzDA;AAAA,gBAAJ,KAAI;AAAA,gBACH,0BAAO,cAAA,KAAa;AAAA,gBACpB,OAAKsB,IAAAA,eAAA;AAAA;mBAA2J,QAAA,YAAQ;AAAA,gBAAA;;gBAM9J,QAAA,cAAXlB,IAAAA,UAAA,GAAAJ,IAAAA,mBAYM,OAZNuB,cAYM;AAAA,kBAXJV,IAAAA,mBAUM,OAVN,YAUM;AAAA,oBATJG,gBAA0DC,IAAAA,MAAAC,MAAAA,IAAA,GAAA;AAAA,sBAApD,MAAK;AAAA,sBAAgB,OAAM;AAAA,oBAAA;uCACjCL,IAAAA,mBAOE,SAAA;AAAA,+BANI;AAAA,sBAAJ,KAAI;AAAA,mFACK,YAAW,QAAA;AAAA,sBACpB,MAAK;AAAA,sBACL,OAAM;AAAA,sBACN,aAAY;AAAA,sBACX,WAAS;AAAA,oBAAA;uCAJD,YAAA,KAAW;AAAA,oBAAA;;;gBAWlB,gBAAA,MAAgB,WAAM,sBAD9Bb,IAAAA,mBAKM,OALN,YAKMe,IAAAA,gBADD,QAAA,aAAa,GAAA,CAAA;gBAIlBF,IAAAA,mBAyBM,OAzBN,YAyBM;AAAA,mBAxBJT,IAAAA,UAAA,IAAA,GAAAJ,IAAAA,mBAuBSwB,cAAA,MAAAC,IAAAA,WAtBmB,gBAAA,OAAe,CAAjC,QAAQ,UAAK;4CADvBzB,IAAAA,mBAuBS,UAAA;AAAA,sBArBN,KAAK,OAAO,OAAO,KAAK;AAAA,sBACzB,MAAK;AAAA,sBACJ,cAAY;AAAA,sBACZ,OAAKsB,IAAAA,eAAA;AAAA;wBAAoH,iBAAA,UAAqB,SAAK;AAAA,wBAAoD,WAAA,UAAe,OAAO,SAAK;AAAA,wBAAkD,WAAA,UAAe,OAAO,SAAK;AAAA,sBAAA;sBAM/S,SAAK,CAAA,WAAE,aAAa,MAAM;AAAA,sBAC1B,cAAU,CAAA,WAAE,iBAAA,QAAmB;AAAA,oBAAA;sBAEhCrB,eAQO,KAAA,QAAA,UAAA;AAAA,wBARc;AAAA,wBAAiB,UAAU,WAAA,UAAe,OAAO;AAAA,wBAAQ;AAAA,sBAAA,GAA9E,MAQO;AAAA,wBANG,WAAA,UAAe,OAAO,0BAD9BkB,IAAAA,YAIEF,UAAAC,MAAAA,IAAA,GAAA;AAAA;0BAFA,MAAK;AAAA,0BACL,OAAM;AAAA,wBAAA,OAERd,IAAAA,UAAA,GAAAJ,IAAAA,mBAAuC,QAAvC,UAAuC;AAAA,wBACvCa,IAAAA,mBAA8C,QAA9C,aAA8CE,IAAAA,gBAAtB,OAAO,KAAK,GAAA,CAAA;AAAA,sBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AClSpD,UAAM,QAAQ;AAId,UAAM,aAAab,IAAAA,SAAW,SAAA,YAAC;AAE/B,UAAM,eAAeO,IAAAA,SAAS,MAAM,QAAQ,MAAM,IAAI,WAAW,MAAM,IAAI,EAAE;AAE7E,UAAM,WAAWA,IAAAA,SAAS,MAAM,MAAM,WAAW,IAAI;;8BAInDT,IAAAA,mBAyBM,OAAA;AAAA,QAzBA,wCAAqB,aAAA,OAAY;AAAA,QAAK,QAAQ,QAAA;AAAA,MAAA;QAClDC,IAAAA,WAuBO,4BAvBP,MAuBO;AAAA,UAtBLA,IAAAA,WAIO,0BAJP,MAIO;AAAA,YAHY,QAAA,0BAAjBkB,IAAAA,YAEYO,aAAA;AAAA;cAFa,YAAU,QAAA,MAAM,QAAA;AAAA,cAAO,OAAO,QAAA;AAAA,YAAA;mCACrD,MAAW;AAAA,wDAAR,QAAA,KAAK,GAAA,CAAA;AAAA,cAAA;;;;UAIZzB,IAAAA,WAWO,0BAXP,MAWO;AAAA,YATG,SAAA,SADRG,IAAAA,UAAA,GAAAe,IAAAA,YAIEQ,aAJFtB,IAAAA,WAIE;AAAA;0BAFS,WAAA;AAAA,2EAAA,WAAU,QAAA;AAAA,YAAA,GACNC,EAAAA,GAAAA,KAAAA,WAAWsB,KAAAA,QAAM,GAAA,MAAA,IAAA,CAAA,YAAA,CAAA,MAEhCxB,IAAAA,aAAAe,IAAAA,YAIEU,aAJFxB,eAIE;AAAA;0BAFS,WAAA;AAAA,2EAAA,WAAU,QAAA;AAAA,YAAA,GACNC,EAAAA,GAAAA,KAAAA,WAAWsB,KAAAA,OAAAA,CAAM,GAAA,MAAA,IAAA,CAAA,YAAA,CAAA;AAAA,UAAA;UAIlB,QAAA,gBAAgB,QAAA,UAAK,6BAArCT,IAAAA,YAEWW,aAAA;AAAA;YAF0C,OAAO;AAAA,UAAA;iCAC1D,MAAW;AAAA,sDAAR,QAAA,KAAK,GAAA,CAAA;AAAA,YAAA;;;;;;;;;;;;;;;;;;;;AC5BhB,UAAM,OAAO;AAIb,UAAM,cAAc,CAAC,UAAiB;AACpC,YAAM,SAAS,MAAM;AACrB,WAAK,qBAAqB,OAAO,KAAK;AAAA,IACxC;;AAIE,aAAA1B,cAAA,GAAAJ,uBAUM,OAVNO,cAUM;AAAA,QATJS,gBAA4FC,IAAAA,MAAAC,MAAAA,IAAA,GAAA;AAAA,UAArF,MAAM,QAAA;AAAA,UAAM,OAAM;AAAA,QAAA;QACzBL,IAAAA,mBAOE,SAAA;AAAA,UANC,UAAU,QAAA;AAAA,UACV,aAAa,QAAA;AAAA,UACb,OAAO,QAAA;AAAA,UACR,OAAM;AAAA,UACN,MAAK;AAAA,UACJ,SAAO;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC/Bd,UAAM,QAAQ;AAmBd,UAAM,OAAO;AAIb,UAAM,SAAS,MAAM;AACnB,UAAI,MAAM,SAAU;AACpB,WAAK,qBAAqB,CAAC,MAAM,UAAU;AAAA,IAC7C;AAEA,UAAM,cAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAGN,UAAM,WAAW;AAAA,MACf,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAGN,UAAM,iBAAiB;AAAA,MACrB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;;8BAKJb,IAAAA,mBAgCQ,SAAA;AAAA,QA/BN,OAAKsB,IAAAA,eAAA,CAAC,iCACE,QAAA,WAAQ,kCAAA,gBAAA,CAAA;AAAA,MAAA;QAEhBT,IAAAA,mBAmBS,UAAA;AAAA,UAlBP,MAAK;AAAA,UACL,MAAK;AAAA,UACJ,gBAAc,QAAA;AAAA,UACd,UAAU,QAAA;AAAA,UACV,OAAKS,IAAAA,eAAA;AAAA;YAAwK,YAAY,QAAA,IAAI;AAAA,YAAW,QAAA,aAAU,eAAA;AAAA,UAAA;UAKlN,SAAO;AAAA,QAAA;UAERT,IAAAA,mBAME,QAAA;AAAA,YALC,OAAKS,IAAAA,eAAA;AAAA;cAAuG,SAAS,QAAA,IAAI;AAAA,cAAa,QAAA,aAAa,eAAe,QAAA,IAAI,IAAA;AAAA,YAAA;;;QAOhK,QAAA,SAAS,QAAA,eAApBlB,IAAAA,aAAAJ,IAAAA,mBAOM,OAPN,YAOM;AAAA,UANQ,QAAA,0BAAZA,IAAAA,mBAEO,QAFP,YAEOe,IAAAA,gBADF,QAAA,KAAK,GAAA,CAAA;UAEE,QAAA,gCAAZf,IAAAA,mBAEO,QAFP,YAEOe,IAAAA,gBADF,QAAA,WAAW,GAAA,CAAA;;;;;;;;;;;;;"}
@@ -0,0 +1,80 @@
1
+ export interface MobileListColumn {
2
+ key: string;
3
+ label: string;
4
+ /** Hide this column on mobile */
5
+ hideOnMobile?: boolean;
6
+ /** Mark as primary info (shown prominently) */
7
+ primary?: boolean;
8
+ /** Mark as secondary info */
9
+ secondary?: boolean;
10
+ }
11
+ type ItemType = {
12
+ id: number | string;
13
+ [key: string]: unknown;
14
+ };
15
+ type __VLS_Props = {
16
+ /** Array of items to display */
17
+ items: ItemType[];
18
+ /** Key field for unique identification */
19
+ keyField?: string;
20
+ /** Enable selection mode */
21
+ selectable?: boolean;
22
+ /** Set of selected item keys */
23
+ selectedItems?: Set<string>;
24
+ /** Filter function to determine if an item is selectable */
25
+ selectableFilter?: (item: ItemType) => boolean;
26
+ };
27
+ declare function __VLS_template(): {
28
+ attrs: Partial<{}>;
29
+ slots: Readonly<{
30
+ /** Avatar/icon slot for each item */
31
+ avatar?: (props: {
32
+ item: ItemType;
33
+ }) => unknown;
34
+ /** Main content area for each item */
35
+ content?: (props: {
36
+ item: ItemType;
37
+ }) => unknown;
38
+ /** Actions slot (right side) for each item */
39
+ actions?: (props: {
40
+ item: ItemType;
41
+ }) => unknown;
42
+ /** Empty state slot */
43
+ empty?: () => unknown;
44
+ }> & {
45
+ /** Avatar/icon slot for each item */
46
+ avatar?: (props: {
47
+ item: ItemType;
48
+ }) => unknown;
49
+ /** Main content area for each item */
50
+ content?: (props: {
51
+ item: ItemType;
52
+ }) => unknown;
53
+ /** Actions slot (right side) for each item */
54
+ actions?: (props: {
55
+ item: ItemType;
56
+ }) => unknown;
57
+ /** Empty state slot */
58
+ empty?: () => unknown;
59
+ };
60
+ refs: {};
61
+ rootEl: HTMLDivElement;
62
+ };
63
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
64
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
65
+ select: (id: string) => any;
66
+ selectAll: () => any;
67
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
68
+ onSelect?: ((id: string) => any) | undefined;
69
+ onSelectAll?: (() => any) | undefined;
70
+ }>, {
71
+ selectable: boolean;
72
+ keyField: string;
73
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
74
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
75
+ export default _default;
76
+ type __VLS_WithTemplateSlots<T, S> = T & {
77
+ new (): {
78
+ $slots: S;
79
+ };
80
+ };
@@ -0,0 +1,115 @@
1
+ export interface ResponsiveListColumn {
2
+ /** Column key - corresponds to the data field name (alias for 'name' for backward compatibility) */
3
+ key?: string;
4
+ /** Column name - corresponds to the data field name */
5
+ name?: string;
6
+ /** Display label for the column header */
7
+ label?: string;
8
+ /** Column type for automatic rendering */
9
+ type?: 'text' | 'number' | 'date' | 'badge' | 'boolean' | string;
10
+ /** Text alignment in the column */
11
+ align?: 'left' | 'center' | 'right';
12
+ /** Header CSS class */
13
+ headerClass?: string;
14
+ /** Cell CSS class */
15
+ className?: string;
16
+ /** Whether the column is sortable */
17
+ sortable?: boolean;
18
+ /** Whether to hide the column */
19
+ hidden?: boolean;
20
+ /** Whether the column is the main/primary column */
21
+ main?: boolean;
22
+ /** Hide this column on mobile view */
23
+ hideOnMobile?: boolean;
24
+ }
25
+ type ItemType = {
26
+ id: number | string;
27
+ [key: string]: unknown;
28
+ };
29
+ type __VLS_Props = {
30
+ /** Array of items to display */
31
+ items: ItemType[];
32
+ /** Column definitions (extends Property with mobile options) */
33
+ columns: ResponsiveListColumn[];
34
+ /** Key field for unique identification */
35
+ keyField?: string;
36
+ /** Enable selection mode */
37
+ selectable?: boolean;
38
+ /** Set of selected item keys */
39
+ selectedItems?: Set<string>;
40
+ /** Filter function to determine if an item is selectable */
41
+ selectableFilter?: (item: ItemType) => boolean;
42
+ /** Breakpoint for switching between mobile and desktop views (default: 'lg' = 1024px) */
43
+ breakpoint?: 'sm' | 'md' | 'lg' | 'xl' | '2xl';
44
+ };
45
+ declare function __VLS_template(): {
46
+ attrs: Partial<{}>;
47
+ slots: Readonly<{
48
+ [key: `cell-${string}`]: (props: {
49
+ item: ItemType;
50
+ value: unknown;
51
+ }) => unknown;
52
+ /** Avatar/icon slot for mobile view */
53
+ avatar?: (props: {
54
+ item: ItemType;
55
+ }) => unknown;
56
+ /** Main content for mobile view */
57
+ mobileContent?: (props: {
58
+ item: ItemType;
59
+ }) => unknown;
60
+ /** Actions for mobile view */
61
+ mobileActions?: (props: {
62
+ item: ItemType;
63
+ }) => unknown;
64
+ /** Actions column for table view, also used as fallback for mobile */
65
+ actions?: (props: {
66
+ item: ItemType;
67
+ }) => unknown;
68
+ /** Empty state slot */
69
+ empty?: () => unknown;
70
+ }> & {
71
+ [key: `cell-${string}`]: (props: {
72
+ item: ItemType;
73
+ value: unknown;
74
+ }) => unknown;
75
+ /** Avatar/icon slot for mobile view */
76
+ avatar?: (props: {
77
+ item: ItemType;
78
+ }) => unknown;
79
+ /** Main content for mobile view */
80
+ mobileContent?: (props: {
81
+ item: ItemType;
82
+ }) => unknown;
83
+ /** Actions for mobile view */
84
+ mobileActions?: (props: {
85
+ item: ItemType;
86
+ }) => unknown;
87
+ /** Actions column for table view, also used as fallback for mobile */
88
+ actions?: (props: {
89
+ item: ItemType;
90
+ }) => unknown;
91
+ /** Empty state slot */
92
+ empty?: () => unknown;
93
+ };
94
+ refs: {};
95
+ rootEl: HTMLDivElement;
96
+ };
97
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
98
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
99
+ select: (id: string) => any;
100
+ selectAll: () => any;
101
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
102
+ onSelect?: ((id: string) => any) | undefined;
103
+ onSelectAll?: (() => any) | undefined;
104
+ }>, {
105
+ selectable: boolean;
106
+ keyField: string;
107
+ breakpoint: "sm" | "md" | "lg" | "xl" | "2xl";
108
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
109
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
110
+ export default _default;
111
+ type __VLS_WithTemplateSlots<T, S> = T & {
112
+ new (): {
113
+ $slots: S;
114
+ };
115
+ };
@@ -1,36 +1,34 @@
1
1
  import { Property } from '../../types';
2
+ type ItemType = {
3
+ id: number | string;
4
+ [key: string]: unknown;
5
+ };
2
6
  type __VLS_Props = {
7
+ /** Column definitions */
3
8
  properties: Property[];
4
- items: {
5
- id: number | string;
6
- [key: string]: unknown;
7
- }[];
8
- };
9
- declare function __VLS_template(): {
10
- attrs: Partial<{}>;
11
- slots: Partial<Record<string, (_: {
12
- property: Property;
13
- }) => any>> & Partial<Record<string, (_: {
14
- item: {
15
- [key: string]: unknown;
16
- id: number | string;
17
- };
18
- property: Property;
19
- value: unknown;
20
- }) => any>> & {
21
- action?(_: {
22
- item: {
23
- [key: string]: unknown;
24
- id: number | string;
25
- };
26
- }): any;
27
- empty?(_: {}): any;
28
- };
29
- refs: {};
30
- rootEl: any;
9
+ /** Array of items to display */
10
+ items: ItemType[];
11
+ /** Enable selection mode */
12
+ selectable?: boolean;
13
+ /** Set of selected item keys */
14
+ selectedItems?: Set<string>;
15
+ /** Filter function to determine if an item is selectable */
16
+ selectableFilter?: (item: ItemType) => boolean;
17
+ /** Key field for unique identification (default: 'id') */
18
+ keyField?: string;
31
19
  };
20
+ declare function __VLS_template(): any;
32
21
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
33
- declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
22
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
23
+ select: (id: string) => any;
24
+ selectAll: () => any;
25
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
26
+ onSelect?: ((id: string) => any) | undefined;
27
+ onSelectAll?: (() => any) | undefined;
28
+ }>, {
29
+ selectable: boolean;
30
+ keyField: string;
31
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
34
32
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
35
33
  export default _default;
36
34
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -1,18 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../../CollapsibleCard.vue_vue_type_script_setup_true_lang-Bd6TPEpH.cjs");
3
+ const CollapsibleCard_vue_vue_type_script_setup_true_lang = require("../../CollapsibleCard.vue_vue_type_script_setup_true_lang-Cs6KGC-0.cjs");
4
4
  const Dropdown_vue_vue_type_script_setup_true_lang = require("../../Dropdown.vue_vue_type_script_setup_true_lang-H6wsySqi.cjs");
5
5
  const BadgeType_vue_vue_type_script_setup_true_lang = require("../../BadgeType.vue_vue_type_script_setup_true_lang-CJb63H1I.cjs");
6
- exports.AutocompleteComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$2;
7
- exports.Avatar = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$5;
8
- exports.Button = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$4;
6
+ exports.AutocompleteComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$4;
7
+ exports.Avatar = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$7;
8
+ exports.Button = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$6;
9
9
  exports.CardComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main;
10
- exports.CollapsibleCard = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$9;
11
- exports.Stepper = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$8;
12
- exports.TabPanel = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$7;
13
- exports.TableAction = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$3;
10
+ exports.CollapsibleCard = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$11;
11
+ exports.MobileList = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$2;
12
+ exports.ResponsiveList = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$3;
13
+ exports.Stepper = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$10;
14
+ exports.TabPanel = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$9;
15
+ exports.TableAction = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$5;
14
16
  exports.TableComponent = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$1;
15
- exports.Tabs = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$6;
17
+ exports.Tabs = CollapsibleCard_vue_vue_type_script_setup_true_lang._sfc_main$8;
16
18
  exports.Dropdown = Dropdown_vue_vue_type_script_setup_true_lang._sfc_main$1;
17
19
  exports.MenuItem = Dropdown_vue_vue_type_script_setup_true_lang._sfc_main;
18
20
  exports.StatusBadge = BadgeType_vue_vue_type_script_setup_true_lang._sfc_main;