@zentauri-ui/zentauri-components 1.7.5 → 1.7.7

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 (124) hide show
  1. package/README.md +11 -6
  2. package/cli/registry.json +3 -0
  3. package/dist/chunk-DEZRB6DS.mjs +83 -0
  4. package/dist/chunk-DEZRB6DS.mjs.map +1 -0
  5. package/dist/chunk-GRJFGIZC.mjs +417 -0
  6. package/dist/chunk-GRJFGIZC.mjs.map +1 -0
  7. package/dist/chunk-QHEHBC6M.js +421 -0
  8. package/dist/chunk-QHEHBC6M.js.map +1 -0
  9. package/dist/chunk-V5JTDRV5.mjs +278 -0
  10. package/dist/chunk-V5JTDRV5.mjs.map +1 -0
  11. package/dist/chunk-Z4KHAD6Y.js +295 -0
  12. package/dist/chunk-Z4KHAD6Y.js.map +1 -0
  13. package/dist/chunk-ZX2IBIZT.js +92 -0
  14. package/dist/chunk-ZX2IBIZT.js.map +1 -0
  15. package/dist/design-system/context-menu.d.ts +41 -0
  16. package/dist/design-system/context-menu.d.ts.map +1 -0
  17. package/dist/design-system/index.d.ts +3 -0
  18. package/dist/design-system/index.d.ts.map +1 -1
  19. package/dist/design-system/timeline.d.ts +56 -0
  20. package/dist/design-system/timeline.d.ts.map +1 -0
  21. package/dist/design-system/tree-view.d.ts +66 -0
  22. package/dist/design-system/tree-view.d.ts.map +1 -0
  23. package/dist/ui/context-menu/context-menu.d.ts +11 -0
  24. package/dist/ui/context-menu/context-menu.d.ts.map +1 -0
  25. package/dist/ui/context-menu/index.d.ts +4 -0
  26. package/dist/ui/context-menu/index.d.ts.map +1 -0
  27. package/dist/ui/context-menu/types.d.ts +81 -0
  28. package/dist/ui/context-menu/types.d.ts.map +1 -0
  29. package/dist/ui/context-menu/variants.d.ts +7 -0
  30. package/dist/ui/context-menu/variants.d.ts.map +1 -0
  31. package/dist/ui/context-menu.js +500 -0
  32. package/dist/ui/context-menu.js.map +1 -0
  33. package/dist/ui/context-menu.mjs +488 -0
  34. package/dist/ui/context-menu.mjs.map +1 -0
  35. package/dist/ui/dropdown.js +9 -89
  36. package/dist/ui/dropdown.js.map +1 -1
  37. package/dist/ui/dropdown.mjs +1 -81
  38. package/dist/ui/dropdown.mjs.map +1 -1
  39. package/dist/ui/scroll-area/scroll-area.d.ts.map +1 -1
  40. package/dist/ui/scroll-area.js.map +1 -1
  41. package/dist/ui/scroll-area.mjs.map +1 -1
  42. package/dist/ui/timeline/animated/animations.d.ts +8 -0
  43. package/dist/ui/timeline/animated/animations.d.ts.map +1 -0
  44. package/dist/ui/timeline/animated/index.d.ts +6 -0
  45. package/dist/ui/timeline/animated/index.d.ts.map +1 -0
  46. package/dist/ui/timeline/animated/timeline-item-animated.d.ts +8 -0
  47. package/dist/ui/timeline/animated/timeline-item-animated.d.ts.map +1 -0
  48. package/dist/ui/timeline/animated/types.d.ts +12 -0
  49. package/dist/ui/timeline/animated/types.d.ts.map +1 -0
  50. package/dist/ui/timeline/animated.js +94 -0
  51. package/dist/ui/timeline/animated.js.map +1 -0
  52. package/dist/ui/timeline/animated.mjs +71 -0
  53. package/dist/ui/timeline/animated.mjs.map +1 -0
  54. package/dist/ui/timeline/index.d.ts +4 -0
  55. package/dist/ui/timeline/index.d.ts.map +1 -0
  56. package/dist/ui/timeline/timeline-base.d.ts +37 -0
  57. package/dist/ui/timeline/timeline-base.d.ts.map +1 -0
  58. package/dist/ui/timeline/timeline.d.ts +8 -0
  59. package/dist/ui/timeline/timeline.d.ts.map +1 -0
  60. package/dist/ui/timeline/types.d.ts +38 -0
  61. package/dist/ui/timeline/types.d.ts.map +1 -0
  62. package/dist/ui/timeline/variants.d.ts +19 -0
  63. package/dist/ui/timeline/variants.d.ts.map +1 -0
  64. package/dist/ui/timeline.js +63 -0
  65. package/dist/ui/timeline.js.map +1 -0
  66. package/dist/ui/timeline.mjs +14 -0
  67. package/dist/ui/timeline.mjs.map +1 -0
  68. package/dist/ui/tree-view/animated/animations.d.ts +6 -0
  69. package/dist/ui/tree-view/animated/animations.d.ts.map +1 -0
  70. package/dist/ui/tree-view/animated/index.d.ts +5 -0
  71. package/dist/ui/tree-view/animated/index.d.ts.map +1 -0
  72. package/dist/ui/tree-view/animated/tree-view-animated.d.ts +6 -0
  73. package/dist/ui/tree-view/animated/tree-view-animated.d.ts.map +1 -0
  74. package/dist/ui/tree-view/animated/types.d.ts +6 -0
  75. package/dist/ui/tree-view/animated/types.d.ts.map +1 -0
  76. package/dist/ui/tree-view/animated.js +53 -0
  77. package/dist/ui/tree-view/animated.js.map +1 -0
  78. package/dist/ui/tree-view/animated.mjs +50 -0
  79. package/dist/ui/tree-view/animated.mjs.map +1 -0
  80. package/dist/ui/tree-view/index.d.ts +5 -0
  81. package/dist/ui/tree-view/index.d.ts.map +1 -0
  82. package/dist/ui/tree-view/tree-view-base.d.ts +15 -0
  83. package/dist/ui/tree-view/tree-view-base.d.ts.map +1 -0
  84. package/dist/ui/tree-view/tree-view.d.ts +6 -0
  85. package/dist/ui/tree-view/tree-view.d.ts.map +1 -0
  86. package/dist/ui/tree-view/types.d.ts +61 -0
  87. package/dist/ui/tree-view/types.d.ts.map +1 -0
  88. package/dist/ui/tree-view/variants.d.ts +9 -0
  89. package/dist/ui/tree-view/variants.d.ts.map +1 -0
  90. package/dist/ui/tree-view.js +27 -0
  91. package/dist/ui/tree-view.js.map +1 -0
  92. package/dist/ui/tree-view.mjs +14 -0
  93. package/dist/ui/tree-view.mjs.map +1 -0
  94. package/package.json +1 -1
  95. package/src/design-system/context-menu.ts +44 -0
  96. package/src/design-system/index.ts +3 -0
  97. package/src/design-system/timeline.ts +87 -0
  98. package/src/design-system/tree-view.ts +113 -0
  99. package/src/ui/context-menu/context-menu.test.tsx +176 -0
  100. package/src/ui/context-menu/context-menu.tsx +536 -0
  101. package/src/ui/context-menu/index.ts +29 -0
  102. package/src/ui/context-menu/types.ts +110 -0
  103. package/src/ui/context-menu/variants.ts +26 -0
  104. package/src/ui/scroll-area/scroll-area.tsx +0 -2
  105. package/src/ui/timeline/animated/animations.ts +16 -0
  106. package/src/ui/timeline/animated/index.ts +22 -0
  107. package/src/ui/timeline/animated/timeline-item-animated.tsx +76 -0
  108. package/src/ui/timeline/animated/types.ts +21 -0
  109. package/src/ui/timeline/index.ts +30 -0
  110. package/src/ui/timeline/timeline-base.tsx +232 -0
  111. package/src/ui/timeline/timeline.test.tsx +262 -0
  112. package/src/ui/timeline/timeline.tsx +24 -0
  113. package/src/ui/timeline/types.ts +61 -0
  114. package/src/ui/timeline/variants.ts +60 -0
  115. package/src/ui/tree-view/animated/animations.ts +13 -0
  116. package/src/ui/tree-view/animated/index.ts +6 -0
  117. package/src/ui/tree-view/animated/tree-view-animated.tsx +52 -0
  118. package/src/ui/tree-view/animated/types.ts +6 -0
  119. package/src/ui/tree-view/index.ts +13 -0
  120. package/src/ui/tree-view/tree-view-base.tsx +496 -0
  121. package/src/ui/tree-view/tree-view.test.tsx +136 -0
  122. package/src/ui/tree-view/tree-view.tsx +9 -0
  123. package/src/ui/tree-view/types.ts +68 -0
  124. package/src/ui/tree-view/variants.ts +32 -0
@@ -0,0 +1,5 @@
1
+ export { TreeViewAnimated } from "./tree-view-animated";
2
+ export type { TreeViewAnimatedProps } from "./types";
3
+ export { treeViewTransitionPresets } from "./animations";
4
+ export type { TreeViewTransition } from "./animations";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewAnimatedProps } from "./types";
2
+ export declare function TreeViewAnimated({ transitionVariant, ...props }: TreeViewAnimatedProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare namespace TreeViewAnimated {
4
+ var displayName: string;
5
+ }
6
+ //# sourceMappingURL=tree-view-animated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view-animated.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AA+BrD,wBAAgB,gBAAgB,CAAC,EAC/B,iBAA6B,EAC7B,GAAG,KAAK,EACT,EAAE,qBAAqB,2CAMvB;yBATe,gBAAgB"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewBaseProps } from "../types";
2
+ import type { TreeViewTransition } from "./animations";
3
+ export type TreeViewAnimatedProps = TreeViewBaseProps & {
4
+ transitionVariant?: TreeViewTransition;
5
+ };
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/ui/tree-view/animated/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACtD,iBAAiB,CAAC,EAAE,kBAAkB,CAAC;CACxC,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkQHEHBC6M_js = require('../../chunk-QHEHBC6M.js');
5
+ require('../../chunk-ZS5756ZC.js');
6
+ var react = require('react');
7
+ var framerMotion = require('framer-motion');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ // src/ui/tree-view/animated/animations.ts
11
+ var treeViewTransitionPresets = {
12
+ none: { duration: 0 },
13
+ default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },
14
+ smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },
15
+ slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] }
16
+ };
17
+ function createAnimatedGroup(transitionVariant) {
18
+ const transition = treeViewTransitionPresets[transitionVariant];
19
+ const motionless = transitionVariant === "none";
20
+ function AnimatedTreeGroup({ open, children }) {
21
+ return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { initial: false, children: open ? /* @__PURE__ */ jsxRuntime.jsx(
22
+ framerMotion.motion.ul,
23
+ {
24
+ role: "group",
25
+ "data-slot": "tree-view-group",
26
+ className: "m-0 list-none overflow-hidden p-0",
27
+ initial: motionless ? false : { height: 0, opacity: 0 },
28
+ animate: motionless ? void 0 : { height: "auto", opacity: 1 },
29
+ exit: motionless ? void 0 : { height: 0, opacity: 0 },
30
+ transition,
31
+ children
32
+ }
33
+ ) : null });
34
+ }
35
+ AnimatedTreeGroup.displayName = "AnimatedTreeGroup";
36
+ return AnimatedTreeGroup;
37
+ }
38
+ function TreeViewAnimated({
39
+ transitionVariant = "default",
40
+ ...props
41
+ }) {
42
+ const GroupComponent = react.useMemo(
43
+ () => createAnimatedGroup(transitionVariant),
44
+ [transitionVariant]
45
+ );
46
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQHEHBC6M_js.TreeViewBase, { ...props, GroupComponent });
47
+ }
48
+ TreeViewAnimated.displayName = "TreeViewAnimated";
49
+
50
+ exports.TreeViewAnimated = TreeViewAnimated;
51
+ exports.treeViewTransitionPresets = treeViewTransitionPresets;
52
+ //# sourceMappingURL=animated.js.map
53
+ //# sourceMappingURL=animated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/tree-view/animated/animations.ts","../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":["jsx","AnimatePresence","motion","useMemo","TreeViewBase"],"mappings":";;;;;;;;;AAOO,IAAM,yBAAA,GAAuD;AAAA,EAClE,IAAA,EAAM,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,EACpB,OAAA,EAAS,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,EACjD,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,EACnD,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAC/C;ACAA,SAAS,oBAAoB,iBAAA,EAAuC;AAClE,EAAA,MAAM,UAAA,GAAa,0BAA0B,iBAAiB,CAAA;AAC9D,EAAA,MAAM,aAAa,iBAAA,KAAsB,MAAA;AAEzC,EAAA,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAM,QAAA,EAAS,EAAmB;AAC7D,IAAA,uBACEA,cAAA,CAACC,4BAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,IAAA,mBACCD,cAAA;AAAA,MAACE,mBAAA,CAAO,EAAA;AAAA,MAAP;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAU,mCAAA;AAAA,QACV,SAAS,UAAA,GAAa,KAAA,GAAQ,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACtD,SAAS,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QAC/D,MAAM,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACvD,UAAA;AAAA,QAEC;AAAA;AAAA,QAED,IAAA,EACN,CAAA;AAAA,EAEJ;AAEA,EAAA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAChC,EAAA,OAAO,iBAAA;AACT;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,iBAAA,GAAoB,SAAA;AAAA,EACpB,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,cAAA,GAAiBC,aAAA;AAAA,IACrB,MAAM,oBAAoB,iBAAiB,CAAA;AAAA,IAC3C,CAAC,iBAAiB;AAAA,GACpB;AACA,EAAA,uBAAOH,cAAA,CAACI,6BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,cAAA,EAAgC,CAAA;AAClE;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"animated.js","sourcesContent":["import type { Transition } from \"framer-motion\";\n\n/** Easing and duration presets for tree group expand/collapse. */\nexport type TreeViewTransition = \"none\" | \"default\" | \"smooth\" | \"slow\";\n\nexport type TreeViewTransitionPresets = Record<TreeViewTransition, Transition>;\n\nexport const treeViewTransitionPresets: TreeViewTransitionPresets = {\n none: { duration: 0 },\n default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },\n smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },\n slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] },\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { TreeViewBase } from \"../tree-view-base\";\nimport type { TreeGroupProps } from \"../types\";\n\nimport { treeViewTransitionPresets } from \"./animations\";\nimport type { TreeViewAnimatedProps } from \"./types\";\nimport type { TreeViewTransition } from \"./animations\";\n\nfunction createAnimatedGroup(transitionVariant: TreeViewTransition) {\n const transition = treeViewTransitionPresets[transitionVariant];\n const motionless = transitionVariant === \"none\";\n\n function AnimatedTreeGroup({ open, children }: TreeGroupProps) {\n return (\n <AnimatePresence initial={false}>\n {open ? (\n <motion.ul\n role=\"group\"\n data-slot=\"tree-view-group\"\n className=\"m-0 list-none overflow-hidden p-0\"\n initial={motionless ? false : { height: 0, opacity: 0 }}\n animate={motionless ? undefined : { height: \"auto\", opacity: 1 }}\n exit={motionless ? undefined : { height: 0, opacity: 0 }}\n transition={transition}\n >\n {children}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n );\n }\n\n AnimatedTreeGroup.displayName = \"AnimatedTreeGroup\";\n return AnimatedTreeGroup;\n}\n\nexport function TreeViewAnimated({\n transitionVariant = \"default\",\n ...props\n}: TreeViewAnimatedProps) {\n const GroupComponent = useMemo(\n () => createAnimatedGroup(transitionVariant),\n [transitionVariant],\n );\n return <TreeViewBase {...props} GroupComponent={GroupComponent} />;\n}\n\nTreeViewAnimated.displayName = \"TreeViewAnimated\";\n"]}
@@ -0,0 +1,50 @@
1
+ "use client";
2
+ import { TreeViewBase } from '../../chunk-GRJFGIZC.mjs';
3
+ import '../../chunk-4D54YOL6.mjs';
4
+ import { useMemo } from 'react';
5
+ import { AnimatePresence, motion } from 'framer-motion';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // src/ui/tree-view/animated/animations.ts
9
+ var treeViewTransitionPresets = {
10
+ none: { duration: 0 },
11
+ default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },
12
+ smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },
13
+ slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] }
14
+ };
15
+ function createAnimatedGroup(transitionVariant) {
16
+ const transition = treeViewTransitionPresets[transitionVariant];
17
+ const motionless = transitionVariant === "none";
18
+ function AnimatedTreeGroup({ open, children }) {
19
+ return /* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: open ? /* @__PURE__ */ jsx(
20
+ motion.ul,
21
+ {
22
+ role: "group",
23
+ "data-slot": "tree-view-group",
24
+ className: "m-0 list-none overflow-hidden p-0",
25
+ initial: motionless ? false : { height: 0, opacity: 0 },
26
+ animate: motionless ? void 0 : { height: "auto", opacity: 1 },
27
+ exit: motionless ? void 0 : { height: 0, opacity: 0 },
28
+ transition,
29
+ children
30
+ }
31
+ ) : null });
32
+ }
33
+ AnimatedTreeGroup.displayName = "AnimatedTreeGroup";
34
+ return AnimatedTreeGroup;
35
+ }
36
+ function TreeViewAnimated({
37
+ transitionVariant = "default",
38
+ ...props
39
+ }) {
40
+ const GroupComponent = useMemo(
41
+ () => createAnimatedGroup(transitionVariant),
42
+ [transitionVariant]
43
+ );
44
+ return /* @__PURE__ */ jsx(TreeViewBase, { ...props, GroupComponent });
45
+ }
46
+ TreeViewAnimated.displayName = "TreeViewAnimated";
47
+
48
+ export { TreeViewAnimated, treeViewTransitionPresets };
49
+ //# sourceMappingURL=animated.mjs.map
50
+ //# sourceMappingURL=animated.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/ui/tree-view/animated/animations.ts","../../../src/ui/tree-view/animated/tree-view-animated.tsx"],"names":[],"mappings":";;;;;;;AAOO,IAAM,yBAAA,GAAuD;AAAA,EAClE,IAAA,EAAM,EAAE,QAAA,EAAU,CAAA,EAAE;AAAA,EACpB,OAAA,EAAS,EAAE,QAAA,EAAU,GAAA,EAAK,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA,EAAE;AAAA,EACjD,MAAA,EAAQ,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,EAAE;AAAA,EACnD,IAAA,EAAM,EAAE,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAC/C;ACAA,SAAS,oBAAoB,iBAAA,EAAuC;AAClE,EAAA,MAAM,UAAA,GAAa,0BAA0B,iBAAiB,CAAA;AAC9D,EAAA,MAAM,aAAa,iBAAA,KAAsB,MAAA;AAEzC,EAAA,SAAS,iBAAA,CAAkB,EAAE,IAAA,EAAM,QAAA,EAAS,EAAmB;AAC7D,IAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACvB,QAAA,EAAA,IAAA,mBACC,GAAA;AAAA,MAAC,MAAA,CAAO,EAAA;AAAA,MAAP;AAAA,QACC,IAAA,EAAK,OAAA;AAAA,QACL,WAAA,EAAU,iBAAA;AAAA,QACV,SAAA,EAAU,mCAAA;AAAA,QACV,SAAS,UAAA,GAAa,KAAA,GAAQ,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACtD,SAAS,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QAC/D,MAAM,UAAA,GAAa,MAAA,GAAY,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACvD,UAAA;AAAA,QAEC;AAAA;AAAA,QAED,IAAA,EACN,CAAA;AAAA,EAEJ;AAEA,EAAA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;AAChC,EAAA,OAAO,iBAAA;AACT;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,iBAAA,GAAoB,SAAA;AAAA,EACpB,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,cAAA,GAAiB,OAAA;AAAA,IACrB,MAAM,oBAAoB,iBAAiB,CAAA;AAAA,IAC3C,CAAC,iBAAiB;AAAA,GACpB;AACA,EAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,cAAA,EAAgC,CAAA;AAClE;AAEA,gBAAA,CAAiB,WAAA,GAAc,kBAAA","file":"animated.mjs","sourcesContent":["import type { Transition } from \"framer-motion\";\n\n/** Easing and duration presets for tree group expand/collapse. */\nexport type TreeViewTransition = \"none\" | \"default\" | \"smooth\" | \"slow\";\n\nexport type TreeViewTransitionPresets = Record<TreeViewTransition, Transition>;\n\nexport const treeViewTransitionPresets: TreeViewTransitionPresets = {\n none: { duration: 0 },\n default: { duration: 0.2, ease: [0.4, 0, 0.2, 1] },\n smooth: { duration: 0.28, ease: [0.22, 1, 0.36, 1] },\n slow: { duration: 0.38, ease: [0.4, 0, 0.2, 1] },\n};\n","\"use client\";\n\nimport { useMemo } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\n\nimport { TreeViewBase } from \"../tree-view-base\";\nimport type { TreeGroupProps } from \"../types\";\n\nimport { treeViewTransitionPresets } from \"./animations\";\nimport type { TreeViewAnimatedProps } from \"./types\";\nimport type { TreeViewTransition } from \"./animations\";\n\nfunction createAnimatedGroup(transitionVariant: TreeViewTransition) {\n const transition = treeViewTransitionPresets[transitionVariant];\n const motionless = transitionVariant === \"none\";\n\n function AnimatedTreeGroup({ open, children }: TreeGroupProps) {\n return (\n <AnimatePresence initial={false}>\n {open ? (\n <motion.ul\n role=\"group\"\n data-slot=\"tree-view-group\"\n className=\"m-0 list-none overflow-hidden p-0\"\n initial={motionless ? false : { height: 0, opacity: 0 }}\n animate={motionless ? undefined : { height: \"auto\", opacity: 1 }}\n exit={motionless ? undefined : { height: 0, opacity: 0 }}\n transition={transition}\n >\n {children}\n </motion.ul>\n ) : null}\n </AnimatePresence>\n );\n }\n\n AnimatedTreeGroup.displayName = \"AnimatedTreeGroup\";\n return AnimatedTreeGroup;\n}\n\nexport function TreeViewAnimated({\n transitionVariant = \"default\",\n ...props\n}: TreeViewAnimatedProps) {\n const GroupComponent = useMemo(\n () => createAnimatedGroup(transitionVariant),\n [transitionVariant],\n );\n return <TreeViewBase {...props} GroupComponent={GroupComponent} />;\n}\n\nTreeViewAnimated.displayName = \"TreeViewAnimated\";\n"]}
@@ -0,0 +1,5 @@
1
+ export { TreeView } from "./tree-view";
2
+ export { TreeViewBase } from "./tree-view-base";
3
+ export type { TreeNode, TreeViewBaseProps, TreeViewProps, TreeViewRenderArgs, TreeViewVariantProps, TreeGroupProps, } from "./types";
4
+ export { treeViewVariants, treeViewItemVariants } from "./variants";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { TreeViewBaseProps, TreeViewCtx } from "./types";
2
+ /**
3
+ * Reads the shared tree-view state from context and fails early when a tree item
4
+ * is rendered outside the TreeView provider. The component name keeps the error
5
+ * message actionable for consumers composing custom tree-view pieces.
6
+ */
7
+ declare function useTreeViewContext(component: string): TreeViewCtx;
8
+ export declare function TreeViewBase({ data, defaultExpanded, expanded, onExpandedChange, defaultSelected, selected, onSelect, renderNode, showGuides, appearance, size, className, GroupComponent, ...rest }: TreeViewBaseProps & {
9
+ GroupComponent?: TreeViewCtx["GroupComponent"];
10
+ }): import("react/jsx-runtime").JSX.Element;
11
+ export declare namespace TreeViewBase {
12
+ var displayName: string;
13
+ }
14
+ export { useTreeViewContext };
15
+ //# sourceMappingURL=tree-view-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view-base.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/tree-view-base.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAGV,iBAAiB,EACjB,WAAW,EACZ,MAAM,SAAS,CAAC;AAMjB;;;;GAIG;AACH,iBAAS,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAM1D;AAwKD,wBAAgB,YAAY,CAAC,EAC3B,IAAS,EACT,eAAe,EACf,QAAQ,EACR,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAkB,EAClB,UAAsB,EACtB,IAAW,EACX,SAAS,EACT,cAAgC,EAChC,GAAG,IAAI,EACR,EAAE,iBAAiB,GAAG;IACrB,cAAc,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;CAChD,2CA0QA;yBA3Re,YAAY;;;AA+R5B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { TreeViewProps } from "./types";
2
+ export declare function TreeView(props: TreeViewProps): import("react/jsx-runtime").JSX.Element;
3
+ export declare namespace TreeView {
4
+ var displayName: string;
5
+ }
6
+ //# sourceMappingURL=tree-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/tree-view.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAE5C;yBAFe,QAAQ"}
@@ -0,0 +1,61 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import type { ComponentType, ReactNode } from "react";
3
+ import type { treeViewVariants } from "./variants";
4
+ export type TreeViewVariantProps = VariantProps<typeof treeViewVariants>;
5
+ export type TreeNode = {
6
+ /** Stable, unique identifier used for expansion and selection state. */
7
+ id: string;
8
+ label: ReactNode;
9
+ /** Optional leading icon rendered before the label. */
10
+ icon?: ReactNode;
11
+ children?: TreeNode[];
12
+ disabled?: boolean;
13
+ };
14
+ export type TreeViewRenderArgs = {
15
+ node: TreeNode;
16
+ depth: number;
17
+ isExpanded: boolean;
18
+ isSelected: boolean;
19
+ };
20
+ export type TreeViewBaseProps = TreeViewVariantProps & {
21
+ data: TreeNode[];
22
+ /** Uncontrolled set of expanded node ids. */
23
+ defaultExpanded?: string[];
24
+ /** Controlled set of expanded node ids. */
25
+ expanded?: string[];
26
+ onExpandedChange?: (ids: string[]) => void;
27
+ /** Uncontrolled selected node id. */
28
+ defaultSelected?: string;
29
+ /** Controlled selected node id. */
30
+ selected?: string;
31
+ onSelect?: (node: TreeNode) => void;
32
+ /** Replace the default label rendering for each node. */
33
+ renderNode?: (args: TreeViewRenderArgs) => ReactNode;
34
+ /** Draw vertical indentation guide lines for nested levels. */
35
+ showGuides?: boolean;
36
+ className?: string;
37
+ "aria-label"?: string;
38
+ "aria-labelledby"?: string;
39
+ };
40
+ export type TreeViewProps = TreeViewBaseProps;
41
+ export type TreeGroupProps = {
42
+ open: boolean;
43
+ level: number;
44
+ children: ReactNode;
45
+ };
46
+ export type TreeViewCtx = {
47
+ appearance: NonNullable<TreeViewBaseProps["appearance"]>;
48
+ size: NonNullable<TreeViewBaseProps["size"]>;
49
+ showGuides: boolean;
50
+ GroupComponent: ComponentType<TreeGroupProps>;
51
+ isExpanded: (id: string) => boolean;
52
+ toggleExpanded: (id: string) => void;
53
+ setExpanded: (id: string, open: boolean) => void;
54
+ selectedId: string | undefined;
55
+ activeId: string | undefined;
56
+ selectNode: (node: TreeNode) => void;
57
+ registerItem: (id: string, el: HTMLDivElement | null) => void;
58
+ onItemKeyDown: (event: React.KeyboardEvent<HTMLDivElement>) => void;
59
+ renderNode?: (args: TreeViewRenderArgs) => ReactNode;
60
+ };
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare const treeViewVariants: (props?: ({
2
+ appearance?: "default" | "outline" | "sky" | "emerald" | "rose" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "ghost" | "card" | "separated" | null | undefined;
3
+ size?: "md" | "sm" | "lg" | null | undefined;
4
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
5
+ export declare const treeViewItemVariants: (props?: ({
6
+ appearance?: "default" | "outline" | "sky" | "emerald" | "rose" | "indigo" | "orange" | "pink" | "purple" | "teal" | "yellow" | "gradient-blue" | "gradient-green" | "gradient-red" | "gradient-yellow" | "gradient-purple" | "gradient-teal" | "gradient-indigo" | "gradient-pink" | "gradient-orange" | "ghost" | "card" | "separated" | null | undefined;
7
+ size?: "md" | "sm" | "lg" | null | undefined;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/ui/tree-view/variants.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB;;;8EAS3B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;8EAS/B,CAAC"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunkQHEHBC6M_js = require('../chunk-QHEHBC6M.js');
5
+ require('../chunk-ZS5756ZC.js');
6
+ var jsxRuntime = require('react/jsx-runtime');
7
+
8
+ function TreeView(props) {
9
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkQHEHBC6M_js.TreeViewBase, { ...props });
10
+ }
11
+ TreeView.displayName = "TreeView";
12
+
13
+ Object.defineProperty(exports, "TreeViewBase", {
14
+ enumerable: true,
15
+ get: function () { return chunkQHEHBC6M_js.TreeViewBase; }
16
+ });
17
+ Object.defineProperty(exports, "treeViewItemVariants", {
18
+ enumerable: true,
19
+ get: function () { return chunkQHEHBC6M_js.treeViewItemVariants; }
20
+ });
21
+ Object.defineProperty(exports, "treeViewVariants", {
22
+ enumerable: true,
23
+ get: function () { return chunkQHEHBC6M_js.treeViewVariants; }
24
+ });
25
+ exports.TreeView = TreeView;
26
+ //# sourceMappingURL=tree-view.js.map
27
+ //# sourceMappingURL=tree-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/tree-view/tree-view.tsx"],"names":["jsx","TreeViewBase"],"mappings":";;;;;;AAIO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAOA,cAAA,CAACC,6BAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"tree-view.js","sourcesContent":["// tree-view.tsx — default static entry (no framer-motion on expand/collapse)\nimport { TreeViewBase } from \"./tree-view-base\";\nimport type { TreeViewProps } from \"./types\";\n\nexport function TreeView(props: TreeViewProps) {\n return <TreeViewBase {...props} />;\n}\n\nTreeView.displayName = \"TreeView\";\n"]}
@@ -0,0 +1,14 @@
1
+ "use client";
2
+ import { TreeViewBase } from '../chunk-GRJFGIZC.mjs';
3
+ export { TreeViewBase, treeViewItemVariants, treeViewVariants } from '../chunk-GRJFGIZC.mjs';
4
+ import '../chunk-4D54YOL6.mjs';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ function TreeView(props) {
8
+ return /* @__PURE__ */ jsx(TreeViewBase, { ...props });
9
+ }
10
+ TreeView.displayName = "TreeView";
11
+
12
+ export { TreeView };
13
+ //# sourceMappingURL=tree-view.mjs.map
14
+ //# sourceMappingURL=tree-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/tree-view/tree-view.tsx"],"names":[],"mappings":";;;;;AAIO,SAAS,SAAS,KAAA,EAAsB;AAC7C,EAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,CAAA;AAClC;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"tree-view.mjs","sourcesContent":["// tree-view.tsx — default static entry (no framer-motion on expand/collapse)\nimport { TreeViewBase } from \"./tree-view-base\";\nimport type { TreeViewProps } from \"./types\";\n\nexport function TreeView(props: TreeViewProps) {\n return <TreeViewBase {...props} />;\n}\n\nTreeView.displayName = \"TreeView\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zentauri-ui/zentauri-components",
3
- "version": "1.7.5",
3
+ "version": "1.7.7",
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
  "license": "MIT",
6
6
  "files": [
@@ -0,0 +1,44 @@
1
+ import {
2
+ zuiDropdownItemBase,
3
+ zuiDropdownItemVariants,
4
+ zuiDropdownSpacing,
5
+ } from "./dropdown";
6
+
7
+ export const zuiContextMenuContentBase =
8
+ "min-w-[220px] rounded-lg border border-[color:var(--zui-dropdown-content-border,oklch(20.8%_0.042_265.755_/_0.1))] bg-[var(--zui-dropdown-content-bg,oklch(96.8%_0.007_247.896))] p-2 text-[color:var(--zui-dropdown-content-fg,oklch(20.8%_0.042_265.755))] shadow-lg outline-none dark:border-[color:var(--zui-dropdown-content-border-dark,#ffffff1a)] dark:bg-[var(--zui-dropdown-content-bg-dark,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-dropdown-content-fg-dark,oklch(96.8%_0.007_247.896))]";
9
+
10
+ export const zuiContextMenuItemBase = zuiDropdownItemBase;
11
+
12
+ export const zuiContextMenuItemVariants = {
13
+ ...zuiDropdownItemVariants,
14
+ ghost: `${zuiDropdownItemVariants.ghost} dark:bg-[var(--zui-dropdown-item-ghost-bg-dark,transparent)]`,
15
+ sky: `${zuiDropdownItemVariants.sky} dark:bg-[var(--zui-dropdown-item-sky-bg-dark,oklch(29.3%_0.066_243.157))] dark:text-[color:var(--zui-dropdown-item-sky-fg-dark,oklch(90.1%_0.058_230.902))] dark:hover:text-[color:var(--zui-dropdown-item-sky-fg-hover-dark,oklch(90.1%_0.058_230.902))]`,
16
+ rose: `${zuiDropdownItemVariants.rose} dark:bg-[var(--zui-dropdown-item-rose-bg-dark,oklch(27.1%_0.105_12.094))] dark:text-[color:var(--zui-dropdown-item-rose-fg-dark,oklch(89.2%_0.058_10.001))] dark:hover:text-[color:var(--zui-dropdown-item-rose-fg-hover-dark,oklch(89.2%_0.058_10.001))]`,
17
+ purple: `${zuiDropdownItemVariants.purple} dark:bg-[var(--zui-dropdown-item-purple-bg-dark,oklch(29.1%_0.149_302.717))] dark:text-[color:var(--zui-dropdown-item-purple-fg-dark,oklch(90.2%_0.063_306.703))] dark:hover:text-[color:var(--zui-dropdown-item-purple-fg-hover-dark,oklch(90.2%_0.063_306.703))]`,
18
+ pink: `${zuiDropdownItemVariants.pink} dark:bg-[var(--zui-dropdown-item-pink-bg-dark,oklch(28.4%_0.109_3.907))] dark:text-[color:var(--zui-dropdown-item-pink-fg-dark,oklch(89.9%_0.061_343.231))] dark:hover:text-[color:var(--zui-dropdown-item-pink-fg-hover-dark,oklch(89.9%_0.061_343.231))]`,
19
+ orange: `${zuiDropdownItemVariants.orange} dark:bg-[var(--zui-dropdown-item-orange-bg-dark,oklch(26.6%_0.079_36.259))] dark:text-[color:var(--zui-dropdown-item-orange-fg-dark,oklch(90.1%_0.076_70.697))] dark:hover:text-[color:var(--zui-dropdown-item-orange-fg-hover-dark,oklch(90.1%_0.076_70.697))]`,
20
+ yellow: `${zuiDropdownItemVariants.yellow} dark:bg-[var(--zui-dropdown-item-yellow-bg-dark,oklch(28.6%_0.066_53.813))] dark:text-[color:var(--zui-dropdown-item-yellow-fg-dark,oklch(94.5%_0.129_101.54))] dark:hover:text-[color:var(--zui-dropdown-item-yellow-fg-hover-dark,oklch(94.5%_0.129_101.54))]`,
21
+ teal: `${zuiDropdownItemVariants.teal} dark:bg-[var(--zui-dropdown-item-teal-bg-dark,oklch(27.7%_0.046_192.524))] dark:text-[color:var(--zui-dropdown-item-teal-fg-dark,oklch(91%_0.096_180.426))] dark:hover:text-[color:var(--zui-dropdown-item-teal-fg-hover-dark,oklch(91%_0.096_180.426))]`,
22
+ indigo: `${zuiDropdownItemVariants.indigo} dark:bg-[var(--zui-dropdown-item-indigo-bg-dark,oklch(25.7%_0.09_281.288))] dark:text-[color:var(--zui-dropdown-item-indigo-fg-dark,oklch(87%_0.065_274.039))] dark:hover:text-[color:var(--zui-dropdown-item-indigo-fg-hover-dark,oklch(87%_0.065_274.039))]`,
23
+ emerald: `${zuiDropdownItemVariants.emerald} dark:bg-[var(--zui-dropdown-item-emerald-bg-dark,oklch(26.2%_0.051_172.552))] dark:text-[color:var(--zui-dropdown-item-emerald-fg-dark,oklch(90.5%_0.093_164.15))] dark:hover:text-[color:var(--zui-dropdown-item-emerald-fg-hover-dark,oklch(90.5%_0.093_164.15))]`,
24
+ gray: `${zuiDropdownItemVariants.gray} dark:bg-[var(--zui-dropdown-item-gray-bg-dark,oklch(13%_0.028_261.692))] dark:text-[color:var(--zui-dropdown-item-gray-fg-dark,oklch(92.8%_0.006_264.531))] dark:hover:text-[color:var(--zui-dropdown-item-gray-fg-hover-dark,oklch(92.8%_0.006_264.531))]`,
25
+ amber: `${zuiDropdownItemVariants.amber} dark:bg-[var(--zui-dropdown-item-amber-bg-dark,oklch(27.9%_0.077_45.635))] dark:text-[color:var(--zui-dropdown-item-amber-fg-dark,oklch(92.4%_0.12_95.746))] dark:hover:text-[color:var(--zui-dropdown-item-amber-fg-hover-dark,oklch(92.4%_0.12_95.746))]`,
26
+ violet: `${zuiDropdownItemVariants.violet} dark:bg-[var(--zui-dropdown-item-violet-bg-dark,oklch(28.3%_0.141_291.089))] dark:text-[color:var(--zui-dropdown-item-violet-fg-dark,oklch(89.4%_0.057_293.283))] dark:hover:text-[color:var(--zui-dropdown-item-violet-fg-hover-dark,oklch(89.4%_0.057_293.283))]`,
27
+ "gradient-blue": `${zuiDropdownItemVariants["gradient-blue"]} dark:from-[var(--zui-dropdown-item-gradient-blue-from-dark,oklch(28.2%_0.091_267.935))] dark:to-[var(--zui-dropdown-item-gradient-blue-to-dark,oklch(29.1%_0.149_302.717))]`,
28
+ "gradient-green": `${zuiDropdownItemVariants["gradient-green"]} dark:from-[var(--zui-dropdown-item-gradient-green-from-dark,oklch(26.6%_0.065_152.934))] dark:to-[var(--zui-dropdown-item-gradient-green-to-dark,oklch(27.4%_0.072_132.109))]`,
29
+ "gradient-red": `${zuiDropdownItemVariants["gradient-red"]} dark:from-[var(--zui-dropdown-item-gradient-red-from-dark,oklch(25.8%_0.092_26.042))] dark:to-[var(--zui-dropdown-item-gradient-red-to-dark,oklch(28.4%_0.109_3.907))]`,
30
+ "gradient-yellow": `${zuiDropdownItemVariants["gradient-yellow"]} dark:from-[var(--zui-dropdown-item-gradient-yellow-from-dark,oklch(28.6%_0.066_53.813))] dark:to-[var(--zui-dropdown-item-gradient-yellow-to-dark,oklch(26.6%_0.079_36.259))]`,
31
+ "gradient-purple": `${zuiDropdownItemVariants["gradient-purple"]} dark:from-[var(--zui-dropdown-item-gradient-purple-from-dark,oklch(29.1%_0.149_302.717))] dark:to-[var(--zui-dropdown-item-gradient-purple-to-dark,oklch(28.4%_0.109_3.907))]`,
32
+ "gradient-teal": `${zuiDropdownItemVariants["gradient-teal"]} dark:from-[var(--zui-dropdown-item-gradient-teal-from-dark,oklch(27.7%_0.046_192.524))] dark:to-[var(--zui-dropdown-item-gradient-teal-to-dark,oklch(30.2%_0.056_229.695))]`,
33
+ "gradient-indigo": `${zuiDropdownItemVariants["gradient-indigo"]} dark:from-[var(--zui-dropdown-item-gradient-indigo-from-dark,oklch(25.7%_0.09_281.288))] dark:to-[var(--zui-dropdown-item-gradient-indigo-to-dark,oklch(29.1%_0.149_302.717))]`,
34
+ "gradient-pink": `${zuiDropdownItemVariants["gradient-pink"]} dark:from-[var(--zui-dropdown-item-gradient-pink-from-dark,oklch(28.4%_0.109_3.907))] dark:to-[var(--zui-dropdown-item-gradient-pink-to-dark,oklch(27.1%_0.105_12.094))]`,
35
+ "gradient-orange": `${zuiDropdownItemVariants["gradient-orange"]} dark:from-[var(--zui-dropdown-item-gradient-orange-from-dark,oklch(26.6%_0.079_36.259))] dark:to-[var(--zui-dropdown-item-gradient-orange-to-dark,oklch(25.8%_0.092_26.042))]`,
36
+ } as const;
37
+
38
+ export const zuiContextMenuSpacing = zuiDropdownSpacing;
39
+
40
+ export const zuiContextMenuLabelBase =
41
+ "px-3 py-2 text-xs font-semibold uppercase tracking-[0.18em] text-[color:var(--zui-dropdown-label-fg,oklch(55.1%_0.027_264.364))] dark:text-[color:var(--zui-dropdown-label-fg-dark,oklch(70.7%_0.022_261.325))]";
42
+
43
+ export const zuiContextMenuSeparatorBase =
44
+ "my-1 h-px bg-[var(--zui-dropdown-separator-bg,oklch(20.8%_0.042_265.755_/_0.12))] dark:bg-[var(--zui-dropdown-separator-bg-dark,#ffffff1a)]";
@@ -7,6 +7,7 @@ export * from "./button";
7
7
  export * from "./card";
8
8
  export * from "./checkbox";
9
9
  export * from "./command";
10
+ export * from "./context-menu";
10
11
  export * from "./divider";
11
12
  export * from "./drawer";
12
13
  export * from "./dropdown";
@@ -28,8 +29,10 @@ export * from "./spinner";
28
29
  export * from "./stepper";
29
30
  export * from "./table";
30
31
  export * from "./tabs";
32
+ export * from "./timeline";
31
33
  export * from "./toast";
32
34
  export * from "./tokens";
33
35
  export * from "./toggle";
34
36
  export * from "./tooltip";
37
+ export * from "./tree-view";
35
38
  export * from "./typography";
@@ -0,0 +1,87 @@
1
+ export const zuiTimelineBase = "flex w-full flex-col";
2
+
3
+ export const zuiTimelineItemBase = "relative flex gap-4";
4
+
5
+ export const zuiTimelineIndicatorBase =
6
+ "relative z-[1] grid shrink-0 place-items-center rounded-full border font-semibold transition-colors";
7
+
8
+ export const zuiTimelineIndicatorAppearances = {
9
+ default:
10
+ "border-[color:var(--zui-timeline-indicator-default-border,oklch(55.1%_0.027_264.364_/_0.6))] bg-[var(--zui-timeline-indicator-default-bg,oklch(55.1%_0.027_264.364_/_0.2))] text-[color:var(--zui-timeline-indicator-default-fg,oklch(21%_0.034_264.665))] dark:text-[color:var(--zui-timeline-indicator-default-fg-dark,oklch(96.7%_0.003_264.542))] ring-2 ring-[var(--zui-timeline-indicator-default-ring,oklch(70.7%_0.022_261.325_/_0.3))]",
11
+ sky: "border-[color:var(--zui-timeline-indicator-sky-border,oklch(68.5%_0.169_237.323_/_0.6))] bg-[var(--zui-timeline-indicator-sky-bg,oklch(68.5%_0.169_237.323_/_0.2))] text-[color:var(--zui-timeline-indicator-sky-fg,oklch(39.1%_0.09_240.876))] dark:text-[color:var(--zui-timeline-indicator-sky-fg-dark,oklch(95.1%_0.026_236.824))] ring-2 ring-[var(--zui-timeline-indicator-sky-ring,oklch(74.6%_0.16_232.661_/_0.3))]",
12
+ rose: "border-[color:var(--zui-timeline-indicator-rose-border,oklch(64.5%_0.246_16.439_/_0.6))] bg-[var(--zui-timeline-indicator-rose-bg,oklch(64.5%_0.246_16.439_/_0.2))] text-[color:var(--zui-timeline-indicator-rose-fg,oklch(41%_0.159_10.272))] dark:text-[color:var(--zui-timeline-indicator-rose-fg-dark,oklch(94.1%_0.03_12.58))] ring-2 ring-[var(--zui-timeline-indicator-rose-ring,oklch(71.2%_0.194_13.428_/_0.3))]",
13
+ purple:
14
+ "border-[color:var(--zui-timeline-indicator-purple-border,oklch(62.7%_0.265_303.9_/_0.6))] bg-[var(--zui-timeline-indicator-purple-bg,oklch(62.7%_0.265_303.9_/_0.2))] text-[color:var(--zui-timeline-indicator-purple-fg,oklch(38.1%_0.176_304.987))] dark:text-[color:var(--zui-timeline-indicator-purple-fg-dark,oklch(94.6%_0.033_307.174))] ring-2 ring-[var(--zui-timeline-indicator-purple-ring,oklch(71.4%_0.203_305.504_/_0.3))]",
15
+ pink: "border-[color:var(--zui-timeline-indicator-pink-border,oklch(65.6%_0.241_354.308_/_0.6))] bg-[var(--zui-timeline-indicator-pink-bg,oklch(65.6%_0.241_354.308_/_0.2))] text-[color:var(--zui-timeline-indicator-pink-fg,oklch(40.8%_0.153_2.432))] dark:text-[color:var(--zui-timeline-indicator-pink-fg-dark,oklch(94.8%_0.028_342.258))] ring-2 ring-[var(--zui-timeline-indicator-pink-ring,oklch(71.8%_0.202_349.761_/_0.3))]",
16
+ orange:
17
+ "border-[color:var(--zui-timeline-indicator-orange-border,oklch(70.5%_0.213_47.604_/_0.6))] bg-[var(--zui-timeline-indicator-orange-bg,oklch(70.5%_0.213_47.604_/_0.2))] text-[color:var(--zui-timeline-indicator-orange-fg,oklch(40.8%_0.123_38.172))] dark:text-[color:var(--zui-timeline-indicator-orange-fg-dark,oklch(95.4%_0.038_75.164))] ring-2 ring-[var(--zui-timeline-indicator-orange-ring,oklch(75%_0.183_55.934_/_0.3))]",
18
+ yellow:
19
+ "border-[color:var(--zui-timeline-indicator-yellow-border,oklch(79.5%_0.184_86.047_/_0.6))] bg-[var(--zui-timeline-indicator-yellow-bg,oklch(79.5%_0.184_86.047_/_0.2))] text-[color:var(--zui-timeline-indicator-yellow-fg,oklch(42.1%_0.095_57.708))] dark:text-[color:var(--zui-timeline-indicator-yellow-fg-dark,oklch(97.3%_0.071_103.193))] ring-2 ring-[var(--zui-timeline-indicator-yellow-ring,oklch(85.2%_0.199_91.936_/_0.3))]",
20
+ teal: "border-[color:var(--zui-timeline-indicator-teal-border,oklch(70.4%_0.14_182.503_/_0.6))] bg-[var(--zui-timeline-indicator-teal-bg,oklch(70.4%_0.14_182.503_/_0.2))] text-[color:var(--zui-timeline-indicator-teal-fg,oklch(38.6%_0.063_188.416))] dark:text-[color:var(--zui-timeline-indicator-teal-fg-dark,oklch(95.3%_0.051_180.801))] ring-2 ring-[var(--zui-timeline-indicator-teal-ring,oklch(77.7%_0.152_181.912_/_0.3))]",
21
+ indigo:
22
+ "border-[color:var(--zui-timeline-indicator-indigo-border,oklch(58.5%_0.233_277.117_/_0.6))] bg-[var(--zui-timeline-indicator-indigo-bg,oklch(58.5%_0.233_277.117_/_0.2))] text-[color:var(--zui-timeline-indicator-indigo-fg,oklch(35.9%_0.144_278.697))] dark:text-[color:var(--zui-timeline-indicator-indigo-fg-dark,oklch(93%_0.034_272.788))] ring-2 ring-[var(--zui-timeline-indicator-indigo-ring,oklch(67.3%_0.182_276.935_/_0.3))]",
23
+ emerald:
24
+ "border-[color:var(--zui-timeline-indicator-emerald-border,oklch(69.6%_0.17_162.48_/_0.6))] bg-[var(--zui-timeline-indicator-emerald-bg,oklch(69.6%_0.17_162.48_/_0.2))] text-[color:var(--zui-timeline-indicator-emerald-fg,oklch(37.8%_0.077_168.94))] dark:text-[color:var(--zui-timeline-indicator-emerald-fg-dark,oklch(95%_0.052_163.051))] ring-2 ring-[var(--zui-timeline-indicator-emerald-ring,oklch(76.5%_0.177_163.223_/_0.3))]",
25
+ gray: "border-[color:var(--zui-timeline-indicator-gray-border,oklch(55.1%_0.027_264.364_/_0.6))] bg-[var(--zui-timeline-indicator-gray-bg,oklch(55.1%_0.027_264.364_/_0.2))] text-[color:var(--zui-timeline-indicator-gray-fg,oklch(21%_0.034_264.665))] dark:text-[color:var(--zui-timeline-indicator-gray-fg-dark,oklch(96.7%_0.003_264.542))] ring-2 ring-[var(--zui-timeline-indicator-gray-ring,oklch(70.7%_0.022_261.325_/_0.3))]",
26
+ violet:
27
+ "border-[color:var(--zui-timeline-indicator-violet-border,oklch(60.6%_0.25_292.717_/_0.6))] bg-[var(--zui-timeline-indicator-violet-bg,oklch(60.6%_0.25_292.717_/_0.2))] text-[color:var(--zui-timeline-indicator-violet-fg,oklch(38%_0.189_293.745))] dark:text-[color:var(--zui-timeline-indicator-violet-fg-dark,oklch(94.3%_0.029_294.588))] ring-2 ring-[var(--zui-timeline-indicator-violet-ring,oklch(70.2%_0.183_293.541_/_0.3))]",
28
+ "gradient-blue":
29
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-blue-from,oklch(62.3%_0.214_259.815))] to-[var(--zui-timeline-indicator-gradient-blue-to,oklch(54.6%_0.245_262.881))] text-[color:var(--zui-timeline-indicator-gradient-blue-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-blue-ring,oklch(70.7%_0.165_254.624_/_0.3))]",
30
+ "gradient-green":
31
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-green-from,oklch(72.3%_0.219_149.579))] to-[var(--zui-timeline-indicator-gradient-green-to,oklch(62.7%_0.194_149.214))] text-[color:var(--zui-timeline-indicator-gradient-green-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-green-ring,oklch(79.2%_0.209_151.711_/_0.3))]",
32
+ "gradient-red":
33
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-red-from,oklch(63.7%_0.237_25.331))] to-[var(--zui-timeline-indicator-gradient-red-to,oklch(57.7%_0.245_27.325))] text-[color:var(--zui-timeline-indicator-gradient-red-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-red-ring,oklch(70.4%_0.191_22.216_/_0.3))]",
34
+ "gradient-yellow":
35
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-yellow-from,oklch(85.2%_0.199_91.936))] to-[var(--zui-timeline-indicator-gradient-yellow-to,oklch(79.5%_0.184_86.047))] text-[color:var(--zui-timeline-indicator-gradient-yellow-fg,oklch(42.1%_0.095_57.708))] ring-2 ring-[var(--zui-timeline-indicator-gradient-yellow-ring,oklch(85.2%_0.199_91.936_/_0.3))]",
36
+ "gradient-purple":
37
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-purple-from,oklch(71.4%_0.203_305.504))] to-[var(--zui-timeline-indicator-gradient-purple-to,oklch(62.7%_0.265_303.9))] text-[color:var(--zui-timeline-indicator-gradient-purple-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-purple-ring,oklch(71.4%_0.203_305.504_/_0.3))]",
38
+ "gradient-teal":
39
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-teal-from,oklch(77.7%_0.152_181.912))] to-[var(--zui-timeline-indicator-gradient-teal-to,oklch(70.4%_0.14_182.503))] text-[color:var(--zui-timeline-indicator-gradient-teal-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-teal-ring,oklch(77.7%_0.152_181.912_/_0.3))]",
40
+ "gradient-indigo":
41
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-indigo-from,oklch(67.3%_0.182_276.935))] to-[var(--zui-timeline-indicator-gradient-indigo-to,oklch(58.5%_0.233_277.117))] text-[color:var(--zui-timeline-indicator-gradient-indigo-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-indigo-ring,oklch(67.3%_0.182_276.935_/_0.3))]",
42
+ "gradient-pink":
43
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-pink-from,oklch(71.8%_0.202_349.761))] to-[var(--zui-timeline-indicator-gradient-pink-to,oklch(65.6%_0.241_354.308))] text-[color:var(--zui-timeline-indicator-gradient-pink-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-pink-ring,oklch(71.8%_0.202_349.761_/_0.3))]",
44
+ "gradient-orange":
45
+ "border-transparent bg-linear-to-br from-[var(--zui-timeline-indicator-gradient-orange-from,oklch(75%_0.183_55.934))] to-[var(--zui-timeline-indicator-gradient-orange-to,oklch(70.5%_0.213_47.604))] text-[color:var(--zui-timeline-indicator-gradient-orange-fg,#ffffff)] ring-2 ring-[var(--zui-timeline-indicator-gradient-orange-ring,oklch(75%_0.183_55.934_/_0.3))]",
46
+ } as const;
47
+
48
+ export const zuiTimelineIndicatorSizes = {
49
+ sm: "size-5 text-[0.625rem]",
50
+ md: "size-6 text-xs",
51
+ lg: "size-7 text-sm",
52
+ } as const;
53
+
54
+ export const zuiTimelineConnectorBase =
55
+ "pointer-events-none absolute bottom-0 w-px -translate-x-1/2 rounded-full bg-[var(--zui-timeline-connector,#0000001f)] dark:bg-[var(--zui-timeline-connector-dark,#ffffff1f)]";
56
+
57
+ export const zuiTimelineConnectorSizes = {
58
+ sm: "left-2.5 top-6",
59
+ md: "left-3 top-7",
60
+ lg: "left-3.5 top-8",
61
+ } as const;
62
+
63
+ export const zuiTimelineContentBase = "min-w-0 flex-1";
64
+
65
+ export const zuiTimelineContentSizes = {
66
+ sm: "pb-5",
67
+ md: "pb-6",
68
+ lg: "pb-8",
69
+ } as const;
70
+
71
+ export const zuiTimelineTitleBase =
72
+ "font-semibold text-[color:var(--zui-timeline-title-fg,oklch(20.8%_0.042_265.755))] dark:text-[color:var(--zui-timeline-title-fg-dark,#ffffff)]";
73
+
74
+ export const zuiTimelineTitleSizes = {
75
+ sm: "text-sm",
76
+ md: "text-sm",
77
+ lg: "text-base",
78
+ } as const;
79
+
80
+ export const zuiTimelineDescriptionBase =
81
+ "text-[color:var(--zui-timeline-description-fg,oklch(44.6%_0.03_256.802))] dark:text-[color:var(--zui-timeline-description-fg-dark,oklch(70.4%_0.04_256.788))]";
82
+
83
+ export const zuiTimelineDescriptionSizes = {
84
+ sm: "text-xs",
85
+ md: "text-xs",
86
+ lg: "text-sm",
87
+ } as const;