@mindlogic-ai/logician-ui 3.2.0-alpha.0 → 3.2.0-alpha.2

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 (246) hide show
  1. package/dist/components/Banner/Banner.js +1 -0
  2. package/dist/components/Banner/Banner.js.map +1 -1
  3. package/dist/components/Banner/Banner.mjs +1 -0
  4. package/dist/components/Banner/Banner.mjs.map +1 -1
  5. package/dist/components/ErrorFallback/ErrorFallback.js +1 -0
  6. package/dist/components/ErrorFallback/ErrorFallback.js.map +1 -1
  7. package/dist/components/ErrorFallback/ErrorFallback.mjs +1 -0
  8. package/dist/components/ErrorFallback/ErrorFallback.mjs.map +1 -1
  9. package/dist/components/ExpandableText/ExpandableText.js +1 -0
  10. package/dist/components/ExpandableText/ExpandableText.js.map +1 -1
  11. package/dist/components/ExpandableText/ExpandableText.mjs +1 -0
  12. package/dist/components/ExpandableText/ExpandableText.mjs.map +1 -1
  13. package/dist/components/FileInput/FileInput.js +1 -0
  14. package/dist/components/FileInput/FileInput.js.map +1 -1
  15. package/dist/components/FileInput/FileInput.mjs +1 -0
  16. package/dist/components/FileInput/FileInput.mjs.map +1 -1
  17. package/dist/components/FileItem/FileItem.js +1 -0
  18. package/dist/components/FileItem/FileItem.js.map +1 -1
  19. package/dist/components/FileItem/FileItem.mjs +1 -0
  20. package/dist/components/FileItem/FileItem.mjs.map +1 -1
  21. package/dist/components/FileList/FileList.js +1 -0
  22. package/dist/components/FileList/FileList.js.map +1 -1
  23. package/dist/components/FileList/FileList.mjs +1 -0
  24. package/dist/components/FileList/FileList.mjs.map +1 -1
  25. package/dist/components/Markdown/Markdown.js +1 -0
  26. package/dist/components/Markdown/Markdown.js.map +1 -1
  27. package/dist/components/Markdown/Markdown.mjs +1 -0
  28. package/dist/components/Markdown/Markdown.mjs.map +1 -1
  29. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.js +1 -0
  30. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.js.map +1 -1
  31. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.mjs +1 -0
  32. package/dist/components/MaxLengthIndicator/MaxLengthIndicator.mjs.map +1 -1
  33. package/dist/components/MonthPicker/MonthPicker.js +1 -0
  34. package/dist/components/MonthPicker/MonthPicker.js.map +1 -1
  35. package/dist/components/MonthPicker/MonthPicker.mjs +1 -0
  36. package/dist/components/MonthPicker/MonthPicker.mjs.map +1 -1
  37. package/dist/components/Pagination/Pagination.js +1 -0
  38. package/dist/components/Pagination/Pagination.js.map +1 -1
  39. package/dist/components/Pagination/Pagination.mjs +1 -0
  40. package/dist/components/Pagination/Pagination.mjs.map +1 -1
  41. package/dist/components/RadialProgress/RadialProgress.js +1 -0
  42. package/dist/components/RadialProgress/RadialProgress.js.map +1 -1
  43. package/dist/components/RadialProgress/RadialProgress.mjs +1 -0
  44. package/dist/components/RadialProgress/RadialProgress.mjs.map +1 -1
  45. package/dist/components/Tree/Tree.d.ts +20 -0
  46. package/dist/components/Tree/Tree.d.ts.map +1 -0
  47. package/dist/components/Tree/Tree.js +43 -0
  48. package/dist/components/Tree/Tree.js.map +1 -0
  49. package/dist/components/Tree/Tree.mjs +41 -0
  50. package/dist/components/Tree/Tree.mjs.map +1 -0
  51. package/dist/components/Tree/Tree.types.d.ts +21 -0
  52. package/dist/components/Tree/Tree.types.d.ts.map +1 -0
  53. package/dist/components/Tree/TreeBranch.d.ts +3 -0
  54. package/dist/components/Tree/TreeBranch.d.ts.map +1 -0
  55. package/dist/components/Tree/TreeBranch.js +14 -0
  56. package/dist/components/Tree/TreeBranch.js.map +1 -0
  57. package/dist/components/Tree/TreeBranch.mjs +12 -0
  58. package/dist/components/Tree/TreeBranch.mjs.map +1 -0
  59. package/dist/components/Tree/TreeBranchContent.d.ts +3 -0
  60. package/dist/components/Tree/TreeBranchContent.d.ts.map +1 -0
  61. package/dist/components/Tree/TreeBranchContent.js +14 -0
  62. package/dist/components/Tree/TreeBranchContent.js.map +1 -0
  63. package/dist/components/Tree/TreeBranchContent.mjs +12 -0
  64. package/dist/components/Tree/TreeBranchContent.mjs.map +1 -0
  65. package/dist/components/Tree/TreeBranchControl.d.ts +3 -0
  66. package/dist/components/Tree/TreeBranchControl.d.ts.map +1 -0
  67. package/dist/components/Tree/TreeBranchControl.js +19 -0
  68. package/dist/components/Tree/TreeBranchControl.js.map +1 -0
  69. package/dist/components/Tree/TreeBranchControl.mjs +17 -0
  70. package/dist/components/Tree/TreeBranchControl.mjs.map +1 -0
  71. package/dist/components/Tree/TreeBranchIndentGuide.d.ts +3 -0
  72. package/dist/components/Tree/TreeBranchIndentGuide.d.ts.map +1 -0
  73. package/dist/components/Tree/TreeBranchIndentGuide.js +20 -0
  74. package/dist/components/Tree/TreeBranchIndentGuide.js.map +1 -0
  75. package/dist/components/Tree/TreeBranchIndentGuide.mjs +18 -0
  76. package/dist/components/Tree/TreeBranchIndentGuide.mjs.map +1 -0
  77. package/dist/components/Tree/TreeBranchIndicator.d.ts +3 -0
  78. package/dist/components/Tree/TreeBranchIndicator.d.ts.map +1 -0
  79. package/dist/components/Tree/TreeBranchIndicator.js +15 -0
  80. package/dist/components/Tree/TreeBranchIndicator.js.map +1 -0
  81. package/dist/components/Tree/TreeBranchIndicator.mjs +13 -0
  82. package/dist/components/Tree/TreeBranchIndicator.mjs.map +1 -0
  83. package/dist/components/Tree/TreeBranchText.d.ts +3 -0
  84. package/dist/components/Tree/TreeBranchText.d.ts.map +1 -0
  85. package/dist/components/Tree/TreeBranchText.js +14 -0
  86. package/dist/components/Tree/TreeBranchText.js.map +1 -0
  87. package/dist/components/Tree/TreeBranchText.mjs +12 -0
  88. package/dist/components/Tree/TreeBranchText.mjs.map +1 -0
  89. package/dist/components/Tree/TreeBranchTrigger.d.ts +3 -0
  90. package/dist/components/Tree/TreeBranchTrigger.d.ts.map +1 -0
  91. package/dist/components/Tree/TreeBranchTrigger.js +15 -0
  92. package/dist/components/Tree/TreeBranchTrigger.js.map +1 -0
  93. package/dist/components/Tree/TreeBranchTrigger.mjs +13 -0
  94. package/dist/components/Tree/TreeBranchTrigger.mjs.map +1 -0
  95. package/dist/components/Tree/TreeItem.d.ts +3 -0
  96. package/dist/components/Tree/TreeItem.d.ts.map +1 -0
  97. package/dist/components/Tree/TreeItem.js +25 -0
  98. package/dist/components/Tree/TreeItem.js.map +1 -0
  99. package/dist/components/Tree/TreeItem.mjs +23 -0
  100. package/dist/components/Tree/TreeItem.mjs.map +1 -0
  101. package/dist/components/Tree/TreeItemIndicator.d.ts +3 -0
  102. package/dist/components/Tree/TreeItemIndicator.d.ts.map +1 -0
  103. package/dist/components/Tree/TreeItemIndicator.js +14 -0
  104. package/dist/components/Tree/TreeItemIndicator.js.map +1 -0
  105. package/dist/components/Tree/TreeItemIndicator.mjs +12 -0
  106. package/dist/components/Tree/TreeItemIndicator.mjs.map +1 -0
  107. package/dist/components/Tree/TreeItemText.d.ts +3 -0
  108. package/dist/components/Tree/TreeItemText.d.ts.map +1 -0
  109. package/dist/components/Tree/TreeItemText.js +14 -0
  110. package/dist/components/Tree/TreeItemText.js.map +1 -0
  111. package/dist/components/Tree/TreeItemText.mjs +12 -0
  112. package/dist/components/Tree/TreeItemText.mjs.map +1 -0
  113. package/dist/components/Tree/TreeLabel.d.ts +3 -0
  114. package/dist/components/Tree/TreeLabel.d.ts.map +1 -0
  115. package/dist/components/Tree/TreeLabel.js +14 -0
  116. package/dist/components/Tree/TreeLabel.js.map +1 -0
  117. package/dist/components/Tree/TreeLabel.mjs +12 -0
  118. package/dist/components/Tree/TreeLabel.mjs.map +1 -0
  119. package/dist/components/Tree/TreeNode.d.ts +5 -0
  120. package/dist/components/Tree/TreeNode.d.ts.map +1 -0
  121. package/dist/components/Tree/TreeNode.js +9 -0
  122. package/dist/components/Tree/TreeNode.js.map +1 -0
  123. package/dist/components/Tree/TreeNode.mjs +7 -0
  124. package/dist/components/Tree/TreeNode.mjs.map +1 -0
  125. package/dist/components/Tree/TreeNodeCheckbox.d.ts +3 -0
  126. package/dist/components/Tree/TreeNodeCheckbox.d.ts.map +1 -0
  127. package/dist/components/Tree/TreeNodeCheckbox.js +14 -0
  128. package/dist/components/Tree/TreeNodeCheckbox.js.map +1 -0
  129. package/dist/components/Tree/TreeNodeCheckbox.mjs +12 -0
  130. package/dist/components/Tree/TreeNodeCheckbox.mjs.map +1 -0
  131. package/dist/components/Tree/TreeNodeContext.d.ts +2 -0
  132. package/dist/components/Tree/TreeNodeContext.d.ts.map +1 -0
  133. package/dist/components/Tree/TreeNodeContext.js +9 -0
  134. package/dist/components/Tree/TreeNodeContext.js.map +1 -0
  135. package/dist/components/Tree/TreeNodeContext.mjs +7 -0
  136. package/dist/components/Tree/TreeNodeContext.mjs.map +1 -0
  137. package/dist/components/Tree/TreeNodeProvider.d.ts +5 -0
  138. package/dist/components/Tree/TreeNodeProvider.d.ts.map +1 -0
  139. package/dist/components/Tree/TreeNodeProvider.js +9 -0
  140. package/dist/components/Tree/TreeNodeProvider.js.map +1 -0
  141. package/dist/components/Tree/TreeNodeProvider.mjs +7 -0
  142. package/dist/components/Tree/TreeNodeProvider.mjs.map +1 -0
  143. package/dist/components/Tree/TreeRoot.d.ts +3 -0
  144. package/dist/components/Tree/TreeRoot.d.ts.map +1 -0
  145. package/dist/components/Tree/TreeRoot.js +14 -0
  146. package/dist/components/Tree/TreeRoot.js.map +1 -0
  147. package/dist/components/Tree/TreeRoot.mjs +12 -0
  148. package/dist/components/Tree/TreeRoot.mjs.map +1 -0
  149. package/dist/components/Tree/TreeTree.d.ts +3 -0
  150. package/dist/components/Tree/TreeTree.d.ts.map +1 -0
  151. package/dist/components/Tree/TreeTree.js +14 -0
  152. package/dist/components/Tree/TreeTree.js.map +1 -0
  153. package/dist/components/Tree/TreeTree.mjs +12 -0
  154. package/dist/components/Tree/TreeTree.mjs.map +1 -0
  155. package/dist/components/Tree/index.d.ts +23 -0
  156. package/dist/components/Tree/index.d.ts.map +1 -0
  157. package/dist/components/Typography/Overline.d.ts +14 -0
  158. package/dist/components/Typography/Overline.d.ts.map +1 -0
  159. package/dist/components/Typography/Overline.js +28 -0
  160. package/dist/components/Typography/Overline.js.map +1 -0
  161. package/dist/components/Typography/Overline.mjs +26 -0
  162. package/dist/components/Typography/Overline.mjs.map +1 -0
  163. package/dist/components/Typography/index.d.ts +2 -1
  164. package/dist/components/Typography/index.d.ts.map +1 -1
  165. package/dist/components/Workflow/canvas/Canvas/LabeledEdge.js +1 -0
  166. package/dist/components/Workflow/canvas/Canvas/LabeledEdge.js.map +1 -1
  167. package/dist/components/Workflow/canvas/Canvas/LabeledEdge.mjs +1 -0
  168. package/dist/components/Workflow/canvas/Canvas/LabeledEdge.mjs.map +1 -1
  169. package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.js +1 -0
  170. package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.js.map +1 -1
  171. package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.mjs +1 -0
  172. package/dist/components/Workflow/canvas/CollapsibleSection/CollapsibleSection.mjs.map +1 -1
  173. package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.js +1 -0
  174. package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.js.map +1 -1
  175. package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.mjs +1 -0
  176. package/dist/components/Workflow/canvas/DrawerShell/DrawerHeader.mjs.map +1 -1
  177. package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.js +1 -0
  178. package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.js.map +1 -1
  179. package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.mjs +1 -0
  180. package/dist/components/Workflow/canvas/DrawerShell/DrawerIssues.mjs.map +1 -1
  181. package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.js +1 -0
  182. package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.js.map +1 -1
  183. package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.mjs +1 -0
  184. package/dist/components/Workflow/canvas/DrawerShell/DrawerShell.mjs.map +1 -1
  185. package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.js +1 -0
  186. package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.js.map +1 -1
  187. package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.mjs +1 -0
  188. package/dist/components/Workflow/canvas/EdgeInspector/BuiltInEdgeInspector.mjs.map +1 -1
  189. package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.js +1 -0
  190. package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.js.map +1 -1
  191. package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.mjs +1 -0
  192. package/dist/components/Workflow/canvas/FieldWrapper/FieldWrapper.mjs.map +1 -1
  193. package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.js +1 -0
  194. package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.js.map +1 -1
  195. package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.mjs +1 -0
  196. package/dist/components/Workflow/canvas/GraphErrorBanner/GraphErrorBanner.mjs.map +1 -1
  197. package/dist/components/Workflow/canvas/IssueList/IssueList.js +1 -0
  198. package/dist/components/Workflow/canvas/IssueList/IssueList.js.map +1 -1
  199. package/dist/components/Workflow/canvas/IssueList/IssueList.mjs +1 -0
  200. package/dist/components/Workflow/canvas/IssueList/IssueList.mjs.map +1 -1
  201. package/dist/components/Workflow/canvas/NodePalette/NodePalette.js +1 -0
  202. package/dist/components/Workflow/canvas/NodePalette/NodePalette.js.map +1 -1
  203. package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs +1 -0
  204. package/dist/components/Workflow/canvas/NodePalette/NodePalette.mjs.map +1 -1
  205. package/dist/components/Workflow/canvas/NodeShell/NodeShell.js +1 -0
  206. package/dist/components/Workflow/canvas/NodeShell/NodeShell.js.map +1 -1
  207. package/dist/components/Workflow/canvas/NodeShell/NodeShell.mjs +1 -0
  208. package/dist/components/Workflow/canvas/NodeShell/NodeShell.mjs.map +1 -1
  209. package/dist/index.d.ts +2 -1
  210. package/dist/index.d.ts.map +1 -1
  211. package/dist/index.js +42 -0
  212. package/dist/index.js.map +1 -1
  213. package/dist/index.mjs +20 -1
  214. package/dist/index.mjs.map +1 -1
  215. package/dist/theme/index.d.ts.map +1 -1
  216. package/dist/theme/index.js +12 -0
  217. package/dist/theme/index.js.map +1 -1
  218. package/dist/theme/index.mjs +12 -0
  219. package/dist/theme/index.mjs.map +1 -1
  220. package/package.json +1 -1
  221. package/src/components/Tree/Tree.stories.tsx +564 -0
  222. package/src/components/Tree/Tree.tsx +37 -0
  223. package/src/components/Tree/Tree.types.ts +51 -0
  224. package/src/components/Tree/TreeBranch.tsx +11 -0
  225. package/src/components/Tree/TreeBranchContent.tsx +21 -0
  226. package/src/components/Tree/TreeBranchControl.tsx +28 -0
  227. package/src/components/Tree/TreeBranchIndentGuide.tsx +20 -0
  228. package/src/components/Tree/TreeBranchIndicator.tsx +27 -0
  229. package/src/components/Tree/TreeBranchText.tsx +19 -0
  230. package/src/components/Tree/TreeBranchTrigger.tsx +25 -0
  231. package/src/components/Tree/TreeItem.tsx +33 -0
  232. package/src/components/Tree/TreeItemIndicator.tsx +20 -0
  233. package/src/components/Tree/TreeItemText.tsx +19 -0
  234. package/src/components/Tree/TreeLabel.tsx +19 -0
  235. package/src/components/Tree/TreeNode.tsx +6 -0
  236. package/src/components/Tree/TreeNodeCheckbox.tsx +12 -0
  237. package/src/components/Tree/TreeNodeContext.tsx +3 -0
  238. package/src/components/Tree/TreeNodeProvider.tsx +6 -0
  239. package/src/components/Tree/TreeRoot.tsx +11 -0
  240. package/src/components/Tree/TreeTree.tsx +11 -0
  241. package/src/components/Tree/index.ts +42 -0
  242. package/src/components/Typography/Overline.tsx +33 -0
  243. package/src/components/Typography/Typography.stories.tsx +2 -1
  244. package/src/components/Typography/index.ts +2 -0
  245. package/src/index.ts +2 -0
  246. package/src/theme/index.ts +13 -0
@@ -0,0 +1,28 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { focusRing } from '@/utils/focusRing';
5
+
6
+ import { TreeBranchControlProps } from './Tree.types';
7
+
8
+ export const TreeBranchControl = forwardRef<
9
+ HTMLDivElement,
10
+ TreeBranchControlProps
11
+ >((props, ref) => {
12
+ // See TreeItem — same reason: the recipe's depth-based padding-inline-
13
+ // start (`var(--tree-offset)`) gets overridden if we re-declare `px`
14
+ // here. Only the color/state overrides remain. `cursor: pointer` is
15
+ // re-added because the recipe's `baseItemStyle` doesn't include it.
16
+ return (
17
+ <ChakraTreeView.BranchControl
18
+ ref={ref}
19
+ cursor="pointer"
20
+ color="fg.default"
21
+ _hover={{ bg: 'bg.subtle' }}
22
+ _selected={{ bg: 'primary.lightest', color: 'primary.dark' }}
23
+ {...focusRing}
24
+ {...props}
25
+ />
26
+ );
27
+ });
28
+ TreeBranchControl.displayName = 'TreeBranchControl';
@@ -0,0 +1,20 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeBranchIndentGuideProps } from './Tree.types';
5
+
6
+ export const TreeBranchIndentGuide = forwardRef<
7
+ HTMLDivElement,
8
+ TreeBranchIndentGuideProps
9
+ >((props, ref) => {
10
+ // Chakra v3's `branchIndentGuide` slot already renders the vertical
11
+ // line via `position: absolute`, `width: 1px`, `bg: border`, with
12
+ // `insetInlineStart` auto-calculated from tree depth. Don't add
13
+ // `ms`/`ps` (breaks the depth math, pushes the line over content)
14
+ // or `borderInlineStartWidth` (stacks a second 1px stroke on top of
15
+ // the slot's own bg-painted 1px). Only override `bg` to lighten.
16
+ return (
17
+ <ChakraTreeView.BranchIndentGuide ref={ref} bg="border.subtle" {...props} />
18
+ );
19
+ });
20
+ TreeBranchIndentGuide.displayName = 'TreeBranchIndentGuide';
@@ -0,0 +1,27 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { IoChevronForward } from '@/components/Icon';
5
+
6
+ import { TreeBranchIndicatorProps } from './Tree.types';
7
+
8
+ export const TreeBranchIndicator = forwardRef<
9
+ HTMLDivElement,
10
+ TreeBranchIndicatorProps
11
+ >(({ children, ...rest }, ref) => {
12
+ return (
13
+ <ChakraTreeView.BranchIndicator
14
+ ref={ref}
15
+ display="inline-flex"
16
+ alignItems="center"
17
+ justifyContent="center"
18
+ transition="transform 0.15s ease-out"
19
+ _open={{ transform: 'rotate(90deg)' }}
20
+ _motionReduce={{ transition: 'none' }}
21
+ {...rest}
22
+ >
23
+ {children ?? <IoChevronForward boxSize="xs" />}
24
+ </ChakraTreeView.BranchIndicator>
25
+ );
26
+ });
27
+ TreeBranchIndicator.displayName = 'TreeBranchIndicator';
@@ -0,0 +1,19 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeBranchTextProps } from './Tree.types';
5
+
6
+ export const TreeBranchText = forwardRef<HTMLSpanElement, TreeBranchTextProps>(
7
+ (props, ref) => {
8
+ return (
9
+ <ChakraTreeView.BranchText
10
+ ref={ref}
11
+ flex={1}
12
+ fontWeight="medium"
13
+ truncate
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+ );
19
+ TreeBranchText.displayName = 'TreeBranchText';
@@ -0,0 +1,25 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { focusRing } from '@/utils/focusRing';
5
+
6
+ import { TreeBranchTriggerProps } from './Tree.types';
7
+
8
+ export const TreeBranchTrigger = forwardRef<
9
+ HTMLDivElement,
10
+ TreeBranchTriggerProps
11
+ >((props, ref) => {
12
+ return (
13
+ <ChakraTreeView.BranchTrigger
14
+ ref={ref}
15
+ display="inline-flex"
16
+ alignItems="center"
17
+ justifyContent="center"
18
+ rounded="sm"
19
+ cursor="pointer"
20
+ {...focusRing}
21
+ {...props}
22
+ />
23
+ );
24
+ });
25
+ TreeBranchTrigger.displayName = 'TreeBranchTrigger';
@@ -0,0 +1,33 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { focusRing } from '@/utils/focusRing';
5
+
6
+ import { TreeItemProps } from './Tree.types';
7
+
8
+ export const TreeItem = forwardRef<HTMLDivElement, TreeItemProps>(
9
+ (props, ref) => {
10
+ // Chakra v3's `treeView.item` recipe already supplies layout,
11
+ // padding-block, gap, rounded etc — and crucially sets
12
+ // `padding-inline-start: var(--tree-offset)` so each item indents
13
+ // by its node depth. Don't re-set `px`/`py`/`display`/`gap`/`rounded`
14
+ // here or the recipe's depth-based start padding gets overridden
15
+ // and every item collapses to the same column (no indent guide
16
+ // alignment, items render under the vertical guide bars).
17
+ //
18
+ // `cursor` is the one common-sense interactive default the recipe
19
+ // does NOT supply, so we add it explicitly.
20
+ return (
21
+ <ChakraTreeView.Item
22
+ ref={ref}
23
+ cursor="pointer"
24
+ color="fg.default"
25
+ _hover={{ bg: 'bg.subtle' }}
26
+ _selected={{ bg: 'primary.lightest', color: 'primary.dark' }}
27
+ {...focusRing}
28
+ {...props}
29
+ />
30
+ );
31
+ }
32
+ );
33
+ TreeItem.displayName = 'TreeItem';
@@ -0,0 +1,20 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeItemIndicatorProps } from './Tree.types';
5
+
6
+ export const TreeItemIndicator = forwardRef<
7
+ HTMLDivElement,
8
+ TreeItemIndicatorProps
9
+ >((props, ref) => {
10
+ return (
11
+ <ChakraTreeView.ItemIndicator
12
+ ref={ref}
13
+ display="inline-flex"
14
+ alignItems="center"
15
+ justifyContent="center"
16
+ {...props}
17
+ />
18
+ );
19
+ });
20
+ TreeItemIndicator.displayName = 'TreeItemIndicator';
@@ -0,0 +1,19 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeItemTextProps } from './Tree.types';
5
+
6
+ export const TreeItemText = forwardRef<HTMLSpanElement, TreeItemTextProps>(
7
+ (props, ref) => {
8
+ return (
9
+ <ChakraTreeView.ItemText
10
+ ref={ref}
11
+ flex={1}
12
+ fontWeight="medium"
13
+ truncate
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+ );
19
+ TreeItemText.displayName = 'TreeItemText';
@@ -0,0 +1,19 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeLabelProps } from './Tree.types';
5
+
6
+ export const TreeLabel = forwardRef<HTMLLabelElement, TreeLabelProps>(
7
+ (props, ref) => {
8
+ return (
9
+ <ChakraTreeView.Label
10
+ ref={ref}
11
+ fontSize="sm"
12
+ fontWeight="semibold"
13
+ color="fg.muted"
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+ );
19
+ TreeLabel.displayName = 'TreeLabel';
@@ -0,0 +1,6 @@
1
+ import type { TreeViewNodeProps } from '@chakra-ui/react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ export type TreeNodeProps<T> = TreeViewNodeProps<T>;
5
+
6
+ export const TreeNode = ChakraTreeView.Node;
@@ -0,0 +1,12 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeNodeCheckboxProps } from './Tree.types';
5
+
6
+ export const TreeNodeCheckbox = forwardRef<
7
+ HTMLDivElement,
8
+ TreeNodeCheckboxProps
9
+ >((props, ref) => {
10
+ return <ChakraTreeView.NodeCheckbox ref={ref} {...props} />;
11
+ });
12
+ TreeNodeCheckbox.displayName = 'TreeNodeCheckbox';
@@ -0,0 +1,3 @@
1
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
2
+
3
+ export const TreeNodeContext = ChakraTreeView.NodeContext;
@@ -0,0 +1,6 @@
1
+ import type { TreeViewNodeProviderProps } from '@chakra-ui/react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ export type TreeNodeProviderProps<T> = TreeViewNodeProviderProps<T>;
5
+
6
+ export const TreeNodeProvider = ChakraTreeView.NodeProvider;
@@ -0,0 +1,11 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeRootProps } from './Tree.types';
5
+
6
+ export const TreeRoot = forwardRef<HTMLDivElement, TreeRootProps>(
7
+ (props, ref) => {
8
+ return <ChakraTreeView.Root ref={ref} {...props} />;
9
+ }
10
+ );
11
+ TreeRoot.displayName = 'TreeRoot';
@@ -0,0 +1,11 @@
1
+ import { forwardRef } from 'react';
2
+ import { TreeView as ChakraTreeView } from '@chakra-ui/react';
3
+
4
+ import { TreeTreeProps } from './Tree.types';
5
+
6
+ export const TreeTree = forwardRef<HTMLDivElement, TreeTreeProps>(
7
+ (props, ref) => {
8
+ return <ChakraTreeView.Tree ref={ref} {...props} />;
9
+ }
10
+ );
11
+ TreeTree.displayName = 'TreeTree';
@@ -0,0 +1,42 @@
1
+ export { Tree } from './Tree';
2
+ export type {
3
+ TreeBranchContentProps,
4
+ TreeBranchControlProps,
5
+ TreeBranchIndentGuideProps,
6
+ TreeBranchIndicatorProps,
7
+ TreeBranchProps,
8
+ TreeBranchTextProps,
9
+ TreeBranchTriggerProps,
10
+ TreeCheckedChangeDetails,
11
+ TreeCollection,
12
+ TreeExpandedChangeDetails,
13
+ TreeFocusChangeDetails,
14
+ TreeItemIndicatorProps,
15
+ TreeItemProps,
16
+ TreeItemTextProps,
17
+ TreeLabelProps,
18
+ TreeNodeCheckboxProps,
19
+ TreeRootProps,
20
+ TreeSelectionChangeDetails,
21
+ TreeTreeProps,
22
+ } from './Tree.types';
23
+ export { TreeBranch } from './TreeBranch';
24
+ export { TreeBranchContent } from './TreeBranchContent';
25
+ export { TreeBranchControl } from './TreeBranchControl';
26
+ export { TreeBranchIndentGuide } from './TreeBranchIndentGuide';
27
+ export { TreeBranchIndicator } from './TreeBranchIndicator';
28
+ export { TreeBranchText } from './TreeBranchText';
29
+ export { TreeBranchTrigger } from './TreeBranchTrigger';
30
+ export { TreeItem } from './TreeItem';
31
+ export { TreeItemIndicator } from './TreeItemIndicator';
32
+ export { TreeItemText } from './TreeItemText';
33
+ export { TreeLabel } from './TreeLabel';
34
+ export type { TreeNodeProps } from './TreeNode';
35
+ export { TreeNode } from './TreeNode';
36
+ export { TreeNodeCheckbox } from './TreeNodeCheckbox';
37
+ export { TreeNodeContext } from './TreeNodeContext';
38
+ export type { TreeNodeProviderProps } from './TreeNodeProvider';
39
+ export { TreeNodeProvider } from './TreeNodeProvider';
40
+ export { TreeRoot } from './TreeRoot';
41
+ export { TreeTree } from './TreeTree';
42
+ export { createTreeCollection } from '@chakra-ui/react';
@@ -0,0 +1,33 @@
1
+ import { forwardRef } from 'react';
2
+ import { Text, TextProps } from '@chakra-ui/react';
3
+
4
+ /**
5
+ * Small, uppercase, letter-spaced label used as a section "eyebrow" or category
6
+ * heading (e.g. an "EXECUTION MODE" eyebrow above a panel heading, or a
7
+ * "RECENT" group label).
8
+ *
9
+ * Part of the typography scale alongside `Subtext` — it shares the subtext size
10
+ * but adds the baked-in overline styling (`textStyle="overline"`: uppercase,
11
+ * wider tracking, medium weight). Every aspect stays one Chakra prop away, so
12
+ * brand/status variants are a single override (e.g. `color="primary.main"`,
13
+ * `fontWeight="extrabold"`).
14
+ */
15
+ export const Overline = forwardRef<HTMLParagraphElement, TextProps>(
16
+ (props, ref) => {
17
+ const { fontSize, ...rest } = props;
18
+
19
+ return (
20
+ <Text
21
+ ref={ref}
22
+ // If fontSize is provided, disable textStyle to allow the override
23
+ textStyle={fontSize ? undefined : 'overline'}
24
+ fontSize={fontSize}
25
+ color="slate.800"
26
+ wordBreak="keep-all"
27
+ {...rest}
28
+ />
29
+ );
30
+ }
31
+ );
32
+
33
+ Overline.displayName = 'Overline';
@@ -1,6 +1,6 @@
1
1
  import { Meta, StoryObj } from '@storybook/react';
2
2
 
3
- import { H1, H2, H3, H4, H5, Link, Subtext, Subtitle, Text } from '.';
3
+ import { H1, H2, H3, H4, H5, Link, Overline, Subtext, Subtitle, Text } from '.';
4
4
 
5
5
  const meta = {
6
6
  title: 'Components/Typography',
@@ -13,6 +13,7 @@ type Story = StoryObj<typeof Text>;
13
13
  export const AllTextStyles: Story = {
14
14
  render: (props) => (
15
15
  <>
16
+ <Overline {...props}>Overline - section eyebrow</Overline>
16
17
  <H1 {...props}>
17
18
  H1 - Lorem ipsum dolor sit amet,{' '}
18
19
  <Link variant="error" href="https://example.com">
@@ -5,6 +5,7 @@ export { H3 } from './H3';
5
5
  export { H4 } from './H4';
6
6
  export { H5 } from './H5';
7
7
  export { Link } from './Link';
8
+ export { Overline } from './Overline';
8
9
  export { Subtext } from './Subtext';
9
10
  export { Subtitle } from './Subtitle';
10
11
  export { Text } from './Text';
@@ -12,6 +13,7 @@ export { Text } from './Text';
12
13
  // Type exports
13
14
  export type { LinkCustomProps as LinkProps } from './Link';
14
15
  export type {
16
+ TypographyProps as OverlineProps,
15
17
  TypographyProps as SubtextProps,
16
18
  TypographyProps as SubtitleProps,
17
19
  TypographyProps as TextProps,
package/src/index.ts CHANGED
@@ -88,6 +88,7 @@ export * from './components/Tag';
88
88
  export * from './components/Textarea';
89
89
  export * from './components/Toast';
90
90
  export * from './components/Tooltip';
91
+ export * from './components/Tree';
91
92
  export * from './components/Workflow';
92
93
  // Typography Components (excluding Link to avoid conflict with Link component)
93
94
  export {
@@ -97,6 +98,7 @@ export {
97
98
  H4,
98
99
  H5,
99
100
  Link,
101
+ Overline,
100
102
  Subtext,
101
103
  Subtitle,
102
104
  Text,
@@ -60,6 +60,14 @@ const SHARED_TEXT_STYLE_VALUES = {
60
60
  fontWeight: '500',
61
61
  lineHeight: '1.5',
62
62
  },
63
+ overline: {
64
+ fontFamily: 'body',
65
+ fontSize: { base: '0.805em', md: '0.875em' }, // 12.88px → 14px (matches subtext)
66
+ fontWeight: '500',
67
+ lineHeight: '1.5',
68
+ letterSpacing: '0.05em', // Chakra 'wider' tracking
69
+ textTransform: 'uppercase',
70
+ },
63
71
  } as const;
64
72
 
65
73
  /**
@@ -172,6 +180,11 @@ export const textStyles = defineTextStyles({
172
180
  description: 'Small caption text - responsive 12.88-14px',
173
181
  value: SHARED_TEXT_STYLE_VALUES.subtext,
174
182
  },
183
+ overline: {
184
+ description:
185
+ 'Eyebrow / section label - uppercase, wider tracking (12.88-14px)',
186
+ value: SHARED_TEXT_STYLE_VALUES.overline,
187
+ },
175
188
  });
176
189
 
177
190
  /**