@pibit.ai/cure-design-system 0.6.22 → 0.6.23

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.
@@ -0,0 +1,23 @@
1
+ import { TreeViewNode } from './tree-view';
2
+ type CustomNode = React.FC<{
3
+ node: TreeViewNode;
4
+ isSelected: boolean;
5
+ }>;
6
+ export interface IndentedTreeProps {
7
+ tree: TreeViewNode[];
8
+ onToggle: (path: string) => void;
9
+ CustomNode: CustomNode;
10
+ onNodeClick?: (node: TreeViewNode) => void;
11
+ selectedNodeId?: string | null;
12
+ keyboardNavigation: boolean;
13
+ canSelectNode?: (node: TreeViewNode) => boolean;
14
+ "aria-label"?: string;
15
+ }
16
+ /**
17
+ * The `indented` TreeView variant: spaced rows, a 24px indent with one guide line per level, an
18
+ * animated chevron and children. The chevron only expands/collapses; clicking a row's content
19
+ * selects it, for parents and leaves alike.
20
+ */
21
+ export declare const IndentedTree: ({ tree, onToggle, CustomNode, onNodeClick, selectedNodeId, keyboardNavigation, canSelectNode, "aria-label": ariaLabel, }: IndentedTreeProps) => import("react/jsx-runtime").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=indented-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indented-tree.d.ts","sourceRoot":"","sources":["../../../src/patterns/tree-view/indented-tree.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,UAAU,GAAG,KAAK,CAAC,EAAE,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC;IAChD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,0HAS1B,iBAAiB,4CA8GnB,CAAC"}
@@ -0,0 +1,232 @@
1
+ import { jsx as n, jsxs as b } from "react/jsx-runtime";
2
+ import { useRef as I, useMemo as $ } from "react";
3
+ import { ChevronRight as P } from "@untitledui/icons";
4
+ import { motion as A } from "../../node_modules/framer-motion/dist/es/render/components/motion/proxy.js";
5
+ import { AnimatePresence as D } from "../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js";
6
+ const _ = ({
7
+ tree: s,
8
+ onToggle: p,
9
+ CustomNode: x,
10
+ onNodeClick: c,
11
+ selectedNodeId: v,
12
+ keyboardNavigation: e,
13
+ canSelectNode: d,
14
+ "aria-label": m
15
+ }) => {
16
+ const f = I(null), l = $(() => {
17
+ const t = [];
18
+ function i(a, r = "", h) {
19
+ a.forEach((u, g) => {
20
+ const O = r ? `${r}-${g}` : String(g);
21
+ t.push({ node: u, path: O, parentId: h }), u.isOpen && i(u.children, O, u.id);
22
+ });
23
+ }
24
+ return i(s), t;
25
+ }, [s]);
26
+ function o(t) {
27
+ var a;
28
+ const i = (a = f.current) == null ? void 0 : a.querySelector(
29
+ `[data-tree-node-id="${CSS.escape(t)}"]`
30
+ );
31
+ i == null || i.focus({ preventScroll: !0 }), i == null || i.scrollIntoView({ block: "nearest", behavior: "instant" });
32
+ }
33
+ function w(t) {
34
+ if (!e || t.nativeEvent.isComposing) return;
35
+ const i = t.target.closest(
36
+ "[data-tree-node-id]"
37
+ ), a = l.findIndex(
38
+ ({ node: g }) => g.id === (i == null ? void 0 : i.dataset.treeNodeId)
39
+ );
40
+ if (a < 0) return;
41
+ const { node: r, path: h, parentId: u } = l[a];
42
+ if ([
43
+ "ArrowDown",
44
+ "ArrowUp",
45
+ "ArrowRight",
46
+ "ArrowLeft",
47
+ "Home",
48
+ "End",
49
+ "Enter",
50
+ " "
51
+ ].includes(t.key) && !((t.key === "Enter" || t.key === " ") && t.target.closest("button")))
52
+ switch (t.preventDefault(), t.stopPropagation(), t.key) {
53
+ case "ArrowDown":
54
+ o(l[(a + 1) % l.length].node.id);
55
+ break;
56
+ case "ArrowUp":
57
+ o(
58
+ l[(a - 1 + l.length) % l.length].node.id
59
+ );
60
+ break;
61
+ case "Home":
62
+ o(l[0].node.id);
63
+ break;
64
+ case "End":
65
+ o(l[l.length - 1].node.id);
66
+ break;
67
+ case "ArrowRight":
68
+ r.children.length && !r.isOpen ? p(h) : r.children.length && o(r.children[0].id);
69
+ break;
70
+ case "ArrowLeft":
71
+ r.children.length && r.isOpen ? p(h) : u && o(u);
72
+ break;
73
+ default:
74
+ (!d || d(r)) && (c == null || c(r));
75
+ }
76
+ }
77
+ return /* @__PURE__ */ n(
78
+ "div",
79
+ {
80
+ ref: f,
81
+ role: e ? "tree" : void 0,
82
+ "aria-label": e ? m : void 0,
83
+ onKeyDown: w,
84
+ children: /* @__PURE__ */ n("div", { className: "flex flex-col gap-2", children: s.map((t, i) => /* @__PURE__ */ n(
85
+ E,
86
+ {
87
+ node: t,
88
+ path: String(i),
89
+ onToggle: p,
90
+ onNodeClick: c,
91
+ CustomNode: x,
92
+ keyboardNavigation: e,
93
+ selectedNodeId: v,
94
+ canSelectNode: d,
95
+ level: 1,
96
+ position: i + 1,
97
+ siblingCount: s.length
98
+ },
99
+ t.id || i
100
+ )) })
101
+ }
102
+ );
103
+ }, E = ({
104
+ node: s,
105
+ path: p,
106
+ onToggle: x,
107
+ onNodeClick: c,
108
+ CustomNode: v,
109
+ keyboardNavigation: e,
110
+ selectedNodeId: d,
111
+ canSelectNode: m,
112
+ level: f,
113
+ position: l,
114
+ siblingCount: o
115
+ }) => {
116
+ const w = s.children.length > 0, t = d != null && s.id === d, i = (r) => {
117
+ r.stopPropagation(), x(p);
118
+ }, a = (r) => {
119
+ r.stopPropagation(), c == null || c(s);
120
+ };
121
+ return /* @__PURE__ */ b("div", { className: "relative", children: [
122
+ /* @__PURE__ */ b(
123
+ "div",
124
+ {
125
+ className: `flex items-center gap-2 py-0.5 ${e ? "rounded-md outline-none hover:bg-primary_hover focus:bg-primary_hover" : ""}`,
126
+ "data-tree-node-id": s.id,
127
+ role: e ? "treeitem" : void 0,
128
+ tabIndex: e ? f === 1 && l === 1 ? 0 : -1 : void 0,
129
+ "aria-label": e ? s.label : void 0,
130
+ "aria-level": e ? f : void 0,
131
+ "aria-posinset": e ? l : void 0,
132
+ "aria-setsize": e ? o : void 0,
133
+ "aria-expanded": e && w ? !!s.isOpen : void 0,
134
+ "aria-selected": e && (!m || m(s)) ? t : void 0,
135
+ children: [
136
+ /* @__PURE__ */ n(
137
+ "div",
138
+ {
139
+ className: "w-4 h-4 flex-shrink-0",
140
+ onClick: (r) => r.stopPropagation(),
141
+ children: w && /* @__PURE__ */ n(
142
+ "button",
143
+ {
144
+ type: "button",
145
+ tabIndex: e ? -1 : void 0,
146
+ onClick: i,
147
+ className: "cursor-pointer hover:bg-secondary_subtle rounded p-0.5 transition-colors flex items-center justify-center",
148
+ "aria-label": s.isOpen ? "Collapse" : "Expand",
149
+ children: /* @__PURE__ */ n(
150
+ A.div,
151
+ {
152
+ initial: !1,
153
+ animate: { rotate: s.isOpen ? 90 : 0 },
154
+ transition: { duration: 0.2, ease: "easeOut" },
155
+ children: /* @__PURE__ */ n(P, { className: "w-4 h-4 text-[var(--color-gray-400)]" })
156
+ }
157
+ )
158
+ }
159
+ )
160
+ }
161
+ ),
162
+ /* @__PURE__ */ n(
163
+ "div",
164
+ {
165
+ onClick: a,
166
+ className: "flex-1 min-w-0 cursor-pointer",
167
+ children: /* @__PURE__ */ n(v, { node: s, isSelected: t })
168
+ }
169
+ )
170
+ ]
171
+ }
172
+ ),
173
+ /* @__PURE__ */ n(D, { initial: !1, children: w && s.isOpen && /* @__PURE__ */ n(
174
+ A.div,
175
+ {
176
+ initial: e ? !1 : { opacity: 0, height: 0 },
177
+ animate: {
178
+ opacity: 1,
179
+ height: "auto",
180
+ transition: {
181
+ height: {
182
+ duration: e ? 0 : 0.1,
183
+ ease: "easeOut"
184
+ },
185
+ opacity: {
186
+ duration: e ? 0 : 0.1,
187
+ ease: "easeOut"
188
+ }
189
+ }
190
+ },
191
+ exit: {
192
+ opacity: 0,
193
+ height: 0,
194
+ transition: {
195
+ height: {
196
+ duration: e ? 0 : 0.3,
197
+ ease: "easeIn"
198
+ },
199
+ opacity: {
200
+ duration: e ? 0 : 0.2,
201
+ ease: "easeIn"
202
+ }
203
+ }
204
+ },
205
+ style: { overflow: "clip" },
206
+ children: /* @__PURE__ */ b("div", { className: "ml-6 relative", children: [
207
+ /* @__PURE__ */ n("div", { className: "absolute left-[-17px] top-[-6px] bottom-0 w-px bg-[var(--color-gray-200)]" }),
208
+ /* @__PURE__ */ n("div", { className: "flex flex-col gap-2", children: s.children.map((r, h) => /* @__PURE__ */ n(
209
+ E,
210
+ {
211
+ node: r,
212
+ path: `${p}-${h}`,
213
+ onToggle: x,
214
+ onNodeClick: c,
215
+ CustomNode: v,
216
+ keyboardNavigation: e,
217
+ selectedNodeId: d,
218
+ canSelectNode: m,
219
+ level: f + 1,
220
+ position: h + 1,
221
+ siblingCount: s.children.length
222
+ },
223
+ r.id || `${p}-${h}`
224
+ )) })
225
+ ] })
226
+ }
227
+ ) })
228
+ ] });
229
+ };
230
+ export {
231
+ _ as IndentedTree
232
+ };
@@ -7,17 +7,14 @@ export interface TreeViewNode {
7
7
  isOpen?: boolean;
8
8
  [key: string]: any;
9
9
  }
10
- export interface TreeViewProps {
11
- /** Raw data array. The component converts it internally using `config`. */
12
- data: Record<string, any>[];
13
- /** Config that tells the component how to read your raw data. */
14
- config: TreeViewBuildConfig;
10
+ interface TreeViewBaseProps {
15
11
  /** Component to render the content area of each row (icon, label, etc.) */
16
12
  CustomNode: React.FC<{
17
13
  node: TreeViewNode;
18
14
  isSelected: boolean;
19
15
  }>;
20
- /** Called when a parent row (with children) is clicked */
16
+ /** Called when a parent row (with children) is clicked, or a leaf that `isLeafClickable` allows.
17
+ * In the `indented` variant it fires for any row's content. */
21
18
  onNodeClick?: (node: TreeViewNode) => void;
22
19
  /** ID of the currently selected node */
23
20
  selectedNodeId?: string | null;
@@ -32,7 +29,39 @@ export interface TreeViewProps {
32
29
  /** When true, every node starts expanded. Per-node `isOpen` on the
33
30
  * source data, if present, still wins. Default false. */
34
31
  defaultExpanded?: boolean;
32
+ /** Built node ids (paths such as `"doc.field"`) that start expanded; every other node starts
33
+ * collapsed. Wins over `defaultExpanded`; per-node `isOpen` on the source data still wins. */
34
+ defaultExpandedIds?: Iterable<string>;
35
+ /** Rebuild the tree when `data`, `config`, `nodes` or `defaultExpandedIds` change, which
36
+ * resets expansion to those inputs. Off by default: the tree is built once on mount.
37
+ * Pass stable (memoised) inputs when this is on. */
38
+ syncWithData?: boolean;
39
+ /** `nested` (default): 28px rows with a guide line per ancestor; a parent row click toggles it.
40
+ * `indented`: spaced rows, 24px indent and animated chevrons; the chevron toggles and a row's
41
+ * content selects. Search (`showSearch`) is only available in `nested`. */
42
+ variant?: "nested" | "indented";
43
+ /** `nested` variant: leaf rows for which this returns true are clickable and fire `onNodeClick`. */
44
+ isLeafClickable?: (node: TreeViewNode) => boolean;
45
+ /** `indented` variant: arrow/Home/End navigation, Enter/Space to select, and tree/treeitem roles. */
46
+ keyboardNavigation?: boolean;
47
+ /** `indented` variant: rows for which this returns false are not selected by Enter/Space and get
48
+ * no `aria-selected`. Mouse clicks still reach `onNodeClick`, so check it there as well. */
49
+ canSelectNode?: (node: TreeViewNode) => boolean;
50
+ /** Accessible name of the tree; used with `keyboardNavigation`. */
51
+ "aria-label"?: string;
35
52
  }
53
+ export type TreeViewProps = TreeViewBaseProps & ({
54
+ /** Raw data array. The component converts it internally using `config`. */
55
+ data: Record<string, any>[];
56
+ /** Config that tells the component how to read your raw data. */
57
+ config: TreeViewBuildConfig;
58
+ nodes?: never;
59
+ } | {
60
+ /** Already-built nodes, used as they are (ids, `isOpen` and extra keys kept). */
61
+ nodes: TreeViewNode[];
62
+ data?: never;
63
+ config?: never;
64
+ });
36
65
  /**
37
66
  * Config for building TreeViewNode[] from arbitrary data.
38
67
  * Tells the build function which keys to use for label, children, and where to store the original node data.
@@ -53,6 +82,9 @@ export interface TreeViewBuildConfig {
53
82
  /** When true, every built node starts with `isOpen: true`. Per-node
54
83
  * `isOpen` on source data overrides this (source data always wins). */
55
84
  defaultExpanded?: boolean;
85
+ /** Built node ids that start expanded; every other node starts collapsed. Wins over
86
+ * `defaultExpanded`; per-node `isOpen` on source data still wins. */
87
+ expandedIds?: ReadonlySet<string>;
56
88
  }
57
89
  /**
58
90
  * Converts any array of items into TreeViewNode[] using the given config.
@@ -61,7 +93,8 @@ export interface TreeViewBuildConfig {
61
93
  */
62
94
  export declare function buildTreeViewNodes<T extends Record<string, any>>(data: T[], config: TreeViewBuildConfig, parentPath?: string): TreeViewNode[];
63
95
  export declare const TreeView: {
64
- ({ data, config, CustomNode, onNodeClick, selectedNodeId, showSearch, searchPlaceholder, searchClassName, searchInputClassName, defaultExpanded, }: TreeViewProps): import("react/jsx-runtime").JSX.Element;
96
+ ({ data, config, nodes, CustomNode, onNodeClick, selectedNodeId, showSearch, searchPlaceholder, searchClassName, searchInputClassName, defaultExpanded, defaultExpandedIds, syncWithData, variant, isLeafClickable, keyboardNavigation, canSelectNode, "aria-label": ariaLabel, }: TreeViewProps): import("react/jsx-runtime").JSX.Element;
65
97
  displayName: string;
66
98
  };
99
+ export {};
67
100
  //# sourceMappingURL=tree-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../../../src/patterns/tree-view/tree-view.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC1B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5B,iEAAiE;IACjE,MAAM,EAAE,mBAAmB,CAAC;IAC5B,2EAA2E;IAC3E,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAClE,0DAA0D;IAC1D,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,wCAAwC;IACxC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;8DAC0D;IAC1D,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;4EACwE;IACxE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAID;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5D,IAAI,EAAE,CAAC,EAAE,EACT,MAAM,EAAE,mBAAmB,EAC3B,UAAU,GAAE,MAAW,GACxB,YAAY,EAAE,CAwChB;AAqBD,eAAO,MAAM,QAAQ;wJAWlB,aAAa;;CAuDf,CAAC"}
1
+ {"version":3,"file":"tree-view.d.ts","sourceRoot":"","sources":["../../../src/patterns/tree-view/tree-view.tsx"],"names":[],"mappings":"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"}