@itwin/presentation-hierarchies-react 2.0.0-alpha.61 → 2.0.0-alpha.63

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 (25) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +62 -53
  3. package/lib/presentation-hierarchies-react/UseTree.js +1 -2
  4. package/lib/presentation-hierarchies-react/UseTree.js.map +1 -1
  5. package/lib/presentation-hierarchies-react/Utils.js.map +1 -1
  6. package/lib/presentation-hierarchies-react/internal/TreeActions.js +2 -7
  7. package/lib/presentation-hierarchies-react/internal/TreeActions.js.map +1 -1
  8. package/lib/presentation-hierarchies-react/internal/TreeLoader.js.map +1 -1
  9. package/lib/presentation-hierarchies-react/internal/TreeModel.js +0 -2
  10. package/lib/presentation-hierarchies-react/internal/TreeModel.js.map +1 -1
  11. package/lib/presentation-hierarchies-react/internal/UseUnifiedSelection.js.map +1 -1
  12. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js +133 -132
  13. package/lib/presentation-hierarchies-react/stratakit/ErrorItemRenderer.js.map +1 -1
  14. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js +5 -4
  15. package/lib/presentation-hierarchies-react/stratakit/RootErrorRenderer.js.map +1 -1
  16. package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts +4 -2
  17. package/lib/presentation-hierarchies-react/stratakit/TreeAction.d.ts.map +1 -1
  18. package/lib/presentation-hierarchies-react/stratakit/TreeAction.js +37 -13
  19. package/lib/presentation-hierarchies-react/stratakit/TreeAction.js.map +1 -1
  20. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts +1 -0
  21. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts.map +1 -1
  22. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.d.ts.map +1 -1
  23. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js +152 -140
  24. package/lib/presentation-hierarchies-react/stratakit/TreeNodeRenderer.js.map +1 -1
  25. package/package.json +43 -59
@@ -1 +1 @@
1
- {"version":3,"file":"TreeAction.js","names":["memo","DropdownMenu","Tree","ComponentProps","NamedExoticComponent","TreeActionBaseAttributes","variant","hide","TreeActionBaseProps","ItemAction","TreeActionBase","t0","$","_c","actionProps","dot","t1","visible","undefined","t2","t3"],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeAction.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 { memo } from \"react\";\nimport { DropdownMenu, Tree } from \"@stratakit/structures\";\n\nimport type { ComponentProps, NamedExoticComponent } from \"react\";\n\n/**\n * Attributes used to decide how to render tree actions. They allow to differentiate action style based on the context\n * where that action is used.\n * @alpha\n */\nexport interface TreeActionBaseAttributes {\n /**\n * Specifies action variant supported by tree nodes:\n *\n * - \"default\" - standard action displayed in the dropdown menu accessible through the ellipsis button on the node.\n * - \"inline\" - actions displayed directly on the tree node.\n * - \"context-menu\" - actions displayed in the context menu opened by right-clicking the tree node.\n */\n variant?: \"default\" | \"inline\" | \"context-menu\";\n /**\n * Indicates that the actions is not applicable for current tree node and should be hidden.\n * When set to true, the action will not be rendered at all.\n */\n hide?: boolean;\n}\n\n/** @alpha */\nexport type TreeActionBaseProps = ComponentProps<typeof Tree.ItemAction> & TreeActionBaseAttributes;\n\n/**\n * Base component used to render tree actions. It is designed to allow rendering same action in different contexts: inline, dropdown, context menu.\n * Should be used together with `StrataKitTreeNodeRenderer` and returned from `getInlineActions`, `getMenuActions` and `getContextMenuActions` callbacks.\n *\n * When implementing custom action that returns this component, make sure to forward `TreeActionBaseAttributes` props to it. Example:\n *\n * ```tsx\n * interface MyCustomTreeActionProps extends TreeActionBaseAttributes {\n * myProp: string\n * }\n *\n * function MyCustomTreeAction({ myProp, ...attributes }: MyCustomTreeActionProps) {\n * // custom button logic goes here\n * return <TreeActionBase {...attributes} icon={...} onClick={...} />\n * }\n * ```\n *\n * @alpha\n */\nexport const TreeActionBase: NamedExoticComponent<TreeActionBaseProps> = memo(function TreeActionBase({\n hide,\n variant = \"default\",\n dot,\n visible,\n ...actionProps\n}: TreeActionBaseProps) {\n if (hide) {\n return variant === \"inline\" ? <Tree.ItemAction {...actionProps} visible={false} /> : undefined;\n }\n\n if (variant === \"context-menu\") {\n return <DropdownMenu.Item {...actionProps} />;\n }\n\n return <Tree.ItemAction {...actionProps} dot={dot} visible={variant === \"inline\" ? visible : undefined} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqDA,MAAaU,iBAA4DV,KAAK,SAAAU,eAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAR;CAAA,IAAAS;CAAA,IAAAC;AAAA,KAAAL,EAAA,OAAAD,IAAA;AAAwB,GAAA,CAAAJ,MAAAD,SAAAU,IAAAD,KAAAE,YAAAH,eAAAH;AAMhFC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;AAAAF,IAAA,KAAAG;AAAAH,IAAA,KAAAL;AAAAK,IAAA,KAAAI;AAAAJ,IAAA,KAAAK;QAAA;AAAAH,gBAAAF,EAAA;AAAAG,QAAAH,EAAA;AAAAL,SAAAK,EAAA;AAAAI,OAAAJ,EAAA;AAAAK,YAAAL,EAAA;;CAJpB,MAAAN,UAAAU,OAAAE,KAAAA,IAAA,YAAAF;AAKA,KAAIT,MAAI;EAAA,IAAAY;AAAA,MAAAP,EAAA,OAAAE,eAAAF,EAAA,OAAAN,SAAA;AACCa,QAAAb,YAAY,WAAW,oBAAA,KAAA,YAAA;IAAA,GAAqBQ;IAAsB,SAAA;IAAqB,CAAA,GAAvFI,KAAAA;AAAuFN,KAAA,KAAAE;AAAAF,KAAA,KAAAN;AAAAM,KAAA,KAAAO;QAAAA,MAAAP,EAAA;AAAA,SAAvFO;;AAGT,KAAIb,YAAY,gBAAc;EAAA,IAAAa;AAAA,MAAAP,EAAA,OAAAE,aAAA;AACrBK,QAAA,oBAAA,aAAA,MAAA,EAAA,GAAuBL,aAAe,CAAA;AAAAF,KAAA,KAAAE;AAAAF,KAAA,MAAAO;QAAAA,MAAAP,EAAA;AAAA,SAAtCO;;CAGmD,MAAAA,KAAAb,YAAY,WAAZW,UAAAC,KAAAA;CAA0C,IAAAE;AAAA,KAAAR,EAAA,QAAAE,eAAAF,EAAA,QAAAG,OAAAH,EAAA,QAAAO,IAAA;AAA/FC,OAAA,oBAAA,KAAA,YAAA;GAAA,GAAqBN;GAAkBC;GAAc,SAAAI;GAA8C,CAAA;AAAAP,IAAA,MAAAE;AAAAF,IAAA,MAAAG;AAAAH,IAAA,MAAAO;AAAAP,IAAA,MAAAQ;OAAAA,MAAAR,EAAA;AAAA,QAAnGQ;EACP"}
1
+ {"version":3,"file":"TreeAction.js","names":["memo","ListItemIcon","MenuItem","Typography","Icon","Tree","ComponentPropsWithoutRef","NamedExoticComponent","TreeActionBaseAttributes","variant","hide","TreeActionBaseProps","Omit","ItemAction","onClick","TreeActionBase","t0","$","_c","actionProps","dot","t1","visible","undefined","t2","label","icon","t3","t4"],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeAction.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 { memo } from \"react\";\nimport { ListItemIcon, MenuItem, Typography } from \"@mui/material\";\nimport { Icon } from \"@stratakit/mui\";\nimport { Tree } from \"@stratakit/structures\";\n\nimport type { ComponentPropsWithoutRef, NamedExoticComponent } from \"react\";\n\n/**\n * Attributes used to decide how to render tree actions. They allow to differentiate action style based on the context\n * where that action is used.\n * @alpha\n */\nexport interface TreeActionBaseAttributes {\n /**\n * Specifies action variant supported by tree nodes:\n *\n * - \"default\" - standard action displayed in the dropdown menu accessible through the ellipsis button on the node.\n * - \"inline\" - actions displayed directly on the tree node.\n * - \"context-menu\" - actions displayed in the context menu opened by right-clicking the tree node.\n */\n variant?: \"default\" | \"inline\" | \"context-menu\";\n /**\n * Indicates that the actions is not applicable for current tree node and should be hidden.\n * When set to true, the action will not be rendered at all.\n */\n hide?: boolean;\n}\n\n/** @alpha */\nexport type TreeActionBaseProps = Omit<ComponentPropsWithoutRef<typeof Tree.ItemAction>, \"onClick\"> &\n TreeActionBaseAttributes & {\n /** Callback invoked when the action is clicked. */\n onClick: () => void;\n };\n\n/**\n * Base component used to render tree actions. It is designed to allow rendering same action in different contexts: inline, dropdown, context menu.\n * Should be used together with `StrataKitTreeNodeRenderer` and returned from `getInlineActions`, `getMenuActions` and `getContextMenuActions` callbacks.\n *\n * When implementing custom action that returns this component, make sure to forward `TreeActionBaseAttributes` props to it. Example:\n *\n * ```tsx\n * interface MyCustomTreeActionProps extends TreeActionBaseAttributes {\n * myProp: string\n * }\n *\n * function MyCustomTreeAction({ myProp, ...attributes }: MyCustomTreeActionProps) {\n * // custom button logic goes here\n * return <TreeActionBase {...attributes} icon={...} onClick={...} />\n * }\n * ```\n *\n * @alpha\n */\nexport const TreeActionBase: NamedExoticComponent<TreeActionBaseProps> = memo(function TreeActionBase({\n hide,\n variant = \"default\",\n dot,\n visible,\n ...actionProps\n}: TreeActionBaseProps) {\n if (hide) {\n return variant === \"inline\" ? <Tree.ItemAction {...actionProps} visible={false} /> : undefined;\n }\n\n if (variant === \"context-menu\") {\n const { label, icon, onClick } = actionProps;\n return (\n <MenuItem dense onClick={onClick}>\n {icon ? <ListItemIcon>{typeof icon === \"string\" ? <Icon href={icon} /> : icon}</ListItemIcon> : null}\n <Typography variant=\"caption\">{label}</Typography>\n </MenuItem>\n );\n }\n\n return <Tree.ItemAction {...actionProps} dot={dot} visible={variant === \"inline\" ? visible : undefined} />;\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2DA,MAAae,iBAA4Df,KAAK,SAAAe,eAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAV;CAAA,IAAAW;CAAA,IAAAC;AAAA,KAAAL,EAAA,OAAAD,IAAA;AAAwB,GAAA,CAAAN,MAAAD,SAAAY,IAAAD,KAAAE,YAAAH,eAAAH;AAMhFC,IAAA,KAAAD;AAAAC,IAAA,KAAAE;AAAAF,IAAA,KAAAG;AAAAH,IAAA,KAAAP;AAAAO,IAAA,KAAAI;AAAAJ,IAAA,KAAAK;QAAA;AAAAH,gBAAAF,EAAA;AAAAG,QAAAH,EAAA;AAAAP,SAAAO,EAAA;AAAAI,OAAAJ,EAAA;AAAAK,YAAAL,EAAA;;CAJpB,MAAAR,UAAAY,OAAAE,KAAAA,IAAA,YAAAF;AAKA,KAAIX,MAAI;EAAA,IAAAc;AAAA,MAAAP,EAAA,OAAAE,eAAAF,EAAA,OAAAR,SAAA;AACCe,QAAAf,YAAY,WAAW,oBAAA,KAAA,YAAA;IAAA,GAAqBU;IAAsB,SAAA;IAAqB,CAAA,GAAvFI,KAAAA;AAAuFN,KAAA,KAAAE;AAAAF,KAAA,KAAAR;AAAAQ,KAAA,KAAAO;QAAAA,MAAAP,EAAA;AAAA,SAAvFO;;AAGT,KAAIf,YAAY,gBAAc;EAC5B,MAAA,EAAAgB,OAAAC,MAAAZ,YAAiCK;EAAY,IAAAK;AAAA,MAAAP,EAAA,OAAAS,MAAA;AAGxCF,QAAAE,OAAO,oBAAC,cAAD,EAAA,UAAe,OAAOA,SAAS,WAAW,oBAAC,MAAD,EAAYA,MAAAA,MAAe,CAAA,GAAtDA,MAA6E,CAAA,GAAnG;AAAmGT,KAAA,KAAAS;AAAAT,KAAA,MAAAO;QAAAA,MAAAP,EAAA;EAAA,IAAAU;AAAA,MAAAV,EAAA,QAAAQ,OAAA;AACpGE,QAAA,oBAAC,YAAD;IAAoB,SAAA;cAAWF;IAAmB,CAAA;AAAAR,KAAA,MAAAQ;AAAAR,KAAA,MAAAU;QAAAA,MAAAV,EAAA;EAAA,IAAAW;AAAA,MAAAX,EAAA,QAAAH,WAAAG,EAAA,QAAAO,MAAAP,EAAA,QAAAU,IAAA;AAFpDC,QAAA,qBAAC,UAAD;IAAU,OAAA;IAAed;cAAzB,CACGU,IACDG,GACS;;AAAAV,KAAA,MAAAH;AAAAG,KAAA,MAAAO;AAAAP,KAAA,MAAAU;AAAAV,KAAA,MAAAW;QAAAA,MAAAX,EAAA;AAAA,SAHXW;;CAOwD,MAAAJ,KAAAf,YAAY,WAAZa,UAAAC,KAAAA;CAA0C,IAAAI;AAAA,KAAAV,EAAA,QAAAE,eAAAF,EAAA,QAAAG,OAAAH,EAAA,QAAAO,IAAA;AAA/FG,OAAA,oBAAA,KAAA,YAAA;GAAA,GAAqBR;GAAkBC;GAAc,SAAAI;GAA8C,CAAA;AAAAP,IAAA,MAAAE;AAAAF,IAAA,MAAAG;AAAAH,IAAA,MAAAO;AAAAP,IAAA,MAAAU;OAAAA,MAAAV,EAAA;AAAA,QAAnGU;EACP"}
@@ -1,6 +1,7 @@
1
1
  import { TreeNode } from "../TreeNode.js";
2
2
  import { TreeActionBaseAttributes } from "./TreeAction.js";
3
3
  import { NamedExoticComponent, PropsWithChildren } from "react";
4
+
4
5
  //#region src/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.d.ts
5
6
  /**
6
7
  * React component that renders a rename action for a tree item.
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenameAction.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.tsx"],"mappings":";;;;;;;AA0BA;;;;;;;;cAAa,oBAAA,EAAsB,oBAAA,CAAqB,wBAAA;EAA6B,IAAA,EAAM,QAAA;AAAA;;UAmB1E,oBAAA;EAnBkF;AAmBnG;;;EAKE,cAAA,GAAiB,QAAA;EACjB,mBAAA;EACA,QAAA,IAAY,QAAA;AAAA"}
1
+ {"version":3,"file":"TreeNodeRenameAction.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenameAction.tsx"],"mappings":";;;;;;;AA0BA;;;;;;;;;cAAa,oBAAA,EAAsB,oBAAA,CAAqB,wBAAA;EAA6B,IAAA,EAAM,QAAA;AAAA;;UAmB1E,oBAAA;EAAA;;;;EAKf,cAAA,GAAiB,QAAA;EACjB,mBAAA;EACA,QAAA,IAAY,QAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenderer.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx"],"mappings":";;;;KAyDY,sBAAA,GAAyB,IAAA,CACnC,wBAAA,QAAgC,IAAA,CAAK,IAAA;;;;;EAOrC,WAAA,GAAc,SAAA;AAAA"}
1
+ {"version":3,"file":"TreeNodeRenderer.d.ts","names":[],"sources":["../../../src/presentation-hierarchies-react/stratakit/TreeNodeRenderer.tsx"],"mappings":";;;;KA0DY,sBAAA,GAAyB,IAAA,CACnC,wBAAA,QAAgC,IAAA,CAAK,IAAA;;;;;EAOrC,WAAA,GAAc,SAAA;AAAA"}
@@ -4,8 +4,9 @@ import { useTreeNodeRenameContext } from "./TreeNodeRenameAction.js";
4
4
  import { c } from "react-compiler-runtime";
5
5
  import { cloneElement, forwardRef, isValidElement, memo, useEffect, useId, useRef, useState } from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
- import { DropdownMenu, Tree, unstable_Popover } from "@stratakit/structures";
8
- import { Description, IconButton, Spinner, Text, TextBox } from "@stratakit/bricks";
7
+ import { CircularProgress, FormHelperText, IconButton, Menu, TextField, Typography } from "@mui/material";
8
+ import { Icon } from "@stratakit/mui";
9
+ import { Tree, unstable_Popover } from "@stratakit/structures";
9
10
  import "./TreeNodeRenderer.css";
10
11
  import checkmarkSvg from "@stratakit/icons/checkmark.svg";
11
12
  import dismissSvg from "@stratakit/icons/dismiss.svg";
@@ -17,7 +18,7 @@ import refreshSvg from "@stratakit/icons/refresh.svg";
17
18
  * @internal
18
19
  */
19
20
  const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props, forwardedRef) {
20
- const $ = c(64);
21
+ const $ = c(66);
21
22
  let contextMenuActions;
22
23
  let decorations;
23
24
  let expandNode;
@@ -228,60 +229,68 @@ const StrataKitTreeNodeRenderer = memo(forwardRef(function HierarchyNode(props,
228
229
  $[49] = t8;
229
230
  $[50] = t14;
230
231
  } else t14 = $[50];
231
- const t15 = contextMenuProps !== void 0;
232
+ const t15 = !!contextMenuProps;
232
233
  let t16;
234
+ let t17;
233
235
  if ($[51] === Symbol.for("react.memo_cache_sentinel")) {
234
- t16 = (open) => {
235
- if (!open) setContextMenuProps(void 0);
236
+ t16 = () => setContextMenuProps(void 0);
237
+ t17 = (e_2) => {
238
+ e_2.preventDefault();
239
+ setContextMenuProps(void 0);
236
240
  };
237
241
  $[51] = t16;
238
- } else t16 = $[51];
239
- const t17 = `${node.id}-${contextMenuProps?.position.x ?? ""}-${contextMenuProps?.position.y ?? ""}`;
242
+ $[52] = t17;
243
+ } else {
244
+ t16 = $[51];
245
+ t17 = $[52];
246
+ }
240
247
  let t18;
241
- if ($[52] !== contextMenuProps) {
242
- t18 = contextMenuProps ? /* @__PURE__ */ jsx(DropdownMenu.Button, {
243
- style: {
244
- position: "fixed",
245
- top: contextMenuProps.position.y,
246
- left: contextMenuProps.position.x
247
- },
248
- render: /* @__PURE__ */ jsx("div", {})
249
- }) : null;
250
- $[52] = contextMenuProps;
251
- $[53] = t18;
252
- } else t18 = $[53];
253
- const t19 = contextMenuProps?.actions;
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];
254
262
  let t20;
255
- if ($[54] !== t19) {
256
- t20 = /* @__PURE__ */ jsx(DropdownMenu.Content, {
257
- focusable: true,
258
- autoFocus: true,
259
- children: t19
260
- });
261
- $[54] = t19;
262
- $[55] = t20;
263
- } else t20 = $[55];
264
- let t21;
265
- if ($[56] !== t15 || $[57] !== t17 || $[58] !== t18 || $[59] !== t20) {
266
- t21 = /* @__PURE__ */ jsxs(DropdownMenu.Provider, {
267
- open: t15,
268
- setOpen: t16,
269
- children: [t18, t20]
270
- }, t17);
271
- $[56] = t15;
272
- $[57] = t17;
273
- $[58] = t18;
274
- $[59] = t20;
275
- $[60] = t21;
276
- } else t21 = $[60];
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;
277
268
  let t22;
278
- if ($[61] !== t14 || $[62] !== t21) {
279
- t22 = /* @__PURE__ */ jsxs(Fragment, { children: [t14, t21] });
280
- $[61] = t14;
281
- $[62] = t21;
282
- $[63] = t22;
283
- } else t22 = $[63];
284
- return 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
279
+ });
280
+ $[58] = t15;
281
+ $[59] = t18;
282
+ $[60] = t19;
283
+ $[61] = t21;
284
+ $[62] = t22;
285
+ } else t22 = $[62];
286
+ let t23;
287
+ if ($[63] !== t14 || $[64] !== t22) {
288
+ t23 = /* @__PURE__ */ jsxs(Fragment, { children: [t14, t22] });
289
+ $[63] = t14;
290
+ $[64] = t22;
291
+ $[65] = t23;
292
+ } else t23 = $[65];
293
+ return t23;
285
294
  }));
286
295
  const PlaceholderNode = memo(forwardRef(function PlaceholderNode(t0, forwardedRef) {
287
296
  const $ = c(13);
@@ -306,8 +315,8 @@ const PlaceholderNode = memo(forwardRef(function PlaceholderNode(t0, forwardedRe
306
315
  } else t2 = $[5];
307
316
  let t3;
308
317
  if ($[6] !== t2) {
309
- t3 = /* @__PURE__ */ jsx(Spinner, {
310
- size: "small",
318
+ t3 = /* @__PURE__ */ jsx(CircularProgress, {
319
+ size: 16,
311
320
  title: t2
312
321
  });
313
322
  $[6] = t2;
@@ -388,127 +397,130 @@ function LabelEditor(t0) {
388
397
  const canRename = newLabelValue && newLabelValue !== initialLabel && !hasError;
389
398
  const inputId = useId();
390
399
  let t5;
391
- if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
392
- t5 = { width: "100%" };
393
- $[11] = t5;
394
- } else t5 = $[11];
395
- const t6 = hasError ? "with-error" : void 0;
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];
396
411
  let t7;
397
- if ($[12] !== translate) {
398
- t7 = translate("newLabel");
399
- $[12] = translate;
400
- $[13] = t7;
401
- } else t7 = $[13];
402
- let t8;
403
- if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
404
- t8 = (event) => {
412
+ if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
413
+ t7 = (event) => {
405
414
  setNewLabelValue(event.target.value);
406
415
  setHasError(false);
407
416
  };
408
- $[14] = t8;
409
- } else t8 = $[14];
410
- let t9;
411
- if ($[15] !== cancelLabelChange || $[16] !== handleLabelChange) {
412
- t9 = (event_0) => {
417
+ $[15] = t7;
418
+ } else t7 = $[15];
419
+ let t8;
420
+ if ($[16] !== cancelLabelChange || $[17] !== handleLabelChange) {
421
+ t8 = (event_0) => {
413
422
  if (event_0.key === "Enter") handleLabelChange();
414
423
  else if (event_0.key === "Escape") cancelLabelChange();
415
424
  };
416
- $[15] = cancelLabelChange;
417
- $[16] = handleLabelChange;
418
- $[17] = t9;
419
- } else t9 = $[17];
420
- let t10;
421
- if ($[18] !== inputId || $[19] !== newLabelValue || $[20] !== t7 || $[21] !== t9) {
422
- t10 = /* @__PURE__ */ jsx(TextBox.Input, {
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",
423
435
  id: inputId,
424
- ref: inputRef,
425
- "aria-label": t7,
436
+ inputRef,
437
+ slotProps: t6,
426
438
  value: newLabelValue,
427
- onChange: t8,
428
- onKeyUp: t9
439
+ onChange: t7,
440
+ onKeyUp: t8
429
441
  });
430
- $[18] = inputId;
431
- $[19] = newLabelValue;
432
- $[20] = t7;
433
- $[21] = t9;
434
- $[22] = t10;
435
- } else t10 = $[22];
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];
436
455
  let t11;
437
- if ($[23] !== t10 || $[24] !== t6) {
438
- t11 = /* @__PURE__ */ jsx(TextBox.Root, {
439
- style: t5,
440
- className: t6,
441
- children: t10
442
- });
443
- $[23] = t10;
444
- $[24] = t6;
445
- $[25] = t11;
446
- } else t11 = $[25];
456
+ if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
457
+ t11 = /* @__PURE__ */ jsx(Icon, { href: dismissSvg });
458
+ $[27] = t11;
459
+ } else t11 = $[27];
447
460
  let t12;
448
- if ($[26] !== translate) {
449
- t12 = translate("cancel");
450
- $[26] = translate;
451
- $[27] = t12;
452
- } else t12 = $[27];
453
- let t13;
454
- if ($[28] !== cancelLabelChange || $[29] !== t12) {
455
- t13 = /* @__PURE__ */ jsx(IconButton, {
456
- icon: dismissSvg,
457
- label: t12,
458
- onClick: cancelLabelChange
461
+ if ($[28] !== cancelLabelChange || $[29] !== t10) {
462
+ t12 = /* @__PURE__ */ jsx(IconButton, {
463
+ "aria-label": t10,
464
+ onClick: cancelLabelChange,
465
+ size: "small",
466
+ children: t11
459
467
  });
460
468
  $[28] = cancelLabelChange;
461
- $[29] = t12;
462
- $[30] = t13;
463
- } else t13 = $[30];
464
- let t14;
469
+ $[29] = t10;
470
+ $[30] = t12;
471
+ } else t12 = $[30];
472
+ let t13;
465
473
  if ($[31] !== translate) {
466
- t14 = translate("confirm");
474
+ t13 = translate("confirm");
467
475
  $[31] = translate;
468
- $[32] = t14;
469
- } else t14 = $[32];
470
- const t15 = !canRename;
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];
471
484
  let t16;
472
- if ($[33] !== handleLabelChange || $[34] !== t14 || $[35] !== t15) {
485
+ if ($[34] !== handleLabelChange || $[35] !== t13 || $[36] !== t14) {
473
486
  t16 = /* @__PURE__ */ jsx(IconButton, {
474
- icon: checkmarkSvg,
475
- label: t14,
487
+ "aria-label": t13,
476
488
  onClick: handleLabelChange,
477
- disabled: t15
489
+ disabled: t14,
490
+ size: "small",
491
+ children: t15
478
492
  });
479
- $[33] = handleLabelChange;
480
- $[34] = t14;
481
- $[35] = t15;
482
- $[36] = t16;
483
- } else t16 = $[36];
493
+ $[34] = handleLabelChange;
494
+ $[35] = t13;
495
+ $[36] = t14;
496
+ $[37] = t16;
497
+ } else t16 = $[37];
484
498
  let t17;
485
- if ($[37] !== t11 || $[38] !== t13 || $[39] !== t16) {
499
+ if ($[38] !== t12 || $[39] !== t16 || $[40] !== t9) {
486
500
  t17 = /* @__PURE__ */ jsxs("div", {
487
501
  className: "phr-node-label-editor-input-row",
488
502
  children: [
489
- t11,
490
- t13,
503
+ t9,
504
+ t12,
491
505
  t16
492
506
  ]
493
507
  });
494
- $[37] = t11;
495
- $[38] = t13;
508
+ $[38] = t12;
496
509
  $[39] = t16;
497
- $[40] = t17;
498
- } else t17 = $[40];
510
+ $[40] = t9;
511
+ $[41] = t17;
512
+ } else t17 = $[41];
499
513
  let t18;
500
- if ($[41] !== hasError || $[42] !== inputId || $[43] !== labelValidationHint) {
501
- t18 = labelValidationHint !== void 0 ? /* @__PURE__ */ jsx(Description, {
502
- id: inputId,
503
- tone: hasError ? "critical" : "neutral",
514
+ if ($[42] !== hasError || $[43] !== labelValidationHint) {
515
+ t18 = labelValidationHint !== void 0 ? /* @__PURE__ */ jsx(FormHelperText, {
516
+ error: hasError,
504
517
  style: { display: "flex" },
505
- children: /* @__PURE__ */ jsx(Text, {
506
- variant: "caption-lg",
518
+ children: /* @__PURE__ */ jsx(Typography, {
519
+ variant: "caption",
507
520
  children: labelValidationHint
508
521
  })
509
522
  }) : void 0;
510
- $[41] = hasError;
511
- $[42] = inputId;
523
+ $[42] = hasError;
512
524
  $[43] = labelValidationHint;
513
525
  $[44] = t18;
514
526
  } else t18 = $[44];
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenderer.js","names":["cloneElement","forwardRef","isValidElement","memo","useCallback","useEffect","useId","useMemo","useRef","useState","Description","IconButton","Spinner","Text","TextBox","DropdownMenu","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","Symbol","for","open","t17","t18","top","left","t19","t20","t21","t22","PlaceholderNode","LabelEditor","initialLabel","onChange","onCancel","inputRef","newLabelValue","setNewLabelValue","hasError","setHasError","handleLabelChange","cancelLabelChange","current","focus","select","canRename","inputId","width","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 { Description, IconButton, Spinner, Text, TextBox } from \"@stratakit/bricks\";\nimport { DropdownMenu, 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 */\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 <DropdownMenu.Provider\n open={contextMenuProps !== undefined}\n setOpen={(open) => {\n if (!open) {\n setContextMenuProps(undefined);\n }\n }}\n key={`${node.id}-${contextMenuProps?.position.x ?? \"\"}-${contextMenuProps?.position.y ?? \"\"}`}\n >\n {contextMenuProps ? (\n <DropdownMenu.Button\n style={{ position: \"fixed\", top: contextMenuProps.position.y, left: contextMenuProps.position.x }}\n render={<div />}\n />\n ) : null}\n {/* `autoFocus` prop is coming from ariakit and is not native HTML `autoFocus` prop. */}\n {/* `focusable` is needed for `autoFocus` to work. StrataKit exposes only `autoFocus` and does not set `focusable` internally. */}\n {/* eslint-disable jsx-a11y/no-autofocus */}\n {/* @ts-expect-error focusable is passed through */}\n <DropdownMenu.Content focusable autoFocus={true}>\n {contextMenuProps?.actions}\n </DropdownMenu.Content>\n </DropdownMenu.Provider>\n </>\n );\n }),\n);\n\nexport const PlaceholderNode: FC<\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={<Spinner size={\"small\"} 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 <TextBox.Root style={{ width: \"100%\" }} className={hasError ? \"with-error\" : undefined}>\n <TextBox.Input\n id={inputId}\n ref={inputRef}\n 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 </TextBox.Root>\n <IconButton icon={dismissSvg} label={translate(\"cancel\")} onClick={cancelLabelChange} />\n <IconButton\n icon={checkmarkSvg}\n label={translate(\"confirm\")}\n onClick={handleLabelChange}\n disabled={!canRename}\n />\n </div>\n {labelValidationHint !== undefined ? (\n <Description id={inputId} tone={hasError ? \"critical\" : \"neutral\"} style={{ display: \"flex\" }}>\n <Text variant=\"caption-lg\">{labelValidationHint}</Text>\n </Description>\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","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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"}