@zentauri-ui/zentauri-components 2.1.1 → 2.1.3

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 (76) hide show
  1. package/README.md +17 -16
  2. package/cli/cli.integration.test.ts +115 -0
  3. package/cli/index.mjs +254 -5
  4. package/cli/registry.json +84 -0
  5. package/dist/{chunk-TYBQZO6Y.mjs → chunk-2P4WPYC3.mjs} +3 -3
  6. package/dist/{chunk-TYBQZO6Y.mjs.map → chunk-2P4WPYC3.mjs.map} +1 -1
  7. package/dist/{chunk-ZMFRJHO6.mjs → chunk-3BL5PO3K.mjs} +3 -3
  8. package/dist/{chunk-ZMFRJHO6.mjs.map → chunk-3BL5PO3K.mjs.map} +1 -1
  9. package/dist/{chunk-TT33BIIT.js → chunk-BJDT7P2I.js} +35 -35
  10. package/dist/{chunk-TT33BIIT.js.map → chunk-BJDT7P2I.js.map} +1 -1
  11. package/dist/{chunk-7N2UYQBJ.mjs → chunk-BOTDQV6U.mjs} +4 -4
  12. package/dist/{chunk-7N2UYQBJ.mjs.map → chunk-BOTDQV6U.mjs.map} +1 -1
  13. package/dist/{chunk-3N575QVC.mjs → chunk-BPSW3SRE.mjs} +3 -3
  14. package/dist/{chunk-3N575QVC.mjs.map → chunk-BPSW3SRE.mjs.map} +1 -1
  15. package/dist/{chunk-5TVBPPS6.js → chunk-DKBMNS6F.js} +11 -11
  16. package/dist/{chunk-5TVBPPS6.js.map → chunk-DKBMNS6F.js.map} +1 -1
  17. package/dist/{chunk-4LCH4OJ5.js → chunk-E7P4O3ET.js} +10 -10
  18. package/dist/{chunk-4LCH4OJ5.js.map → chunk-E7P4O3ET.js.map} +1 -1
  19. package/dist/{chunk-VHYUH5OH.js → chunk-GNQH247A.js} +6 -6
  20. package/dist/{chunk-VHYUH5OH.js.map → chunk-GNQH247A.js.map} +1 -1
  21. package/dist/{chunk-42ZSQNDF.mjs → chunk-NIVJFG5Z.mjs} +35 -35
  22. package/dist/{chunk-42ZSQNDF.mjs.map → chunk-NIVJFG5Z.mjs.map} +1 -1
  23. package/dist/{chunk-BIQZC26Q.js → chunk-OH5VOGNW.js} +4 -4
  24. package/dist/chunk-OH5VOGNW.js.map +1 -0
  25. package/dist/chunk-SOYCLBHK.js +19 -0
  26. package/dist/{chunk-R4D5V7NT.js.map → chunk-SOYCLBHK.js.map} +1 -1
  27. package/dist/{chunk-V2LI5QZD.js → chunk-UJPB5NHW.js} +18 -18
  28. package/dist/{chunk-V2LI5QZD.js.map → chunk-UJPB5NHW.js.map} +1 -1
  29. package/dist/{chunk-TVEK6PKH.mjs → chunk-XY3TKIIH.mjs} +4 -4
  30. package/dist/chunk-XY3TKIIH.mjs.map +1 -0
  31. package/dist/{chunk-GOH2THVW.mjs → chunk-ZNI3AB3W.mjs} +3 -3
  32. package/dist/{chunk-GOH2THVW.mjs.map → chunk-ZNI3AB3W.mjs.map} +1 -1
  33. package/dist/design-system/alert.d.ts +33 -33
  34. package/dist/design-system/facade.js +4 -4
  35. package/dist/design-system/facade.mjs +3 -3
  36. package/dist/design-system/tabs.d.ts +2 -2
  37. package/dist/ui/alert/animated.js +3 -3
  38. package/dist/ui/alert/animated.mjs +2 -2
  39. package/dist/ui/alert.js +11 -11
  40. package/dist/ui/alert.mjs +3 -3
  41. package/dist/ui/buttons/animated.js +6 -6
  42. package/dist/ui/buttons/animated.mjs +4 -4
  43. package/dist/ui/buttons.js +7 -7
  44. package/dist/ui/buttons.mjs +5 -5
  45. package/dist/ui/context-menu/context-menu.d.ts.map +1 -1
  46. package/dist/ui/context-menu/types.d.ts +3 -1
  47. package/dist/ui/context-menu/types.d.ts.map +1 -1
  48. package/dist/ui/context-menu.js +17 -0
  49. package/dist/ui/context-menu.js.map +1 -1
  50. package/dist/ui/context-menu.mjs +17 -0
  51. package/dist/ui/context-menu.mjs.map +1 -1
  52. package/dist/ui/dropdown/dropdown.d.ts +1 -1
  53. package/dist/ui/dropdown/dropdown.d.ts.map +1 -1
  54. package/dist/ui/dropdown.js +43 -2
  55. package/dist/ui/dropdown.js.map +1 -1
  56. package/dist/ui/dropdown.mjs +44 -3
  57. package/dist/ui/dropdown.mjs.map +1 -1
  58. package/dist/ui/dynamic-stepper.js +16 -16
  59. package/dist/ui/dynamic-stepper.mjs +5 -5
  60. package/dist/ui/pagination.js +12 -12
  61. package/dist/ui/pagination.mjs +4 -4
  62. package/dist/ui/tabs/animated.js +3 -3
  63. package/dist/ui/tabs/animated.mjs +2 -2
  64. package/dist/ui/tabs.js +10 -10
  65. package/dist/ui/tabs.mjs +2 -2
  66. package/package.json +10 -3
  67. package/src/design-system/alert.ts +33 -33
  68. package/src/design-system/tabs.ts +2 -2
  69. package/src/hooks/useTableFilter/useTableFilter.test.ts +12 -2
  70. package/src/ui/context-menu/context-menu.test.tsx +38 -0
  71. package/src/ui/context-menu/context-menu.tsx +17 -1
  72. package/src/ui/context-menu/types.ts +3 -0
  73. package/src/ui/dropdown/dropdown.tsx +59 -2
  74. package/dist/chunk-BIQZC26Q.js.map +0 -1
  75. package/dist/chunk-R4D5V7NT.js +0 -19
  76. package/dist/chunk-TVEK6PKH.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":["cva","zuiDropdownTriggerBase","zuiDropdownTriggerVariants","zuiDropdownTriggerSizes","zuiDropdownContentBase","zuiDropdownPlacements","zuiDropdownSpacing","zuiDropdownItemBase","zuiDropdownItemVariants","createContext","useContext","useId","useState","jsx","cn","useRef","useClickOutside","jsxs","FiCheck"],"mappings":";;;;;;;;;;;AAaO,IAAM,eAAA,GAAkBA,2BAAIC,uCAAA,EAAwB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,OAAA,EAASC,2CAAA;AAAA,IACT,IAAA,EAAMC;AAAA,GACR;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS,SAAA;AAAA,IACT,IAAA,EAAM;AAAA;AAEV,CAAC;AAEM,IAAM,eAAA,GAAkBH,2BAAII,uCAAA,EAAwB;AAAA,EACzD,QAAA,EAAU;AAAA,IACR,SAAA,EAAWC,sCAAA;AAAA,IACX,OAAA,EAASC;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,SAAA,EAAW,QAAA;AAAA,IACX,OAAA,EAAS;AAAA;AAEb,CAAC;AAEM,IAAM,YAAA,GAAeN,2BAAIO,oCAAA,EAAqB;AAAA,EACnD,QAAA,EAAU;AAAA,IACR,OAAA,EAASC;AAAA,GACX;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,OAAA,EAAS;AAAA;AAEb,CAAC;ACjBD,IAAM,eAAA,GAAkBC,oBAA0C,IAAI,CAAA;AAEtE,IAAM,cAAc,MAAM;AACxB,EAAA,MAAM,GAAA,GAAMC,iBAAW,eAAe,CAAA;AACtC,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAC/C,EAAA,OAAO,GAAA;AACT,CAAA;AAKO,IAAM,WAAW,CAAC;AAAA,EACvB,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA,EACA,WAAA,GAAc;AAChB,CAAA,KAAqB;AACnB,EAAA,MAAM,MAAA,GAAS,CAAA,EAAGC,WAAA,EAAO,CAAA,KAAA,CAAA;AACzB,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIC,eAAS,WAAW,CAAA;AACpE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,cAAA,CAAmB,EAAE,CAAA;AAEjE,EAAA,MAAM,OAAO,cAAA,IAAkB,gBAAA;AAE/B,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAiB;AAChC,IAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,MAAA,YAAA,GAAe,GAAG,CAAA;AAAA,IACpB,CAAA,MAAO;AACL,MAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,IACzB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAElC,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,iBAAA,CAAkB,CAAC,KAAK,CAAC,CAAA;AACzB,MAAA,OAAA,CAAQ,KAAK,CAAA;AACb,MAAA;AAAA,IACF;AAEA,IAAA,iBAAA;AAAA,MAAkB,CAAC,IAAA,KACjB,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,KAAK,CAAA,GAAI,CAAC,GAAG,MAAM,KAAK;AAAA,KAC1E;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,eAAA,CAAgB,QAAA;AAAA,IAAhB;AAAA,MACC,KAAA,EAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,YAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,kBAAAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAS;AAAA;AAAA,GACnD;AAEJ;AAKO,IAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4B;AAC1B,EAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,MAAA,KAAW,WAAA,EAAY;AAE7C,EAAA,uBACEA,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,IAAA;AAAA,MACf,eAAA,EAAc,MAAA;AAAA,MACd,eAAA,EAAe,MAAA;AAAA,MACf,SAAA,EAAWC,oBAAG,eAAA,CAAgB,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MAC1D,GAAG,KAAA;AAAA,MACJ,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,OAAA,GAAU,KAAK,CAAA;AACf,QAAA,IAAI,CAAC,MAAM,gBAAA,EAAkB;AAC3B,UAAA,MAAA,EAAO;AAAA,QACT;AAAA,MACF,CAAA;AAAA,MAEC;AAAA;AAAA,GACH;AAEJ;AAKO,IAAM,kBAAkB,CAAC;AAAA,EAC9B,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA,GAAY,QAAA;AAAA,EACZ,OAAA,GAAU,SAAA;AAAA,EACV,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAA4B;AAC1B,EAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,KAAW,WAAA,EAAY;AAC9C,EAAA,MAAM,GAAA,GAAMC,aAAuB,IAAI,CAAA;AAGvC,EAAAC,gCAAA,CAAgB,EAAE,GAAA,EAAK,OAAA,EAAS,CAAA;AAEhC,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,EAAA,uBACEH,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAA,EAAI,MAAA;AAAA,MACJ,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAWC,mBAAA;AAAA,QACT,eAAA,CAAgB,EAAE,SAAA,EAAW,OAAA,EAAS,CAAA;AAAA,QACtC,SAAA;AAAA,QACA,OAAA,IAAW;AAAA,OACb;AAAA,MACC,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,GACH;AAEJ;AAKO,IAAM,eAAe,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAyB;AACvB,EAAA,MAAM,EAAE,YAAA,EAAc,cAAA,EAAe,GAAI,WAAA,EAAY;AACrD,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,QAAA,CAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,QAAA,IAAW;AAAA,EACb,CAAA;AAEA,EAAA,uBACEG,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,UAAA;AAAA,MACL,QAAA,EAAU,CAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,QAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AACtC,UAAA,CAAA,CAAE,cAAA,EAAe;AACjB,UAAA,WAAA,EAAY;AAAA,QACd;AAAA,MACF,CAAA;AAAA,MACA,WAAWH,mBAAA,CAAG,YAAA,CAAa,EAAE,OAAA,EAAS,GAAG,SAAS,CAAA;AAAA,MACjD,GAAG,KAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAAG,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,UACA;AAAA,SAAA,EACH,CAAA;AAAA,wBAEAA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,mCAAeC,UAAA,EAAA,EAAQ,CAAA;AAAA,UACvB;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ","file":"dropdown.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiDropdownContentBase,\n zuiDropdownItemBase,\n zuiDropdownItemVariants,\n zuiDropdownPlacements,\n zuiDropdownSpacing,\n zuiDropdownTriggerBase,\n zuiDropdownTriggerSizes,\n zuiDropdownTriggerVariants,\n} from \"../../design-system/dropdown\";\n\nexport const triggerVariants = cva(zuiDropdownTriggerBase, {\n variants: {\n variant: zuiDropdownTriggerVariants,\n size: zuiDropdownTriggerSizes,\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport const contentVariants = cva(zuiDropdownContentBase, {\n variants: {\n placement: zuiDropdownPlacements,\n spacing: zuiDropdownSpacing,\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n});\n\nexport const itemVariants = cva(zuiDropdownItemBase, {\n variants: {\n variant: zuiDropdownItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n useId,\n} from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const menuId = `${useId()}-menu`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n menuId,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n onClick,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle, open, menuId } = useDropdown();\n\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n aria-controls={menuId}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggle();\n }\n }}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen, menuId } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":["cva","zuiDropdownTriggerBase","zuiDropdownTriggerVariants","zuiDropdownTriggerSizes","zuiDropdownContentBase","zuiDropdownPlacements","zuiDropdownSpacing","zuiDropdownItemBase","zuiDropdownItemVariants","createContext","useContext","useId","useState","jsx","cn","useRef","useClickOutside","useEffect","jsxs","FiCheck"],"mappings":"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","file":"dropdown.js","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiDropdownContentBase,\n zuiDropdownItemBase,\n zuiDropdownItemVariants,\n zuiDropdownPlacements,\n zuiDropdownSpacing,\n zuiDropdownTriggerBase,\n zuiDropdownTriggerSizes,\n zuiDropdownTriggerVariants,\n} from \"../../design-system/dropdown\";\n\nexport const triggerVariants = cva(zuiDropdownTriggerBase, {\n variants: {\n variant: zuiDropdownTriggerVariants,\n size: zuiDropdownTriggerSizes,\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport const contentVariants = cva(zuiDropdownContentBase, {\n variants: {\n placement: zuiDropdownPlacements,\n spacing: zuiDropdownSpacing,\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n});\n\nexport const itemVariants = cva(zuiDropdownItemBase, {\n variants: {\n variant: zuiDropdownItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n useId,\n type KeyboardEvent,\n} from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const menuId = `${useId()}-menu`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n menuId,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n onClick,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle, open, menuId } = useDropdown();\n\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n aria-controls={menuId}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggle();\n }\n }}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen, menuId } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n ref.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')?.focus();\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onClick,\n onKeyDown,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n const focusSiblingItem = (\n event: KeyboardEvent<HTMLDivElement>,\n direction: \"next\" | \"previous\" | \"first\" | \"last\",\n ) => {\n const menu = event.currentTarget.closest('[role=\"menu\"]');\n const items = Array.from(\n menu?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]') ?? [],\n );\n const currentIndex = items.indexOf(event.currentTarget);\n\n if (currentIndex === -1 || items.length === 0) {\n return;\n }\n\n const nextIndex =\n direction === \"first\"\n ? 0\n : direction === \"last\"\n ? items.length - 1\n : (currentIndex + (direction === \"next\" ? 1 : -1) + items.length) %\n items.length;\n\n items[nextIndex]?.focus();\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={-1}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleClick();\n }\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) {\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusSiblingItem(e, \"next\");\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n focusSiblingItem(e, \"previous\");\n } else if (e.key === \"Home\") {\n e.preventDefault();\n focusSiblingItem(e, \"first\");\n } else if (e.key === \"End\") {\n e.preventDefault();\n focusSiblingItem(e, \"last\");\n }\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
@@ -3,7 +3,7 @@ import { useClickOutside } from '../chunk-VXDEPZKH.mjs';
3
3
  import { zuiDropdownTriggerBase, zuiDropdownTriggerSizes, zuiDropdownTriggerVariants, zuiDropdownContentBase, zuiDropdownSpacing, zuiDropdownPlacements, zuiDropdownItemBase, zuiDropdownItemVariants } from '../chunk-QX6PPTWL.mjs';
4
4
  import { cn } from '../chunk-4D54YOL6.mjs';
5
5
  import '../chunk-J5LGTIGS.mjs';
6
- import { createContext, useId, useState, useRef, useContext } from 'react';
6
+ import { createContext, useId, useState, useRef, useEffect, useContext } from 'react';
7
7
  import { FiCheck } from 'react-icons/fi';
8
8
  import { cva } from 'class-variance-authority';
9
9
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -126,6 +126,12 @@ var DropdownContent = ({
126
126
  const { open, setOpen, menuId } = useDropdown();
127
127
  const ref = useRef(null);
128
128
  useClickOutside({ ref, setOpen });
129
+ useEffect(() => {
130
+ if (!open) {
131
+ return;
132
+ }
133
+ ref.current?.querySelector('[role="menuitem"]')?.focus();
134
+ }, [open]);
129
135
  if (!open) return null;
130
136
  return /* @__PURE__ */ jsx(
131
137
  "div",
@@ -148,6 +154,8 @@ var DropdownItem = ({
148
154
  value,
149
155
  className,
150
156
  variant,
157
+ onClick,
158
+ onKeyDown,
151
159
  onSelect,
152
160
  leftIcon,
153
161
  rightIcon,
@@ -159,16 +167,49 @@ var DropdownItem = ({
159
167
  toggleSelect(value);
160
168
  onSelect?.();
161
169
  };
170
+ const focusSiblingItem = (event, direction) => {
171
+ const menu = event.currentTarget.closest('[role="menu"]');
172
+ const items = Array.from(
173
+ menu?.querySelectorAll('[role="menuitem"]') ?? []
174
+ );
175
+ const currentIndex = items.indexOf(event.currentTarget);
176
+ if (currentIndex === -1 || items.length === 0) {
177
+ return;
178
+ }
179
+ const nextIndex = direction === "first" ? 0 : direction === "last" ? items.length - 1 : (currentIndex + (direction === "next" ? 1 : -1) + items.length) % items.length;
180
+ items[nextIndex]?.focus();
181
+ };
162
182
  return /* @__PURE__ */ jsxs(
163
183
  "div",
164
184
  {
165
185
  role: "menuitem",
166
- tabIndex: 0,
167
- onClick: handleClick,
186
+ tabIndex: -1,
187
+ onClick: (event) => {
188
+ onClick?.(event);
189
+ if (!event.defaultPrevented) {
190
+ handleClick();
191
+ }
192
+ },
168
193
  onKeyDown: (e) => {
194
+ onKeyDown?.(e);
195
+ if (e.defaultPrevented) {
196
+ return;
197
+ }
169
198
  if (e.key === "Enter" || e.key === " ") {
170
199
  e.preventDefault();
171
200
  handleClick();
201
+ } else if (e.key === "ArrowDown") {
202
+ e.preventDefault();
203
+ focusSiblingItem(e, "next");
204
+ } else if (e.key === "ArrowUp") {
205
+ e.preventDefault();
206
+ focusSiblingItem(e, "previous");
207
+ } else if (e.key === "Home") {
208
+ e.preventDefault();
209
+ focusSiblingItem(e, "first");
210
+ } else if (e.key === "End") {
211
+ e.preventDefault();
212
+ focusSiblingItem(e, "last");
172
213
  }
173
214
  },
174
215
  className: cn(itemVariants({ variant }), className),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"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","file":"dropdown.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiDropdownContentBase,\n zuiDropdownItemBase,\n zuiDropdownItemVariants,\n zuiDropdownPlacements,\n zuiDropdownSpacing,\n zuiDropdownTriggerBase,\n zuiDropdownTriggerSizes,\n zuiDropdownTriggerVariants,\n} from \"../../design-system/dropdown\";\n\nexport const triggerVariants = cva(zuiDropdownTriggerBase, {\n variants: {\n variant: zuiDropdownTriggerVariants,\n size: zuiDropdownTriggerSizes,\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport const contentVariants = cva(zuiDropdownContentBase, {\n variants: {\n placement: zuiDropdownPlacements,\n spacing: zuiDropdownSpacing,\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n});\n\nexport const itemVariants = cva(zuiDropdownItemBase, {\n variants: {\n variant: zuiDropdownItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n useId,\n} from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const menuId = `${useId()}-menu`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n menuId,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n onClick,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle, open, menuId } = useDropdown();\n\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n aria-controls={menuId}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggle();\n }\n }}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen, menuId } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={0}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n }\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../src/ui/dropdown/variants.ts","../../src/ui/dropdown/dropdown.tsx"],"names":[],"mappings":"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","file":"dropdown.mjs","sourcesContent":["import { cva } from \"class-variance-authority\";\n\nimport {\n zuiDropdownContentBase,\n zuiDropdownItemBase,\n zuiDropdownItemVariants,\n zuiDropdownPlacements,\n zuiDropdownSpacing,\n zuiDropdownTriggerBase,\n zuiDropdownTriggerSizes,\n zuiDropdownTriggerVariants,\n} from \"../../design-system/dropdown\";\n\nexport const triggerVariants = cva(zuiDropdownTriggerBase, {\n variants: {\n variant: zuiDropdownTriggerVariants,\n size: zuiDropdownTriggerSizes,\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n});\n\nexport const contentVariants = cva(zuiDropdownContentBase, {\n variants: {\n placement: zuiDropdownPlacements,\n spacing: zuiDropdownSpacing,\n },\n defaultVariants: {\n placement: \"bottom\",\n spacing: \"default\",\n },\n});\n\nexport const itemVariants = cva(zuiDropdownItemBase, {\n variants: {\n variant: zuiDropdownItemVariants,\n },\n defaultVariants: {\n variant: \"default\",\n },\n});\n","\"use client\";\n\nimport {\n createContext,\n useContext,\n useState,\n useRef,\n useEffect,\n useId,\n type KeyboardEvent,\n} from \"react\";\nimport { FiCheck } from \"react-icons/fi\";\nimport { cn } from \"../../lib/utils\";\nimport type {\n DropdownContextType,\n DropdownProps,\n DropdownTriggerProps,\n DropdownContentProps,\n DropdownItemProps,\n} from \"./types\";\nimport { triggerVariants, contentVariants, itemVariants } from \"./variants\";\nimport { useClickOutside } from \"../../hooks/useClickOutside\";\n\n/* =========================\n Context\n========================= */\nconst DropdownContext = createContext<DropdownContextType | null>(null);\n\nconst useDropdown = () => {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error(\"Use inside Dropdown\");\n return ctx;\n};\n\n/* =========================\n Root\n========================= */\nexport const Dropdown = ({\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n multiSelect = false,\n}: DropdownProps) => {\n const menuId = `${useId()}-menu`;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const [selectedValues, setSelectedValues] = useState<string[]>([]);\n\n const open = controlledOpen ?? uncontrolledOpen;\n\n const setOpen = (val: boolean) => {\n if (controlledOpen !== undefined) {\n onOpenChange?.(val);\n } else {\n setUncontrolledOpen(val);\n }\n };\n\n const toggle = () => setOpen(!open);\n\n const toggleSelect = (value: string) => {\n if (!multiSelect) {\n setSelectedValues([value]);\n setOpen(false);\n return;\n }\n\n setSelectedValues((prev) =>\n prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value],\n );\n };\n\n return (\n <DropdownContext.Provider\n value={{\n open,\n setOpen,\n toggle,\n selectedValues,\n toggleSelect,\n multiSelect,\n menuId,\n }}\n >\n <div className=\"relative inline-block\">{children}</div>\n </DropdownContext.Provider>\n );\n};\n\n/* =========================\n Trigger\n========================= */\nexport const DropdownTrigger = ({\n children,\n className,\n variant,\n size,\n onClick,\n ...props\n}: DropdownTriggerProps) => {\n const { toggle, open, menuId } = useDropdown();\n\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n aria-haspopup=\"menu\"\n aria-controls={menuId}\n className={cn(triggerVariants({ variant, size }), className)}\n {...props}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggle();\n }\n }}\n >\n {children}\n </button>\n );\n};\n\n/* =========================\n Content\n========================= */\nexport const DropdownContent = ({\n children,\n className,\n placement = \"bottom\",\n spacing = \"default\",\n divider,\n ...props\n}: DropdownContentProps) => {\n const { open, setOpen, menuId } = useDropdown();\n const ref = useRef<HTMLDivElement>(null);\n\n // click outside\n useClickOutside({ ref, setOpen });\n\n useEffect(() => {\n if (!open) {\n return;\n }\n\n ref.current?.querySelector<HTMLElement>('[role=\"menuitem\"]')?.focus();\n }, [open]);\n\n if (!open) return null;\n\n return (\n <div\n ref={ref}\n id={menuId}\n role=\"menu\"\n className={cn(\n contentVariants({ placement, spacing }),\n className,\n divider && \"divide-y divide-current\",\n )}\n {...props}\n >\n {children}\n </div>\n );\n};\n\n/* =========================\n Item\n========================= */\nexport const DropdownItem = ({\n children,\n value,\n className,\n variant,\n onClick,\n onKeyDown,\n onSelect,\n leftIcon,\n rightIcon,\n ...props\n}: DropdownItemProps) => {\n const { toggleSelect, selectedValues } = useDropdown();\n const isSelected = selectedValues.includes(value);\n\n const handleClick = () => {\n toggleSelect(value);\n onSelect?.();\n };\n\n const focusSiblingItem = (\n event: KeyboardEvent<HTMLDivElement>,\n direction: \"next\" | \"previous\" | \"first\" | \"last\",\n ) => {\n const menu = event.currentTarget.closest('[role=\"menu\"]');\n const items = Array.from(\n menu?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]') ?? [],\n );\n const currentIndex = items.indexOf(event.currentTarget);\n\n if (currentIndex === -1 || items.length === 0) {\n return;\n }\n\n const nextIndex =\n direction === \"first\"\n ? 0\n : direction === \"last\"\n ? items.length - 1\n : (currentIndex + (direction === \"next\" ? 1 : -1) + items.length) %\n items.length;\n\n items[nextIndex]?.focus();\n };\n\n return (\n <div\n role=\"menuitem\"\n tabIndex={-1}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n handleClick();\n }\n }}\n onKeyDown={(e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) {\n return;\n }\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleClick();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n focusSiblingItem(e, \"next\");\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n focusSiblingItem(e, \"previous\");\n } else if (e.key === \"Home\") {\n e.preventDefault();\n focusSiblingItem(e, \"first\");\n } else if (e.key === \"End\") {\n e.preventDefault();\n focusSiblingItem(e, \"last\");\n }\n }}\n className={cn(itemVariants({ variant }), className)}\n {...props}\n >\n <div className=\"flex items-center gap-2\">\n {leftIcon}\n {children}\n </div>\n\n <div className=\"flex items-center gap-2\">\n {isSelected && <FiCheck />}\n {rightIcon}\n </div>\n </div>\n );\n};\n"]}
@@ -3,9 +3,9 @@
3
3
 
4
4
  var chunkVMCOX3Z2_js = require('../chunk-VMCOX3Z2.js');
5
5
  require('../chunk-HPN7H5ZM.js');
6
- var chunkVHYUH5OH_js = require('../chunk-VHYUH5OH.js');
7
- require('../chunk-R4D5V7NT.js');
8
- var chunkV2LI5QZD_js = require('../chunk-V2LI5QZD.js');
6
+ var chunkGNQH247A_js = require('../chunk-GNQH247A.js');
7
+ require('../chunk-SOYCLBHK.js');
8
+ var chunkUJPB5NHW_js = require('../chunk-UJPB5NHW.js');
9
9
  require('../chunk-FBUY6K6S.js');
10
10
  require('../chunk-USLNTKVQ.js');
11
11
  require('../chunk-D7ATXPVI.js');
@@ -15,7 +15,7 @@ require('../chunk-3EJCQXGV.js');
15
15
  require('../chunk-NNGL2AFQ.js');
16
16
  require('../chunk-L7W4NRK6.js');
17
17
  require('../chunk-KWBGLH7G.js');
18
- require('../chunk-BIQZC26Q.js');
18
+ require('../chunk-OH5VOGNW.js');
19
19
  require('../chunk-Y7BU5RC4.js');
20
20
  require('../chunk-6Q4EOLKN.js');
21
21
  require('../chunk-UG3GF2BD.js');
@@ -41,7 +41,7 @@ require('../chunk-7DVECOO7.js');
41
41
  require('../chunk-KJMW7S5X.js');
42
42
  require('../chunk-YPYPWALR.js');
43
43
  require('../chunk-PP3L6M62.js');
44
- require('../chunk-TT33BIIT.js');
44
+ require('../chunk-BJDT7P2I.js');
45
45
  require('../chunk-NFUOJMNI.js');
46
46
  require('../chunk-UT6QG35L.js');
47
47
  require('../chunk-IR5SJ7AQ.js');
@@ -53,37 +53,37 @@ var classVarianceAuthority = require('class-variance-authority');
53
53
  var jsxRuntime = require('react/jsx-runtime');
54
54
 
55
55
  function dynamicStepperIndicatorToneClass(state, tone) {
56
- return chunkV2LI5QZD_js.zuiDynamicStepperIndicatorToneClasses[tone][state];
56
+ return chunkUJPB5NHW_js.zuiDynamicStepperIndicatorToneClasses[tone][state];
57
57
  }
58
- var dynamicStepperRootVariants = classVarianceAuthority.cva(chunkV2LI5QZD_js.zuiDynamicStepperRootBase, {
58
+ var dynamicStepperRootVariants = classVarianceAuthority.cva(chunkUJPB5NHW_js.zuiDynamicStepperRootBase, {
59
59
  variants: {
60
- orientation: chunkV2LI5QZD_js.zuiDynamicStepperRootOrientations
60
+ orientation: chunkUJPB5NHW_js.zuiDynamicStepperRootOrientations
61
61
  },
62
62
  defaultVariants: {
63
63
  orientation: "horizontal"
64
64
  }
65
65
  });
66
- var dynamicStepperMapperVariants = classVarianceAuthority.cva(chunkV2LI5QZD_js.zuiDynamicStepperMapperBase, {
66
+ var dynamicStepperMapperVariants = classVarianceAuthority.cva(chunkUJPB5NHW_js.zuiDynamicStepperMapperBase, {
67
67
  variants: {
68
- orientation: chunkV2LI5QZD_js.zuiDynamicStepperMapperOrientations
68
+ orientation: chunkUJPB5NHW_js.zuiDynamicStepperMapperOrientations
69
69
  },
70
70
  defaultVariants: {
71
71
  orientation: "horizontal"
72
72
  }
73
73
  });
74
- var dynamicStepperItemVariants = classVarianceAuthority.cva(chunkV2LI5QZD_js.zuiDynamicStepperItemBase, {
74
+ var dynamicStepperItemVariants = classVarianceAuthority.cva(chunkUJPB5NHW_js.zuiDynamicStepperItemBase, {
75
75
  variants: {
76
- orientation: chunkV2LI5QZD_js.zuiDynamicStepperItemOrientations
76
+ orientation: chunkUJPB5NHW_js.zuiDynamicStepperItemOrientations
77
77
  },
78
78
  defaultVariants: {
79
79
  orientation: "horizontal"
80
80
  }
81
81
  });
82
82
  var dynamicStepperIndicatorVariants = classVarianceAuthority.cva(
83
- chunkV2LI5QZD_js.zuiDynamicStepperIndicatorBase,
83
+ chunkUJPB5NHW_js.zuiDynamicStepperIndicatorBase,
84
84
  {
85
85
  variants: {
86
- size: chunkV2LI5QZD_js.zuiDynamicStepperIndicatorSizes
86
+ size: chunkUJPB5NHW_js.zuiDynamicStepperIndicatorSizes
87
87
  },
88
88
  defaultVariants: {
89
89
  size: "md"
@@ -136,7 +136,7 @@ var DynamicStepper = ({
136
136
  ...rest,
137
137
  children: [
138
138
  /* @__PURE__ */ jsxRuntime.jsx(
139
- chunkVHYUH5OH_js.Button,
139
+ chunkGNQH247A_js.Button,
140
140
  {
141
141
  id: previousId,
142
142
  "data-slot": "dynamic-stepper-previous",
@@ -215,7 +215,7 @@ var DynamicStepper = ({
215
215
  }
216
216
  ),
217
217
  /* @__PURE__ */ jsxRuntime.jsx(
218
- chunkVHYUH5OH_js.Button,
218
+ chunkGNQH247A_js.Button,
219
219
  {
220
220
  id: nextId,
221
221
  "data-slot": "dynamic-stepper-next",
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { useDynamicStepper } from '../chunk-4MPNRGUA.mjs';
3
3
  import '../chunk-NWOE2TZN.mjs';
4
- import { Button } from '../chunk-TYBQZO6Y.mjs';
5
- import '../chunk-3N575QVC.mjs';
6
- import { zuiDynamicStepperRootBase, zuiDynamicStepperRootOrientations, zuiDynamicStepperMapperBase, zuiDynamicStepperMapperOrientations, zuiDynamicStepperItemBase, zuiDynamicStepperItemOrientations, zuiDynamicStepperIndicatorBase, zuiDynamicStepperIndicatorSizes, zuiDynamicStepperIndicatorToneClasses } from '../chunk-7N2UYQBJ.mjs';
4
+ import { Button } from '../chunk-2P4WPYC3.mjs';
5
+ import '../chunk-BPSW3SRE.mjs';
6
+ import { zuiDynamicStepperRootBase, zuiDynamicStepperRootOrientations, zuiDynamicStepperMapperBase, zuiDynamicStepperMapperOrientations, zuiDynamicStepperItemBase, zuiDynamicStepperItemOrientations, zuiDynamicStepperIndicatorBase, zuiDynamicStepperIndicatorSizes, zuiDynamicStepperIndicatorToneClasses } from '../chunk-BOTDQV6U.mjs';
7
7
  import '../chunk-2NQKFH26.mjs';
8
8
  import '../chunk-4ZBMDWWY.mjs';
9
9
  import '../chunk-YH6MOKHR.mjs';
@@ -13,7 +13,7 @@ import '../chunk-LRYKMXKI.mjs';
13
13
  import '../chunk-COVTMJIQ.mjs';
14
14
  import '../chunk-4WG3VNVL.mjs';
15
15
  import '../chunk-YPTHTFVF.mjs';
16
- import '../chunk-TVEK6PKH.mjs';
16
+ import '../chunk-XY3TKIIH.mjs';
17
17
  import '../chunk-FX5KR2GP.mjs';
18
18
  import '../chunk-WIKNEHPJ.mjs';
19
19
  import '../chunk-EE53BIXR.mjs';
@@ -39,7 +39,7 @@ import '../chunk-U64ISRUX.mjs';
39
39
  import '../chunk-SS3T3BUL.mjs';
40
40
  import '../chunk-TKAOHMVA.mjs';
41
41
  import '../chunk-HFQJRAG7.mjs';
42
- import '../chunk-42ZSQNDF.mjs';
42
+ import '../chunk-NIVJFG5Z.mjs';
43
43
  import '../chunk-ZJWOSRAS.mjs';
44
44
  import '../chunk-JOLSS7UY.mjs';
45
45
  import '../chunk-NGZTAVQO.mjs';
@@ -2,8 +2,8 @@
2
2
  'use strict';
3
3
 
4
4
  var chunk2VUMVDR3_js = require('../chunk-2VUMVDR3.js');
5
- var chunkR4D5V7NT_js = require('../chunk-R4D5V7NT.js');
6
- var chunkV2LI5QZD_js = require('../chunk-V2LI5QZD.js');
5
+ var chunkSOYCLBHK_js = require('../chunk-SOYCLBHK.js');
6
+ var chunkUJPB5NHW_js = require('../chunk-UJPB5NHW.js');
7
7
  require('../chunk-FBUY6K6S.js');
8
8
  require('../chunk-USLNTKVQ.js');
9
9
  require('../chunk-D7ATXPVI.js');
@@ -13,7 +13,7 @@ require('../chunk-3EJCQXGV.js');
13
13
  require('../chunk-NNGL2AFQ.js');
14
14
  require('../chunk-L7W4NRK6.js');
15
15
  require('../chunk-KWBGLH7G.js');
16
- require('../chunk-BIQZC26Q.js');
16
+ require('../chunk-OH5VOGNW.js');
17
17
  require('../chunk-Y7BU5RC4.js');
18
18
  require('../chunk-6Q4EOLKN.js');
19
19
  require('../chunk-UG3GF2BD.js');
@@ -39,7 +39,7 @@ require('../chunk-7DVECOO7.js');
39
39
  require('../chunk-KJMW7S5X.js');
40
40
  require('../chunk-YPYPWALR.js');
41
41
  require('../chunk-PP3L6M62.js');
42
- require('../chunk-TT33BIIT.js');
42
+ require('../chunk-BJDT7P2I.js');
43
43
  require('../chunk-NFUOJMNI.js');
44
44
  require('../chunk-UT6QG35L.js');
45
45
  require('../chunk-IR5SJ7AQ.js');
@@ -50,19 +50,19 @@ var react = require('react');
50
50
  var classVarianceAuthority = require('class-variance-authority');
51
51
  var jsxRuntime = require('react/jsx-runtime');
52
52
 
53
- var paginationListVariants = classVarianceAuthority.cva(chunkV2LI5QZD_js.zuiPaginationListBase, {
53
+ var paginationListVariants = classVarianceAuthority.cva(chunkUJPB5NHW_js.zuiPaginationListBase, {
54
54
  variants: {
55
- appearance: chunkV2LI5QZD_js.zuiPaginationListAppearances,
56
- size: chunkV2LI5QZD_js.zuiPaginationListSizes
55
+ appearance: chunkUJPB5NHW_js.zuiPaginationListAppearances,
56
+ size: chunkUJPB5NHW_js.zuiPaginationListSizes
57
57
  },
58
58
  defaultVariants: {
59
59
  appearance: "default",
60
60
  size: "md"
61
61
  }
62
62
  });
63
- var paginationEllipsisVariants = classVarianceAuthority.cva(chunkV2LI5QZD_js.zuiPaginationEllipsisBase, {
63
+ var paginationEllipsisVariants = classVarianceAuthority.cva(chunkUJPB5NHW_js.zuiPaginationEllipsisBase, {
64
64
  variants: {
65
- size: chunkV2LI5QZD_js.zuiPaginationEllipsisSizes
65
+ size: chunkUJPB5NHW_js.zuiPaginationEllipsisSizes
66
66
  },
67
67
  defaultVariants: { size: "md" }
68
68
  });
@@ -127,10 +127,10 @@ var Pagination = ({
127
127
  return null;
128
128
  }
129
129
  const inactiveTriggerClass = chunkZS5756ZC_js.cn(
130
- chunkR4D5V7NT_js.buttonVariants({ appearance: "ghost", size }),
130
+ chunkSOYCLBHK_js.buttonVariants({ appearance: "ghost", size }),
131
131
  "bg-white/[0.04] text-slate-900 dark:text-slate-200 hover:bg-white/10"
132
132
  );
133
- const currentTriggerClass = chunkR4D5V7NT_js.buttonVariants({ appearance, size });
133
+ const currentTriggerClass = chunkSOYCLBHK_js.buttonVariants({ appearance, size });
134
134
  const triggerFocusRing = "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950";
135
135
  const renderPageControl = (pageNumber) => {
136
136
  const isCurrent = pageNumber === currentPage;
@@ -173,7 +173,7 @@ var Pagination = ({
173
173
  const prevHref = getPageHref?.(chunkZS5756ZC_js.clampPage(currentPage - 1, pageCount));
174
174
  const nextHref = getPageHref?.(chunkZS5756ZC_js.clampPage(currentPage + 1, pageCount));
175
175
  const navTriggerClass = chunkZS5756ZC_js.cn(
176
- chunkR4D5V7NT_js.buttonVariants({ appearance: "outline", size }),
176
+ chunkSOYCLBHK_js.buttonVariants({ appearance: "outline", size }),
177
177
  "shrink-0 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-300 focus-visible:ring-offset-2 focus-visible:ring-offset-slate-950"
178
178
  );
179
179
  return /* @__PURE__ */ jsxRuntime.jsx(
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { usePagination } from '../chunk-YNBJAFI2.mjs';
3
3
  export { usePagination } from '../chunk-YNBJAFI2.mjs';
4
- import { buttonVariants } from '../chunk-3N575QVC.mjs';
5
- import { zuiPaginationListBase, zuiPaginationListSizes, zuiPaginationListAppearances, zuiPaginationEllipsisBase, zuiPaginationEllipsisSizes } from '../chunk-7N2UYQBJ.mjs';
4
+ import { buttonVariants } from '../chunk-BPSW3SRE.mjs';
5
+ import { zuiPaginationListBase, zuiPaginationListSizes, zuiPaginationListAppearances, zuiPaginationEllipsisBase, zuiPaginationEllipsisSizes } from '../chunk-BOTDQV6U.mjs';
6
6
  import '../chunk-2NQKFH26.mjs';
7
7
  import '../chunk-4ZBMDWWY.mjs';
8
8
  import '../chunk-YH6MOKHR.mjs';
@@ -12,7 +12,7 @@ import '../chunk-LRYKMXKI.mjs';
12
12
  import '../chunk-COVTMJIQ.mjs';
13
13
  import '../chunk-4WG3VNVL.mjs';
14
14
  import '../chunk-YPTHTFVF.mjs';
15
- import '../chunk-TVEK6PKH.mjs';
15
+ import '../chunk-XY3TKIIH.mjs';
16
16
  import '../chunk-FX5KR2GP.mjs';
17
17
  import '../chunk-WIKNEHPJ.mjs';
18
18
  import '../chunk-EE53BIXR.mjs';
@@ -38,7 +38,7 @@ import '../chunk-U64ISRUX.mjs';
38
38
  import '../chunk-SS3T3BUL.mjs';
39
39
  import '../chunk-TKAOHMVA.mjs';
40
40
  import '../chunk-HFQJRAG7.mjs';
41
- import '../chunk-42ZSQNDF.mjs';
41
+ import '../chunk-NIVJFG5Z.mjs';
42
42
  import '../chunk-ZJWOSRAS.mjs';
43
43
  import '../chunk-JOLSS7UY.mjs';
44
44
  import '../chunk-NGZTAVQO.mjs';
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5TVBPPS6_js = require('../../chunk-5TVBPPS6.js');
5
- require('../../chunk-BIQZC26Q.js');
4
+ var chunkDKBMNS6F_js = require('../../chunk-DKBMNS6F.js');
5
+ require('../../chunk-OH5VOGNW.js');
6
6
  var chunkZS5756ZC_js = require('../../chunk-ZS5756ZC.js');
7
7
  require('../../chunk-PZ5AY32C.js');
8
8
  var framerMotion = require('framer-motion');
@@ -56,7 +56,7 @@ function TabsContentAnimated({
56
56
  orientation,
57
57
  tabTriggerId,
58
58
  tabPanelId
59
- } = chunk5TVBPPS6_js.useTabs();
59
+ } = chunkDKBMNS6F_js.useTabs();
60
60
  const prefersReducedMotion2 = framerMotion.useReducedMotion();
61
61
  if (activeValue !== value) return null;
62
62
  const motionProps = getTabsContentMotionProps(
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useTabs } from '../../chunk-GOH2THVW.mjs';
3
- import '../../chunk-TVEK6PKH.mjs';
2
+ import { useTabs } from '../../chunk-ZNI3AB3W.mjs';
3
+ import '../../chunk-XY3TKIIH.mjs';
4
4
  import { cn } from '../../chunk-4D54YOL6.mjs';
5
5
  import '../../chunk-J5LGTIGS.mjs';
6
6
  import { useReducedMotion, motion } from 'framer-motion';
package/dist/ui/tabs.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunk5TVBPPS6_js = require('../chunk-5TVBPPS6.js');
5
- require('../chunk-BIQZC26Q.js');
4
+ var chunkDKBMNS6F_js = require('../chunk-DKBMNS6F.js');
5
+ require('../chunk-OH5VOGNW.js');
6
6
  require('../chunk-ZS5756ZC.js');
7
7
  require('../chunk-PZ5AY32C.js');
8
8
 
@@ -10,35 +10,35 @@ require('../chunk-PZ5AY32C.js');
10
10
 
11
11
  Object.defineProperty(exports, "Tabs", {
12
12
  enumerable: true,
13
- get: function () { return chunk5TVBPPS6_js.Tabs; }
13
+ get: function () { return chunkDKBMNS6F_js.Tabs; }
14
14
  });
15
15
  Object.defineProperty(exports, "TabsContent", {
16
16
  enumerable: true,
17
- get: function () { return chunk5TVBPPS6_js.TabsContent; }
17
+ get: function () { return chunkDKBMNS6F_js.TabsContent; }
18
18
  });
19
19
  Object.defineProperty(exports, "TabsContext", {
20
20
  enumerable: true,
21
- get: function () { return chunk5TVBPPS6_js.TabsContext; }
21
+ get: function () { return chunkDKBMNS6F_js.TabsContext; }
22
22
  });
23
23
  Object.defineProperty(exports, "TabsList", {
24
24
  enumerable: true,
25
- get: function () { return chunk5TVBPPS6_js.TabsList; }
25
+ get: function () { return chunkDKBMNS6F_js.TabsList; }
26
26
  });
27
27
  Object.defineProperty(exports, "TabsTrigger", {
28
28
  enumerable: true,
29
- get: function () { return chunk5TVBPPS6_js.TabsTrigger; }
29
+ get: function () { return chunkDKBMNS6F_js.TabsTrigger; }
30
30
  });
31
31
  Object.defineProperty(exports, "tabsListVariants", {
32
32
  enumerable: true,
33
- get: function () { return chunk5TVBPPS6_js.tabsListVariants; }
33
+ get: function () { return chunkDKBMNS6F_js.tabsListVariants; }
34
34
  });
35
35
  Object.defineProperty(exports, "tabsTriggerVariants", {
36
36
  enumerable: true,
37
- get: function () { return chunk5TVBPPS6_js.tabsTriggerVariants; }
37
+ get: function () { return chunkDKBMNS6F_js.tabsTriggerVariants; }
38
38
  });
39
39
  Object.defineProperty(exports, "useTabs", {
40
40
  enumerable: true,
41
- get: function () { return chunk5TVBPPS6_js.useTabs; }
41
+ get: function () { return chunkDKBMNS6F_js.useTabs; }
42
42
  });
43
43
  //# sourceMappingURL=tabs.js.map
44
44
  //# sourceMappingURL=tabs.js.map
package/dist/ui/tabs.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- export { Tabs, TabsContent, TabsContext, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants, useTabs } from '../chunk-GOH2THVW.mjs';
3
- import '../chunk-TVEK6PKH.mjs';
2
+ export { Tabs, TabsContent, TabsContext, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants, useTabs } from '../chunk-ZNI3AB3W.mjs';
3
+ import '../chunk-XY3TKIIH.mjs';
4
4
  import '../chunk-4D54YOL6.mjs';
5
5
  import '../chunk-J5LGTIGS.mjs';
6
6
  //# sourceMappingURL=tabs.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentauri-ui/zentauri-components",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "description": "React + Tailwind UI kit with charts, ESM/CJS builds, per-entry exports, and a zentauri-components / zentauri-ui CLI to vendor UI or hook source into your app",
5
5
  "keywords": [
6
6
  "react",
@@ -101,9 +101,13 @@
101
101
  "check:tokens": "node scripts/check-design-tokens.mjs",
102
102
  "check:exports": "node scripts/check-exports.mjs",
103
103
  "prepack": "npm run build && node scripts/generate-registry.mjs && node scripts/check-design-tokens.mjs && node scripts/check-exports.mjs",
104
+ "lint": "eslint .",
105
+ "check-types": "tsc -p tsconfig.check-types.json --noEmit",
104
106
  "test": "vitest run",
105
- "test:a11y": "vitest run src/accessibility/axe-core.test.tsx",
106
- "test:watch": "vitest"
107
+ "test:coverage": "vitest run --coverage --maxWorkers=2",
108
+ "test:a11y": "vitest run src/accessibility",
109
+ "test:watch": "vitest",
110
+ "test:all": "pnpm test && pnpm test:a11y"
107
111
  },
108
112
  "peerDependencies": {
109
113
  "class-variance-authority": "*",
@@ -127,6 +131,7 @@
127
131
  }
128
132
  },
129
133
  "devDependencies": {
134
+ "@repo/eslint-config": "workspace:*",
130
135
  "@repo/typescript-config": "workspace:*",
131
136
  "@testing-library/jest-dom": "^6.9.1",
132
137
  "@testing-library/react": "^16.3.0",
@@ -134,8 +139,10 @@
134
139
  "@types/node": "^20.19.39",
135
140
  "@types/react": "^19",
136
141
  "@types/react-dom": "^19",
142
+ "@vitest/coverage-v8": "^4.1.4",
137
143
  "axe-core": "^4.12.0",
138
144
  "cross-env": "^7.0.3",
145
+ "eslint": "^9.39.1",
139
146
  "jsdom": "^26.1.0",
140
147
  "tsup": "^8.5.1",
141
148
  "typescript": "^5",