@itwin/appui-react 5.6.0 → 5.8.0

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 (96) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/lib/appui-react/UiFramework.json +3 -1
  3. package/lib/appui-react/editors/CustomNumberEditor.d.ts +10 -0
  4. package/lib/appui-react/editors/CustomNumberEditor.d.ts.map +1 -0
  5. package/lib/appui-react/editors/CustomNumberEditor.js +26 -0
  6. package/lib/appui-react/editors/CustomNumberEditor.js.map +1 -0
  7. package/lib/appui-react/{uiprovider → editors}/LockEditor.d.ts +1 -1
  8. package/lib/appui-react/editors/LockEditor.d.ts.map +1 -0
  9. package/lib/appui-react/editors/LockEditor.js.map +1 -0
  10. package/lib/appui-react/editors/LockProvider.d.ts +48 -0
  11. package/lib/appui-react/editors/LockProvider.d.ts.map +1 -0
  12. package/lib/appui-react/editors/LockProvider.js +121 -0
  13. package/lib/appui-react/editors/LockProvider.js.map +1 -0
  14. package/lib/appui-react/editors/NumericEditor.d.ts +10 -0
  15. package/lib/appui-react/editors/NumericEditor.d.ts.map +1 -0
  16. package/lib/appui-react/editors/NumericEditor.js +26 -0
  17. package/lib/appui-react/editors/NumericEditor.js.map +1 -0
  18. package/lib/appui-react/editors/TextEditor.d.ts +10 -0
  19. package/lib/appui-react/editors/TextEditor.d.ts.map +1 -0
  20. package/lib/appui-react/editors/TextEditor.js +26 -0
  21. package/lib/appui-react/editors/TextEditor.js.map +1 -0
  22. package/lib/appui-react/editors/registerEditors.d.ts +6 -0
  23. package/lib/appui-react/editors/registerEditors.d.ts.map +1 -0
  24. package/lib/appui-react/editors/registerEditors.js +28 -0
  25. package/lib/appui-react/editors/registerEditors.js.map +1 -0
  26. package/lib/appui-react/hooks/useControlledState.d.ts +4 -0
  27. package/lib/appui-react/hooks/useControlledState.d.ts.map +1 -0
  28. package/lib/appui-react/hooks/useControlledState.js +16 -0
  29. package/lib/appui-react/hooks/useControlledState.js.map +1 -0
  30. package/lib/appui-react/icons/snaps/SvgSnapsPerpendicular.d.ts +7 -0
  31. package/lib/appui-react/icons/snaps/SvgSnapsPerpendicular.d.ts.map +1 -0
  32. package/lib/appui-react/icons/snaps/SvgSnapsPerpendicular.js +14 -0
  33. package/lib/appui-react/icons/snaps/SvgSnapsPerpendicular.js.map +1 -0
  34. package/lib/appui-react/icons/snaps/SvgSnapsTangent.d.ts +7 -0
  35. package/lib/appui-react/icons/snaps/SvgSnapsTangent.d.ts.map +1 -0
  36. package/lib/appui-react/icons/snaps/SvgSnapsTangent.js +14 -0
  37. package/lib/appui-react/icons/snaps/SvgSnapsTangent.js.map +1 -0
  38. package/lib/appui-react/new-editors/CustomNumberEditor.d.ts +7 -0
  39. package/lib/appui-react/new-editors/CustomNumberEditor.d.ts.map +1 -0
  40. package/lib/appui-react/new-editors/CustomNumberEditor.js +18 -0
  41. package/lib/appui-react/new-editors/CustomNumberEditor.js.map +1 -0
  42. package/lib/appui-react/new-editors/LockEditor.d.ts +3 -0
  43. package/lib/appui-react/new-editors/LockEditor.d.ts.map +1 -0
  44. package/lib/appui-react/new-editors/LockEditor.js +40 -0
  45. package/lib/appui-react/new-editors/LockEditor.js.map +1 -0
  46. package/lib/appui-react/new-editors/NumericEditor.d.ts +3 -0
  47. package/lib/appui-react/new-editors/NumericEditor.d.ts.map +1 -0
  48. package/lib/appui-react/new-editors/NumericEditor.js +34 -0
  49. package/lib/appui-react/new-editors/NumericEditor.js.map +1 -0
  50. package/lib/appui-react/new-editors/TextEditor.d.ts +3 -0
  51. package/lib/appui-react/new-editors/TextEditor.d.ts.map +1 -0
  52. package/lib/appui-react/new-editors/TextEditor.js +23 -0
  53. package/lib/appui-react/new-editors/TextEditor.js.map +1 -0
  54. package/lib/appui-react/preview/PreviewFeatures.d.ts +5 -0
  55. package/lib/appui-react/preview/PreviewFeatures.d.ts.map +1 -1
  56. package/lib/appui-react/preview/PreviewFeatures.js +1 -0
  57. package/lib/appui-react/preview/PreviewFeatures.js.map +1 -1
  58. package/lib/appui-react/preview/tool-settings-key-press-commit/useToolSettingsKeyPressCommit.d.ts +6 -0
  59. package/lib/appui-react/preview/tool-settings-key-press-commit/useToolSettingsKeyPressCommit.d.ts.map +1 -0
  60. package/lib/appui-react/preview/tool-settings-key-press-commit/useToolSettingsKeyPressCommit.js +15 -0
  61. package/lib/appui-react/preview/tool-settings-key-press-commit/useToolSettingsKeyPressCommit.js.map +1 -0
  62. package/lib/appui-react/preview/tool-settings-lock-button/useToolSettingsLockButton.d.ts +3 -0
  63. package/lib/appui-react/preview/tool-settings-lock-button/useToolSettingsLockButton.d.ts.map +1 -1
  64. package/lib/appui-react/preview/tool-settings-lock-button/useToolSettingsLockButton.js +18 -1
  65. package/lib/appui-react/preview/tool-settings-lock-button/useToolSettingsLockButton.js.map +1 -1
  66. package/lib/appui-react/statusfields/SnapMode.d.ts.map +1 -1
  67. package/lib/appui-react/statusfields/SnapMode.js +24 -0
  68. package/lib/appui-react/statusfields/SnapMode.js.map +1 -1
  69. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +12 -1
  70. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  71. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +13 -17
  72. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  73. package/lib/appui-react/toolbar/new-toolbars/GroupItem.d.ts.map +1 -1
  74. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js +1 -1
  75. package/lib/appui-react/toolbar/new-toolbars/GroupItem.js.map +1 -1
  76. package/lib/appui-react/toolbar/new-toolbars/Item.d.ts.map +1 -1
  77. package/lib/appui-react/toolbar/new-toolbars/Item.js +1 -1
  78. package/lib/appui-react/toolbar/new-toolbars/Item.js.map +1 -1
  79. package/lib/appui-react/uiprovider/ComponentGenerator.d.ts.map +1 -1
  80. package/lib/appui-react/uiprovider/ComponentGenerator.js +23 -12
  81. package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  82. package/lib/appui-react/uiprovider/DefaultDialogGridContainer.d.ts.map +1 -1
  83. package/lib/appui-react/uiprovider/DefaultDialogGridContainer.js +2 -1
  84. package/lib/appui-react/uiprovider/DefaultDialogGridContainer.js.map +1 -1
  85. package/lib/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  86. package/lib/appui-react/widget-panels/ToolSettings.js +15 -7
  87. package/lib/appui-react/widget-panels/ToolSettings.js.map +1 -1
  88. package/lib/appui-react.d.ts +1 -0
  89. package/lib/appui-react.d.ts.map +1 -1
  90. package/lib/appui-react.js +3 -5
  91. package/lib/appui-react.js.map +1 -1
  92. package/lib/public/locales/en/UiFramework.json +3 -1
  93. package/package.json +7 -7
  94. package/lib/appui-react/uiprovider/LockEditor.d.ts.map +0 -1
  95. package/lib/appui-react/uiprovider/LockEditor.js.map +0 -1
  96. /package/lib/appui-react/{uiprovider → editors}/LockEditor.js +0 -0
@@ -31,6 +31,7 @@ import { SvgMouseClickRightDrag } from "../../icons/SvgMouseClickRightDrag.js";
31
31
  import { SvgMouseClickWheelDrag } from "../../icons/SvgMouseClickWheelDrag.js";
32
32
  import { useTranslation } from "../../hooks/useTranslation.js";
33
33
  import { useActiveTool } from "../../hooks/useActiveTool.js";
34
+ import { useControlledState } from "../../hooks/useControlledState.js";
34
35
  const toolAssistanceKey = "ToolAssistance";
35
36
  const showPromptAtCursorKey = "showPromptAtCursor";
36
37
  const mouseTouchTabIndexKey = "mouseTouchTabIndex";
@@ -39,7 +40,7 @@ const mouseTouchTabIndexKey = "mouseTouchTabIndex";
39
40
  * @note Tool assistance field will only display 30 characters in the status bar. Any additional text will be hidden. The full text will always be shown in the opened popover.
40
41
  */
41
42
  export function ToolAssistanceField(props) {
42
- const { includePromptAtCursor = true, cursorPromptTimeout = 5000, fadeOutCursorPrompt = true, defaultPromptAtCursor = false, uiStateStorage: uiStateStorageProp, promptAtContent = false, } = props;
43
+ const { includePromptAtCursor = true, cursorPromptTimeout = 5000, fadeOutCursorPrompt = true, defaultPromptAtCursor = false, uiStateStorage: uiStateStorageProp, promptAtContent = false, visible: visibleProp, onVisibleChange, pinned: pinnedProp, onPinnedChange, } = props;
43
44
  const uiStateStorageCtx = React.useContext(UiStateStorageContext);
44
45
  const uiStateStorage = uiStateStorageProp ?? uiStateStorageCtx;
45
46
  const { translate } = useTranslation();
@@ -50,8 +51,6 @@ export function ToolAssistanceField(props) {
50
51
  toolIconSpec: "",
51
52
  showPromptAtCursor: defaultPromptAtCursor,
52
53
  mouseTouchTabIndex: 0,
53
- isPinned: false,
54
- isOpen: false,
55
54
  };
56
55
  });
57
56
  const { showPromptAtCursor, toolIconSpec, mouseTouchTabIndex, instructions } = state;
@@ -64,14 +63,11 @@ export function ToolAssistanceField(props) {
64
63
  fadeOut: fadeOutCursorPrompt,
65
64
  promptAtContent,
66
65
  });
67
- const setIsOpen = (isOpen) => {
68
- let newState = {
69
- isOpen,
70
- };
71
- if (!isOpen && state.isPinned) {
72
- newState = { ...newState, ...{ isPinned: false } };
66
+ const handleClose = () => {
67
+ if (pinned) {
68
+ setPinned(false);
73
69
  }
74
- setState((prev) => ({ ...prev, ...newState }));
70
+ setVisible(false);
75
71
  };
76
72
  const getDisplayableInstructions = (section) => {
77
73
  const displayableInstructions = section.instructions.filter((instruction) => {
@@ -168,15 +164,15 @@ export function ToolAssistanceField(props) {
168
164
  translate("toolAssistance.mouse"),
169
165
  translate("toolAssistance.touch"),
170
166
  ];
171
- return (React.createElement(StatusBarPopover, { visible: state.isOpen, onVisibleChange: (visible) => {
172
- setIsOpen(visible);
173
- }, closeOnOutsideClick: !state.isPinned, content: React.createElement(ToolAssistanceDialog, { buttons: React.createElement(StatusBarDialog.TitleBarButton, { onClick: () => {
174
- if (state.isPinned) {
175
- setIsOpen(false);
167
+ const [visible, setVisible] = useControlledState(false, visibleProp, onVisibleChange);
168
+ const [pinned, setPinned] = useControlledState(false, pinnedProp, onPinnedChange);
169
+ return (React.createElement(StatusBarPopover, { visible: visible, onVisibleChange: setVisible, closeOnOutsideClick: !pinned, content: React.createElement(ToolAssistanceDialog, { buttons: React.createElement(StatusBarDialog.TitleBarButton, { onClick: () => {
170
+ if (pinned) {
171
+ handleClose();
176
172
  return;
177
173
  }
178
- setState((prev) => ({ ...prev, isPinned: true }));
179
- }, title: translate(state.isPinned ? "dialog.close" : "toolAssistance.pin") }, state.isPinned ? React.createElement(SvgClose, null) : React.createElement(SvgPin, null)), title: dialogTitle },
174
+ setPinned(true);
175
+ }, title: translate(pinned ? "dialog.close" : "toolAssistance.pin") }, pinned ? React.createElement(SvgClose, null) : React.createElement(SvgPin, null)), title: dialogTitle },
180
176
  React.createElement("div", null,
181
177
  showMouseTouchTabs && (React.createElement(Tabs.Wrapper, { type: "pill", value: String(mouseTouchTabIndex) },
182
178
  React.createElement(Tabs.TabList, { className: "uifw-toolAssistance-tabs" }, tabs.map((tab, index) => (React.createElement(Tabs.Tab, { key: index, className: "uifw-tab", value: String(index), label: tab, onClick: async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module Notification\n */\n\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport type {\n ToolAssistanceInstruction,\n ToolAssistanceInstructions,\n ToolAssistanceKeyboardInfo,\n ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport {\n ToolAssistanceImage,\n ToolAssistanceInputMethod,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { FillCentered, Icon } from \"@itwin/core-react\";\nimport { Button, Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { useCursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt.js\";\nimport { MessageManager } from \"../../messages/MessageManager.js\";\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage.js\";\nimport \"./ToolAssistanceField.scss\";\n\nimport {\n SvgAdd,\n SvgClose,\n SvgCursorClick,\n SvgGestureOneFingerDrag,\n SvgGestureOneFingerTap,\n SvgGestureOneFingerTapDouble,\n SvgGesturePinch,\n SvgGestureTwoFingerDrag,\n SvgGestureTwoFingerTap,\n SvgMouseClickLeft,\n SvgMouseClickRight,\n SvgMouseClickWheel,\n SvgPin,\n} from \"@itwin/itwinui-icons-react\";\nimport { ToolAssistanceDialog } from \"../../layout/footer/tool-assistance/Dialog.js\";\nimport { ToolAssistanceInstruction as NZ_ToolAssistanceInstruction } from \"../../layout/footer/tool-assistance/Instruction.js\";\nimport { ToolAssistanceItem } from \"../../layout/footer/tool-assistance/Item.js\";\nimport { ToolAssistanceSeparator } from \"../../layout/footer/tool-assistance/Separator.js\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog.js\";\nimport { StatusBarPopover } from \"../../statusbar/popup/StatusBarPopover.js\";\nimport {\n type UiStateStorage,\n UiStateStorageStatus,\n} from \"../../uistate/UiStateStorage.js\";\nimport { SvgTouchCursorPoint } from \"../../icons/SvgTouchCursorPoint.js\";\nimport { SvgTouchCursorPan } from \"../../icons/SvgTouchCursorPan.js\";\nimport { SvgMouseClickLeftDrag } from \"../../icons/SvgMouseClickLeftDrag.js\";\nimport { SvgMouseClickRightDrag } from \"../../icons/SvgMouseClickRightDrag.js\";\nimport { SvgMouseClickWheelDrag } from \"../../icons/SvgMouseClickWheelDrag.js\";\nimport { useTranslation } from \"../../hooks/useTranslation.js\";\nimport { useActiveTool } from \"../../hooks/useActiveTool.js\";\n\n/** Properties of [[ToolAssistanceField]] component.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ToolAssistanceFieldProps extends CommonProps {\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to `true`. */\n includePromptAtCursor: boolean;\n /** Optional parameter for persistent UI settings. Defaults to `UiStateStorageContext`. */\n uiStateStorage?: UiStateStorage;\n /** Cursor prompt timeout period. Defaults to `5000`.\n * @note Specify `Number.POSITIVE_INFINITY` to keep the cursor prompt open indefinitely.\n */\n cursorPromptTimeout: number;\n /** Fade out the cursor prompt when closed. */\n fadeOutCursorPrompt: boolean;\n /** Indicates whether to show promptAtCursor by default. Defaults to `false`. */\n defaultPromptAtCursor: boolean;\n /** When set to `true` will show prompt at cursor only when the content area is hovered. */\n promptAtContent?: boolean;\n}\n\ninterface Props\n extends Omit<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n >,\n Partial<\n Pick<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n >\n > {}\n\ninterface ToolAssistanceFieldState {\n instructions: ToolAssistanceInstructions | undefined;\n toolIconSpec: string;\n showPromptAtCursor: boolean;\n mouseTouchTabIndex: number;\n isPinned: boolean;\n isOpen: boolean;\n}\n\nconst toolAssistanceKey = \"ToolAssistance\";\nconst showPromptAtCursorKey = \"showPromptAtCursor\";\nconst mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\n\n/** Tool Assistance Field React component.\n * @public\n * @note Tool assistance field will only display 30 characters in the status bar. Any additional text will be hidden. The full text will always be shown in the opened popover.\n */\nexport function ToolAssistanceField(props: Props) {\n const {\n includePromptAtCursor = true,\n cursorPromptTimeout = 5000,\n fadeOutCursorPrompt = true,\n defaultPromptAtCursor = false,\n uiStateStorage: uiStateStorageProp,\n promptAtContent = false,\n } = props;\n const uiStateStorageCtx = React.useContext(UiStateStorageContext);\n const uiStateStorage = uiStateStorageProp ?? uiStateStorageCtx;\n const { translate } = useTranslation();\n const activeTool = useActiveTool();\n\n const [state, setState] = React.useState<ToolAssistanceFieldState>(() => {\n return {\n instructions: undefined,\n toolIconSpec: \"\",\n showPromptAtCursor: defaultPromptAtCursor,\n mouseTouchTabIndex: 0,\n isPinned: false,\n isOpen: false,\n };\n });\n\n const { showPromptAtCursor, toolIconSpec, mouseTouchTabIndex, instructions } =\n state;\n const mainInstruction = state.instructions?.mainInstruction.text;\n const { open } = useCursorPrompt({\n show: showPromptAtCursor,\n timeout: cursorPromptTimeout,\n iconSpec: toolIconSpec,\n instruction: mainInstruction,\n fadeOut: fadeOutCursorPrompt,\n promptAtContent,\n });\n\n const setIsOpen = (isOpen: boolean) => {\n let newState = {\n isOpen,\n };\n if (!isOpen && state.isPinned) {\n newState = { ...newState, ...{ isPinned: false } };\n }\n setState((prev) => ({ ...prev, ...newState }));\n };\n\n const getDisplayableInstructions = (section: ToolAssistanceSection) => {\n const displayableInstructions = section.instructions.filter(\n (instruction) => {\n const includeMouseInstructions = showMouseTouchTabs\n ? mouseTouchTabIndex === 0 && showMouseInstructions\n : showMouseInstructions;\n const includeTouchInstructions = showMouseTouchTabs\n ? mouseTouchTabIndex === 1 && showTouchInstructions\n : showTouchInstructions;\n return (\n isBothInstruction(instruction) ||\n (includeMouseInstructions && isMouseInstruction(instruction)) ||\n (includeTouchInstructions && isTouchInstruction(instruction))\n );\n }\n );\n return displayableInstructions;\n };\n\n React.useEffect(() => {\n void (async () => {\n const result = await uiStateStorage.getSetting(\n toolAssistanceKey,\n showPromptAtCursorKey\n );\n\n if (result.status !== UiStateStorageStatus.Success) return;\n setState((prev) => ({\n ...prev,\n showPromptAtCursor: result.setting,\n }));\n })();\n }, [uiStateStorage]);\n React.useEffect(() => {\n void (async () => {\n const result = await uiStateStorage.getSetting(\n toolAssistanceKey,\n mouseTouchTabIndexKey\n );\n\n if (result.status !== UiStateStorageStatus.Success) return;\n setState((prev) => ({\n ...prev,\n mouseTouchTabIndex: result.setting,\n }));\n })();\n }, [uiStateStorage]);\n React.useEffect(() => {\n return MessageManager.onToolAssistanceChangedEvent.addListener((args) => {\n setState((prev) => ({\n ...prev,\n instructions: args.instructions,\n }));\n open();\n });\n }, [open]);\n React.useEffect(() => {\n return UiFramework.frontstages.onToolIconChangedEvent.addListener(\n (args) => {\n setState((prev) => ({\n ...prev,\n toolIconSpec: args.iconSpec,\n }));\n open();\n }\n );\n }, [open]);\n\n const hasMouseInstructions = !!instructions?.sections?.some((section) => {\n return section.instructions.some((instruction) =>\n isMouseInstruction(instruction)\n );\n });\n const hasTouchInstructions = !!instructions?.sections?.some((section) => {\n return section.instructions.some((instruction) =>\n isTouchInstruction(instruction)\n );\n });\n\n const isMobileBrowser = React.useMemo(() => {\n return ProcessDetector.isMobileBrowser;\n }, []);\n const showMouseInstructions = !isMobileBrowser && hasMouseInstructions;\n const showTouchInstructions = hasTouchInstructions;\n const showMouseTouchTabs = showMouseInstructions && showTouchInstructions;\n\n const sectionInstructions = (instructions?.sections ?? [])\n .map((section) => {\n const displayableInstructions = getDisplayableInstructions(section);\n return {\n displayableInstructions,\n section,\n };\n })\n .filter((section) => {\n return section.displayableInstructions.length > 0;\n });\n\n const prompt = instructions?.mainInstruction.text;\n const tooltip = React.useMemo(() => {\n const lineBreak = \"\\u000d\\u000a\";\n const moreInfo = translate(\"toolAssistance.moreInfo\");\n const postfix = `${lineBreak}${moreInfo}`;\n if (activeTool) {\n return `${activeTool.flyover}${prompt ? ` > ${prompt}` : \"\"}${postfix}`;\n }\n if (prompt) {\n return `${prompt}${postfix}`;\n }\n return moreInfo;\n }, [prompt, activeTool, translate]);\n\n const dialogTitle = activeTool?.flyover ?? translate(\"toolAssistance.title\");\n const tabs = [\n translate(\"toolAssistance.mouse\"),\n translate(\"toolAssistance.touch\"),\n ];\n return (\n <StatusBarPopover\n visible={state.isOpen}\n onVisibleChange={(visible) => {\n setIsOpen(visible);\n }}\n closeOnOutsideClick={!state.isPinned}\n content={\n <ToolAssistanceDialog\n buttons={\n <StatusBarDialog.TitleBarButton\n onClick={() => {\n if (state.isPinned) {\n setIsOpen(false);\n return;\n }\n setState((prev) => ({ ...prev, isPinned: true }));\n }}\n title={translate(\n state.isPinned ? \"dialog.close\" : \"toolAssistance.pin\"\n )}\n >\n {state.isPinned ? <SvgClose /> : <SvgPin />}\n </StatusBarDialog.TitleBarButton>\n }\n title={dialogTitle}\n >\n <div>\n {showMouseTouchTabs && (\n <Tabs.Wrapper type=\"pill\" value={String(mouseTouchTabIndex)}>\n <Tabs.TabList className=\"uifw-toolAssistance-tabs\">\n {tabs.map((tab, index) => (\n <Tabs.Tab\n key={index}\n className=\"uifw-tab\"\n value={String(index)}\n label={tab}\n onClick={async () => {\n setState((prev) => ({\n ...prev,\n mouseTouchTabIndex: index,\n }));\n void uiStateStorage.saveSetting(\n toolAssistanceKey,\n mouseTouchTabIndexKey,\n index\n );\n }}\n />\n ))}\n </Tabs.TabList>\n </Tabs.Wrapper>\n )}\n {instructions ? (\n <div className=\"uifw-toolAssistance-content\">\n <NZ_ToolAssistanceInstruction\n key=\"main\"\n image={\n <InstructionImage\n instruction={instructions.mainInstruction}\n />\n }\n text={instructions.mainInstruction.text}\n isNew={instructions.mainInstruction.isNew}\n />\n\n {sectionInstructions.map((sectionInstruction, index) => {\n const { section, displayableInstructions } =\n sectionInstruction;\n return (\n <React.Fragment key={index.toString()}>\n <ToolAssistanceSeparator>\n {section.label}\n </ToolAssistanceSeparator>\n {displayableInstructions.map((instruction, index1) => {\n return (\n <NZ_ToolAssistanceInstruction\n key={`${index1.toString()}-${index.toString()}`}\n image={\n <InstructionImage instruction={instruction} />\n }\n text={instruction.text}\n isNew={instruction.isNew}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n\n {includePromptAtCursor && (\n <>\n <ToolAssistanceSeparator key=\"prompt-sep\" />\n <ToolAssistanceItem key=\"prompt-item\">\n <ToggleSwitch\n label={translate(\"toolAssistance.promptAtCursor\")}\n labelPosition=\"right\"\n checked={state.showPromptAtCursor}\n onChange={(e) => {\n const checked = e.target.checked;\n setState((prev) => ({\n ...prev,\n showPromptAtCursor: checked,\n }));\n void uiStateStorage.saveSetting(\n toolAssistanceKey,\n showPromptAtCursorKey,\n checked\n );\n }}\n />\n </ToolAssistanceItem>\n </>\n )}\n </div>\n ) : undefined}\n </div>\n </ToolAssistanceDialog>\n }\n >\n <Button\n styleType=\"borderless\"\n startIcon={\n instructions ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={state.toolIconSpec} />\n ) : (\n <></>\n )\n }\n className={classnames(\n \"uifw-statusFields-toolAssistance-toolAssistanceField\",\n props.className\n )}\n title={tooltip}\n style={props.style}\n labelProps={{ className: \"prompt\" }}\n >\n {prompt}\n <StatusBarPopover.ExpandIndicator />\n </Button>\n </StatusBarPopover>\n );\n}\n\nfunction isBothInstruction(instruction: ToolAssistanceInstruction) {\n return (\n instruction.inputMethod === undefined ||\n instruction.inputMethod === ToolAssistanceInputMethod.Both\n );\n}\n\nfunction isMouseInstruction(instruction: ToolAssistanceInstruction) {\n return instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\n}\n\nfunction isTouchInstruction(instruction: ToolAssistanceInstruction) {\n return instruction.inputMethod === ToolAssistanceInputMethod.Touch;\n}\n\nfunction getWebComponentSource(iconSpec: string): string | undefined {\n if (iconSpec.startsWith(\"webSvg:\") && iconSpec.length > 7) {\n return iconSpec.slice(7);\n }\n\n return undefined;\n}\n\nfunction InstructionImage({\n instruction,\n}: {\n instruction: ToolAssistanceInstruction;\n}) {\n let image: React.ReactNode;\n\n if (\n (typeof instruction.image === \"string\" ||\n instruction.image !== ToolAssistanceImage.Keyboard) &&\n instruction.keyboardInfo\n ) {\n if (\n instruction.keyboardInfo.keys.length === 1 &&\n !instruction.keyboardInfo.bottomKeys\n ) {\n const key = instruction.keyboardInfo.keys[0];\n const rightImage =\n typeof instruction.image === \"string\" ? (\n <div className=\"uifw-toolassistance-icon-medium\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={instruction.image} />\n </div>\n ) : (\n <InstructionSvgImage instruction={instruction} mediumSize={true} />\n );\n\n image = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <FillCentered>\n <KeyNode\n keyboardKey={key}\n className=\"uifw-toolassistance-key-modifier\"\n />\n {rightImage}\n </FillCentered>\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `getInstructionImage: Invalid keyboardInfo provided with image`\n );\n }\n } else if (typeof instruction.image === \"string\") {\n if (instruction.image.length > 0) {\n const svgSource = getWebComponentSource(instruction.image);\n const className =\n svgSource !== undefined\n ? \"uifw-toolassistance-svg\"\n : \"uifw-toolassistance-icon-large\";\n image = (\n <div className={className}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={svgSource ?? instruction.image} />\n </div>\n );\n }\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\n if (instruction.keyboardInfo) {\n image = (\n <InstructionKeyboardImage keyboardInfo={instruction.keyboardInfo} />\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`\n );\n }\n } else {\n image = (\n <InstructionSvgImage instruction={instruction} mediumSize={false} />\n );\n }\n\n return image;\n}\n\nfunction InstructionSvgImage({\n instruction,\n mediumSize,\n}: {\n instruction: ToolAssistanceInstruction;\n mediumSize: boolean;\n}) {\n let image: React.ReactNode;\n let className = mediumSize\n ? \"uifw-toolassistance-svg-medium\"\n : \"uifw-toolassistance-svg\";\n\n if (\n typeof instruction.image !== \"string\" &&\n instruction.image !== ToolAssistanceImage.Keyboard\n ) {\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\n let svgImage: React.ReactNode;\n\n switch (toolAssistanceImage) {\n case ToolAssistanceImage.AcceptPoint:\n svgImage = <SvgAdd />;\n break;\n case ToolAssistanceImage.CursorClick:\n svgImage = <SvgCursorClick />;\n break;\n case ToolAssistanceImage.LeftClick:\n svgImage = <SvgMouseClickLeft />;\n break;\n case ToolAssistanceImage.RightClick:\n svgImage = <SvgMouseClickRight />;\n break;\n case ToolAssistanceImage.MouseWheel:\n svgImage = <SvgMouseClickWheel />;\n break;\n case ToolAssistanceImage.LeftClickDrag:\n svgImage = <SvgMouseClickLeftDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.RightClickDrag:\n svgImage = <SvgMouseClickRightDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.MouseWheelClickDrag:\n svgImage = <SvgMouseClickWheelDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.OneTouchTap:\n svgImage = <SvgGestureOneFingerTap />;\n break;\n case ToolAssistanceImage.OneTouchDoubleTap:\n svgImage = <SvgGestureOneFingerTapDouble />;\n break;\n case ToolAssistanceImage.OneTouchDrag:\n svgImage = <SvgGestureOneFingerDrag />;\n break;\n case ToolAssistanceImage.TwoTouchTap:\n svgImage = <SvgGestureTwoFingerTap />;\n break;\n case ToolAssistanceImage.TwoTouchDrag:\n svgImage = <SvgGestureTwoFingerDrag />;\n break;\n case ToolAssistanceImage.TwoTouchPinch:\n svgImage = <SvgGesturePinch />;\n break;\n case ToolAssistanceImage.TouchCursorTap:\n svgImage = <SvgTouchCursorPoint />;\n break;\n case ToolAssistanceImage.TouchCursorDrag:\n svgImage = <SvgTouchCursorPan />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n }\n\n image = (\n <div className={className}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {svgImage && <Icon iconSpec={svgImage} />}\n </div>\n );\n }\n\n return image;\n}\n\nfunction InstructionKeyboardImage({\n keyboardInfo,\n}: {\n keyboardInfo: ToolAssistanceKeyboardInfo;\n}) {\n let image: React.ReactNode;\n\n if (keyboardInfo.bottomKeys !== undefined) {\n image = (\n <div className=\"uifw-toolassistance-key-group\">\n <span className=\"row1\">\n {keyboardInfo.keys.map((key, index) => {\n return (\n <KeyNode\n key={index}\n keyboardKey={key}\n className=\"uifw-toolassistance-key-small\"\n />\n );\n })}\n </span>\n <br />\n <span className=\"row2\">\n {keyboardInfo.bottomKeys.map((key, index) => {\n return (\n <KeyNode\n key={index}\n keyboardKey={key}\n className=\"uifw-toolassistance-key-small\"\n />\n );\n })}\n </span>\n </div>\n );\n } else if (keyboardInfo.keys.length === 2) {\n image = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <FillCentered>\n {keyboardInfo.keys.map((key, index) => {\n let className = \"uifw-toolassistance-key-medium\";\n if (key.length > 1) className = \"uifw-toolassistance-key-modifier\";\n return (\n <KeyNode key={index} keyboardKey={key} className={className} />\n );\n })}\n </FillCentered>\n );\n } else if (keyboardInfo.keys[0]) {\n if (keyboardInfo.keys[0].length > 1)\n image = (\n <KeyNode\n keyboardKey={keyboardInfo.keys[0]}\n className=\"uifw-toolassistance-key-large\"\n />\n );\n else image = <KeyNode keyboardKey={keyboardInfo.keys[0]} />;\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`\n );\n }\n\n return image;\n}\n\nfunction KeyNode({\n keyboardKey,\n className,\n}: {\n keyboardKey: string;\n className?: string;\n}) {\n return (\n <div className={classnames(\"uifw-toolassistance-key\", className)}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <FillCentered>{keyboardKey}</FillCentered>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"ToolAssistanceField.js","sourceRoot":"","sources":["../../../../src/appui-react/statusfields/toolassistance/ToolAssistanceField.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module Notification\n */\n\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport type {\n ToolAssistanceInstruction,\n ToolAssistanceInstructions,\n ToolAssistanceKeyboardInfo,\n ToolAssistanceSection,\n} from \"@itwin/core-frontend\";\nimport {\n ToolAssistanceImage,\n ToolAssistanceInputMethod,\n} from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { FillCentered, Icon } from \"@itwin/core-react\";\nimport { Button, Tabs, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { UiFramework } from \"../../UiFramework.js\";\nimport { useCursorPrompt } from \"../../cursor/cursorprompt/CursorPrompt.js\";\nimport { MessageManager } from \"../../messages/MessageManager.js\";\nimport { UiStateStorageContext } from \"../../uistate/useUiStateStorage.js\";\nimport \"./ToolAssistanceField.scss\";\n\nimport {\n SvgAdd,\n SvgClose,\n SvgCursorClick,\n SvgGestureOneFingerDrag,\n SvgGestureOneFingerTap,\n SvgGestureOneFingerTapDouble,\n SvgGesturePinch,\n SvgGestureTwoFingerDrag,\n SvgGestureTwoFingerTap,\n SvgMouseClickLeft,\n SvgMouseClickRight,\n SvgMouseClickWheel,\n SvgPin,\n} from \"@itwin/itwinui-icons-react\";\nimport { ToolAssistanceDialog } from \"../../layout/footer/tool-assistance/Dialog.js\";\nimport { ToolAssistanceInstruction as NZ_ToolAssistanceInstruction } from \"../../layout/footer/tool-assistance/Instruction.js\";\nimport { ToolAssistanceItem } from \"../../layout/footer/tool-assistance/Item.js\";\nimport { ToolAssistanceSeparator } from \"../../layout/footer/tool-assistance/Separator.js\";\nimport { StatusBarDialog } from \"../../statusbar/dialog/Dialog.js\";\nimport { StatusBarPopover } from \"../../statusbar/popup/StatusBarPopover.js\";\nimport {\n type UiStateStorage,\n UiStateStorageStatus,\n} from \"../../uistate/UiStateStorage.js\";\nimport { SvgTouchCursorPoint } from \"../../icons/SvgTouchCursorPoint.js\";\nimport { SvgTouchCursorPan } from \"../../icons/SvgTouchCursorPan.js\";\nimport { SvgMouseClickLeftDrag } from \"../../icons/SvgMouseClickLeftDrag.js\";\nimport { SvgMouseClickRightDrag } from \"../../icons/SvgMouseClickRightDrag.js\";\nimport { SvgMouseClickWheelDrag } from \"../../icons/SvgMouseClickWheelDrag.js\";\nimport { useTranslation } from \"../../hooks/useTranslation.js\";\nimport { useActiveTool } from \"../../hooks/useActiveTool.js\";\nimport { useControlledState } from \"../../hooks/useControlledState.js\";\n\n/** Properties of [[ToolAssistanceField]] component.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ToolAssistanceFieldProps extends CommonProps {\n /** Indicates whether to include promptAtCursor Checkbox. Defaults to `true`. */\n includePromptAtCursor: boolean;\n /** Optional parameter for persistent UI settings. Defaults to `UiStateStorageContext`. */\n uiStateStorage?: UiStateStorage;\n /** Cursor prompt timeout period. Defaults to `5000`.\n * @note Specify `Number.POSITIVE_INFINITY` to keep the cursor prompt open indefinitely.\n */\n cursorPromptTimeout: number;\n /** Fade out the cursor prompt when closed. */\n fadeOutCursorPrompt: boolean;\n /** Indicates whether to show promptAtCursor by default. Defaults to `false`. */\n defaultPromptAtCursor: boolean;\n /** When set to `true` will show prompt at cursor only when the content area is hovered. */\n promptAtContent?: boolean;\n}\n\ntype PopoverProps = React.ComponentProps<typeof StatusBarPopover>;\n\ninterface Props\n extends Omit<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n >,\n Partial<\n Pick<\n ToolAssistanceFieldProps,\n | \"includePromptAtCursor\"\n | \"cursorPromptTimeout\"\n | \"fadeOutCursorPrompt\"\n | \"defaultPromptAtCursor\"\n >\n >,\n Pick<PopoverProps, \"visible\" | \"onVisibleChange\"> {\n /**\n * Controlled flag for whether the popover is pinned.\n */\n pinned?: boolean;\n /**\n * Callback invoked every time the popover is pinned or unpinned as a result\n * of internal logic. Should be used alongside `pinned` prop.\n */\n onPinnedChange?: (pinned: boolean) => void;\n}\n\ninterface ToolAssistanceFieldState {\n instructions: ToolAssistanceInstructions | undefined;\n toolIconSpec: string;\n showPromptAtCursor: boolean;\n mouseTouchTabIndex: number;\n}\n\nconst toolAssistanceKey = \"ToolAssistance\";\nconst showPromptAtCursorKey = \"showPromptAtCursor\";\nconst mouseTouchTabIndexKey = \"mouseTouchTabIndex\";\n\n/** Tool Assistance Field React component.\n * @public\n * @note Tool assistance field will only display 30 characters in the status bar. Any additional text will be hidden. The full text will always be shown in the opened popover.\n */\nexport function ToolAssistanceField(props: Props) {\n const {\n includePromptAtCursor = true,\n cursorPromptTimeout = 5000,\n fadeOutCursorPrompt = true,\n defaultPromptAtCursor = false,\n uiStateStorage: uiStateStorageProp,\n promptAtContent = false,\n visible: visibleProp,\n onVisibleChange,\n pinned: pinnedProp,\n onPinnedChange,\n } = props;\n const uiStateStorageCtx = React.useContext(UiStateStorageContext);\n const uiStateStorage = uiStateStorageProp ?? uiStateStorageCtx;\n const { translate } = useTranslation();\n const activeTool = useActiveTool();\n\n const [state, setState] = React.useState<ToolAssistanceFieldState>(() => {\n return {\n instructions: undefined,\n toolIconSpec: \"\",\n showPromptAtCursor: defaultPromptAtCursor,\n mouseTouchTabIndex: 0,\n };\n });\n\n const { showPromptAtCursor, toolIconSpec, mouseTouchTabIndex, instructions } =\n state;\n const mainInstruction = state.instructions?.mainInstruction.text;\n const { open } = useCursorPrompt({\n show: showPromptAtCursor,\n timeout: cursorPromptTimeout,\n iconSpec: toolIconSpec,\n instruction: mainInstruction,\n fadeOut: fadeOutCursorPrompt,\n promptAtContent,\n });\n\n const handleClose = () => {\n if (pinned) {\n setPinned(false);\n }\n setVisible(false);\n };\n\n const getDisplayableInstructions = (section: ToolAssistanceSection) => {\n const displayableInstructions = section.instructions.filter(\n (instruction) => {\n const includeMouseInstructions = showMouseTouchTabs\n ? mouseTouchTabIndex === 0 && showMouseInstructions\n : showMouseInstructions;\n const includeTouchInstructions = showMouseTouchTabs\n ? mouseTouchTabIndex === 1 && showTouchInstructions\n : showTouchInstructions;\n return (\n isBothInstruction(instruction) ||\n (includeMouseInstructions && isMouseInstruction(instruction)) ||\n (includeTouchInstructions && isTouchInstruction(instruction))\n );\n }\n );\n return displayableInstructions;\n };\n\n React.useEffect(() => {\n void (async () => {\n const result = await uiStateStorage.getSetting(\n toolAssistanceKey,\n showPromptAtCursorKey\n );\n\n if (result.status !== UiStateStorageStatus.Success) return;\n setState((prev) => ({\n ...prev,\n showPromptAtCursor: result.setting,\n }));\n })();\n }, [uiStateStorage]);\n React.useEffect(() => {\n void (async () => {\n const result = await uiStateStorage.getSetting(\n toolAssistanceKey,\n mouseTouchTabIndexKey\n );\n\n if (result.status !== UiStateStorageStatus.Success) return;\n setState((prev) => ({\n ...prev,\n mouseTouchTabIndex: result.setting,\n }));\n })();\n }, [uiStateStorage]);\n React.useEffect(() => {\n return MessageManager.onToolAssistanceChangedEvent.addListener((args) => {\n setState((prev) => ({\n ...prev,\n instructions: args.instructions,\n }));\n open();\n });\n }, [open]);\n React.useEffect(() => {\n return UiFramework.frontstages.onToolIconChangedEvent.addListener(\n (args) => {\n setState((prev) => ({\n ...prev,\n toolIconSpec: args.iconSpec,\n }));\n open();\n }\n );\n }, [open]);\n\n const hasMouseInstructions = !!instructions?.sections?.some((section) => {\n return section.instructions.some((instruction) =>\n isMouseInstruction(instruction)\n );\n });\n const hasTouchInstructions = !!instructions?.sections?.some((section) => {\n return section.instructions.some((instruction) =>\n isTouchInstruction(instruction)\n );\n });\n\n const isMobileBrowser = React.useMemo(() => {\n return ProcessDetector.isMobileBrowser;\n }, []);\n const showMouseInstructions = !isMobileBrowser && hasMouseInstructions;\n const showTouchInstructions = hasTouchInstructions;\n const showMouseTouchTabs = showMouseInstructions && showTouchInstructions;\n\n const sectionInstructions = (instructions?.sections ?? [])\n .map((section) => {\n const displayableInstructions = getDisplayableInstructions(section);\n return {\n displayableInstructions,\n section,\n };\n })\n .filter((section) => {\n return section.displayableInstructions.length > 0;\n });\n\n const prompt = instructions?.mainInstruction.text;\n const tooltip = React.useMemo(() => {\n const lineBreak = \"\\u000d\\u000a\";\n const moreInfo = translate(\"toolAssistance.moreInfo\");\n const postfix = `${lineBreak}${moreInfo}`;\n if (activeTool) {\n return `${activeTool.flyover}${prompt ? ` > ${prompt}` : \"\"}${postfix}`;\n }\n if (prompt) {\n return `${prompt}${postfix}`;\n }\n return moreInfo;\n }, [prompt, activeTool, translate]);\n\n const dialogTitle = activeTool?.flyover ?? translate(\"toolAssistance.title\");\n const tabs = [\n translate(\"toolAssistance.mouse\"),\n translate(\"toolAssistance.touch\"),\n ];\n const [visible, setVisible] = useControlledState(\n false,\n visibleProp,\n onVisibleChange as React.Dispatch<React.SetStateAction<boolean>>\n );\n const [pinned, setPinned] = useControlledState(\n false,\n pinnedProp,\n onPinnedChange as React.Dispatch<React.SetStateAction<boolean>>\n );\n return (\n <StatusBarPopover\n visible={visible}\n onVisibleChange={setVisible}\n closeOnOutsideClick={!pinned}\n content={\n <ToolAssistanceDialog\n buttons={\n <StatusBarDialog.TitleBarButton\n onClick={() => {\n if (pinned) {\n handleClose();\n return;\n }\n setPinned(true);\n }}\n title={translate(pinned ? \"dialog.close\" : \"toolAssistance.pin\")}\n >\n {pinned ? <SvgClose /> : <SvgPin />}\n </StatusBarDialog.TitleBarButton>\n }\n title={dialogTitle}\n >\n <div>\n {showMouseTouchTabs && (\n <Tabs.Wrapper type=\"pill\" value={String(mouseTouchTabIndex)}>\n <Tabs.TabList className=\"uifw-toolAssistance-tabs\">\n {tabs.map((tab, index) => (\n <Tabs.Tab\n key={index}\n className=\"uifw-tab\"\n value={String(index)}\n label={tab}\n onClick={async () => {\n setState((prev) => ({\n ...prev,\n mouseTouchTabIndex: index,\n }));\n void uiStateStorage.saveSetting(\n toolAssistanceKey,\n mouseTouchTabIndexKey,\n index\n );\n }}\n />\n ))}\n </Tabs.TabList>\n </Tabs.Wrapper>\n )}\n {instructions ? (\n <div className=\"uifw-toolAssistance-content\">\n <NZ_ToolAssistanceInstruction\n key=\"main\"\n image={\n <InstructionImage\n instruction={instructions.mainInstruction}\n />\n }\n text={instructions.mainInstruction.text}\n isNew={instructions.mainInstruction.isNew}\n />\n\n {sectionInstructions.map((sectionInstruction, index) => {\n const { section, displayableInstructions } =\n sectionInstruction;\n return (\n <React.Fragment key={index.toString()}>\n <ToolAssistanceSeparator>\n {section.label}\n </ToolAssistanceSeparator>\n {displayableInstructions.map((instruction, index1) => {\n return (\n <NZ_ToolAssistanceInstruction\n key={`${index1.toString()}-${index.toString()}`}\n image={\n <InstructionImage instruction={instruction} />\n }\n text={instruction.text}\n isNew={instruction.isNew}\n />\n );\n })}\n </React.Fragment>\n );\n })}\n\n {includePromptAtCursor && (\n <>\n <ToolAssistanceSeparator key=\"prompt-sep\" />\n <ToolAssistanceItem key=\"prompt-item\">\n <ToggleSwitch\n label={translate(\"toolAssistance.promptAtCursor\")}\n labelPosition=\"right\"\n checked={state.showPromptAtCursor}\n onChange={(e) => {\n const checked = e.target.checked;\n setState((prev) => ({\n ...prev,\n showPromptAtCursor: checked,\n }));\n void uiStateStorage.saveSetting(\n toolAssistanceKey,\n showPromptAtCursorKey,\n checked\n );\n }}\n />\n </ToolAssistanceItem>\n </>\n )}\n </div>\n ) : undefined}\n </div>\n </ToolAssistanceDialog>\n }\n >\n <Button\n styleType=\"borderless\"\n startIcon={\n instructions ? (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={state.toolIconSpec} />\n ) : (\n <></>\n )\n }\n className={classnames(\n \"uifw-statusFields-toolAssistance-toolAssistanceField\",\n props.className\n )}\n title={tooltip}\n style={props.style}\n labelProps={{ className: \"prompt\" }}\n >\n {prompt}\n <StatusBarPopover.ExpandIndicator />\n </Button>\n </StatusBarPopover>\n );\n}\n\nfunction isBothInstruction(instruction: ToolAssistanceInstruction) {\n return (\n instruction.inputMethod === undefined ||\n instruction.inputMethod === ToolAssistanceInputMethod.Both\n );\n}\n\nfunction isMouseInstruction(instruction: ToolAssistanceInstruction) {\n return instruction.inputMethod === ToolAssistanceInputMethod.Mouse;\n}\n\nfunction isTouchInstruction(instruction: ToolAssistanceInstruction) {\n return instruction.inputMethod === ToolAssistanceInputMethod.Touch;\n}\n\nfunction getWebComponentSource(iconSpec: string): string | undefined {\n if (iconSpec.startsWith(\"webSvg:\") && iconSpec.length > 7) {\n return iconSpec.slice(7);\n }\n\n return undefined;\n}\n\nfunction InstructionImage({\n instruction,\n}: {\n instruction: ToolAssistanceInstruction;\n}) {\n let image: React.ReactNode;\n\n if (\n (typeof instruction.image === \"string\" ||\n instruction.image !== ToolAssistanceImage.Keyboard) &&\n instruction.keyboardInfo\n ) {\n if (\n instruction.keyboardInfo.keys.length === 1 &&\n !instruction.keyboardInfo.bottomKeys\n ) {\n const key = instruction.keyboardInfo.keys[0];\n const rightImage =\n typeof instruction.image === \"string\" ? (\n <div className=\"uifw-toolassistance-icon-medium\">\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={instruction.image} />\n </div>\n ) : (\n <InstructionSvgImage instruction={instruction} mediumSize={true} />\n );\n\n image = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <FillCentered>\n <KeyNode\n keyboardKey={key}\n className=\"uifw-toolassistance-key-modifier\"\n />\n {rightImage}\n </FillCentered>\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `getInstructionImage: Invalid keyboardInfo provided with image`\n );\n }\n } else if (typeof instruction.image === \"string\") {\n if (instruction.image.length > 0) {\n const svgSource = getWebComponentSource(instruction.image);\n const className =\n svgSource !== undefined\n ? \"uifw-toolassistance-svg\"\n : \"uifw-toolassistance-icon-large\";\n image = (\n <div className={className}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Icon iconSpec={svgSource ?? instruction.image} />\n </div>\n );\n }\n } else if (instruction.image === ToolAssistanceImage.Keyboard) {\n if (instruction.keyboardInfo) {\n image = (\n <InstructionKeyboardImage keyboardInfo={instruction.keyboardInfo} />\n );\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `getInstructionImage: ToolAssistanceImage.Keyboard specified but no keyboardInfo provided`\n );\n }\n } else {\n image = (\n <InstructionSvgImage instruction={instruction} mediumSize={false} />\n );\n }\n\n return image;\n}\n\nfunction InstructionSvgImage({\n instruction,\n mediumSize,\n}: {\n instruction: ToolAssistanceInstruction;\n mediumSize: boolean;\n}) {\n let image: React.ReactNode;\n let className = mediumSize\n ? \"uifw-toolassistance-svg-medium\"\n : \"uifw-toolassistance-svg\";\n\n if (\n typeof instruction.image !== \"string\" &&\n instruction.image !== ToolAssistanceImage.Keyboard\n ) {\n const toolAssistanceImage: ToolAssistanceImage = instruction.image;\n let svgImage: React.ReactNode;\n\n switch (toolAssistanceImage) {\n case ToolAssistanceImage.AcceptPoint:\n svgImage = <SvgAdd />;\n break;\n case ToolAssistanceImage.CursorClick:\n svgImage = <SvgCursorClick />;\n break;\n case ToolAssistanceImage.LeftClick:\n svgImage = <SvgMouseClickLeft />;\n break;\n case ToolAssistanceImage.RightClick:\n svgImage = <SvgMouseClickRight />;\n break;\n case ToolAssistanceImage.MouseWheel:\n svgImage = <SvgMouseClickWheel />;\n break;\n case ToolAssistanceImage.LeftClickDrag:\n svgImage = <SvgMouseClickLeftDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.RightClickDrag:\n svgImage = <SvgMouseClickRightDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.MouseWheelClickDrag:\n svgImage = <SvgMouseClickWheelDrag />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n case ToolAssistanceImage.OneTouchTap:\n svgImage = <SvgGestureOneFingerTap />;\n break;\n case ToolAssistanceImage.OneTouchDoubleTap:\n svgImage = <SvgGestureOneFingerTapDouble />;\n break;\n case ToolAssistanceImage.OneTouchDrag:\n svgImage = <SvgGestureOneFingerDrag />;\n break;\n case ToolAssistanceImage.TwoTouchTap:\n svgImage = <SvgGestureTwoFingerTap />;\n break;\n case ToolAssistanceImage.TwoTouchDrag:\n svgImage = <SvgGestureTwoFingerDrag />;\n break;\n case ToolAssistanceImage.TwoTouchPinch:\n svgImage = <SvgGesturePinch />;\n break;\n case ToolAssistanceImage.TouchCursorTap:\n svgImage = <SvgTouchCursorPoint />;\n break;\n case ToolAssistanceImage.TouchCursorDrag:\n svgImage = <SvgTouchCursorPan />;\n className = mediumSize\n ? \"uifw-toolassistance-svg-medium-wide\"\n : \"uifw-toolassistance-svg-wide\";\n break;\n }\n\n image = (\n <div className={className}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {svgImage && <Icon iconSpec={svgImage} />}\n </div>\n );\n }\n\n return image;\n}\n\nfunction InstructionKeyboardImage({\n keyboardInfo,\n}: {\n keyboardInfo: ToolAssistanceKeyboardInfo;\n}) {\n let image: React.ReactNode;\n\n if (keyboardInfo.bottomKeys !== undefined) {\n image = (\n <div className=\"uifw-toolassistance-key-group\">\n <span className=\"row1\">\n {keyboardInfo.keys.map((key, index) => {\n return (\n <KeyNode\n key={index}\n keyboardKey={key}\n className=\"uifw-toolassistance-key-small\"\n />\n );\n })}\n </span>\n <br />\n <span className=\"row2\">\n {keyboardInfo.bottomKeys.map((key, index) => {\n return (\n <KeyNode\n key={index}\n keyboardKey={key}\n className=\"uifw-toolassistance-key-small\"\n />\n );\n })}\n </span>\n </div>\n );\n } else if (keyboardInfo.keys.length === 2) {\n image = (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <FillCentered>\n {keyboardInfo.keys.map((key, index) => {\n let className = \"uifw-toolassistance-key-medium\";\n if (key.length > 1) className = \"uifw-toolassistance-key-modifier\";\n return (\n <KeyNode key={index} keyboardKey={key} className={className} />\n );\n })}\n </FillCentered>\n );\n } else if (keyboardInfo.keys[0]) {\n if (keyboardInfo.keys[0].length > 1)\n image = (\n <KeyNode\n keyboardKey={keyboardInfo.keys[0]}\n className=\"uifw-toolassistance-key-large\"\n />\n );\n else image = <KeyNode keyboardKey={keyboardInfo.keys[0]} />;\n } else {\n Logger.logError(\n UiFramework.loggerCategory(\"ToolAssistanceField\"),\n `ToolAssistanceImage.Keyboard specified but ToolAssistanceKeyboardInfo not valid`\n );\n }\n\n return image;\n}\n\nfunction KeyNode({\n keyboardKey,\n className,\n}: {\n keyboardKey: string;\n className?: string;\n}) {\n return (\n <div className={classnames(\"uifw-toolassistance-key\", className)}>\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <FillCentered>{keyboardKey}</FillCentered>\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupItem.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/GroupItem.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAQtC,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,gBAAgB;AAChB,eAAO,MAAM,SAAS,0FAyBrB,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,mBAAmB,kIAKlC;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,4BAuClE"}
1
+ {"version":3,"file":"GroupItem.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/GroupItem.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AAQtC,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,gBAAgB;AAChB,eAAO,MAAM,SAAS,0FAyBrB,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,mBAAmB,kIAKlC;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,kBAAkB,4BAwClE"}
@@ -60,7 +60,7 @@ export function GroupMenuItem({ item, onClose }) {
60
60
  onItemExecuted?.(item);
61
61
  onClose?.();
62
62
  }
63
- }, isSelected: isActive },
63
+ }, isSelected: isActive, "data-item-id": item.id },
64
64
  React.createElement(Badge, { badge: item.badge, badgeKind: item.badgeKind }),
65
65
  label));
66
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/GroupItem.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport { Icon } from \"@itwin/core-react\";\nimport { DropdownMenu, MenuExtraContent, MenuItem } from \"@itwin/itwinui-react\";\nimport type { ToolbarItem } from \"../../toolbar/ToolbarItem.js\";\nimport {\n isToolbarActionItem,\n isToolbarCustomItem,\n isToolbarGroupItem,\n type ToolbarGroupItem,\n} from \"../../toolbar/ToolbarItem.js\";\nimport { useConditionalProp } from \"../../hooks/useConditionalProp.js\";\nimport { ExpandIndicator } from \"./ExpandIndicator.js\";\nimport { Item } from \"./Item.js\";\nimport { Badge } from \"./Badge.js\";\nimport { ToolGroupOverflowContext } from \"./OverflowButton.js\";\nimport { ToolbarContext } from \"./Toolbar.js\";\n\n/** @internal */\nexport interface GroupItemProps {\n item: ToolbarGroupItem;\n}\n\n/** @internal */\nexport const GroupItem = React.forwardRef<HTMLButtonElement, GroupItemProps>(\n function GroupItem({ item }, ref) {\n const placement = usePopoverPlacement();\n const context = React.useContext(ToolbarContext);\n const overflowContext = React.useContext(ToolGroupOverflowContext);\n\n if (overflowContext) {\n return <GroupMenuItem item={item} onClose={overflowContext.onClose} />;\n }\n return (\n <DropdownMenu\n menuItems={(close) => {\n return toMenuItems(item, close);\n }}\n placement={placement}\n onVisibleChange={(newVisible) => {\n context?.setPopoverOpen(newVisible);\n }}\n >\n <Item item={item} ref={ref}>\n <ExpandIndicator />\n </Item>\n </DropdownMenu>\n );\n }\n);\n\n/** @internal */\nexport function usePopoverPlacement() {\n const context = React.useContext(ToolbarContext);\n if (!context) return undefined;\n\n return `${context.expandsTo}-${context.panelAlignment}` as const;\n}\n\ninterface GroupMenuItemProps {\n item: ToolbarItem;\n onClose?: () => void;\n}\n\n/** @internal */\nexport function GroupMenuItem({ item, onClose }: GroupMenuItemProps) {\n const { onItemExecuted } = React.useContext(ToolbarContext) ?? {};\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const iconSpec = useConditionalProp(item.icon);\n const label = useConditionalProp(item.label);\n const isDisabled = useConditionalProp(item.isDisabled);\n const isHidden = useConditionalProp(item.isHidden);\n const isActive = useConditionalProp(item.isActive);\n\n if (isHidden) {\n return null;\n }\n\n const subMenuItems = isDisabled ? undefined : toMenuItems(item, onClose);\n const startIcon = item.iconNode ? (\n <>{item.iconNode}</>\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={iconSpec} />\n );\n return (\n <MenuItem\n startIcon={startIcon}\n disabled={isDisabled}\n subMenuItems={subMenuItems}\n onClick={() => {\n if (isToolbarActionItem(item)) {\n item.execute();\n onItemExecuted?.(item);\n onClose?.();\n }\n }}\n isSelected={isActive}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Badge badge={item.badge} badgeKind={item.badgeKind} />\n {label}\n </MenuItem>\n );\n}\n\nfunction toMenuItems(item: ToolbarItem, onClose?: () => void) {\n if (isToolbarGroupItem(item)) {\n return item.items.map((groupItem) => {\n return (\n <GroupMenuItem key={groupItem.id} item={groupItem} onClose={onClose} />\n );\n });\n }\n if (isToolbarCustomItem(item)) {\n return [\n <MenuExtraContent key={item.id}>{item.panelContent}</MenuExtraContent>,\n ];\n }\n return [];\n}\n"]}
1
+ {"version":3,"file":"GroupItem.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/GroupItem.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport { Icon } from \"@itwin/core-react\";\nimport { DropdownMenu, MenuExtraContent, MenuItem } from \"@itwin/itwinui-react\";\nimport type { ToolbarItem } from \"../../toolbar/ToolbarItem.js\";\nimport {\n isToolbarActionItem,\n isToolbarCustomItem,\n isToolbarGroupItem,\n type ToolbarGroupItem,\n} from \"../../toolbar/ToolbarItem.js\";\nimport { useConditionalProp } from \"../../hooks/useConditionalProp.js\";\nimport { ExpandIndicator } from \"./ExpandIndicator.js\";\nimport { Item } from \"./Item.js\";\nimport { Badge } from \"./Badge.js\";\nimport { ToolGroupOverflowContext } from \"./OverflowButton.js\";\nimport { ToolbarContext } from \"./Toolbar.js\";\n\n/** @internal */\nexport interface GroupItemProps {\n item: ToolbarGroupItem;\n}\n\n/** @internal */\nexport const GroupItem = React.forwardRef<HTMLButtonElement, GroupItemProps>(\n function GroupItem({ item }, ref) {\n const placement = usePopoverPlacement();\n const context = React.useContext(ToolbarContext);\n const overflowContext = React.useContext(ToolGroupOverflowContext);\n\n if (overflowContext) {\n return <GroupMenuItem item={item} onClose={overflowContext.onClose} />;\n }\n return (\n <DropdownMenu\n menuItems={(close) => {\n return toMenuItems(item, close);\n }}\n placement={placement}\n onVisibleChange={(newVisible) => {\n context?.setPopoverOpen(newVisible);\n }}\n >\n <Item item={item} ref={ref}>\n <ExpandIndicator />\n </Item>\n </DropdownMenu>\n );\n }\n);\n\n/** @internal */\nexport function usePopoverPlacement() {\n const context = React.useContext(ToolbarContext);\n if (!context) return undefined;\n\n return `${context.expandsTo}-${context.panelAlignment}` as const;\n}\n\ninterface GroupMenuItemProps {\n item: ToolbarItem;\n onClose?: () => void;\n}\n\n/** @internal */\nexport function GroupMenuItem({ item, onClose }: GroupMenuItemProps) {\n const { onItemExecuted } = React.useContext(ToolbarContext) ?? {};\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const iconSpec = useConditionalProp(item.icon);\n const label = useConditionalProp(item.label);\n const isDisabled = useConditionalProp(item.isDisabled);\n const isHidden = useConditionalProp(item.isHidden);\n const isActive = useConditionalProp(item.isActive);\n\n if (isHidden) {\n return null;\n }\n\n const subMenuItems = isDisabled ? undefined : toMenuItems(item, onClose);\n const startIcon = item.iconNode ? (\n <>{item.iconNode}</>\n ) : (\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n <Icon iconSpec={iconSpec} />\n );\n return (\n <MenuItem\n startIcon={startIcon}\n disabled={isDisabled}\n subMenuItems={subMenuItems}\n onClick={() => {\n if (isToolbarActionItem(item)) {\n item.execute();\n onItemExecuted?.(item);\n onClose?.();\n }\n }}\n isSelected={isActive}\n data-item-id={item.id}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Badge badge={item.badge} badgeKind={item.badgeKind} />\n {label}\n </MenuItem>\n );\n}\n\nfunction toMenuItems(item: ToolbarItem, onClose?: () => void) {\n if (isToolbarGroupItem(item)) {\n return item.items.map((groupItem) => {\n return (\n <GroupMenuItem key={groupItem.id} item={groupItem} onClose={onClose} />\n );\n });\n }\n if (isToolbarCustomItem(item)) {\n return [\n <MenuExtraContent key={item.id}>{item.panelContent}</MenuExtraContent>,\n ];\n }\n return [];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/Item.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE,gBAAgB;AAChB,MAAM,WAAW,SACf,SAAQ,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;IACxD,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,gBAAgB;AAChB,eAAO,MAAM,IAAI,kGA+BhB,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,YAAY,wCAM3B;AAED,gBAAgB;AAChB,wBAAgB,aAAa;;;;EAU5B"}
1
+ {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/Item.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE,gBAAgB;AAChB,MAAM,WAAW,SACf,SAAQ,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,UAAU,CAAC,CAAC;IACxD,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,gBAAgB;AAChB,eAAO,MAAM,IAAI,kGAgChB,CAAC;AAEF,gBAAgB;AAChB,wBAAgB,YAAY,wCAM3B;AAED,gBAAgB;AAChB,wBAAgB,aAAa;;;;EAU5B"}
@@ -23,7 +23,7 @@ export const Item = React.forwardRef(function Item(props, ref) {
23
23
  const labelProps = useLabelProps();
24
24
  if (isHidden)
25
25
  return null;
26
- return (React.createElement(IconButton, { className: props.className, styleType: "borderless", disabled: isDisabled, isActive: item.isActive, label: label, labelProps: labelProps, style: props.style, ref: ref, ...other },
26
+ return (React.createElement(IconButton, { className: props.className, styleType: "borderless", disabled: isDisabled, isActive: item.isActive, label: label, labelProps: labelProps, style: props.style, ref: ref, "data-item-id": item.id, ...other },
27
27
  item.iconNode ?? React.createElement(Icon, { iconSpec: iconSpec }),
28
28
  React.createElement(Badge, { badge: item.badge, badgeKind: item.badgeKind }),
29
29
  props.children));
@@ -1 +1 @@
1
- {"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/Item.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAClC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACtB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,CACL,oBAAC,UAAU,IACT,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,GAAG,EAAE,GAAG,KACJ,KAAK;QAGR,IAAI,CAAC,QAAQ,IAAI,oBAAC,IAAI,IAAC,QAAQ,EAAE,QAAQ,GAAI;QAE9C,oBAAC,KAAK,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAI;QACtD,KAAK,CAAC,QAAQ,CACJ,CACd,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;IAC/D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO;QACL,SAAS;QACT,OAAO;QACP,eAAe,EAAE,kBAAkB;KAC3B,CAAC;AACb,CAAC","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/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Icon } from \"@itwin/core-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport type { ToolbarItem } from \"../../toolbar/ToolbarItem.js\";\nimport { useConditionalProp } from \"../../hooks/useConditionalProp.js\";\nimport { Badge } from \"./Badge.js\";\nimport { ToolbarContext } from \"./Toolbar.js\";\n\n/** @internal */\nexport interface ItemProps\n extends Partial<React.ComponentProps<typeof IconButton>> {\n item: ToolbarItem;\n}\n\n/** @internal */\nexport const Item = React.forwardRef<HTMLButtonElement, ItemProps>(\n function Item(props, ref) {\n const { item, ...other } = props;\n const label = useConditionalProp(item.label);\n const isDisabled = useConditionalProp(item.isDisabled);\n const isHidden = useConditionalProp(item.isHidden);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const iconSpec = useConditionalProp(item.icon);\n const labelProps = useLabelProps();\n\n if (isHidden) return null;\n return (\n <IconButton\n className={props.className}\n styleType=\"borderless\"\n disabled={isDisabled}\n isActive={item.isActive}\n label={label}\n labelProps={labelProps}\n style={props.style}\n ref={ref}\n {...other}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {item.iconNode ?? <Icon iconSpec={iconSpec} />}\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Badge badge={item.badge} badgeKind={item.badgeKind} />\n {props.children}\n </IconButton>\n );\n }\n);\n\n/** @internal */\nexport function useExpandsTo() {\n const context = React.useContext(ToolbarContext);\n assert(!!context);\n\n const { expandsTo } = context;\n return expandsTo;\n}\n\n/** @internal */\nexport function useLabelProps() {\n const context = React.useContext(ToolbarContext);\n const [internalVisible, setInternalVisible] = React.useState(false);\n const visible = context?.popoverOpen ? false : internalVisible;\n const placement = useExpandsTo();\n return {\n placement,\n visible,\n onVisibleChange: setInternalVisible,\n } as const;\n}\n"]}
1
+ {"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/Item.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ9C,gBAAgB;AAChB,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAClC,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACtB,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IAEnC,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,CACL,oBAAC,UAAU,IACT,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ,EACvB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,GAAG,EAAE,GAAG,kBACM,IAAI,CAAC,EAAE,KACjB,KAAK;QAGR,IAAI,CAAC,QAAQ,IAAI,oBAAC,IAAI,IAAC,QAAQ,EAAE,QAAQ,GAAI;QAE9C,oBAAC,KAAK,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,GAAI;QACtD,KAAK,CAAC,QAAQ,CACJ,CACd,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,gBAAgB;AAChB,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAElB,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC9B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC;IAC/D,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO;QACL,SAAS;QACT,OAAO;QACP,eAAe,EAAE,kBAAkB;KAC3B,CAAC;AACb,CAAC","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/** @packageDocumentation\n * @module Toolbar\n */\n\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Icon } from \"@itwin/core-react\";\nimport { IconButton } from \"@itwin/itwinui-react\";\nimport type { ToolbarItem } from \"../../toolbar/ToolbarItem.js\";\nimport { useConditionalProp } from \"../../hooks/useConditionalProp.js\";\nimport { Badge } from \"./Badge.js\";\nimport { ToolbarContext } from \"./Toolbar.js\";\n\n/** @internal */\nexport interface ItemProps\n extends Partial<React.ComponentProps<typeof IconButton>> {\n item: ToolbarItem;\n}\n\n/** @internal */\nexport const Item = React.forwardRef<HTMLButtonElement, ItemProps>(\n function Item(props, ref) {\n const { item, ...other } = props;\n const label = useConditionalProp(item.label);\n const isDisabled = useConditionalProp(item.isDisabled);\n const isHidden = useConditionalProp(item.isHidden);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const iconSpec = useConditionalProp(item.icon);\n const labelProps = useLabelProps();\n\n if (isHidden) return null;\n return (\n <IconButton\n className={props.className}\n styleType=\"borderless\"\n disabled={isDisabled}\n isActive={item.isActive}\n label={label}\n labelProps={labelProps}\n style={props.style}\n ref={ref}\n data-item-id={item.id}\n {...other}\n >\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n {item.iconNode ?? <Icon iconSpec={iconSpec} />}\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <Badge badge={item.badge} badgeKind={item.badgeKind} />\n {props.children}\n </IconButton>\n );\n }\n);\n\n/** @internal */\nexport function useExpandsTo() {\n const context = React.useContext(ToolbarContext);\n assert(!!context);\n\n const { expandsTo } = context;\n return expandsTo;\n}\n\n/** @internal */\nexport function useLabelProps() {\n const context = React.useContext(ToolbarContext);\n const [internalVisible, setInternalVisible] = React.useState(false);\n const visible = context?.popoverOpen ? false : internalVisible;\n const placement = useExpandsTo();\n return {\n placement,\n visible,\n onVisibleChange: setInternalVisible,\n } as const;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentGenerator.d.ts","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/ComponentGenerator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mCAAmC,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAKV,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAI/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAmM1E;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,SAAS,CAAC;gBADV,eAAe,EAAE,oBAAoB,EACrC,SAAS,CAAC,GAAE,MAAM,IAAI,aAAA;IAGhC,IAAW,cAAc,yBAExB;IAED,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,iCAAiC;IA2BzC,OAAO,CAAC,mCAAmC;IAiC3C,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,YAAY;IAKb,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;IAazD,oBAAoB,CACzB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB;IAWpB,6DAA6D;IACtD,sBAAsB,IAAI,iBAAiB,EAAE;CAKrD"}
1
+ {"version":3,"file":"ComponentGenerator.d.ts","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/ComponentGenerator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mCAAmC,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAKV,SAAS,EACV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,oBAAoB,EACrB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAgN1E;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,SAAS,CAAC;gBADV,eAAe,EAAE,oBAAoB,EACrC,SAAS,CAAC,GAAE,MAAM,IAAI,aAAA;IAGhC,IAAW,cAAc,yBAExB;IAED,OAAO,CAAC,SAAS;IAmBjB,OAAO,CAAC,iCAAiC;IA2BzC,OAAO,CAAC,mCAAmC;IAiC3C,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,yBAAyB;IAUjC,OAAO,CAAC,YAAY;IAKb,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;IAazD,oBAAoB,CACzB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,MAAM,GACf,iBAAiB;IAWpB,6DAA6D;IACtD,sBAAsB,IAAI,iBAAiB,EAAE;CAKrD"}
@@ -9,12 +9,12 @@ import "./DefaultDialogGridContainer.scss";
9
9
  import classnames from "classnames";
10
10
  import * as React from "react";
11
11
  import { PropertyValueFormat, UiLayoutDataProvider, } from "@itwin/appui-abstract";
12
- import { PropertyRecordEditor } from "@itwin/components-react";
13
- import { EditorContainer } from "@itwin/components-react";
12
+ import { EditorContainer, PropertyRecordEditor } from "@itwin/components-react";
14
13
  import { assert, Logger } from "@itwin/core-bentley";
15
14
  import { Label } from "@itwin/itwinui-react";
16
15
  import { useToolSettingsNewEditors } from "../preview/tool-settings-new-editors/useToolSettingsNewEditors.js";
17
16
  import { useLockButtonPropertyRecord } from "../preview/tool-settings-lock-button/useToolSettingsLockButton.js";
17
+ import { LockContext, PropertyEditorProvider, } from "../editors/LockProvider.js";
18
18
  function EditorLabel({ uiDataProvider, item, isLeftmostRecord, }) {
19
19
  const [isDisabled, setIsDisabled] = React.useState(!!item.isDisabled);
20
20
  const displayLabel = React.useMemo(() => {
@@ -34,7 +34,8 @@ function EditorLabel({ uiDataProvider, item, isLeftmostRecord, }) {
34
34
  displayLabel,
35
35
  ":"));
36
36
  }
37
- function PropertyEditor({ uiDataProvider, initialItem, isLock = false, setFocus, onCancel, }) {
37
+ function PropertyEditor(props) {
38
+ const { uiDataProvider, initialItem, itemPropertyName, isLock = false, setFocus, onCancel, } = props;
38
39
  const getLatestRecordValue = React.useCallback((initial) => {
39
40
  let newRecord = UiLayoutDataProvider.getPropertyRecord(initial);
40
41
  const foundItem = isLock
@@ -113,7 +114,9 @@ function PropertyEditor({ uiDataProvider, initialItem, isLock = false, setFocus,
113
114
  }, [initialItem.property.name, propertyRecord, uiDataProvider]);
114
115
  const handleCancel = () => { };
115
116
  const useNewEditors = useToolSettingsNewEditors();
116
- return (React.createElement("div", { key: initialItem.property.name, className: className }, useNewEditors ? (React.createElement(PropertyRecordEditor, { key: initialItem.property.name, propertyRecord: propertyRecord, setFocus: setFocus, onCommit: handleCommit, onCancel: onCancel ?? handleCancel, editorSystem: "new", size: "small" })) : (React.createElement(EditorContainer, { key: initialItem.property.name, propertyRecord: propertyRecord, setFocus: setFocus, onCommit: handleCommit, onCancel: onCancel ?? handleCancel }))));
117
+ const lockPropertyName = isLock ? initialItem.property.name : undefined;
118
+ return (React.createElement(PropertyEditorProvider, { uiDataProvider: uiDataProvider, itemPropertyName: itemPropertyName ?? initialItem.property.name, lockPropertyName: lockPropertyName },
119
+ React.createElement("div", { key: initialItem.property.name, className: className }, useNewEditors ? (React.createElement(PropertyRecordEditor, { key: initialItem.property.name, propertyRecord: propertyRecord, setFocus: setFocus, onCommit: handleCommit, onCancel: onCancel ?? handleCancel, editorSystem: "new", size: "small" })) : (React.createElement(EditorContainer, { key: initialItem.property.name, propertyRecord: propertyRecord, setFocus: setFocus, onCommit: handleCommit, onCancel: onCancel ?? handleCancel })))));
117
120
  }
118
121
  /** Utility methods to generate react ui from DialogRow specs
119
122
  * @public
@@ -126,8 +129,8 @@ export class ComponentGenerator {
126
129
  get uiDataProvider() {
127
130
  return this._uiDataProvider;
128
131
  }
129
- getEditor(item, isLock = false, setFocus = false) {
130
- return (React.createElement(PropertyEditor, { key: item.property.name, uiDataProvider: this.uiDataProvider, initialItem: item, isLock: isLock, setFocus: setFocus, onCancel: this._onCancel }));
132
+ getEditor(item, isLock = false, setFocus = false, itemPropertyName) {
133
+ return (React.createElement(PropertyEditor, { key: item.property.name, uiDataProvider: this.uiDataProvider, initialItem: item, itemPropertyName: itemPropertyName ?? item.property.name, isLock: isLock, setFocus: setFocus, onCancel: this._onCancel }));
131
134
  }
132
135
  generateRowWithButtonGroupEditors(row, rowIndex) {
133
136
  if (1 === row.items.length) {
@@ -160,12 +163,7 @@ export class ComponentGenerator {
160
163
  const label = UiLayoutDataProvider.editorWantsLabel(rowItem)
161
164
  ? this.getEditorLabel(rowItem)
162
165
  : null;
163
- const classNames = multiplePropertiesOnRow
164
- ? "uifw-default-lock-and-label uifw-default-wide-only-display"
165
- : "uifw-default-lock-and-label";
166
- return (React.createElement("div", { key: `lock-${record.property.name}`, className: classNames },
167
- lockEditor,
168
- label));
166
+ return (React.createElement(LeftLockAndLabel, { key: `lock-${record.property.name}`, lockEditor: lockEditor, label: label, multiplePropertiesOnRow: multiplePropertiesOnRow, itemPropertyName: rowItem.property.name }));
169
167
  }
170
168
  getInlineLabelAndEditor(item, isLeftmostRecord) {
171
169
  const label = UiLayoutDataProvider.editorWantsLabel(item)
@@ -218,4 +216,17 @@ function findDialogItem(uiDataProvider, propertyName, isLock) {
218
216
  });
219
217
  return isLock ? dialogItem?.lockProperty : dialogItem;
220
218
  }
219
+ function LeftLockAndLabel(props) {
220
+ const { lockEditor, label, multiplePropertiesOnRow, itemPropertyName } = props;
221
+ const { lockDecorations } = React.useContext(LockContext) ?? {};
222
+ const lockDecoration = React.useMemo(() => {
223
+ return lockDecorations?.[itemPropertyName];
224
+ }, [lockDecorations, itemPropertyName]);
225
+ const classNames = multiplePropertiesOnRow
226
+ ? "uifw-default-lock-and-label uifw-default-wide-only-display"
227
+ : "uifw-default-lock-and-label";
228
+ return (React.createElement("div", { className: classNames },
229
+ lockDecoration ? undefined : lockEditor,
230
+ label));
231
+ }
221
232
  //# sourceMappingURL=ComponentGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ComponentGenerator.js","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/ComponentGenerator.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module UiProvider\n */\n\nimport \"./DefaultDialogGridContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type {\n BaseDialogItem,\n DialogItem,\n DialogItemValue,\n DialogPropertySyncItem,\n DialogRow,\n} from \"@itwin/appui-abstract\";\nimport {\n PropertyValueFormat,\n UiLayoutDataProvider,\n} from \"@itwin/appui-abstract\";\nimport type { PropertyUpdatedArgs } from \"@itwin/components-react\";\nimport { PropertyRecordEditor } from \"@itwin/components-react\";\nimport { EditorContainer } from \"@itwin/components-react\";\nimport type { ToolSettingsEntry } from \"../widget-panels/ToolSettings.js\";\nimport { assert, Logger } from \"@itwin/core-bentley\";\nimport { Label } from \"@itwin/itwinui-react\";\nimport { useToolSettingsNewEditors } from \"../preview/tool-settings-new-editors/useToolSettingsNewEditors.js\";\nimport { useLockButtonPropertyRecord } from \"../preview/tool-settings-lock-button/useToolSettingsLockButton.js\";\n\nfunction EditorLabel({\n uiDataProvider,\n item,\n isLeftmostRecord,\n}: {\n uiDataProvider: UiLayoutDataProvider;\n item: DialogItem;\n isLeftmostRecord?: boolean;\n}) {\n const [isDisabled, setIsDisabled] = React.useState(!!item.isDisabled);\n const displayLabel = React.useMemo(() => {\n return item.property.displayLabel || item.property.name;\n }, [item]);\n\n // listen for tool sync property events and update the isDisabled state\n React.useEffect(() => {\n return uiDataProvider.onSyncPropertiesChangeEvent.addListener((args) => {\n const mySyncItem = args.properties.find(\n (syncItem) => syncItem.propertyName === item.property.name\n );\n if (mySyncItem) {\n setIsDisabled(!!mySyncItem.isDisabled);\n }\n });\n }, [uiDataProvider, item]);\n\n const className = classnames(\n \"uifw-default-label\",\n !!isLeftmostRecord && \"uifw-default-narrow-only-display\"\n );\n return (\n <Label\n className={className}\n htmlFor={item.property.name}\n disabled={isDisabled}\n >\n {displayLabel}:\n </Label>\n );\n}\n\nfunction PropertyEditor({\n uiDataProvider,\n initialItem,\n isLock = false,\n setFocus,\n onCancel,\n}: {\n uiDataProvider: UiLayoutDataProvider;\n initialItem: BaseDialogItem;\n isLock?: boolean;\n setFocus?: boolean;\n onCancel?: () => void;\n}) {\n const getLatestRecordValue = React.useCallback(\n (initial: BaseDialogItem) => {\n let newRecord = UiLayoutDataProvider.getPropertyRecord(initial);\n\n const foundItem = isLock\n ? uiDataProvider.items.find(\n (item) => item.lockProperty?.property.name === initial.property.name\n )\n : uiDataProvider.items.find(\n (item) => item.property.name === initial.property.name\n );\n if (foundItem) {\n if (isLock) {\n newRecord = newRecord.copyWithNewValue({\n value: foundItem.lockProperty!.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n });\n newRecord.isDisabled = foundItem.lockProperty!.isDisabled;\n } else {\n newRecord = newRecord.copyWithNewValue({\n value: foundItem.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n });\n newRecord.isDisabled = foundItem.isDisabled;\n }\n }\n return newRecord;\n },\n [isLock, uiDataProvider.items]\n );\n\n const currentRecord = getLatestRecordValue(initialItem);\n const [_propertyRecord, setPropertyRecord] = React.useState(currentRecord);\n const propertyRecord = useLockButtonPropertyRecord(_propertyRecord, isLock);\n\n // monitor tool for sync UI events\n React.useEffect(() => {\n return uiDataProvider.onSyncPropertiesChangeEvent.addListener((args) => {\n const mySyncItem = args.properties.find(\n (syncItem: DialogPropertySyncItem) =>\n syncItem.propertyName === initialItem.property.name\n );\n if (mySyncItem) {\n const newPropertyValue = propertyRecord.copyWithNewValue(\n {\n value: mySyncItem.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n displayValue: mySyncItem.value.displayValue,\n },\n mySyncItem.property\n );\n\n if (mySyncItem.property) {\n if (mySyncItem.property.name === mySyncItem.propertyName) {\n newPropertyValue.isDisabled = mySyncItem.isDisabled;\n setPropertyRecord(newPropertyValue);\n } else {\n Logger.logError(\n \"PropertyEditor\",\n `Error trying to replace propertyName=${mySyncItem.propertyName} with property named ${mySyncItem.property.name}`\n );\n }\n } else {\n newPropertyValue.isDisabled = mySyncItem.isDisabled;\n setPropertyRecord(newPropertyValue);\n }\n }\n });\n }, [uiDataProvider, propertyRecord, initialItem.property.name]);\n\n React.useEffect(() => {\n return uiDataProvider.onItemsReloadedEvent.addListener(() => {\n const newItem = findDialogItem(\n uiDataProvider,\n initialItem.property.name,\n isLock\n );\n if (!newItem) return;\n setPropertyRecord(getLatestRecordValue(newItem));\n });\n }, [uiDataProvider, initialItem.property.name, getLatestRecordValue, isLock]);\n\n const className = React.useMemo(\n () => (isLock ? \"uifw-default-property-lock\" : \"uifw-default-editor\"),\n [isLock]\n );\n const handleCommit = React.useCallback(\n (commit: PropertyUpdatedArgs) => {\n // UiLayoutDataProvider supports only primitive property types\n assert(\n commit.newValue.valueFormat === PropertyValueFormat.Primitive &&\n commit.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive\n );\n const newPropertyValue = propertyRecord.copyWithNewValue(commit.newValue);\n const syncItem: DialogPropertySyncItem = {\n value: commit.newValue as DialogItemValue,\n propertyName: initialItem.property.name,\n isDisabled: newPropertyValue.isDisabled,\n };\n uiDataProvider.applyUiPropertyChange(syncItem);\n // Now have the uiDataProvider refetch the latest property values from the tool\n uiDataProvider.reloadDialogItems(true);\n },\n [initialItem.property.name, propertyRecord, uiDataProvider]\n );\n const handleCancel = () => {};\n\n const useNewEditors = useToolSettingsNewEditors();\n\n return (\n <div key={initialItem.property.name} className={className}>\n {useNewEditors ? (\n <PropertyRecordEditor\n key={initialItem.property.name}\n propertyRecord={propertyRecord}\n setFocus={setFocus}\n onCommit={handleCommit}\n onCancel={onCancel ?? handleCancel}\n editorSystem=\"new\"\n size=\"small\"\n />\n ) : (\n <EditorContainer\n key={initialItem.property.name}\n propertyRecord={propertyRecord}\n setFocus={setFocus}\n onCommit={handleCommit}\n onCancel={onCancel ?? handleCancel}\n />\n )}\n </div>\n );\n}\n\n/** Utility methods to generate react ui from DialogRow specs\n * @public\n */\nexport class ComponentGenerator {\n constructor(\n private _uiDataProvider: UiLayoutDataProvider,\n private _onCancel?: () => void\n ) {}\n\n public get uiDataProvider() {\n return this._uiDataProvider;\n }\n\n private getEditor(\n item: BaseDialogItem,\n isLock = false,\n setFocus = false\n ): React.ReactNode {\n return (\n <PropertyEditor\n key={item.property.name}\n uiDataProvider={this.uiDataProvider}\n initialItem={item}\n isLock={isLock}\n setFocus={setFocus}\n onCancel={this._onCancel}\n />\n );\n }\n\n private generateRowWithButtonGroupEditors(\n row: DialogRow,\n rowIndex: number\n ): React.ReactNode {\n if (1 === row.items.length) {\n return (\n <div\n key={row.items[0].property.name}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n {this.getEditor(row.items[0])}\n </div>\n );\n }\n\n return (\n <div\n key={rowIndex}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item) => this.getEditor(item))}\n </div>\n </div>\n );\n }\n\n private generateEntryWithButtonGroupEditors(\n row: DialogRow,\n rowIndex: number\n ): ToolSettingsEntry {\n if (1 === row.items.length) {\n return {\n labelNode: \"\",\n editorNode: (\n <div\n key={row.items[0].property.name}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n {this.getEditor(row.items[0])}\n </div>\n ),\n };\n }\n\n return {\n labelNode: \"\",\n editorNode: (\n <div\n key={rowIndex}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item) => this.getEditor(item))}\n </div>\n </div>\n ),\n };\n }\n\n private getEditorLabel(\n item: DialogItem,\n isLeftmostRecord = false\n ): React.ReactNode {\n return (\n <EditorLabel\n uiDataProvider={this.uiDataProvider}\n item={item}\n isLeftmostRecord={isLeftmostRecord}\n />\n );\n }\n\n private getLeftLockAndLabel(\n rowItem: DialogItem,\n multiplePropertiesOnRow: boolean\n ): React.ReactNode {\n const record = UiLayoutDataProvider.getPropertyRecord(rowItem);\n const lockEditor = UiLayoutDataProvider.hasAssociatedLockProperty(rowItem)\n ? this.getEditor(rowItem.lockProperty!, true)\n : null;\n const label = UiLayoutDataProvider.editorWantsLabel(rowItem)\n ? this.getEditorLabel(rowItem)\n : null;\n const classNames = multiplePropertiesOnRow\n ? \"uifw-default-lock-and-label uifw-default-wide-only-display\"\n : \"uifw-default-lock-and-label\";\n return (\n <div key={`lock-${record.property.name}`} className={classNames}>\n {lockEditor}\n {label}\n </div>\n );\n }\n\n private getInlineLabelAndEditor(\n item: DialogItem,\n isLeftmostRecord: boolean\n ): React.ReactNode {\n const label = UiLayoutDataProvider.editorWantsLabel(item)\n ? this.getEditorLabel(item, isLeftmostRecord)\n : null;\n return (\n <div\n key={item.property.name}\n className=\"uifw-default-inline-label-and-editor\"\n >\n {label}\n {this.getEditor(item)}\n </div>\n );\n }\n\n private getRowWithMultipleEditors(row: DialogRow): React.ReactNode {\n return (\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item: DialogItem, index: number) =>\n this.getInlineLabelAndEditor(item, index === 0)\n )}\n </div>\n );\n }\n\n private getDivForRow(row: DialogRow): React.ReactNode {\n if (row.items.length === 1) return this.getEditor(row.items[0]);\n return this.getRowWithMultipleEditors(row);\n }\n\n public getRow(row: DialogRow, rowIndex: number): React.ReactNode {\n if (UiLayoutDataProvider.onlyContainButtonGroupEditors(row)) {\n return this.generateRowWithButtonGroupEditors(row, rowIndex);\n } else {\n return (\n <React.Fragment key={rowIndex}>\n {this.getLeftLockAndLabel(row.items[0], row.items.length > 1)}\n {this.getDivForRow(row)}\n </React.Fragment>\n );\n }\n }\n\n public getToolSettingsEntry(\n row: DialogRow,\n rowIndex: number\n ): ToolSettingsEntry {\n if (UiLayoutDataProvider.onlyContainButtonGroupEditors(row)) {\n return this.generateEntryWithButtonGroupEditors(row, rowIndex);\n } else {\n return {\n labelNode: this.getLeftLockAndLabel(row.items[0], row.items.length > 1),\n editorNode: this.getDivForRow(row),\n };\n }\n }\n\n /** ToolSettingsEntries are used by the tool settings bar. */\n public getToolSettingsEntries(): ToolSettingsEntry[] {\n return this.uiDataProvider.rows.map((row: DialogRow, index: number) =>\n this.getToolSettingsEntry(row, index)\n );\n }\n}\n\nfunction findDialogItem(\n uiDataProvider: UiLayoutDataProvider,\n propertyName: string,\n isLock: boolean\n) {\n const dialogItem = uiDataProvider.items.find((item) => {\n if (isLock) {\n return item.lockProperty?.property.name === propertyName;\n }\n return item.property.name === propertyName;\n });\n return isLock ? dialogItem?.lockProperty : dialogItem;\n}\n"]}
1
+ {"version":3,"file":"ComponentGenerator.js","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/ComponentGenerator.tsx"],"names":[],"mappings":"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","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/** @packageDocumentation\n * @module UiProvider\n */\n\nimport \"./DefaultDialogGridContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type {\n BaseDialogItem,\n DialogItem,\n DialogItemValue,\n DialogPropertySyncItem,\n DialogRow,\n} from \"@itwin/appui-abstract\";\nimport {\n PropertyValueFormat,\n UiLayoutDataProvider,\n} from \"@itwin/appui-abstract\";\nimport type { PropertyUpdatedArgs } from \"@itwin/components-react\";\nimport { EditorContainer, PropertyRecordEditor } from \"@itwin/components-react\";\nimport { assert, Logger } from \"@itwin/core-bentley\";\nimport { Label } from \"@itwin/itwinui-react\";\nimport { useToolSettingsNewEditors } from \"../preview/tool-settings-new-editors/useToolSettingsNewEditors.js\";\nimport type { ToolSettingsEntry } from \"../widget-panels/ToolSettings.js\";\nimport { useLockButtonPropertyRecord } from \"../preview/tool-settings-lock-button/useToolSettingsLockButton.js\";\nimport {\n LockContext,\n PropertyEditorProvider,\n} from \"../editors/LockProvider.js\";\n\nfunction EditorLabel({\n uiDataProvider,\n item,\n isLeftmostRecord,\n}: {\n uiDataProvider: UiLayoutDataProvider;\n item: DialogItem;\n isLeftmostRecord?: boolean;\n}) {\n const [isDisabled, setIsDisabled] = React.useState(!!item.isDisabled);\n const displayLabel = React.useMemo(() => {\n return item.property.displayLabel || item.property.name;\n }, [item]);\n\n // listen for tool sync property events and update the isDisabled state\n React.useEffect(() => {\n return uiDataProvider.onSyncPropertiesChangeEvent.addListener((args) => {\n const mySyncItem = args.properties.find(\n (syncItem) => syncItem.propertyName === item.property.name\n );\n if (mySyncItem) {\n setIsDisabled(!!mySyncItem.isDisabled);\n }\n });\n }, [uiDataProvider, item]);\n\n const className = classnames(\n \"uifw-default-label\",\n !!isLeftmostRecord && \"uifw-default-narrow-only-display\"\n );\n return (\n <Label\n className={className}\n htmlFor={item.property.name}\n disabled={isDisabled}\n >\n {displayLabel}:\n </Label>\n );\n}\n\nfunction PropertyEditor(props: {\n uiDataProvider: UiLayoutDataProvider;\n // Property or a lock property.\n initialItem: BaseDialogItem;\n // If a lock property is rendered, this prop contains the property name of the property that the lock property locks.\n itemPropertyName: string;\n isLock?: boolean;\n setFocus?: boolean;\n onCancel?: () => void;\n}) {\n const {\n uiDataProvider,\n initialItem,\n itemPropertyName,\n isLock = false,\n setFocus,\n onCancel,\n } = props;\n const getLatestRecordValue = React.useCallback(\n (initial: BaseDialogItem) => {\n let newRecord = UiLayoutDataProvider.getPropertyRecord(initial);\n\n const foundItem = isLock\n ? uiDataProvider.items.find(\n (item) => item.lockProperty?.property.name === initial.property.name\n )\n : uiDataProvider.items.find(\n (item) => item.property.name === initial.property.name\n );\n if (foundItem) {\n if (isLock) {\n newRecord = newRecord.copyWithNewValue({\n value: foundItem.lockProperty!.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n });\n newRecord.isDisabled = foundItem.lockProperty!.isDisabled;\n } else {\n newRecord = newRecord.copyWithNewValue({\n value: foundItem.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n });\n newRecord.isDisabled = foundItem.isDisabled;\n }\n }\n return newRecord;\n },\n [isLock, uiDataProvider.items]\n );\n\n const currentRecord = getLatestRecordValue(initialItem);\n const [_propertyRecord, setPropertyRecord] = React.useState(currentRecord);\n const propertyRecord = useLockButtonPropertyRecord(_propertyRecord, isLock);\n\n // monitor tool for sync UI events\n React.useEffect(() => {\n return uiDataProvider.onSyncPropertiesChangeEvent.addListener((args) => {\n const mySyncItem = args.properties.find(\n (syncItem: DialogPropertySyncItem) =>\n syncItem.propertyName === initialItem.property.name\n );\n if (mySyncItem) {\n const newPropertyValue = propertyRecord.copyWithNewValue(\n {\n value: mySyncItem.value.value,\n valueFormat: PropertyValueFormat.Primitive,\n displayValue: mySyncItem.value.displayValue,\n },\n mySyncItem.property\n );\n\n if (mySyncItem.property) {\n if (mySyncItem.property.name === mySyncItem.propertyName) {\n newPropertyValue.isDisabled = mySyncItem.isDisabled;\n setPropertyRecord(newPropertyValue);\n } else {\n Logger.logError(\n \"PropertyEditor\",\n `Error trying to replace propertyName=${mySyncItem.propertyName} with property named ${mySyncItem.property.name}`\n );\n }\n } else {\n newPropertyValue.isDisabled = mySyncItem.isDisabled;\n setPropertyRecord(newPropertyValue);\n }\n }\n });\n }, [uiDataProvider, propertyRecord, initialItem.property.name]);\n\n React.useEffect(() => {\n return uiDataProvider.onItemsReloadedEvent.addListener(() => {\n const newItem = findDialogItem(\n uiDataProvider,\n initialItem.property.name,\n isLock\n );\n if (!newItem) return;\n setPropertyRecord(getLatestRecordValue(newItem));\n });\n }, [uiDataProvider, initialItem.property.name, getLatestRecordValue, isLock]);\n\n const className = React.useMemo(\n () => (isLock ? \"uifw-default-property-lock\" : \"uifw-default-editor\"),\n [isLock]\n );\n const handleCommit = React.useCallback(\n (commit: PropertyUpdatedArgs) => {\n // UiLayoutDataProvider supports only primitive property types\n assert(\n commit.newValue.valueFormat === PropertyValueFormat.Primitive &&\n commit.propertyRecord.value.valueFormat ===\n PropertyValueFormat.Primitive\n );\n const newPropertyValue = propertyRecord.copyWithNewValue(commit.newValue);\n const syncItem: DialogPropertySyncItem = {\n value: commit.newValue as DialogItemValue,\n propertyName: initialItem.property.name,\n isDisabled: newPropertyValue.isDisabled,\n };\n uiDataProvider.applyUiPropertyChange(syncItem);\n // Now have the uiDataProvider refetch the latest property values from the tool\n uiDataProvider.reloadDialogItems(true);\n },\n [initialItem.property.name, propertyRecord, uiDataProvider]\n );\n const handleCancel = () => {};\n\n const useNewEditors = useToolSettingsNewEditors();\n\n const lockPropertyName = isLock ? initialItem.property.name : undefined;\n return (\n <PropertyEditorProvider\n uiDataProvider={uiDataProvider}\n itemPropertyName={itemPropertyName ?? initialItem.property.name}\n lockPropertyName={lockPropertyName}\n >\n <div key={initialItem.property.name} className={className}>\n {useNewEditors ? (\n <PropertyRecordEditor\n key={initialItem.property.name}\n propertyRecord={propertyRecord}\n setFocus={setFocus}\n onCommit={handleCommit}\n onCancel={onCancel ?? handleCancel}\n editorSystem=\"new\"\n size=\"small\"\n />\n ) : (\n <EditorContainer\n key={initialItem.property.name}\n propertyRecord={propertyRecord}\n setFocus={setFocus}\n onCommit={handleCommit}\n onCancel={onCancel ?? handleCancel}\n />\n )}\n </div>\n </PropertyEditorProvider>\n );\n}\n\n/** Utility methods to generate react ui from DialogRow specs\n * @public\n */\nexport class ComponentGenerator {\n constructor(\n private _uiDataProvider: UiLayoutDataProvider,\n private _onCancel?: () => void\n ) {}\n\n public get uiDataProvider() {\n return this._uiDataProvider;\n }\n\n private getEditor(\n item: BaseDialogItem,\n isLock = false,\n setFocus = false,\n itemPropertyName?: string\n ): React.ReactNode {\n return (\n <PropertyEditor\n key={item.property.name}\n uiDataProvider={this.uiDataProvider}\n initialItem={item}\n itemPropertyName={itemPropertyName ?? item.property.name}\n isLock={isLock}\n setFocus={setFocus}\n onCancel={this._onCancel}\n />\n );\n }\n\n private generateRowWithButtonGroupEditors(\n row: DialogRow,\n rowIndex: number\n ): React.ReactNode {\n if (1 === row.items.length) {\n return (\n <div\n key={row.items[0].property.name}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n {this.getEditor(row.items[0])}\n </div>\n );\n }\n\n return (\n <div\n key={rowIndex}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item) => this.getEditor(item))}\n </div>\n </div>\n );\n }\n\n private generateEntryWithButtonGroupEditors(\n row: DialogRow,\n rowIndex: number\n ): ToolSettingsEntry {\n if (1 === row.items.length) {\n return {\n labelNode: \"\",\n editorNode: (\n <div\n key={row.items[0].property.name}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n {this.getEditor(row.items[0])}\n </div>\n ),\n };\n }\n\n return {\n labelNode: \"\",\n editorNode: (\n <div\n key={rowIndex}\n className=\"uifw-default-inline-editor-group uifw-default-center-across-width\"\n >\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item) => this.getEditor(item))}\n </div>\n </div>\n ),\n };\n }\n\n private getEditorLabel(\n item: DialogItem,\n isLeftmostRecord = false\n ): React.ReactNode {\n return (\n <EditorLabel\n uiDataProvider={this.uiDataProvider}\n item={item}\n isLeftmostRecord={isLeftmostRecord}\n />\n );\n }\n\n private getLeftLockAndLabel(\n rowItem: DialogItem,\n multiplePropertiesOnRow: boolean\n ): React.ReactNode {\n const record = UiLayoutDataProvider.getPropertyRecord(rowItem);\n const lockEditor = UiLayoutDataProvider.hasAssociatedLockProperty(rowItem)\n ? this.getEditor(rowItem.lockProperty!, true)\n : null;\n const label = UiLayoutDataProvider.editorWantsLabel(rowItem)\n ? this.getEditorLabel(rowItem)\n : null;\n return (\n <LeftLockAndLabel\n key={`lock-${record.property.name}`}\n lockEditor={lockEditor}\n label={label}\n multiplePropertiesOnRow={multiplePropertiesOnRow}\n itemPropertyName={rowItem.property.name}\n />\n );\n }\n\n private getInlineLabelAndEditor(\n item: DialogItem,\n isLeftmostRecord: boolean\n ): React.ReactNode {\n const label = UiLayoutDataProvider.editorWantsLabel(item)\n ? this.getEditorLabel(item, isLeftmostRecord)\n : null;\n return (\n <div\n key={item.property.name}\n className=\"uifw-default-inline-label-and-editor\"\n >\n {label}\n {this.getEditor(item)}\n </div>\n );\n }\n\n private getRowWithMultipleEditors(row: DialogRow): React.ReactNode {\n return (\n <div className=\"uifw-default-inline-editor-group\">\n {row.items.map((item: DialogItem, index: number) =>\n this.getInlineLabelAndEditor(item, index === 0)\n )}\n </div>\n );\n }\n\n private getDivForRow(row: DialogRow): React.ReactNode {\n if (row.items.length === 1) return this.getEditor(row.items[0]);\n return this.getRowWithMultipleEditors(row);\n }\n\n public getRow(row: DialogRow, rowIndex: number): React.ReactNode {\n if (UiLayoutDataProvider.onlyContainButtonGroupEditors(row)) {\n return this.generateRowWithButtonGroupEditors(row, rowIndex);\n } else {\n return (\n <React.Fragment key={rowIndex}>\n {this.getLeftLockAndLabel(row.items[0], row.items.length > 1)}\n {this.getDivForRow(row)}\n </React.Fragment>\n );\n }\n }\n\n public getToolSettingsEntry(\n row: DialogRow,\n rowIndex: number\n ): ToolSettingsEntry {\n if (UiLayoutDataProvider.onlyContainButtonGroupEditors(row)) {\n return this.generateEntryWithButtonGroupEditors(row, rowIndex);\n } else {\n return {\n labelNode: this.getLeftLockAndLabel(row.items[0], row.items.length > 1),\n editorNode: this.getDivForRow(row),\n };\n }\n }\n\n /** ToolSettingsEntries are used by the tool settings bar. */\n public getToolSettingsEntries(): ToolSettingsEntry[] {\n return this.uiDataProvider.rows.map((row: DialogRow, index: number) =>\n this.getToolSettingsEntry(row, index)\n );\n }\n}\n\nfunction findDialogItem(\n uiDataProvider: UiLayoutDataProvider,\n propertyName: string,\n isLock: boolean\n) {\n const dialogItem = uiDataProvider.items.find((item) => {\n if (isLock) {\n return item.lockProperty?.property.name === propertyName;\n }\n return item.property.name === propertyName;\n });\n return isLock ? dialogItem?.lockProperty : dialogItem;\n}\n\ninterface LeftLockAndLabelProps {\n lockEditor?: React.ReactNode;\n label?: React.ReactNode;\n multiplePropertiesOnRow: boolean;\n itemPropertyName: string;\n}\n\nfunction LeftLockAndLabel(props: LeftLockAndLabelProps) {\n const { lockEditor, label, multiplePropertiesOnRow, itemPropertyName } =\n props;\n const { lockDecorations } = React.useContext(LockContext) ?? {};\n const lockDecoration = React.useMemo(() => {\n return lockDecorations?.[itemPropertyName];\n }, [lockDecorations, itemPropertyName]);\n\n const classNames = multiplePropertiesOnRow\n ? \"uifw-default-lock-and-label uifw-default-wide-only-display\"\n : \"uifw-default-lock-and-label\";\n return (\n <div className={classNames}>\n {lockDecoration ? undefined : lockEditor}\n {label}\n </div>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultDialogGridContainer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/DefaultDialogGridContainer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mCAAmC,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAOlE;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,GACnB,EAAE;IACD,kBAAkB,EAAE,kBAAkB,CAAC;CACxC,qBAeA;AAED,UAAU,wBAAwB;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAClC,kBAAkB,EAClB,kBAAkB,GACnB,EAAE,wBAAwB,qBAS1B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,kBAAkB,EAClB,cAAc,GACf,EAAE;IACD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qBAMA"}
1
+ {"version":3,"file":"DefaultDialogGridContainer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/uiprovider/DefaultDialogGridContainer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mCAAmC,CAAC;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAQlE;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EACxC,kBAAkB,GACnB,EAAE;IACD,kBAAkB,EAAE,kBAAkB,CAAC;CACxC,qBAeA;AAED,UAAU,wBAAwB;IAChC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,EAClC,kBAAkB,EAClB,kBAAkB,GACnB,EAAE,wBAAwB,qBAW1B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,kBAAkB,EAClB,cAAc,GACf,EAAE;IACD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,qBAMA"}
@@ -9,6 +9,7 @@ import "./DefaultDialogGridContainer.scss";
9
9
  import classnames from "classnames";
10
10
  import * as React from "react";
11
11
  import { ToolSettingsContentContext } from "../widgets/ToolSettingsContent.js";
12
+ import { LockProvider } from "../editors/LockProvider.js";
12
13
  var LayoutMode;
13
14
  (function (LayoutMode) {
14
15
  LayoutMode[LayoutMode["Wide"] = 0] = "Wide";
@@ -27,7 +28,7 @@ export function ToolSettingsGridContainer({ componentGenerator, }) {
27
28
  /** @internal */
28
29
  export function DialogGridContainer({ componentGenerator, containerClassName, }) {
29
30
  const className = classnames("uifw-default-container", containerClassName);
30
- return (React.createElement("div", { className: className }, componentGenerator.uiDataProvider.rows.map((row, index) => componentGenerator.getRow(row, index))));
31
+ return (React.createElement("div", { className: className }, componentGenerator.uiDataProvider.rows.map((row, index) => (React.createElement(LockProvider, { key: index }, componentGenerator.getRow(row, index))))));
31
32
  }
32
33
  /** DefaultDialogGridContainer populates a React node with the items specified by the UiLayoutDataProvider
33
34
  * @public