cisse-vue-ui 0.2.4 → 0.2.6

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 (60) hide show
  1. package/README.md +67 -1
  2. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Do0H2ZOe.cjs → CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs} +67 -125
  3. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-CPV2dtkO.cjs.map +1 -0
  4. package/dist/{CollapsibleCard.vue_vue_type_script_setup_true_lang-Cymj-zkh.js → CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js} +68 -126
  5. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js.map +1 -0
  6. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-D65uMijW.js → Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js} +26 -74
  7. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-B9DsCY8M.js.map +1 -0
  8. package/dist/{Dropdown.vue_vue_type_script_setup_true_lang-H6wsySqi.cjs → Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs} +25 -73
  9. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-nMP2OxXp.cjs.map +1 -0
  10. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-DoawksKc.cjs → PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs} +2 -2
  11. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-DoawksKc.cjs.map → PageLayout.vue_vue_type_script_setup_true_lang-Bnw5L-xO.cjs.map} +1 -1
  12. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-J1I-WjM-.js → PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js} +2 -2
  13. package/dist/{PageLayout.vue_vue_type_script_setup_true_lang-J1I-WjM-.js.map → PageLayout.vue_vue_type_script_setup_true_lang-D8uD3-Fe.js.map} +1 -1
  14. package/dist/{Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js → Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js} +33 -103
  15. package/dist/Switch.vue_vue_type_script_setup_true_lang-dRPxDu8I.js.map +1 -0
  16. package/dist/{Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs → Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs} +32 -102
  17. package/dist/Switch.vue_vue_type_script_setup_true_lang-wRTWorCd.cjs.map +1 -0
  18. package/dist/components/core/Dropdown.vue.d.ts +2 -4
  19. package/dist/components/core/index.cjs +2 -2
  20. package/dist/components/core/index.js +2 -2
  21. package/dist/components/form/index.cjs +1 -1
  22. package/dist/components/form/index.js +1 -1
  23. package/dist/components/index.cjs +4 -4
  24. package/dist/components/index.js +4 -4
  25. package/dist/components/layout/index.cjs +1 -1
  26. package/dist/components/layout/index.js +1 -1
  27. package/dist/composables/index.cjs +8 -4
  28. package/dist/composables/index.cjs.map +1 -1
  29. package/dist/composables/index.d.ts +2 -0
  30. package/dist/composables/index.js +5 -1
  31. package/dist/composables/index.js.map +1 -1
  32. package/dist/composables/useDropdown.d.ts +51 -0
  33. package/dist/composables/useModal.d.ts +60 -0
  34. package/dist/{index-D_7WQIhA.cjs → index-C-qIi_nO.cjs} +5 -5
  35. package/dist/index-C-qIi_nO.cjs.map +1 -0
  36. package/dist/{index-CNQJxtkC.js → index-DUVvDjHF.js} +5 -5
  37. package/dist/index-DUVvDjHF.js.map +1 -0
  38. package/dist/index.cjs +13 -9
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.js +10 -6
  41. package/dist/index.js.map +1 -1
  42. package/dist/useDropdown-DHFnd259.cjs +130 -0
  43. package/dist/useDropdown-DHFnd259.cjs.map +1 -0
  44. package/dist/useDropdown-iVu14E6s.js +131 -0
  45. package/dist/useDropdown-iVu14E6s.js.map +1 -0
  46. package/dist/{useExportCSV-B9o9lJ3D.js → useModal-Aq8hn152.js} +40 -1
  47. package/dist/useModal-Aq8hn152.js.map +1 -0
  48. package/dist/{useExportCSV-BPC_hd25.cjs → useModal-DDF_ZS8C.cjs} +40 -1
  49. package/dist/useModal-DDF_ZS8C.cjs.map +1 -0
  50. package/package.json +1 -1
  51. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Cymj-zkh.js.map +0 -1
  52. package/dist/CollapsibleCard.vue_vue_type_script_setup_true_lang-Do0H2ZOe.cjs.map +0 -1
  53. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-D65uMijW.js.map +0 -1
  54. package/dist/Dropdown.vue_vue_type_script_setup_true_lang-H6wsySqi.cjs.map +0 -1
  55. package/dist/Switch.vue_vue_type_script_setup_true_lang-C2_5u-HL.js.map +0 -1
  56. package/dist/Switch.vue_vue_type_script_setup_true_lang-V-FtNcTd.cjs.map +0 -1
  57. package/dist/index-CNQJxtkC.js.map +0 -1
  58. package/dist/index-D_7WQIhA.cjs.map +0 -1
  59. package/dist/useExportCSV-B9o9lJ3D.js.map +0 -1
  60. package/dist/useExportCSV-BPC_hd25.cjs.map +0 -1
@@ -1,7 +1,8 @@
1
- import { defineComponent, createElementBlock, openBlock, createCommentVNode, renderSlot, createElementVNode, createTextVNode, toDisplayString, useSlots, computed, createVNode, Fragment, renderList, normalizeClass, createBlock, resolveDynamicComponent, onMounted, nextTick, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, watch, shallowRef, toValue, watchEffect, unref, withCtx, createSlots, ref, onUnmounted, withDirectives, vModelText, withModifiers, Teleport, Transition, normalizeStyle, resolveComponent, mergeProps, provide, vShow } from "vue";
1
+ import { defineComponent, createElementBlock, openBlock, createCommentVNode, renderSlot, createElementVNode, createTextVNode, toDisplayString, useSlots, computed, createVNode, Fragment, renderList, normalizeClass, createBlock, resolveDynamicComponent, withCtx, onMounted, nextTick, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, watch, shallowRef, toValue, watchEffect, unref, createSlots, ref, withDirectives, vModelText, withModifiers, Teleport, Transition, normalizeStyle, resolveComponent, mergeProps, provide, vShow } from "vue";
2
2
  import { _ as _sfc_main$c } from "./Checkbox.vue_vue_type_script_setup_true_lang-B-nLCCNY.js";
3
3
  import { e as _sfc_main$d, d as _sfc_main$e, c as _sfc_main$f, b as _sfc_main$g, a as _sfc_main$h } from "./BadgeType.vue_vue_type_script_setup_true_lang-CnB5eNEM.js";
4
4
  import { Icon } from "@iconify/vue";
5
+ import { u as useDropdown } from "./useDropdown-iVu14E6s.js";
5
6
  const _hoisted_1$8 = { class: "flex flex-col overflow-hidden rounded-lg bg-white shadow-md dark:bg-slate-950" };
6
7
  const _hoisted_2$6 = {
7
8
  key: 0,
@@ -235,10 +236,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
235
236
  }
236
237
  });
237
238
  const _hoisted_1$6 = { class: "space-y-3" };
238
- const _hoisted_2$4 = {
239
- key: 0,
240
- class: "flex items-center gap-3 p-3 bg-white dark:bg-slate-950 rounded-lg shadow-md"
241
- };
239
+ const _hoisted_2$4 = { class: "flex items-center gap-3 p-3" };
242
240
  const _hoisted_3$2 = { class: "text-sm text-gray-600 dark:text-gray-400" };
243
241
  const _hoisted_4$1 = {
244
242
  key: 0,
@@ -304,39 +302,47 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
304
302
  const hasEmptySlot = computed(() => !!slots.empty);
305
303
  return (_ctx, _cache) => {
306
304
  return openBlock(), createElementBlock("div", _hoisted_1$6, [
307
- __props.selectable && selectableItems.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$4, [
308
- createVNode(_sfc_main$c, {
309
- "model-value": allSelected.value,
310
- indeterminate: someSelected.value,
311
- "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
312
- }, null, 8, ["model-value", "indeterminate"]),
313
- createElementVNode("span", _hoisted_3$2, toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
314
- __props.selectedItems && __props.selectedItems.size > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$1, " (" + toDisplayString(__props.selectedItems.size) + " sélectionné" + toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : createCommentVNode("", true)
315
- ])) : createCommentVNode("", true),
305
+ __props.selectable && selectableItems.value.length > 0 ? (openBlock(), createBlock(_sfc_main$b, { key: 0 }, {
306
+ default: withCtx(() => [
307
+ createElementVNode("div", _hoisted_2$4, [
308
+ createVNode(_sfc_main$c, {
309
+ "model-value": allSelected.value,
310
+ indeterminate: someSelected.value,
311
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => emit("selectAll"))
312
+ }, null, 8, ["model-value", "indeterminate"]),
313
+ createElementVNode("span", _hoisted_3$2, toDisplayString(allSelected.value ? "Tout désélectionner" : "Tout sélectionner"), 1),
314
+ __props.selectedItems && __props.selectedItems.size > 0 ? (openBlock(), createElementBlock("span", _hoisted_4$1, " (" + toDisplayString(__props.selectedItems.size) + " sélectionné" + toDisplayString(__props.selectedItems.size > 1 ? "s" : "") + ") ", 1)) : createCommentVNode("", true)
315
+ ])
316
+ ]),
317
+ _: 1
318
+ })) : createCommentVNode("", true),
316
319
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item) => {
317
- return openBlock(), createElementBlock("div", {
320
+ return openBlock(), createBlock(_sfc_main$b, {
318
321
  key: getKey(item),
319
- class: normalizeClass(["bg-white dark:bg-slate-950 rounded-lg shadow-md hover:shadow-lg transition-all duration-200", {
322
+ class: normalizeClass(["hover:shadow-lg transition-all duration-200", {
320
323
  "ring-2 ring-primary": isSelected(item)
321
324
  }])
322
- }, [
323
- createElementVNode("div", _hoisted_5$1, [
324
- __props.selectable ? (openBlock(), createElementBlock("div", _hoisted_6$1, [
325
- isSelectable(item) ? (openBlock(), createBlock(_sfc_main$c, {
326
- key: 0,
327
- "model-value": isSelected(item),
328
- "onUpdate:modelValue": ($event) => handleSelect(item)
329
- }, null, 8, ["model-value", "onUpdate:modelValue"])) : (openBlock(), createElementBlock("div", _hoisted_7$1))
330
- ])) : createCommentVNode("", true),
331
- renderSlot(_ctx.$slots, "avatar", { item }),
332
- createElementVNode("div", _hoisted_8$1, [
333
- renderSlot(_ctx.$slots, "content", { item })
334
- ]),
335
- createElementVNode("div", _hoisted_9$1, [
336
- renderSlot(_ctx.$slots, "actions", { item })
325
+ }, {
326
+ default: withCtx(() => [
327
+ createElementVNode("div", _hoisted_5$1, [
328
+ __props.selectable ? (openBlock(), createElementBlock("div", _hoisted_6$1, [
329
+ isSelectable(item) ? (openBlock(), createBlock(_sfc_main$c, {
330
+ key: 0,
331
+ "model-value": isSelected(item),
332
+ "onUpdate:modelValue": ($event) => handleSelect(item)
333
+ }, null, 8, ["model-value", "onUpdate:modelValue"])) : (openBlock(), createElementBlock("div", _hoisted_7$1))
334
+ ])) : createCommentVNode("", true),
335
+ renderSlot(_ctx.$slots, "avatar", { item }),
336
+ createElementVNode("div", _hoisted_8$1, [
337
+ renderSlot(_ctx.$slots, "content", { item })
338
+ ]),
339
+ createElementVNode("div", _hoisted_9$1, [
340
+ renderSlot(_ctx.$slots, "actions", { item })
341
+ ])
337
342
  ])
338
- ])
339
- ], 2);
343
+ ]),
344
+ _: 2
345
+ }, 1032, ["class"]);
340
346
  }), 128)),
341
347
  __props.items.length === 0 && hasEmptySlot.value ? (openBlock(), createElementBlock("div", _hoisted_10, [
342
348
  renderSlot(_ctx.$slots, "empty")
@@ -707,13 +713,21 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
707
713
  const props = __props;
708
714
  const emit = __emit;
709
715
  const searchQuery = ref("");
710
- const isOpen = ref(false);
711
- const highlightedIndex = ref(-1);
712
716
  const inputRef = ref(null);
713
- const dropdownRef = ref(null);
714
717
  const containerRef = ref(null);
718
+ const dropdownRef = ref(null);
715
719
  const inputWrapperRef = ref(null);
716
- const dropdownPosition = ref({ top: 0, left: 0, width: 0 });
720
+ const {
721
+ isOpen,
722
+ highlightedIndex,
723
+ dropdownStyle,
724
+ open: openBase,
725
+ close: closeBase,
726
+ handleKeydown: baseHandleKeydown,
727
+ scrollToHighlighted
728
+ } = useDropdown(inputWrapperRef, dropdownRef, {
729
+ teleport: props.teleport
730
+ });
717
731
  const filteredOptions = computed(() => {
718
732
  if (!searchQuery.value) {
719
733
  return props.options;
@@ -737,30 +751,19 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
737
751
  },
738
752
  { immediate: true }
739
753
  );
740
- const updatePosition = () => {
741
- if (!inputWrapperRef.value || !props.teleport) return;
742
- const rect = inputWrapperRef.value.getBoundingClientRect();
743
- dropdownPosition.value = {
744
- top: rect.bottom + window.scrollY + 8,
745
- left: rect.left + window.scrollX,
746
- width: rect.width
747
- };
748
- };
749
754
  const openDropdown = () => {
750
755
  if (props.disabled) return;
751
- isOpen.value = true;
752
756
  searchQuery.value = "";
753
757
  highlightedIndex.value = -1;
758
+ openBase();
754
759
  nextTick(() => {
755
760
  var _a;
756
761
  (_a = inputRef.value) == null ? void 0 : _a.focus();
757
- updatePosition();
758
762
  });
759
763
  };
760
764
  const closeDropdown = () => {
761
- isOpen.value = false;
765
+ closeBase();
762
766
  searchQuery.value = selectedLabel.value;
763
- highlightedIndex.value = -1;
764
767
  };
765
768
  const selectOption = (option) => {
766
769
  emit("update:modelValue", option.value);
@@ -777,79 +780,18 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
777
780
  });
778
781
  };
779
782
  const handleKeydown = (event) => {
780
- if (!isOpen.value) return;
781
- switch (event.key) {
782
- case "ArrowDown":
783
- event.preventDefault();
784
- highlightedIndex.value = Math.min(
785
- highlightedIndex.value + 1,
786
- filteredOptions.value.length - 1
787
- );
788
- scrollToHighlighted();
789
- break;
790
- case "ArrowUp":
791
- event.preventDefault();
792
- highlightedIndex.value = Math.max(highlightedIndex.value - 1, 0);
793
- scrollToHighlighted();
794
- break;
795
- case "Enter":
796
- event.preventDefault();
797
- if (highlightedIndex.value >= 0 && filteredOptions.value[highlightedIndex.value]) {
798
- selectOption(filteredOptions.value[highlightedIndex.value]);
799
- }
800
- break;
801
- case "Escape":
802
- event.preventDefault();
803
- closeDropdown();
804
- break;
805
- }
806
- };
807
- const scrollToHighlighted = () => {
808
- nextTick(() => {
809
- if (dropdownRef.value) {
810
- const highlightedElement = dropdownRef.value.querySelector(
811
- `[data-index="${highlightedIndex.value}"]`
812
- );
813
- if (highlightedElement) {
814
- highlightedElement.scrollIntoView({ block: "nearest" });
783
+ baseHandleKeydown(event, {
784
+ itemCount: filteredOptions.value.length,
785
+ onSelect: (index) => {
786
+ if (filteredOptions.value[index]) {
787
+ selectOption(filteredOptions.value[index]);
815
788
  }
816
789
  }
817
790
  });
818
- };
819
- const handleClickOutside = (event) => {
820
- var _a, _b;
821
- const target = event.target;
822
- const isInsideContainer = (_a = containerRef.value) == null ? void 0 : _a.contains(target);
823
- const isInsideDropdown = (_b = dropdownRef.value) == null ? void 0 : _b.contains(target);
824
- if (!isInsideContainer && !isInsideDropdown) {
825
- closeDropdown();
791
+ if (isOpen.value) {
792
+ scrollToHighlighted(dropdownRef.value);
826
793
  }
827
794
  };
828
- watch(isOpen, (newValue) => {
829
- if (newValue) {
830
- document.addEventListener("click", handleClickOutside);
831
- window.addEventListener("scroll", updatePosition, true);
832
- window.addEventListener("resize", updatePosition);
833
- } else {
834
- document.removeEventListener("click", handleClickOutside);
835
- window.removeEventListener("scroll", updatePosition, true);
836
- window.removeEventListener("resize", updatePosition);
837
- }
838
- });
839
- onUnmounted(() => {
840
- document.removeEventListener("click", handleClickOutside);
841
- window.removeEventListener("scroll", updatePosition, true);
842
- window.removeEventListener("resize", updatePosition);
843
- });
844
- const dropdownStyle = computed(() => {
845
- if (!props.teleport) return {};
846
- return {
847
- position: "absolute",
848
- top: `${dropdownPosition.value.top}px`,
849
- left: `${dropdownPosition.value.left}px`,
850
- width: `${dropdownPosition.value.width}px`
851
- };
852
- });
853
795
  return (_ctx, _cache) => {
854
796
  return openBlock(), createElementBlock("div", {
855
797
  ref_key: "containerRef",
@@ -863,8 +805,8 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
863
805
  ref: inputWrapperRef,
864
806
  class: normalizeClass([{
865
807
  "border-red-500": __props.error,
866
- "border-gray-300 dark:border-gray-600": !__props.error && !isOpen.value,
867
- "border-primary ring-2 ring-primary/20": isOpen.value,
808
+ "border-gray-300 dark:border-gray-600": !__props.error && !unref(isOpen),
809
+ "border-primary ring-2 ring-primary/20": unref(isOpen),
868
810
  "cursor-not-allowed opacity-50": __props.disabled
869
811
  }, "flex items-center gap-2 rounded-lg border bg-white px-3 py-2 transition dark:bg-gray-800"])
870
812
  }, [
@@ -900,10 +842,10 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
900
842
  disabled: __props.disabled,
901
843
  class: "rounded p-1 transition hover:bg-gray-100 dark:hover:bg-gray-700",
902
844
  type: "button",
903
- onClick: _cache[1] || (_cache[1] = withModifiers(($event) => isOpen.value ? closeDropdown() : openDropdown(), ["stop"]))
845
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => unref(isOpen) ? closeDropdown() : openDropdown(), ["stop"]))
904
846
  }, [
905
847
  createVNode(unref(Icon), {
906
- class: normalizeClass([{ "rotate-180": isOpen.value }, "size-4 text-gray-400 transition"]),
848
+ class: normalizeClass([{ "rotate-180": unref(isOpen) }, "size-4 text-gray-400 transition"]),
907
849
  icon: "lucide:chevron-down"
908
850
  }, null, 8, ["class"])
909
851
  ], 8, _hoisted_4)
@@ -921,11 +863,11 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
921
863
  "leave-to-class": "opacity-0 scale-95"
922
864
  }, {
923
865
  default: withCtx(() => [
924
- isOpen.value ? (openBlock(), createElementBlock("div", {
866
+ unref(isOpen) ? (openBlock(), createElementBlock("div", {
925
867
  key: 0,
926
868
  ref_key: "dropdownRef",
927
869
  ref: dropdownRef,
928
- style: normalizeStyle(dropdownStyle.value),
870
+ style: normalizeStyle(unref(dropdownStyle)),
929
871
  class: normalizeClass([
930
872
  "autocomplete-dropdown 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",
931
873
  !__props.teleport && "absolute mt-2 w-full"
@@ -936,7 +878,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
936
878
  return openBlock(), createElementBlock("button", {
937
879
  key: option.value,
938
880
  class: normalizeClass([{
939
- "bg-gray-100 dark:bg-gray-700": highlightedIndex.value === index,
881
+ "bg-gray-100 dark:bg-gray-700": unref(highlightedIndex) === index,
940
882
  "bg-primary/10": __props.modelValue === option.value
941
883
  }, "flex w-full items-center gap-2 px-4 py-2 text-left text-sm transition hover:bg-gray-100 dark:hover:bg-gray-700"]),
942
884
  "data-index": index,
@@ -1476,4 +1418,4 @@ export {
1476
1418
  _sfc_main$1 as j,
1477
1419
  _sfc_main as k
1478
1420
  };
1479
- //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-Cymj-zkh.js.map
1421
+ //# sourceMappingURL=CollapsibleCard.vue_vue_type_script_setup_true_lang-D0eSGYea.js.map