@itwin/appui-react 5.15.1 → 5.16.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.
- package/CHANGELOG.md +30 -0
- package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
- package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
- package/lib/appui-react/content/ContentGroup.js +1 -1
- package/lib/appui-react/content/ContentGroup.js.map +1 -1
- package/lib/appui-react/content/FloatingViewportContent.js +1 -1
- package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
- package/lib/appui-react/content/split-pane/Pane.d.ts +1 -1
- package/lib/appui-react/content/split-pane/Pane.d.ts.map +1 -1
- package/lib/appui-react/content/split-pane/Pane.js.map +1 -1
- package/lib/appui-react/content/split-pane/SplitPane.js +1 -1
- package/lib/appui-react/content/split-pane/SplitPane.js.map +1 -1
- package/lib/appui-react/cursor/cursormenu/CursorMenu.js +1 -1
- package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +1 -1
- package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
- package/lib/appui-react/dialog/UiDataProvidedDialog.js +2 -2
- package/lib/appui-react/dialog/UiDataProvidedDialog.js.map +1 -1
- package/lib/appui-react/framework/FrameworkFrontstages.d.ts +5 -0
- package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
- package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
- package/lib/appui-react/hooks/useConditionalProp.d.ts.map +1 -1
- package/lib/appui-react/hooks/useConditionalProp.js +8 -2
- package/lib/appui-react/hooks/useConditionalProp.js.map +1 -1
- package/lib/appui-react/hooks/useLatestRef.d.ts +1 -1
- package/lib/appui-react/hooks/useLatestRef.d.ts.map +1 -1
- package/lib/appui-react/layout/StandardLayout.scss +0 -1
- package/lib/appui-react/layout/tool-settings/Docked.js.map +1 -1
- package/lib/appui-react/layout/widget/Tab.js +2 -2
- package/lib/appui-react/layout/widget/Tab.js.map +1 -1
- package/lib/appui-react/layout/widget/TabBar.js +1 -1
- package/lib/appui-react/layout/widget/TabBar.js.map +1 -1
- package/lib/appui-react/layout/widget-panels/Grip.js +1 -1
- package/lib/appui-react/layout/widget-panels/Grip.js.map +1 -1
- package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts +1 -1
- package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts.map +1 -1
- package/lib/appui-react/layout/widget-panels/useAnimatePanel.js +3 -3
- package/lib/appui-react/layout/widget-panels/useAnimatePanel.js.map +1 -1
- package/lib/appui-react/messages/MessageRenderer.d.ts.map +1 -1
- package/lib/appui-react/messages/MessageRenderer.js +1 -1
- package/lib/appui-react/messages/MessageRenderer.js.map +1 -1
- package/lib/appui-react/pickers/ListPicker.d.ts.map +1 -1
- package/lib/appui-react/pickers/ListPicker.js +1 -1
- package/lib/appui-react/pickers/ListPicker.js.map +1 -1
- package/lib/appui-react/pickers/ListPicker.scss +10 -0
- package/lib/appui-react/settings/quantityformatting/QuantityFormat.d.ts.map +1 -1
- package/lib/appui-react/settings/quantityformatting/QuantityFormat.js +1 -1
- package/lib/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
- package/lib/appui-react/statusbar/popup/Popup.js +1 -1
- package/lib/appui-react/statusbar/popup/Popup.js.map +1 -1
- package/lib/appui-react/statusbar/popup/StatusBarPopover.js +1 -1
- package/lib/appui-react/statusbar/popup/StatusBarPopover.js.map +1 -1
- package/lib/appui-react/statusfields/SnapMode.js +1 -1
- package/lib/appui-react/statusfields/SnapMode.js.map +1 -1
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
- package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
- package/lib/appui-react/toolbar/ToolbarComposer.d.ts.map +1 -1
- package/lib/appui-react/toolbar/ToolbarComposer.js +49 -3
- package/lib/appui-react/toolbar/ToolbarComposer.js.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/ToolGroup.js.map +1 -1
- package/lib/appui-react/toolbar/new-toolbars/useOverflow.js +3 -3
- package/lib/appui-react/toolbar/new-toolbars/useOverflow.js.map +1 -1
- package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
- package/lib/appui-react/uiprovider/ComponentGenerator.d.ts.map +1 -1
- package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
- package/lib/appui-react/widget-panels/ToolSettings.d.ts +1 -1
- package/lib/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
- package/lib/appui-react/widget-panels/ToolSettings.js.map +1 -1
- package/lib/cjs/appui-react/layout/StandardLayout.scss +0 -1
- package/lib/cjs/appui-react/pickers/ListPicker.scss +10 -0
- package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
- package/lib/esm/appui-react/layout/StandardLayout.scss +0 -1
- package/lib/esm/appui-react/pickers/ListPicker.scss +10 -0
- package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
- package/package.json +16 -16
|
@@ -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\";\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
|
+
{"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}): React.ReactNode {\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}): React.ReactNode {\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}): React.ReactNode {\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":"ToolbarComposer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/toolbar/ToolbarComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EAIV,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACb,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolbarComposer.d.ts","sourceRoot":"","sources":["../../../src/appui-react/toolbar/ToolbarComposer.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EAIV,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,kBAAkB,EAClB,YAAY,EACb,MAAM,kBAAkB,CAAC;AA8J1B;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,8FAA8F;IAC9F,KAAK,EAAE,YAAY,CAAC;IACpB,2BAA2B;IAC3B,WAAW,EAAE,kBAAkB,CAAC;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;GAIG;AAEH,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,qBA4C5D;AAqED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAAE,EACpB,aAAa,EAAE,MAAM,EAAE,iBA4BxB"}
|
|
@@ -15,6 +15,8 @@ import { isToolbarActionItem, isToolbarGroupItem, ToolbarOrientation, ToolbarUsa
|
|
|
15
15
|
import { Toolbar } from "./Toolbar.js";
|
|
16
16
|
import { useActiveStageProvidedToolbarItems } from "./useActiveStageProvidedToolbarItems.js";
|
|
17
17
|
import { useActiveToolId } from "../hooks/useActiveToolId.js";
|
|
18
|
+
import { ConditionalBooleanValue } from "../shared/ConditionalValue.js";
|
|
19
|
+
import { SyncUiEventDispatcher } from "../syncui/SyncUiEventDispatcher.js";
|
|
18
20
|
function addItemToSpecifiedParentGroup(items, groupChildren) {
|
|
19
21
|
const outItems = [];
|
|
20
22
|
for (const toolbarItem of items) {
|
|
@@ -138,9 +140,13 @@ export function ToolbarComposer(props) {
|
|
|
138
140
|
}, [props.items, addonItems]);
|
|
139
141
|
const activeToolId = useActiveToolId();
|
|
140
142
|
const activeItemIds = React.useMemo(() => activeItemIdsProp ?? (activeToolId ? [activeToolId] : []), [activeItemIdsProp, activeToolId]);
|
|
143
|
+
const activeConditionalItemIds = useActiveConditionalItemIds(allItems);
|
|
141
144
|
const items = React.useMemo(() => {
|
|
142
|
-
return updateActiveItems(allItems,
|
|
143
|
-
|
|
145
|
+
return updateActiveItems(allItems, [
|
|
146
|
+
...activeItemIds,
|
|
147
|
+
...activeConditionalItemIds,
|
|
148
|
+
]);
|
|
149
|
+
}, [allItems, activeItemIds, activeConditionalItemIds]);
|
|
144
150
|
const isDragEnabled = React.useContext(ToolbarDragInteractionContext);
|
|
145
151
|
const useProximityOpacity = useProximityOpacitySetting();
|
|
146
152
|
const snapWidgetOpacity = useSnapWidgetOpacitySetting();
|
|
@@ -165,6 +171,46 @@ function toPanelAlignment(orientation, usage) {
|
|
|
165
171
|
return ToolbarPanelAlignment.End;
|
|
166
172
|
return ToolbarPanelAlignment.Start;
|
|
167
173
|
}
|
|
174
|
+
function useActiveConditionalItemIds(items) {
|
|
175
|
+
const [activeItemIds, setActiveItemIds] = React.useState([]);
|
|
176
|
+
const conditionalItems = React.useMemo(() => {
|
|
177
|
+
const conditionals = [];
|
|
178
|
+
const stack = [...items];
|
|
179
|
+
while (stack.length > 0) {
|
|
180
|
+
const current = stack.pop();
|
|
181
|
+
if (current.isActiveCondition)
|
|
182
|
+
conditionals.push(current);
|
|
183
|
+
if (isToolbarGroupItem(current)) {
|
|
184
|
+
for (const child of current.items) {
|
|
185
|
+
stack.push(child);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return conditionals;
|
|
190
|
+
}, [items]);
|
|
191
|
+
React.useEffect(() => {
|
|
192
|
+
return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {
|
|
193
|
+
const newActiveIds = [];
|
|
194
|
+
for (const item of conditionalItems) {
|
|
195
|
+
ConditionalBooleanValue.refreshValue(item.isActiveCondition, args.eventIds);
|
|
196
|
+
const isActive = ConditionalBooleanValue.getValue(item.isActiveCondition);
|
|
197
|
+
if (isActive)
|
|
198
|
+
newActiveIds.push(item.id);
|
|
199
|
+
}
|
|
200
|
+
setActiveItemIds(newActiveIds);
|
|
201
|
+
});
|
|
202
|
+
}, [conditionalItems]);
|
|
203
|
+
React.useEffect(() => {
|
|
204
|
+
const newActiveIds = [];
|
|
205
|
+
for (const item of conditionalItems) {
|
|
206
|
+
const isActive = ConditionalBooleanValue.getValue(item.isActiveCondition);
|
|
207
|
+
if (isActive)
|
|
208
|
+
newActiveIds.push(item.id);
|
|
209
|
+
}
|
|
210
|
+
setActiveItemIds(newActiveIds);
|
|
211
|
+
}, [conditionalItems]);
|
|
212
|
+
return activeItemIds;
|
|
213
|
+
}
|
|
168
214
|
/** @internal */
|
|
169
215
|
export function updateActiveItems(items, activeItemIds) {
|
|
170
216
|
return produce(items, (draft) => {
|
|
@@ -175,7 +221,7 @@ export function updateActiveItems(items, activeItemIds) {
|
|
|
175
221
|
const isActive = activeItemIds.includes(current.id);
|
|
176
222
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
177
223
|
current.isActive = isActive;
|
|
178
|
-
if (
|
|
224
|
+
if (isToolbarGroupItem(current)) {
|
|
179
225
|
for (const child of current.items) {
|
|
180
226
|
stack.push([child, [...ancestors, current]]);
|
|
181
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarComposer.js","sourceRoot":"","sources":["../../../src/appui-react/toolbar/ToolbarComposer.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 { produce } from \"immer\";\nimport {\n Direction,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { ToolbarDragInteractionContext } from \"./DragInteraction.js\";\nimport type {\n CommonToolbarItem,\n ToolbarActionItem,\n ToolbarGroupItem,\n ToolbarItem,\n} from \"./ToolbarItem.js\";\nimport {\n isToolbarActionItem,\n isToolbarGroupItem,\n ToolbarOrientation,\n ToolbarUsage,\n} from \"./ToolbarItem.js\";\nimport { Toolbar } from \"./Toolbar.js\";\nimport { useActiveStageProvidedToolbarItems } from \"./useActiveStageProvidedToolbarItems.js\";\nimport { useActiveToolId } from \"../hooks/useActiveToolId.js\";\n\nfunction addItemToSpecifiedParentGroup<T extends ToolbarItem>(\n items: readonly T[],\n groupChildren: Array<ToolbarActionItem | ToolbarGroupItem>\n): T[] {\n const outItems: T[] = [];\n for (const toolbarItem of items) {\n if (!isToolbarGroupItem(toolbarItem)) {\n outItems.push(toolbarItem);\n continue;\n }\n\n const newChildren = addItemToSpecifiedParentGroup(\n toolbarItem.items,\n groupChildren\n );\n const foundIndices: number[] = [];\n\n groupChildren.forEach((entry, index) => {\n if (entry.parentGroupItemId === toolbarItem.id) {\n foundIndices.push(index);\n }\n });\n\n if (foundIndices.length) {\n // process in reverse order so groupChildren can be reduced as we find matches\n foundIndices\n .sort((a, b) => a - b)\n .reverse()\n .forEach((foundIndex) => {\n newChildren.push(groupChildren[foundIndex]);\n groupChildren.splice(foundIndex);\n });\n }\n\n outItems.push({ ...toolbarItem, items: newChildren });\n }\n return outItems;\n}\n\nfunction cloneGroup(inGroup: ToolbarGroupItem): ToolbarGroupItem {\n const childItems: Array<ToolbarActionItem | ToolbarGroupItem> = [];\n inGroup.items.forEach((item) => {\n if (isToolbarGroupItem(item)) childItems.push(cloneGroup(item));\n else childItems.push(item);\n });\n\n const clonedGroup = { ...inGroup, items: childItems };\n return clonedGroup;\n}\n\nfunction getItemSortValue(item: ToolbarItem) {\n const groupValue = undefined === item.groupPriority ? 0 : item.groupPriority;\n return groupValue * 10000 + item.itemPriority;\n}\n\nfunction sortItems(items: ReadonlyArray<ToolbarItem>): ToolbarItem[] {\n return [...items]\n .sort((a, b) => getItemSortValue(a) - getItemSortValue(b))\n .map((i) => {\n if (isToolbarGroupItem(i)) {\n return { ...i, items: sortItems(i.items) };\n }\n return i;\n });\n}\n\n/**\n * Create a forEach handler that will add every element of an array of ToolbarItems\n * to a list of items that can then be replaced in its proper place, ensuring that\n * the same item, from different list, is not added multiple times.\n * @param items Output list of items\n * @param groupChildren Output list of group children to redistribute.\n * @returns Array<ToolbarItem>.forEach handler.\n */\nfunction addIfNotDuplicate(\n items: ToolbarItem[],\n groupChildren: (ToolbarActionItem | ToolbarGroupItem)[]\n): (value: ToolbarItem) => void {\n return (srcItem: ToolbarItem) => {\n if (-1 === items.findIndex((item) => item.id === srcItem.id)) {\n // if the default item is a group that an addon may insert into copy it so we don't mess with original\n const toolbarItem = isToolbarGroupItem(srcItem)\n ? cloneGroup(srcItem)\n : srcItem;\n if (\n (isToolbarGroupItem(toolbarItem) || isToolbarActionItem(toolbarItem)) &&\n toolbarItem.parentGroupItemId\n )\n groupChildren.push(toolbarItem);\n else items.push(toolbarItem);\n }\n };\n}\n\n/** local function to combine items from Stage and from Extensions */\nfunction combineItems(\n defaultItems: ReadonlyArray<ToolbarItem>,\n addonItems: ReadonlyArray<ToolbarItem>\n): ToolbarItem[] {\n let items: ToolbarItem[] = [];\n const groupChildren: Array<ToolbarActionItem | ToolbarGroupItem> = [];\n\n defaultItems.forEach(addIfNotDuplicate(items, groupChildren));\n addonItems.forEach(addIfNotDuplicate(items, groupChildren));\n\n // if an item from an addon has specified a parent group then try to find it and insert it. If no parent is found, add item at root level.\n if (groupChildren.length) {\n items = addItemToSpecifiedParentGroup(items, groupChildren);\n\n groupChildren.forEach((toolbarItem) => {\n Logger.logWarning(\n \"ToolbarComposer\",\n `Requested Parent Group [${toolbarItem.parentGroupItemId!}] not found, so item [${\n toolbarItem.id\n }] is added directly to toolbar.`\n );\n items.push(toolbarItem);\n });\n }\n\n return sortItems(items);\n}\n\nconst useProximityOpacitySetting = () => {\n const [proximityOpacity, setProximityOpacity] = React.useState(\n UiFramework.visibility.useProximityOpacity // eslint-disable-line @typescript-eslint/no-deprecated\n );\n\n React.useEffect(() => {\n UiFramework.onUiVisibilityChanged.addListener(\n () => setProximityOpacity(UiFramework.visibility.useProximityOpacity) // eslint-disable-line @typescript-eslint/no-deprecated\n );\n }, []);\n\n return proximityOpacity;\n};\n\nconst useSnapWidgetOpacitySetting = () => {\n const [snapWidgetOpacity, setSnapWidgetOpacity] = React.useState(\n UiFramework.visibility.snapWidgetOpacity\n );\n\n React.useEffect(() => {\n UiFramework.onUiVisibilityChanged.addListener(() =>\n setSnapWidgetOpacity(UiFramework.visibility.snapWidgetOpacity)\n );\n }, []);\n\n return snapWidgetOpacity;\n};\n\n/** Properties for the [[ToolbarComposer]] React components\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof ToolbarComposer>`\n */\nexport interface ExtensibleToolbarProps {\n /** Toolbar items to be displayed in addition to the provided toolbar items. */\n items: ToolbarItem[];\n /** Toolbar usage based on which additional toolbar items are added from UI item providers. */\n usage: ToolbarUsage;\n /** Toolbar orientation. */\n orientation: ToolbarOrientation;\n /** Describes the ids of active toolbar items.\n * By default only the toolbar item with id that matches the active `Tool` id is active.\n * @note Property {@link CommonToolbarItem.isActiveCondition} takes precedence when determining the active state of a toolbar item.\n */\n activeItemIds?: string[];\n}\n\n/**\n * Toolbar that is populated and maintained by UI item providers.\n * @note Overrides {@link CommonToolbarItem.isActive} property based on the active tool id, unless {@link ExtensibleToolbarProps.activeItemIds} is specified.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function ToolbarComposer(props: ExtensibleToolbarProps) {\n const { usage, orientation, activeItemIds: activeItemIdsProp } = props;\n\n // process items from addon UI providers\n const addonItems = useActiveStageProvidedToolbarItems(usage, orientation);\n\n const allItems = React.useMemo(() => {\n return combineItems(props.items, addonItems);\n }, [props.items, addonItems]);\n\n const activeToolId = useActiveToolId();\n const activeItemIds = React.useMemo(\n () => activeItemIdsProp ?? (activeToolId ? [activeToolId] : []),\n [activeItemIdsProp, activeToolId]\n );\n const items = React.useMemo(() => {\n return updateActiveItems(allItems, activeItemIds);\n }, [allItems, activeItemIds]);\n\n const isDragEnabled = React.useContext(ToolbarDragInteractionContext);\n const useProximityOpacity = useProximityOpacitySetting();\n const snapWidgetOpacity = useSnapWidgetOpacitySetting();\n\n const expandsTo = toExpandsTo(orientation, usage);\n const panelAlignment = toPanelAlignment(orientation, usage);\n return (\n <Toolbar\n enableOverflow={true}\n expandsTo={expandsTo}\n panelAlignment={panelAlignment}\n items={items}\n useDragInteraction={isDragEnabled}\n toolbarOpacitySetting={\n (useProximityOpacity || snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ? ToolbarOpacitySetting.Proximity\n : ToolbarOpacitySetting.Defaults\n }\n />\n );\n}\n\nfunction toExpandsTo(orientation: ToolbarOrientation, usage: ToolbarUsage) {\n if (orientation === ToolbarOrientation.Vertical) {\n if (usage === ToolbarUsage.ViewNavigation) return Direction.Left;\n return Direction.Right;\n }\n\n return Direction.Bottom;\n}\n\nfunction toPanelAlignment(\n orientation: ToolbarOrientation,\n usage: ToolbarUsage\n) {\n if (\n orientation === ToolbarOrientation.Horizontal &&\n usage === ToolbarUsage.ViewNavigation\n )\n return ToolbarPanelAlignment.End;\n\n return ToolbarPanelAlignment.Start;\n}\n\n/** @internal */\nexport function updateActiveItems(\n items: ToolbarItem[],\n activeItemIds: string[]\n) {\n return produce(items, (draft) => {\n // Iterative DFS with ancestor backtracking.\n const stack = draft.map((item) => [item, [] as typeof draft] as const);\n\n while (stack.length > 0) {\n const [current, ancestors] = stack.pop()!;\n\n const isActive = activeItemIds.includes(current.id);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n current.isActive = isActive;\n\n if (\"items\" in current) {\n for (const child of current.items) {\n stack.push([child, [...ancestors, current]]);\n }\n }\n\n if (!isActive) continue;\n\n // Mark ancestors of active item as active.\n for (const ancestor of ancestors) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ancestor.isActive = true;\n }\n }\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ToolbarComposer.js","sourceRoot":"","sources":["../../../src/appui-react/toolbar/ToolbarComposer.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 { produce } from \"immer\";\nimport {\n Direction,\n ToolbarOpacitySetting,\n ToolbarPanelAlignment,\n} from \"@itwin/components-react\";\nimport { Logger, ProcessDetector } from \"@itwin/core-bentley\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { ToolbarDragInteractionContext } from \"./DragInteraction.js\";\nimport type {\n CommonToolbarItem,\n ToolbarActionItem,\n ToolbarGroupItem,\n ToolbarItem,\n} from \"./ToolbarItem.js\";\nimport {\n isToolbarActionItem,\n isToolbarGroupItem,\n ToolbarOrientation,\n ToolbarUsage,\n} from \"./ToolbarItem.js\";\nimport { Toolbar } from \"./Toolbar.js\";\nimport { useActiveStageProvidedToolbarItems } from \"./useActiveStageProvidedToolbarItems.js\";\nimport { useActiveToolId } from \"../hooks/useActiveToolId.js\";\nimport { ConditionalBooleanValue } from \"../shared/ConditionalValue.js\";\nimport { SyncUiEventDispatcher } from \"../syncui/SyncUiEventDispatcher.js\";\n\nfunction addItemToSpecifiedParentGroup<T extends ToolbarItem>(\n items: readonly T[],\n groupChildren: Array<ToolbarActionItem | ToolbarGroupItem>\n): T[] {\n const outItems: T[] = [];\n for (const toolbarItem of items) {\n if (!isToolbarGroupItem(toolbarItem)) {\n outItems.push(toolbarItem);\n continue;\n }\n\n const newChildren = addItemToSpecifiedParentGroup(\n toolbarItem.items,\n groupChildren\n );\n const foundIndices: number[] = [];\n\n groupChildren.forEach((entry, index) => {\n if (entry.parentGroupItemId === toolbarItem.id) {\n foundIndices.push(index);\n }\n });\n\n if (foundIndices.length) {\n // process in reverse order so groupChildren can be reduced as we find matches\n foundIndices\n .sort((a, b) => a - b)\n .reverse()\n .forEach((foundIndex) => {\n newChildren.push(groupChildren[foundIndex]);\n groupChildren.splice(foundIndex);\n });\n }\n\n outItems.push({ ...toolbarItem, items: newChildren });\n }\n return outItems;\n}\n\nfunction cloneGroup(inGroup: ToolbarGroupItem): ToolbarGroupItem {\n const childItems: Array<ToolbarActionItem | ToolbarGroupItem> = [];\n inGroup.items.forEach((item) => {\n if (isToolbarGroupItem(item)) childItems.push(cloneGroup(item));\n else childItems.push(item);\n });\n\n const clonedGroup = { ...inGroup, items: childItems };\n return clonedGroup;\n}\n\nfunction getItemSortValue(item: ToolbarItem) {\n const groupValue = undefined === item.groupPriority ? 0 : item.groupPriority;\n return groupValue * 10000 + item.itemPriority;\n}\n\nfunction sortItems(items: ReadonlyArray<ToolbarItem>): ToolbarItem[] {\n return [...items]\n .sort((a, b) => getItemSortValue(a) - getItemSortValue(b))\n .map((i) => {\n if (isToolbarGroupItem(i)) {\n return { ...i, items: sortItems(i.items) };\n }\n return i;\n });\n}\n\n/**\n * Create a forEach handler that will add every element of an array of ToolbarItems\n * to a list of items that can then be replaced in its proper place, ensuring that\n * the same item, from different list, is not added multiple times.\n * @param items Output list of items\n * @param groupChildren Output list of group children to redistribute.\n * @returns Array<ToolbarItem>.forEach handler.\n */\nfunction addIfNotDuplicate(\n items: ToolbarItem[],\n groupChildren: (ToolbarActionItem | ToolbarGroupItem)[]\n): (value: ToolbarItem) => void {\n return (srcItem: ToolbarItem) => {\n if (-1 === items.findIndex((item) => item.id === srcItem.id)) {\n // if the default item is a group that an addon may insert into copy it so we don't mess with original\n const toolbarItem = isToolbarGroupItem(srcItem)\n ? cloneGroup(srcItem)\n : srcItem;\n if (\n (isToolbarGroupItem(toolbarItem) || isToolbarActionItem(toolbarItem)) &&\n toolbarItem.parentGroupItemId\n )\n groupChildren.push(toolbarItem);\n else items.push(toolbarItem);\n }\n };\n}\n\n/** local function to combine items from Stage and from Extensions */\nfunction combineItems(\n defaultItems: ReadonlyArray<ToolbarItem>,\n addonItems: ReadonlyArray<ToolbarItem>\n): ToolbarItem[] {\n let items: ToolbarItem[] = [];\n const groupChildren: Array<ToolbarActionItem | ToolbarGroupItem> = [];\n\n defaultItems.forEach(addIfNotDuplicate(items, groupChildren));\n addonItems.forEach(addIfNotDuplicate(items, groupChildren));\n\n // if an item from an addon has specified a parent group then try to find it and insert it. If no parent is found, add item at root level.\n if (groupChildren.length) {\n items = addItemToSpecifiedParentGroup(items, groupChildren);\n\n groupChildren.forEach((toolbarItem) => {\n Logger.logWarning(\n \"ToolbarComposer\",\n `Requested Parent Group [${toolbarItem.parentGroupItemId!}] not found, so item [${\n toolbarItem.id\n }] is added directly to toolbar.`\n );\n items.push(toolbarItem);\n });\n }\n\n return sortItems(items);\n}\n\nconst useProximityOpacitySetting = () => {\n const [proximityOpacity, setProximityOpacity] = React.useState(\n UiFramework.visibility.useProximityOpacity // eslint-disable-line @typescript-eslint/no-deprecated\n );\n\n React.useEffect(() => {\n UiFramework.onUiVisibilityChanged.addListener(\n () => setProximityOpacity(UiFramework.visibility.useProximityOpacity) // eslint-disable-line @typescript-eslint/no-deprecated\n );\n }, []);\n\n return proximityOpacity;\n};\n\nconst useSnapWidgetOpacitySetting = () => {\n const [snapWidgetOpacity, setSnapWidgetOpacity] = React.useState(\n UiFramework.visibility.snapWidgetOpacity\n );\n\n React.useEffect(() => {\n UiFramework.onUiVisibilityChanged.addListener(() =>\n setSnapWidgetOpacity(UiFramework.visibility.snapWidgetOpacity)\n );\n }, []);\n\n return snapWidgetOpacity;\n};\n\n/** Properties for the [[ToolbarComposer]] React components\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof ToolbarComposer>`\n */\nexport interface ExtensibleToolbarProps {\n /** Toolbar items to be displayed in addition to the provided toolbar items. */\n items: ToolbarItem[];\n /** Toolbar usage based on which additional toolbar items are added from UI item providers. */\n usage: ToolbarUsage;\n /** Toolbar orientation. */\n orientation: ToolbarOrientation;\n /** Describes the ids of active toolbar items.\n * By default only the toolbar item with id that matches the active `Tool` id is active.\n * @note Property {@link CommonToolbarItem.isActiveCondition} takes precedence when determining the active state of a toolbar item.\n */\n activeItemIds?: string[];\n}\n\n/**\n * Toolbar that is populated and maintained by UI item providers.\n * @note Overrides {@link CommonToolbarItem.isActive} property based on the active tool id, unless {@link ExtensibleToolbarProps.activeItemIds} is specified.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function ToolbarComposer(props: ExtensibleToolbarProps) {\n const { usage, orientation, activeItemIds: activeItemIdsProp } = props;\n\n // process items from addon UI providers\n const addonItems = useActiveStageProvidedToolbarItems(usage, orientation);\n\n const allItems = React.useMemo(() => {\n return combineItems(props.items, addonItems);\n }, [props.items, addonItems]);\n\n const activeToolId = useActiveToolId();\n const activeItemIds = React.useMemo(\n () => activeItemIdsProp ?? (activeToolId ? [activeToolId] : []),\n [activeItemIdsProp, activeToolId]\n );\n const activeConditionalItemIds = useActiveConditionalItemIds(allItems);\n const items = React.useMemo(() => {\n return updateActiveItems(allItems, [\n ...activeItemIds,\n ...activeConditionalItemIds,\n ]);\n }, [allItems, activeItemIds, activeConditionalItemIds]);\n\n const isDragEnabled = React.useContext(ToolbarDragInteractionContext);\n const useProximityOpacity = useProximityOpacitySetting();\n const snapWidgetOpacity = useSnapWidgetOpacitySetting();\n\n const expandsTo = toExpandsTo(orientation, usage);\n const panelAlignment = toPanelAlignment(orientation, usage);\n return (\n <Toolbar\n enableOverflow={true}\n expandsTo={expandsTo}\n panelAlignment={panelAlignment}\n items={items}\n useDragInteraction={isDragEnabled}\n toolbarOpacitySetting={\n (useProximityOpacity || snapWidgetOpacity) &&\n !ProcessDetector.isMobileBrowser\n ? ToolbarOpacitySetting.Proximity\n : ToolbarOpacitySetting.Defaults\n }\n />\n );\n}\n\nfunction toExpandsTo(orientation: ToolbarOrientation, usage: ToolbarUsage) {\n if (orientation === ToolbarOrientation.Vertical) {\n if (usage === ToolbarUsage.ViewNavigation) return Direction.Left;\n return Direction.Right;\n }\n\n return Direction.Bottom;\n}\n\nfunction toPanelAlignment(\n orientation: ToolbarOrientation,\n usage: ToolbarUsage\n) {\n if (\n orientation === ToolbarOrientation.Horizontal &&\n usage === ToolbarUsage.ViewNavigation\n )\n return ToolbarPanelAlignment.End;\n\n return ToolbarPanelAlignment.Start;\n}\n\nfunction useActiveConditionalItemIds(items: ToolbarItem[]) {\n const [activeItemIds, setActiveItemIds] = React.useState<string[]>([]);\n const conditionalItems = React.useMemo(() => {\n const conditionals: ToolbarItem[] = [];\n const stack = [...items];\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (current.isActiveCondition) conditionals.push(current);\n\n if (isToolbarGroupItem(current)) {\n for (const child of current.items) {\n stack.push(child);\n }\n }\n }\n return conditionals;\n }, [items]);\n React.useEffect(() => {\n return SyncUiEventDispatcher.onSyncUiEvent.addListener((args) => {\n const newActiveIds: string[] = [];\n for (const item of conditionalItems) {\n ConditionalBooleanValue.refreshValue(\n item.isActiveCondition,\n args.eventIds\n );\n\n const isActive = ConditionalBooleanValue.getValue(\n item.isActiveCondition\n );\n if (isActive) newActiveIds.push(item.id);\n }\n setActiveItemIds(newActiveIds);\n });\n }, [conditionalItems]);\n React.useEffect(() => {\n const newActiveIds: string[] = [];\n for (const item of conditionalItems) {\n const isActive = ConditionalBooleanValue.getValue(item.isActiveCondition);\n if (isActive) newActiveIds.push(item.id);\n }\n setActiveItemIds(newActiveIds);\n }, [conditionalItems]);\n return activeItemIds;\n}\n\n/** @internal */\nexport function updateActiveItems(\n items: ToolbarItem[],\n activeItemIds: string[]\n) {\n return produce(items, (draft) => {\n // Iterative DFS with ancestor backtracking.\n const stack = draft.map((item) => [item, [] as typeof draft] as const);\n\n while (stack.length > 0) {\n const [current, ancestors] = stack.pop()!;\n\n const isActive = activeItemIds.includes(current.id);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n current.isActive = isActive;\n\n if (isToolbarGroupItem(current)) {\n for (const child of current.items) {\n stack.push([child, [...ancestors, current]]);\n }\n }\n\n if (!isActive) continue;\n\n // Mark ancestors of active item as active.\n for (const ancestor of ancestors) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ancestor.isActive = true;\n }\n }\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolGroup.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/ToolGroup.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ToolGroup.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/ToolGroup.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 \"./ToolGroup.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { OverflowButton } from \"./OverflowButton.js\";\nimport { useOverflow } from \"./useOverflow.js\";\nimport { getChildKey } from \"../../layout/tool-settings/Docked.js\";\nimport { ToolbarContext } from \"./Toolbar.js\";\nimport { Surface } from \"./Surface.js\";\nimport { useSafeContext } from \"../../hooks/useSafeContext.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\ninterface ToolGroupProps extends CommonProps {\n children?: React.ReactNode;\n}\n\ntype Child = ReturnType<typeof React.Children.toArray>[0];\n\n/** @internal */\nexport function ToolGroup({ children, className, ...props }: ToolGroupProps) {\n const { panelAlignment, orientation } = useSafeContext(ToolbarContext);\n const childrenArray = React.Children.toArray(children);\n\n const keyToChildMap = childrenArray.reduce<Map<string, Child>>(\n (acc, child, index) => {\n const childKey = getChildKey(child, index);\n acc.set(childKey, child);\n return acc;\n },\n new Map()\n );\n const childrenKeys = Array.from(keyToChildMap.keys());\n const itemRefs = React.useRef<Map<string, Element>>(new Map());\n const overflowRef = React.useRef<HTMLButtonElement>(null);\n\n const getItemSize = React.useCallback((item: string) => {\n const element = itemRefs.current.get(item);\n if (!element) return { width: 0, height: 0 };\n\n const elementSize = element.getBoundingClientRect();\n\n const separatorSize = getSeparatorSize(element);\n if (!separatorSize) return elementSize;\n\n return {\n width: elementSize.width + separatorSize.width,\n height: elementSize.height + separatorSize.height,\n };\n }, []);\n const getOverflowSize = React.useCallback(() => {\n const element = overflowRef.current;\n if (!element) return { width: 0, height: 0 };\n return element.getBoundingClientRect();\n }, []);\n\n const [containerRef, componentRef, visibleCount, renderOverflow] =\n useOverflow(childrenKeys, orientation, getItemSize, getOverflowSize);\n\n const keyToChildEntries = Array.from(keyToChildMap.entries());\n const visibleChildren = keyToChildEntries.slice(0, visibleCount);\n const overflown = keyToChildEntries.slice(visibleCount);\n return (\n <div\n className={classnames(\n \"uifw-toolbar-group-toolGroup_container\",\n `uifw-${orientation}`,\n `uifw-${panelAlignment}`,\n className\n )}\n ref={containerRef}\n >\n <Surface orientation={orientation} ref={componentRef} {...props}>\n {visibleChildren.map(([item, child]): React.ReactNode => {\n if (!React.isValidElement<{ ref: React.Ref<Element> }>(child))\n return child;\n return React.cloneElement(child, {\n ref: (el: Element | null) => {\n if (!el) {\n itemRefs.current.delete(item);\n return;\n }\n itemRefs.current.set(item, el);\n },\n });\n })}\n {renderOverflow && (\n <OverflowButton ref={overflowRef}>\n {overflown.map(([_, child]): Child => child)}\n </OverflowButton>\n )}\n </Surface>\n </div>\n );\n}\n\n// First item in the group reserves space for the separator to correctly calculate the overflow.\nfunction getSeparatorSize(toolbarItem: Element) {\n const firstInGroup = isFirstInGroup(toolbarItem);\n if (!firstInGroup) return undefined;\n\n // Last group does not have a separator.\n if (isLastGroup(toolbarItem)) return undefined;\n\n const separator = getSeparator(toolbarItem);\n if (!separator) return undefined;\n\n return separator.getBoundingClientRect();\n}\n\n// Returns if the toolbar item is the first in its group.\nfunction isFirstInGroup(toolbarItem: Element) {\n const prev = toolbarItem.previousElementSibling;\n if (prev?.tagName === \"BUTTON\") return false;\n return true;\n}\n\n// Returns if the toolbar item is in the last group of the toolbar.\nfunction isLastGroup(toolbarItem: Element) {\n let el = toolbarItem.nextElementSibling;\n while (el) {\n if (el.tagName === \"BUTTON\" && el.hasAttribute(\"data-item-id\")) {\n return false;\n }\n el = el.nextElementSibling;\n }\n return true;\n}\n\n// Returns the first separator element after the toolbar item, if it exists.\nfunction getSeparator(toolbarItem: Element) {\n let el = toolbarItem.nextElementSibling;\n while (el) {\n if (el.classList.contains(\"uifw-toolbar-newToolbars-separator\")) {\n return el;\n }\n el = el.nextElementSibling;\n }\n return undefined;\n}\n"]}
|
|
@@ -11,17 +11,17 @@ import { useResizeObserver } from "@itwin/core-react/internal";
|
|
|
11
11
|
export const useOverflow = (allItems, orientation, getItemSize, getOverflowSize) => {
|
|
12
12
|
const [visible, setVisible] = React.useState(allItems.length);
|
|
13
13
|
const [calculate, setCalculate] = React.useState(false);
|
|
14
|
-
const containerSizeRef = React.useRef();
|
|
15
|
-
const componentSizeRef = React.useRef();
|
|
14
|
+
const containerSizeRef = React.useRef(undefined);
|
|
15
|
+
const componentSizeRef = React.useRef(undefined);
|
|
16
16
|
const [prevOrientation, setPrevOrientation] = React.useState(orientation);
|
|
17
17
|
if (prevOrientation !== orientation) {
|
|
18
18
|
setPrevOrientation(orientation);
|
|
19
19
|
setCalculate(true);
|
|
20
20
|
}
|
|
21
21
|
React.useLayoutEffect(() => {
|
|
22
|
-
setCalculate(false);
|
|
23
22
|
if (!calculate)
|
|
24
23
|
return;
|
|
24
|
+
setCalculate(false);
|
|
25
25
|
const containerSize = containerSizeRef.current
|
|
26
26
|
? getLength(containerSizeRef.current, orientation)
|
|
27
27
|
: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOverflow.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/useOverflow.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAK/D,gBAAgB;AAChB,MAAM,CAAC,MAAM,WAAW,GAAG,CAIzB,QAA+B,EAC/B,WAAwB,EACxB,WAAwC,EACxC,eAAgC,EAChC,EAAE;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"useOverflow.js","sourceRoot":"","sources":["../../../../src/appui-react/toolbar/new-toolbars/useOverflow.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 { useResizeObserver } from \"@itwin/core-react/internal\";\nimport type { SizeProps } from \"../../utils/SizeProps.js\";\n\ntype Orientation = \"horizontal\" | \"vertical\";\n\n/** @internal */\nexport const useOverflow = <\n TContainer extends HTMLElement,\n TComponent extends HTMLElement\n>(\n allItems: ReadonlyArray<string>,\n orientation: Orientation,\n getItemSize: (item: string) => SizeProps,\n getOverflowSize: () => SizeProps\n) => {\n const [visible, setVisible] = React.useState(allItems.length);\n const [calculate, setCalculate] = React.useState(false);\n const containerSizeRef = React.useRef<SizeProps | undefined>(undefined);\n const componentSizeRef = React.useRef<SizeProps | undefined>(undefined);\n\n const [prevOrientation, setPrevOrientation] = React.useState(orientation);\n if (prevOrientation !== orientation) {\n setPrevOrientation(orientation);\n setCalculate(true);\n }\n\n React.useLayoutEffect(() => {\n if (!calculate) return;\n setCalculate(false);\n\n const containerSize = containerSizeRef.current\n ? getLength(containerSizeRef.current, orientation)\n : undefined;\n if (containerSize === undefined) return;\n\n const componentSize = componentSizeRef.current\n ? getLength(componentSizeRef.current, orientation)\n : undefined;\n if (componentSize === undefined) return;\n\n const itemSizes = allItems.map((item) => {\n const size = getItemSize(item);\n return getLength(size, orientation);\n });\n const overflowSize = getLength(getOverflowSize(), orientation);\n\n const otherSize = itemSizes.reduce((acc, size) => acc + size, 0);\n if (otherSize < containerSize) {\n // No overflow.\n setVisible(itemSizes.length);\n return;\n }\n\n if (overflowSize >= containerSize) {\n // Render only overflow.\n setVisible(0);\n return;\n }\n\n let totalSize = overflowSize;\n let newVisible = 0;\n for (const size of itemSizes) {\n totalSize += size;\n if (totalSize >= containerSize) {\n break;\n }\n newVisible++;\n }\n setVisible(newVisible);\n }, [calculate, allItems, getItemSize, getOverflowSize, orientation]);\n const containerRoRef = useResizeObserver<TContainer>(\n React.useCallback(\n (width: number, height: number) => {\n const length = containerSizeRef.current\n ? getLength(containerSizeRef.current, orientation)\n : undefined;\n containerSizeRef.current = { width, height };\n const newLength = getLength(containerSizeRef.current, orientation);\n\n if (newLength === length) return;\n setCalculate(true);\n },\n [orientation]\n )\n );\n const componentRoRef = useResizeObserver<TComponent>(\n React.useCallback(\n (width: number, height: number) => {\n const length = componentSizeRef.current\n ? getLength(componentSizeRef.current, orientation)\n : undefined;\n componentSizeRef.current = { width, height };\n const newLength = getLength(componentSizeRef.current, orientation);\n\n if (newLength === length) return;\n setCalculate(true);\n },\n [orientation]\n )\n );\n\n const overflow = calculate || visible < allItems.length;\n const visibleItems = calculate ? allItems.length : visible;\n return [containerRoRef, componentRoRef, visibleItems, overflow] as const;\n};\n\nfunction getLength(\n size: { width: number; height: number },\n orientation: Orientation\n) {\n return orientation === \"horizontal\" ? size.width : size.height;\n}\n"]}
|