@itwin/appui-react 3.2.0-dev.13 → 3.2.0-dev.16

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 (65) hide show
  1. package/lib/cjs/appui-react/accudraw/AccuDrawFieldContainer.js +4 -4
  2. package/lib/cjs/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  3. package/lib/cjs/appui-react/accudraw/AccuDrawPopupManager.js +6 -6
  4. package/lib/cjs/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  5. package/lib/cjs/appui-react/accudraw/Calculator.d.ts.map +1 -1
  6. package/lib/cjs/appui-react/accudraw/Calculator.js +3 -2
  7. package/lib/cjs/appui-react/accudraw/Calculator.js.map +1 -1
  8. package/lib/cjs/appui-react/childwindow/ChildWindowManager.js +1 -1
  9. package/lib/cjs/appui-react/childwindow/ChildWindowManager.js.map +1 -1
  10. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  11. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +1 -2
  12. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  13. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js +2 -2
  14. package/lib/cjs/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  15. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js +2 -2
  16. package/lib/cjs/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  17. package/lib/cjs/appui-react/statusfields/tileloading/TileLoadingIndicator.js +1 -1
  18. package/lib/cjs/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
  19. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  20. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js +35 -33
  21. package/lib/cjs/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  22. package/lib/cjs/appui-react/theme/ThemeManager.js +1 -1
  23. package/lib/cjs/appui-react/theme/ThemeManager.js.map +1 -1
  24. package/lib/cjs/appui-react/toolbar/Toolbar.js +1 -1
  25. package/lib/cjs/appui-react/toolbar/Toolbar.js.map +1 -1
  26. package/lib/cjs/appui-react/widgets/BackstageAppButton.js +3 -3
  27. package/lib/cjs/appui-react/widgets/BackstageAppButton.js.map +1 -1
  28. package/lib/cjs/appui-react/widgets/BasicToolWidget.d.ts +1 -1
  29. package/lib/cjs/appui-react/widgets/BasicToolWidget.d.ts.map +1 -1
  30. package/lib/cjs/appui-react/widgets/BasicToolWidget.js.map +1 -1
  31. package/lib/cjs/appui-react/widgets/WidgetManager.js +1 -1
  32. package/lib/cjs/appui-react/widgets/WidgetManager.js.map +1 -1
  33. package/lib/esm/appui-react/accudraw/AccuDrawFieldContainer.js +4 -4
  34. package/lib/esm/appui-react/accudraw/AccuDrawFieldContainer.js.map +1 -1
  35. package/lib/esm/appui-react/accudraw/AccuDrawPopupManager.js +6 -6
  36. package/lib/esm/appui-react/accudraw/AccuDrawPopupManager.js.map +1 -1
  37. package/lib/esm/appui-react/accudraw/Calculator.d.ts.map +1 -1
  38. package/lib/esm/appui-react/accudraw/Calculator.js +5 -4
  39. package/lib/esm/appui-react/accudraw/Calculator.js.map +1 -1
  40. package/lib/esm/appui-react/childwindow/ChildWindowManager.js +1 -1
  41. package/lib/esm/appui-react/childwindow/ChildWindowManager.js.map +1 -1
  42. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  43. package/lib/esm/appui-react/frontstage/FrontstageDef.js +1 -2
  44. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  45. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js +2 -2
  46. package/lib/esm/appui-react/frontstage/ModalSettingsStage.js.map +1 -1
  47. package/lib/esm/appui-react/settings/ui/UiSettingsPage.js +2 -2
  48. package/lib/esm/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  49. package/lib/esm/appui-react/statusfields/tileloading/TileLoadingIndicator.js +1 -1
  50. package/lib/esm/appui-react/statusfields/tileloading/TileLoadingIndicator.js.map +1 -1
  51. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  52. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js +20 -18
  53. package/lib/esm/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  54. package/lib/esm/appui-react/theme/ThemeManager.js +1 -1
  55. package/lib/esm/appui-react/theme/ThemeManager.js.map +1 -1
  56. package/lib/esm/appui-react/toolbar/Toolbar.js +1 -1
  57. package/lib/esm/appui-react/toolbar/Toolbar.js.map +1 -1
  58. package/lib/esm/appui-react/widgets/BackstageAppButton.js +3 -3
  59. package/lib/esm/appui-react/widgets/BackstageAppButton.js.map +1 -1
  60. package/lib/esm/appui-react/widgets/BasicToolWidget.d.ts +1 -1
  61. package/lib/esm/appui-react/widgets/BasicToolWidget.d.ts.map +1 -1
  62. package/lib/esm/appui-react/widgets/BasicToolWidget.js.map +1 -1
  63. package/lib/esm/appui-react/widgets/WidgetManager.js +1 -1
  64. package/lib/esm/appui-react/widgets/WidgetManager.js.map +1 -1
  65. package/package.json +32 -32
@@ -1 +1 @@
1
- {"version":3,"file":"BasicToolWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicToolWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CommonToolbarItem, ToolbarOrientation, ToolbarUsage } from \"@itwin/appui-abstract\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { SelectionContextToolDefinitions } from \"../selection/SelectionContextItemDef\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { ToolWidgetComposer } from \"./ToolWidgetComposer\";\r\nimport { BackstageAppButton } from \"./BackstageAppButton\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items of [[ReviewToolWidget]].\r\n * @public\r\n */\r\nexport interface BasicToolWidgetProps {\r\n /** if true include hide/isolate Models and Categories */\r\n showCategoryAndModelsContextTools?: boolean;\r\n /** Name of icon WebFont entry or if specifying an SVG symbol added by plug on use \"svg:\" prefix to imported symbol Id. */\r\n icon?: string;\r\n /** optional set of additional items to include in horizontal toolbar */\r\n additionalHorizontalItems?: CommonToolbarItem[];\r\n /** optional set of additional items to include in vertical toolbar */\r\n additionalVerticalItems?: CommonToolbarItem[];\r\n}\r\n\r\n/** Default Tool Widget for standard \"review\" applications. Provides standard tools to review, and measure elements.\r\n * This definition will also show a overflow button if there is not enough room to display all the toolbar buttons.\r\n * @public\r\n */\r\nexport function BasicToolWidget(props: BasicToolWidgetProps) {\r\n const getHorizontalToolbarItems = React.useCallback(\r\n (useCategoryAndModelsContextTools: boolean): CommonToolbarItem[] => {\r\n const items: CommonToolbarItem[] = [];\r\n if (useCategoryAndModelsContextTools) {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideSectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateSelectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n } else {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n }\r\n if (props.additionalHorizontalItems)\r\n items.push(...props.additionalHorizontalItems);\r\n return items;\r\n }, [props.additionalHorizontalItems]);\r\n\r\n const getVerticalToolbarItems = React.useCallback(\r\n (): CommonToolbarItem[] => {\r\n const items: CommonToolbarItem[] = [];\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.selectElementCommand),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, CoreTools.measureToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, CoreTools.sectionToolGroup),\r\n );\r\n if (props.additionalVerticalItems)\r\n items.push(...props.additionalVerticalItems);\r\n return items;\r\n }, [props.additionalVerticalItems]);\r\n\r\n const [horizontalItems, setHorizontalItems] = React.useState(() => getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n const [verticalItems, setVerticalItems] = React.useState(() => getVerticalToolbarItems());\r\n\r\n const isInitialMount = React.useRef(true);\r\n React.useEffect(() => {\r\n if (isInitialMount.current)\r\n isInitialMount.current = false;\r\n else {\r\n setHorizontalItems(getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n setVerticalItems(getVerticalToolbarItems());\r\n }\r\n }, [props.showCategoryAndModelsContextTools, props.additionalHorizontalItems, props.additionalVerticalItems, getHorizontalToolbarItems, getVerticalToolbarItems]);\r\n\r\n const uiIsVisible = useUiVisibility();\r\n // istanbul ignore next\r\n const className = classnames(\r\n !uiIsVisible && \"nz-hidden\",\r\n );\r\n return (\r\n <ToolWidgetComposer className={className}\r\n cornerItem={<BackstageAppButton icon={props.icon} />}\r\n horizontalToolbar={<ToolbarComposer items={horizontalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Horizontal} />}\r\n verticalToolbar={<ToolbarComposer items={verticalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Vertical} />}\r\n />\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"BasicToolWidget.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/BasicToolWidget.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Widget\r\n */\r\n\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CommonToolbarItem, ToolbarOrientation, ToolbarUsage } from \"@itwin/appui-abstract\";\r\nimport { CoreTools } from \"../tools/CoreToolDefinitions\";\r\nimport { SelectionContextToolDefinitions } from \"../selection/SelectionContextItemDef\";\r\nimport { ToolbarComposer } from \"../toolbar/ToolbarComposer\";\r\nimport { ToolbarHelper } from \"../toolbar/ToolbarHelper\";\r\nimport { ToolWidgetComposer } from \"./ToolWidgetComposer\";\r\nimport { BackstageAppButton } from \"./BackstageAppButton\";\r\nimport { useUiVisibility } from \"../hooks/useUiVisibility\";\r\n\r\n/** Properties that can be used to append items to the default set of toolbar items of [[ReviewToolWidget]].\r\n * @public\r\n */\r\nexport interface BasicToolWidgetProps {\r\n /** if true include hide/isolate Models and Categories */\r\n showCategoryAndModelsContextTools?: boolean;\r\n /** Name of icon WebFont entry or if specifying an imported SVG symbol use \"webSvg:\" prefix to imported symbol Id. */\r\n icon?: string;\r\n /** optional set of additional items to include in horizontal toolbar */\r\n additionalHorizontalItems?: CommonToolbarItem[];\r\n /** optional set of additional items to include in vertical toolbar */\r\n additionalVerticalItems?: CommonToolbarItem[];\r\n}\r\n\r\n/** Default Tool Widget for standard \"review\" applications. Provides standard tools to review, and measure elements.\r\n * This definition will also show a overflow button if there is not enough room to display all the toolbar buttons.\r\n * @public\r\n */\r\nexport function BasicToolWidget(props: BasicToolWidgetProps) {\r\n const getHorizontalToolbarItems = React.useCallback(\r\n (useCategoryAndModelsContextTools: boolean): CommonToolbarItem[] => {\r\n const items: CommonToolbarItem[] = [];\r\n if (useCategoryAndModelsContextTools) {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideSectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateSelectionToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n } else {\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.clearSelectionItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, SelectionContextToolDefinitions.clearHideIsolateEmphasizeElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, SelectionContextToolDefinitions.hideElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(40, SelectionContextToolDefinitions.isolateElementsItemDef),\r\n ToolbarHelper.createToolbarItemFromItemDef(50, SelectionContextToolDefinitions.emphasizeElementsItemDef),\r\n );\r\n }\r\n if (props.additionalHorizontalItems)\r\n items.push(...props.additionalHorizontalItems);\r\n return items;\r\n }, [props.additionalHorizontalItems]);\r\n\r\n const getVerticalToolbarItems = React.useCallback(\r\n (): CommonToolbarItem[] => {\r\n const items: CommonToolbarItem[] = [];\r\n items.push(\r\n ToolbarHelper.createToolbarItemFromItemDef(10, CoreTools.selectElementCommand),\r\n ToolbarHelper.createToolbarItemFromItemDef(20, CoreTools.measureToolGroup),\r\n ToolbarHelper.createToolbarItemFromItemDef(30, CoreTools.sectionToolGroup),\r\n );\r\n if (props.additionalVerticalItems)\r\n items.push(...props.additionalVerticalItems);\r\n return items;\r\n }, [props.additionalVerticalItems]);\r\n\r\n const [horizontalItems, setHorizontalItems] = React.useState(() => getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n const [verticalItems, setVerticalItems] = React.useState(() => getVerticalToolbarItems());\r\n\r\n const isInitialMount = React.useRef(true);\r\n React.useEffect(() => {\r\n if (isInitialMount.current)\r\n isInitialMount.current = false;\r\n else {\r\n setHorizontalItems(getHorizontalToolbarItems(!!props.showCategoryAndModelsContextTools));\r\n setVerticalItems(getVerticalToolbarItems());\r\n }\r\n }, [props.showCategoryAndModelsContextTools, props.additionalHorizontalItems, props.additionalVerticalItems, getHorizontalToolbarItems, getVerticalToolbarItems]);\r\n\r\n const uiIsVisible = useUiVisibility();\r\n // istanbul ignore next\r\n const className = classnames(\r\n !uiIsVisible && \"nz-hidden\",\r\n );\r\n return (\r\n <ToolWidgetComposer className={className}\r\n cornerItem={<BackstageAppButton icon={props.icon} />}\r\n horizontalToolbar={<ToolbarComposer items={horizontalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Horizontal} />}\r\n verticalToolbar={<ToolbarComposer items={verticalItems} usage={ToolbarUsage.ContentManipulation} orientation={ToolbarOrientation.Vertical} />}\r\n />\r\n );\r\n}\r\n"]}
@@ -121,7 +121,7 @@ class WidgetManager {
121
121
  const widgetDefs = widgetInfos.map((info) => info.widgetDef);
122
122
  // Consult the UiItemsManager to get any Abstract widgets
123
123
  if (location in appui_abstract_1.StagePanelLocation) {
124
- const widgets = appui_abstract_1.UiItemsManager.getWidgets(stageId, stageUsage, location, definedSection, frontstageApplicationData);
124
+ const widgets = appui_abstract_1.UiItemsManager.getWidgets(stageId, stageUsage, location, definedSection, undefined, frontstageApplicationData);
125
125
  widgets.forEach((abstractProps, index) => {
126
126
  const props = WidgetDef_1.WidgetDef.createWidgetPropsFromAbstractProps(abstractProps);
127
127
  const stableId = getAddonStableWidgetId(stageUsage, location, definedSection, index);
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetManager.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/WidgetManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n/** @packageDocumentation\r\n * @module Widget\r\n */\r\n\r\nimport { BeUiEvent, Logger } from \"@itwin/core-bentley\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, StagePanelLocation, StagePanelSection, UiItemsManager } from \"@itwin/appui-abstract\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { getStableWidgetProps, ZoneLocation } from \"../zones/Zone\";\r\nimport { WidgetDef } from \"./WidgetDef\";\r\nimport { createStableWidgetDef } from \"./StableWidgetDef\";\r\n\r\n/** Information about WidgetDefs in the WidgetManager\r\n * @internal\r\n */\r\nexport interface WidgetInfo {\r\n widgetDef: WidgetDef;\r\n stageId?: string;\r\n stageUsage?: string;\r\n location: ZoneLocation | StagePanelLocation;\r\n section: StagePanelSection;\r\n}\r\n\r\n/** Arguments of [[this.onWidgetsChanged]] event.\r\n * @internal\r\n */\r\nexport interface WidgetsChangedEventArgs {\r\n readonly items: ReadonlyArray<WidgetInfo>;\r\n}\r\n\r\n/** Event class for [[this.onWidgetsChanged]].\r\n * @internal\r\n */\r\nexport class WidgetsChangedEvent extends BeUiEvent<WidgetsChangedEventArgs> { }\r\n\r\nfunction isZoneLocation(location: ZoneLocation | StagePanelLocation): location is ZoneLocation {\r\n return location >= ZoneLocation.TopLeft && location <= ZoneLocation.BottomRight;\r\n}\r\n\r\nfunction getLocationName(location: ZoneLocation | StagePanelLocation) {\r\n return isZoneLocation(location) ? ZoneLocation[location] : StagePanelLocation[location];\r\n}\r\n\r\nfunction getWidgetManagerStableWidgetId(stageUsage: string | undefined, location: ZoneLocation | StagePanelLocation, section: StagePanelSection,\r\n index: number) {\r\n return `uifw-wm-${stageUsage || \"\"}-${getLocationName(location)}-${StagePanelSection[section]}-${index}`;\r\n}\r\n\r\nfunction getAddonStableWidgetId(stageUsage: string, location: StagePanelLocation, section: StagePanelSection, index: number) {\r\n return `uifw-addon-${stageUsage}-${StagePanelLocation[location]}-${StagePanelSection[section]}-${index}`;\r\n}\r\n\r\n/** Widget Manager class.\r\n * @beta\r\n */\r\nexport class WidgetManager {\r\n private _widgets: ReadonlyArray<WidgetInfo> = [];\r\n\r\n /** Event raised when Widgets are changed.\r\n * @internal\r\n */\r\n public readonly onWidgetsChanged = new WidgetsChangedEvent();\r\n\r\n /** @internal */\r\n public get widgetCount(): number {\r\n return this._widgets.length;\r\n }\r\n\r\n /** @internal */\r\n public get widgets(): ReadonlyArray<WidgetInfo> { return this._widgets; }\r\n public set widgets(w: ReadonlyArray<WidgetInfo>) {\r\n this._widgets = w;\r\n this.onWidgetsChanged.emit({ items: w });\r\n }\r\n\r\n /** Adds a WidgetDef for use in a Frontstage.\r\n * @note Added `widgetDef` must return unique id to correctly save/restore App layout.\r\n * Semi-stable id is generated when auto-generated `widgetDef` id is detected,\r\n * but correctness of such id depends on `addWidgetDef` call order and widget location.\r\n */\r\n public addWidgetDef(widgetDef: WidgetDef, stageId: string | undefined, stageUsage: string | undefined, location: ZoneLocation | StagePanelLocation, section?: StagePanelSection): boolean {\r\n if (stageId === undefined && stageUsage === undefined) {\r\n Logger.logError(UiFramework.loggerCategory(this), `addWidgetDef: stageId or stageUsage param must be specified`);\r\n return false;\r\n }\r\n\r\n section = (section !== undefined) ? section : StagePanelSection.Start;\r\n const index = this._widgets.reduce((acc, info) => {\r\n if (info.stageId === stageId && info.stageUsage === stageUsage && info.location === location && info.section === section)\r\n return acc + 1;\r\n return acc;\r\n }, 0);\r\n const stableId = getWidgetManagerStableWidgetId(stageUsage, location, section, index);\r\n const stableWidget = createStableWidgetDef(widgetDef, stableId);\r\n const newWidget: WidgetInfo = { widgetDef: stableWidget, stageId, stageUsage, location, section };\r\n\r\n const oldWidgets = this._widgets.filter((info) => info.widgetDef.id !== newWidget.widgetDef.id);\r\n const updatedWidgets = [\r\n ...oldWidgets,\r\n newWidget,\r\n ];\r\n this.widgets = updatedWidgets;\r\n\r\n return true;\r\n }\r\n\r\n /** Removes a WidgetDef.\r\n */\r\n public removeWidgetDef(widgetId: string): boolean {\r\n let result = false;\r\n const updatedWidgets = this._widgets.filter((info) => info.widgetDef.id !== widgetId);\r\n\r\n if (updatedWidgets.length !== this._widgets.length) {\r\n this.widgets = updatedWidgets;\r\n result = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Used when WidgetDefs are requested from UiItemProviders when uiVersion=\"1\"\r\n private getStagePanelLocationFromZoneLocation(location: ZoneLocation): StagePanelLocation | undefined {\r\n switch (location) {\r\n case ZoneLocation.BottomCenter:\r\n case ZoneLocation.TopCenter:\r\n case ZoneLocation.TopRight:\r\n case ZoneLocation.TopLeft:\r\n return undefined; // an existing stage does not support appending widgets to these zones\r\n case ZoneLocation.BottomLeft:\r\n case ZoneLocation.CenterLeft:\r\n return StagePanelLocation.Left;\r\n case ZoneLocation.BottomRight:\r\n case ZoneLocation.CenterRight:\r\n return StagePanelLocation.Right;\r\n }\r\n }\r\n\r\n /** Gets WidgetDefs for a Frontstage location.\r\n */\r\n public getWidgetDefs(stageId: string, stageUsage: string, location: ZoneLocation | StagePanelLocation, section?: StagePanelSection,\r\n frontstageApplicationData?: any): ReadonlyArray<WidgetDef> | undefined {\r\n const definedSection = section === undefined ? StagePanelSection.Start : section;\r\n\r\n const widgetInfos = this._widgets.filter((info) => {\r\n return (!info.stageId || info.stageId === stageId)\r\n && (!info.stageUsage || info.stageUsage === stageUsage)\r\n && info.location === location\r\n && info.section === definedSection;\r\n });\r\n\r\n const widgetDefs = widgetInfos.map((info) => info.widgetDef);\r\n\r\n // Consult the UiItemsManager to get any Abstract widgets\r\n if (location in StagePanelLocation) {\r\n const widgets = UiItemsManager.getWidgets(stageId, stageUsage, location as StagePanelLocation, definedSection, frontstageApplicationData);\r\n widgets.forEach((abstractProps: AbstractWidgetProps, index: number) => {\r\n const props = WidgetDef.createWidgetPropsFromAbstractProps(abstractProps);\r\n const stableId = getAddonStableWidgetId(stageUsage, location as StagePanelLocation, definedSection, index);\r\n const stableProps = getStableWidgetProps(props, stableId);\r\n const wd = new WidgetDef(stableProps);\r\n widgetDefs.push(wd);\r\n });\r\n } else {\r\n // istanbul ignore else\r\n if (location in ZoneLocation) {\r\n const panelLocation = this.getStagePanelLocationFromZoneLocation(location as ZoneLocation);\r\n // istanbul ignore else\r\n if (panelLocation && location in AbstractZoneLocation) {\r\n const widgets = UiItemsManager.getWidgets(stageId, stageUsage, panelLocation, undefined, location as unknown as AbstractZoneLocation, frontstageApplicationData);\r\n widgets.forEach((abstractProps: AbstractWidgetProps, index: number) => {\r\n const props = WidgetDef.createWidgetPropsFromAbstractProps(abstractProps);\r\n const stableId = getAddonStableWidgetId(stageUsage, location as StagePanelLocation, definedSection, index);\r\n const stableProps = getStableWidgetProps(props, stableId);\r\n const wd = new WidgetDef(stableProps);\r\n widgetDefs.push(wd);\r\n });\r\n }\r\n }\r\n }\r\n\r\n return widgetDefs.length > 0 ? widgetDefs : undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WidgetManager.js","sourceRoot":"","sources":["../../../../src/appui-react/widgets/WidgetManager.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F,4CAA4C;AAC5C;;GAEG;;;AAEH,sDAAwD;AACxD,0DAAyI;AACzI,gDAA6C;AAC7C,wCAAmE;AACnE,2CAAwC;AACxC,uDAA0D;AAoB1D;;GAEG;AACH,MAAa,mBAAoB,SAAQ,wBAAkC;CAAI;AAA/E,kDAA+E;AAE/E,SAAS,cAAc,CAAC,QAA2C;IACjE,OAAO,QAAQ,IAAI,mBAAY,CAAC,OAAO,IAAI,QAAQ,IAAI,mBAAY,CAAC,WAAW,CAAC;AAClF,CAAC;AAED,SAAS,eAAe,CAAC,QAA2C;IAClE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mBAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,mCAAkB,CAAC,QAAQ,CAAC,CAAC;AAC1F,CAAC;AAED,SAAS,8BAA8B,CAAC,UAA8B,EAAE,QAA2C,EAAE,OAA0B,EAC7I,KAAa;IACb,OAAO,WAAW,UAAU,IAAI,EAAE,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,kCAAiB,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;AAC3G,CAAC;AAED,SAAS,sBAAsB,CAAC,UAAkB,EAAE,QAA4B,EAAE,OAA0B,EAAE,KAAa;IACzH,OAAO,cAAc,UAAU,IAAI,mCAAkB,CAAC,QAAQ,CAAC,IAAI,kCAAiB,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;AAC3G,CAAC;AAED;;GAEG;AACH,MAAa,aAAa;IAA1B;QACU,aAAQ,GAA8B,EAAE,CAAC;QAEjD;;WAEG;QACa,qBAAgB,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAyH/D,CAAC;IAvHC,gBAAgB;IAChB,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,gBAAgB;IAChB,IAAW,OAAO,KAAgC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,IAAW,OAAO,CAAC,CAA4B;QAC7C,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAClB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,SAAoB,EAAE,OAA2B,EAAE,UAA8B,EAAE,QAA2C,EAAE,OAA2B;QAC7K,IAAI,OAAO,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE;YACrD,qBAAM,CAAC,QAAQ,CAAC,yBAAW,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,6DAA6D,CAAC,CAAC;YACjH,OAAO,KAAK,CAAC;SACd;QAED,OAAO,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAiB,CAAC,KAAK,CAAC;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBACtH,OAAO,GAAG,GAAG,CAAC,CAAC;YACjB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,MAAM,QAAQ,GAAG,8BAA8B,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACtF,MAAM,YAAY,GAAG,IAAA,uCAAqB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChE,MAAM,SAAS,GAAe,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAElG,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAChG,MAAM,cAAc,GAAG;YACrB,GAAG,UAAU;YACb,SAAS;SACV,CAAC;QACF,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;OACG;IACI,eAAe,CAAC,QAAgB;QACrC,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAEtF,IAAI,cAAc,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAClD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC;YAC9B,MAAM,GAAG,IAAI,CAAC;SACf;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,6EAA6E;IACrE,qCAAqC,CAAC,QAAsB;QAClE,QAAQ,QAAQ,EAAE;YAChB,KAAK,mBAAY,CAAC,YAAY,CAAC;YAC/B,KAAK,mBAAY,CAAC,SAAS,CAAC;YAC5B,KAAK,mBAAY,CAAC,QAAQ,CAAC;YAC3B,KAAK,mBAAY,CAAC,OAAO;gBACvB,OAAO,SAAS,CAAC,CAAC,sEAAsE;YAC1F,KAAK,mBAAY,CAAC,UAAU,CAAC;YAC7B,KAAK,mBAAY,CAAC,UAAU;gBAC1B,OAAO,mCAAkB,CAAC,IAAI,CAAC;YACjC,KAAK,mBAAY,CAAC,WAAW,CAAC;YAC9B,KAAK,mBAAY,CAAC,WAAW;gBAC3B,OAAO,mCAAkB,CAAC,KAAK,CAAC;SACnC;IACH,CAAC;IAED;OACG;IACI,aAAa,CAAC,OAAe,EAAE,UAAkB,EAAE,QAA2C,EAAE,OAA2B,EAChI,yBAA+B;QAC/B,MAAM,cAAc,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,kCAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAEjF,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAChD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;mBAC7C,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC;mBACpD,IAAI,CAAC,QAAQ,KAAK,QAAQ;mBAC1B,IAAI,CAAC,OAAO,KAAK,cAAc,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7D,yDAAyD;QACzD,IAAI,QAAQ,IAAI,mCAAkB,EAAE;YAClC,MAAM,OAAO,GAAG,+BAAc,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,QAA8B,EAAE,cAAc,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;YACrJ,OAAO,CAAC,OAAO,CAAC,CAAC,aAAkC,EAAE,KAAa,EAAE,EAAE;gBACpE,MAAM,KAAK,GAAG,qBAAS,CAAC,kCAAkC,CAAC,aAAa,CAAC,CAAC;gBAC1E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAA8B,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;gBAC3G,MAAM,WAAW,GAAG,IAAA,2BAAoB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC1D,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,WAAW,CAAC,CAAC;gBACtC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;SACJ;aAAM;YACL,uBAAuB;YACvB,IAAI,QAAQ,IAAI,mBAAY,EAAE;gBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,qCAAqC,CAAC,QAAwB,CAAC,CAAC;gBAC3F,uBAAuB;gBACvB,IAAI,aAAa,IAAI,QAAQ,IAAI,qCAAoB,EAAE;oBACrD,MAAM,OAAO,GAAG,+BAAc,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,QAA2C,EAAE,yBAAyB,CAAC,CAAC;oBACjK,OAAO,CAAC,OAAO,CAAC,CAAC,aAAkC,EAAE,KAAa,EAAE,EAAE;wBACpE,MAAM,KAAK,GAAG,qBAAS,CAAC,kCAAkC,CAAC,aAAa,CAAC,CAAC;wBAC1E,MAAM,QAAQ,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAA8B,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;wBAC3G,MAAM,WAAW,GAAG,IAAA,2BAAoB,EAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;wBAC1D,MAAM,EAAE,GAAG,IAAI,qBAAS,CAAC,WAAW,CAAC,CAAC;wBACtC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACtB,CAAC,CAAC,CAAC;iBACJ;aACF;SACF;QAED,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;CACF;AA/HD,sCA+HC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable deprecation/deprecation */\r\n/** @packageDocumentation\r\n * @module Widget\r\n */\r\n\r\nimport { BeUiEvent, Logger } from \"@itwin/core-bentley\";\r\nimport { AbstractWidgetProps, AbstractZoneLocation, StagePanelLocation, StagePanelSection, UiItemsManager } from \"@itwin/appui-abstract\";\r\nimport { UiFramework } from \"../UiFramework\";\r\nimport { getStableWidgetProps, ZoneLocation } from \"../zones/Zone\";\r\nimport { WidgetDef } from \"./WidgetDef\";\r\nimport { createStableWidgetDef } from \"./StableWidgetDef\";\r\n\r\n/** Information about WidgetDefs in the WidgetManager\r\n * @internal\r\n */\r\nexport interface WidgetInfo {\r\n widgetDef: WidgetDef;\r\n stageId?: string;\r\n stageUsage?: string;\r\n location: ZoneLocation | StagePanelLocation;\r\n section: StagePanelSection;\r\n}\r\n\r\n/** Arguments of [[this.onWidgetsChanged]] event.\r\n * @internal\r\n */\r\nexport interface WidgetsChangedEventArgs {\r\n readonly items: ReadonlyArray<WidgetInfo>;\r\n}\r\n\r\n/** Event class for [[this.onWidgetsChanged]].\r\n * @internal\r\n */\r\nexport class WidgetsChangedEvent extends BeUiEvent<WidgetsChangedEventArgs> { }\r\n\r\nfunction isZoneLocation(location: ZoneLocation | StagePanelLocation): location is ZoneLocation {\r\n return location >= ZoneLocation.TopLeft && location <= ZoneLocation.BottomRight;\r\n}\r\n\r\nfunction getLocationName(location: ZoneLocation | StagePanelLocation) {\r\n return isZoneLocation(location) ? ZoneLocation[location] : StagePanelLocation[location];\r\n}\r\n\r\nfunction getWidgetManagerStableWidgetId(stageUsage: string | undefined, location: ZoneLocation | StagePanelLocation, section: StagePanelSection,\r\n index: number) {\r\n return `uifw-wm-${stageUsage || \"\"}-${getLocationName(location)}-${StagePanelSection[section]}-${index}`;\r\n}\r\n\r\nfunction getAddonStableWidgetId(stageUsage: string, location: StagePanelLocation, section: StagePanelSection, index: number) {\r\n return `uifw-addon-${stageUsage}-${StagePanelLocation[location]}-${StagePanelSection[section]}-${index}`;\r\n}\r\n\r\n/** Widget Manager class.\r\n * @beta\r\n */\r\nexport class WidgetManager {\r\n private _widgets: ReadonlyArray<WidgetInfo> = [];\r\n\r\n /** Event raised when Widgets are changed.\r\n * @internal\r\n */\r\n public readonly onWidgetsChanged = new WidgetsChangedEvent();\r\n\r\n /** @internal */\r\n public get widgetCount(): number {\r\n return this._widgets.length;\r\n }\r\n\r\n /** @internal */\r\n public get widgets(): ReadonlyArray<WidgetInfo> { return this._widgets; }\r\n public set widgets(w: ReadonlyArray<WidgetInfo>) {\r\n this._widgets = w;\r\n this.onWidgetsChanged.emit({ items: w });\r\n }\r\n\r\n /** Adds a WidgetDef for use in a Frontstage.\r\n * @note Added `widgetDef` must return unique id to correctly save/restore App layout.\r\n * Semi-stable id is generated when auto-generated `widgetDef` id is detected,\r\n * but correctness of such id depends on `addWidgetDef` call order and widget location.\r\n */\r\n public addWidgetDef(widgetDef: WidgetDef, stageId: string | undefined, stageUsage: string | undefined, location: ZoneLocation | StagePanelLocation, section?: StagePanelSection): boolean {\r\n if (stageId === undefined && stageUsage === undefined) {\r\n Logger.logError(UiFramework.loggerCategory(this), `addWidgetDef: stageId or stageUsage param must be specified`);\r\n return false;\r\n }\r\n\r\n section = (section !== undefined) ? section : StagePanelSection.Start;\r\n const index = this._widgets.reduce((acc, info) => {\r\n if (info.stageId === stageId && info.stageUsage === stageUsage && info.location === location && info.section === section)\r\n return acc + 1;\r\n return acc;\r\n }, 0);\r\n const stableId = getWidgetManagerStableWidgetId(stageUsage, location, section, index);\r\n const stableWidget = createStableWidgetDef(widgetDef, stableId);\r\n const newWidget: WidgetInfo = { widgetDef: stableWidget, stageId, stageUsage, location, section };\r\n\r\n const oldWidgets = this._widgets.filter((info) => info.widgetDef.id !== newWidget.widgetDef.id);\r\n const updatedWidgets = [\r\n ...oldWidgets,\r\n newWidget,\r\n ];\r\n this.widgets = updatedWidgets;\r\n\r\n return true;\r\n }\r\n\r\n /** Removes a WidgetDef.\r\n */\r\n public removeWidgetDef(widgetId: string): boolean {\r\n let result = false;\r\n const updatedWidgets = this._widgets.filter((info) => info.widgetDef.id !== widgetId);\r\n\r\n if (updatedWidgets.length !== this._widgets.length) {\r\n this.widgets = updatedWidgets;\r\n result = true;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n // Used when WidgetDefs are requested from UiItemProviders when uiVersion=\"1\"\r\n private getStagePanelLocationFromZoneLocation(location: ZoneLocation): StagePanelLocation | undefined {\r\n switch (location) {\r\n case ZoneLocation.BottomCenter:\r\n case ZoneLocation.TopCenter:\r\n case ZoneLocation.TopRight:\r\n case ZoneLocation.TopLeft:\r\n return undefined; // an existing stage does not support appending widgets to these zones\r\n case ZoneLocation.BottomLeft:\r\n case ZoneLocation.CenterLeft:\r\n return StagePanelLocation.Left;\r\n case ZoneLocation.BottomRight:\r\n case ZoneLocation.CenterRight:\r\n return StagePanelLocation.Right;\r\n }\r\n }\r\n\r\n /** Gets WidgetDefs for a Frontstage location.\r\n */\r\n public getWidgetDefs(stageId: string, stageUsage: string, location: ZoneLocation | StagePanelLocation, section?: StagePanelSection,\r\n frontstageApplicationData?: any): ReadonlyArray<WidgetDef> | undefined {\r\n const definedSection = section === undefined ? StagePanelSection.Start : section;\r\n\r\n const widgetInfos = this._widgets.filter((info) => {\r\n return (!info.stageId || info.stageId === stageId)\r\n && (!info.stageUsage || info.stageUsage === stageUsage)\r\n && info.location === location\r\n && info.section === definedSection;\r\n });\r\n\r\n const widgetDefs = widgetInfos.map((info) => info.widgetDef);\r\n\r\n // Consult the UiItemsManager to get any Abstract widgets\r\n if (location in StagePanelLocation) {\r\n const widgets = UiItemsManager.getWidgets(stageId, stageUsage, location as StagePanelLocation, definedSection, undefined, frontstageApplicationData);\r\n widgets.forEach((abstractProps: AbstractWidgetProps, index: number) => {\r\n const props = WidgetDef.createWidgetPropsFromAbstractProps(abstractProps);\r\n const stableId = getAddonStableWidgetId(stageUsage, location as StagePanelLocation, definedSection, index);\r\n const stableProps = getStableWidgetProps(props, stableId);\r\n const wd = new WidgetDef(stableProps);\r\n widgetDefs.push(wd);\r\n });\r\n } else {\r\n // istanbul ignore else\r\n if (location in ZoneLocation) {\r\n const panelLocation = this.getStagePanelLocationFromZoneLocation(location as ZoneLocation);\r\n // istanbul ignore else\r\n if (panelLocation && location in AbstractZoneLocation) {\r\n const widgets = UiItemsManager.getWidgets(stageId, stageUsage, panelLocation, undefined, location as unknown as AbstractZoneLocation, frontstageApplicationData);\r\n widgets.forEach((abstractProps: AbstractWidgetProps, index: number) => {\r\n const props = WidgetDef.createWidgetPropsFromAbstractProps(abstractProps);\r\n const stableId = getAddonStableWidgetId(stageUsage, location as StagePanelLocation, definedSection, index);\r\n const stableProps = getStableWidgetProps(props, stableId);\r\n const wd = new WidgetDef(stableProps);\r\n widgetDefs.push(wd);\r\n });\r\n }\r\n }\r\n }\r\n\r\n return widgetDefs.length > 0 ? widgetDefs : undefined;\r\n }\r\n}\r\n"]}
@@ -15,8 +15,8 @@ import { getCSSColorFromDef } from "@itwin/imodel-components-react";
15
15
  import { AccuDrawInputField } from "./AccuDrawInputField";
16
16
  import { KeyboardShortcutManager } from "../keyboardshortcut/KeyboardShortcut";
17
17
  import { FrameworkAccuDraw } from "./FrameworkAccuDraw";
18
- import angleIconSvg from "./angle.svg?sprite";
19
- import distanceIconSvg from "./distance.svg?sprite";
18
+ import angleIconSvg from "./angle.svg";
19
+ import distanceIconSvg from "./distance.svg";
20
20
  let AccuDrawContainerIndex = 0;
21
21
  function determineShowZ(vp) {
22
22
  const showZ = (vp !== undefined) ? /* istanbul ignore next */ vp.view.is3d() : false;
@@ -25,8 +25,8 @@ function determineShowZ(vp) {
25
25
  const defaultXLabel = "X";
26
26
  const defaultYLabel = "Y";
27
27
  const defaultZLabel = "Z";
28
- const defaultAngleIcon = IconSpecUtilities.createSvgIconSpec(angleIconSvg);
29
- const defaultDistanceIcon = IconSpecUtilities.createSvgIconSpec(distanceIconSvg);
28
+ const defaultAngleIcon = IconSpecUtilities.createWebComponentIconSpec(angleIconSvg);
29
+ const defaultDistanceIcon = IconSpecUtilities.createWebComponentIconSpec(distanceIconSvg);
30
30
  /** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field
31
31
  * @beta */
32
32
  export function AccuDrawFieldContainer(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/AccuDrawFieldContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport \"./AccuDrawFieldContainer.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { CompassMode, IModelApp, ItemField, ScreenViewport, SelectedViewportChangedArgs } from \"@itwin/core-frontend\";\r\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, IconSpec, Orientation, UiStateStorage } from \"@itwin/core-react\";\r\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react\";\r\n\r\nimport { AccuDrawInputField } from \"./AccuDrawInputField\";\r\nimport { KeyboardShortcutManager } from \"../keyboardshortcut/KeyboardShortcut\";\r\nimport { AccuDrawSetCompassModeEventArgs, AccuDrawSetFieldFocusEventArgs, AccuDrawSetFieldLockEventArgs, FrameworkAccuDraw } from \"./FrameworkAccuDraw\";\r\nimport { AccuDrawUiSettings } from \"./AccuDrawUiSettings\";\r\n\r\nimport angleIconSvg from \"./angle.svg?sprite\";\r\nimport distanceIconSvg from \"./distance.svg?sprite\";\r\n\r\n/** Properties for [[AccuDrawFieldContainer]] component\r\n * @beta */\r\nexport interface AccuDrawFieldContainerProps extends CommonProps {\r\n /** Orientation of the fields */\r\n orientation: Orientation;\r\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\r\n uiSettingsStorage?: UiStateStorage;\r\n /** @internal */\r\n showZOverride?: boolean;\r\n}\r\n\r\nlet AccuDrawContainerIndex = 0;\r\n\r\nfunction determineShowZ(vp?: ScreenViewport): boolean {\r\n const showZ = (vp !== undefined) ? /* istanbul ignore next */ vp.view.is3d() : false;\r\n return showZ;\r\n}\r\n\r\nconst defaultXLabel = \"X\";\r\nconst defaultYLabel = \"Y\";\r\nconst defaultZLabel = \"Z\";\r\nconst defaultAngleIcon = IconSpecUtilities.createSvgIconSpec(angleIconSvg);\r\nconst defaultDistanceIcon = IconSpecUtilities.createSvgIconSpec(distanceIconSvg);\r\n\r\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\r\n * @beta */\r\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { className, style, orientation, uiSettingsStorage, showZOverride, ...otherProps } = props;\r\n\r\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\r\n const xInputRef = React.useRef<HTMLInputElement>(null);\r\n const yInputRef = React.useRef<HTMLInputElement>(null);\r\n const zInputRef = React.useRef<HTMLInputElement>(null);\r\n const angleInputRef = React.useRef<HTMLInputElement>(null);\r\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\r\n const focusField = React.useRef<ItemField | undefined>(undefined);\r\n const [mode, setMode] = React.useState(CompassMode.Rectangular);\r\n const [xLock, setXLock] = React.useState(false);\r\n const [yLock, setYLock] = React.useState(false);\r\n const [zLock, setZLock] = React.useState(false);\r\n const [angleLock, setAngleLock] = React.useState(false);\r\n const [distanceLock, setDistanceLock] = React.useState(false);\r\n const [showZ, setShowZ] = React.useState(true);\r\n const [xLabel, setXLabel] = React.useState<string | undefined>(defaultXLabel);\r\n const [yLabel, setYLabel] = React.useState<string | undefined>(defaultYLabel);\r\n const [zLabel, setZLabel] = React.useState<string | undefined>(defaultZLabel);\r\n const [angleLabel, setAngleLabel] = React.useState<string | undefined>(undefined);\r\n const [distanceLabel, setDistanceLabel] = React.useState<string | undefined>(undefined);\r\n const [xIcon, setXIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [yIcon, setYIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [zIcon, setZIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [angleIcon, setAngleIcon] = React.useState<IconSpec | undefined>(defaultAngleIcon);\r\n const [distanceIcon, setDistanceIcon] = React.useState<IconSpec | undefined>(defaultDistanceIcon);\r\n const [xStyle, setXStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [yStyle, setYStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [zStyle, setZStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [angleStyle, setAngleStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [distanceStyle, setDistanceStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n\r\n const getInputRef = (field: ItemField): React.RefObject<HTMLInputElement> => {\r\n let inputRef: React.RefObject<HTMLInputElement>;\r\n switch (field) {\r\n case ItemField.X_Item:\r\n inputRef = xInputRef;\r\n break;\r\n case ItemField.Y_Item:\r\n inputRef = yInputRef;\r\n break;\r\n case ItemField.Z_Item:\r\n inputRef = zInputRef;\r\n break;\r\n case ItemField.ANGLE_Item:\r\n inputRef = angleInputRef;\r\n break;\r\n case ItemField.DIST_Item:\r\n inputRef = distanceInputRef;\r\n break;\r\n }\r\n return inputRef;\r\n };\r\n\r\n React.useEffect(() => {\r\n setXLock(IModelApp.accuDraw.getFieldLock(ItemField.X_Item));\r\n setYLock(IModelApp.accuDraw.getFieldLock(ItemField.Y_Item));\r\n setZLock(IModelApp.accuDraw.getFieldLock(ItemField.Z_Item));\r\n setAngleLock(IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item));\r\n setDistanceLock(IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item));\r\n\r\n const handleSetFieldLock = (args: AccuDrawSetFieldLockEventArgs) => {\r\n switch (args.field) {\r\n case ItemField.X_Item:\r\n setXLock(args.lock);\r\n break;\r\n case ItemField.Y_Item:\r\n setYLock(args.lock);\r\n break;\r\n case ItemField.Z_Item:\r\n setZLock(args.lock);\r\n break;\r\n case ItemField.ANGLE_Item:\r\n setAngleLock(args.lock);\r\n break;\r\n case ItemField.DIST_Item:\r\n setDistanceLock(args.lock);\r\n break;\r\n }\r\n };\r\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener(handleSetFieldLock);\r\n }, []);\r\n\r\n const setFocusToField = React.useCallback((field: ItemField) => {\r\n const inputRef = getInputRef(field);\r\n\r\n // istanbul ignore else\r\n if (inputRef.current && document.activeElement !== inputRef.current) {\r\n inputRef.current.focus();\r\n inputRef.current.select();\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const handleSetFieldFocus = (args: AccuDrawSetFieldFocusEventArgs) => {\r\n focusField.current = args.field;\r\n setFocusToField(focusField.current);\r\n };\r\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(handleSetFieldFocus);\r\n }, [setFocusToField]);\r\n\r\n React.useEffect(() => {\r\n const handleGrabInputFocus = () => {\r\n // istanbul ignore else\r\n if (focusField.current)\r\n setFocusToField(focusField.current);\r\n };\r\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(handleGrabInputFocus);\r\n }, [setFocusToField]);\r\n\r\n React.useEffect(() => {\r\n setMode(IModelApp.accuDraw.compassMode);\r\n\r\n const handleSetMode = (args: AccuDrawSetCompassModeEventArgs) => {\r\n setMode(args.mode);\r\n };\r\n\r\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(handleSetMode);\r\n }, []);\r\n\r\n const handleValueChanged = React.useCallback((field: ItemField, stringValue: string) => {\r\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\r\n }, []);\r\n\r\n const handleEscPressed = React.useCallback(() => {\r\n KeyboardShortcutManager.setFocusToHome();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n setShowZ(showZOverride || determineShowZ(IModelApp.viewManager.selectedView));\r\n\r\n // istanbul ignore next\r\n const handleSelectedViewportChanged = (args: SelectedViewportChangedArgs) => {\r\n setShowZ(determineShowZ(args.current));\r\n };\r\n\r\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(handleSelectedViewportChanged);\r\n }, [showZOverride]);\r\n\r\n React.useEffect(() => {\r\n\r\n const createFieldStyle = (inStyle: React.CSSProperties | undefined,\r\n backgroundColor: ColorDef | string | undefined,\r\n foregroundColor: ColorDef | string | undefined): React.CSSProperties | undefined => {\r\n let fieldStyle: React.CSSProperties | undefined;\r\n let rgbaString = \"\";\r\n if (inStyle || backgroundColor || foregroundColor) {\r\n fieldStyle = inStyle ? inStyle : {};\r\n if (backgroundColor) {\r\n rgbaString = typeof backgroundColor === \"string\" ? backgroundColor : getCSSColorFromDef(backgroundColor);\r\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\r\n }\r\n if (foregroundColor) {\r\n rgbaString = typeof foregroundColor === \"string\" ? foregroundColor : getCSSColorFromDef(foregroundColor);\r\n fieldStyle = { ...fieldStyle, color: rgbaString };\r\n }\r\n }\r\n return fieldStyle;\r\n };\r\n\r\n const processAccuDrawUiSettings = (settings?: AccuDrawUiSettings) => {\r\n setXStyle(settings ? createFieldStyle(settings.xStyle, settings.xBackgroundColor, settings.xForegroundColor) : undefined);\r\n setYStyle(settings ? createFieldStyle(settings.yStyle, settings.yBackgroundColor, settings.yForegroundColor) : undefined);\r\n setZStyle(settings ? createFieldStyle(settings.zStyle, settings.zBackgroundColor, settings.zForegroundColor) : undefined);\r\n setAngleStyle(settings ? createFieldStyle(settings.angleStyle, settings.angleBackgroundColor, settings.angleForegroundColor) : undefined);\r\n setDistanceStyle(settings ? createFieldStyle(settings.distanceStyle, settings.distanceBackgroundColor, settings.distanceForegroundColor) : undefined);\r\n\r\n setXLabel(settings && settings.xLabel !== undefined ? settings.xLabel : defaultXLabel);\r\n setYLabel(settings && settings.yLabel !== undefined ? settings.yLabel : defaultYLabel);\r\n setZLabel(settings && settings.zLabel !== undefined ? settings.zLabel : defaultZLabel);\r\n setAngleLabel(settings && settings.angleLabel !== undefined ? settings.angleLabel : undefined);\r\n setDistanceLabel(settings && settings.distanceLabel !== undefined ? settings.distanceLabel : undefined);\r\n\r\n setXIcon(settings && settings.xIcon !== undefined ? settings.xIcon : undefined);\r\n setYIcon(settings && settings.yIcon !== undefined ? settings.yIcon : undefined);\r\n setZIcon(settings && settings.zIcon !== undefined ? settings.zIcon : undefined);\r\n setAngleIcon(settings && settings.angleIcon !== undefined ? settings.angleIcon : defaultAngleIcon);\r\n setDistanceIcon(settings && settings.distanceIcon !== undefined ? settings.distanceIcon : defaultDistanceIcon);\r\n };\r\n\r\n if (FrameworkAccuDraw.uiStateStorage)\r\n processAccuDrawUiSettings(FrameworkAccuDraw.uiStateStorage);\r\n\r\n // istanbul ignore next\r\n const handleAccuDrawUiSettingsChanged = () => {\r\n processAccuDrawUiSettings(FrameworkAccuDraw.uiStateStorage);\r\n };\r\n\r\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(handleAccuDrawUiSettingsChanged);\r\n }, []);\r\n\r\n const classNames = classnames(\r\n \"uifw-accudraw-field-container\",\r\n (orientation === Orientation.Vertical) ? \"uifw-accudraw-field-container-vertical\" : \"uifw-accudraw-field-container-horizontal\",\r\n className,\r\n );\r\n\r\n const delay = 250;\r\n const labelCentered = (xLabel !== undefined && xLabel.length === 1 && yLabel !== undefined && yLabel.length === 1 && zLabel !== undefined && zLabel.length === 1);\r\n\r\n return (\r\n <div className={classNames} style={style} {...otherProps}>\r\n {mode === CompassMode.Rectangular &&\r\n <>\r\n <AccuDrawInputField ref={xInputRef} isLocked={xLock} className=\"uifw-accudraw-x-value\" style={xStyle}\r\n field={ItemField.X_Item} id={`uifw-accudraw-x-${containerIndex}`} data-testid=\"uifw-accudraw-x\"\r\n label={xLabel} iconSpec={xIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.X_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n <AccuDrawInputField ref={yInputRef} isLocked={yLock} className=\"uifw-accudraw-y-value\" style={yStyle}\r\n field={ItemField.Y_Item} id={`uifw-accudraw-y-${containerIndex}`} data-testid=\"uifw-accudraw-y\"\r\n label={yLabel} iconSpec={yIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.Y_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n {showZ &&\r\n <AccuDrawInputField ref={zInputRef} isLocked={zLock} className=\"uifw-accudraw-z-value\" style={zStyle}\r\n field={ItemField.Z_Item} id={`uifw-accudraw-z-${containerIndex}`} data-testid=\"uifw-accudraw-z\"\r\n label={zLabel} iconSpec={zIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.Z_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n }\r\n </>\r\n }\r\n {mode === CompassMode.Polar &&\r\n <>\r\n <AccuDrawInputField ref={angleInputRef} isLocked={angleLock} className=\"uifw-accudraw-angle-value\" style={angleStyle}\r\n field={ItemField.ANGLE_Item} id={`uifw-accudraw-angle-${containerIndex}`} data-testid=\"uifw-accudraw-angle\"\r\n label={angleLabel} iconSpec={angleIcon}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.ANGLE_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n <AccuDrawInputField ref={distanceInputRef} isLocked={distanceLock} className=\"uifw-accudraw-distance-value\" style={distanceStyle}\r\n field={ItemField.DIST_Item} id={`uifw-accudraw-distance-${containerIndex}`} data-testid=\"uifw-accudraw-distance\"\r\n label={distanceLabel} iconSpec={distanceIcon}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.DIST_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n </>\r\n }\r\n </div>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"AccuDrawFieldContainer.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/AccuDrawFieldContainer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport \"./AccuDrawFieldContainer.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\nimport { CompassMode, IModelApp, ItemField, ScreenViewport, SelectedViewportChangedArgs } from \"@itwin/core-frontend\";\r\nimport { IconSpecUtilities } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, IconSpec, Orientation, UiStateStorage } from \"@itwin/core-react\";\r\nimport { getCSSColorFromDef } from \"@itwin/imodel-components-react\";\r\n\r\nimport { AccuDrawInputField } from \"./AccuDrawInputField\";\r\nimport { KeyboardShortcutManager } from \"../keyboardshortcut/KeyboardShortcut\";\r\nimport { AccuDrawSetCompassModeEventArgs, AccuDrawSetFieldFocusEventArgs, AccuDrawSetFieldLockEventArgs, FrameworkAccuDraw } from \"./FrameworkAccuDraw\";\r\nimport { AccuDrawUiSettings } from \"./AccuDrawUiSettings\";\r\n\r\nimport angleIconSvg from \"./angle.svg\";\r\nimport distanceIconSvg from \"./distance.svg\";\r\n\r\n/** Properties for [[AccuDrawFieldContainer]] component\r\n * @beta */\r\nexport interface AccuDrawFieldContainerProps extends CommonProps {\r\n /** Orientation of the fields */\r\n orientation: Orientation;\r\n /** Optional parameter for persistent UI settings. Defaults to LocalStateStorage. */\r\n uiSettingsStorage?: UiStateStorage;\r\n /** @internal */\r\n showZOverride?: boolean;\r\n}\r\n\r\nlet AccuDrawContainerIndex = 0;\r\n\r\nfunction determineShowZ(vp?: ScreenViewport): boolean {\r\n const showZ = (vp !== undefined) ? /* istanbul ignore next */ vp.view.is3d() : false;\r\n return showZ;\r\n}\r\n\r\nconst defaultXLabel = \"X\";\r\nconst defaultYLabel = \"Y\";\r\nconst defaultZLabel = \"Z\";\r\nconst defaultAngleIcon = IconSpecUtilities.createWebComponentIconSpec(angleIconSvg);\r\nconst defaultDistanceIcon = IconSpecUtilities.createWebComponentIconSpec(distanceIconSvg);\r\n\r\n/** AccuDraw Ui Field Container displays [[AccuDrawInputField]] for each field\r\n * @beta */\r\nexport function AccuDrawFieldContainer(props: AccuDrawFieldContainerProps) {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const { className, style, orientation, uiSettingsStorage, showZOverride, ...otherProps } = props;\r\n\r\n const [containerIndex] = React.useState(() => ++AccuDrawContainerIndex);\r\n const xInputRef = React.useRef<HTMLInputElement>(null);\r\n const yInputRef = React.useRef<HTMLInputElement>(null);\r\n const zInputRef = React.useRef<HTMLInputElement>(null);\r\n const angleInputRef = React.useRef<HTMLInputElement>(null);\r\n const distanceInputRef = React.useRef<HTMLInputElement>(null);\r\n const focusField = React.useRef<ItemField | undefined>(undefined);\r\n const [mode, setMode] = React.useState(CompassMode.Rectangular);\r\n const [xLock, setXLock] = React.useState(false);\r\n const [yLock, setYLock] = React.useState(false);\r\n const [zLock, setZLock] = React.useState(false);\r\n const [angleLock, setAngleLock] = React.useState(false);\r\n const [distanceLock, setDistanceLock] = React.useState(false);\r\n const [showZ, setShowZ] = React.useState(true);\r\n const [xLabel, setXLabel] = React.useState<string | undefined>(defaultXLabel);\r\n const [yLabel, setYLabel] = React.useState<string | undefined>(defaultYLabel);\r\n const [zLabel, setZLabel] = React.useState<string | undefined>(defaultZLabel);\r\n const [angleLabel, setAngleLabel] = React.useState<string | undefined>(undefined);\r\n const [distanceLabel, setDistanceLabel] = React.useState<string | undefined>(undefined);\r\n const [xIcon, setXIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [yIcon, setYIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [zIcon, setZIcon] = React.useState<IconSpec | undefined>(undefined);\r\n const [angleIcon, setAngleIcon] = React.useState<IconSpec | undefined>(defaultAngleIcon);\r\n const [distanceIcon, setDistanceIcon] = React.useState<IconSpec | undefined>(defaultDistanceIcon);\r\n const [xStyle, setXStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [yStyle, setYStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [zStyle, setZStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [angleStyle, setAngleStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n const [distanceStyle, setDistanceStyle] = React.useState<React.CSSProperties | undefined>(undefined);\r\n\r\n const getInputRef = (field: ItemField): React.RefObject<HTMLInputElement> => {\r\n let inputRef: React.RefObject<HTMLInputElement>;\r\n switch (field) {\r\n case ItemField.X_Item:\r\n inputRef = xInputRef;\r\n break;\r\n case ItemField.Y_Item:\r\n inputRef = yInputRef;\r\n break;\r\n case ItemField.Z_Item:\r\n inputRef = zInputRef;\r\n break;\r\n case ItemField.ANGLE_Item:\r\n inputRef = angleInputRef;\r\n break;\r\n case ItemField.DIST_Item:\r\n inputRef = distanceInputRef;\r\n break;\r\n }\r\n return inputRef;\r\n };\r\n\r\n React.useEffect(() => {\r\n setXLock(IModelApp.accuDraw.getFieldLock(ItemField.X_Item));\r\n setYLock(IModelApp.accuDraw.getFieldLock(ItemField.Y_Item));\r\n setZLock(IModelApp.accuDraw.getFieldLock(ItemField.Z_Item));\r\n setAngleLock(IModelApp.accuDraw.getFieldLock(ItemField.ANGLE_Item));\r\n setDistanceLock(IModelApp.accuDraw.getFieldLock(ItemField.DIST_Item));\r\n\r\n const handleSetFieldLock = (args: AccuDrawSetFieldLockEventArgs) => {\r\n switch (args.field) {\r\n case ItemField.X_Item:\r\n setXLock(args.lock);\r\n break;\r\n case ItemField.Y_Item:\r\n setYLock(args.lock);\r\n break;\r\n case ItemField.Z_Item:\r\n setZLock(args.lock);\r\n break;\r\n case ItemField.ANGLE_Item:\r\n setAngleLock(args.lock);\r\n break;\r\n case ItemField.DIST_Item:\r\n setDistanceLock(args.lock);\r\n break;\r\n }\r\n };\r\n return FrameworkAccuDraw.onAccuDrawSetFieldLockEvent.addListener(handleSetFieldLock);\r\n }, []);\r\n\r\n const setFocusToField = React.useCallback((field: ItemField) => {\r\n const inputRef = getInputRef(field);\r\n\r\n // istanbul ignore else\r\n if (inputRef.current && document.activeElement !== inputRef.current) {\r\n inputRef.current.focus();\r\n inputRef.current.select();\r\n }\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n const handleSetFieldFocus = (args: AccuDrawSetFieldFocusEventArgs) => {\r\n focusField.current = args.field;\r\n setFocusToField(focusField.current);\r\n };\r\n return FrameworkAccuDraw.onAccuDrawSetFieldFocusEvent.addListener(handleSetFieldFocus);\r\n }, [setFocusToField]);\r\n\r\n React.useEffect(() => {\r\n const handleGrabInputFocus = () => {\r\n // istanbul ignore else\r\n if (focusField.current)\r\n setFocusToField(focusField.current);\r\n };\r\n return FrameworkAccuDraw.onAccuDrawGrabInputFocusEvent.addListener(handleGrabInputFocus);\r\n }, [setFocusToField]);\r\n\r\n React.useEffect(() => {\r\n setMode(IModelApp.accuDraw.compassMode);\r\n\r\n const handleSetMode = (args: AccuDrawSetCompassModeEventArgs) => {\r\n setMode(args.mode);\r\n };\r\n\r\n return FrameworkAccuDraw.onAccuDrawSetCompassModeEvent.addListener(handleSetMode);\r\n }, []);\r\n\r\n const handleValueChanged = React.useCallback((field: ItemField, stringValue: string) => {\r\n FrameworkAccuDraw.setFieldValueFromUi(field, stringValue);\r\n }, []);\r\n\r\n const handleEscPressed = React.useCallback(() => {\r\n KeyboardShortcutManager.setFocusToHome();\r\n }, []);\r\n\r\n React.useEffect(() => {\r\n setShowZ(showZOverride || determineShowZ(IModelApp.viewManager.selectedView));\r\n\r\n // istanbul ignore next\r\n const handleSelectedViewportChanged = (args: SelectedViewportChangedArgs) => {\r\n setShowZ(determineShowZ(args.current));\r\n };\r\n\r\n return IModelApp.viewManager.onSelectedViewportChanged.addListener(handleSelectedViewportChanged);\r\n }, [showZOverride]);\r\n\r\n React.useEffect(() => {\r\n\r\n const createFieldStyle = (inStyle: React.CSSProperties | undefined,\r\n backgroundColor: ColorDef | string | undefined,\r\n foregroundColor: ColorDef | string | undefined): React.CSSProperties | undefined => {\r\n let fieldStyle: React.CSSProperties | undefined;\r\n let rgbaString = \"\";\r\n if (inStyle || backgroundColor || foregroundColor) {\r\n fieldStyle = inStyle ? inStyle : {};\r\n if (backgroundColor) {\r\n rgbaString = typeof backgroundColor === \"string\" ? backgroundColor : getCSSColorFromDef(backgroundColor);\r\n fieldStyle = { ...fieldStyle, backgroundColor: rgbaString };\r\n }\r\n if (foregroundColor) {\r\n rgbaString = typeof foregroundColor === \"string\" ? foregroundColor : getCSSColorFromDef(foregroundColor);\r\n fieldStyle = { ...fieldStyle, color: rgbaString };\r\n }\r\n }\r\n return fieldStyle;\r\n };\r\n\r\n const processAccuDrawUiSettings = (settings?: AccuDrawUiSettings) => {\r\n setXStyle(settings ? createFieldStyle(settings.xStyle, settings.xBackgroundColor, settings.xForegroundColor) : undefined);\r\n setYStyle(settings ? createFieldStyle(settings.yStyle, settings.yBackgroundColor, settings.yForegroundColor) : undefined);\r\n setZStyle(settings ? createFieldStyle(settings.zStyle, settings.zBackgroundColor, settings.zForegroundColor) : undefined);\r\n setAngleStyle(settings ? createFieldStyle(settings.angleStyle, settings.angleBackgroundColor, settings.angleForegroundColor) : undefined);\r\n setDistanceStyle(settings ? createFieldStyle(settings.distanceStyle, settings.distanceBackgroundColor, settings.distanceForegroundColor) : undefined);\r\n\r\n setXLabel(settings && settings.xLabel !== undefined ? settings.xLabel : defaultXLabel);\r\n setYLabel(settings && settings.yLabel !== undefined ? settings.yLabel : defaultYLabel);\r\n setZLabel(settings && settings.zLabel !== undefined ? settings.zLabel : defaultZLabel);\r\n setAngleLabel(settings && settings.angleLabel !== undefined ? settings.angleLabel : undefined);\r\n setDistanceLabel(settings && settings.distanceLabel !== undefined ? settings.distanceLabel : undefined);\r\n\r\n setXIcon(settings && settings.xIcon !== undefined ? settings.xIcon : undefined);\r\n setYIcon(settings && settings.yIcon !== undefined ? settings.yIcon : undefined);\r\n setZIcon(settings && settings.zIcon !== undefined ? settings.zIcon : undefined);\r\n setAngleIcon(settings && settings.angleIcon !== undefined ? settings.angleIcon : defaultAngleIcon);\r\n setDistanceIcon(settings && settings.distanceIcon !== undefined ? settings.distanceIcon : defaultDistanceIcon);\r\n };\r\n\r\n if (FrameworkAccuDraw.uiStateStorage)\r\n processAccuDrawUiSettings(FrameworkAccuDraw.uiStateStorage);\r\n\r\n // istanbul ignore next\r\n const handleAccuDrawUiSettingsChanged = () => {\r\n processAccuDrawUiSettings(FrameworkAccuDraw.uiStateStorage);\r\n };\r\n\r\n return FrameworkAccuDraw.onAccuDrawUiSettingsChangedEvent.addListener(handleAccuDrawUiSettingsChanged);\r\n }, []);\r\n\r\n const classNames = classnames(\r\n \"uifw-accudraw-field-container\",\r\n (orientation === Orientation.Vertical) ? \"uifw-accudraw-field-container-vertical\" : \"uifw-accudraw-field-container-horizontal\",\r\n className,\r\n );\r\n\r\n const delay = 250;\r\n const labelCentered = (xLabel !== undefined && xLabel.length === 1 && yLabel !== undefined && yLabel.length === 1 && zLabel !== undefined && zLabel.length === 1);\r\n\r\n return (\r\n <div className={classNames} style={style} {...otherProps}>\r\n {mode === CompassMode.Rectangular &&\r\n <>\r\n <AccuDrawInputField ref={xInputRef} isLocked={xLock} className=\"uifw-accudraw-x-value\" style={xStyle}\r\n field={ItemField.X_Item} id={`uifw-accudraw-x-${containerIndex}`} data-testid=\"uifw-accudraw-x\"\r\n label={xLabel} iconSpec={xIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.X_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n <AccuDrawInputField ref={yInputRef} isLocked={yLock} className=\"uifw-accudraw-y-value\" style={yStyle}\r\n field={ItemField.Y_Item} id={`uifw-accudraw-y-${containerIndex}`} data-testid=\"uifw-accudraw-y\"\r\n label={yLabel} iconSpec={yIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.Y_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n {showZ &&\r\n <AccuDrawInputField ref={zInputRef} isLocked={zLock} className=\"uifw-accudraw-z-value\" style={zStyle}\r\n field={ItemField.Z_Item} id={`uifw-accudraw-z-${containerIndex}`} data-testid=\"uifw-accudraw-z\"\r\n label={zLabel} iconSpec={zIcon} labelCentered={labelCentered}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.Z_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n }\r\n </>\r\n }\r\n {mode === CompassMode.Polar &&\r\n <>\r\n <AccuDrawInputField ref={angleInputRef} isLocked={angleLock} className=\"uifw-accudraw-angle-value\" style={angleStyle}\r\n field={ItemField.ANGLE_Item} id={`uifw-accudraw-angle-${containerIndex}`} data-testid=\"uifw-accudraw-angle\"\r\n label={angleLabel} iconSpec={angleIcon}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.ANGLE_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n <AccuDrawInputField ref={distanceInputRef} isLocked={distanceLock} className=\"uifw-accudraw-distance-value\" style={distanceStyle}\r\n field={ItemField.DIST_Item} id={`uifw-accudraw-distance-${containerIndex}`} data-testid=\"uifw-accudraw-distance\"\r\n label={distanceLabel} iconSpec={distanceIcon}\r\n valueChangedDelay={delay} onValueChanged={(stringValue) => handleValueChanged(ItemField.DIST_Item, stringValue)}\r\n onEscPressed={handleEscPressed} />\r\n </>\r\n }\r\n </div>\r\n );\r\n}\r\n"]}
@@ -12,9 +12,9 @@ import { PopupManager } from "../popup/PopupManager";
12
12
  import { MenuItemHelpers } from "../shared/MenuItem";
13
13
  import { CalculatorPopup } from "./CalculatorPopup";
14
14
  import { MenuButtonPopup } from "./MenuButtonPopup";
15
- import angleIcon from "./angle.svg?sprite";
16
- import lengthIcon from "./distance.svg?sprite";
17
- import heightIcon from "./height-2.svg?sprite";
15
+ import angleIcon from "./angle.svg";
16
+ import lengthIcon from "./distance.svg";
17
+ import heightIcon from "./height-2.svg";
18
18
  /** AccuDraw Popup Manager class
19
19
  * @alpha
20
20
  */
@@ -45,15 +45,15 @@ export class AccuDrawPopupManager {
45
45
  return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);
46
46
  }
47
47
  static showAngleEditor(el, pt, value, onCommit, onCancel) {
48
- const propertyDescription = new AngleDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(angleIcon));
48
+ const propertyDescription = new AngleDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(angleIcon));
49
49
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
50
50
  }
51
51
  static showLengthEditor(el, pt, value, onCommit, onCancel) {
52
- const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(lengthIcon));
52
+ const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(lengthIcon));
53
53
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
54
54
  }
55
55
  static showHeightEditor(el, pt, value, onCommit, onCancel) {
56
- const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(heightIcon));
56
+ const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(heightIcon));
57
57
  return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit, onCancel);
58
58
  }
59
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AccuDrawPopupManager.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { XAndY } from \"@itwin/core-geometry\";\r\nimport { AngleDescription, LengthDescription } from \"@itwin/core-frontend\";\r\nimport { AbstractMenuItemProps, IconSpecUtilities, OnCancelFunc, OnNumberCommitFunc, OnValueCommitFunc } from \"@itwin/appui-abstract\";\r\n\r\nimport { PopupInfo, PopupManager } from \"../popup/PopupManager\";\r\nimport { MenuItemHelpers } from \"../shared/MenuItem\";\r\nimport { CalculatorPopup } from \"./CalculatorPopup\";\r\nimport { MenuButtonPopup } from \"./MenuButtonPopup\";\r\n\r\nimport angleIcon from \"./angle.svg?sprite\";\r\nimport lengthIcon from \"./distance.svg?sprite\";\r\nimport heightIcon from \"./height-2.svg?sprite\";\r\n\r\n/** AccuDraw Popup Manager class\r\n * @alpha\r\n */\r\nexport class AccuDrawPopupManager {\r\n private static _calculatorId = \"Calculator\";\r\n\r\n public static showMenuButton(id: string, el: HTMLElement, pt: XAndY, menuItemsProps: AbstractMenuItemProps[]): boolean {\r\n const menuItems = MenuItemHelpers.createMenuItems(menuItemsProps);\r\n const menuContent = MenuItemHelpers.createMenuItemNodes(menuItems);\r\n\r\n const component = (\r\n <MenuButtonPopup id={id} el={el} pt={pt} offset={PopupManager.defaultOffset}\r\n content={menuContent} />\r\n );\r\n\r\n const popupInfo: PopupInfo = {\r\n id, pt, component, parentDocument: el.ownerDocument,\r\n };\r\n PopupManager.addOrUpdatePopup(popupInfo);\r\n\r\n return true;\r\n }\r\n\r\n public static hideMenuButton(id: string): boolean {\r\n return PopupManager.removePopup(id);\r\n }\r\n\r\n public static showCalculator(el: HTMLElement, pt: XAndY, initialValue: number, resultIcon: string, onOk: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const id = AccuDrawPopupManager._calculatorId;\r\n const component = (\r\n <CalculatorPopup id={id} el={el} pt={pt} offset={PopupManager.defaultOffset}\r\n initialValue={initialValue} resultIcon={resultIcon} onOk={onOk} onCancel={onCancel} />\r\n );\r\n\r\n const popupInfo: PopupInfo = {\r\n id, pt, component, parentDocument: el.ownerDocument,\r\n };\r\n PopupManager.addOrUpdatePopup(popupInfo);\r\n\r\n return true;\r\n }\r\n\r\n public static hideCalculator(): boolean {\r\n return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);\r\n }\r\n\r\n public static showAngleEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new AngleDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(angleIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n\r\n public static showLengthEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(lengthIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n\r\n public static showHeightEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createSvgIconSpec(heightIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AccuDrawPopupManager.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/AccuDrawPopupManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { XAndY } from \"@itwin/core-geometry\";\r\nimport { AngleDescription, LengthDescription } from \"@itwin/core-frontend\";\r\nimport { AbstractMenuItemProps, IconSpecUtilities, OnCancelFunc, OnNumberCommitFunc, OnValueCommitFunc } from \"@itwin/appui-abstract\";\r\n\r\nimport { PopupInfo, PopupManager } from \"../popup/PopupManager\";\r\nimport { MenuItemHelpers } from \"../shared/MenuItem\";\r\nimport { CalculatorPopup } from \"./CalculatorPopup\";\r\nimport { MenuButtonPopup } from \"./MenuButtonPopup\";\r\n\r\nimport angleIcon from \"./angle.svg\";\r\nimport lengthIcon from \"./distance.svg\";\r\nimport heightIcon from \"./height-2.svg\";\r\n\r\n/** AccuDraw Popup Manager class\r\n * @alpha\r\n */\r\nexport class AccuDrawPopupManager {\r\n private static _calculatorId = \"Calculator\";\r\n\r\n public static showMenuButton(id: string, el: HTMLElement, pt: XAndY, menuItemsProps: AbstractMenuItemProps[]): boolean {\r\n const menuItems = MenuItemHelpers.createMenuItems(menuItemsProps);\r\n const menuContent = MenuItemHelpers.createMenuItemNodes(menuItems);\r\n\r\n const component = (\r\n <MenuButtonPopup id={id} el={el} pt={pt} offset={PopupManager.defaultOffset}\r\n content={menuContent} />\r\n );\r\n\r\n const popupInfo: PopupInfo = {\r\n id, pt, component, parentDocument: el.ownerDocument,\r\n };\r\n PopupManager.addOrUpdatePopup(popupInfo);\r\n\r\n return true;\r\n }\r\n\r\n public static hideMenuButton(id: string): boolean {\r\n return PopupManager.removePopup(id);\r\n }\r\n\r\n public static showCalculator(el: HTMLElement, pt: XAndY, initialValue: number, resultIcon: string, onOk: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const id = AccuDrawPopupManager._calculatorId;\r\n const component = (\r\n <CalculatorPopup id={id} el={el} pt={pt} offset={PopupManager.defaultOffset}\r\n initialValue={initialValue} resultIcon={resultIcon} onOk={onOk} onCancel={onCancel} />\r\n );\r\n\r\n const popupInfo: PopupInfo = {\r\n id, pt, component, parentDocument: el.ownerDocument,\r\n };\r\n PopupManager.addOrUpdatePopup(popupInfo);\r\n\r\n return true;\r\n }\r\n\r\n public static hideCalculator(): boolean {\r\n return PopupManager.removePopup(AccuDrawPopupManager._calculatorId);\r\n }\r\n\r\n public static showAngleEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new AngleDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(angleIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n\r\n public static showLengthEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(lengthIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n\r\n public static showHeightEditor(el: HTMLElement, pt: XAndY, value: number, onCommit: OnNumberCommitFunc, onCancel: OnCancelFunc): boolean {\r\n const propertyDescription = new LengthDescription(undefined, undefined, IconSpecUtilities.createWebComponentIconSpec(heightIcon));\r\n return PopupManager.showInputEditor(el, pt, value, propertyDescription, onCommit as OnValueCommitFunc, onCancel);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Calculator.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mBAAmB,CAAC;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAc,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAoC,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAO1E,aAAa;AACb,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,yDAAyD;IACzD,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,2CAA2C;IAC3C,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gBAAgB;AAChB,oBAAY,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAEnE,aAAa;AACb,qBAAa,UAAW,SAAQ,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,eAAe,CAAC;IACnF,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,cAAc,CAAS;IAE/B,gBAAgB;IAChB,gBAAuB,YAAY,EAAE,oBAAoB,CAEvD;gBAEU,KAAK,EAAE,eAAe;IAYlC,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,sBAAsB,CAY5B;IAEF,OAAO,CAAC,SAAS,CAEf;IAEF,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,SAAS;IAKD,iBAAiB;IAIjC,OAAO,CAAC,aAAa;IAKL,MAAM;IAwCtB,OAAO,CAAC,cAAc,CA0DpB;CAEH"}
1
+ {"version":3,"file":"Calculator.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,mBAAmB,CAAC;AAE3B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAqB,YAAY,EAAE,kBAAkB,EAAc,MAAM,uBAAuB,CAAC;AACxG,OAAO,EAAE,WAAW,EAAyB,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAsB,MAAM,oBAAoB,CAAC;AAO1E,aAAa;AACb,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,oBAAoB;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,yDAAyD;IACzD,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,YAAY,CAAC;IAExB,2CAA2C;IAC3C,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,gBAAgB;AAChB,oBAAY,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;AAEnE,aAAa;AACb,qBAAa,UAAW,SAAQ,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE,eAAe,CAAC;IACnF,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,cAAc,CAAS;IAE/B,gBAAgB;IAChB,gBAAuB,YAAY,EAAE,oBAAoB,CAEvD;gBAEU,KAAK,EAAE,eAAe;IAYlC,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,sBAAsB,CAY5B;IAEF,OAAO,CAAC,SAAS,CAEf;IAEF,OAAO,CAAC,GAAG;IAQX,OAAO,CAAC,aAAa,CAEnB;IAEF,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,SAAS;IAKD,iBAAiB;IAIjC,OAAO,CAAC,aAAa;IAKL,MAAM;IAwCtB,OAAO,CAAC,cAAc,CA0DpB;CAEH"}
@@ -8,12 +8,12 @@
8
8
  import "./Calculator.scss";
9
9
  import classnames from "classnames";
10
10
  import * as React from "react";
11
- import { SpecialKey } from "@itwin/appui-abstract";
12
- import { Icon, IconInput, SvgSprite } from "@itwin/core-react";
11
+ import { IconSpecUtilities, SpecialKey } from "@itwin/appui-abstract";
12
+ import { Icon, IconInput } from "@itwin/core-react";
13
13
  import { Button, Input } from "@itwin/itwinui-react";
14
14
  import { CalculatorEngine, CalculatorOperator } from "./CalculatorEngine";
15
15
  import { SquareButton } from "./SquareButton";
16
- import backspaceIcon from "./backspace.svg?sprite";
16
+ import backspaceIcon from "./backspace.svg";
17
17
  /** @alpha */
18
18
  export class Calculator extends React.PureComponent {
19
19
  constructor(props) {
@@ -158,12 +158,13 @@ Calculator.defaultProps = {
158
158
  };
159
159
  class CalculatorKeyPad extends React.PureComponent {
160
160
  render() {
161
+ const iconSpec = IconSpecUtilities.createWebComponentIconSpec(backspaceIcon);
161
162
  return (React.createElement("div", { className: classnames("uifw-calculator-button-grid") },
162
163
  React.createElement(OperatorButton, { operator: CalculatorOperator.ClearAll, onClick: this.props.onOperatorClick }, "AC"),
163
164
  React.createElement(OperatorButton, { operator: CalculatorOperator.Clear, onClick: this.props.onOperatorClick }, "C"),
164
165
  React.createElement(OperatorButton, { operator: CalculatorOperator.Backspace, onClick: this.props.onOperatorClick },
165
166
  React.createElement("div", { className: "uifw-calculator-button-svg" },
166
- React.createElement(SvgSprite, { src: backspaceIcon }))),
167
+ React.createElement(Icon, { iconSpec: iconSpec }))),
167
168
  React.createElement(OperatorButton, { operator: CalculatorOperator.Divide, onClick: this.props.onOperatorClick, className: "uifw-calculator-large-font" }, "\u00F7"),
168
169
  React.createElement(ValueButton, { keyChar: "7", onClick: this.props.onValueClick }),
169
170
  React.createElement(ValueButton, { keyChar: "8", onClick: this.props.onValueClick }),
@@ -1 +1 @@
1
- {"version":3,"file":"Calculator.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport \"./Calculator.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { OnCancelFunc, OnNumberCommitFunc, SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, Icon, IconInput, Omit, SvgSprite } from \"@itwin/core-react\";\r\nimport { Button, Input } from \"@itwin/itwinui-react\";\r\nimport { CalculatorEngine, CalculatorOperator } from \"./CalculatorEngine\";\r\nimport { SquareButton, SquareButtonProps } from \"./SquareButton\";\r\n\r\nimport backspaceIcon from \"./backspace.svg?sprite\";\r\n\r\n// cSpell:ignore plusmn\r\n\r\n/** @alpha */\r\nexport interface CalculatorProps extends CommonProps {\r\n /** Initial value */\r\n initialValue?: number;\r\n /** Icon to display beside the calculated result */\r\n resultIcon?: React.ReactNode;\r\n /** A function to be run when the OK button is clicked */\r\n onOk?: OnNumberCommitFunc;\r\n /** A function to be run when the Cancel button is clicked */\r\n onCancel?: OnCancelFunc;\r\n\r\n /** @internal Calculator state machine. */\r\n engine: CalculatorEngine;\r\n}\r\n\r\ninterface CalculatorState {\r\n displayValue: string;\r\n}\r\n\r\n/** @internal */\r\nexport type CalculatorPropsProps = Pick<CalculatorProps, \"engine\">;\r\n\r\n/** @alpha */\r\nexport class Calculator extends React.PureComponent<CalculatorProps, CalculatorState> {\r\n private _mainDiv = React.createRef<HTMLDivElement>();\r\n private _equalsClicked = false;\r\n\r\n /** @internal */\r\n public static readonly defaultProps: CalculatorPropsProps = {\r\n engine: new CalculatorEngine(),\r\n };\r\n\r\n constructor(props: CalculatorProps) {\r\n super(props);\r\n\r\n let displayValue = \"0\";\r\n if (this.props.initialValue)\r\n displayValue = this.props.engine.processValue(this.props.initialValue.toString());\r\n\r\n this.state = {\r\n displayValue,\r\n };\r\n }\r\n\r\n private _onValueButtonClick = (keyChar: string) => {\r\n const displayValue = this.props.engine.processValue(keyChar);\r\n this._mainDivFocus();\r\n this.setState({ displayValue });\r\n };\r\n\r\n private _onOperatorButtonClick = (operator: CalculatorOperator) => {\r\n if (operator === CalculatorOperator.Clear && this._equalsClicked)\r\n operator = CalculatorOperator.ClearAll;\r\n\r\n const displayValue = this.props.engine.processOperator(operator);\r\n this._mainDivFocus();\r\n this.setState({ displayValue });\r\n\r\n if (operator === CalculatorOperator.Equals)\r\n this._equalsClicked = true;\r\n else if (operator === CalculatorOperator.ClearAll)\r\n this._equalsClicked = false;\r\n };\r\n\r\n private _handleOk = (_event: React.MouseEvent): void => {\r\n this._ok();\r\n };\r\n\r\n private _ok() {\r\n // istanbul ignore else\r\n if (this.props.onOk) {\r\n this.props.onOk(this.props.engine.result);\r\n }\r\n this._clearAll();\r\n }\r\n\r\n private _handleCancel = (_event: React.MouseEvent): void => {\r\n this._cancel();\r\n };\r\n\r\n private _cancel() {\r\n // istanbul ignore else\r\n if (this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n this._clearAll();\r\n }\r\n\r\n private _clearAll() {\r\n this.props.engine.clearAll();\r\n this._equalsClicked = false;\r\n }\r\n\r\n public override componentDidMount() {\r\n this._mainDivFocus();\r\n }\r\n\r\n private _mainDivFocus() {\r\n if (this._mainDiv.current)\r\n this._mainDiv.current.focus();\r\n }\r\n\r\n public override render() {\r\n const { className, resultIcon, onOk, onCancel, initialValue, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const classNames = classnames(\r\n \"uifw-calculator\",\r\n className,\r\n );\r\n\r\n const topSection = this.props.resultIcon ?\r\n <IconInput containerClassName=\"uifw-calculator-top-input\"\r\n value={this.state.displayValue} readOnly={true} icon={this.props.resultIcon} /> :\r\n <Input value={this.state.displayValue} readOnly={true} size=\"small\" />;\r\n\r\n return (\r\n // The event handler is only being used to capture bubbled events\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n <div {...props} ref={this._mainDiv} tabIndex={-1} className={classNames} onKeyDown={this._handleKeyDown}>\r\n <div className=\"uifw-calculator-top\">\r\n {topSection}\r\n </div>\r\n <CalculatorKeyPad onValueClick={this._onValueButtonClick} onOperatorClick={this._onOperatorButtonClick} />\r\n <div className=\"uifw-calculator-bottom-buttons\">\r\n <Button\r\n className={classnames(\"uifw-calculator-large-button\", \"uifw-calculator-ok-button\")}\r\n styleType=\"cta\"\r\n onClick={this._handleOk}\r\n >\r\n <Icon iconSpec=\"icon-checkmark\" />\r\n </Button>\r\n <Button\r\n className={classnames(\"uifw-calculator-large-button\", \"uifw-calculator-cancel-button\")}\r\n onClick={this._handleCancel}\r\n >\r\n <Icon iconSpec=\"icon-remove\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private _handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\r\n switch (event.key) {\r\n case \"0\":\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n case \"4\":\r\n case \"5\":\r\n case \"6\":\r\n case \"7\":\r\n case \"8\":\r\n case \"9\":\r\n this._onValueButtonClick(event.key);\r\n break;\r\n case \"a\":\r\n case \"A\":\r\n this._onOperatorButtonClick(CalculatorOperator.ClearAll);\r\n break;\r\n case \"c\":\r\n case \"C\":\r\n case SpecialKey.Clear:\r\n this._onOperatorButtonClick(CalculatorOperator.Clear);\r\n break;\r\n case SpecialKey.Escape:\r\n this._cancel();\r\n break;\r\n case SpecialKey.Backspace:\r\n this._onOperatorButtonClick(CalculatorOperator.Backspace);\r\n break;\r\n case \"/\":\r\n case SpecialKey.Divide:\r\n this._onOperatorButtonClick(CalculatorOperator.Divide);\r\n break;\r\n case \"*\":\r\n case SpecialKey.Multiply:\r\n this._onOperatorButtonClick(CalculatorOperator.Multiply);\r\n break;\r\n case \"-\":\r\n case SpecialKey.Subtract:\r\n this._onOperatorButtonClick(CalculatorOperator.Subtract);\r\n break;\r\n case \"+\":\r\n case SpecialKey.Add:\r\n this._onOperatorButtonClick(CalculatorOperator.Add);\r\n break;\r\n case \".\":\r\n case SpecialKey.Decimal:\r\n this._onOperatorButtonClick(CalculatorOperator.Decimal);\r\n break;\r\n case \"=\":\r\n this._onOperatorButtonClick(CalculatorOperator.Equals);\r\n break;\r\n case SpecialKey.Enter:\r\n if (!this._equalsClicked)\r\n this._onOperatorButtonClick(CalculatorOperator.Equals);\r\n this._ok();\r\n break;\r\n }\r\n };\r\n\r\n}\r\n\r\ninterface CalculatorKeyPadProps extends CommonProps {\r\n /** A function to be run when a value is clicked */\r\n onValueClick: (key: string) => void;\r\n /** A function to be run when a value is clicked */\r\n onOperatorClick: (operator: CalculatorOperator) => void;\r\n}\r\n\r\nclass CalculatorKeyPad extends React.PureComponent<CalculatorKeyPadProps> {\r\n public override render() {\r\n\r\n return (\r\n <div className={classnames(\"uifw-calculator-button-grid\")}>\r\n <OperatorButton operator={CalculatorOperator.ClearAll} onClick={this.props.onOperatorClick}>AC</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Clear} onClick={this.props.onOperatorClick}>C</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Backspace} onClick={this.props.onOperatorClick}>\r\n <div className=\"uifw-calculator-button-svg\">\r\n <SvgSprite src={backspaceIcon} />\r\n </div>\r\n </OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Divide} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&divide;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"7\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"8\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"9\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Multiply} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&times;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"4\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"5\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"6\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Subtract} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&minus;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"1\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"2\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"3\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Add} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&#43;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"0\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.NegPos} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&plusmn;</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Decimal} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">.</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Equals} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&#61;</OperatorButton>\r\n <span />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\ninterface ValueButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\r\n /** Key to display */\r\n keyChar: string;\r\n /** A function to be run when the element is clicked */\r\n onClick: (key: string) => void;\r\n}\r\n\r\nclass ValueButton extends React.PureComponent<ValueButtonProps> {\r\n\r\n private _handleOnClick = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\r\n this.props.onClick(this.props.keyChar);\r\n };\r\n\r\n public override render() {\r\n const { className, keyChar, onClick, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const itemClassNames = classnames(\r\n \"uifw-calculator-item\",\r\n className,\r\n );\r\n\r\n return (\r\n <SquareButton {...props} className={itemClassNames} onClick={this._handleOnClick} >\r\n {keyChar}\r\n </SquareButton >\r\n );\r\n }\r\n}\r\n\r\ninterface OperatorButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\r\n /** Key to display */\r\n operator: CalculatorOperator;\r\n /** A function to be run when the element is clicked */\r\n onClick: (operator: CalculatorOperator) => void;\r\n}\r\n\r\nclass OperatorButton extends React.PureComponent<OperatorButtonProps> {\r\n\r\n private _handleOnClick = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\r\n this.props.onClick(this.props.operator);\r\n };\r\n\r\n public override render() {\r\n const { className, children, operator, onClick, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const itemClassNames = classnames(\r\n \"uifw-calculator-item\",\r\n className,\r\n );\r\n\r\n return (\r\n <SquareButton {...props} className={itemClassNames} onClick={this._handleOnClick}>\r\n {children}\r\n </SquareButton>\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Calculator.js","sourceRoot":"","sources":["../../../../src/appui-react/accudraw/Calculator.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccuDraw\r\n */\r\n\r\nimport \"./Calculator.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { IconSpecUtilities, OnCancelFunc, OnNumberCommitFunc, SpecialKey } from \"@itwin/appui-abstract\";\r\nimport { CommonProps, Icon, IconInput, Omit } from \"@itwin/core-react\";\r\nimport { Button, Input } from \"@itwin/itwinui-react\";\r\nimport { CalculatorEngine, CalculatorOperator } from \"./CalculatorEngine\";\r\nimport { SquareButton, SquareButtonProps } from \"./SquareButton\";\r\n\r\nimport backspaceIcon from \"./backspace.svg\";\r\n\r\n// cSpell:ignore plusmn\r\n\r\n/** @alpha */\r\nexport interface CalculatorProps extends CommonProps {\r\n /** Initial value */\r\n initialValue?: number;\r\n /** Icon to display beside the calculated result */\r\n resultIcon?: React.ReactNode;\r\n /** A function to be run when the OK button is clicked */\r\n onOk?: OnNumberCommitFunc;\r\n /** A function to be run when the Cancel button is clicked */\r\n onCancel?: OnCancelFunc;\r\n\r\n /** @internal Calculator state machine. */\r\n engine: CalculatorEngine;\r\n}\r\n\r\ninterface CalculatorState {\r\n displayValue: string;\r\n}\r\n\r\n/** @internal */\r\nexport type CalculatorPropsProps = Pick<CalculatorProps, \"engine\">;\r\n\r\n/** @alpha */\r\nexport class Calculator extends React.PureComponent<CalculatorProps, CalculatorState> {\r\n private _mainDiv = React.createRef<HTMLDivElement>();\r\n private _equalsClicked = false;\r\n\r\n /** @internal */\r\n public static readonly defaultProps: CalculatorPropsProps = {\r\n engine: new CalculatorEngine(),\r\n };\r\n\r\n constructor(props: CalculatorProps) {\r\n super(props);\r\n\r\n let displayValue = \"0\";\r\n if (this.props.initialValue)\r\n displayValue = this.props.engine.processValue(this.props.initialValue.toString());\r\n\r\n this.state = {\r\n displayValue,\r\n };\r\n }\r\n\r\n private _onValueButtonClick = (keyChar: string) => {\r\n const displayValue = this.props.engine.processValue(keyChar);\r\n this._mainDivFocus();\r\n this.setState({ displayValue });\r\n };\r\n\r\n private _onOperatorButtonClick = (operator: CalculatorOperator) => {\r\n if (operator === CalculatorOperator.Clear && this._equalsClicked)\r\n operator = CalculatorOperator.ClearAll;\r\n\r\n const displayValue = this.props.engine.processOperator(operator);\r\n this._mainDivFocus();\r\n this.setState({ displayValue });\r\n\r\n if (operator === CalculatorOperator.Equals)\r\n this._equalsClicked = true;\r\n else if (operator === CalculatorOperator.ClearAll)\r\n this._equalsClicked = false;\r\n };\r\n\r\n private _handleOk = (_event: React.MouseEvent): void => {\r\n this._ok();\r\n };\r\n\r\n private _ok() {\r\n // istanbul ignore else\r\n if (this.props.onOk) {\r\n this.props.onOk(this.props.engine.result);\r\n }\r\n this._clearAll();\r\n }\r\n\r\n private _handleCancel = (_event: React.MouseEvent): void => {\r\n this._cancel();\r\n };\r\n\r\n private _cancel() {\r\n // istanbul ignore else\r\n if (this.props.onCancel) {\r\n this.props.onCancel();\r\n }\r\n this._clearAll();\r\n }\r\n\r\n private _clearAll() {\r\n this.props.engine.clearAll();\r\n this._equalsClicked = false;\r\n }\r\n\r\n public override componentDidMount() {\r\n this._mainDivFocus();\r\n }\r\n\r\n private _mainDivFocus() {\r\n if (this._mainDiv.current)\r\n this._mainDiv.current.focus();\r\n }\r\n\r\n public override render() {\r\n const { className, resultIcon, onOk, onCancel, initialValue, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const classNames = classnames(\r\n \"uifw-calculator\",\r\n className,\r\n );\r\n\r\n const topSection = this.props.resultIcon ?\r\n <IconInput containerClassName=\"uifw-calculator-top-input\"\r\n value={this.state.displayValue} readOnly={true} icon={this.props.resultIcon} /> :\r\n <Input value={this.state.displayValue} readOnly={true} size=\"small\" />;\r\n\r\n return (\r\n // The event handler is only being used to capture bubbled events\r\n // eslint-disable-next-line jsx-a11y/no-static-element-interactions\r\n <div {...props} ref={this._mainDiv} tabIndex={-1} className={classNames} onKeyDown={this._handleKeyDown}>\r\n <div className=\"uifw-calculator-top\">\r\n {topSection}\r\n </div>\r\n <CalculatorKeyPad onValueClick={this._onValueButtonClick} onOperatorClick={this._onOperatorButtonClick} />\r\n <div className=\"uifw-calculator-bottom-buttons\">\r\n <Button\r\n className={classnames(\"uifw-calculator-large-button\", \"uifw-calculator-ok-button\")}\r\n styleType=\"cta\"\r\n onClick={this._handleOk}\r\n >\r\n <Icon iconSpec=\"icon-checkmark\" />\r\n </Button>\r\n <Button\r\n className={classnames(\"uifw-calculator-large-button\", \"uifw-calculator-cancel-button\")}\r\n onClick={this._handleCancel}\r\n >\r\n <Icon iconSpec=\"icon-remove\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private _handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {\r\n switch (event.key) {\r\n case \"0\":\r\n case \"1\":\r\n case \"2\":\r\n case \"3\":\r\n case \"4\":\r\n case \"5\":\r\n case \"6\":\r\n case \"7\":\r\n case \"8\":\r\n case \"9\":\r\n this._onValueButtonClick(event.key);\r\n break;\r\n case \"a\":\r\n case \"A\":\r\n this._onOperatorButtonClick(CalculatorOperator.ClearAll);\r\n break;\r\n case \"c\":\r\n case \"C\":\r\n case SpecialKey.Clear:\r\n this._onOperatorButtonClick(CalculatorOperator.Clear);\r\n break;\r\n case SpecialKey.Escape:\r\n this._cancel();\r\n break;\r\n case SpecialKey.Backspace:\r\n this._onOperatorButtonClick(CalculatorOperator.Backspace);\r\n break;\r\n case \"/\":\r\n case SpecialKey.Divide:\r\n this._onOperatorButtonClick(CalculatorOperator.Divide);\r\n break;\r\n case \"*\":\r\n case SpecialKey.Multiply:\r\n this._onOperatorButtonClick(CalculatorOperator.Multiply);\r\n break;\r\n case \"-\":\r\n case SpecialKey.Subtract:\r\n this._onOperatorButtonClick(CalculatorOperator.Subtract);\r\n break;\r\n case \"+\":\r\n case SpecialKey.Add:\r\n this._onOperatorButtonClick(CalculatorOperator.Add);\r\n break;\r\n case \".\":\r\n case SpecialKey.Decimal:\r\n this._onOperatorButtonClick(CalculatorOperator.Decimal);\r\n break;\r\n case \"=\":\r\n this._onOperatorButtonClick(CalculatorOperator.Equals);\r\n break;\r\n case SpecialKey.Enter:\r\n if (!this._equalsClicked)\r\n this._onOperatorButtonClick(CalculatorOperator.Equals);\r\n this._ok();\r\n break;\r\n }\r\n };\r\n\r\n}\r\n\r\ninterface CalculatorKeyPadProps extends CommonProps {\r\n /** A function to be run when a value is clicked */\r\n onValueClick: (key: string) => void;\r\n /** A function to be run when a value is clicked */\r\n onOperatorClick: (operator: CalculatorOperator) => void;\r\n}\r\n\r\nclass CalculatorKeyPad extends React.PureComponent<CalculatorKeyPadProps> {\r\n public override render() {\r\n const iconSpec = IconSpecUtilities.createWebComponentIconSpec(backspaceIcon);\r\n\r\n return (\r\n <div className={classnames(\"uifw-calculator-button-grid\")}>\r\n <OperatorButton operator={CalculatorOperator.ClearAll} onClick={this.props.onOperatorClick}>AC</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Clear} onClick={this.props.onOperatorClick}>C</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Backspace} onClick={this.props.onOperatorClick}>\r\n <div className=\"uifw-calculator-button-svg\">\r\n <Icon iconSpec={iconSpec} />\r\n </div>\r\n </OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Divide} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&divide;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"7\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"8\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"9\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Multiply} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&times;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"4\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"5\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"6\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Subtract} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&minus;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"1\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"2\" onClick={this.props.onValueClick} />\r\n <ValueButton keyChar=\"3\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.Add} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&#43;</OperatorButton>\r\n\r\n <ValueButton keyChar=\"0\" onClick={this.props.onValueClick} />\r\n <OperatorButton operator={CalculatorOperator.NegPos} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&plusmn;</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Decimal} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">.</OperatorButton>\r\n <OperatorButton operator={CalculatorOperator.Equals} onClick={this.props.onOperatorClick}\r\n className=\"uifw-calculator-large-font\">&#61;</OperatorButton>\r\n <span />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\ninterface ValueButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\r\n /** Key to display */\r\n keyChar: string;\r\n /** A function to be run when the element is clicked */\r\n onClick: (key: string) => void;\r\n}\r\n\r\nclass ValueButton extends React.PureComponent<ValueButtonProps> {\r\n\r\n private _handleOnClick = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\r\n this.props.onClick(this.props.keyChar);\r\n };\r\n\r\n public override render() {\r\n const { className, keyChar, onClick, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const itemClassNames = classnames(\r\n \"uifw-calculator-item\",\r\n className,\r\n );\r\n\r\n return (\r\n <SquareButton {...props} className={itemClassNames} onClick={this._handleOnClick} >\r\n {keyChar}\r\n </SquareButton >\r\n );\r\n }\r\n}\r\n\r\ninterface OperatorButtonProps extends Omit<SquareButtonProps, \"onClick\"> {\r\n /** Key to display */\r\n operator: CalculatorOperator;\r\n /** A function to be run when the element is clicked */\r\n onClick: (operator: CalculatorOperator) => void;\r\n}\r\n\r\nclass OperatorButton extends React.PureComponent<OperatorButtonProps> {\r\n\r\n private _handleOnClick = (_event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\r\n this.props.onClick(this.props.operator);\r\n };\r\n\r\n public override render() {\r\n const { className, children, operator, onClick, ...props } = this.props; // eslint-disable-line @typescript-eslint/no-unused-vars\r\n\r\n const itemClassNames = classnames(\r\n \"uifw-calculator-item\",\r\n className,\r\n );\r\n\r\n return (\r\n <SquareButton {...props} className={itemClassNames} onClick={this._handleOnClick}>\r\n {children}\r\n </SquareButton>\r\n );\r\n }\r\n}\r\n"]}
@@ -91,7 +91,7 @@ export class ChildWindowManager {
91
91
  });
92
92
  setTimeout(() => {
93
93
  copyStyles(childWindow.document);
94
- setImmediate(() => {
94
+ setTimeout(() => {
95
95
  ReactDOM.render(React.createElement(Provider, { store: StateManager.store },
96
96
  React.createElement(UiStateStorageHandler, null,
97
97
  React.createElement(ThemeManager, null,
@@ -1 +1 @@
1
- {"version":3,"file":"ChildWindowManager.js","sourceRoot":"","sources":["../../../../src/appui-react/childwindow/ChildWindowManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ChildWindowManager\r\n */\r\n\r\nimport \"./ChildWindowManager.scss\";\r\nimport * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { copyStyles } from \"./CopyStyles\";\r\nimport { Provider } from \"react-redux\";\r\nimport { StateManager } from \"../redux/StateManager\";\r\nimport { UiStateStorageHandler } from \"../uistate/useUiStateStorage\";\r\nimport { PopupRenderer } from \"../popup/PopupManager\";\r\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager\";\r\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager\";\r\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu\";\r\nimport { FrameworkVersion } from \"../hooks/useFrameworkVersion\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ThemeManager } from \"../theme/ThemeManager\";\r\n\r\nconst childHtml = `<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset=\"utf-8\" />\r\n <style>\r\n html,\r\n body {\r\n height: 100%;\r\n width: 100%;\r\n margin: 0;\r\n overflow: hidden;\r\n }\r\n #root {\r\n height: 100%;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <noscript>You need to enable JavaScript to run this app.</noscript>\r\n <div id=\"root\"></div>\r\n</body>\r\n</html>`;\r\n\r\n/** @public */\r\nexport interface OpenChildWindowInfo {\r\n childWindowId: string;\r\n window: Window;\r\n parentWindow: Window;\r\n}\r\n\r\n/** @public */\r\nexport interface ChildWindowLocationProps {\r\n width: number;\r\n height: number;\r\n left: number;\r\n top: number;\r\n}\r\n\r\n/** Supports opening a child browser window from the main application window. The child window is managed by the main application\r\n * and is running in the same security context. The application must deliver the html file iTwinPopup.html along side its index.html.\r\n * See also: [Child Window Manager]($docs/learning/ui/appui-react/ChildWindows.md)\r\n * @public */\r\nexport class ChildWindowManager {\r\n private _openChildWindows: OpenChildWindowInfo[] = [];\r\n\r\n public get openChildWindows() {\r\n return this._openChildWindows;\r\n }\r\n\r\n public findChildWindow(childWindowId: string | undefined): OpenChildWindowInfo | undefined {\r\n if (undefined === childWindowId)\r\n return undefined;\r\n\r\n return this.openChildWindows.find((openWindow) => openWindow.childWindowId === childWindowId);\r\n }\r\n\r\n public findChildWindowId(contentWindow: Window | undefined | null): string | undefined {\r\n if (!contentWindow)\r\n return undefined;\r\n\r\n const childWindow = this.openChildWindows.find((openWindow) => openWindow.window === contentWindow);\r\n return childWindow?.childWindowId;\r\n }\r\n\r\n // istanbul ignore next\r\n private renderChildWindowContents(childWindow: Window, childWindowId: string, content: React.ReactNode) {\r\n const reactConnectionDiv = childWindow.document.getElementById(\"root\");\r\n if (reactConnectionDiv) {\r\n // set openChildWindows now so components can use it when they mount\r\n this._openChildWindows.push({\r\n childWindowId,\r\n window: childWindow,\r\n parentWindow: window,\r\n });\r\n\r\n setTimeout(() => {\r\n copyStyles(childWindow.document);\r\n setImmediate(() => {\r\n ReactDOM.render(\r\n <Provider store={StateManager.store} >\r\n <UiStateStorageHandler>\r\n <ThemeManager>\r\n <FrameworkVersion>\r\n <div className=\"uifw-child-window-container-host\">\r\n <PopupRenderer />\r\n <ModalDialogRenderer />\r\n <ModelessDialogRenderer />\r\n <CursorPopupMenu />\r\n <div className=\"uifw-child-window-container nz-widget-widget\">\r\n {content}\r\n </div>\r\n </div>\r\n </FrameworkVersion>\r\n </ThemeManager>\r\n </UiStateStorageHandler>\r\n </Provider>,\r\n reactConnectionDiv\r\n );\r\n });\r\n });\r\n\r\n childWindow.onbeforeunload = () => {\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n if (frontStageDef) {\r\n void frontStageDef.saveChildWindowSizeAndPosition(childWindowId, childWindow).then(() => {\r\n this.closeChildWindow(childWindowId, false);\r\n });\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Close all child/pop-out windows. This typically is called when the frontstage is changed. */\r\n public closeAllChildWindows() {\r\n // istanbul ignore next\r\n this.openChildWindows.forEach((openChildWindow) => openChildWindow.window.close());\r\n this._openChildWindows = [];\r\n }\r\n\r\n public closeChildWindow = (childWindowId: string, processWindowClose = true) => {\r\n const windowIndex = this.openChildWindows.findIndex((openWindow) => openWindow.childWindowId === childWindowId);\r\n if (-1 === windowIndex)\r\n return false;\r\n const childWindow = this.openChildWindows[windowIndex];\r\n this.openChildWindows.splice(windowIndex, 1);\r\n if (processWindowClose) {\r\n childWindow.window.close();\r\n } else {\r\n // call the following to convert popout to docked widget\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n frontStageDef && frontStageDef.dockPopoutWidgetContainer(childWindowId);\r\n }\r\n return true;\r\n };\r\n\r\n // istanbul ignore next\r\n private adjustWidowLocation(location: ChildWindowLocationProps, center?: boolean): ChildWindowLocationProps {\r\n const outLocation = { ...location };\r\n if (0 === location.top && 0 === location.left) {\r\n center = center ?? true;\r\n const windowTop = window.top ?? window;\r\n\r\n // Prepare position of the new window to be centered against the 'parent' window.\r\n if (center) {\r\n outLocation.left =\r\n windowTop.outerWidth / 2 + windowTop.screenX - location.width / 2;\r\n outLocation.top =\r\n windowTop.outerHeight / 2 + windowTop.screenY - location.height / 2;\r\n } else {\r\n if (undefined !== window.screenLeft && undefined !== window.screenTop) {\r\n outLocation.top = window.screenTop + location.top;\r\n outLocation.left = window.screenLeft + location.left;\r\n }\r\n }\r\n }\r\n return outLocation;\r\n }\r\n\r\n // istanbul ignore next\r\n public openChildWindow(childWindowId: string, title: string, content: React.ReactNode, location: ChildWindowLocationProps, useDefaultPopoutUrl?: boolean) {\r\n // first check to see if content is already open in child window\r\n if (this.openChildWindows.findIndex((openWindow) => openWindow.childWindowId === childWindowId) >= 0) {\r\n return false;\r\n }\r\n\r\n location = this.adjustWidowLocation(location);\r\n const url = useDefaultPopoutUrl ? \"/iTwinPopup.html\" : \"\";\r\n const childWindow = window.open(url, \"\", `width=${location.width},height=${location.height},left=${location.left},top=${location.top},menubar=no,resizable=yes,scrollbars=no,status=no,location=no`);\r\n if (!childWindow)\r\n return false;\r\n if (0 === url.length) {\r\n childWindow.document.write(childHtml);\r\n this.renderChildWindowContents(childWindow, childWindowId, content);\r\n } else {\r\n childWindow.addEventListener(\"load\", () => {\r\n childWindow.document.title = title;\r\n this.renderChildWindowContents(childWindow, childWindowId, content);\r\n }, false);\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", () => {\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n if (frontStageDef) {\r\n this.closeChildWindow(childWindowId, true);\r\n }\r\n }, false);\r\n\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ChildWindowManager.js","sourceRoot":"","sources":["../../../../src/appui-react/childwindow/ChildWindowManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module ChildWindowManager\r\n */\r\n\r\nimport \"./ChildWindowManager.scss\";\r\nimport * as React from \"react\";\r\nimport * as ReactDOM from \"react-dom\";\r\nimport { copyStyles } from \"./CopyStyles\";\r\nimport { Provider } from \"react-redux\";\r\nimport { StateManager } from \"../redux/StateManager\";\r\nimport { UiStateStorageHandler } from \"../uistate/useUiStateStorage\";\r\nimport { PopupRenderer } from \"../popup/PopupManager\";\r\nimport { ModelessDialogRenderer } from \"../dialog/ModelessDialogManager\";\r\nimport { ModalDialogRenderer } from \"../dialog/ModalDialogManager\";\r\nimport { CursorPopupMenu } from \"../cursor/cursormenu/CursorMenu\";\r\nimport { FrameworkVersion } from \"../hooks/useFrameworkVersion\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ThemeManager } from \"../theme/ThemeManager\";\r\n\r\nconst childHtml = `<!DOCTYPE html>\r\n<html>\r\n<head>\r\n <meta charset=\"utf-8\" />\r\n <style>\r\n html,\r\n body {\r\n height: 100%;\r\n width: 100%;\r\n margin: 0;\r\n overflow: hidden;\r\n }\r\n #root {\r\n height: 100%;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <noscript>You need to enable JavaScript to run this app.</noscript>\r\n <div id=\"root\"></div>\r\n</body>\r\n</html>`;\r\n\r\n/** @public */\r\nexport interface OpenChildWindowInfo {\r\n childWindowId: string;\r\n window: Window;\r\n parentWindow: Window;\r\n}\r\n\r\n/** @public */\r\nexport interface ChildWindowLocationProps {\r\n width: number;\r\n height: number;\r\n left: number;\r\n top: number;\r\n}\r\n\r\n/** Supports opening a child browser window from the main application window. The child window is managed by the main application\r\n * and is running in the same security context. The application must deliver the html file iTwinPopup.html along side its index.html.\r\n * See also: [Child Window Manager]($docs/learning/ui/appui-react/ChildWindows.md)\r\n * @public */\r\nexport class ChildWindowManager {\r\n private _openChildWindows: OpenChildWindowInfo[] = [];\r\n\r\n public get openChildWindows() {\r\n return this._openChildWindows;\r\n }\r\n\r\n public findChildWindow(childWindowId: string | undefined): OpenChildWindowInfo | undefined {\r\n if (undefined === childWindowId)\r\n return undefined;\r\n\r\n return this.openChildWindows.find((openWindow) => openWindow.childWindowId === childWindowId);\r\n }\r\n\r\n public findChildWindowId(contentWindow: Window | undefined | null): string | undefined {\r\n if (!contentWindow)\r\n return undefined;\r\n\r\n const childWindow = this.openChildWindows.find((openWindow) => openWindow.window === contentWindow);\r\n return childWindow?.childWindowId;\r\n }\r\n\r\n // istanbul ignore next\r\n private renderChildWindowContents(childWindow: Window, childWindowId: string, content: React.ReactNode) {\r\n const reactConnectionDiv = childWindow.document.getElementById(\"root\");\r\n if (reactConnectionDiv) {\r\n // set openChildWindows now so components can use it when they mount\r\n this._openChildWindows.push({\r\n childWindowId,\r\n window: childWindow,\r\n parentWindow: window,\r\n });\r\n\r\n setTimeout(() => {\r\n copyStyles(childWindow.document);\r\n setTimeout(() => {\r\n ReactDOM.render(\r\n <Provider store={StateManager.store} >\r\n <UiStateStorageHandler>\r\n <ThemeManager>\r\n <FrameworkVersion>\r\n <div className=\"uifw-child-window-container-host\">\r\n <PopupRenderer />\r\n <ModalDialogRenderer />\r\n <ModelessDialogRenderer />\r\n <CursorPopupMenu />\r\n <div className=\"uifw-child-window-container nz-widget-widget\">\r\n {content}\r\n </div>\r\n </div>\r\n </FrameworkVersion>\r\n </ThemeManager>\r\n </UiStateStorageHandler>\r\n </Provider>,\r\n reactConnectionDiv\r\n );\r\n });\r\n });\r\n\r\n childWindow.onbeforeunload = () => {\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n if (frontStageDef) {\r\n void frontStageDef.saveChildWindowSizeAndPosition(childWindowId, childWindow).then(() => {\r\n this.closeChildWindow(childWindowId, false);\r\n });\r\n }\r\n };\r\n }\r\n }\r\n\r\n /** Close all child/pop-out windows. This typically is called when the frontstage is changed. */\r\n public closeAllChildWindows() {\r\n // istanbul ignore next\r\n this.openChildWindows.forEach((openChildWindow) => openChildWindow.window.close());\r\n this._openChildWindows = [];\r\n }\r\n\r\n public closeChildWindow = (childWindowId: string, processWindowClose = true) => {\r\n const windowIndex = this.openChildWindows.findIndex((openWindow) => openWindow.childWindowId === childWindowId);\r\n if (-1 === windowIndex)\r\n return false;\r\n const childWindow = this.openChildWindows[windowIndex];\r\n this.openChildWindows.splice(windowIndex, 1);\r\n if (processWindowClose) {\r\n childWindow.window.close();\r\n } else {\r\n // call the following to convert popout to docked widget\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n frontStageDef && frontStageDef.dockPopoutWidgetContainer(childWindowId);\r\n }\r\n return true;\r\n };\r\n\r\n // istanbul ignore next\r\n private adjustWidowLocation(location: ChildWindowLocationProps, center?: boolean): ChildWindowLocationProps {\r\n const outLocation = { ...location };\r\n if (0 === location.top && 0 === location.left) {\r\n center = center ?? true;\r\n const windowTop = window.top ?? window;\r\n\r\n // Prepare position of the new window to be centered against the 'parent' window.\r\n if (center) {\r\n outLocation.left =\r\n windowTop.outerWidth / 2 + windowTop.screenX - location.width / 2;\r\n outLocation.top =\r\n windowTop.outerHeight / 2 + windowTop.screenY - location.height / 2;\r\n } else {\r\n if (undefined !== window.screenLeft && undefined !== window.screenTop) {\r\n outLocation.top = window.screenTop + location.top;\r\n outLocation.left = window.screenLeft + location.left;\r\n }\r\n }\r\n }\r\n return outLocation;\r\n }\r\n\r\n // istanbul ignore next\r\n public openChildWindow(childWindowId: string, title: string, content: React.ReactNode, location: ChildWindowLocationProps, useDefaultPopoutUrl?: boolean) {\r\n // first check to see if content is already open in child window\r\n if (this.openChildWindows.findIndex((openWindow) => openWindow.childWindowId === childWindowId) >= 0) {\r\n return false;\r\n }\r\n\r\n location = this.adjustWidowLocation(location);\r\n const url = useDefaultPopoutUrl ? \"/iTwinPopup.html\" : \"\";\r\n const childWindow = window.open(url, \"\", `width=${location.width},height=${location.height},left=${location.left},top=${location.top},menubar=no,resizable=yes,scrollbars=no,status=no,location=no`);\r\n if (!childWindow)\r\n return false;\r\n if (0 === url.length) {\r\n childWindow.document.write(childHtml);\r\n this.renderChildWindowContents(childWindow, childWindowId, content);\r\n } else {\r\n childWindow.addEventListener(\"load\", () => {\r\n childWindow.document.title = title;\r\n this.renderChildWindowContents(childWindow, childWindowId, content);\r\n }, false);\r\n }\r\n\r\n window.addEventListener(\"beforeunload\", () => {\r\n const frontStageDef = FrontstageManager.activeFrontstageDef;\r\n if (frontStageDef) {\r\n this.closeChildWindow(childWindowId, true);\r\n }\r\n }, false);\r\n\r\n return true;\r\n }\r\n}\r\n"]}