@voxel51/voodo 0.0.37 → 0.0.39

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 (58) hide show
  1. package/dist/components/Icons/Icon.d.ts.map +1 -1
  2. package/dist/components/Menu/styles.d.ts +1 -1
  3. package/dist/components/Select/Option.d.ts.map +1 -1
  4. package/dist/components/Select/Select.d.ts.map +1 -1
  5. package/dist/components/Tooltip/Tooltip.d.ts +3 -1
  6. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -1
  7. package/dist/components/Tree/TreeBody.d.ts +37 -0
  8. package/dist/components/Tree/TreeBody.d.ts.map +1 -0
  9. package/dist/components/{TreeSelect/TreeSelectNode.d.ts → Tree/TreeItem.d.ts} +7 -6
  10. package/dist/components/Tree/TreeItem.d.ts.map +1 -0
  11. package/dist/components/{TreeSelect/TreeSelectSearchInput.d.ts → Tree/TreeSearchInput.d.ts} +5 -5
  12. package/dist/components/Tree/TreeSearchInput.d.ts.map +1 -0
  13. package/dist/components/Tree/TreeSelect.d.ts.map +1 -0
  14. package/dist/components/{TreeSelect → Tree}/TreeSelectPanel.d.ts +8 -1
  15. package/dist/components/Tree/TreeSelectPanel.d.ts.map +1 -0
  16. package/dist/components/Tree/TreeSelectTrigger.d.ts.map +1 -0
  17. package/dist/components/Tree/TreeView.d.ts +32 -0
  18. package/dist/components/Tree/TreeView.d.ts.map +1 -0
  19. package/dist/components/Tree/index.d.ts +5 -0
  20. package/dist/components/Tree/index.d.ts.map +1 -0
  21. package/dist/components/{TreeSelect → Tree}/tree.d.ts +1 -1
  22. package/dist/components/Tree/tree.d.ts.map +1 -0
  23. package/dist/components/{TreeSelect → Tree}/types.d.ts +99 -34
  24. package/dist/components/Tree/types.d.ts.map +1 -0
  25. package/dist/{util → components/Tree}/useTree.d.ts +13 -6
  26. package/dist/components/Tree/useTree.d.ts.map +1 -0
  27. package/dist/components/Tree/useTreeViewState.d.ts +59 -0
  28. package/dist/components/Tree/useTreeViewState.d.ts.map +1 -0
  29. package/dist/components/index.d.ts +1 -1
  30. package/dist/components/index.d.ts.map +1 -1
  31. package/dist/index.cjs +1 -12
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.js +3799 -21377
  34. package/dist/index.js.map +1 -1
  35. package/dist/styles/color-classes.d.ts +1 -1
  36. package/dist/styles/color-classes.d.ts.map +1 -1
  37. package/dist/theme/tokens/colors.d.ts +2 -0
  38. package/dist/theme/tokens/colors.d.ts.map +1 -1
  39. package/dist/theme/tokens/index.d.ts +2 -0
  40. package/dist/theme/tokens/index.d.ts.map +1 -1
  41. package/dist/types/color.d.ts +1 -0
  42. package/dist/types/color.d.ts.map +1 -1
  43. package/dist/types/icons.d.ts +31 -1
  44. package/dist/types/icons.d.ts.map +1 -1
  45. package/dist/voodo.css +1 -1
  46. package/package.json +1 -2
  47. package/dist/components/TreeSelect/TreeSelect.d.ts.map +0 -1
  48. package/dist/components/TreeSelect/TreeSelectNode.d.ts.map +0 -1
  49. package/dist/components/TreeSelect/TreeSelectPanel.d.ts.map +0 -1
  50. package/dist/components/TreeSelect/TreeSelectSearchInput.d.ts.map +0 -1
  51. package/dist/components/TreeSelect/TreeSelectTrigger.d.ts.map +0 -1
  52. package/dist/components/TreeSelect/index.d.ts +0 -4
  53. package/dist/components/TreeSelect/index.d.ts.map +0 -1
  54. package/dist/components/TreeSelect/tree.d.ts.map +0 -1
  55. package/dist/components/TreeSelect/types.d.ts.map +0 -1
  56. package/dist/util/useTree.d.ts.map +0 -1
  57. /package/dist/components/{TreeSelect → Tree}/TreeSelect.d.ts +0 -0
  58. /package/dist/components/{TreeSelect → Tree}/TreeSelectTrigger.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icons/Icon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AA4EvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,KAAK,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAC1B,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EACnC,YAAY,CA2Eb,CAAC;AAWF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC3C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAuB9B,CAAC"}
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../src/components/Icons/Icon.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AA0GvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAkB,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,KAAK,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAC1B,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,EACnC,YAAY,CAyGb,CAAC;AAWF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;IAC3C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAuB9B,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Shared visual styles for menu panels (Dropdown, ContextMenu, etc.).
3
3
  *
4
- * Provides the popover background, padding, max-width cap, radius, shadow,
4
+ * Provides the popover background, padding, min/max-width, radius, shadow,
5
5
  * and focus outline reset that define the menu's visual identity.
6
6
  */
7
7
  export declare const menuPanelStyles: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Option.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAehD,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CA8BlC,CAAC"}
1
+ {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Option.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAiBhD,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CA+BlC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,EAAE,EACF,cAAc,EACd,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,EACL,UAAU,EAMV,MAAM,EAEP,MAAM,SAAS,CAAC;AAKjB,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,WAAW,iBAAiB;IAC5B,SAAS,eAAe;IACxB,GAAG,QAAQ;IACX,QAAQ,cAAc;IACtB,MAAM,YAAY;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,CACX;IACC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,UAAU,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CA4IlC,CAAC"}
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Select/Select.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,EAAE,EACF,cAAc,EACd,SAAS,EAMV,MAAM,OAAO,CAAC;AAOf,OAAO,EAKL,UAAU,EAMV,MAAM,EAEP,MAAM,SAAS,CAAC;AAMjB,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,WAAW,iBAAiB;IAC5B,SAAS,eAAe;IACxB,GAAG,QAAQ;IACX,QAAQ,cAAc;IACtB,MAAM,YAAY;CACnB;AAED,MAAM,WAAW,WAAY,SAAQ,IAAI,CACvC,cAAc,CAAC,cAAc,CAAC,EAC9B,UAAU,CACX;IACC,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,UAAU,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC3B;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuEG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAgJlC,CAAC"}
@@ -22,7 +22,9 @@ export interface TooltipProps extends Omit<HTMLAttributes<HTMLDivElement>, "cont
22
22
  * @param content The content of the tooltip.
23
23
  * @param children The content which this component wraps; this acts as the element anchor and the hover trigger.
24
24
  * @param className `class` overrides to apply to the tooltip panel.
25
- * @param portal If `true`, renders the tooltip via a React portal so it escapes overflow-hidden ancestors.
25
+ * @param portal If `true`, renders the tooltip via a React portal into `document.body` with an
26
+ * above-modal z-index, so it escapes ancestor stacking contexts (e.g. inside modals). The default
27
+ * tooltip already uses fixed positioning, so it is never clipped by overflow-hidden/scroll ancestors.
26
28
  * @param shadow The shadow to apply to the tooltip. See {@link Shadow}.
27
29
  * @param wrapperClassName Additional classes to apply to the outer wrapper element.
28
30
  * @param props Additional HTML properties to apply to the component.
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,EAAE,EACP,KAAK,cAAc,EACnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAKf,OAAO,EACL,MAAM,EAMN,MAAM,EAKP,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,aAAa,GAAG,OAAO,CACjC,MAAM,EACN,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CACxD,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,cAAc,CAAC,cAAc,CAAC,EAC9B,SAAS,CACV;IACC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AA4ED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAiFpC,CAAC"}
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,EAAE,EACP,KAAK,cAAc,EACnB,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAKf,OAAO,EACL,MAAM,EAMN,MAAM,EAKP,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,aAAa,GAAG,OAAO,CACjC,MAAM,EACN,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CACxD,CAAC;AAEF,MAAM,WAAW,YAAa,SAAQ,IAAI,CACxC,cAAc,CAAC,cAAc,CAAC,EAC9B,SAAS,CACV;IACC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAkED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,OAAO,EAAE,EAAE,CAAC,YAAY,CAoFpC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { FC, RefObject } from 'react';
2
+ import { RenderTreeLabel } from './types';
3
+ import { UseTreeReturn } from './useTree';
4
+ export interface TreeBodyProps {
5
+ tree: UseTreeReturn;
6
+ query: string;
7
+ onQueryChange: (q: string) => void;
8
+ debouncedQuery: string;
9
+ filteredTree: boolean;
10
+ multiSelect?: boolean;
11
+ onRetryLoad?: (path: string) => void;
12
+ searchInputRef: RefObject<HTMLInputElement | null>;
13
+ /** When false, the search input is hidden and the wrapper becomes the keyboard focus target. */
14
+ showSearch?: boolean;
15
+ /**
16
+ * When `true`, hovering the tree focuses the search input (or wrapper)
17
+ * so keyboard navigation works without a click. Only safe inside a
18
+ * transient surface like the TreeSelect dropdown — an embedded TreeView
19
+ * must not steal focus from the rest of the page. When `false`, hover
20
+ * only retargets focus that is already inside the tree.
21
+ * @default false
22
+ */
23
+ focusOnHover?: boolean;
24
+ /** Custom label renderer forwarded to each {@link TreeItem}. */
25
+ renderLabel?: RenderTreeLabel;
26
+ className?: string;
27
+ }
28
+ /**
29
+ * Shared tree rendering body: virtualizer + optional search input + empty state.
30
+ *
31
+ * Owns no chrome (border, shadow, z-index, portal). The parent
32
+ * (`TreeSelectPanel` or `TreeView`) provides that.
33
+ *
34
+ * @internal Shared by TreeSelectPanel and TreeView.
35
+ */
36
+ export declare const TreeBody: FC<TreeBodyProps>;
37
+ //# sourceMappingURL=TreeBody.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeBody.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeBody.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,SAAS,EAAkC,MAAM,OAAO,CAAC;AAShF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAK/C,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CA2HtC,CAAC"}
@@ -1,12 +1,13 @@
1
1
  import { FC } from 'react';
2
- import { UseTreeReturn } from '../../util/useTree';
3
- import { ResolvedNode } from './types';
4
- export interface TreeSelectNodeProps {
2
+ import { RenderTreeLabel, ResolvedNode } from './types';
3
+ import { UseTreeReturn } from './useTree';
4
+ export interface TreeItemViewProps {
5
5
  resolved: ResolvedNode;
6
6
  tree: UseTreeReturn;
7
7
  query?: string;
8
8
  multiSelect?: boolean;
9
9
  onRetryLoad?: (path: string) => void;
10
+ renderLabel?: RenderTreeLabel;
10
11
  }
11
12
  /**
12
13
  * Renders a single node row. The parent renders a flat list of all visible
@@ -15,7 +16,7 @@ export interface TreeSelectNodeProps {
15
16
  * All state is driven by the `tree` hook — this component is purely
16
17
  * presentational.
17
18
  *
18
- * @internal For use by TreeSelectPanel.
19
+ * @internal Shared by TreeSelectPanel and TreeBody.
19
20
  */
20
- export declare const TreeSelectNode: FC<TreeSelectNodeProps>;
21
- //# sourceMappingURL=TreeSelectNode.d.ts.map
21
+ export declare const TreeItem: FC<TreeItemViewProps>;
22
+ //# sourceMappingURL=TreeItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeItem.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeItem.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAC;AA0BvC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI/C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAqBD;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CA2K1C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { FC, KeyboardEvent, Ref } from 'react';
2
- export interface TreeSelectSearchInputProps {
2
+ export interface TreeSearchInputProps {
3
3
  value: string;
4
4
  onChange: (value: string) => void;
5
5
  onKeyDown: (e: KeyboardEvent) => void;
@@ -7,10 +7,10 @@ export interface TreeSelectSearchInputProps {
7
7
  activeDescendantId?: string;
8
8
  }
9
9
  /**
10
- * Sticky search bar rendered at the top of the TreeSelect panel.
10
+ * Sticky search bar rendered at the top of a tree panel.
11
11
  * Owns the magnifier icon, text input, and clear button.
12
12
  *
13
- * @internal For use by TreeSelectPanel.
13
+ * @internal Shared by TreeSelectPanel and TreeBody.
14
14
  */
15
- export declare const TreeSelectSearchInput: FC<TreeSelectSearchInputProps>;
16
- //# sourceMappingURL=TreeSelectSearchInput.d.ts.map
15
+ export declare const TreeSearchInput: FC<TreeSearchInputProps>;
16
+ //# sourceMappingURL=TreeSearchInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSearchInput.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeSearchInput.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,aAAa,EAAE,KAAK,GAAG,EAAE,MAAM,OAAO,CAAC;AAiB9D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CA+DpD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSelect.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeSelect.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,EAAE,EAAoC,MAAM,OAAO,CAAC;AAYlE,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,SAAS,CAAC;AAYzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA4M1C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { CSSProperties, FC, RefObject } from 'react';
2
2
  import { ZIndex } from '../../types';
3
- import { UseTreeReturn } from '../../util/useTree';
3
+ import { UseTreeReturn } from './useTree';
4
4
  export interface TreeSelectPanelProps {
5
5
  floatingRef: (node: HTMLElement | null) => void;
6
6
  floatingStyles: CSSProperties;
@@ -17,5 +17,12 @@ export interface TreeSelectPanelProps {
17
17
  onRetryLoad?: (path: string) => void;
18
18
  panelMaxHeight?: string;
19
19
  }
20
+ /**
21
+ * Floating panel for TreeSelect. Provides the dropdown shell (border,
22
+ * shadow, z-index, portal, max-height) and delegates the tree body
23
+ * rendering to {@link TreeBody}.
24
+ *
25
+ * @internal For use by TreeSelect.
26
+ */
20
27
  export declare const TreeSelectPanel: FC<TreeSelectPanelProps>;
21
28
  //# sourceMappingURL=TreeSelectPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSelectPanel.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeSelectPanel.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,EAAE,EAGP,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAOL,MAAM,EAEP,MAAM,SAAS,CAAC;AAIjB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAyB/C,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,cAAc,EAAE,aAAa,CAAC;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,IAAI,EAAE,aAAa,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,oBAAoB,CAkDpD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeSelectTrigger.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeSelectTrigger.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,EAAE,EAAY,MAAM,OAAO,CAAC;AAkBjD,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC;IACjD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AA6DD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAsGxD,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { FC } from 'react';
2
+ import { TreeViewProps } from './types';
3
+ /**
4
+ * A tree-shaped navigation or selection component. Drop it into a sidebar,
5
+ * panel, or inline layout.
6
+ *
7
+ * Supports three modes via the `selectable` prop:
8
+ * - **Navigate (default)**: clicking a leaf fires `onChange` with the
9
+ * path; clicking a branch toggles expansion. No selection state is
10
+ * tracked, no checkboxes, no "selected" highlight.
11
+ * - **Single-select** (`selectable={true}`): same as TreeSelect's
12
+ * single-select but always visible.
13
+ * - **Multi-select** (`selectable={true} multiSelect={true}`): same as
14
+ * TreeSelect's multi-select but always visible.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <TreeView root={tree} onChange={(path) => navigate(path)} />
19
+ * ```
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * <TreeView
24
+ * root={tree}
25
+ * selectable
26
+ * value={selected}
27
+ * onChange={(path) => setSelected(path ?? undefined)}
28
+ * />
29
+ * ```
30
+ */
31
+ export declare const TreeView: FC<TreeViewProps>;
32
+ //# sourceMappingURL=TreeView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAe,MAAM,OAAO,CAAC;AAO7C,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,SAAS,CAAC;AAGvD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAqFtC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { TreeSelect } from './TreeSelect';
2
+ export { TreeView } from './TreeView';
3
+ export type { RenderTreeLabel, TreeNode, TreePath, TreeSelectProps, TreeViewProps, } from './types';
4
+ export { formatBreadcrumb, getNodeByPath } from './tree';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EACV,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC"}
@@ -76,7 +76,7 @@ export declare function getParentPath(path: string): string | undefined;
76
76
  * Depth-first walk of a resolved tree returning nodes in DOM render order.
77
77
  * Skips the root itself (callers render `root.children`). For each child,
78
78
  * includes the child, then if `isOpen(child.path)` returns true, recurses
79
- * into its children. This mirrors exactly what `TreeSelectNode` renders.
79
+ * into its children. This mirrors exactly what `TreeItem` renders.
80
80
  */
81
81
  export declare function flattenVisible(root: ResolvedNode, isOpen: (path: string) => boolean): ResolvedNode[];
82
82
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AA8BhE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAcD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,UAAQ,GAAG,OAAO,CAIxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,EACtC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GACvC,YAAY,CAyCd;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,MAAM,GACZ;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAyE5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,QAAQ,GACb,QAAQ,GAAG,SAAS,CAatB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,MAAM,GACnB,QAAQ,GAAG,SAAS,CAEtB;AAWD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAChC,YAAY,EAAE,CAiBhB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,CAiBlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEvD"}
@@ -1,4 +1,4 @@
1
- import { HTMLAttributes } from 'react';
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
2
  import { SelectAnchor } from '../Select';
3
3
  import { ZIndex } from '../../types';
4
4
  /**
@@ -56,9 +56,9 @@ export interface ResolvedNode {
56
56
  setsize: number;
57
57
  }
58
58
  /**
59
- * Props shared by single-select and multi-select modes.
59
+ * Data-layer props shared by all tree consumers (`TreeSelect` and `TreeView`).
60
60
  */
61
- interface TreeSelectBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
61
+ export interface TreeDataProps extends Omit<HTMLAttributes<HTMLDivElement>, "onChange"> {
62
62
  /** The root node of the tree. */
63
63
  root: TreeNode;
64
64
  /**
@@ -67,6 +67,31 @@ interface TreeSelectBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, "onCh
67
67
  * @default false
68
68
  */
69
69
  leavesOnly?: boolean;
70
+ /**
71
+ * Fetches children for a lazy branch (a node whose `values` is an empty
72
+ * array). Called exactly once per lazy branch on first user-initiated
73
+ * expand. Receives a {@link TreePath} of raw node names.
74
+ * The returned children are spliced into the tree and cached for
75
+ * the lifetime of `root`. Errors set the branch to an "error" state with
76
+ * an inline retry control.
77
+ */
78
+ loadChildren?: (path: TreePath) => Promise<TreeNode[]>;
79
+ /**
80
+ * Branches to expand when the component first renders (or when the
81
+ * TreeSelect panel first opens). These paths are user-collapsible and
82
+ * restored on panel re-open (TreeSelect) or component remount (TreeView).
83
+ *
84
+ * - `TreePath[]` — explicit branch paths (each a {@link TreePath} of
85
+ * raw node names) to start expanded.
86
+ * - `true` — expand every branch in the tree.
87
+ * - `false` / `undefined` — expand nothing (default).
88
+ */
89
+ defaultExpanded?: readonly TreePath[] | boolean;
90
+ }
91
+ /**
92
+ * UI props specific to TreeSelect (trigger + floating panel).
93
+ */
94
+ interface TreeSelectUIProps {
70
95
  /** If `true`, the entire component is disabled. */
71
96
  disabled?: boolean;
72
97
  /** Placeholder text shown in the input when no value is selected. */
@@ -96,32 +121,10 @@ interface TreeSelectBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, "onCh
96
121
  * When omitted, the node name is shown (e.g. `"Civic"`).
97
122
  */
98
123
  displayValue?: (path: TreePath, node: TreeNode) => string;
99
- /**
100
- * Fetches children for a lazy branch (a node whose `values` is an empty
101
- * array). Called exactly once per lazy branch on first user-initiated
102
- * expand. Receives a {@link TreePath} of raw node names.
103
- * The returned children are spliced into the tree and cached for
104
- * the lifetime of `root`. Errors set the branch to an "error" state with
105
- * an inline retry control.
106
- */
107
- loadChildren?: (path: TreePath) => Promise<TreeNode[]>;
108
- /**
109
- * Branches to expand when the panel first opens. Unlike `forceOpenPaths`
110
- * (which prevents collapsing), these paths are user-collapsible and
111
- * restored on panel re-open.
112
- *
113
- * - `TreePath[]` — explicit branch paths (each a {@link TreePath} of
114
- * raw node names) to start expanded.
115
- * - `true` — expand every branch in the tree.
116
- * - `false` / `undefined` — expand nothing (default).
117
- */
118
- defaultExpanded?: readonly TreePath[] | boolean;
119
124
  }
120
- /**
121
- * Single-select mode (default). `value` is a {@link TreePath} and
122
- * `onChange` fires with the selected path or `null` on clear.
123
- */
124
- interface TreeSelectSingleProps extends TreeSelectBaseProps {
125
+ interface TreeSelectBaseProps extends TreeDataProps, TreeSelectUIProps {
126
+ }
127
+ interface TreeSingleSelection {
125
128
  multiSelect?: false;
126
129
  /**
127
130
  * Currently selected node path as a {@link TreePath} — an ordered array
@@ -134,11 +137,7 @@ interface TreeSelectSingleProps extends TreeSelectBaseProps {
134
137
  */
135
138
  onChange?: (path: TreePath | null) => void;
136
139
  }
137
- /**
138
- * Multi-select mode. `value` is an array of {@link TreePath} entries and
139
- * `onChange` fires with the full updated array on every toggle.
140
- */
141
- interface TreeSelectMultiProps extends TreeSelectBaseProps {
140
+ interface TreeMultiSelection {
142
141
  multiSelect: true;
143
142
  /**
144
143
  * Currently selected node paths. Each entry is a {@link TreePath} —
@@ -158,6 +157,72 @@ interface TreeSelectMultiProps extends TreeSelectBaseProps {
158
157
  * - `multiSelect?: false` (default) — single-select; `value` is `TreePath`, `onChange` fires `TreePath | null`.
159
158
  * - `multiSelect: true` — multi-select; `value` is `readonly TreePath[]`, `onChange` fires `TreePath[]`.
160
159
  */
161
- export type TreeSelectProps = TreeSelectSingleProps | TreeSelectMultiProps;
160
+ export type TreeSelectProps = (TreeSelectBaseProps & TreeSingleSelection) | (TreeSelectBaseProps & TreeMultiSelection);
161
+ /**
162
+ * Custom renderer for a row's label content in {@link TreeView}.
163
+ *
164
+ * Receives the source node, its {@link TreePath}, and the default label
165
+ * element (the node name with search-match highlighting applied). The
166
+ * returned content replaces only the name text — chevron, checkbox, and
167
+ * `description` rendering are unaffected. The custom content is wrapped in
168
+ * a flex-1 container, so trailing content (e.g. a count) can be
169
+ * right-aligned with `justify-between`.
170
+ */
171
+ export type RenderTreeLabel = (node: TreeNode, path: TreePath, defaultLabel: ReactNode) => ReactNode;
172
+ interface TreeViewSharedProps extends TreeDataProps {
173
+ /**
174
+ * Custom renderer for each row's label content. See
175
+ * {@link RenderTreeLabel}. When omitted, the node name is rendered with
176
+ * search-match highlighting.
177
+ */
178
+ renderLabel?: RenderTreeLabel;
179
+ /** Show the built-in search input. @default true */
180
+ showSearch?: boolean;
181
+ /**
182
+ * Controlled search query. When provided, `onQueryChange` is required
183
+ * and the built-in search input is hidden — the consumer renders their
184
+ * own search UI.
185
+ */
186
+ query?: string;
187
+ /** Required when `query` is controlled. */
188
+ onQueryChange?: (q: string) => void;
189
+ maxHeight?: string;
190
+ className?: string;
191
+ }
192
+ /**
193
+ * Navigation mode (default). `onChange` fires per leaf click; no value is
194
+ * tracked, no checkboxes, no "selected" highlight. Clicking a branch
195
+ * toggles its expansion.
196
+ */
197
+ interface TreeViewNavigateProps extends TreeViewSharedProps {
198
+ selectable?: false;
199
+ multiSelect?: never;
200
+ value?: never;
201
+ /** Fires when the user clicks a selectable node. */
202
+ onChange?: (path: TreePath) => void;
203
+ }
204
+ /** Single-select mode. */
205
+ interface TreeViewSingleSelectProps extends TreeViewSharedProps {
206
+ selectable: true;
207
+ multiSelect?: false;
208
+ value?: TreePath;
209
+ onChange?: (path: TreePath | null) => void;
210
+ }
211
+ /** Multi-select mode. */
212
+ interface TreeViewMultiSelectProps extends TreeViewSharedProps {
213
+ selectable: true;
214
+ multiSelect: true;
215
+ value?: readonly TreePath[];
216
+ onChange?: (paths: TreePath[]) => void;
217
+ }
218
+ /**
219
+ * Props for {@link TreeView}.
220
+ *
221
+ * Discriminated on `selectable` and `multiSelect`:
222
+ * - `selectable?: false` (default) — navigation mode; `onChange` fires `TreePath` per click, no selection state tracked.
223
+ * - `selectable: true, multiSelect?: false` — single-select; `value` is `TreePath`, `onChange` fires `TreePath | null`.
224
+ * - `selectable: true, multiSelect: true` — multi-select; `value` is `readonly TreePath[]`, `onChange` fires `TreePath[]`.
225
+ */
226
+ export type TreeViewProps = TreeViewNavigateProps | TreeViewSingleSelectProps | TreeViewMultiSelectProps;
162
227
  export {};
163
228
  //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/types.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { KeyboardEvent } from 'react';
2
- import { ResolvedNode } from '../components/TreeSelect/types';
2
+ import { ResolvedNode } from './types';
3
3
  export interface UseTreeOptions {
4
4
  /** Pre-resolved (and optionally pre-filtered) tree. */
5
5
  tree: ResolvedNode;
@@ -115,12 +115,19 @@ export interface UseTreeReturn {
115
115
  getLoadState: (path: string) => "loading" | "error" | undefined;
116
116
  }
117
117
  /**
118
- * Headless hook that manages tree state: expansion, active (keyboard) path,
119
- * keyboard navigation per WAI-ARIA treeview semantics, ARIA prop generation,
120
- * and scroll-into-view. Owns no rendering or styling.
118
+ * **UI mechanics layer** — sits below {@link useTreeViewState} in the stack.
121
119
  *
122
- * Designed to be consumed by `TreeSelect` and `TreeSelectNode` but generic
123
- * enough for any component that renders a tree of `ResolvedNode`s.
120
+ * Headless hook that manages pure interaction state: which branches are
121
+ * expanded, which node has the keyboard cursor (`activePath`), keyboard
122
+ * navigation per WAI-ARIA treeview semantics, ARIA prop generation, and
123
+ * scroll-into-view. Owns no data fetching, search, filtering, or selection
124
+ * values — it operates on a pre-resolved, pre-filtered `ResolvedNode` tree
125
+ * that the caller is responsible for producing.
126
+ *
127
+ * {@link useTreeViewState} calls this hook after handling search, debouncing,
128
+ * async `loadChildren`, and selection bookkeeping. Neither `TreeSelect` nor
129
+ * `TreeView` calls `useTree` directly — they receive its return value via
130
+ * `state.tree` from `useTreeViewState`.
124
131
  */
125
132
  export declare function useTree(options: UseTreeOptions): UseTreeReturn;
126
133
  //# sourceMappingURL=useTree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTree.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/useTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { RefObject } from 'react';
2
+ import { TreeNode, TreePath } from './types';
3
+ import { UseTreeReturn } from './useTree';
4
+ export interface UseTreeViewStateOptions {
5
+ root: TreeNode;
6
+ multiSelect?: boolean;
7
+ leavesOnly?: boolean;
8
+ defaultExpanded?: readonly TreePath[] | boolean;
9
+ loadChildren?: (path: TreePath) => Promise<TreeNode[]>;
10
+ value?: TreePath | readonly TreePath[];
11
+ onChange?: ((p: TreePath | null) => void) | ((p: TreePath[]) => void);
12
+ onEscape?: () => void;
13
+ onAfterSelect?: (internalPath: string) => void;
14
+ /**
15
+ * When provided, the hook treats query as controlled and skips
16
+ * internal query state. The consumer must also provide `onQueryChange`.
17
+ */
18
+ query?: string;
19
+ /** Required when `query` is controlled. */
20
+ onQueryChange?: (q: string) => void;
21
+ scrollActiveIntoView?: boolean;
22
+ /**
23
+ * When `true`, single-select picks reset the search query. Correct for
24
+ * TreeSelect, where selecting closes the panel and the query is stale on
25
+ * re-open. Persistent consumers (TreeView) must leave this off: the tree
26
+ * stays on screen, so wiping the filter — and firing `onQueryChange("")`
27
+ * behind a controlled-query consumer's back — discards user state.
28
+ * @default false
29
+ */
30
+ clearQueryOnSelect?: boolean;
31
+ }
32
+ export interface UseTreeViewStateReturn {
33
+ tree: UseTreeReturn;
34
+ query: string;
35
+ setQuery: (q: string) => void;
36
+ debouncedQuery: string;
37
+ filteredTree: boolean;
38
+ onRetryLoad: (path: string) => void;
39
+ searchInputRef: RefObject<HTMLInputElement | null>;
40
+ clearSelection: () => void;
41
+ }
42
+ /**
43
+ * **Data layer** — sits above {@link useTree} in the stack.
44
+ *
45
+ * Shared data-layer hook for tree components. Manages:
46
+ * - Search query (internal or controlled) + 200ms debounce
47
+ * - Async `loadChildren` with loading/error state and retry
48
+ * - `buildResolvedTree` / `filterTreeForQuery` memoization
49
+ * - Selection logic (single/multi) with `toInternalPath` encoding
50
+ * - Wiring into {@link useTree} (the UI mechanics layer below)
51
+ *
52
+ * Consumed by both `TreeSelect` and `TreeView`. Each consumer composes
53
+ * its own UI around the returned `tree` and query state. Neither component
54
+ * calls `useTree` directly — they receive its return value via `state.tree`.
55
+ *
56
+ * @internal
57
+ */
58
+ export declare function useTreeViewState(options: UseTreeViewStateOptions): UseTreeViewStateReturn;
59
+ //# sourceMappingURL=useTreeViewState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTreeViewState.d.ts","sourceRoot":"","sources":["../../../src/components/Tree/useTreeViewState.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,WAAW,CAAC;AAExD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,OAAO,CAAC;IAChD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvD,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,CAAC;IACvC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC,CAAC;IACtE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;IACnD,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,uBAAuB,GAC/B,sBAAsB,CAoOxB"}
@@ -37,6 +37,6 @@ export * from './Toggle';
37
37
  export * from './ToggleSwitch';
38
38
  export * from './Toolbar';
39
39
  export * from './Tooltip';
40
- export * from './TreeSelect';
40
+ export * from './Tree';
41
41
  export * from './UnsetHint';
42
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}