@itwin/appui-react 5.15.2 → 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.
Files changed (71) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/lib/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  3. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +1 -1
  4. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  5. package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  6. package/lib/appui-react/content/ContentGroup.js +1 -1
  7. package/lib/appui-react/content/ContentGroup.js.map +1 -1
  8. package/lib/appui-react/content/FloatingViewportContent.js +1 -1
  9. package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
  10. package/lib/appui-react/content/split-pane/Pane.d.ts +1 -1
  11. package/lib/appui-react/content/split-pane/Pane.d.ts.map +1 -1
  12. package/lib/appui-react/content/split-pane/Pane.js.map +1 -1
  13. package/lib/appui-react/content/split-pane/SplitPane.js +1 -1
  14. package/lib/appui-react/content/split-pane/SplitPane.js.map +1 -1
  15. package/lib/appui-react/cursor/cursormenu/CursorMenu.js +1 -1
  16. package/lib/appui-react/cursor/cursormenu/CursorMenu.js.map +1 -1
  17. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +1 -1
  18. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  19. package/lib/appui-react/dialog/UiDataProvidedDialog.js +2 -2
  20. package/lib/appui-react/dialog/UiDataProvidedDialog.js.map +1 -1
  21. package/lib/appui-react/framework/FrameworkFrontstages.d.ts +5 -0
  22. package/lib/appui-react/framework/FrameworkFrontstages.d.ts.map +1 -1
  23. package/lib/appui-react/framework/FrameworkFrontstages.js.map +1 -1
  24. package/lib/appui-react/hooks/useLatestRef.d.ts +1 -1
  25. package/lib/appui-react/hooks/useLatestRef.d.ts.map +1 -1
  26. package/lib/appui-react/layout/StandardLayout.scss +0 -1
  27. package/lib/appui-react/layout/tool-settings/Docked.js.map +1 -1
  28. package/lib/appui-react/layout/widget/Tab.js +2 -2
  29. package/lib/appui-react/layout/widget/Tab.js.map +1 -1
  30. package/lib/appui-react/layout/widget/TabBar.js +1 -1
  31. package/lib/appui-react/layout/widget/TabBar.js.map +1 -1
  32. package/lib/appui-react/layout/widget-panels/Grip.js +1 -1
  33. package/lib/appui-react/layout/widget-panels/Grip.js.map +1 -1
  34. package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts +1 -1
  35. package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts.map +1 -1
  36. package/lib/appui-react/layout/widget-panels/useAnimatePanel.js +3 -3
  37. package/lib/appui-react/layout/widget-panels/useAnimatePanel.js.map +1 -1
  38. package/lib/appui-react/messages/MessageRenderer.d.ts.map +1 -1
  39. package/lib/appui-react/messages/MessageRenderer.js +1 -1
  40. package/lib/appui-react/messages/MessageRenderer.js.map +1 -1
  41. package/lib/appui-react/pickers/ListPicker.d.ts.map +1 -1
  42. package/lib/appui-react/pickers/ListPicker.js +1 -1
  43. package/lib/appui-react/pickers/ListPicker.js.map +1 -1
  44. package/lib/appui-react/pickers/ListPicker.scss +10 -0
  45. package/lib/appui-react/settings/quantityformatting/QuantityFormat.d.ts.map +1 -1
  46. package/lib/appui-react/settings/quantityformatting/QuantityFormat.js +1 -1
  47. package/lib/appui-react/settings/quantityformatting/QuantityFormat.js.map +1 -1
  48. package/lib/appui-react/statusbar/popup/Popup.js +1 -1
  49. package/lib/appui-react/statusbar/popup/Popup.js.map +1 -1
  50. package/lib/appui-react/statusbar/popup/StatusBarPopover.js +1 -1
  51. package/lib/appui-react/statusbar/popup/StatusBarPopover.js.map +1 -1
  52. package/lib/appui-react/statusfields/SnapMode.js +1 -1
  53. package/lib/appui-react/statusfields/SnapMode.js.map +1 -1
  54. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  55. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  56. package/lib/appui-react/toolbar/new-toolbars/ToolGroup.js.map +1 -1
  57. package/lib/appui-react/toolbar/new-toolbars/useOverflow.js +2 -2
  58. package/lib/appui-react/toolbar/new-toolbars/useOverflow.js.map +1 -1
  59. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  60. package/lib/appui-react/uiprovider/ComponentGenerator.d.ts.map +1 -1
  61. package/lib/appui-react/uiprovider/ComponentGenerator.js.map +1 -1
  62. package/lib/appui-react/widget-panels/ToolSettings.d.ts +1 -1
  63. package/lib/appui-react/widget-panels/ToolSettings.d.ts.map +1 -1
  64. package/lib/appui-react/widget-panels/ToolSettings.js.map +1 -1
  65. package/lib/cjs/appui-react/layout/StandardLayout.scss +0 -1
  66. package/lib/cjs/appui-react/pickers/ListPicker.scss +10 -0
  67. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  68. package/lib/esm/appui-react/layout/StandardLayout.scss +0 -1
  69. package/lib/esm/appui-react/pickers/ListPicker.scss +10 -0
  70. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.scss +1 -1
  71. package/package.json +16 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Change Log - @itwin/appui-react
2
2
 
3
+ ## 5.16.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a34024b: Increased padding of `ListPicker` button used in a `ViewSelector` component.
8
+ - 51fb78f: Added support for [React v19](https://react.dev/blog/2024/12/05/react-19).
9
+ - a34024b: Moved icon of `SnapModeField` component to the start of the button.
10
+ - d25c51d: Added optional `id` property to `ModalFrontstageInfo` interface to uniquely identify modal frontstages.
11
+ - b35aeee: Removed explicit `background-color` set on internal standard layout element. By default the background color is set by the root `ThemeProvider` of `iTwinUI` and can be further controlled via `themeOptions` prop.
12
+ - a34024b: Removed fixed width of `ToolAssistanceField` component.
13
+ - 7064448: Changed alignment of `StatusBarPopover` and `StatusBarPopup` components to top-start.
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [51fb78f]
18
+ - @itwin/imodel-components-react@5.16.0
19
+ - @itwin/components-react@5.16.0
20
+ - @itwin/core-react@5.16.0
21
+
3
22
  ## 5.15.2
4
23
 
5
24
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawFieldContainer.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 AccuDraw\n */\n\nimport \"./AccuDrawFieldContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Orientation } from \"@itwin/components-react\";\nimport type { ColorDef } from \"@itwin/core-common\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { CompassMode, IModelApp, ItemField } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react/internal\";\nimport { AccuDrawInputField } from \"./AccuDrawInputField.js\";\nimport { FrameworkAccuDraw } from \"./FrameworkAccuDraw.js\";\nimport type { AccuDrawUiSettings } from \"./AccuDrawUiSettings.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { UiStateStorage } from \"../uistate/UiStateStorage.js\";\nimport { SvgDistance } from \"../icons/SvgDistance.js\";\nimport { SvgAngle } from \"../icons/SvgAngle.js\";\n\n/** Properties for [[AccuDrawFieldContainer]] component\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof AccuDrawFieldContainer>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface AccuDrawFieldContainerProps extends CommonProps {\n /** Orientation of the fields */\n orientation: Orientation;\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\n uiSettingsStorage?: UiStateStorage;\n /** @internal */\n showZOverride?: boolean;\n /** Indicates whether the field is displaying a bearing angles. */\n isBearingAngle?: boolean;\n}\n\nlet AccuDrawContainerIndex = 0;\n\nfunction determineShowZ(vp?: ScreenViewport): boolean {\n const showZ = vp !== undefined ? vp.view.is3d() : false;\n return showZ;\n}\n\nconst defaultXLabel = \"X\";\nconst defaultYLabel = \"Y\";\nconst defaultZLabel = \"Z\";\n\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\n const {\n className,\n style,\n orientation,\n uiSettingsStorage,\n showZOverride,\n isBearingAngle = false,\n ...otherProps\n } = props;\n\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\n const xInputRef = React.useRef<HTMLInputElement>(null);\n const yInputRef = React.useRef<HTMLInputElement>(null);\n const zInputRef = React.useRef<HTMLInputElement>(null);\n const angleInputRef = React.useRef<HTMLInputElement>(null);\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\n const focusField = React.useRef<ItemField | undefined>(undefined);\n const [mode, setMode] = React.useState(() => IModelApp.accuDraw.compassMode);\n const [xLock, setXLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.X_Item)\n );\n const [yLock, setYLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Y_Item)\n );\n const [zLock, setZLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Z_Item)\n );\n const [angleLock, setAngleLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item)\n );\n const [distanceLock, setDistanceLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item)\n );\n const [showZ, setShowZ] = React.useState(true);\n\n const [uiSettings, setUiSettings] = React.useState<\n AccuDrawUiSettings | undefined\n >(FrameworkAccuDraw.uiStateStorage);\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(\n () => {\n setUiSettings(FrameworkAccuDraw.uiStateStorage);\n }\n );\n }, []);\n\n const getFieldInput = (field: ItemField) => {\n switch (field) {\n case ItemField.X_Item:\n return getCurrent(xInputRef);\n case ItemField.Y_Item:\n return getCurrent(yInputRef);\n case ItemField.Z_Item:\n return getCurrent(zInputRef);\n case ItemField.ANGLE_Item:\n return getCurrent(angleInputRef);\n case ItemField.DIST_Item:\n return getCurrent(distanceInputRef);\n }\n };\n\n const getInputToFocus = React.useCallback((field: ItemField | undefined) => {\n const fieldInput = field === undefined ? undefined : getFieldInput(field);\n if (fieldInput) {\n if (document.activeElement === fieldInput) return undefined;\n return fieldInput;\n }\n\n const focusedInput = [\n xInputRef,\n yInputRef,\n zInputRef,\n angleInputRef,\n distanceInputRef,\n ].find((inputRef) => document.activeElement === inputRef.current);\n\n // One of AccuDraw input fields is focused already.\n if (focusedInput) return undefined;\n\n // Focus one of fallback fields.\n let fallbackInput = getFieldInput(ItemField.DIST_Item);\n if (fallbackInput) return fallbackInput;\n\n fallbackInput = getFieldInput(ItemField.X_Item);\n return fallbackInput;\n }, []);\n\n // Moves focus to `field` input if not focused OR fallbacks to default field if none of accudraw fields are focused.\n const setFocusToField = React.useCallback(\n (field: ItemField | undefined) => {\n const input = getInputToFocus(field);\n if (!input) return;\n\n input.focus();\n input.select();\n },\n [getInputToFocus]\n );\n\n React.useEffect(() => {\n // Set the focus to the first input field when the component is mounted and when the compass mode changes.\n const itemToFocus =\n mode === CompassMode.Polar ? ItemField.DIST_Item : ItemField.X_Item;\n IModelApp.accuDraw.setFocusItem(itemToFocus);\n setFocusToField(itemToFocus);\n const inputToFocus =\n mode === CompassMode.Rectangular\n ? getFieldInput(ItemField.X_Item)\n : getFieldInput(ItemField.DIST_Item);\n if (!inputToFocus) return;\n const timeoutId = setTimeout(() => {\n // Timeout to force an highlight on the field.\n inputToFocus.focus();\n inputToFocus.select();\n }, 1);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [mode, setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener((args) => {\n switch (args.field) {\n case ItemField.X_Item:\n setXLock(args.lock);\n break;\n case ItemField.Y_Item:\n setYLock(args.lock);\n break;\n case ItemField.Z_Item:\n setZLock(args.lock);\n break;\n case ItemField.ANGLE_Item:\n setAngleLock(args.lock);\n break;\n case ItemField.DIST_Item:\n setDistanceLock(args.lock);\n break;\n }\n });\n }, []);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(\n (args) => {\n focusField.current = args.field;\n setFocusToField(focusField.current);\n }\n );\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(() => {\n setFocusToField(focusField.current);\n });\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(\n (args) => {\n setMode(args.mode);\n }\n );\n }, []);\n\n const handleValueChanged = React.useCallback(\n (field: ItemField, stringValue: string) => {\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\n },\n []\n );\n\n const handleEscPressed = React.useCallback(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n setShowZ(\n showZOverride || determineShowZ(IModelApp.viewManager.selectedView)\n );\n\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setShowZ(determineShowZ(args.current));\n }\n );\n }, [showZOverride]);\n\n const createFieldStyle = (\n inStyle: React.CSSProperties | undefined,\n backgroundColor: ColorDef | string | undefined,\n foregroundColor: ColorDef | string | undefined\n ): React.CSSProperties | undefined => {\n let fieldStyle: React.CSSProperties | undefined;\n let rgbaString = \"\";\n if (inStyle || backgroundColor || foregroundColor) {\n fieldStyle = inStyle ? inStyle : {};\n if (backgroundColor) {\n rgbaString =\n typeof backgroundColor === \"string\"\n ? backgroundColor\n : getCSSColorFromDef(backgroundColor);\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\n }\n if (foregroundColor) {\n rgbaString =\n typeof foregroundColor === \"string\"\n ? foregroundColor\n : getCSSColorFromDef(foregroundColor);\n fieldStyle = { ...fieldStyle, color: rgbaString };\n }\n }\n return fieldStyle;\n };\n\n const xStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.xStyle,\n uiSettings.xBackgroundColor,\n uiSettings.xForegroundColor\n );\n }, [uiSettings]);\n const yStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.yStyle,\n uiSettings.yBackgroundColor,\n uiSettings.yForegroundColor\n );\n }, [uiSettings]);\n const zStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.zStyle,\n uiSettings.zBackgroundColor,\n uiSettings.zForegroundColor\n );\n }, [uiSettings]);\n const angleStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.angleStyle,\n uiSettings.angleBackgroundColor,\n uiSettings.angleForegroundColor\n );\n }, [uiSettings]);\n const distanceStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.distanceStyle,\n uiSettings.distanceBackgroundColor,\n uiSettings.distanceForegroundColor\n );\n }, [uiSettings]);\n const xLabel = uiSettings?.xLabel ?? defaultXLabel;\n const yLabel = uiSettings?.yLabel ?? defaultYLabel;\n const zLabel = uiSettings?.zLabel ?? defaultZLabel;\n const angleLabel = uiSettings?.angleLabel;\n const distanceLabel = uiSettings?.distanceLabel;\n\n const classNames = classnames(\n \"uifw-accudraw-field-container\",\n orientation === Orientation.Vertical ? \"uifw-vertical\" : \"uifw-horizontal\",\n className\n );\n\n const labelCentered =\n xLabel !== undefined &&\n xLabel.length === 1 &&\n yLabel !== undefined &&\n yLabel.length === 1 &&\n zLabel !== undefined &&\n zLabel.length === 1;\n\n return (\n <div className={classNames} style={style} {...otherProps}>\n {mode === CompassMode.Rectangular && (\n <>\n <AccuDrawInputField\n ref={xInputRef}\n isLocked={xLock}\n style={xStyle}\n field={ItemField.X_Item}\n id={`uifw-accudraw-x-${containerIndex}`}\n data-testid=\"uifw-accudraw-x\"\n label={xLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.xIcon}\n icon={uiSettings?.xIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.X_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.Y_Item)\n }\n />\n <AccuDrawInputField\n ref={yInputRef}\n isLocked={yLock}\n style={yStyle}\n field={ItemField.Y_Item}\n id={`uifw-accudraw-y-${containerIndex}`}\n data-testid=\"uifw-accudraw-y\"\n label={yLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.yIcon}\n icon={uiSettings?.yIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Y_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n showZ\n ? IModelApp.accuDraw.setFocusItem(ItemField.Z_Item)\n : IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n {showZ && (\n <AccuDrawInputField\n ref={zInputRef}\n isLocked={zLock}\n style={zStyle}\n field={ItemField.Z_Item}\n id={`uifw-accudraw-z-${containerIndex}`}\n data-testid=\"uifw-accudraw-z\"\n label={zLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.zIcon}\n icon={uiSettings?.zIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Z_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n )}\n </>\n )}\n {mode === CompassMode.Polar && (\n <>\n <AccuDrawInputField\n ref={distanceInputRef}\n isLocked={distanceLock}\n style={distanceStyle}\n field={ItemField.DIST_Item}\n id={`uifw-accudraw-distance-${containerIndex}`}\n data-testid=\"uifw-accudraw-distance\"\n label={distanceLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.distanceIcon ?? <SvgDistance />}\n icon={uiSettings?.distanceIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.DIST_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.ANGLE_Item)\n }\n />\n <AccuDrawInputField\n ref={angleInputRef}\n isLocked={angleLock}\n isBearingAngle={isBearingAngle}\n style={angleStyle}\n field={ItemField.ANGLE_Item}\n id={`uifw-accudraw-angle-${containerIndex}`}\n data-testid=\"uifw-accudraw-angle\"\n label={angleLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.angleIcon ?? <SvgAngle />}\n icon={uiSettings?.angleIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.ANGLE_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.DIST_Item)\n }\n />\n </>\n )}\n </div>\n );\n}\n\nfunction getCurrent<T>(ref: React.RefObject<T>) {\n if (ref.current === null) return undefined;\n return ref.current;\n}\n"]}
1
+ {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../src/appui-react/accudraw/AccuDrawFieldContainer.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 AccuDraw\n */\n\nimport \"./AccuDrawFieldContainer.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Orientation } from \"@itwin/components-react\";\nimport type { ColorDef } from \"@itwin/core-common\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { CompassMode, IModelApp, ItemField } from \"@itwin/core-frontend\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react/internal\";\nimport { AccuDrawInputField } from \"./AccuDrawInputField.js\";\nimport { FrameworkAccuDraw } from \"./FrameworkAccuDraw.js\";\nimport type { AccuDrawUiSettings } from \"./AccuDrawUiSettings.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { UiStateStorage } from \"../uistate/UiStateStorage.js\";\nimport { SvgDistance } from \"../icons/SvgDistance.js\";\nimport { SvgAngle } from \"../icons/SvgAngle.js\";\n\n/** Properties for [[AccuDrawFieldContainer]] component\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof AccuDrawFieldContainer>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface AccuDrawFieldContainerProps extends CommonProps {\n /** Orientation of the fields */\n orientation: Orientation;\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\n uiSettingsStorage?: UiStateStorage;\n /** @internal */\n showZOverride?: boolean;\n /** Indicates whether the field is displaying a bearing angles. */\n isBearingAngle?: boolean;\n}\n\nlet AccuDrawContainerIndex = 0;\n\nfunction determineShowZ(vp?: ScreenViewport): boolean {\n const showZ = vp !== undefined ? vp.view.is3d() : false;\n return showZ;\n}\n\nconst defaultXLabel = \"X\";\nconst defaultYLabel = \"Y\";\nconst defaultZLabel = \"Z\";\n\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\n const {\n className,\n style,\n orientation,\n uiSettingsStorage,\n showZOverride,\n isBearingAngle = false,\n ...otherProps\n } = props;\n\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\n const xInputRef = React.useRef<HTMLInputElement>(null);\n const yInputRef = React.useRef<HTMLInputElement>(null);\n const zInputRef = React.useRef<HTMLInputElement>(null);\n const angleInputRef = React.useRef<HTMLInputElement>(null);\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\n const focusField = React.useRef<ItemField | undefined>(undefined);\n const [mode, setMode] = React.useState(() => IModelApp.accuDraw.compassMode);\n const [xLock, setXLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.X_Item)\n );\n const [yLock, setYLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Y_Item)\n );\n const [zLock, setZLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.Z_Item)\n );\n const [angleLock, setAngleLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item)\n );\n const [distanceLock, setDistanceLock] = React.useState(() =>\n IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item)\n );\n const [showZ, setShowZ] = React.useState(true);\n\n const [uiSettings, setUiSettings] = React.useState<\n AccuDrawUiSettings | undefined\n >(FrameworkAccuDraw.uiStateStorage);\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(\n () => {\n setUiSettings(FrameworkAccuDraw.uiStateStorage);\n }\n );\n }, []);\n\n const getFieldInput = (field: ItemField) => {\n switch (field) {\n case ItemField.X_Item:\n return getCurrent(xInputRef);\n case ItemField.Y_Item:\n return getCurrent(yInputRef);\n case ItemField.Z_Item:\n return getCurrent(zInputRef);\n case ItemField.ANGLE_Item:\n return getCurrent(angleInputRef);\n case ItemField.DIST_Item:\n return getCurrent(distanceInputRef);\n }\n };\n\n const getInputToFocus = React.useCallback((field: ItemField | undefined) => {\n const fieldInput = field === undefined ? undefined : getFieldInput(field);\n if (fieldInput) {\n if (document.activeElement === fieldInput) return undefined;\n return fieldInput;\n }\n\n const focusedInput = [\n xInputRef,\n yInputRef,\n zInputRef,\n angleInputRef,\n distanceInputRef,\n ].find((inputRef) => document.activeElement === inputRef.current);\n\n // One of AccuDraw input fields is focused already.\n if (focusedInput) return undefined;\n\n // Focus one of fallback fields.\n let fallbackInput = getFieldInput(ItemField.DIST_Item);\n if (fallbackInput) return fallbackInput;\n\n fallbackInput = getFieldInput(ItemField.X_Item);\n return fallbackInput;\n }, []);\n\n // Moves focus to `field` input if not focused OR fallbacks to default field if none of accudraw fields are focused.\n const setFocusToField = React.useCallback(\n (field: ItemField | undefined) => {\n const input = getInputToFocus(field);\n if (!input) return;\n\n input.focus();\n input.select();\n },\n [getInputToFocus]\n );\n\n React.useEffect(() => {\n // Set the focus to the first input field when the component is mounted and when the compass mode changes.\n const itemToFocus =\n mode === CompassMode.Polar ? ItemField.DIST_Item : ItemField.X_Item;\n IModelApp.accuDraw.setFocusItem(itemToFocus);\n setFocusToField(itemToFocus);\n const inputToFocus =\n mode === CompassMode.Rectangular\n ? getFieldInput(ItemField.X_Item)\n : getFieldInput(ItemField.DIST_Item);\n if (!inputToFocus) return;\n const timeoutId = setTimeout(() => {\n // Timeout to force an highlight on the field.\n inputToFocus.focus();\n inputToFocus.select();\n }, 1);\n return () => {\n clearTimeout(timeoutId);\n };\n }, [mode, setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener((args) => {\n switch (args.field) {\n case ItemField.X_Item:\n setXLock(args.lock);\n break;\n case ItemField.Y_Item:\n setYLock(args.lock);\n break;\n case ItemField.Z_Item:\n setZLock(args.lock);\n break;\n case ItemField.ANGLE_Item:\n setAngleLock(args.lock);\n break;\n case ItemField.DIST_Item:\n setDistanceLock(args.lock);\n break;\n }\n });\n }, []);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(\n (args) => {\n focusField.current = args.field;\n setFocusToField(focusField.current);\n }\n );\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(() => {\n setFocusToField(focusField.current);\n });\n }, [setFocusToField]);\n\n React.useEffect(() => {\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(\n (args) => {\n setMode(args.mode);\n }\n );\n }, []);\n\n const handleValueChanged = React.useCallback(\n (field: ItemField, stringValue: string) => {\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\n },\n []\n );\n\n const handleEscPressed = React.useCallback(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n setShowZ(\n showZOverride || determineShowZ(IModelApp.viewManager.selectedView)\n );\n\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(\n (args) => {\n setShowZ(determineShowZ(args.current));\n }\n );\n }, [showZOverride]);\n\n const createFieldStyle = (\n inStyle: React.CSSProperties | undefined,\n backgroundColor: ColorDef | string | undefined,\n foregroundColor: ColorDef | string | undefined\n ): React.CSSProperties | undefined => {\n let fieldStyle: React.CSSProperties | undefined;\n let rgbaString = \"\";\n if (inStyle || backgroundColor || foregroundColor) {\n fieldStyle = inStyle ? inStyle : {};\n if (backgroundColor) {\n rgbaString =\n typeof backgroundColor === \"string\"\n ? backgroundColor\n : getCSSColorFromDef(backgroundColor);\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\n }\n if (foregroundColor) {\n rgbaString =\n typeof foregroundColor === \"string\"\n ? foregroundColor\n : getCSSColorFromDef(foregroundColor);\n fieldStyle = { ...fieldStyle, color: rgbaString };\n }\n }\n return fieldStyle;\n };\n\n const xStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.xStyle,\n uiSettings.xBackgroundColor,\n uiSettings.xForegroundColor\n );\n }, [uiSettings]);\n const yStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.yStyle,\n uiSettings.yBackgroundColor,\n uiSettings.yForegroundColor\n );\n }, [uiSettings]);\n const zStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.zStyle,\n uiSettings.zBackgroundColor,\n uiSettings.zForegroundColor\n );\n }, [uiSettings]);\n const angleStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.angleStyle,\n uiSettings.angleBackgroundColor,\n uiSettings.angleForegroundColor\n );\n }, [uiSettings]);\n const distanceStyle = React.useMemo(() => {\n if (!uiSettings) return undefined;\n return createFieldStyle(\n uiSettings.distanceStyle,\n uiSettings.distanceBackgroundColor,\n uiSettings.distanceForegroundColor\n );\n }, [uiSettings]);\n const xLabel = uiSettings?.xLabel ?? defaultXLabel;\n const yLabel = uiSettings?.yLabel ?? defaultYLabel;\n const zLabel = uiSettings?.zLabel ?? defaultZLabel;\n const angleLabel = uiSettings?.angleLabel;\n const distanceLabel = uiSettings?.distanceLabel;\n\n const classNames = classnames(\n \"uifw-accudraw-field-container\",\n orientation === Orientation.Vertical ? \"uifw-vertical\" : \"uifw-horizontal\",\n className\n );\n\n const labelCentered =\n xLabel !== undefined &&\n xLabel.length === 1 &&\n yLabel !== undefined &&\n yLabel.length === 1 &&\n zLabel !== undefined &&\n zLabel.length === 1;\n\n return (\n <div className={classNames} style={style} {...otherProps}>\n {mode === CompassMode.Rectangular && (\n <>\n <AccuDrawInputField\n ref={xInputRef}\n isLocked={xLock}\n style={xStyle}\n field={ItemField.X_Item}\n id={`uifw-accudraw-x-${containerIndex}`}\n data-testid=\"uifw-accudraw-x\"\n label={xLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.xIcon}\n icon={uiSettings?.xIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.X_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.Y_Item)\n }\n />\n <AccuDrawInputField\n ref={yInputRef}\n isLocked={yLock}\n style={yStyle}\n field={ItemField.Y_Item}\n id={`uifw-accudraw-y-${containerIndex}`}\n data-testid=\"uifw-accudraw-y\"\n label={yLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.yIcon}\n icon={uiSettings?.yIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Y_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n showZ\n ? IModelApp.accuDraw.setFocusItem(ItemField.Z_Item)\n : IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n {showZ && (\n <AccuDrawInputField\n ref={zInputRef}\n isLocked={zLock}\n style={zStyle}\n field={ItemField.Z_Item}\n id={`uifw-accudraw-z-${containerIndex}`}\n data-testid=\"uifw-accudraw-z\"\n label={zLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.zIcon}\n icon={uiSettings?.zIconNode}\n labelCentered={labelCentered}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.Z_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.X_Item)\n }\n />\n )}\n </>\n )}\n {mode === CompassMode.Polar && (\n <>\n <AccuDrawInputField\n ref={distanceInputRef}\n isLocked={distanceLock}\n style={distanceStyle}\n field={ItemField.DIST_Item}\n id={`uifw-accudraw-distance-${containerIndex}`}\n data-testid=\"uifw-accudraw-distance\"\n label={distanceLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.distanceIcon ?? <SvgDistance />}\n icon={uiSettings?.distanceIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.DIST_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.ANGLE_Item)\n }\n />\n <AccuDrawInputField\n ref={angleInputRef}\n isLocked={angleLock}\n isBearingAngle={isBearingAngle}\n style={angleStyle}\n field={ItemField.ANGLE_Item}\n id={`uifw-accudraw-angle-${containerIndex}`}\n data-testid=\"uifw-accudraw-angle\"\n label={angleLabel}\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iconSpec={uiSettings?.angleIcon ?? <SvgAngle />}\n icon={uiSettings?.angleIconNode}\n onValueChanged={(stringValue) =>\n handleValueChanged(ItemField.ANGLE_Item, stringValue)\n }\n onEscPressed={handleEscPressed}\n onTabPressed={() =>\n IModelApp.accuDraw.setFocusItem(ItemField.DIST_Item)\n }\n />\n </>\n )}\n </div>\n );\n}\n\nfunction getCurrent<T>(ref: React.RefObject<T | null>) {\n if (ref.current === null) return undefined;\n return ref.current;\n}\n"]}
@@ -8,7 +8,7 @@ import type { StagePanelSection } from "../stagepanels/StagePanelSection.js";
8
8
  import type { StagePanelLocation } from "../stagepanels/StagePanelLocation.js";
9
9
  /** @internal */
10
10
  export declare const ConfigurableUiContext: React.Context<ConfigurableUiContentProps & {
11
- contentElementRef?: React.RefObject<HTMLElement>;
11
+ contentElementRef?: React.RefObject<HTMLElement | null>;
12
12
  widgetActions?: StandardLayoutProps["widgetActions"];
13
13
  toolSettings?: StandardLayoutProps["toolSettings"];
14
14
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurableUiContent.d.ts","sourceRoot":"","sources":["../../../src/appui-react/configurableui/ConfigurableUiContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA+BrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAM/E,gBAAgB;AAChB,eAAO,MAAM,qBAAqB;wBAGV,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;oBAChC,mBAAmB,CAAC,eAAe,CAAC;mBACrC,mBAAmB,CAAC,cAAc,CAAC;EAEjD,CAAC;AAEN;;;GAGG;AAEH,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,kCAAkC;IAClC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8HAA8H;IAC9H,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sIAAsI;IACtI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sHAAsH;IACtH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAElC,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,4BAAkD,CAAC;AAE9E;;GAEG;AAEH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,qBAWtE;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;;WAIG;QACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;KACxC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,qBA0FxD"}
1
+ {"version":3,"file":"ConfigurableUiContent.d.ts","sourceRoot":"","sources":["../../../src/appui-react/configurableui/ConfigurableUiContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,8BAA8B,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA+BrD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAM/E,gBAAgB;AAChB,eAAO,MAAM,qBAAqB;wBAGV,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;oBACvC,mBAAmB,CAAC,eAAe,CAAC;mBACrC,mBAAmB,CAAC,cAAc,CAAC;EAEjD,CAAC;AAEN;;;GAGG;AAEH,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAC7D,kCAAkC;IAClC,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oHAAoH;IACpH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4GAA4G;IAC5G,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8HAA8H;IAC9H,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6GAA6G;IAC7G,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,sIAAsI;IACtI,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,sHAAsH;IACtH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gHAAgH;IAChH,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAElC,gBAAgB;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,4BAAkD,CAAC;AAE9E;;GAEG;AAEH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,qBAWtE;AAED,UAAU,oBAAoB;IAC5B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,YAAY,CAAC,EAAE;QACb;;;;WAIG;QACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;KACxC,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,qBA0FxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigurableUiContent.js","sourceRoot":"","sources":["../../../src/appui-react/configurableui/ConfigurableUiContent.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 ConfigurableUi\n */\n\nimport \"./ConfigurableUiContent.scss\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport {\n IModelConnectionProvider,\n QuantityEditorSpec,\n} from \"@itwin/imodel-components-react\";\nimport { ThemeProvider } from \"@itwin/itwinui-react\";\nimport { CursorInformation } from \"../cursor/CursorInformation.js\";\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu.js\";\nimport { CursorPopupRenderer } from \"../cursor/cursorpopup/CursorPopupManager.js\";\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager.js\";\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager.js\";\nimport { ElementTooltip } from \"../feedback/ElementTooltip.js\";\nimport { KeyboardShortcutMenu } from \"../keyboardshortcut/KeyboardShortcutMenu.js\";\nimport { InputFieldMessage } from \"../messages/InputField.js\";\nimport { PointerMessage } from \"../messages/Pointer.js\";\nimport { PopupRenderer } from \"../popup/PopupManager.js\";\nimport { WidgetPanelsFrontstage } from \"../widget-panels/Frontstage.js\";\nimport { ContentDialogRenderer } from \"../dialog/ContentDialogManager.js\";\nimport { appUi, UiFramework } from \"../UiFramework.js\";\nimport { InternalConfigurableUiManager } from \"./InternalConfigurableUiManager.js\";\nimport { MessageRenderer } from \"../messages/MessageRenderer.js\";\nimport {\n TOOLBAR_OPACITY_DEFAULT,\n WIDGET_OPACITY_DEFAULT,\n} from \"../theme/ThemeId.js\";\nimport { useReduxFrameworkState } from \"../uistate/useReduxFrameworkState.js\";\nimport type { ContentProps } from \"../content/ContentGroup.js\";\nimport { ChildWindowRenderer } from \"../childwindow/ChildWindowRenderer.js\";\nimport { useActiveFrontstageDef } from \"../frontstage/FrontstageDef.js\";\nimport type { WidgetActions } from \"../layout/widget/WidgetActions.js\";\nimport type { StagePanelSection } from \"../stagepanels/StagePanelSection.js\";\nimport type { StagePanelLocation } from \"../stagepanels/StagePanelLocation.js\";\nimport type { Widget } from \"../widgets/Widget.js\";\nimport type { WidgetState } from \"../widgets/WidgetState.js\";\nimport { useActiveIModelConnection } from \"../hooks/useActiveIModelConnection.js\";\nimport { EditorsRegistryProvider } from \"@itwin/components-react\";\n\n/** @internal */\nexport const ConfigurableUiContext = React.createContext<\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n ConfigurableUiContentProps & {\n contentElementRef?: React.RefObject<HTMLElement>;\n widgetActions?: StandardLayoutProps[\"widgetActions\"];\n toolSettings?: StandardLayoutProps[\"toolSettings\"];\n }\n>({});\n\n/** Properties for [[ConfigurableUiContent]]\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof ConfigurableUiContent>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ConfigurableUiContentProps extends CommonProps {\n /** React node of the Backstage */\n appBackstage?: React.ReactNode;\n /** Controls if the view overlay should be displayed. Uses redux store as a fallback. Defaults to `true`.\n * @note Only used by configurable control APIs. See {@link ContentProps.classId}.\n * @deprecated in 4.16.0. View overlay visibility should be controlled by the components used in {@link ContentProps.content}.\n */\n viewOverlay?: boolean;\n /** Describes the opacity of widgets. Uses redux store as a fallback. Defaults to {@link WIDGET_OPACITY_DEFAULT}. */\n widgetOpacity?: number;\n /** Controls if the widget icons should be displayed. Uses redux store as a fallback. Defaults to `true`. */\n widgetIcon?: boolean;\n /** Controls if the unpinned panels should be collapsed automatically. Uses redux store as a fallback. Defaults to `false`. */\n collapsePanels?: boolean;\n /** Controls if the tool settings should be animated. Uses redux store as a fallback. Defaults to `false`. */\n animateToolSettings?: boolean;\n /** Controls if the tool settings label should be set based on activated tool. Uses redux store as a fallback. Defaults to `false`. */\n toolAsToolSettingsLabel?: boolean;\n /** Describes the opacity of toolbars. Uses redux store as a fallback. Defaults to {@link TOOLBAR_OPACITY_DEFAULT}. */\n toolbarOpacity?: number;\n /** Component to wrap all popout widgets and other child windows opened via {@link UiFramework.childWindows}. */\n childWindow?: React.ComponentType;\n\n /** @internal */\n idleTimeout?: number;\n /** @internal */\n intervalTimeout?: number;\n}\n\n/**\n * Allows children to get the bounds or other properties of the wrapper element.\n * @internal\n */\nexport const WrapperContext = React.createContext<HTMLElement>(document.body);\n\n/** The main component of `AppUI` that sets up the configurable UI.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function ConfigurableUiContent(props: ConfigurableUiContentProps) {\n const frontstageDef = useActiveFrontstageDef();\n const layout = frontstageDef?.initialConfig?.layout;\n return (\n <ConfigurableUiContext.Provider\n // eslint-disable-next-line react-hooks/exhaustive-deps\n value={React.useMemo(() => props, [...Object.values(props)])}\n >\n {layout ?? <StandardLayout />}\n </ConfigurableUiContext.Provider>\n );\n}\n\ninterface ToolSettingsLocation {\n section: StagePanelSection;\n location: StagePanelLocation;\n}\n\ninterface StandardLayoutProps {\n /** Overrides widget specific actions displayed in the title bar area.\n * Use {@link WidgetActions} component to customize widget actions.\n * @alpha\n */\n widgetActions?: React.ReactNode;\n /** When enabled keeps the tool settings visible to the end user.\n * This is especially useful when the tool settings is undocked as a regular widget.\n * @alpha\n */\n visibleToolSettings?: boolean;\n /** Tool settings related configuration.\n * @alpha\n */\n toolSettings?: {\n /** The default location of the tool settings. Only used when initializing the layout and ignored when restoring a saved layout.\n * When this is specified, the tool settings will be initialized as a widget, instead of the default docked state.\n * @note Use {@link Widget} for further configuration. I.e. set {@link Widget.defaultState} to {@link WidgetState.Floating} to initialize the tool settings as a floating widget.\n * @alpha\n */\n defaultLocation?: ToolSettingsLocation;\n };\n}\n\n/** The standard widget based layout used as a default layout for all frontstages.\n * @alpha\n */\nexport function StandardLayout(props: StandardLayoutProps) {\n const { widgetActions, visibleToolSettings = false, toolSettings } = props;\n const context = React.useContext(ConfigurableUiContext);\n const {\n appBackstage,\n widgetOpacity,\n toolbarOpacity,\n idleTimeout,\n intervalTimeout,\n } = context;\n\n const contentElementRef = React.useRef<HTMLElement>(null);\n useWidgetOpacity(widgetOpacity);\n useToolbarOpacity(toolbarOpacity);\n const [mainElement, setMainElement] = React.useState<HTMLElement>();\n const [portalContainer, setPortalContainer] = React.useState<HTMLElement>();\n React.useEffect(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n InternalConfigurableUiManager.activityTracker.initialize({\n idleTimeout,\n intervalTimeout,\n });\n return () => {\n InternalConfigurableUiManager.activityTracker.terminate();\n };\n }, [idleTimeout, intervalTimeout]);\n useVisibleToolSettings(visibleToolSettings);\n\n return (\n <ConfigurableUiContext.Provider\n value={React.useMemo(\n () => ({\n ...context,\n contentElementRef,\n widgetActions,\n toolSettings,\n }),\n [context, widgetActions, toolSettings]\n )}\n >\n <main\n role=\"main\"\n id=\"uifw-configurableui-wrapper\"\n className={context.className}\n style={context.style}\n onMouseMove={(e) => {\n const point = new Point(e.pageX, e.pageY);\n CursorInformation.handleMouseMove(point, e.view.document);\n }}\n ref={(el) => setMainElement(el ?? undefined)}\n >\n <WrapperContext.Provider value={mainElement ?? document.body}>\n <ThemeProvider\n style={{ height: \"100%\" }}\n portalContainer={portalContainer}\n >\n <IModelProvider>\n <EditorsRegistryProvider editors={defaultEditors}>\n {appBackstage}\n <WidgetPanelsFrontstage />\n\n <PointerMessage />\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <KeyboardShortcutMenu />\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <InputFieldMessage />\n <CursorPopupMenu />\n <CursorPopupRenderer />\n <PopupRenderer />\n <ElementTooltip />\n <MessageRenderer />\n <ChildWindowRenderer windowManager={appUi.windowManager} />\n <div\n className=\"uifw-configurableui-portalContainer\"\n ref={(instance) => setPortalContainer(instance ?? undefined)}\n >\n <ContentDialogRenderer />\n <ModelessDialogRenderer />\n <ModalDialogRenderer />\n </div>\n </EditorsRegistryProvider>\n </IModelProvider>\n </ThemeProvider>\n </WrapperContext.Provider>\n </main>\n </ConfigurableUiContext.Provider>\n );\n}\n\nconst defaultEditors = [QuantityEditorSpec];\n\nfunction useWidgetOpacity(\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n widgetOpacity: ConfigurableUiContentProps[\"widgetOpacity\"]\n) {\n const reduxWidgetOpacity = useReduxFrameworkState((state) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return state?.configurableUiState.widgetOpacity;\n });\n const opacity = widgetOpacity ?? reduxWidgetOpacity ?? WIDGET_OPACITY_DEFAULT;\n\n React.useEffect(() => {\n const currentWidgetOpacity =\n document.documentElement.style.getPropertyValue(\"--buic-widget-opacity\");\n if (currentWidgetOpacity === opacity.toString()) return;\n document.documentElement.style.setProperty(\n \"--buic-widget-opacity\",\n opacity.toString()\n );\n return () => {\n document.documentElement.style.removeProperty(\"--buic-widget-opacity\");\n };\n }, [opacity]);\n}\n\nfunction useToolbarOpacity(\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n toolbarOpacity: ConfigurableUiContentProps[\"toolbarOpacity\"]\n) {\n const reduxToolbarOpacity = useReduxFrameworkState((state) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return state?.configurableUiState.toolbarOpacity;\n });\n\n const opacity =\n toolbarOpacity ?? reduxToolbarOpacity ?? TOOLBAR_OPACITY_DEFAULT;\n\n React.useEffect(() => {\n const currentToolbarOpacity =\n document.documentElement.style.getPropertyValue(\"--buic-toolbar-opacity\");\n if (currentToolbarOpacity === opacity.toString()) return;\n document.documentElement.style.setProperty(\n \"--buic-toolbar-opacity\",\n opacity.toString()\n );\n return () => {\n document.documentElement.style.removeProperty(\"--buic-toolbar-opacity\");\n };\n }, [opacity]);\n}\n\nfunction useVisibleToolSettings(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n return UiFramework.frontstages.onToolSettingsReloadEvent.addListener(() => {\n const frontstage = UiFramework.frontstages.activeFrontstageDef;\n const toolSettings = frontstage?.toolSettings;\n if (!toolSettings) return;\n toolSettings.show();\n });\n }, [enabled]);\n}\n\nfunction IModelProvider({ children }: React.PropsWithChildren<object>) {\n const imodel = useActiveIModelConnection();\n\n return (\n <IModelConnectionProvider iModelConnection={imodel}>\n {children}\n </IModelConnectionProvider>\n );\n}\n"]}
1
+ {"version":3,"file":"ConfigurableUiContent.js","sourceRoot":"","sources":["../../../src/appui-react/configurableui/ConfigurableUiContent.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 ConfigurableUi\n */\n\nimport \"./ConfigurableUiContent.scss\";\nimport * as React from \"react\";\nimport type { CommonProps } from \"@itwin/core-react\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport {\n IModelConnectionProvider,\n QuantityEditorSpec,\n} from \"@itwin/imodel-components-react\";\nimport { ThemeProvider } from \"@itwin/itwinui-react\";\nimport { CursorInformation } from \"../cursor/CursorInformation.js\";\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu.js\";\nimport { CursorPopupRenderer } from \"../cursor/cursorpopup/CursorPopupManager.js\";\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager.js\";\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager.js\";\nimport { ElementTooltip } from \"../feedback/ElementTooltip.js\";\nimport { KeyboardShortcutMenu } from \"../keyboardshortcut/KeyboardShortcutMenu.js\";\nimport { InputFieldMessage } from \"../messages/InputField.js\";\nimport { PointerMessage } from \"../messages/Pointer.js\";\nimport { PopupRenderer } from \"../popup/PopupManager.js\";\nimport { WidgetPanelsFrontstage } from \"../widget-panels/Frontstage.js\";\nimport { ContentDialogRenderer } from \"../dialog/ContentDialogManager.js\";\nimport { appUi, UiFramework } from \"../UiFramework.js\";\nimport { InternalConfigurableUiManager } from \"./InternalConfigurableUiManager.js\";\nimport { MessageRenderer } from \"../messages/MessageRenderer.js\";\nimport {\n TOOLBAR_OPACITY_DEFAULT,\n WIDGET_OPACITY_DEFAULT,\n} from \"../theme/ThemeId.js\";\nimport { useReduxFrameworkState } from \"../uistate/useReduxFrameworkState.js\";\nimport type { ContentProps } from \"../content/ContentGroup.js\";\nimport { ChildWindowRenderer } from \"../childwindow/ChildWindowRenderer.js\";\nimport { useActiveFrontstageDef } from \"../frontstage/FrontstageDef.js\";\nimport type { WidgetActions } from \"../layout/widget/WidgetActions.js\";\nimport type { StagePanelSection } from \"../stagepanels/StagePanelSection.js\";\nimport type { StagePanelLocation } from \"../stagepanels/StagePanelLocation.js\";\nimport type { Widget } from \"../widgets/Widget.js\";\nimport type { WidgetState } from \"../widgets/WidgetState.js\";\nimport { useActiveIModelConnection } from \"../hooks/useActiveIModelConnection.js\";\nimport { EditorsRegistryProvider } from \"@itwin/components-react\";\n\n/** @internal */\nexport const ConfigurableUiContext = React.createContext<\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n ConfigurableUiContentProps & {\n contentElementRef?: React.RefObject<HTMLElement | null>;\n widgetActions?: StandardLayoutProps[\"widgetActions\"];\n toolSettings?: StandardLayoutProps[\"toolSettings\"];\n }\n>({});\n\n/** Properties for [[ConfigurableUiContent]]\n * @public\n * @deprecated in 4.17.0. Use `React.ComponentProps<typeof ConfigurableUiContent>`\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport interface ConfigurableUiContentProps extends CommonProps {\n /** React node of the Backstage */\n appBackstage?: React.ReactNode;\n /** Controls if the view overlay should be displayed. Uses redux store as a fallback. Defaults to `true`.\n * @note Only used by configurable control APIs. See {@link ContentProps.classId}.\n * @deprecated in 4.16.0. View overlay visibility should be controlled by the components used in {@link ContentProps.content}.\n */\n viewOverlay?: boolean;\n /** Describes the opacity of widgets. Uses redux store as a fallback. Defaults to {@link WIDGET_OPACITY_DEFAULT}. */\n widgetOpacity?: number;\n /** Controls if the widget icons should be displayed. Uses redux store as a fallback. Defaults to `true`. */\n widgetIcon?: boolean;\n /** Controls if the unpinned panels should be collapsed automatically. Uses redux store as a fallback. Defaults to `false`. */\n collapsePanels?: boolean;\n /** Controls if the tool settings should be animated. Uses redux store as a fallback. Defaults to `false`. */\n animateToolSettings?: boolean;\n /** Controls if the tool settings label should be set based on activated tool. Uses redux store as a fallback. Defaults to `false`. */\n toolAsToolSettingsLabel?: boolean;\n /** Describes the opacity of toolbars. Uses redux store as a fallback. Defaults to {@link TOOLBAR_OPACITY_DEFAULT}. */\n toolbarOpacity?: number;\n /** Component to wrap all popout widgets and other child windows opened via {@link UiFramework.childWindows}. */\n childWindow?: React.ComponentType;\n\n /** @internal */\n idleTimeout?: number;\n /** @internal */\n intervalTimeout?: number;\n}\n\n/**\n * Allows children to get the bounds or other properties of the wrapper element.\n * @internal\n */\nexport const WrapperContext = React.createContext<HTMLElement>(document.body);\n\n/** The main component of `AppUI` that sets up the configurable UI.\n * @public\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function ConfigurableUiContent(props: ConfigurableUiContentProps) {\n const frontstageDef = useActiveFrontstageDef();\n const layout = frontstageDef?.initialConfig?.layout;\n return (\n <ConfigurableUiContext.Provider\n // eslint-disable-next-line react-hooks/exhaustive-deps\n value={React.useMemo(() => props, [...Object.values(props)])}\n >\n {layout ?? <StandardLayout />}\n </ConfigurableUiContext.Provider>\n );\n}\n\ninterface ToolSettingsLocation {\n section: StagePanelSection;\n location: StagePanelLocation;\n}\n\ninterface StandardLayoutProps {\n /** Overrides widget specific actions displayed in the title bar area.\n * Use {@link WidgetActions} component to customize widget actions.\n * @alpha\n */\n widgetActions?: React.ReactNode;\n /** When enabled keeps the tool settings visible to the end user.\n * This is especially useful when the tool settings is undocked as a regular widget.\n * @alpha\n */\n visibleToolSettings?: boolean;\n /** Tool settings related configuration.\n * @alpha\n */\n toolSettings?: {\n /** The default location of the tool settings. Only used when initializing the layout and ignored when restoring a saved layout.\n * When this is specified, the tool settings will be initialized as a widget, instead of the default docked state.\n * @note Use {@link Widget} for further configuration. I.e. set {@link Widget.defaultState} to {@link WidgetState.Floating} to initialize the tool settings as a floating widget.\n * @alpha\n */\n defaultLocation?: ToolSettingsLocation;\n };\n}\n\n/** The standard widget based layout used as a default layout for all frontstages.\n * @alpha\n */\nexport function StandardLayout(props: StandardLayoutProps) {\n const { widgetActions, visibleToolSettings = false, toolSettings } = props;\n const context = React.useContext(ConfigurableUiContext);\n const {\n appBackstage,\n widgetOpacity,\n toolbarOpacity,\n idleTimeout,\n intervalTimeout,\n } = context;\n\n const contentElementRef = React.useRef<HTMLElement>(null);\n useWidgetOpacity(widgetOpacity);\n useToolbarOpacity(toolbarOpacity);\n const [mainElement, setMainElement] = React.useState<HTMLElement>();\n const [portalContainer, setPortalContainer] = React.useState<HTMLElement>();\n React.useEffect(() => {\n UiFramework.keyboardShortcuts.setFocusToHome();\n }, []);\n\n React.useEffect(() => {\n InternalConfigurableUiManager.activityTracker.initialize({\n idleTimeout,\n intervalTimeout,\n });\n return () => {\n InternalConfigurableUiManager.activityTracker.terminate();\n };\n }, [idleTimeout, intervalTimeout]);\n useVisibleToolSettings(visibleToolSettings);\n\n return (\n <ConfigurableUiContext.Provider\n value={React.useMemo(\n () => ({\n ...context,\n contentElementRef,\n widgetActions,\n toolSettings,\n }),\n [context, widgetActions, toolSettings]\n )}\n >\n <main\n role=\"main\"\n id=\"uifw-configurableui-wrapper\"\n className={context.className}\n style={context.style}\n onMouseMove={(e) => {\n const point = new Point(e.pageX, e.pageY);\n CursorInformation.handleMouseMove(point, e.view.document);\n }}\n ref={(el) => setMainElement(el ?? undefined)}\n >\n <WrapperContext.Provider value={mainElement ?? document.body}>\n <ThemeProvider\n style={{ height: \"100%\" }}\n portalContainer={portalContainer}\n >\n <IModelProvider>\n <EditorsRegistryProvider editors={defaultEditors}>\n {appBackstage}\n <WidgetPanelsFrontstage />\n\n <PointerMessage />\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <KeyboardShortcutMenu />\n {/* eslint-disable-next-line @typescript-eslint/no-deprecated */}\n <InputFieldMessage />\n <CursorPopupMenu />\n <CursorPopupRenderer />\n <PopupRenderer />\n <ElementTooltip />\n <MessageRenderer />\n <ChildWindowRenderer windowManager={appUi.windowManager} />\n <div\n className=\"uifw-configurableui-portalContainer\"\n ref={(instance) => setPortalContainer(instance ?? undefined)}\n >\n <ContentDialogRenderer />\n <ModelessDialogRenderer />\n <ModalDialogRenderer />\n </div>\n </EditorsRegistryProvider>\n </IModelProvider>\n </ThemeProvider>\n </WrapperContext.Provider>\n </main>\n </ConfigurableUiContext.Provider>\n );\n}\n\nconst defaultEditors = [QuantityEditorSpec];\n\nfunction useWidgetOpacity(\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n widgetOpacity: ConfigurableUiContentProps[\"widgetOpacity\"]\n) {\n const reduxWidgetOpacity = useReduxFrameworkState((state) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return state?.configurableUiState.widgetOpacity;\n });\n const opacity = widgetOpacity ?? reduxWidgetOpacity ?? WIDGET_OPACITY_DEFAULT;\n\n React.useEffect(() => {\n const currentWidgetOpacity =\n document.documentElement.style.getPropertyValue(\"--buic-widget-opacity\");\n if (currentWidgetOpacity === opacity.toString()) return;\n document.documentElement.style.setProperty(\n \"--buic-widget-opacity\",\n opacity.toString()\n );\n return () => {\n document.documentElement.style.removeProperty(\"--buic-widget-opacity\");\n };\n }, [opacity]);\n}\n\nfunction useToolbarOpacity(\n /* eslint-disable-next-line @typescript-eslint/no-deprecated */\n toolbarOpacity: ConfigurableUiContentProps[\"toolbarOpacity\"]\n) {\n const reduxToolbarOpacity = useReduxFrameworkState((state) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return state?.configurableUiState.toolbarOpacity;\n });\n\n const opacity =\n toolbarOpacity ?? reduxToolbarOpacity ?? TOOLBAR_OPACITY_DEFAULT;\n\n React.useEffect(() => {\n const currentToolbarOpacity =\n document.documentElement.style.getPropertyValue(\"--buic-toolbar-opacity\");\n if (currentToolbarOpacity === opacity.toString()) return;\n document.documentElement.style.setProperty(\n \"--buic-toolbar-opacity\",\n opacity.toString()\n );\n return () => {\n document.documentElement.style.removeProperty(\"--buic-toolbar-opacity\");\n };\n }, [opacity]);\n}\n\nfunction useVisibleToolSettings(enabled: boolean) {\n React.useEffect(() => {\n if (!enabled) return;\n return UiFramework.frontstages.onToolSettingsReloadEvent.addListener(() => {\n const frontstage = UiFramework.frontstages.activeFrontstageDef;\n const toolSettings = frontstage?.toolSettings;\n if (!toolSettings) return;\n toolSettings.show();\n });\n }, [enabled]);\n}\n\nfunction IModelProvider({ children }: React.PropsWithChildren<object>) {\n const imodel = useActiveIModelConnection();\n\n return (\n <IModelConnectionProvider iModelConnection={imodel}>\n {children}\n </IModelConnectionProvider>\n );\n}\n"]}
@@ -167,7 +167,7 @@ export class ContentGroup {
167
167
  */
168
168
  getControlFromElement(node) {
169
169
  if (this._contentSetMap.size === 0)
170
- this.getContentNodes();
170
+ void this.getContentNodes();
171
171
  if (node && node.key) {
172
172
  const key = node.key;
173
173
  // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id
@@ -1 +1 @@
1
- {"version":3,"file":"ContentGroup.js","sourceRoot":"","sources":["../../../src/appui-react/content/ContentGroup.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 ContentView\n */\n\nimport type * as React from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport type { ConfigurableUiControlConstructor } from \"../configurableui/ConfigurableUiControl.js\";\nimport {\n ConfigurableCreateInfo,\n ConfigurableUiControlType,\n} from \"../configurableui/ConfigurableUiControl.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { ContentControl } from \"./ContentControl.js\";\nimport { InternalConfigurableUiManager } from \"../configurableui/InternalConfigurableUiManager.js\";\nimport type { Frontstage } from \"../frontstage/Frontstage.js\";\nimport type { ContentLayoutProps } from \"./ContentLayoutProps.js\";\nimport type { ConditionalValue } from \"../shared/ConditionalValue.js\";\n\n/** Properties for content displayed in a content view\n * @public\n */\nexport interface ContentProps {\n /** A unique id for the Content View within the group. */\n id: string;\n /** The class name or [[ConfigurableUiControlConstructor]] of the content control.\n * @deprecated in 4.16.0. Use {@link ContentProps.content} instead and specify an empty string for this property. This will be made optional in 5.0.0.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n classId: string | ConfigurableUiControlConstructor;\n /** Optional application data passed down to the content view.\n * @deprecated in 4.16.0. Use {@link ContentProps.content} instead.\n */\n applicationData?: any;\n /** Content to be displayed in the content view. */\n content?: React.ReactNode;\n /** Describes if the content should display the active strip.\n * If `undefined` the strip will be displayed only if this content is active and multiple contents are available.\n * Floating content controls (deprecated API) and `ContentOverlay` components are considered as content nodes.\n */\n renderActiveStrip?: boolean | ConditionalValue<boolean | undefined>;\n}\n\n/** Properties for a [[ContentGroup]]\n * @public\n */\nexport interface ContentGroupProps {\n /** An id for the [[ContentGroup]]. This id is used to locate a ContentGroup and it also can be used by an ContentGroupProvider to save/restore content settings */\n id: string;\n /** Content Layout Id or complete set of [[ContentLayoutProps]] */\n layout: ContentLayoutProps;\n /** A collection of [[ContentProps]], one for each content view */\n contents: ContentProps[];\n}\n\n/** Abstract class that can be implemented and specified by frontstage to dynamically construct\n * content group just prior to activating the frontstage.\n * @public\n */\nexport abstract class ContentGroupProvider {\n /** Return the contentGroup based on the `Frontstage`. */\n public abstract contentGroup(frontstage: Frontstage): Promise<ContentGroup>;\n\n /** Allow provider to update any data stored in ContentGroupProps. Typically this may\n * be to remove applicationData entries.\n */\n public prepareToSaveProps(contentGroupProps: ContentGroupProps) {\n return contentGroupProps;\n }\n\n /** Allow provider to update any stored ContentGroupProps be it is to be used to create ContentGroup and layouts.\n * Typically this may be to add applicationData to content entries.\n */\n public applyUpdatesToSavedProps(contentGroupProps: ContentGroupProps) {\n return contentGroupProps;\n }\n\n /** Allow provider to save any content group data before the stage deactivated. */\n public async onFrontstageDeactivated() {}\n}\n\n/** Callback to process content properties during toJSON method\n * @public\n */\nexport type ContentCallback = (content: ContentProps) => void;\n\n/** ContentGroup class. Content Groups define content displayed in content views that are laid out using a [[ContentLayout]].\n * @public\n */\nexport class ContentGroup {\n private static _sId = 0;\n public groupId: string;\n public propsId: string;\n public layout: ContentLayoutProps;\n public contentPropsList: ContentProps[];\n\n public get id() {\n return this.groupId;\n }\n\n constructor(contentGroupProps: ContentGroupProps) {\n this.layout = { ...contentGroupProps.layout };\n this.propsId = contentGroupProps.id;\n // ensure we have a unique groupId for each instance of a content group - this will be used to generate a key in the React controls\n this.groupId = `[${contentGroupProps.id}-${ContentGroup._sId++}]`;\n this.contentPropsList = contentGroupProps.contents;\n }\n\n /** Gets the React nodes representing the content views in this content group.\n * @deprecated in 4.16.0. Use {@link ContentGroup.contentPropsList} instead.\n */\n public getContentNodes(): React.ReactNode[] {\n const contentNodes: React.ReactNode[] = new Array<React.ReactNode>();\n\n this._contentSetMap.clear();\n\n this.contentPropsList.forEach((contentProps, index) => {\n if (contentProps.content) {\n contentNodes.push(contentProps.content);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const control = this.getContentControl(contentProps, index);\n if (!control) return;\n\n contentNodes.push(control.reactNode);\n this._contentSetMap.set(control.controlId, control);\n });\n\n return contentNodes;\n }\n\n /** Refreshes the React nodes representing the Content Views in this Content Group. */\n public refreshContentNodes() {\n this._contentSetMap.clear();\n }\n\n /** Called when Frontstage is deactivated. */\n public onFrontstageDeactivated(): void {\n this.clearContentControls();\n }\n\n /** Called when Frontstage is ready. */\n public onFrontstageReady(): void {}\n\n /** Clears the map of content controls. */\n public clearContentControls(): void {\n this._contentControls.clear();\n }\n\n /** Creates [[ContentGroupProps]] for JSON purposes.\n * @public\n */\n public toJSON(contentCallback?: ContentCallback): ContentGroupProps {\n const contentGroupProps: ContentGroupProps = {\n id: this.propsId,\n layout: this.layout,\n contents: this.contentPropsList,\n };\n\n contentGroupProps.contents.forEach((content, index) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (typeof content.classId !== \"string\") {\n const classId = InternalConfigurableUiManager.getConstructorClassId(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n content.classId\n );\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (classId !== undefined) content.classId = classId;\n else\n throw new UiError( // eslint-disable-line @typescript-eslint/no-deprecated\n UiFramework.loggerCategory(\"ContentGroup\"),\n `toJSON: ContentControl at index ${index} is NOT registered with a string id`\n );\n\n if (typeof contentCallback === \"function\") contentCallback(content);\n }\n });\n\n return contentGroupProps;\n }\n\n /** Gets Viewports from Viewport Content Controls.\n * @internal\n */\n public getViewports(): Array<ScreenViewport | undefined> {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const contentControls = this.getContentControls();\n const viewports = new Array<ScreenViewport | undefined>();\n\n contentControls.forEach((control) => {\n if (control.isViewport && control.viewport) {\n viewports.push(control.viewport);\n } else {\n viewports.push(undefined);\n }\n });\n\n return viewports;\n }\n\n /* eslint-disable @typescript-eslint/no-deprecated */\n\n private _contentControls = new Map<string, ContentControl>();\n private _contentSetMap = new Map<string, ContentControl>();\n\n /** Gets a [[ContentControl]] from the Content Group based on its [[ContentProps]].\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControl(\n contentProps: ContentProps,\n _index: number\n ): ContentControl | undefined {\n // ensure we have a unique control Id for each instance of a content control - this will be used as a key for the React control - see `ContentControl.getKeyedReactNode`\n const id = `${contentProps.id}::${this.groupId}`;\n let contentControl: ContentControl | undefined;\n\n if (!this._contentControls.get(contentProps.id)) {\n let usedClassId: string = \"\";\n\n if (typeof contentProps.classId === \"string\") {\n if (\n !this._contentControls.get(contentProps.id) &&\n UiFramework.controls.isRegistered(contentProps.classId)\n ) {\n contentControl = UiFramework.controls.create(\n contentProps.classId,\n id,\n contentProps.applicationData,\n contentProps.id\n ) as ContentControl;\n usedClassId = contentProps.classId;\n }\n } else {\n const info = new ConfigurableCreateInfo(\n contentProps.classId.name,\n id,\n contentProps.id\n );\n contentControl = new contentProps.classId(\n info,\n contentProps.applicationData\n ) as ContentControl;\n usedClassId = contentProps.classId.name;\n }\n\n if (contentControl) {\n if (\n contentControl.getType() !== ConfigurableUiControlType.Content &&\n contentControl.getType() !== ConfigurableUiControlType.Viewport\n ) {\n throw new UiError(\n UiFramework.loggerCategory(\"ContentGroup\"),\n `getContentControl error: '${usedClassId}' is NOT a ContentControl or ViewportContentControl`\n );\n }\n contentControl.initialize();\n this._contentControls.set(contentProps.id, contentControl);\n }\n }\n\n return this._contentControls.get(contentProps.id);\n }\n\n /** Gets a [[ContentControl]] from the Content Group with a given ID.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControlById(id: string): ContentControl | undefined {\n return this._contentControls.get(id);\n }\n\n /** Gets the [[ContentControl]] associated with a given React node representing a Content View.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getControlFromElement(\n node: React.ReactNode\n ): ContentControl | undefined {\n if (this._contentSetMap.size === 0) this.getContentNodes();\n\n if (node && (node as React.ReactElement<any>).key) {\n const key = (node as React.ReactElement<any>).key as string;\n // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id\n const controlId = key.split(\"::\", 1)[0];\n return this._contentSetMap.get(controlId);\n }\n\n return undefined;\n }\n\n /** Gets an array of the content controls representing the Content Views.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControls(): ContentControl[] {\n const contentControls: ContentControl[] = new Array<ContentControl>();\n\n this.contentPropsList.forEach((contentProps, index) => {\n const control = this.getContentControl(contentProps, index);\n if (!control) return;\n\n contentControls.push(control);\n });\n\n return contentControls;\n }\n\n /* eslint-enable @typescript-eslint/no-deprecated */\n}\n"]}
1
+ {"version":3,"file":"ContentGroup.js","sourceRoot":"","sources":["../../../src/appui-react/content/ContentGroup.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 ContentView\n */\n\nimport type * as React from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport type { ConfigurableUiControlConstructor } from \"../configurableui/ConfigurableUiControl.js\";\nimport {\n ConfigurableCreateInfo,\n ConfigurableUiControlType,\n} from \"../configurableui/ConfigurableUiControl.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport type { ContentControl } from \"./ContentControl.js\";\nimport { InternalConfigurableUiManager } from \"../configurableui/InternalConfigurableUiManager.js\";\nimport type { Frontstage } from \"../frontstage/Frontstage.js\";\nimport type { ContentLayoutProps } from \"./ContentLayoutProps.js\";\nimport type { ConditionalValue } from \"../shared/ConditionalValue.js\";\n\n/** Properties for content displayed in a content view\n * @public\n */\nexport interface ContentProps {\n /** A unique id for the Content View within the group. */\n id: string;\n /** The class name or [[ConfigurableUiControlConstructor]] of the content control.\n * @deprecated in 4.16.0. Use {@link ContentProps.content} instead and specify an empty string for this property. This will be made optional in 5.0.0.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n classId: string | ConfigurableUiControlConstructor;\n /** Optional application data passed down to the content view.\n * @deprecated in 4.16.0. Use {@link ContentProps.content} instead.\n */\n applicationData?: any;\n /** Content to be displayed in the content view. */\n content?: React.ReactNode;\n /** Describes if the content should display the active strip.\n * If `undefined` the strip will be displayed only if this content is active and multiple contents are available.\n * Floating content controls (deprecated API) and `ContentOverlay` components are considered as content nodes.\n */\n renderActiveStrip?: boolean | ConditionalValue<boolean | undefined>;\n}\n\n/** Properties for a [[ContentGroup]]\n * @public\n */\nexport interface ContentGroupProps {\n /** An id for the [[ContentGroup]]. This id is used to locate a ContentGroup and it also can be used by an ContentGroupProvider to save/restore content settings */\n id: string;\n /** Content Layout Id or complete set of [[ContentLayoutProps]] */\n layout: ContentLayoutProps;\n /** A collection of [[ContentProps]], one for each content view */\n contents: ContentProps[];\n}\n\n/** Abstract class that can be implemented and specified by frontstage to dynamically construct\n * content group just prior to activating the frontstage.\n * @public\n */\nexport abstract class ContentGroupProvider {\n /** Return the contentGroup based on the `Frontstage`. */\n public abstract contentGroup(frontstage: Frontstage): Promise<ContentGroup>;\n\n /** Allow provider to update any data stored in ContentGroupProps. Typically this may\n * be to remove applicationData entries.\n */\n public prepareToSaveProps(contentGroupProps: ContentGroupProps) {\n return contentGroupProps;\n }\n\n /** Allow provider to update any stored ContentGroupProps be it is to be used to create ContentGroup and layouts.\n * Typically this may be to add applicationData to content entries.\n */\n public applyUpdatesToSavedProps(contentGroupProps: ContentGroupProps) {\n return contentGroupProps;\n }\n\n /** Allow provider to save any content group data before the stage deactivated. */\n public async onFrontstageDeactivated() {}\n}\n\n/** Callback to process content properties during toJSON method\n * @public\n */\nexport type ContentCallback = (content: ContentProps) => void;\n\n/** ContentGroup class. Content Groups define content displayed in content views that are laid out using a [[ContentLayout]].\n * @public\n */\nexport class ContentGroup {\n private static _sId = 0;\n public groupId: string;\n public propsId: string;\n public layout: ContentLayoutProps;\n public contentPropsList: ContentProps[];\n\n public get id() {\n return this.groupId;\n }\n\n constructor(contentGroupProps: ContentGroupProps) {\n this.layout = { ...contentGroupProps.layout };\n this.propsId = contentGroupProps.id;\n // ensure we have a unique groupId for each instance of a content group - this will be used to generate a key in the React controls\n this.groupId = `[${contentGroupProps.id}-${ContentGroup._sId++}]`;\n this.contentPropsList = contentGroupProps.contents;\n }\n\n /** Gets the React nodes representing the content views in this content group.\n * @deprecated in 4.16.0. Use {@link ContentGroup.contentPropsList} instead.\n */\n public getContentNodes(): React.ReactNode[] {\n const contentNodes: React.ReactNode[] = new Array<React.ReactNode>();\n\n this._contentSetMap.clear();\n\n this.contentPropsList.forEach((contentProps, index) => {\n if (contentProps.content) {\n contentNodes.push(contentProps.content);\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const control = this.getContentControl(contentProps, index);\n if (!control) return;\n\n contentNodes.push(control.reactNode);\n this._contentSetMap.set(control.controlId, control);\n });\n\n return contentNodes;\n }\n\n /** Refreshes the React nodes representing the Content Views in this Content Group. */\n public refreshContentNodes() {\n this._contentSetMap.clear();\n }\n\n /** Called when Frontstage is deactivated. */\n public onFrontstageDeactivated(): void {\n this.clearContentControls();\n }\n\n /** Called when Frontstage is ready. */\n public onFrontstageReady(): void {}\n\n /** Clears the map of content controls. */\n public clearContentControls(): void {\n this._contentControls.clear();\n }\n\n /** Creates [[ContentGroupProps]] for JSON purposes.\n * @public\n */\n public toJSON(contentCallback?: ContentCallback): ContentGroupProps {\n const contentGroupProps: ContentGroupProps = {\n id: this.propsId,\n layout: this.layout,\n contents: this.contentPropsList,\n };\n\n contentGroupProps.contents.forEach((content, index) => {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (typeof content.classId !== \"string\") {\n const classId = InternalConfigurableUiManager.getConstructorClassId(\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n content.classId\n );\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (classId !== undefined) content.classId = classId;\n else\n throw new UiError( // eslint-disable-line @typescript-eslint/no-deprecated\n UiFramework.loggerCategory(\"ContentGroup\"),\n `toJSON: ContentControl at index ${index} is NOT registered with a string id`\n );\n\n if (typeof contentCallback === \"function\") contentCallback(content);\n }\n });\n\n return contentGroupProps;\n }\n\n /** Gets Viewports from Viewport Content Controls.\n * @internal\n */\n public getViewports(): Array<ScreenViewport | undefined> {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const contentControls = this.getContentControls();\n const viewports = new Array<ScreenViewport | undefined>();\n\n contentControls.forEach((control) => {\n if (control.isViewport && control.viewport) {\n viewports.push(control.viewport);\n } else {\n viewports.push(undefined);\n }\n });\n\n return viewports;\n }\n\n /* eslint-disable @typescript-eslint/no-deprecated */\n\n private _contentControls = new Map<string, ContentControl>();\n private _contentSetMap = new Map<string, ContentControl>();\n\n /** Gets a [[ContentControl]] from the Content Group based on its [[ContentProps]].\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControl(\n contentProps: ContentProps,\n _index: number\n ): ContentControl | undefined {\n // ensure we have a unique control Id for each instance of a content control - this will be used as a key for the React control - see `ContentControl.getKeyedReactNode`\n const id = `${contentProps.id}::${this.groupId}`;\n let contentControl: ContentControl | undefined;\n\n if (!this._contentControls.get(contentProps.id)) {\n let usedClassId: string = \"\";\n\n if (typeof contentProps.classId === \"string\") {\n if (\n !this._contentControls.get(contentProps.id) &&\n UiFramework.controls.isRegistered(contentProps.classId)\n ) {\n contentControl = UiFramework.controls.create(\n contentProps.classId,\n id,\n contentProps.applicationData,\n contentProps.id\n ) as ContentControl;\n usedClassId = contentProps.classId;\n }\n } else {\n const info = new ConfigurableCreateInfo(\n contentProps.classId.name,\n id,\n contentProps.id\n );\n contentControl = new contentProps.classId(\n info,\n contentProps.applicationData\n ) as ContentControl;\n usedClassId = contentProps.classId.name;\n }\n\n if (contentControl) {\n if (\n contentControl.getType() !== ConfigurableUiControlType.Content &&\n contentControl.getType() !== ConfigurableUiControlType.Viewport\n ) {\n throw new UiError(\n UiFramework.loggerCategory(\"ContentGroup\"),\n `getContentControl error: '${usedClassId}' is NOT a ContentControl or ViewportContentControl`\n );\n }\n contentControl.initialize();\n this._contentControls.set(contentProps.id, contentControl);\n }\n }\n\n return this._contentControls.get(contentProps.id);\n }\n\n /** Gets a [[ContentControl]] from the Content Group with a given ID.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControlById(id: string): ContentControl | undefined {\n return this._contentControls.get(id);\n }\n\n /** Gets the [[ContentControl]] associated with a given React node representing a Content View.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getControlFromElement(\n node: React.ReactNode\n ): ContentControl | undefined {\n if (this._contentSetMap.size === 0) void this.getContentNodes();\n\n if (node && (node as React.ReactElement<any>).key) {\n const key = (node as React.ReactElement<any>).key as string;\n // key has format `${contentProps.id}::${this.groupId}` which is stored as unique id\n const controlId = key.split(\"::\", 1)[0];\n return this._contentSetMap.get(controlId);\n }\n\n return undefined;\n }\n\n /** Gets an array of the content controls representing the Content Views.\n * @deprecated in 4.16.0. Uses a deprecated class {@link ContentControl}.\n */\n public getContentControls(): ContentControl[] {\n const contentControls: ContentControl[] = new Array<ContentControl>();\n\n this.contentPropsList.forEach((contentProps, index) => {\n const control = this.getContentControl(contentProps, index);\n if (!control) return;\n\n contentControls.push(control);\n });\n\n return contentControls;\n }\n\n /* eslint-enable @typescript-eslint/no-deprecated */\n}\n"]}
@@ -35,7 +35,7 @@ export function FloatingViewportContentWrapper({ children, }) {
35
35
  export function useFloatingViewport(args) {
36
36
  const { contentId, initialViewState, onContextMenu, viewportRef } = args;
37
37
  const [viewport, setViewport] = React.useState();
38
- const contentControl = React.useRef();
38
+ const contentControl = React.useRef(undefined);
39
39
  const viewState = React.useMemo(() => typeof initialViewState === "function"
40
40
  ? initialViewState()
41
41
  : initialViewState, [initialViewState]);
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingViewportContent.js","sourceRoot":"","sources":["../../../src/appui-react/content/FloatingViewportContent.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 ContentView\n */\n\nimport * as React from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type { ViewStateProp } from \"@itwin/imodel-components-react\";\nimport { ViewportComponent } from \"@itwin/imodel-components-react\";\nimport { FloatingViewportContentControl } from \"./ViewportContentControl.js\";\nimport { ContentWrapper } from \"./ContentLayout.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { useRefs } from \"@itwin/core-react/internal\";\nimport type { ContentOverlay } from \"./ContentOverlay.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/**\n * @beta\n * @deprecated in 4.16.0. Props of deprecated component {@link FloatingViewportContent}.\n */\nexport interface FloatingViewportContentProps {\n /** callback used to construct context menu when user right-clicks on canvas/viewport */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** viewport/content control uniqueId */\n contentId: string;\n /** The initial view state used to create the viewport, or a function that returns it (will refresh when the function changes) */\n initialViewState: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: React.Ref<ScreenViewport>;\n}\n\n/**\n * @beta\n * @deprecated in 4.16.0. Wrap {@link @itwin/imodel-components-react#ViewportComponent} component with a {@link ContentOverlay} instead.\n */\nexport function FloatingViewportContent(props: FloatingViewportContentProps) {\n const { viewportControl } = useFloatingViewport(props);\n return (\n <FloatingViewportContentWrapper>\n {viewportControl}\n </FloatingViewportContentWrapper>\n );\n}\n\n/**\n * @public\n * @deprecated in 4.16.0. Props of deprecated component {@link FloatingViewportContentWrapper}.\n */\nexport interface FloatingViewportContentWrapperProps {\n readonly children?: React.ReactNode;\n}\n\n/**\n * @public\n * @deprecated in 4.16.0. Use {@link ContentOverlay} component to display the active content indicator instead.\n */\nexport function FloatingViewportContentWrapper({\n children,\n}: FloatingViewportContentWrapperProps) {\n return (\n <div\n className=\"uifw-dialog-imodel-content\"\n style={{ height: \"100%\", position: \"relative\" }}\n >\n <ContentWrapper\n content={children}\n style={{ height: \"100%\", position: \"relative\" }}\n contentIndex={undefined}\n />\n </div>\n );\n}\n\n/**\n * @alpha\n * @deprecated in 4.16.0. Use {@link @itwin/imodel-components-react#ViewportComponent} component instead.\n */\nexport function useFloatingViewport(args: FloatingViewportContentProps) {\n const { contentId, initialViewState, onContextMenu, viewportRef } = args;\n const [viewport, setViewport] = React.useState<ScreenViewport | undefined>();\n const contentControl = React.useRef<\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n FloatingViewportContentControl | undefined\n >();\n\n const viewState = React.useMemo(\n () =>\n typeof initialViewState === \"function\"\n ? initialViewState()\n : initialViewState,\n [initialViewState]\n );\n const ref = React.useCallback((v: ScreenViewport) => {\n setViewport(v);\n }, []);\n\n const refs = useRefs(ref, viewportRef);\n const viewportControl = React.useMemo(() => {\n const node = (\n <ViewportComponent\n key={contentId}\n imodel={viewState.iModel}\n viewState={viewState}\n controlId={contentId}\n onContextMenu={onContextMenu}\n viewportRef={refs}\n />\n );\n return node;\n }, [refs, onContextMenu, viewState, contentId]);\n\n React.useEffect(() => {\n if (!contentControl.current) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n contentControl.current = new FloatingViewportContentControl(\n contentId,\n contentId,\n null\n );\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.addFloatingContentControl(contentControl.current);\n }\n return () => {\n if (contentControl.current) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.dropFloatingContentControl(contentControl.current);\n contentControl.current = undefined;\n }\n };\n }, [contentId]);\n\n React.useEffect(() => {\n if (viewport && contentControl.current) {\n contentControl.current.viewport = viewport;\n if (null === contentControl.current.reactNode) {\n contentControl.current.reactNode = viewportControl;\n }\n }\n }, [viewport, viewportControl]);\n\n React.useEffect(() => {\n return IModelApp.viewManager.onViewClose.addListener((vp) => {\n if (contentControl.current?.viewport === vp) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.dropFloatingContentControl(contentControl.current);\n contentControl.current = undefined;\n }\n });\n }, []);\n\n return {\n viewportControl,\n };\n}\n"]}
1
+ {"version":3,"file":"FloatingViewportContent.js","sourceRoot":"","sources":["../../../src/appui-react/content/FloatingViewportContent.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 ContentView\n */\n\nimport * as React from \"react\";\nimport type { ScreenViewport } from \"@itwin/core-frontend\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport type { ViewStateProp } from \"@itwin/imodel-components-react\";\nimport { ViewportComponent } from \"@itwin/imodel-components-react\";\nimport { FloatingViewportContentControl } from \"./ViewportContentControl.js\";\nimport { ContentWrapper } from \"./ContentLayout.js\";\nimport { UiFramework } from \"../UiFramework.js\";\nimport { useRefs } from \"@itwin/core-react/internal\";\nimport type { ContentOverlay } from \"./ContentOverlay.js\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n\n/**\n * @beta\n * @deprecated in 4.16.0. Props of deprecated component {@link FloatingViewportContent}.\n */\nexport interface FloatingViewportContentProps {\n /** callback used to construct context menu when user right-clicks on canvas/viewport */\n onContextMenu?: (e: React.MouseEvent) => boolean;\n /** viewport/content control uniqueId */\n contentId: string;\n /** The initial view state used to create the viewport, or a function that returns it (will refresh when the function changes) */\n initialViewState: ViewStateProp;\n /** Function to get a reference to the ScreenViewport */\n viewportRef?: React.Ref<ScreenViewport>;\n}\n\n/**\n * @beta\n * @deprecated in 4.16.0. Wrap {@link @itwin/imodel-components-react#ViewportComponent} component with a {@link ContentOverlay} instead.\n */\nexport function FloatingViewportContent(props: FloatingViewportContentProps) {\n const { viewportControl } = useFloatingViewport(props);\n return (\n <FloatingViewportContentWrapper>\n {viewportControl}\n </FloatingViewportContentWrapper>\n );\n}\n\n/**\n * @public\n * @deprecated in 4.16.0. Props of deprecated component {@link FloatingViewportContentWrapper}.\n */\nexport interface FloatingViewportContentWrapperProps {\n readonly children?: React.ReactNode;\n}\n\n/**\n * @public\n * @deprecated in 4.16.0. Use {@link ContentOverlay} component to display the active content indicator instead.\n */\nexport function FloatingViewportContentWrapper({\n children,\n}: FloatingViewportContentWrapperProps) {\n return (\n <div\n className=\"uifw-dialog-imodel-content\"\n style={{ height: \"100%\", position: \"relative\" }}\n >\n <ContentWrapper\n content={children}\n style={{ height: \"100%\", position: \"relative\" }}\n contentIndex={undefined}\n />\n </div>\n );\n}\n\n/**\n * @alpha\n * @deprecated in 4.16.0. Use {@link @itwin/imodel-components-react#ViewportComponent} component instead.\n */\nexport function useFloatingViewport(args: FloatingViewportContentProps) {\n const { contentId, initialViewState, onContextMenu, viewportRef } = args;\n const [viewport, setViewport] = React.useState<ScreenViewport | undefined>();\n const contentControl = React.useRef<\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n FloatingViewportContentControl | undefined\n >(undefined);\n\n const viewState = React.useMemo(\n () =>\n typeof initialViewState === \"function\"\n ? initialViewState()\n : initialViewState,\n [initialViewState]\n );\n const ref = React.useCallback((v: ScreenViewport) => {\n setViewport(v);\n }, []);\n\n const refs = useRefs(ref, viewportRef);\n const viewportControl = React.useMemo(() => {\n const node = (\n <ViewportComponent\n key={contentId}\n imodel={viewState.iModel}\n viewState={viewState}\n controlId={contentId}\n onContextMenu={onContextMenu}\n viewportRef={refs}\n />\n );\n return node;\n }, [refs, onContextMenu, viewState, contentId]);\n\n React.useEffect(() => {\n if (!contentControl.current) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n contentControl.current = new FloatingViewportContentControl(\n contentId,\n contentId,\n null\n );\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.addFloatingContentControl(contentControl.current);\n }\n return () => {\n if (contentControl.current) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.dropFloatingContentControl(contentControl.current);\n contentControl.current = undefined;\n }\n };\n }, [contentId]);\n\n React.useEffect(() => {\n if (viewport && contentControl.current) {\n contentControl.current.viewport = viewport;\n if (null === contentControl.current.reactNode) {\n contentControl.current.reactNode = viewportControl;\n }\n }\n }, [viewport, viewportControl]);\n\n React.useEffect(() => {\n return IModelApp.viewManager.onViewClose.addListener((vp) => {\n if (contentControl.current?.viewport === vp) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n UiFramework.content.dropFloatingContentControl(contentControl.current);\n contentControl.current = undefined;\n }\n });\n }, []);\n\n return {\n viewportControl,\n };\n}\n"]}
@@ -11,7 +11,7 @@ export interface PaneProps {
11
11
  size?: string | number;
12
12
  split?: "vertical" | "horizontal";
13
13
  style?: React.CSSProperties;
14
- eleRef: React.RefObject<HTMLDivElement>;
14
+ eleRef: React.RefObject<HTMLDivElement | null>;
15
15
  children?: React.ReactNode;
16
16
  }
17
17
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Pane.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/split-pane/Pane.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,2GAA2G;AAE3G;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,qBAoCpC"}
1
+ {"version":3,"file":"Pane.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/split-pane/Pane.tsx"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,2GAA2G;AAE3G;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IAClC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,qBAoCpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pane.js","sourceRoot":"","sources":["../../../../src/appui-react/content/split-pane/Pane.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,UAAU,MAAM,YAAY,CAAC;AAgBpC;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAC/B,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAC1C,CAAC,KAAK,EAAE,SAAS,CAAC,CACnB,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,SAAS,GAAiC;YAC9C,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7B,CAAC;YACD,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,GAAG,KAAK;YACR,GAAG,SAAS;SACU,CAAC;IAC3B,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,6BAAK,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,IACvD,QAAQ,CACL,CACP,CAAC;AACJ,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 ContentView\n */\nimport * as React from \"react\";\nimport classnames from \"classnames\";\n\n/** Based on react-split-pane package. See https://github.com/tomkp/react-split-pane/blob/master/LICENSE */\n\n/**\n * @internal\n */\nexport interface PaneProps {\n className?: string;\n size?: string | number;\n split?: \"vertical\" | \"horizontal\";\n style?: React.CSSProperties;\n eleRef: React.RefObject<HTMLDivElement>;\n children?: React.ReactNode;\n}\n\n/**\n * @internal\n */\nexport function Pane(props: PaneProps) {\n const { children, className, split, style, size, eleRef } = props;\n\n const paneClasses = React.useMemo(\n () => classnames(\"Pane\", split, className),\n [split, className]\n );\n\n const paneStyle = React.useMemo(() => {\n const baseStyle: Partial<React.CSSProperties> = {\n flex: 1,\n position: \"relative\",\n outline: \"none\",\n };\n\n if (size !== undefined) {\n if (split === \"vertical\") {\n baseStyle.width = size;\n } else {\n baseStyle.height = size;\n baseStyle.display = \"flex\";\n }\n baseStyle.flex = \"none\";\n }\n\n return {\n ...style,\n ...baseStyle,\n } as React.CSSProperties;\n }, [size, split, style]);\n\n return (\n <div ref={eleRef} className={paneClasses} style={paneStyle}>\n {children}\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"Pane.js","sourceRoot":"","sources":["../../../../src/appui-react/content/split-pane/Pane.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,UAAU,MAAM,YAAY,CAAC;AAgBpC;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAElE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAC/B,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAC1C,CAAC,KAAK,EAAE,SAAS,CAAC,CACnB,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACnC,MAAM,SAAS,GAAiC;YAC9C,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,UAAU;YACpB,OAAO,EAAE,MAAM;SAChB,CAAC;QAEF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;gBACzB,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;gBACxB,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7B,CAAC;YACD,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,GAAG,KAAK;YACR,GAAG,SAAS;SACU,CAAC;IAC3B,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,6BAAK,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,IACvD,QAAQ,CACL,CACP,CAAC;AACJ,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 ContentView\n */\nimport * as React from \"react\";\nimport classnames from \"classnames\";\n\n/** Based on react-split-pane package. See https://github.com/tomkp/react-split-pane/blob/master/LICENSE */\n\n/**\n * @internal\n */\nexport interface PaneProps {\n className?: string;\n size?: string | number;\n split?: \"vertical\" | \"horizontal\";\n style?: React.CSSProperties;\n eleRef: React.RefObject<HTMLDivElement | null>;\n children?: React.ReactNode;\n}\n\n/**\n * @internal\n */\nexport function Pane(props: PaneProps) {\n const { children, className, split, style, size, eleRef } = props;\n\n const paneClasses = React.useMemo(\n () => classnames(\"Pane\", split, className),\n [split, className]\n );\n\n const paneStyle = React.useMemo(() => {\n const baseStyle: Partial<React.CSSProperties> = {\n flex: 1,\n position: \"relative\",\n outline: \"none\",\n };\n\n if (size !== undefined) {\n if (split === \"vertical\") {\n baseStyle.width = size;\n } else {\n baseStyle.height = size;\n baseStyle.display = \"flex\";\n }\n baseStyle.flex = \"none\";\n }\n\n return {\n ...style,\n ...baseStyle,\n } as React.CSSProperties;\n }, [size, split, style]);\n\n return (\n <div ref={eleRef} className={paneClasses} style={paneStyle}>\n {children}\n </div>\n );\n}\n"]}
@@ -36,7 +36,7 @@ function getDefaultSize(defaultSize, minSize, maxSize, draggedSize) {
36
36
  return minSize;
37
37
  }
38
38
  function removeNullChildren(children) {
39
- return React.Children.toArray(children).filter((c) => c);
39
+ return React.Children.toArray(children).filter((c) => !!c);
40
40
  }
41
41
  /**
42
42
  * Local TypeScript implementation of `SplitPane` from `react-split-pane` package since that