@itwin/presentation-hierarchies-react 2.0.0-alpha.65 → 2.0.0-alpha.67
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.
- package/CHANGELOG.md +54 -0
- package/README.md +2 -8
- package/lib/presentation-hierarchies-react/UseIModelTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/UseTree.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/{TreeNodeRenderer.css → LabelEditor.css} +3 -3
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js +300 -0
- package/lib/presentation-hierarchies-react/stratakit/LabelEditor.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js +97 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeContextMenu.js.map +1 -0
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeFilterAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts +0 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +43 -351
- package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.d.ts.map +1 -1
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js +34 -5
- package/lib/presentation-hierarchies-react/stratakit/TreeRenderer.js.map +1 -1
- package/package.json +31 -26
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { useTranslation } from "../LocalizationContext.js";
|
|
2
2
|
import { TreeActionBase } from "./TreeAction.js";
|
|
3
|
-
import {
|
|
3
|
+
import { useTreeContextMenu } from "./TreeContextMenu.js";
|
|
4
4
|
import { c } from "react-compiler-runtime";
|
|
5
|
-
import { cloneElement, forwardRef, isValidElement, memo
|
|
6
|
-
import {
|
|
7
|
-
import { CircularProgress
|
|
8
|
-
import {
|
|
9
|
-
import { Tree, unstable_Popover } from "@stratakit/structures";
|
|
10
|
-
import "./TreeNodeRenderer.css";
|
|
11
|
-
import checkmarkSvg from "@stratakit/icons/checkmark.svg";
|
|
12
|
-
import dismissSvg from "@stratakit/icons/dismiss.svg";
|
|
5
|
+
import { cloneElement, forwardRef, isValidElement, memo } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { CircularProgress } from "@mui/material";
|
|
8
|
+
import { Tree } from "@stratakit/structures";
|
|
13
9
|
import refreshSvg from "@stratakit/icons/refresh.svg";
|
|
14
10
|
//#region src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx
|
|
15
11
|
/**
|
|
@@ -18,7 +14,7 @@ import refreshSvg from "@stratakit/icons/refresh.svg";
|
|
|
18
14
|
* @internal
|
|
19
15
|
*/
|
|
20
16
|
const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props, forwardedRef) {
|
|
21
|
-
const $ = c(
|
|
17
|
+
const $ = c(39);
|
|
22
18
|
let contextMenuActions;
|
|
23
19
|
let decorations;
|
|
24
20
|
let expandNode;
|
|
@@ -49,8 +45,7 @@ const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props,
|
|
|
49
45
|
treeItemProps = $[8];
|
|
50
46
|
}
|
|
51
47
|
const translate = useTranslation();
|
|
52
|
-
const
|
|
53
|
-
const [contextMenuProps, setContextMenuProps] = useState(void 0);
|
|
48
|
+
const contextMenu = useTreeContextMenu();
|
|
54
49
|
const label = treeItemProps.label ?? node.label;
|
|
55
50
|
let t0;
|
|
56
51
|
bb0: {
|
|
@@ -129,53 +124,25 @@ const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props,
|
|
|
129
124
|
}
|
|
130
125
|
const expanded = t2;
|
|
131
126
|
let t3;
|
|
132
|
-
if ($[21] !==
|
|
133
|
-
t3 =
|
|
134
|
-
$[21] = renameContext;
|
|
135
|
-
$[22] = t3;
|
|
136
|
-
} else t3 = $[22];
|
|
137
|
-
const { renameParameters, cancelRename } = t3;
|
|
138
|
-
const t4 = renameParameters?.commit;
|
|
139
|
-
const t5 = renameParameters?.labelValidationHint;
|
|
140
|
-
const t6 = renameParameters?.validate;
|
|
141
|
-
let t7;
|
|
142
|
-
if ($[23] !== cancelRename || $[24] !== node.label || $[25] !== t4 || $[26] !== t5 || $[27] !== t6) {
|
|
143
|
-
t7 = /* @__PURE__ */ jsx(LabelEditor, {
|
|
144
|
-
initialLabel: node.label,
|
|
145
|
-
onChange: t4,
|
|
146
|
-
onCancel: cancelRename,
|
|
147
|
-
labelValidationHint: t5,
|
|
148
|
-
validate: t6
|
|
149
|
-
});
|
|
150
|
-
$[23] = cancelRename;
|
|
151
|
-
$[24] = node.label;
|
|
152
|
-
$[25] = t4;
|
|
153
|
-
$[26] = t5;
|
|
154
|
-
$[27] = t6;
|
|
155
|
-
$[28] = t7;
|
|
156
|
-
} else t7 = $[28];
|
|
157
|
-
const labelEditor = t7;
|
|
158
|
-
const t8 = renameParameters?.nodeId === node.id;
|
|
159
|
-
let t9;
|
|
160
|
-
if ($[29] !== expandNode || $[30] !== node.id) {
|
|
161
|
-
t9 = (isExpanded) => {
|
|
127
|
+
if ($[21] !== expandNode || $[22] !== node.id) {
|
|
128
|
+
t3 = (isExpanded) => {
|
|
162
129
|
expandNode(node.id, isExpanded);
|
|
163
130
|
};
|
|
164
|
-
$[
|
|
165
|
-
$[
|
|
166
|
-
$[
|
|
167
|
-
} else
|
|
168
|
-
const
|
|
169
|
-
const
|
|
170
|
-
let
|
|
171
|
-
if ($[
|
|
172
|
-
|
|
131
|
+
$[21] = expandNode;
|
|
132
|
+
$[22] = node.id;
|
|
133
|
+
$[23] = t3;
|
|
134
|
+
} else t3 = $[23];
|
|
135
|
+
const onExpandedChange = t3;
|
|
136
|
+
const t4 = node.errors.length > 0 ? node.errors[0].id : void 0;
|
|
137
|
+
let t5;
|
|
138
|
+
if ($[24] !== contextMenu || $[25] !== contextMenuActions || $[26] !== treeItemProps) {
|
|
139
|
+
t5 = (e_1) => {
|
|
173
140
|
if (treeItemProps.onContextMenu) treeItemProps.onContextMenu(e_1);
|
|
174
141
|
if (!contextMenuActions) return;
|
|
175
142
|
e_1.preventDefault();
|
|
176
143
|
const actions = injectActionVariant(contextMenuActions, "context-menu");
|
|
177
144
|
if (actions.length === 0) return;
|
|
178
|
-
|
|
145
|
+
contextMenu.openContextMenu({
|
|
179
146
|
position: {
|
|
180
147
|
x: e_1.clientX,
|
|
181
148
|
y: e_1.clientY
|
|
@@ -183,114 +150,38 @@ const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props,
|
|
|
183
150
|
actions
|
|
184
151
|
});
|
|
185
152
|
};
|
|
186
|
-
$[
|
|
187
|
-
$[
|
|
188
|
-
$[
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
153
|
+
$[24] = contextMenu;
|
|
154
|
+
$[25] = contextMenuActions;
|
|
155
|
+
$[26] = treeItemProps;
|
|
156
|
+
$[27] = t5;
|
|
157
|
+
} else t5 = $[27];
|
|
158
|
+
let t6;
|
|
159
|
+
if ($[28] !== decorations || $[29] !== expanded || $[30] !== forwardedRef || $[31] !== inlineActionItems || $[32] !== label || $[33] !== menuActionItems || $[34] !== onExpandedChange || $[35] !== t4 || $[36] !== t5 || $[37] !== treeItemProps) {
|
|
160
|
+
t6 = /* @__PURE__ */ jsx(Tree.Item, {
|
|
193
161
|
...treeItemProps,
|
|
194
162
|
ref: forwardedRef,
|
|
195
163
|
label,
|
|
196
164
|
expanded,
|
|
197
|
-
onExpandedChange
|
|
165
|
+
onExpandedChange,
|
|
198
166
|
inlineActions: inlineActionItems,
|
|
199
167
|
actions: menuActionItems,
|
|
200
168
|
unstable_decorations: decorations,
|
|
201
|
-
error:
|
|
202
|
-
onContextMenu:
|
|
203
|
-
});
|
|
204
|
-
$[35] = decorations;
|
|
205
|
-
$[36] = expanded;
|
|
206
|
-
$[37] = forwardedRef;
|
|
207
|
-
$[38] = inlineActionItems;
|
|
208
|
-
$[39] = label;
|
|
209
|
-
$[40] = menuActionItems;
|
|
210
|
-
$[41] = t10;
|
|
211
|
-
$[42] = t11;
|
|
212
|
-
$[43] = t12;
|
|
213
|
-
$[44] = treeItemProps;
|
|
214
|
-
$[45] = t13;
|
|
215
|
-
} else t13 = $[45];
|
|
216
|
-
let t14;
|
|
217
|
-
if ($[46] !== cancelRename || $[47] !== labelEditor || $[48] !== t13 || $[49] !== t8) {
|
|
218
|
-
t14 = /* @__PURE__ */ jsx(unstable_Popover, {
|
|
219
|
-
content: labelEditor,
|
|
220
|
-
placement: "bottom",
|
|
221
|
-
open: t8,
|
|
222
|
-
setOpen: cancelRename,
|
|
223
|
-
unmountOnHide: true,
|
|
224
|
-
children: t13
|
|
225
|
-
});
|
|
226
|
-
$[46] = cancelRename;
|
|
227
|
-
$[47] = labelEditor;
|
|
228
|
-
$[48] = t13;
|
|
229
|
-
$[49] = t8;
|
|
230
|
-
$[50] = t14;
|
|
231
|
-
} else t14 = $[50];
|
|
232
|
-
const t15 = !!contextMenuProps;
|
|
233
|
-
let t16;
|
|
234
|
-
let t17;
|
|
235
|
-
if ($[51] === Symbol.for("react.memo_cache_sentinel")) {
|
|
236
|
-
t16 = () => setContextMenuProps(void 0);
|
|
237
|
-
t17 = (e_2) => {
|
|
238
|
-
e_2.preventDefault();
|
|
239
|
-
setContextMenuProps(void 0);
|
|
240
|
-
};
|
|
241
|
-
$[51] = t16;
|
|
242
|
-
$[52] = t17;
|
|
243
|
-
} else {
|
|
244
|
-
t16 = $[51];
|
|
245
|
-
t17 = $[52];
|
|
246
|
-
}
|
|
247
|
-
let t18;
|
|
248
|
-
if ($[53] !== contextMenuProps) {
|
|
249
|
-
t18 = contextMenuProps ? {
|
|
250
|
-
top: contextMenuProps.position.y,
|
|
251
|
-
left: contextMenuProps.position.x
|
|
252
|
-
} : void 0;
|
|
253
|
-
$[53] = contextMenuProps;
|
|
254
|
-
$[54] = t18;
|
|
255
|
-
} else t18 = $[54];
|
|
256
|
-
let t19;
|
|
257
|
-
if ($[55] !== translate) {
|
|
258
|
-
t19 = translate("more");
|
|
259
|
-
$[55] = translate;
|
|
260
|
-
$[56] = t19;
|
|
261
|
-
} else t19 = $[56];
|
|
262
|
-
let t20;
|
|
263
|
-
if ($[57] === Symbol.for("react.memo_cache_sentinel")) {
|
|
264
|
-
t20 = () => setContextMenuProps(void 0);
|
|
265
|
-
$[57] = t20;
|
|
266
|
-
} else t20 = $[57];
|
|
267
|
-
const t21 = contextMenuProps?.actions;
|
|
268
|
-
let t22;
|
|
269
|
-
if ($[58] !== t15 || $[59] !== t18 || $[60] !== t19 || $[61] !== t21) {
|
|
270
|
-
t22 = /* @__PURE__ */ jsx(Menu, {
|
|
271
|
-
open: t15,
|
|
272
|
-
onClose: t16,
|
|
273
|
-
onContextMenu: t17,
|
|
274
|
-
anchorReference: "anchorPosition",
|
|
275
|
-
anchorPosition: t18,
|
|
276
|
-
"aria-label": t19,
|
|
277
|
-
onClick: t20,
|
|
278
|
-
children: t21
|
|
169
|
+
error: t4,
|
|
170
|
+
onContextMenu: t5
|
|
279
171
|
});
|
|
280
|
-
$[
|
|
281
|
-
$[
|
|
282
|
-
$[
|
|
283
|
-
$[
|
|
284
|
-
$[
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
$[
|
|
290
|
-
$[
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
return t23;
|
|
172
|
+
$[28] = decorations;
|
|
173
|
+
$[29] = expanded;
|
|
174
|
+
$[30] = forwardedRef;
|
|
175
|
+
$[31] = inlineActionItems;
|
|
176
|
+
$[32] = label;
|
|
177
|
+
$[33] = menuActionItems;
|
|
178
|
+
$[34] = onExpandedChange;
|
|
179
|
+
$[35] = t4;
|
|
180
|
+
$[36] = t5;
|
|
181
|
+
$[37] = treeItemProps;
|
|
182
|
+
$[38] = t6;
|
|
183
|
+
} else t6 = $[38];
|
|
184
|
+
return t6;
|
|
294
185
|
}));
|
|
295
186
|
const PlaceholderNode = memo(forwardRef(function PlaceholderNode(t0, forwardedRef) {
|
|
296
187
|
const $ = c(13);
|
|
@@ -338,205 +229,6 @@ const PlaceholderNode = memo(forwardRef(function PlaceholderNode(t0, forwardedRe
|
|
|
338
229
|
} else t4 = $[12];
|
|
339
230
|
return t4;
|
|
340
231
|
}));
|
|
341
|
-
function LabelEditor(t0) {
|
|
342
|
-
const $ = c(49);
|
|
343
|
-
const { initialLabel, labelValidationHint, onChange, onCancel, validate } = t0;
|
|
344
|
-
const translate = useTranslation();
|
|
345
|
-
const inputRef = useRef(null);
|
|
346
|
-
const [newLabelValue, setNewLabelValue] = useState(initialLabel);
|
|
347
|
-
const [hasError, setHasError] = useState(false);
|
|
348
|
-
let t1;
|
|
349
|
-
if ($[0] !== initialLabel || $[1] !== newLabelValue || $[2] !== onCancel || $[3] !== onChange || $[4] !== validate) {
|
|
350
|
-
t1 = () => {
|
|
351
|
-
if (validate && !validate(newLabelValue)) {
|
|
352
|
-
setHasError(true);
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
if (initialLabel !== newLabelValue) {
|
|
356
|
-
onChange?.(newLabelValue);
|
|
357
|
-
return;
|
|
358
|
-
}
|
|
359
|
-
onCancel?.();
|
|
360
|
-
};
|
|
361
|
-
$[0] = initialLabel;
|
|
362
|
-
$[1] = newLabelValue;
|
|
363
|
-
$[2] = onCancel;
|
|
364
|
-
$[3] = onChange;
|
|
365
|
-
$[4] = validate;
|
|
366
|
-
$[5] = t1;
|
|
367
|
-
} else t1 = $[5];
|
|
368
|
-
const handleLabelChange = t1;
|
|
369
|
-
let t2;
|
|
370
|
-
if ($[6] !== initialLabel || $[7] !== onCancel) {
|
|
371
|
-
t2 = () => {
|
|
372
|
-
setNewLabelValue(initialLabel);
|
|
373
|
-
onCancel?.();
|
|
374
|
-
};
|
|
375
|
-
$[6] = initialLabel;
|
|
376
|
-
$[7] = onCancel;
|
|
377
|
-
$[8] = t2;
|
|
378
|
-
} else t2 = $[8];
|
|
379
|
-
const cancelLabelChange = t2;
|
|
380
|
-
let t3;
|
|
381
|
-
let t4;
|
|
382
|
-
if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
|
|
383
|
-
t3 = () => {
|
|
384
|
-
if (inputRef.current) {
|
|
385
|
-
inputRef.current.focus();
|
|
386
|
-
inputRef.current.select();
|
|
387
|
-
}
|
|
388
|
-
};
|
|
389
|
-
t4 = [];
|
|
390
|
-
$[9] = t3;
|
|
391
|
-
$[10] = t4;
|
|
392
|
-
} else {
|
|
393
|
-
t3 = $[9];
|
|
394
|
-
t4 = $[10];
|
|
395
|
-
}
|
|
396
|
-
useEffect(t3, t4);
|
|
397
|
-
const canRename = newLabelValue && newLabelValue !== initialLabel && !hasError;
|
|
398
|
-
const inputId = useId();
|
|
399
|
-
let t5;
|
|
400
|
-
if ($[11] !== translate) {
|
|
401
|
-
t5 = translate("newLabel");
|
|
402
|
-
$[11] = translate;
|
|
403
|
-
$[12] = t5;
|
|
404
|
-
} else t5 = $[12];
|
|
405
|
-
let t6;
|
|
406
|
-
if ($[13] !== t5) {
|
|
407
|
-
t6 = { htmlInput: { "aria-label": t5 } };
|
|
408
|
-
$[13] = t5;
|
|
409
|
-
$[14] = t6;
|
|
410
|
-
} else t6 = $[14];
|
|
411
|
-
let t7;
|
|
412
|
-
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
|
|
413
|
-
t7 = (event) => {
|
|
414
|
-
setNewLabelValue(event.target.value);
|
|
415
|
-
setHasError(false);
|
|
416
|
-
};
|
|
417
|
-
$[15] = t7;
|
|
418
|
-
} else t7 = $[15];
|
|
419
|
-
let t8;
|
|
420
|
-
if ($[16] !== cancelLabelChange || $[17] !== handleLabelChange) {
|
|
421
|
-
t8 = (event_0) => {
|
|
422
|
-
if (event_0.key === "Enter") handleLabelChange();
|
|
423
|
-
else if (event_0.key === "Escape") cancelLabelChange();
|
|
424
|
-
};
|
|
425
|
-
$[16] = cancelLabelChange;
|
|
426
|
-
$[17] = handleLabelChange;
|
|
427
|
-
$[18] = t8;
|
|
428
|
-
} else t8 = $[18];
|
|
429
|
-
let t9;
|
|
430
|
-
if ($[19] !== hasError || $[20] !== inputId || $[21] !== newLabelValue || $[22] !== t6 || $[23] !== t8) {
|
|
431
|
-
t9 = /* @__PURE__ */ jsx(TextField, {
|
|
432
|
-
fullWidth: true,
|
|
433
|
-
error: hasError,
|
|
434
|
-
size: "small",
|
|
435
|
-
id: inputId,
|
|
436
|
-
inputRef,
|
|
437
|
-
slotProps: t6,
|
|
438
|
-
value: newLabelValue,
|
|
439
|
-
onChange: t7,
|
|
440
|
-
onKeyUp: t8
|
|
441
|
-
});
|
|
442
|
-
$[19] = hasError;
|
|
443
|
-
$[20] = inputId;
|
|
444
|
-
$[21] = newLabelValue;
|
|
445
|
-
$[22] = t6;
|
|
446
|
-
$[23] = t8;
|
|
447
|
-
$[24] = t9;
|
|
448
|
-
} else t9 = $[24];
|
|
449
|
-
let t10;
|
|
450
|
-
if ($[25] !== translate) {
|
|
451
|
-
t10 = translate("cancel");
|
|
452
|
-
$[25] = translate;
|
|
453
|
-
$[26] = t10;
|
|
454
|
-
} else t10 = $[26];
|
|
455
|
-
let t11;
|
|
456
|
-
if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
|
|
457
|
-
t11 = /* @__PURE__ */ jsx(Icon, { href: dismissSvg });
|
|
458
|
-
$[27] = t11;
|
|
459
|
-
} else t11 = $[27];
|
|
460
|
-
let t12;
|
|
461
|
-
if ($[28] !== cancelLabelChange || $[29] !== t10) {
|
|
462
|
-
t12 = /* @__PURE__ */ jsx(IconButton, {
|
|
463
|
-
"aria-label": t10,
|
|
464
|
-
onClick: cancelLabelChange,
|
|
465
|
-
size: "small",
|
|
466
|
-
children: t11
|
|
467
|
-
});
|
|
468
|
-
$[28] = cancelLabelChange;
|
|
469
|
-
$[29] = t10;
|
|
470
|
-
$[30] = t12;
|
|
471
|
-
} else t12 = $[30];
|
|
472
|
-
let t13;
|
|
473
|
-
if ($[31] !== translate) {
|
|
474
|
-
t13 = translate("confirm");
|
|
475
|
-
$[31] = translate;
|
|
476
|
-
$[32] = t13;
|
|
477
|
-
} else t13 = $[32];
|
|
478
|
-
const t14 = !canRename;
|
|
479
|
-
let t15;
|
|
480
|
-
if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
|
|
481
|
-
t15 = /* @__PURE__ */ jsx(Icon, { href: checkmarkSvg });
|
|
482
|
-
$[33] = t15;
|
|
483
|
-
} else t15 = $[33];
|
|
484
|
-
let t16;
|
|
485
|
-
if ($[34] !== handleLabelChange || $[35] !== t13 || $[36] !== t14) {
|
|
486
|
-
t16 = /* @__PURE__ */ jsx(IconButton, {
|
|
487
|
-
"aria-label": t13,
|
|
488
|
-
onClick: handleLabelChange,
|
|
489
|
-
disabled: t14,
|
|
490
|
-
size: "small",
|
|
491
|
-
children: t15
|
|
492
|
-
});
|
|
493
|
-
$[34] = handleLabelChange;
|
|
494
|
-
$[35] = t13;
|
|
495
|
-
$[36] = t14;
|
|
496
|
-
$[37] = t16;
|
|
497
|
-
} else t16 = $[37];
|
|
498
|
-
let t17;
|
|
499
|
-
if ($[38] !== t12 || $[39] !== t16 || $[40] !== t9) {
|
|
500
|
-
t17 = /* @__PURE__ */ jsxs("div", {
|
|
501
|
-
className: "phr-node-label-editor-input-row",
|
|
502
|
-
children: [
|
|
503
|
-
t9,
|
|
504
|
-
t12,
|
|
505
|
-
t16
|
|
506
|
-
]
|
|
507
|
-
});
|
|
508
|
-
$[38] = t12;
|
|
509
|
-
$[39] = t16;
|
|
510
|
-
$[40] = t9;
|
|
511
|
-
$[41] = t17;
|
|
512
|
-
} else t17 = $[41];
|
|
513
|
-
let t18;
|
|
514
|
-
if ($[42] !== hasError || $[43] !== labelValidationHint) {
|
|
515
|
-
t18 = labelValidationHint !== void 0 ? /* @__PURE__ */ jsx(FormHelperText, {
|
|
516
|
-
error: hasError,
|
|
517
|
-
style: { display: "flex" },
|
|
518
|
-
children: /* @__PURE__ */ jsx(Typography, {
|
|
519
|
-
variant: "caption",
|
|
520
|
-
children: labelValidationHint
|
|
521
|
-
})
|
|
522
|
-
}) : void 0;
|
|
523
|
-
$[42] = hasError;
|
|
524
|
-
$[43] = labelValidationHint;
|
|
525
|
-
$[44] = t18;
|
|
526
|
-
} else t18 = $[44];
|
|
527
|
-
let t19;
|
|
528
|
-
if ($[45] !== initialLabel || $[46] !== t17 || $[47] !== t18) {
|
|
529
|
-
t19 = /* @__PURE__ */ jsxs("div", {
|
|
530
|
-
className: "phr-node-label-editor",
|
|
531
|
-
children: [t17, t18]
|
|
532
|
-
}, initialLabel);
|
|
533
|
-
$[45] = initialLabel;
|
|
534
|
-
$[46] = t17;
|
|
535
|
-
$[47] = t18;
|
|
536
|
-
$[48] = t19;
|
|
537
|
-
} else t19 = $[48];
|
|
538
|
-
return t19;
|
|
539
|
-
}
|
|
540
232
|
function injectActionVariant(actions, variant) {
|
|
541
233
|
return actions.filter((action) => isValidElement(action)).map((action) => cloneElement(action, { variant }));
|
|
542
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeNodeRenderer.js","names":["cloneElement","forwardRef","isValidElement","memo","useCallback","useEffect","useId","useMemo","useRef","useState","CircularProgress","FormHelperText","IconButton","Menu","TextField","Typography","Icon","unstable_Popover","Popover","Tree","useTranslation","TreeActionBase","useTreeNodeRenameContext","checkmarkSvg","dismissSvg","refreshSvg","ComponentPropsWithoutRef","FC","PropsWithRef","ReactNode","RefAttributes","TreeRendererProps","TreeNode","TreeActionBaseAttributes","TreeNodeRendererOwnProps","Pick","node","menuActions","inlineActions","contextMenuActions","StrataKitTreeItemProps","Omit","Item","decorations","TreeNodeRendererProps","StrataKitTreeNodeRenderer","HTMLElement","HierarchyNode","props","forwardedRef","$","_c","expandNode","reloadTree","treeItemProps","translate","renameContext","contextMenuProps","setContextMenuProps","undefined","label","t0","bb0","errors","some","_temp","t1","t2","id","parentNodeId","state","t3","injectActionVariant","inlineActionItems","bb1","menuActionItems","bb2","_temp2","children","length","isExpanded","expanded","renameParameters","cancelRename","t4","commit","t5","labelValidationHint","t6","validate","t7","labelEditor","t8","nodeId","t9","t10","t11","t12","e_1","onContextMenu","e","preventDefault","actions","position","x","clientX","y","clientY","t13","t14","t15","t16","t17","Symbol","for","e_2","t18","top","left","t19","t20","t21","t22","t23","PlaceholderNode","LabelEditor","initialLabel","onChange","onCancel","inputRef","newLabelValue","setNewLabelValue","hasError","setHasError","handleLabelChange","cancelLabelChange","current","focus","select","canRename","inputId","htmlInput","event","target","value","event_0","key","display","variant","filter","action","map","type","e_0","isNodeExpandable"],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"./TreeNodeRenderer.css\";\n\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n memo,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { CircularProgress, FormHelperText, IconButton, Menu, TextField, Typography } from \"@mui/material\";\nimport { Icon } from \"@stratakit/mui\";\nimport { unstable_Popover as Popover, Tree } from \"@stratakit/structures\";\nimport { useTranslation } from \"../LocalizationContext.js\";\nimport { TreeActionBase } from \"./TreeAction.js\";\nimport { useTreeNodeRenameContext } from \"./TreeNodeRenameAction.js\";\n\nimport checkmarkSvg from \"@stratakit/icons/checkmark.svg\";\nimport dismissSvg from \"@stratakit/icons/dismiss.svg\";\nimport refreshSvg from \"@stratakit/icons/refresh.svg\";\n\nimport type { ComponentPropsWithoutRef, FC, PropsWithRef, ReactNode, RefAttributes } from \"react\";\nimport type { TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { TreeActionBaseAttributes } from \"./TreeAction.js\";\n\n/** @internal */\ninterface TreeNodeRendererOwnProps extends Pick<TreeRendererProps, \"expandNode\" | \"reloadTree\"> {\n /** Node that is rendered. */\n node: TreeNode;\n /**\n * Menu actions for tree item.\n * Must be an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n menuActions?: ReactNode[];\n /**\n * Inline actions for tree item.\n * Must be an array of `<TreeActionBase />` elements.\n * Max 2 items.\n */\n inlineActions?: ReactNode[];\n /**\n * Context menu actions for tree item.\n * Must be an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n contextMenuActions?: ReactNode[];\n}\n\n/** @alpha */\nexport type StrataKitTreeItemProps = Omit<\n ComponentPropsWithoutRef<typeof Tree.Item>,\n \"actions\" | \"inlineActions\" | \"expanded\" | \"onExpandedChange\" | \"icon\" | \"unstable_decorations\" | \"error\"\n> & {\n /**\n * Used to render elements between expander and label.\n * E.g. icons, color picker, etc.\n */\n decorations?: ReactNode;\n};\n\n/** @internal */\nexport type TreeNodeRendererProps = StrataKitTreeItemProps & TreeNodeRendererOwnProps;\n\n/**\n * A component that renders a given `TreeNode` using the `Tree.Item` component from `@stratakit/structures`.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport const StrataKitTreeNodeRenderer: FC<PropsWithRef<TreeNodeRendererProps & RefAttributes<HTMLElement>>> = memo(\n forwardRef<HTMLElement, TreeNodeRendererProps>(function HierarchyNode(props, forwardedRef) {\n const {\n node,\n decorations,\n inlineActions,\n menuActions,\n contextMenuActions,\n expandNode,\n reloadTree,\n ...treeItemProps\n } = props;\n const translate = useTranslation();\n const renameContext = useTreeNodeRenameContext();\n const [contextMenuProps, setContextMenuProps] = useState<\n { position: { x: number; y: number }; actions: ReactNode[] } | undefined\n >(undefined);\n\n const label = treeItemProps.label ?? node.label;\n const inlineActionItems = useMemo(() => {\n if (node.errors.some((e) => e.type === \"ChildrenLoad\")) {\n return [\n <TreeActionBase\n key=\"retry\"\n label={translate(\"retry\")}\n onClick={() => reloadTree({ parentNodeId: node.id, state: \"reset\" })}\n visible={true}\n icon={refreshSvg}\n variant=\"inline\"\n />,\n ];\n }\n if (!inlineActions) {\n return undefined;\n }\n return injectActionVariant(inlineActions, \"inline\");\n }, [node, inlineActions, translate, reloadTree]);\n\n const menuActionItems = useMemo(() => {\n if (!menuActions) {\n return undefined;\n }\n return injectActionVariant(menuActions, \"default\");\n }, [menuActions]);\n\n const expanded = useMemo(() => {\n if (node.errors.some((e) => e.type !== \"Unknown\" || !e.isNodeExpandable)) {\n return undefined;\n }\n\n // this is a leaf node\n if (node.children !== true && node.children.length === 0) {\n return undefined;\n }\n\n return node.isExpanded;\n }, [node]);\n\n const { renameParameters, cancelRename } = renameContext ?? {};\n const labelEditor = (\n <LabelEditor\n initialLabel={node.label}\n onChange={renameParameters?.commit}\n onCancel={cancelRename}\n labelValidationHint={renameParameters?.labelValidationHint}\n validate={renameParameters?.validate}\n />\n );\n\n return (\n <>\n <Popover\n content={labelEditor}\n placement=\"bottom\"\n open={renameParameters?.nodeId === node.id}\n setOpen={cancelRename}\n unmountOnHide\n >\n <Tree.Item\n {...treeItemProps}\n ref={forwardedRef}\n label={label}\n expanded={expanded}\n onExpandedChange={useCallback(\n (isExpanded: boolean) => {\n expandNode(node.id, isExpanded);\n },\n [node, expandNode],\n )}\n inlineActions={inlineActionItems}\n actions={menuActionItems}\n unstable_decorations={decorations}\n error={node.errors.length > 0 ? node.errors[0].id : undefined}\n onContextMenu={(e) => {\n if (treeItemProps.onContextMenu) {\n treeItemProps.onContextMenu(e);\n }\n\n if (!contextMenuActions) {\n return;\n }\n\n e.preventDefault();\n const actions = injectActionVariant(contextMenuActions, \"context-menu\");\n if (actions.length === 0) {\n return;\n }\n\n setContextMenuProps({ position: { x: e.clientX, y: e.clientY }, actions });\n }}\n />\n </Popover>\n <Menu\n open={!!contextMenuProps}\n onClose={() => setContextMenuProps(undefined)}\n onContextMenu={(e) => {\n e.preventDefault();\n setContextMenuProps(undefined);\n }}\n anchorReference=\"anchorPosition\"\n anchorPosition={\n contextMenuProps ? { top: contextMenuProps.position.y, left: contextMenuProps.position.x } : undefined\n }\n aria-label={translate(\"more\")}\n onClick={() => setContextMenuProps(undefined)}\n >\n {contextMenuProps?.actions}\n </Menu>\n </>\n );\n }),\n);\n\nexport const PlaceholderNode: FC<\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n PropsWithRef<\n Pick<StrataKitTreeItemProps, \"style\" | \"aria-level\" | \"aria-posinset\" | \"aria-setsize\"> & RefAttributes<HTMLElement>\n >\n> = memo(\n forwardRef<HTMLElement, Pick<StrataKitTreeItemProps, \"style\" | \"aria-level\" | \"aria-posinset\" | \"aria-setsize\">>(\n function PlaceholderNode({ ...props }, forwardedRef) {\n const translate = useTranslation();\n return (\n <Tree.Item\n {...props}\n ref={forwardedRef}\n label={translate(\"loading\")}\n unstable_decorations={<CircularProgress size={16} title={translate(\"loading\")} />}\n />\n );\n },\n ),\n);\n\nfunction LabelEditor({\n initialLabel,\n labelValidationHint,\n onChange,\n onCancel,\n validate,\n}: {\n initialLabel: string;\n labelValidationHint?: string;\n onChange?: (newLabel: string) => void;\n onCancel?: () => void;\n validate?: (newLabel: string) => boolean;\n}) {\n const translate = useTranslation();\n const inputRef = useRef<HTMLInputElement>(null);\n const [newLabelValue, setNewLabelValue] = useState(initialLabel);\n const [hasError, setHasError] = useState<boolean>(false);\n const handleLabelChange = () => {\n if (validate && !validate(newLabelValue)) {\n setHasError(true);\n return;\n }\n\n if (initialLabel !== newLabelValue) {\n onChange?.(newLabelValue);\n return;\n }\n onCancel?.();\n };\n\n const cancelLabelChange = () => {\n setNewLabelValue(initialLabel);\n onCancel?.();\n };\n\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, []);\n\n const canRename = newLabelValue && newLabelValue !== initialLabel && !hasError;\n const inputId = useId();\n\n return (\n <div key={initialLabel} className=\"phr-node-label-editor\">\n <div className=\"phr-node-label-editor-input-row\">\n <TextField\n fullWidth\n error={hasError}\n size=\"small\"\n id={inputId}\n inputRef={inputRef}\n slotProps={{ htmlInput: { \"aria-label\": translate(\"newLabel\") } }}\n value={newLabelValue}\n onChange={(event) => {\n setNewLabelValue(event.target.value);\n setHasError(false);\n }}\n onKeyUp={(event) => {\n if (event.key === \"Enter\") {\n handleLabelChange();\n } else if (event.key === \"Escape\") {\n cancelLabelChange();\n }\n }}\n />\n <IconButton aria-label={translate(\"cancel\")} onClick={cancelLabelChange} size=\"small\">\n <Icon href={dismissSvg} />\n </IconButton>\n <IconButton aria-label={translate(\"confirm\")} onClick={handleLabelChange} disabled={!canRename} size=\"small\">\n <Icon href={checkmarkSvg} />\n </IconButton>\n </div>\n {labelValidationHint !== undefined ? (\n <FormHelperText error={hasError} style={{ display: \"flex\" }}>\n <Typography variant=\"caption\">{labelValidationHint}</Typography>\n </FormHelperText>\n ) : undefined}\n </div>\n );\n}\n\nfunction injectActionVariant(actions: ReactNode[], variant: TreeActionBaseAttributes[\"variant\"]) {\n return actions\n .filter((action) => isValidElement<TreeActionBaseAttributes>(action))\n .map((action) => cloneElement<TreeActionBaseAttributes>(action, { variant }));\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TreeNodeRenderer.js","names":["cloneElement","forwardRef","isValidElement","memo","useCallback","useMemo","CircularProgress","Tree","useTranslation","TreeActionBase","useTreeContextMenu","refreshSvg","ComponentPropsWithoutRef","FC","PropsWithRef","ReactNode","RefAttributes","TreeRendererProps","TreeNode","TreeActionBaseAttributes","TreeNodeRendererOwnProps","Pick","node","menuActions","inlineActions","contextMenuActions","StrataKitTreeItemProps","Omit","Item","decorations","TreeNodeRendererProps","StrataKitTreeNodeRenderer","HTMLElement","HierarchyNode","props","forwardedRef","$","_c","expandNode","reloadTree","treeItemProps","translate","contextMenu","label","t0","bb0","errors","some","_temp","t1","t2","id","parentNodeId","state","t3","undefined","injectActionVariant","inlineActionItems","bb1","menuActionItems","bb2","_temp2","children","length","isExpanded","expanded","onExpandedChange","t4","t5","e_1","onContextMenu","e","preventDefault","actions","openContextMenu","position","x","clientX","y","clientY","t6","PlaceholderNode","variant","filter","action","map","type","e_0","isNodeExpandable"],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { cloneElement, forwardRef, isValidElement, memo, useCallback, useMemo } from \"react\";\nimport { CircularProgress } from \"@mui/material\";\nimport { Tree } from \"@stratakit/structures\";\nimport { useTranslation } from \"../LocalizationContext.js\";\nimport { TreeActionBase } from \"./TreeAction.js\";\nimport { useTreeContextMenu } from \"./TreeContextMenu.js\";\n\nimport refreshSvg from \"@stratakit/icons/refresh.svg\";\n\nimport type { ComponentPropsWithoutRef, FC, PropsWithRef, ReactNode, RefAttributes } from \"react\";\nimport type { TreeRendererProps } from \"../Renderers.js\";\nimport type { TreeNode } from \"../TreeNode.js\";\nimport type { TreeActionBaseAttributes } from \"./TreeAction.js\";\n\n/** @internal */\ninterface TreeNodeRendererOwnProps extends Pick<TreeRendererProps, \"expandNode\" | \"reloadTree\"> {\n /** Node that is rendered. */\n node: TreeNode;\n /**\n * Menu actions for tree item.\n * Must be an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n menuActions?: ReactNode[];\n /**\n * Inline actions for tree item.\n * Must be an array of `<TreeActionBase />` elements.\n * Max 2 items.\n */\n inlineActions?: ReactNode[];\n /**\n * Context menu actions for tree item.\n * Must be an array of `<TreeActionBase />` or `<Divider />` elements.\n */\n contextMenuActions?: ReactNode[];\n}\n\n/** @alpha */\nexport type StrataKitTreeItemProps = Omit<\n ComponentPropsWithoutRef<typeof Tree.Item>,\n \"actions\" | \"inlineActions\" | \"expanded\" | \"onExpandedChange\" | \"icon\" | \"unstable_decorations\" | \"error\"\n> & {\n /**\n * Used to render elements between expander and label.\n * E.g. icons, color picker, etc.\n */\n decorations?: ReactNode;\n};\n\n/** @internal */\nexport type TreeNodeRendererProps = StrataKitTreeItemProps & TreeNodeRendererOwnProps;\n\n/**\n * A component that renders a given `TreeNode` using the `Tree.Item` component from `@stratakit/structures`.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport const StrataKitTreeNodeRenderer: FC<PropsWithRef<TreeNodeRendererProps & RefAttributes<HTMLElement>>> = memo(\n forwardRef<HTMLElement, TreeNodeRendererProps>(function HierarchyNode(props, forwardedRef) {\n const {\n node,\n decorations,\n inlineActions,\n menuActions,\n contextMenuActions,\n expandNode,\n reloadTree,\n ...treeItemProps\n } = props;\n const translate = useTranslation();\n const contextMenu = useTreeContextMenu();\n\n const label = treeItemProps.label ?? node.label;\n const inlineActionItems = useMemo(() => {\n if (node.errors.some((e) => e.type === \"ChildrenLoad\")) {\n return [\n <TreeActionBase\n key=\"retry\"\n label={translate(\"retry\")}\n onClick={() => reloadTree({ parentNodeId: node.id, state: \"reset\" })}\n visible={true}\n icon={refreshSvg}\n variant=\"inline\"\n />,\n ];\n }\n if (!inlineActions) {\n return undefined;\n }\n return injectActionVariant(inlineActions, \"inline\");\n }, [node, inlineActions, translate, reloadTree]);\n\n const menuActionItems = useMemo(() => {\n if (!menuActions) {\n return undefined;\n }\n return injectActionVariant(menuActions, \"default\");\n }, [menuActions]);\n\n const expanded = useMemo(() => {\n if (node.errors.some((e) => e.type !== \"Unknown\" || !e.isNodeExpandable)) {\n return undefined;\n }\n\n // this is a leaf node\n if (node.children !== true && node.children.length === 0) {\n return undefined;\n }\n\n return node.isExpanded;\n }, [node]);\n\n const onExpandedChange = useCallback(\n (isExpanded: boolean) => {\n expandNode(node.id, isExpanded);\n },\n [node, expandNode],\n );\n\n return (\n <Tree.Item\n {...treeItemProps}\n ref={forwardedRef}\n label={label}\n expanded={expanded}\n onExpandedChange={onExpandedChange}\n inlineActions={inlineActionItems}\n actions={menuActionItems}\n unstable_decorations={decorations}\n error={node.errors.length > 0 ? node.errors[0].id : undefined}\n onContextMenu={(e) => {\n if (treeItemProps.onContextMenu) {\n treeItemProps.onContextMenu(e);\n }\n\n if (!contextMenuActions) {\n return;\n }\n\n e.preventDefault();\n const actions = injectActionVariant(contextMenuActions, \"context-menu\");\n if (actions.length === 0) {\n return;\n }\n\n contextMenu.openContextMenu({ position: { x: e.clientX, y: e.clientY }, actions });\n }}\n />\n );\n }),\n);\n\nexport const PlaceholderNode: FC<\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n PropsWithRef<\n Pick<StrataKitTreeItemProps, \"style\" | \"aria-level\" | \"aria-posinset\" | \"aria-setsize\"> & RefAttributes<HTMLElement>\n >\n> = memo(\n forwardRef<HTMLElement, Pick<StrataKitTreeItemProps, \"style\" | \"aria-level\" | \"aria-posinset\" | \"aria-setsize\">>(\n // eslint-disable-next-line @typescript-eslint/no-shadow\n function PlaceholderNode({ ...props }, forwardedRef) {\n const translate = useTranslation();\n return (\n <Tree.Item\n {...props}\n ref={forwardedRef}\n label={translate(\"loading\")}\n unstable_decorations={<CircularProgress size={16} title={translate(\"loading\")} />}\n />\n );\n },\n ),\n);\n\nfunction injectActionVariant(actions: ReactNode[], variant: TreeActionBaseAttributes[\"variant\"]) {\n return actions\n .filter((action) => isValidElement<TreeActionBaseAttributes>(action))\n .map((action) => cloneElement<TreeActionBaseAttributes>(action, { variant }));\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeRenderer.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeRenderer.tsx"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"TreeRenderer.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeRenderer.tsx"],"mappings":";;;;;;;;;;UA4BU;EACR;;;;;EAKA;;EAEA,gBAAgB;;EAEhB,iBAAiB,OAAO,2BAA2B;;EAEnD,mBAAmB,MAAM,aAAa;;EAGtC,gBAAgB,QAAQ,KAAK,sBAAsB,KAAK;;EAGxD,oBACE,MAAM,aACH,QAAQ,KAAK;;;;;EAMlB,kBAAkB;IAAS,YAAY;IAAU,eAAe;QAAiB;;;;;;EAMjF,oBAAoB;IAAS,YAAY;IAAU,eAAe;QAAiB;;;;;EAKnF,yBAAyB;IAAS,YAAY;IAAU,eAAe;QAAiB;;;UAIzE;;;;;;;EAOf,aAAa,gBAAgB,MAAM;;;KAIhC,6BAA6B,oBAChC,KAAK,kDACL;;;;;;cAOW,uBAAuB,GAClC,gBAAgB,8BAA8B,cAAc"}
|
|
@@ -2,11 +2,13 @@ import { useEvent, useMergedRefs } from "../Utils.js";
|
|
|
2
2
|
import { isPlaceholderItem, useErrorNodes, useFlatTreeItems } from "../FlatTreeNode.js";
|
|
3
3
|
import { TreeNodeRenameContextProvider, useTreeNodeRenameContextValue } from "./TreeNodeRenameAction.js";
|
|
4
4
|
import { useSelectionHandler } from "../UseSelectionHandler.js";
|
|
5
|
+
import { TreeNodeLabelEditorOverlay } from "./LabelEditor.js";
|
|
6
|
+
import { TreeContextMenuProvider } from "./TreeContextMenu.js";
|
|
5
7
|
import { TreeErrorRenderer } from "./TreeErrorRenderer.js";
|
|
6
8
|
import { PlaceholderNode, StrataKitTreeNodeRenderer } from "./TreeNodeRenderer.js";
|
|
7
9
|
import { c } from "react-compiler-runtime";
|
|
8
10
|
import { forwardRef, memo, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from "react";
|
|
9
|
-
import {
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
12
|
import { Tree } from "@stratakit/structures";
|
|
11
13
|
import { useVirtualizer } from "@tanstack/react-virtual";
|
|
12
14
|
//#region src/presentation-hierarchies-react/stratakit/TreeRenderer.tsx
|
|
@@ -69,15 +71,21 @@ const StrataKitTreeRenderer = forwardRef(function StrataKitTreeRenderer(props, f
|
|
|
69
71
|
return calculatedSelectedNodes;
|
|
70
72
|
};
|
|
71
73
|
}, [flatItems, isNodeSelected]);
|
|
72
|
-
|
|
74
|
+
const renameOverlayTarget = getRenameOverlayTarget({
|
|
75
|
+
renameParameters: renameContext.renameParameters,
|
|
76
|
+
items,
|
|
77
|
+
flatItems
|
|
78
|
+
});
|
|
79
|
+
return /* @__PURE__ */ jsxs(TreeContextMenuProvider, { children: [errorRenderer ? errorRenderer(errorRendererProps) : /* @__PURE__ */ jsx(TreeErrorRenderer, { ...errorRendererProps }), /* @__PURE__ */ jsxs("div", {
|
|
73
80
|
id,
|
|
74
81
|
style: {
|
|
75
82
|
height: "100%",
|
|
76
83
|
width: "100%",
|
|
77
|
-
overflowY: "auto"
|
|
84
|
+
overflowY: "auto",
|
|
85
|
+
position: "relative"
|
|
78
86
|
},
|
|
79
87
|
ref: parentRef,
|
|
80
|
-
children: /* @__PURE__ */ jsx(Tree.Root, {
|
|
88
|
+
children: [/* @__PURE__ */ jsx(Tree.Root, {
|
|
81
89
|
...treeRootProps,
|
|
82
90
|
style: {
|
|
83
91
|
height: virtualizer.getTotalSize(),
|
|
@@ -108,9 +116,30 @@ const StrataKitTreeRenderer = forwardRef(function StrataKitTreeRenderer(props, f
|
|
|
108
116
|
}, virtualizedItem.key);
|
|
109
117
|
})
|
|
110
118
|
})
|
|
111
|
-
})
|
|
119
|
+
}), renameContext.renameParameters && renameOverlayTarget ? /* @__PURE__ */ jsx(TreeNodeLabelEditorOverlay, {
|
|
120
|
+
node: renameOverlayTarget.node,
|
|
121
|
+
renameParameters: renameContext.renameParameters,
|
|
122
|
+
onCancel: cancelRename,
|
|
123
|
+
style: renameOverlayTarget.style
|
|
124
|
+
}) : null]
|
|
112
125
|
})] });
|
|
113
126
|
});
|
|
127
|
+
function getRenameOverlayTarget({ renameParameters, items, flatItems }) {
|
|
128
|
+
if (!renameParameters) return;
|
|
129
|
+
const virtualItem = items.find((virtualizedItem) => flatItems[virtualizedItem.index].id === renameParameters.nodeId);
|
|
130
|
+
const item = virtualItem ? flatItems[virtualItem.index] : void 0;
|
|
131
|
+
if (!virtualItem || !item || isPlaceholderItem(item)) return;
|
|
132
|
+
const levelPadding = `var(--stratakit-space-x2) + (var(--stratakit-space-x1) + var(--stratakit-space-x05)) * ${item.level - 1}`;
|
|
133
|
+
return {
|
|
134
|
+
node: item.node,
|
|
135
|
+
style: {
|
|
136
|
+
position: "absolute",
|
|
137
|
+
top: 0,
|
|
138
|
+
left: `calc(${levelPadding} + 1.5rem + var(--stratakit-space-x1))`,
|
|
139
|
+
transform: `translateY(${virtualItem.start + virtualItem.size}px)`
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}
|
|
114
143
|
function useExpandAndScrollToNode(t0) {
|
|
115
144
|
const $ = c(11);
|
|
116
145
|
const { rootNodes, flatItems, expandNode, virtualizer } = t0;
|