@itwin/appui-react 5.24.0 → 5.24.2

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 (82) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/appui-react/UiFramework.d.ts.map +1 -1
  3. package/lib/appui-react/UiFramework.js.map +1 -1
  4. package/lib/appui-react/backstage/BackstageComposerItem.js +1 -3
  5. package/lib/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  6. package/lib/appui-react/content/ContentControl.d.ts.map +1 -1
  7. package/lib/appui-react/content/ContentControl.js +0 -1
  8. package/lib/appui-react/content/ContentControl.js.map +1 -1
  9. package/lib/appui-react/content/FloatingViewportContent.d.ts.map +1 -1
  10. package/lib/appui-react/content/FloatingViewportContent.js +0 -4
  11. package/lib/appui-react/content/FloatingViewportContent.js.map +1 -1
  12. package/lib/appui-react/content/InternalContentViewManager.d.ts.map +1 -1
  13. package/lib/appui-react/content/InternalContentViewManager.js +0 -5
  14. package/lib/appui-react/content/InternalContentViewManager.js.map +1 -1
  15. package/lib/appui-react/dialog/ModelessDialog.d.ts.map +1 -1
  16. package/lib/appui-react/dialog/ModelessDialog.js +1 -3
  17. package/lib/appui-react/dialog/ModelessDialog.js.map +1 -1
  18. package/lib/appui-react/feedback/ElementTooltip.d.ts +1 -2
  19. package/lib/appui-react/feedback/ElementTooltip.d.ts.map +1 -1
  20. package/lib/appui-react/feedback/ElementTooltip.js.map +1 -1
  21. package/lib/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  22. package/lib/appui-react/frontstage/FrontstageDef.js +0 -3
  23. package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
  24. package/lib/appui-react/frontstage/InternalFrontstageManager.d.ts.map +1 -1
  25. package/lib/appui-react/frontstage/InternalFrontstageManager.js +3 -12
  26. package/lib/appui-react/frontstage/InternalFrontstageManager.js.map +1 -1
  27. package/lib/appui-react/layout/state/NineZoneStateReducer.js +30 -1
  28. package/lib/appui-react/layout/state/NineZoneStateReducer.js.map +1 -1
  29. package/lib/appui-react/layout/widget/Tab.d.ts.map +1 -1
  30. package/lib/appui-react/layout/widget/Tab.js.map +1 -1
  31. package/lib/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.d.ts.map +1 -1
  32. package/lib/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.js +2 -3
  33. package/lib/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.js.map +1 -1
  34. package/lib/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.scss +12 -6
  35. package/lib/appui-react/layout/widget/widget-content-layout/header/HeaderLayout.d.ts +1 -1
  36. package/lib/appui-react/layout/widget/widget-content-layout/header/HeaderLayout.d.ts.map +1 -1
  37. package/lib/appui-react/layout/widget/widget-content-layout/header/HeaderLayout.js +2 -1
  38. package/lib/appui-react/layout/widget/widget-content-layout/header/HeaderLayout.js.map +1 -1
  39. package/lib/appui-react/navigationaids/SheetNavigationAid.d.ts.map +1 -1
  40. package/lib/appui-react/navigationaids/SheetNavigationAid.js.map +1 -1
  41. package/lib/appui-react/redux/ReducerRegistry.d.ts.map +1 -1
  42. package/lib/appui-react/redux/ReducerRegistry.js +0 -1
  43. package/lib/appui-react/redux/ReducerRegistry.js.map +1 -1
  44. package/lib/appui-react/redux/StateManager.d.ts.map +1 -1
  45. package/lib/appui-react/redux/StateManager.js +0 -2
  46. package/lib/appui-react/redux/StateManager.js.map +1 -1
  47. package/lib/appui-react/selection/SelectionContextItemDef.d.ts.map +1 -1
  48. package/lib/appui-react/selection/SelectionContextItemDef.js +0 -1
  49. package/lib/appui-react/selection/SelectionContextItemDef.js.map +1 -1
  50. package/lib/appui-react/settings/ui/UiSettingsPage.d.ts.map +1 -1
  51. package/lib/appui-react/settings/ui/UiSettingsPage.js +1 -6
  52. package/lib/appui-react/settings/ui/UiSettingsPage.js.map +1 -1
  53. package/lib/appui-react/shared/GroupItemProps.d.ts.map +1 -1
  54. package/lib/appui-react/shared/GroupItemProps.js.map +1 -1
  55. package/lib/appui-react/shared/MenuItem.d.ts.map +1 -1
  56. package/lib/appui-react/shared/MenuItem.js +0 -1
  57. package/lib/appui-react/shared/MenuItem.js.map +1 -1
  58. package/lib/appui-react/syncui/UiSyncEvent.d.ts +1 -1
  59. package/lib/appui-react/syncui/UiSyncEvent.js +1 -1
  60. package/lib/appui-react/syncui/UiSyncEvent.js.map +1 -1
  61. package/lib/appui-react/toolbar/ToolbarHelper.d.ts.map +1 -1
  62. package/lib/appui-react/toolbar/ToolbarHelper.js +2 -3
  63. package/lib/appui-react/toolbar/ToolbarHelper.js.map +1 -1
  64. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js +0 -1
  65. package/lib/appui-react/toolsettings/InternalToolSettingsManager.js.map +1 -1
  66. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js +1 -1
  67. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  68. package/lib/appui-react/ui-items-provider/UiItemsManager.d.ts.map +1 -1
  69. package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  70. package/lib/appui-react/uistate/AppUiSettings.d.ts.map +1 -1
  71. package/lib/appui-react/uistate/AppUiSettings.js +0 -1
  72. package/lib/appui-react/uistate/AppUiSettings.js.map +1 -1
  73. package/lib/appui-react/utils/PropsHelper.d.ts +1 -1
  74. package/lib/appui-react/utils/PropsHelper.d.ts.map +1 -1
  75. package/lib/appui-react/utils/PropsHelper.js +2 -3
  76. package/lib/appui-react/utils/PropsHelper.js.map +1 -1
  77. package/lib/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  78. package/lib/appui-react/widgets/WidgetDef.js +0 -1
  79. package/lib/appui-react/widgets/WidgetDef.js.map +1 -1
  80. package/lib/cjs/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.scss +12 -6
  81. package/lib/esm/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.scss +12 -6
  82. package/package.json +13 -14
@@ -803,7 +803,7 @@ function hideTab(state, id) {
803
803
  if (!location)
804
804
  return state;
805
805
  const widgetId = location.widgetId;
806
- const tabIndex = state.widgets[widgetId].tabs.indexOf(id);
806
+ const tabIndex = getSavedTabIndex({ state, widgetId, id });
807
807
  if (isFloatingTabLocation(location)) {
808
808
  const floatingWidget = state.floatingWidgets.byId[widgetId];
809
809
  // widgetDef.setFloatingContainerId(location.floatingWidgetId);
@@ -846,4 +846,33 @@ function addTabToPanelSection(state, tabId, panelSection) {
846
846
  const existingSectionId = panel.widgets[sectionIndex];
847
847
  return addTabToWidget(state, tabId, existingSectionId);
848
848
  }
849
+ function getSavedTabIndex({ state, widgetId, id, }) {
850
+ const allTabs = getAllTabsFromWidget(state, widgetId);
851
+ const index = allTabs.indexOf(id);
852
+ assert(index !== -1);
853
+ return index;
854
+ }
855
+ /** Returns all widget tabs, even those that are currently hidden. */
856
+ function getAllTabsFromWidget(state, widgetId) {
857
+ const allTabsId = [...state.widgets[widgetId].tabs];
858
+ const savedTabs = Object.values(state.savedTabs.byId);
859
+ for (const savedTab of savedTabs) {
860
+ if (!savedTab?.home)
861
+ continue;
862
+ // Skip if this tab is already visible in the widget
863
+ if (allTabsId.includes(savedTab.id))
864
+ continue;
865
+ // Check if this saved tab belongs to the target widget
866
+ let belongsToWidget = savedTab.home.widgetId === widgetId;
867
+ // If no direct match, check if it belongs via panel position
868
+ if (!belongsToWidget && isPanelWidgetRestoreState(savedTab.home)) {
869
+ const tabWidgetId = state.panels[savedTab.home.side].widgets[savedTab.home.widgetIndex];
870
+ belongsToWidget = tabWidgetId === widgetId;
871
+ }
872
+ if (belongsToWidget) {
873
+ allTabsId.splice(savedTab.home.tabIndex, 0, savedTab.id);
874
+ }
875
+ }
876
+ return allTabsId;
877
+ }
849
878
  //# sourceMappingURL=NineZoneStateReducer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NineZoneStateReducer.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/state/NineZoneStateReducer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Base\n */\n\nimport { produce } from \"immer\";\nimport { Point, Rectangle } from \"@itwin/core-react/internal\";\nimport { assert } from \"@itwin/core-bentley\";\nimport type { TabState } from \"./TabState.js\";\nimport { getWidgetLocation, isPanelWidgetLocation } from \"./WidgetLocation.js\";\nimport type {\n NineZoneAction,\n WidgetDefAddAction,\n WidgetTabsRemoveAction,\n} from \"./NineZoneAction.js\";\nimport {\n isPanelDropTargetState,\n isSectionDropTargetState,\n isTabDropTargetState,\n isWidgetDropTargetState,\n isWindowDropTargetState,\n} from \"./DropTargetState.js\";\nimport { getWidgetPanelSectionId } from \"./PanelState.js\";\nimport type { NineZoneState } from \"./NineZoneState.js\";\nimport type { PopoutWidgetState, WidgetState } from \"./WidgetState.js\";\nimport {\n addPanelWidget,\n getPanelPixelSizeFromSpec,\n getPanelSize,\n insertPanelWidget,\n updatePanelState,\n} from \"./internal/PanelStateHelpers.js\";\nimport {\n addRemovedTab,\n addTab,\n addTabToWidget,\n removeTab,\n removeTabFromWidget,\n updateSavedTabState,\n updateTabState,\n} from \"./internal/TabStateHelpers.js\";\nimport {\n initSizeProps,\n isToolSettingsFloatingWidget,\n setPointProps,\n setSizeProps,\n updateHomeOfToolSettingsWidget,\n} from \"./internal/NineZoneStateHelpers.js\";\nimport {\n addFloatingWidget,\n addPopoutWidget,\n addWidgetState,\n floatingWidgetBringToFront,\n getWidgetState,\n removeFloatingWidget,\n removePanelWidget,\n removePopoutWidget,\n removeWidget,\n setWidgetActiveTabId,\n updateFloatingWidgetState,\n updateWidgetState,\n} from \"./internal/WidgetStateHelpers.js\";\nimport { getSendBackHomeState } from \"../widget/SendBack.js\";\nimport { panelSides } from \"../widget-panels/Panel.js\";\nimport type { TabLocation } from \"./TabLocation.js\";\nimport {\n getTabLocation,\n isFloatingTabLocation,\n isPanelTabLocation,\n isPopoutTabLocation,\n} from \"./TabLocation.js\";\nimport { getUniqueId } from \"../base/NineZone.js\";\nimport {\n isPanelWidgetRestoreState,\n type PanelWidgetRestoreState,\n} from \"./WidgetRestoreState.js\";\nimport {\n addDockedToolSettings,\n addWidgetToolSettings,\n} from \"./internal/ToolSettingsStateHelpers.js\";\n\n/** @internal */\nexport function NineZoneStateReducer(\n state: NineZoneState,\n action: NineZoneAction\n): NineZoneState {\n switch (action.type) {\n case \"RESIZE\": {\n state = produce(state, (draft) => {\n setSizeProps(draft.size, action.size);\n });\n const nzBounds = Rectangle.createFromSize(action.size);\n for (const id of state.floatingWidgets.allIds) {\n const floatingWidget = state.floatingWidgets.byId[id];\n const bounds = Rectangle.create(floatingWidget.bounds);\n const containedBounds = bounds.containIn(nzBounds);\n state = updateFloatingWidgetState(state, id, {\n bounds: containedBounds.toProps(),\n });\n }\n for (const side of panelSides) {\n state = updatePanelState(state, side, (draft) => {\n const size = getPanelSize(\n draft.size,\n side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n return state;\n }\n case \"PANEL_TOGGLE_COLLAPSED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.collapsed = !draft.collapsed;\n });\n }\n case \"PANEL_SET_COLLAPSED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.collapsed = action.collapsed;\n });\n }\n case \"PANEL_SET_SIZE\": {\n const { side, size: preferredSize } = action;\n\n return updatePanelState(state, side, (draft) => {\n const size = getPanelSize(\n preferredSize,\n draft.side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n case \"PANEL_SET_MIN_SIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n draft.size,\n draft.side,\n action.minSize,\n draft.maxSize,\n state.size\n );\n\n const minSizeInPixels = getPanelPixelSizeFromSpec(\n draft.side,\n state.size,\n action.minSize\n );\n draft.minSize = minSizeInPixels;\n draft.size = size;\n });\n }\n case \"PANEL_SET_MAX_SIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n draft.size,\n draft.side,\n draft.minSize,\n action.maxSize,\n state.size\n );\n\n draft.maxSize = action.maxSize;\n draft.size = size;\n });\n }\n case \"PANEL_SET_RESIZABLE\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.resizable = action.resizable;\n });\n }\n case \"PANEL_SET_SPLITTER_VALUE\": {\n const splitterPercent = Math.min(Math.max(action.percent, 0), 100);\n return updatePanelState(state, action.side, (draft) => {\n draft.splitterPercent = splitterPercent;\n });\n }\n case \"PANEL_TOGGLE_SPAN\": {\n const { side } = action;\n return updatePanelState(state, side, (draft) => {\n draft.span = !draft.span;\n });\n }\n case \"PANEL_SET_PINNED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.pinned = action.pinned;\n });\n }\n case \"PANEL_TOGGLE_PINNED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.pinned = !draft.pinned;\n });\n }\n case \"PANEL_INITIALIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n action.size,\n draft.side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n case \"PANEL_WIDGET_DRAG_START\": {\n const { side, newFloatingWidgetId } = action;\n const panel = state.panels[side];\n const widgetIndex = panel.widgets.indexOf(action.id);\n const widget = getWidgetState(state, action.id);\n state = removePanelWidget(state, action.id);\n return addFloatingWidget(\n state,\n newFloatingWidgetId,\n widget.tabs,\n {\n bounds: Rectangle.create(action.bounds).toProps(),\n userSized: action.userSized,\n id: action.newFloatingWidgetId,\n home: {\n side: action.side,\n widgetId: \"\",\n widgetIndex,\n },\n },\n {\n ...widget,\n minimized: false,\n }\n );\n }\n case \"WIDGET_DRAG\": {\n const { floatingWidgetId, dragBy } = action;\n const floatingWidget = state.floatingWidgets.byId[floatingWidgetId];\n const newBounds = Rectangle.create(floatingWidget.bounds).offset(dragBy);\n return updateFloatingWidgetState(state, floatingWidgetId, {\n bounds: newBounds.toProps(),\n });\n }\n case \"WIDGET_DRAG_END\": {\n // TODO: handle duplicates in WIDGET_TAB_DRAG_END action\n const { target, floatingWidgetId } = action;\n const floatingWidget = state.floatingWidgets.byId[floatingWidgetId];\n const draggedWidget = getWidgetState(state, floatingWidgetId);\n\n if (isWindowDropTargetState(target)) {\n const nzBounds = Rectangle.createFromSize(state.size);\n let newBounds = Rectangle.create(floatingWidget.bounds);\n if (draggedWidget.minimized) {\n const containedBounds = newBounds.setHeight(35).containIn(nzBounds);\n newBounds = newBounds.setPosition(containedBounds.topLeft());\n } else {\n newBounds = newBounds.containIn(nzBounds);\n }\n state = updateFloatingWidgetState(state, floatingWidgetId, {\n bounds: newBounds.toProps(),\n });\n return floatingWidgetBringToFront(state, floatingWidgetId);\n }\n\n state = removeFloatingWidget(state, floatingWidgetId);\n if (isTabDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n floatingWidget.home\n );\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabs = [...targetWidget.tabs];\n tabs.splice(target.tabIndex, 0, ...draggedWidget.tabs);\n state = updateWidgetState(state, target.widgetId, {\n tabs,\n activeTabId: draggedWidget.activeTabId,\n });\n } else if (isSectionDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.splice(target.sectionIndex, 0, target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(\n state,\n target.newWidgetId,\n draggedWidget.tabs,\n draggedWidget\n );\n } else if (isWidgetDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n floatingWidget.home\n );\n const widget = getWidgetLocation(state, target.widgetId);\n if (widget && isPanelWidgetLocation(widget)) {\n state = updatePanelState(state, widget.side, (draft) => {\n draft.collapsed = false;\n });\n }\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabs = [...targetWidget.tabs];\n tabs.splice(targetWidget.tabs.length, 0, ...draggedWidget.tabs);\n state = updateWidgetState(state, target.widgetId, {\n tabs,\n activeTabId: draggedWidget.activeTabId,\n });\n } else {\n const panelSectionId = getWidgetPanelSectionId(target.side, 0);\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets = [panelSectionId];\n draft.collapsed = false;\n });\n state = addWidgetState(state, panelSectionId, draggedWidget.tabs, {\n ...draggedWidget,\n minimized: false,\n });\n }\n return state;\n }\n case \"FLOATING_WIDGET_RESIZE\": {\n const { resizeBy } = action;\n const widget = getWidgetState(state, action.id);\n\n const floatingWidget = state.floatingWidgets.byId[action.id];\n // if this is not a tool settings widget then set the userSized flag\n if (!isToolSettingsFloatingWidget(state, action.id)) {\n state = updateFloatingWidgetState(state, action.id, {\n userSized: true,\n });\n }\n\n const minWidth = 200;\n const minHeight = 120;\n let newBounds = Rectangle.create(floatingWidget.bounds);\n\n // Resize top-left corner.\n const minLeft = 0;\n const minTop = 0;\n const maxLeft = newBounds.right - minWidth;\n const maxTop = newBounds.bottom - minHeight;\n\n newBounds = newBounds.inset(-resizeBy.left, -resizeBy.top, 0, 0);\n const left = Math.max(Math.min(maxLeft, newBounds.left), minLeft);\n const top = Math.max(Math.min(maxTop, newBounds.top), minTop);\n newBounds = new Rectangle(left, top, newBounds.right, newBounds.bottom);\n\n // Resize bottom-right corner.\n const minRight = newBounds.left + minWidth;\n const minBottom = newBounds.top + minHeight;\n const maxRight = state.size.width;\n const maxBottom = state.size.height;\n\n newBounds = newBounds.inset(0, 0, -resizeBy.right, -resizeBy.bottom);\n const right = Math.max(Math.min(maxRight, newBounds.right), minRight);\n const bottom = Math.max(Math.min(maxBottom, newBounds.bottom), minBottom);\n newBounds = new Rectangle(left, top, right, bottom);\n\n state = updateFloatingWidgetState(state, action.id, {\n bounds: newBounds,\n });\n\n const tab = state.tabs[widget.activeTabId];\n if (tab.isFloatingWidgetResizable) {\n const size = newBounds.getSize();\n state = updateTabState(state, widget.activeTabId, (draft) => {\n initSizeProps(draft, \"preferredFloatingWidgetSize\", size);\n draft.userSized = true;\n });\n }\n\n return state;\n }\n case \"FLOATING_WIDGET_SET_BOUNDS\": {\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.create(action.bounds).containIn(nzBounds);\n return updateFloatingWidgetState(state, action.id, {\n bounds: bounds.toProps(),\n });\n }\n case \"FLOATING_WIDGET_CLEAR_USER_SIZED\": {\n return produce(state, (draft) => {\n const floatingWidget = draft.floatingWidgets.byId[action.id];\n floatingWidget.userSized = false;\n const widget = getWidgetState(draft, action.id);\n const tab = draft.tabs[widget.activeTabId];\n tab.userSized = false;\n });\n }\n case \"FLOATING_WIDGET_SET_USER_SIZED\": {\n return produce(state, (draft) => {\n const floatingWidget = draft.floatingWidgets.byId[action.id];\n floatingWidget.userSized = action.userSized;\n });\n }\n case \"FLOATING_WIDGET_BRING_TO_FRONT\": {\n return floatingWidgetBringToFront(state, action.id);\n }\n case \"FLOATING_WIDGET_SEND_BACK\": {\n const widget = getWidgetState(state, action.id);\n const sendBackHomeState = getSendBackHomeState(state, action.id);\n\n // Add tabs to an existing widget.\n if (sendBackHomeState.widgetId) {\n const destinationWidget = state.widgets[sendBackHomeState.widgetId];\n const tabs = [...destinationWidget.tabs, ...widget.tabs];\n state = updateWidgetState(state, destinationWidget.id, {\n tabs,\n });\n return removeWidget(state, widget.id);\n }\n\n const sectionIndex = sendBackHomeState.sectionIndex ?? 0;\n const home = state.floatingWidgets.byId[action.id].home;\n const destinationWidgetId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(home.side, sectionIndex);\n\n // Add tabs to a new panel widget.\n state = removeWidget(state, widget.id);\n return insertPanelWidget(\n state,\n sendBackHomeState.side,\n destinationWidgetId,\n widget.tabs,\n sectionIndex\n );\n }\n case \"POPOUT_WIDGET_SEND_BACK\": {\n const popoutWidget = state.popoutWidgets.byId[action.id];\n const widget = getWidgetState(state, action.id);\n const home = popoutWidget.home;\n\n state = removeWidget(state, widget.id);\n\n // Determine existing widget.\n let existingWidget: WidgetState | undefined;\n if (home.widgetId in state.widgets) {\n existingWidget = state.widgets[home.widgetId];\n } else if (isPanelWidgetRestoreState(home)) {\n const panel = state.panels[home.side];\n const panelSectionId = getWidgetPanelSectionId(\n home.side,\n home.widgetIndex\n );\n existingWidget = state.widgets[panelSectionId];\n\n // Can not add additional sections, add to an existing one.\n if (!existingWidget && panel.widgets.length >= panel.maxWidgetCount) {\n const sectionIndex = Math.min(\n panel.maxWidgetCount - 1,\n home.widgetIndex\n );\n const sectionId = panel.widgets[sectionIndex];\n existingWidget = state.widgets[sectionId];\n }\n }\n\n // Add to an existing widget.\n if (existingWidget) {\n const tabs = [...existingWidget.tabs, ...widget.tabs];\n return updateWidgetState(state, existingWidget.id, {\n tabs,\n });\n }\n\n // Insert a new panel section.\n if (isPanelWidgetRestoreState(home)) {\n const sectionId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(home.side, home.widgetIndex);\n return insertPanelWidget(\n state,\n home.side,\n sectionId,\n [...widget.tabs],\n home.widgetIndex\n );\n }\n\n // Add a new floating widget.\n return addFloatingWidget(\n state,\n home.widgetId,\n widget.tabs,\n home.floatingWidget\n );\n }\n case \"WIDGET_TAB_ADD_TO_WIDGET\": {\n const { id, widgetId } = action;\n return addTabToWidget(state, id, widgetId);\n }\n case \"WIDGET_TAB_CLICK\": {\n const { id, widgetId } = action;\n state = setWidgetActiveTabId(state, widgetId, id);\n return updateWidgetState(state, widgetId, {\n minimized: false,\n });\n }\n case \"WIDGET_TAB_DOUBLE_CLICK\": {\n if (action.floatingWidgetId === undefined) return state;\n\n const widget = getWidgetState(state, action.widgetId);\n const active = action.id === widget.activeTabId;\n if (!active) return setWidgetActiveTabId(state, widget.id, action.id);\n\n return updateWidgetState(state, widget.id, {\n minimized: !widget.minimized,\n });\n }\n case \"WIDGET_TAB_DRAG_START\": {\n const tabId = action.id;\n let home: PanelWidgetRestoreState;\n\n if (action.floatingWidgetId) {\n const floatingWidget =\n state.floatingWidgets.byId[action.floatingWidgetId];\n home = floatingWidget.home;\n } else {\n assert(!!action.side);\n const panel = state.panels[action.side];\n const widgetIndex = panel.widgets.indexOf(action.widgetId);\n home = {\n side: action.side,\n widgetId: action.widgetId,\n widgetIndex,\n };\n }\n\n const widget = getWidgetState(state, action.widgetId);\n const active = action.id === widget.activeTabId;\n state = produce(state, (draft) => {\n draft.draggedTab = {\n tabId,\n position: Point.create(action.position).toProps(),\n home,\n active,\n };\n });\n return removeTabFromWidget(state, tabId);\n }\n case \"WIDGET_TAB_DRAG\": {\n return produce(state, (draft) => {\n const draggedTab = draft.draggedTab;\n assert(!!draggedTab);\n const position = Point.create(draggedTab.position).offset(\n action.dragBy\n );\n setPointProps(draggedTab.position, position);\n });\n }\n case \"WIDGET_TAB_DRAG_END\": {\n assert(!!state.draggedTab);\n const wasActive = state.draggedTab.active;\n const target = action.target;\n if (isTabDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n state.draggedTab.home\n );\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabIndex = target.tabIndex;\n const tabs = [...targetWidget.tabs];\n tabs.splice(tabIndex, 0, action.id);\n const activeTabId = wasActive ? action.id : targetWidget.activeTabId;\n state = updateWidgetState(state, targetWidget.id, {\n tabs,\n activeTabId,\n });\n } else if (isPanelDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.push(target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(state, target.newWidgetId, [action.id]);\n } else if (isSectionDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.splice(target.sectionIndex, 0, target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(state, target.newWidgetId, [action.id]);\n } else if (isWidgetDropTargetState(target)) {\n updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n state.draggedTab.home\n );\n const widget = getWidgetLocation(state, target.widgetId);\n if (widget && isPanelWidgetLocation(widget)) {\n state = updatePanelState(state, widget.side, (draft) => {\n draft.collapsed = false;\n });\n }\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabIndex = targetWidget.tabs.length;\n const tabs = [...targetWidget.tabs];\n tabs.splice(tabIndex, 0, action.id);\n const activeTabId = wasActive ? action.id : targetWidget.activeTabId;\n state = updateWidgetState(state, targetWidget.id, {\n tabs,\n activeTabId,\n });\n } else {\n const tab = state.tabs[state.draggedTab.tabId];\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(\n tab.preferredFloatingWidgetSize || target.size\n ).offset(state.draggedTab.position);\n const containedBounds = bounds.containIn(nzBounds);\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n\n state = addFloatingWidget(\n state,\n target.newFloatingWidgetId,\n [action.id],\n {\n bounds: containedBounds,\n home: state.draggedTab.home,\n userSized,\n }\n );\n }\n return produce(state, (draft) => {\n draft.draggedTab = undefined;\n });\n }\n case \"WIDGET_TAB_POPOUT\": {\n const { id, position, size } = action;\n const location = getTabLocation(state, id);\n if (location && isPopoutTabLocation(location)) return state;\n\n const savedTab = state.savedTabs.byId[id];\n\n const tab = state.tabs[id];\n\n let contentHeight = 800;\n let contentWidth = 600;\n\n if (tab.preferredFloatingWidgetSize) {\n contentWidth = tab.preferredFloatingWidgetSize.width;\n contentHeight = tab.preferredFloatingWidgetSize.height;\n } else {\n // TODO: reducers should be pure\n const popoutContentContainer = document.getElementById(\n `content-container:${id}`\n );\n if (popoutContentContainer !== null) {\n contentWidth = popoutContentContainer.offsetWidth + 20;\n contentHeight = popoutContentContainer.offsetHeight + 20;\n }\n }\n\n let preferredBounds = Rectangle.createFromSize({\n height: contentHeight,\n width: contentWidth,\n });\n if (savedTab?.popout) {\n preferredBounds = Rectangle.createFromSize(savedTab.popout.contentSize);\n preferredBounds = preferredBounds.offset(savedTab.popout.position);\n }\n\n if (size) preferredBounds = preferredBounds.setSize(size);\n if (position) preferredBounds = preferredBounds.setPosition(position);\n\n const popoutWidgetId = getUniqueId();\n let home: PopoutWidgetState[\"home\"] | undefined;\n if (location && isPanelTabLocation(location)) {\n const panel = state.panels[location.side];\n const widgetIndex = panel.widgets.indexOf(location.widgetId);\n home = {\n side: location.side,\n widgetId: location.widgetId,\n widgetIndex,\n };\n } else if (location && isFloatingTabLocation(location)) {\n const floatingWidget =\n state.floatingWidgets.byId[location.floatingWidgetId];\n home = {\n widgetId: floatingWidget.id,\n floatingWidget,\n };\n }\n\n state = removeTabFromWidget(state, id);\n return addPopoutWidget(state, popoutWidgetId, [id], {\n bounds: preferredBounds.toProps(),\n home,\n });\n }\n case \"WIDGET_TAB_HIDE\": {\n return hideTab(state, action.id);\n }\n case \"WIDGET_TABS_REMOVE\": {\n // Sort ids by their tab index in descending order\n const sortedIds = sortIndexes(action, state);\n\n for (const id of sortedIds) {\n state = hideTab(state, id);\n state = removeTab(state, id);\n }\n\n return state;\n }\n case \"WIDGET_TAB_SET_LABEL\": {\n return updateTabState(state, action.id, (draft) => {\n draft.label = action.label;\n });\n }\n case \"WIDGET_TAB_OPEN\": {\n return openWidgetTab(state, action.id);\n }\n case \"WIDGET_TAB_CLOSE\": {\n const { id } = action;\n if (\n state.toolSettings?.tabId === id &&\n state.toolSettings.type === \"docked\"\n ) {\n return state;\n }\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n // TODO: should change activeTabId of a widget with multiple tabs.\n const widget = state.widgets[location.widgetId];\n if (isFloatingTabLocation(location) && id === widget.activeTabId) {\n state = updateWidgetState(state, widget.id, {\n minimized: true,\n });\n }\n return state;\n }\n case \"WIDGET_TAB_FLOAT\": {\n const { id, position, size } = action;\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n if (isFloatingTabLocation(location)) return state;\n\n const tab = state.tabs[id];\n const preferredSize = size ??\n tab.preferredFloatingWidgetSize ?? { height: 400, width: 400 };\n const preferredPosition = position ?? { x: 50, y: 100 };\n const preferredBounds =\n Rectangle.createFromSize(preferredSize).offset(preferredPosition);\n const nzBounds = Rectangle.createFromSize(state.size);\n const containedBounds = preferredBounds.containIn(nzBounds);\n\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n\n if (isPanelTabLocation(location)) {\n const panel = state.panels[location.side];\n const widgetIndex = panel.widgets.indexOf(location.widgetId);\n\n state = updateTabState(state, id, (draft) => {\n initSizeProps(draft, \"preferredFloatingWidgetSize\", preferredSize);\n });\n state = removeTabFromWidget(state, id);\n state = addFloatingWidget(state, id, [id], {\n bounds: containedBounds,\n home: {\n side: location.side,\n widgetId: location.widgetId,\n widgetIndex,\n },\n userSized,\n });\n } else {\n const popoutWidgetId = location.popoutWidgetId;\n const popoutWidget = state.popoutWidgets.byId[popoutWidgetId];\n const widget = state.widgets[popoutWidgetId];\n state = removePopoutWidget(state, popoutWidgetId);\n\n const bounds = popoutWidget.bounds;\n const home = popoutWidget.home;\n\n state = addFloatingWidget(\n state,\n popoutWidgetId,\n [id],\n {\n bounds,\n home: isPanelWidgetRestoreState(home)\n ? home\n : home.floatingWidget.home,\n },\n widget\n );\n }\n\n const isToolSettings = state.toolSettings?.tabId === id;\n if (isToolSettings) {\n state = produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"widget\";\n });\n }\n\n return state;\n }\n case \"WIDGET_TAB_SET_POPOUT_BOUNDS\": {\n return updateSavedTabState(state, action.id, (draft) => {\n draft.popout = {\n position: action.position,\n contentSize: action.contentSize,\n size: action.size,\n };\n });\n }\n case \"WIDGET_TAB_SHOW\": {\n return showWidgetTab(state, action.id);\n }\n case \"WIDGET_TAB_UNLOAD\": {\n state = hideTab(state, action.id);\n return updateTabState(state, action.id, (draft) => {\n draft.unloaded = true;\n });\n }\n case \"WIDGET_TAB_EXPAND\": {\n state = showWidgetTab(state, action.id);\n const location = getTabLocation(state, action.id);\n if (location && isPanelTabLocation(location)) {\n state = updatePanelState(state, location.side, (draft) => {\n draft.splitterPercent =\n draft.widgets.findIndex((wId) => wId === location.widgetId) === 0\n ? 100\n : 0;\n });\n }\n return state;\n }\n case \"WIDGET_TAB_UPDATE\": {\n return updateTabState(state, action.id, (draft) => {\n for (const [key, val] of Object.entries(action.overrides)) {\n (draft as any)[key] = val;\n }\n });\n }\n case \"TOOL_SETTINGS_ADD_DOCKED\": {\n state = addTab(state, action.id, action.overrides);\n return addDockedToolSettings(state, action.id);\n }\n case \"TOOL_SETTINGS_ADD_WIDGET\": {\n return addWidgetToolSettings(state, action.id);\n }\n case \"TOOL_SETTINGS_DRAG_START\": {\n if (!state.toolSettings) return state;\n if (state.toolSettings.type === \"widget\") return state;\n\n const { newFloatingWidgetId } = action;\n const tabId = state.toolSettings.tabId;\n\n const tab = state.tabs[tabId];\n const size = tab.preferredFloatingWidgetSize || {\n height: 200,\n width: 300,\n };\n state = addFloatingWidget(state, newFloatingWidgetId, [tabId], {\n bounds: Rectangle.createFromSize(size).toProps(),\n });\n return produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"widget\";\n });\n }\n case \"TOOL_SETTINGS_DOCK\": {\n if (!state.toolSettings) return state;\n if (state.toolSettings.type === \"docked\") return state;\n\n state = removeTabFromWidget(state, state.toolSettings.tabId);\n return produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"docked\";\n });\n }\n case \"WIDGET_DEF_ADD\": {\n state = addTab(state, action.id, action.overrides);\n\n const savedTab = state.savedTabs.byId[action.id];\n if (savedTab) {\n // Restore to saved state.\n return addRemovedTab(state, action.id);\n }\n\n // Add to a floating widget.\n if (action.location === \"floating\") {\n // Add to an existing floating widget.\n if (action.floatingWidget.id in state.widgets) {\n return addTabToWidget(state, action.id, action.floatingWidget.id);\n }\n\n const size = action.overrides?.preferredFloatingWidgetSize ?? {\n height: 200,\n width: 300,\n };\n const position = action.floatingWidget.preferredPosition ?? {\n x: (state.size.width - size.width) / 2,\n y: (state.size.height - size.height) / 2,\n };\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(size).offset(position);\n const containedBounds = bounds.containIn(nzBounds);\n\n const userSized = !!action.overrides?.preferredFloatingWidgetSize;\n return addFloatingWidget(state, action.floatingWidget.id, [action.id], {\n bounds: containedBounds.toProps(),\n home: {\n side: action.panelSection.side,\n widgetId: action.panelSection.id,\n widgetIndex: 0,\n },\n userSized,\n });\n }\n\n return addTabToPanelSection(state, action.id, action.panelSection);\n }\n }\n return state;\n}\n\nfunction sortIndexes(action: WidgetTabsRemoveAction, state: NineZoneState) {\n return [...action.ids].sort((a, b) => {\n const locationA = getTabLocation(state, a);\n const locationB = getTabLocation(state, b);\n if (!locationA || !locationB) return 0;\n const indexA = state.widgets[locationA.widgetId].tabs.indexOf(a);\n const indexB = state.widgets[locationB.widgetId].tabs.indexOf(b);\n return indexB - indexA;\n });\n}\n\nfunction openWidgetTab(state: NineZoneState, id: TabState[\"id\"]) {\n if (\n state.toolSettings?.tabId === id &&\n state.toolSettings.type === \"docked\"\n ) {\n return produce(state, (draft) => {\n assert(draft.toolSettings!.type === \"docked\");\n draft.toolSettings!.hidden = false;\n });\n }\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n return produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n widget.minimized = false;\n widget.activeTabId = id;\n\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.collapsed = false;\n if (undefined === panel.size || 0 === panel.size) {\n panel.size = panel.minSize ?? 200;\n }\n }\n });\n}\n\nfunction showWidgetTab(state: NineZoneState, id: TabState[\"id\"]) {\n state = openWidgetTab(state, id);\n const location = getTabLocation(state, id);\n if (!location) return state;\n state = updateWidgetState(state, location.widgetId, {\n activeTabId: id,\n minimized: false,\n });\n if (isPanelTabLocation(location)) {\n state = updatePanelState(state, location.side, (draft) => {\n draft.collapsed = false;\n });\n }\n if (isFloatingTabLocation(location)) {\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\n }\n return state;\n}\n\nfunction unhideTab(state: NineZoneState, id: TabState[\"id\"]) {\n let location = getTabLocation(state, id);\n if (!location) {\n state = addRemovedTab(state, id);\n location = getTabLocation(state, id);\n assert(!!location);\n }\n state = updateTabState(state, id, (draft) => {\n draft.unloaded = false;\n });\n return [state, location] as const;\n}\n\nfunction hideTab(state: NineZoneState, id: TabState[\"id\"]) {\n state = produce(state, (draft) => {\n if (!draft.toolSettings) return;\n\n const isToolSettings = draft.toolSettings.tabId === id;\n if (isToolSettings && draft.toolSettings.type === \"docked\") {\n draft.toolSettings.hidden = true;\n }\n });\n\n state = updateTabState(state, id, (draft) => {\n draft.unloaded = false;\n });\n\n const location = getTabLocation(state, id);\n if (!location) return state;\n\n const widgetId = location.widgetId;\n const tabIndex = state.widgets[widgetId].tabs.indexOf(id);\n\n if (isFloatingTabLocation(location)) {\n const floatingWidget = state.floatingWidgets.byId[widgetId];\n // widgetDef.setFloatingContainerId(location.floatingWidgetId);\n state = updateSavedTabState(state, id, (draft) => {\n draft.home = {\n widgetId,\n tabIndex,\n floatingWidget,\n };\n });\n } else if (isPanelTabLocation(location)) {\n const side = location.side;\n const widgetIndex = state.panels[side].widgets.indexOf(widgetId);\n\n state = updateSavedTabState(state, id, (draft) => {\n draft.home = {\n widgetId,\n side,\n widgetIndex,\n tabIndex,\n };\n });\n }\n\n return removeTabFromWidget(state, id);\n}\n\nfunction addTabToPanelSection(\n state: NineZoneState,\n tabId: TabState[\"id\"],\n panelSection: WidgetDefAddAction[\"panelSection\"]\n) {\n // Add to a panel section.\n const { side, id, index } = panelSection;\n // Add to an existing panel section.\n if (id in state.widgets) {\n return addTabToWidget(state, tabId, id);\n }\n\n const panel = state.panels[side];\n // Add to a new panel section.\n if (panel.widgets.length < panel.maxWidgetCount) {\n return addPanelWidget(state, side, id, [tabId]);\n }\n\n // Can't add additional sections, add to an existing one.\n const sectionIndex = Math.min(index, panel.widgets.length - 1);\n const existingSectionId = panel.widgets[sectionIndex];\n return addTabToWidget(state, tabId, existingSectionId);\n}\n"]}
1
+ {"version":3,"file":"NineZoneStateReducer.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/state/NineZoneStateReducer.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAM/E,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,aAAa,EACb,MAAM,EACN,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,aAAa,EACb,4BAA4B,EAC5B,aAAa,EACb,YAAY,EACZ,8BAA8B,GAC/B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,yBAAyB,GAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,wCAAwC,CAAC;AAEhD,gBAAgB;AAChB,MAAM,UAAU,oBAAoB,CAClC,KAAoB,EACpB,MAAsB;IAEtB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACvD,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACnD,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAE,EAAE;oBAC3C,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE;iBAClC,CAAC,CAAC;YACL,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC9C,MAAM,IAAI,GAAG,YAAY,CACvB,KAAK,CAAC,IAAI,EACV,IAAI,EACJ,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;oBACF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;gBACpB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;YAE7C,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,MAAM,IAAI,GAAG,YAAY,CACvB,aAAa,EACb,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;gBACF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,MAAM,IAAI,GAAG,YAAY,CACvB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,MAAM,CAAC,OAAO,EACd,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;gBAEF,MAAM,eAAe,GAAG,yBAAyB,CAC/C,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,MAAM,CAAC,OAAO,CACf,CAAC;gBACF,KAAK,CAAC,OAAO,GAAG,eAAe,CAAC;gBAChC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,MAAM,IAAI,GAAG,YAAY,CACvB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,MAAM,CAAC,OAAO,EACd,KAAK,CAAC,IAAI,CACX,CAAC;gBAEF,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC/B,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACnE,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YACxB,OAAO,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7C,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,OAAO,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;gBACpD,MAAM,IAAI,GAAG,YAAY,CACvB,MAAM,CAAC,IAAI,EACX,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,IAAI,CACX,CAAC;gBACF,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;YACpB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,EAAE,IAAI,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;YAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5C,OAAO,iBAAiB,CACtB,KAAK,EACL,mBAAmB,EACnB,MAAM,CAAC,IAAI,EACX;gBACE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE;gBACjD,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,EAAE,EAAE,MAAM,CAAC,mBAAmB;gBAC9B,IAAI,EAAE;oBACJ,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,EAAE;oBACZ,WAAW;iBACZ;aACF,EACD;gBACE,GAAG,MAAM;gBACT,SAAS,EAAE,KAAK;aACjB,CACF,CAAC;QACJ,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;YAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzE,OAAO,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE;gBACxD,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,wDAAwD;YACxD,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;YAC5C,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAE9D,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtD,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;gBACxD,IAAI,aAAa,CAAC,SAAS,EAAE,CAAC;oBAC5B,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACpE,SAAS,GAAG,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAC5C,CAAC;gBACD,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,gBAAgB,EAAE;oBACzD,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE;iBAC5B,CAAC,CAAC;gBACH,OAAO,0BAA0B,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YAC7D,CAAC;YAED,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;YACtD,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,KAAK,GAAG,8BAA8B,CACpC,KAAK,EACL,MAAM,CAAC,QAAQ,EACf,cAAc,CAAC,IAAI,CACpB,CAAC;gBACF,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBACvD,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;oBAChD,IAAI;oBACJ,WAAW,EAAE,aAAa,CAAC,WAAW;iBACvC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;oBACjE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,cAAc,CACpB,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,aAAa,CAAC,IAAI,EAClB,aAAa,CACd,CAAC;YACJ,CAAC;iBAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,KAAK,GAAG,8BAA8B,CACpC,KAAK,EACL,MAAM,CAAC,QAAQ,EACf,cAAc,CAAC,IAAI,CACpB,CAAC;gBACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzD,IAAI,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrD,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC1B,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBAChE,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;oBAChD,IAAI;oBACJ,WAAW,EAAE,aAAa,CAAC,WAAW;iBACvC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC/D,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrD,KAAK,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,CAAC;oBACjC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,IAAI,EAAE;oBAChE,GAAG,aAAa;oBAChB,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAEhD,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7D,oEAAoE;YACpE,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBACpD,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;oBAClD,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YAED,MAAM,QAAQ,GAAG,GAAG,CAAC;YACrB,MAAM,SAAS,GAAG,GAAG,CAAC;YACtB,IAAI,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAExD,0BAA0B;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC;YAClB,MAAM,MAAM,GAAG,CAAC,CAAC;YACjB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC;YAE5C,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;YAExE,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC;YAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC;YAC5C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YAClC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAEpC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;YACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;YAC1E,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAEpD,KAAK,GAAG,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClD,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,GAAG,CAAC,yBAAyB,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;gBACjC,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1D,aAAa,CAAC,KAAK,EAAE,6BAA6B,EAAE,IAAI,CAAC,CAAC;oBAC1D,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,4BAA4B,CAAC,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;gBACjD,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;YACxC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7D,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;gBACjC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBAC3C,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC7D,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,gCAAgC,CAAC,CAAC,CAAC;YACtC,OAAO,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,KAAK,2BAA2B,CAAC,CAAC,CAAC;YACjC,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAEjE,kCAAkC;YAClC,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACpE,MAAM,IAAI,GAAG,CAAC,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzD,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,EAAE,EAAE;oBACrD,IAAI;iBACL,CAAC,CAAC;gBACH,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,IAAI,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;YACxD,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ;gBACvC,CAAC,CAAC,IAAI,CAAC,QAAQ;gBACf,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAErD,kCAAkC;YAClC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,OAAO,iBAAiB,CACtB,KAAK,EACL,iBAAiB,CAAC,IAAI,EACtB,mBAAmB,EACnB,MAAM,CAAC,IAAI,EACX,YAAY,CACb,CAAC;QACJ,CAAC;QACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAE/B,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAEvC,6BAA6B;YAC7B,IAAI,cAAuC,CAAC;YAC5C,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACnC,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAChD,CAAC;iBAAM,IAAI,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,cAAc,GAAG,uBAAuB,CAC5C,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,CACjB,CAAC;gBACF,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAE/C,2DAA2D;gBAC3D,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBACpE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,KAAK,CAAC,cAAc,GAAG,CAAC,EACxB,IAAI,CAAC,WAAW,CACjB,CAAC;oBACF,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC9C,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAED,6BAA6B;YAC7B,IAAI,cAAc,EAAE,CAAC;gBACnB,MAAM,IAAI,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtD,OAAO,iBAAiB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE;oBACjD,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YAED,8BAA8B;YAC9B,IAAI,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ;oBAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ;oBACf,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzD,OAAO,iBAAiB,CACtB,KAAK,EACL,IAAI,CAAC,IAAI,EACT,SAAS,EACT,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAChB,IAAI,CAAC,WAAW,CACjB,CAAC;YACJ,CAAC;YAED,6BAA6B;YAC7B,OAAO,iBAAiB,CACtB,KAAK,EACL,IAAI,CAAC,QAAQ,EACb,MAAM,CAAC,IAAI,EACX,IAAI,CAAC,cAAc,CACpB,CAAC;QACJ,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAChC,OAAO,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAChC,KAAK,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YAClD,OAAO,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE;gBACxC,SAAS,EAAE,KAAK;aACjB,CAAC,CAAC;QACL,CAAC;QACD,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAC/B,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBAAE,OAAO,KAAK,CAAC;YAExD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC;YAChD,IAAI,CAAC,MAAM;gBAAE,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAEtE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;gBACzC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS;aAC7B,CAAC,CAAC;QACL,CAAC;QACD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;YACxB,IAAI,IAA6B,CAAC;YAElC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,MAAM,cAAc,GAClB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBACtD,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC3D,IAAI,GAAG;oBACL,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,WAAW;iBACZ,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC;YAChD,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,KAAK,CAAC,UAAU,GAAG;oBACjB,KAAK;oBACL,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;oBACjD,IAAI;oBACJ,MAAM;iBACP,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,OAAO,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;gBACpC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CACvD,MAAM,CAAC,MAAM,CACd,CAAC;gBACF,aAAa,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7B,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,KAAK,GAAG,8BAA8B,CACpC,KAAK,EACL,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,UAAU,CAAC,IAAI,CACtB,CAAC;gBACF,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjC,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;gBACrE,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE;oBAChD,IAAI;oBACJ,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;oBACvC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACrD,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;oBACjE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3C,8BAA8B,CAC5B,KAAK,EACL,MAAM,CAAC,QAAQ,EACf,KAAK,CAAC,UAAU,CAAC,IAAI,CACtB,CAAC;gBACF,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACzD,IAAI,MAAM,IAAI,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC5C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrD,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBAC1B,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC1C,MAAM,IAAI,GAAG,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC;gBACrE,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,EAAE;oBAChD,IAAI;oBACJ,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC/C,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CACrC,GAAG,CAAC,2BAA2B,IAAI,MAAM,CAAC,IAAI,CAC/C,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACnD,MAAM,SAAS,GACb,GAAG,CAAC,SAAS;oBACb,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;gBAEvE,KAAK,GAAG,iBAAiB,CACvB,KAAK,EACL,MAAM,CAAC,mBAAmB,EAC1B,CAAC,MAAM,CAAC,EAAE,CAAC,EACX;oBACE,MAAM,EAAE,eAAe;oBACvB,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI;oBAC3B,SAAS;iBACV,CACF,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,IAAI,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC;gBAAE,OAAO,KAAK,CAAC;YAE5D,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE1C,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAE3B,IAAI,aAAa,GAAG,GAAG,CAAC;YACxB,IAAI,YAAY,GAAG,GAAG,CAAC;YAEvB,IAAI,GAAG,CAAC,2BAA2B,EAAE,CAAC;gBACpC,YAAY,GAAG,GAAG,CAAC,2BAA2B,CAAC,KAAK,CAAC;gBACrD,aAAa,GAAG,GAAG,CAAC,2BAA2B,CAAC,MAAM,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,cAAc,CACpD,qBAAqB,EAAE,EAAE,CAC1B,CAAC;gBACF,IAAI,sBAAsB,KAAK,IAAI,EAAE,CAAC;oBACpC,YAAY,GAAG,sBAAsB,CAAC,WAAW,GAAG,EAAE,CAAC;oBACvD,aAAa,GAAG,sBAAsB,CAAC,YAAY,GAAG,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;YAED,IAAI,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC;gBAC7C,MAAM,EAAE,aAAa;gBACrB,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;YACH,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,eAAe,GAAG,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACxE,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrE,CAAC;YAED,IAAI,IAAI;gBAAE,eAAe,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1D,IAAI,QAAQ;gBAAE,eAAe,GAAG,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEtE,MAAM,cAAc,GAAG,WAAW,EAAE,CAAC;YACrC,IAAI,IAA2C,CAAC;YAChD,IAAI,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC7D,IAAI,GAAG;oBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,WAAW;iBACZ,CAAC;YACJ,CAAC;iBAAM,IAAI,QAAQ,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvD,MAAM,cAAc,GAClB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;gBACxD,IAAI,GAAG;oBACL,QAAQ,EAAE,cAAc,CAAC,EAAE;oBAC3B,cAAc;iBACf,CAAC;YACJ,CAAC;YAED,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,EAAE;gBAClD,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE;gBACjC,IAAI;aACL,CAAC,CAAC;QACL,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,kDAAkD;YAClD,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAE7C,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;gBAC3B,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC3B,KAAK,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;YAC5B,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChD,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC;YACtB,IACE,KAAK,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;gBAChC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ,EACpC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,QAAqB,CAAC;YAC1B,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAEzC,kEAAkE;YAClE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC;gBACjE,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE;oBAC1C,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;YAEtC,IAAI,QAAqB,CAAC;YAC1B,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAEzC,IAAI,qBAAqB,CAAC,QAAQ,CAAC;gBAAE,OAAO,KAAK,CAAC;YAElD,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3B,MAAM,aAAa,GAAG,IAAI;gBACxB,GAAG,CAAC,2BAA2B,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YACjE,MAAM,iBAAiB,GAAG,QAAQ,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;YACxD,MAAM,eAAe,GACnB,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,eAAe,GAAG,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAE5D,MAAM,SAAS,GACb,GAAG,CAAC,SAAS;gBACb,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YAEvE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAE7D,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC1C,aAAa,CAAC,KAAK,EAAE,6BAA6B,EAAE,aAAa,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;gBACH,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACvC,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;oBACzC,MAAM,EAAE,eAAe;oBACvB,IAAI,EAAE;wBACJ,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;wBAC3B,WAAW;qBACZ;oBACD,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC;gBAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;gBAC7C,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;gBAElD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;gBACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;gBAE/B,KAAK,GAAG,iBAAiB,CACvB,KAAK,EACL,cAAc,EACd,CAAC,EAAE,CAAC,EACJ;oBACE,MAAM;oBACN,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC;wBACnC,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI;iBAC7B,EACD,MAAM,CACP,CAAC;YACJ,CAAC;YAED,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE,CAAC;YACxD,IAAI,cAAc,EAAE,CAAC;gBACnB,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC/B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC7B,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACrC,CAAC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;gBACrD,KAAK,CAAC,MAAM,GAAG;oBACb,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAClC,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACxB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7C,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvD,KAAK,CAAC,eAAe;wBACnB,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAC/D,CAAC,CAAC,GAAG;4BACL,CAAC,CAAC,CAAC,CAAC;gBACV,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,mBAAmB,CAAC,CAAC,CAAC;YACzB,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;gBAChD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACzD,KAAa,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACnD,OAAO,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,OAAO,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,0BAA0B,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,YAAY;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAEvD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;YACvC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;YAEvC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,GAAG,CAAC,2BAA2B,IAAI;gBAC9C,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,GAAG;aACX,CAAC;YACF,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC,KAAK,CAAC,EAAE;gBAC7D,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;aACjD,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC7B,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,YAAY;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAEvD,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC9B,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC7B,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAEnD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC;gBACb,0BAA0B;gBAC1B,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;YAED,4BAA4B;YAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBACnC,sCAAsC;gBACtC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBAC9C,OAAO,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACpE,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,EAAE,2BAA2B,IAAI;oBAC5D,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,GAAG;iBACX,CAAC;gBACF,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,iBAAiB,IAAI;oBAC1D,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;oBACtC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;iBACzC,CAAC;gBACF,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtD,MAAM,MAAM,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/D,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBAEnD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,2BAA2B,CAAC;gBAClE,OAAO,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBACrE,MAAM,EAAE,eAAe,CAAC,OAAO,EAAE;oBACjC,IAAI,EAAE;wBACJ,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI;wBAC9B,QAAQ,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE;wBAChC,WAAW,EAAE,CAAC;qBACf;oBACD,SAAS;iBACV,CAAC,CAAC;YACL,CAAC;YAED,OAAO,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,MAA8B,EAAE,KAAoB;IACvE,OAAO,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACnC,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjE,OAAO,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB,EAAE,EAAkB;IAC7D,IACE,KAAK,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;QAChC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ,EACpC,CAAC;QACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YAC9B,MAAM,CAAC,KAAK,CAAC,YAAa,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YAC9C,KAAK,CAAC,YAAa,CAAC,MAAM,GAAG,KAAK,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAqB,CAAC;IAC1B,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEzC,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QACzB,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;QAExB,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC1C,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;YACxB,IAAI,SAAS,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjD,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,CAAC;YACpC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB,EAAE,EAAkB;IAC7D,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE;QAClD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE;YACvD,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,KAAK,GAAG,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAoB,EAAE,EAAkB;IACzD,IAAI,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAU,CAAC;AACpC,CAAC;AAED,SAAS,OAAO,CAAC,KAAoB,EAAE,EAAkB;IACvD,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;QAC/B,IAAI,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO;QAEhC,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,KAAK,EAAE,CAAC;QACvD,IAAI,cAAc,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3D,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1C,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACnC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAE3D,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC5D,+DAA+D;QAC/D,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,GAAG;gBACX,QAAQ;gBACR,QAAQ;gBACR,cAAc;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjE,KAAK,GAAG,mBAAmB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE;YAC/C,KAAK,CAAC,IAAI,GAAG;gBACX,QAAQ;gBACR,IAAI;gBACJ,WAAW;gBACX,QAAQ;aACT,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,mBAAmB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAAoB,EACpB,KAAqB,EACrB,YAAgD;IAEhD,0BAA0B;IAC1B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;IACzC,oCAAoC;IACpC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,8BAA8B;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAChD,OAAO,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,yDAAyD;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,EAAE,GAKH;IACC,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qEAAqE;AACrE,SAAS,oBAAoB,CAC3B,KAAoB,EACpB,QAA2B;IAE3B,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAEtD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,IAAI;YAAE,SAAS;QAE9B,oDAAoD;QACpD,IAAI,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,SAAS;QAE9C,uDAAuD;QACvD,IAAI,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAE1D,6DAA6D;QAC7D,IAAI,CAAC,eAAe,IAAI,yBAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,MAAM,WAAW,GACf,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACtE,eAAe,GAAG,WAAW,KAAK,QAAQ,CAAC;QAC7C,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Base\n */\n\nimport { produce } from \"immer\";\nimport { Point, Rectangle } from \"@itwin/core-react/internal\";\nimport { assert } from \"@itwin/core-bentley\";\nimport type { TabState } from \"./TabState.js\";\nimport { getWidgetLocation, isPanelWidgetLocation } from \"./WidgetLocation.js\";\nimport type {\n NineZoneAction,\n WidgetDefAddAction,\n WidgetTabsRemoveAction,\n} from \"./NineZoneAction.js\";\nimport {\n isPanelDropTargetState,\n isSectionDropTargetState,\n isTabDropTargetState,\n isWidgetDropTargetState,\n isWindowDropTargetState,\n} from \"./DropTargetState.js\";\nimport { getWidgetPanelSectionId } from \"./PanelState.js\";\nimport type { NineZoneState } from \"./NineZoneState.js\";\nimport type { PopoutWidgetState, WidgetState } from \"./WidgetState.js\";\nimport {\n addPanelWidget,\n getPanelPixelSizeFromSpec,\n getPanelSize,\n insertPanelWidget,\n updatePanelState,\n} from \"./internal/PanelStateHelpers.js\";\nimport {\n addRemovedTab,\n addTab,\n addTabToWidget,\n removeTab,\n removeTabFromWidget,\n updateSavedTabState,\n updateTabState,\n} from \"./internal/TabStateHelpers.js\";\nimport {\n initSizeProps,\n isToolSettingsFloatingWidget,\n setPointProps,\n setSizeProps,\n updateHomeOfToolSettingsWidget,\n} from \"./internal/NineZoneStateHelpers.js\";\nimport {\n addFloatingWidget,\n addPopoutWidget,\n addWidgetState,\n floatingWidgetBringToFront,\n getWidgetState,\n removeFloatingWidget,\n removePanelWidget,\n removePopoutWidget,\n removeWidget,\n setWidgetActiveTabId,\n updateFloatingWidgetState,\n updateWidgetState,\n} from \"./internal/WidgetStateHelpers.js\";\nimport { getSendBackHomeState } from \"../widget/SendBack.js\";\nimport { panelSides } from \"../widget-panels/Panel.js\";\nimport type { TabLocation } from \"./TabLocation.js\";\nimport {\n getTabLocation,\n isFloatingTabLocation,\n isPanelTabLocation,\n isPopoutTabLocation,\n} from \"./TabLocation.js\";\nimport { getUniqueId } from \"../base/NineZone.js\";\nimport {\n isPanelWidgetRestoreState,\n type PanelWidgetRestoreState,\n} from \"./WidgetRestoreState.js\";\nimport {\n addDockedToolSettings,\n addWidgetToolSettings,\n} from \"./internal/ToolSettingsStateHelpers.js\";\n\n/** @internal */\nexport function NineZoneStateReducer(\n state: NineZoneState,\n action: NineZoneAction\n): NineZoneState {\n switch (action.type) {\n case \"RESIZE\": {\n state = produce(state, (draft) => {\n setSizeProps(draft.size, action.size);\n });\n const nzBounds = Rectangle.createFromSize(action.size);\n for (const id of state.floatingWidgets.allIds) {\n const floatingWidget = state.floatingWidgets.byId[id];\n const bounds = Rectangle.create(floatingWidget.bounds);\n const containedBounds = bounds.containIn(nzBounds);\n state = updateFloatingWidgetState(state, id, {\n bounds: containedBounds.toProps(),\n });\n }\n for (const side of panelSides) {\n state = updatePanelState(state, side, (draft) => {\n const size = getPanelSize(\n draft.size,\n side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n return state;\n }\n case \"PANEL_TOGGLE_COLLAPSED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.collapsed = !draft.collapsed;\n });\n }\n case \"PANEL_SET_COLLAPSED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.collapsed = action.collapsed;\n });\n }\n case \"PANEL_SET_SIZE\": {\n const { side, size: preferredSize } = action;\n\n return updatePanelState(state, side, (draft) => {\n const size = getPanelSize(\n preferredSize,\n draft.side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n case \"PANEL_SET_MIN_SIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n draft.size,\n draft.side,\n action.minSize,\n draft.maxSize,\n state.size\n );\n\n const minSizeInPixels = getPanelPixelSizeFromSpec(\n draft.side,\n state.size,\n action.minSize\n );\n draft.minSize = minSizeInPixels;\n draft.size = size;\n });\n }\n case \"PANEL_SET_MAX_SIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n draft.size,\n draft.side,\n draft.minSize,\n action.maxSize,\n state.size\n );\n\n draft.maxSize = action.maxSize;\n draft.size = size;\n });\n }\n case \"PANEL_SET_RESIZABLE\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.resizable = action.resizable;\n });\n }\n case \"PANEL_SET_SPLITTER_VALUE\": {\n const splitterPercent = Math.min(Math.max(action.percent, 0), 100);\n return updatePanelState(state, action.side, (draft) => {\n draft.splitterPercent = splitterPercent;\n });\n }\n case \"PANEL_TOGGLE_SPAN\": {\n const { side } = action;\n return updatePanelState(state, side, (draft) => {\n draft.span = !draft.span;\n });\n }\n case \"PANEL_SET_PINNED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.pinned = action.pinned;\n });\n }\n case \"PANEL_TOGGLE_PINNED\": {\n return updatePanelState(state, action.side, (draft) => {\n draft.pinned = !draft.pinned;\n });\n }\n case \"PANEL_INITIALIZE\": {\n return updatePanelState(state, action.side, (draft) => {\n const size = getPanelSize(\n action.size,\n draft.side,\n draft.minSize,\n draft.maxSize,\n state.size\n );\n draft.size = size;\n });\n }\n case \"PANEL_WIDGET_DRAG_START\": {\n const { side, newFloatingWidgetId } = action;\n const panel = state.panels[side];\n const widgetIndex = panel.widgets.indexOf(action.id);\n const widget = getWidgetState(state, action.id);\n state = removePanelWidget(state, action.id);\n return addFloatingWidget(\n state,\n newFloatingWidgetId,\n widget.tabs,\n {\n bounds: Rectangle.create(action.bounds).toProps(),\n userSized: action.userSized,\n id: action.newFloatingWidgetId,\n home: {\n side: action.side,\n widgetId: \"\",\n widgetIndex,\n },\n },\n {\n ...widget,\n minimized: false,\n }\n );\n }\n case \"WIDGET_DRAG\": {\n const { floatingWidgetId, dragBy } = action;\n const floatingWidget = state.floatingWidgets.byId[floatingWidgetId];\n const newBounds = Rectangle.create(floatingWidget.bounds).offset(dragBy);\n return updateFloatingWidgetState(state, floatingWidgetId, {\n bounds: newBounds.toProps(),\n });\n }\n case \"WIDGET_DRAG_END\": {\n // TODO: handle duplicates in WIDGET_TAB_DRAG_END action\n const { target, floatingWidgetId } = action;\n const floatingWidget = state.floatingWidgets.byId[floatingWidgetId];\n const draggedWidget = getWidgetState(state, floatingWidgetId);\n\n if (isWindowDropTargetState(target)) {\n const nzBounds = Rectangle.createFromSize(state.size);\n let newBounds = Rectangle.create(floatingWidget.bounds);\n if (draggedWidget.minimized) {\n const containedBounds = newBounds.setHeight(35).containIn(nzBounds);\n newBounds = newBounds.setPosition(containedBounds.topLeft());\n } else {\n newBounds = newBounds.containIn(nzBounds);\n }\n state = updateFloatingWidgetState(state, floatingWidgetId, {\n bounds: newBounds.toProps(),\n });\n return floatingWidgetBringToFront(state, floatingWidgetId);\n }\n\n state = removeFloatingWidget(state, floatingWidgetId);\n if (isTabDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n floatingWidget.home\n );\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabs = [...targetWidget.tabs];\n tabs.splice(target.tabIndex, 0, ...draggedWidget.tabs);\n state = updateWidgetState(state, target.widgetId, {\n tabs,\n activeTabId: draggedWidget.activeTabId,\n });\n } else if (isSectionDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.splice(target.sectionIndex, 0, target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(\n state,\n target.newWidgetId,\n draggedWidget.tabs,\n draggedWidget\n );\n } else if (isWidgetDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n floatingWidget.home\n );\n const widget = getWidgetLocation(state, target.widgetId);\n if (widget && isPanelWidgetLocation(widget)) {\n state = updatePanelState(state, widget.side, (draft) => {\n draft.collapsed = false;\n });\n }\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabs = [...targetWidget.tabs];\n tabs.splice(targetWidget.tabs.length, 0, ...draggedWidget.tabs);\n state = updateWidgetState(state, target.widgetId, {\n tabs,\n activeTabId: draggedWidget.activeTabId,\n });\n } else {\n const panelSectionId = getWidgetPanelSectionId(target.side, 0);\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets = [panelSectionId];\n draft.collapsed = false;\n });\n state = addWidgetState(state, panelSectionId, draggedWidget.tabs, {\n ...draggedWidget,\n minimized: false,\n });\n }\n return state;\n }\n case \"FLOATING_WIDGET_RESIZE\": {\n const { resizeBy } = action;\n const widget = getWidgetState(state, action.id);\n\n const floatingWidget = state.floatingWidgets.byId[action.id];\n // if this is not a tool settings widget then set the userSized flag\n if (!isToolSettingsFloatingWidget(state, action.id)) {\n state = updateFloatingWidgetState(state, action.id, {\n userSized: true,\n });\n }\n\n const minWidth = 200;\n const minHeight = 120;\n let newBounds = Rectangle.create(floatingWidget.bounds);\n\n // Resize top-left corner.\n const minLeft = 0;\n const minTop = 0;\n const maxLeft = newBounds.right - minWidth;\n const maxTop = newBounds.bottom - minHeight;\n\n newBounds = newBounds.inset(-resizeBy.left, -resizeBy.top, 0, 0);\n const left = Math.max(Math.min(maxLeft, newBounds.left), minLeft);\n const top = Math.max(Math.min(maxTop, newBounds.top), minTop);\n newBounds = new Rectangle(left, top, newBounds.right, newBounds.bottom);\n\n // Resize bottom-right corner.\n const minRight = newBounds.left + minWidth;\n const minBottom = newBounds.top + minHeight;\n const maxRight = state.size.width;\n const maxBottom = state.size.height;\n\n newBounds = newBounds.inset(0, 0, -resizeBy.right, -resizeBy.bottom);\n const right = Math.max(Math.min(maxRight, newBounds.right), minRight);\n const bottom = Math.max(Math.min(maxBottom, newBounds.bottom), minBottom);\n newBounds = new Rectangle(left, top, right, bottom);\n\n state = updateFloatingWidgetState(state, action.id, {\n bounds: newBounds,\n });\n\n const tab = state.tabs[widget.activeTabId];\n if (tab.isFloatingWidgetResizable) {\n const size = newBounds.getSize();\n state = updateTabState(state, widget.activeTabId, (draft) => {\n initSizeProps(draft, \"preferredFloatingWidgetSize\", size);\n draft.userSized = true;\n });\n }\n\n return state;\n }\n case \"FLOATING_WIDGET_SET_BOUNDS\": {\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.create(action.bounds).containIn(nzBounds);\n return updateFloatingWidgetState(state, action.id, {\n bounds: bounds.toProps(),\n });\n }\n case \"FLOATING_WIDGET_CLEAR_USER_SIZED\": {\n return produce(state, (draft) => {\n const floatingWidget = draft.floatingWidgets.byId[action.id];\n floatingWidget.userSized = false;\n const widget = getWidgetState(draft, action.id);\n const tab = draft.tabs[widget.activeTabId];\n tab.userSized = false;\n });\n }\n case \"FLOATING_WIDGET_SET_USER_SIZED\": {\n return produce(state, (draft) => {\n const floatingWidget = draft.floatingWidgets.byId[action.id];\n floatingWidget.userSized = action.userSized;\n });\n }\n case \"FLOATING_WIDGET_BRING_TO_FRONT\": {\n return floatingWidgetBringToFront(state, action.id);\n }\n case \"FLOATING_WIDGET_SEND_BACK\": {\n const widget = getWidgetState(state, action.id);\n const sendBackHomeState = getSendBackHomeState(state, action.id);\n\n // Add tabs to an existing widget.\n if (sendBackHomeState.widgetId) {\n const destinationWidget = state.widgets[sendBackHomeState.widgetId];\n const tabs = [...destinationWidget.tabs, ...widget.tabs];\n state = updateWidgetState(state, destinationWidget.id, {\n tabs,\n });\n return removeWidget(state, widget.id);\n }\n\n const sectionIndex = sendBackHomeState.sectionIndex ?? 0;\n const home = state.floatingWidgets.byId[action.id].home;\n const destinationWidgetId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(home.side, sectionIndex);\n\n // Add tabs to a new panel widget.\n state = removeWidget(state, widget.id);\n return insertPanelWidget(\n state,\n sendBackHomeState.side,\n destinationWidgetId,\n widget.tabs,\n sectionIndex\n );\n }\n case \"POPOUT_WIDGET_SEND_BACK\": {\n const popoutWidget = state.popoutWidgets.byId[action.id];\n const widget = getWidgetState(state, action.id);\n const home = popoutWidget.home;\n\n state = removeWidget(state, widget.id);\n\n // Determine existing widget.\n let existingWidget: WidgetState | undefined;\n if (home.widgetId in state.widgets) {\n existingWidget = state.widgets[home.widgetId];\n } else if (isPanelWidgetRestoreState(home)) {\n const panel = state.panels[home.side];\n const panelSectionId = getWidgetPanelSectionId(\n home.side,\n home.widgetIndex\n );\n existingWidget = state.widgets[panelSectionId];\n\n // Can not add additional sections, add to an existing one.\n if (!existingWidget && panel.widgets.length >= panel.maxWidgetCount) {\n const sectionIndex = Math.min(\n panel.maxWidgetCount - 1,\n home.widgetIndex\n );\n const sectionId = panel.widgets[sectionIndex];\n existingWidget = state.widgets[sectionId];\n }\n }\n\n // Add to an existing widget.\n if (existingWidget) {\n const tabs = [...existingWidget.tabs, ...widget.tabs];\n return updateWidgetState(state, existingWidget.id, {\n tabs,\n });\n }\n\n // Insert a new panel section.\n if (isPanelWidgetRestoreState(home)) {\n const sectionId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(home.side, home.widgetIndex);\n return insertPanelWidget(\n state,\n home.side,\n sectionId,\n [...widget.tabs],\n home.widgetIndex\n );\n }\n\n // Add a new floating widget.\n return addFloatingWidget(\n state,\n home.widgetId,\n widget.tabs,\n home.floatingWidget\n );\n }\n case \"WIDGET_TAB_ADD_TO_WIDGET\": {\n const { id, widgetId } = action;\n return addTabToWidget(state, id, widgetId);\n }\n case \"WIDGET_TAB_CLICK\": {\n const { id, widgetId } = action;\n state = setWidgetActiveTabId(state, widgetId, id);\n return updateWidgetState(state, widgetId, {\n minimized: false,\n });\n }\n case \"WIDGET_TAB_DOUBLE_CLICK\": {\n if (action.floatingWidgetId === undefined) return state;\n\n const widget = getWidgetState(state, action.widgetId);\n const active = action.id === widget.activeTabId;\n if (!active) return setWidgetActiveTabId(state, widget.id, action.id);\n\n return updateWidgetState(state, widget.id, {\n minimized: !widget.minimized,\n });\n }\n case \"WIDGET_TAB_DRAG_START\": {\n const tabId = action.id;\n let home: PanelWidgetRestoreState;\n\n if (action.floatingWidgetId) {\n const floatingWidget =\n state.floatingWidgets.byId[action.floatingWidgetId];\n home = floatingWidget.home;\n } else {\n assert(!!action.side);\n const panel = state.panels[action.side];\n const widgetIndex = panel.widgets.indexOf(action.widgetId);\n home = {\n side: action.side,\n widgetId: action.widgetId,\n widgetIndex,\n };\n }\n\n const widget = getWidgetState(state, action.widgetId);\n const active = action.id === widget.activeTabId;\n state = produce(state, (draft) => {\n draft.draggedTab = {\n tabId,\n position: Point.create(action.position).toProps(),\n home,\n active,\n };\n });\n return removeTabFromWidget(state, tabId);\n }\n case \"WIDGET_TAB_DRAG\": {\n return produce(state, (draft) => {\n const draggedTab = draft.draggedTab;\n assert(!!draggedTab);\n const position = Point.create(draggedTab.position).offset(\n action.dragBy\n );\n setPointProps(draggedTab.position, position);\n });\n }\n case \"WIDGET_TAB_DRAG_END\": {\n assert(!!state.draggedTab);\n const wasActive = state.draggedTab.active;\n const target = action.target;\n if (isTabDropTargetState(target)) {\n state = updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n state.draggedTab.home\n );\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabIndex = target.tabIndex;\n const tabs = [...targetWidget.tabs];\n tabs.splice(tabIndex, 0, action.id);\n const activeTabId = wasActive ? action.id : targetWidget.activeTabId;\n state = updateWidgetState(state, targetWidget.id, {\n tabs,\n activeTabId,\n });\n } else if (isPanelDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.push(target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(state, target.newWidgetId, [action.id]);\n } else if (isSectionDropTargetState(target)) {\n state = updatePanelState(state, target.side, (draft) => {\n draft.widgets.splice(target.sectionIndex, 0, target.newWidgetId);\n draft.collapsed = false;\n });\n state = addWidgetState(state, target.newWidgetId, [action.id]);\n } else if (isWidgetDropTargetState(target)) {\n updateHomeOfToolSettingsWidget(\n state,\n target.widgetId,\n state.draggedTab.home\n );\n const widget = getWidgetLocation(state, target.widgetId);\n if (widget && isPanelWidgetLocation(widget)) {\n state = updatePanelState(state, widget.side, (draft) => {\n draft.collapsed = false;\n });\n }\n const targetWidget = getWidgetState(state, target.widgetId);\n const tabIndex = targetWidget.tabs.length;\n const tabs = [...targetWidget.tabs];\n tabs.splice(tabIndex, 0, action.id);\n const activeTabId = wasActive ? action.id : targetWidget.activeTabId;\n state = updateWidgetState(state, targetWidget.id, {\n tabs,\n activeTabId,\n });\n } else {\n const tab = state.tabs[state.draggedTab.tabId];\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(\n tab.preferredFloatingWidgetSize || target.size\n ).offset(state.draggedTab.position);\n const containedBounds = bounds.containIn(nzBounds);\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n\n state = addFloatingWidget(\n state,\n target.newFloatingWidgetId,\n [action.id],\n {\n bounds: containedBounds,\n home: state.draggedTab.home,\n userSized,\n }\n );\n }\n return produce(state, (draft) => {\n draft.draggedTab = undefined;\n });\n }\n case \"WIDGET_TAB_POPOUT\": {\n const { id, position, size } = action;\n const location = getTabLocation(state, id);\n if (location && isPopoutTabLocation(location)) return state;\n\n const savedTab = state.savedTabs.byId[id];\n\n const tab = state.tabs[id];\n\n let contentHeight = 800;\n let contentWidth = 600;\n\n if (tab.preferredFloatingWidgetSize) {\n contentWidth = tab.preferredFloatingWidgetSize.width;\n contentHeight = tab.preferredFloatingWidgetSize.height;\n } else {\n // TODO: reducers should be pure\n const popoutContentContainer = document.getElementById(\n `content-container:${id}`\n );\n if (popoutContentContainer !== null) {\n contentWidth = popoutContentContainer.offsetWidth + 20;\n contentHeight = popoutContentContainer.offsetHeight + 20;\n }\n }\n\n let preferredBounds = Rectangle.createFromSize({\n height: contentHeight,\n width: contentWidth,\n });\n if (savedTab?.popout) {\n preferredBounds = Rectangle.createFromSize(savedTab.popout.contentSize);\n preferredBounds = preferredBounds.offset(savedTab.popout.position);\n }\n\n if (size) preferredBounds = preferredBounds.setSize(size);\n if (position) preferredBounds = preferredBounds.setPosition(position);\n\n const popoutWidgetId = getUniqueId();\n let home: PopoutWidgetState[\"home\"] | undefined;\n if (location && isPanelTabLocation(location)) {\n const panel = state.panels[location.side];\n const widgetIndex = panel.widgets.indexOf(location.widgetId);\n home = {\n side: location.side,\n widgetId: location.widgetId,\n widgetIndex,\n };\n } else if (location && isFloatingTabLocation(location)) {\n const floatingWidget =\n state.floatingWidgets.byId[location.floatingWidgetId];\n home = {\n widgetId: floatingWidget.id,\n floatingWidget,\n };\n }\n\n state = removeTabFromWidget(state, id);\n return addPopoutWidget(state, popoutWidgetId, [id], {\n bounds: preferredBounds.toProps(),\n home,\n });\n }\n case \"WIDGET_TAB_HIDE\": {\n return hideTab(state, action.id);\n }\n case \"WIDGET_TABS_REMOVE\": {\n // Sort ids by their tab index in descending order\n const sortedIds = sortIndexes(action, state);\n\n for (const id of sortedIds) {\n state = hideTab(state, id);\n state = removeTab(state, id);\n }\n\n return state;\n }\n case \"WIDGET_TAB_SET_LABEL\": {\n return updateTabState(state, action.id, (draft) => {\n draft.label = action.label;\n });\n }\n case \"WIDGET_TAB_OPEN\": {\n return openWidgetTab(state, action.id);\n }\n case \"WIDGET_TAB_CLOSE\": {\n const { id } = action;\n if (\n state.toolSettings?.tabId === id &&\n state.toolSettings.type === \"docked\"\n ) {\n return state;\n }\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n // TODO: should change activeTabId of a widget with multiple tabs.\n const widget = state.widgets[location.widgetId];\n if (isFloatingTabLocation(location) && id === widget.activeTabId) {\n state = updateWidgetState(state, widget.id, {\n minimized: true,\n });\n }\n return state;\n }\n case \"WIDGET_TAB_FLOAT\": {\n const { id, position, size } = action;\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n if (isFloatingTabLocation(location)) return state;\n\n const tab = state.tabs[id];\n const preferredSize = size ??\n tab.preferredFloatingWidgetSize ?? { height: 400, width: 400 };\n const preferredPosition = position ?? { x: 50, y: 100 };\n const preferredBounds =\n Rectangle.createFromSize(preferredSize).offset(preferredPosition);\n const nzBounds = Rectangle.createFromSize(state.size);\n const containedBounds = preferredBounds.containIn(nzBounds);\n\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n\n if (isPanelTabLocation(location)) {\n const panel = state.panels[location.side];\n const widgetIndex = panel.widgets.indexOf(location.widgetId);\n\n state = updateTabState(state, id, (draft) => {\n initSizeProps(draft, \"preferredFloatingWidgetSize\", preferredSize);\n });\n state = removeTabFromWidget(state, id);\n state = addFloatingWidget(state, id, [id], {\n bounds: containedBounds,\n home: {\n side: location.side,\n widgetId: location.widgetId,\n widgetIndex,\n },\n userSized,\n });\n } else {\n const popoutWidgetId = location.popoutWidgetId;\n const popoutWidget = state.popoutWidgets.byId[popoutWidgetId];\n const widget = state.widgets[popoutWidgetId];\n state = removePopoutWidget(state, popoutWidgetId);\n\n const bounds = popoutWidget.bounds;\n const home = popoutWidget.home;\n\n state = addFloatingWidget(\n state,\n popoutWidgetId,\n [id],\n {\n bounds,\n home: isPanelWidgetRestoreState(home)\n ? home\n : home.floatingWidget.home,\n },\n widget\n );\n }\n\n const isToolSettings = state.toolSettings?.tabId === id;\n if (isToolSettings) {\n state = produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"widget\";\n });\n }\n\n return state;\n }\n case \"WIDGET_TAB_SET_POPOUT_BOUNDS\": {\n return updateSavedTabState(state, action.id, (draft) => {\n draft.popout = {\n position: action.position,\n contentSize: action.contentSize,\n size: action.size,\n };\n });\n }\n case \"WIDGET_TAB_SHOW\": {\n return showWidgetTab(state, action.id);\n }\n case \"WIDGET_TAB_UNLOAD\": {\n state = hideTab(state, action.id);\n return updateTabState(state, action.id, (draft) => {\n draft.unloaded = true;\n });\n }\n case \"WIDGET_TAB_EXPAND\": {\n state = showWidgetTab(state, action.id);\n const location = getTabLocation(state, action.id);\n if (location && isPanelTabLocation(location)) {\n state = updatePanelState(state, location.side, (draft) => {\n draft.splitterPercent =\n draft.widgets.findIndex((wId) => wId === location.widgetId) === 0\n ? 100\n : 0;\n });\n }\n return state;\n }\n case \"WIDGET_TAB_UPDATE\": {\n return updateTabState(state, action.id, (draft) => {\n for (const [key, val] of Object.entries(action.overrides)) {\n (draft as any)[key] = val;\n }\n });\n }\n case \"TOOL_SETTINGS_ADD_DOCKED\": {\n state = addTab(state, action.id, action.overrides);\n return addDockedToolSettings(state, action.id);\n }\n case \"TOOL_SETTINGS_ADD_WIDGET\": {\n return addWidgetToolSettings(state, action.id);\n }\n case \"TOOL_SETTINGS_DRAG_START\": {\n if (!state.toolSettings) return state;\n if (state.toolSettings.type === \"widget\") return state;\n\n const { newFloatingWidgetId } = action;\n const tabId = state.toolSettings.tabId;\n\n const tab = state.tabs[tabId];\n const size = tab.preferredFloatingWidgetSize || {\n height: 200,\n width: 300,\n };\n state = addFloatingWidget(state, newFloatingWidgetId, [tabId], {\n bounds: Rectangle.createFromSize(size).toProps(),\n });\n return produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"widget\";\n });\n }\n case \"TOOL_SETTINGS_DOCK\": {\n if (!state.toolSettings) return state;\n if (state.toolSettings.type === \"docked\") return state;\n\n state = removeTabFromWidget(state, state.toolSettings.tabId);\n return produce(state, (draft) => {\n assert(!!draft.toolSettings);\n draft.toolSettings.type = \"docked\";\n });\n }\n case \"WIDGET_DEF_ADD\": {\n state = addTab(state, action.id, action.overrides);\n\n const savedTab = state.savedTabs.byId[action.id];\n if (savedTab) {\n // Restore to saved state.\n return addRemovedTab(state, action.id);\n }\n\n // Add to a floating widget.\n if (action.location === \"floating\") {\n // Add to an existing floating widget.\n if (action.floatingWidget.id in state.widgets) {\n return addTabToWidget(state, action.id, action.floatingWidget.id);\n }\n\n const size = action.overrides?.preferredFloatingWidgetSize ?? {\n height: 200,\n width: 300,\n };\n const position = action.floatingWidget.preferredPosition ?? {\n x: (state.size.width - size.width) / 2,\n y: (state.size.height - size.height) / 2,\n };\n const nzBounds = Rectangle.createFromSize(state.size);\n const bounds = Rectangle.createFromSize(size).offset(position);\n const containedBounds = bounds.containIn(nzBounds);\n\n const userSized = !!action.overrides?.preferredFloatingWidgetSize;\n return addFloatingWidget(state, action.floatingWidget.id, [action.id], {\n bounds: containedBounds.toProps(),\n home: {\n side: action.panelSection.side,\n widgetId: action.panelSection.id,\n widgetIndex: 0,\n },\n userSized,\n });\n }\n\n return addTabToPanelSection(state, action.id, action.panelSection);\n }\n }\n return state;\n}\n\nfunction sortIndexes(action: WidgetTabsRemoveAction, state: NineZoneState) {\n return [...action.ids].sort((a, b) => {\n const locationA = getTabLocation(state, a);\n const locationB = getTabLocation(state, b);\n if (!locationA || !locationB) return 0;\n const indexA = state.widgets[locationA.widgetId].tabs.indexOf(a);\n const indexB = state.widgets[locationB.widgetId].tabs.indexOf(b);\n return indexB - indexA;\n });\n}\n\nfunction openWidgetTab(state: NineZoneState, id: TabState[\"id\"]) {\n if (\n state.toolSettings?.tabId === id &&\n state.toolSettings.type === \"docked\"\n ) {\n return produce(state, (draft) => {\n assert(draft.toolSettings!.type === \"docked\");\n draft.toolSettings!.hidden = false;\n });\n }\n\n let location: TabLocation;\n [state, location] = unhideTab(state, id);\n\n return produce(state, (draft) => {\n const widget = draft.widgets[location.widgetId];\n widget.minimized = false;\n widget.activeTabId = id;\n\n if (isPanelTabLocation(location)) {\n const panel = draft.panels[location.side];\n panel.collapsed = false;\n if (undefined === panel.size || 0 === panel.size) {\n panel.size = panel.minSize ?? 200;\n }\n }\n });\n}\n\nfunction showWidgetTab(state: NineZoneState, id: TabState[\"id\"]) {\n state = openWidgetTab(state, id);\n const location = getTabLocation(state, id);\n if (!location) return state;\n state = updateWidgetState(state, location.widgetId, {\n activeTabId: id,\n minimized: false,\n });\n if (isPanelTabLocation(location)) {\n state = updatePanelState(state, location.side, (draft) => {\n draft.collapsed = false;\n });\n }\n if (isFloatingTabLocation(location)) {\n state = floatingWidgetBringToFront(state, location.floatingWidgetId);\n }\n return state;\n}\n\nfunction unhideTab(state: NineZoneState, id: TabState[\"id\"]) {\n let location = getTabLocation(state, id);\n if (!location) {\n state = addRemovedTab(state, id);\n location = getTabLocation(state, id);\n assert(!!location);\n }\n state = updateTabState(state, id, (draft) => {\n draft.unloaded = false;\n });\n return [state, location] as const;\n}\n\nfunction hideTab(state: NineZoneState, id: TabState[\"id\"]) {\n state = produce(state, (draft) => {\n if (!draft.toolSettings) return;\n\n const isToolSettings = draft.toolSettings.tabId === id;\n if (isToolSettings && draft.toolSettings.type === \"docked\") {\n draft.toolSettings.hidden = true;\n }\n });\n\n state = updateTabState(state, id, (draft) => {\n draft.unloaded = false;\n });\n\n const location = getTabLocation(state, id);\n if (!location) return state;\n\n const widgetId = location.widgetId;\n const tabIndex = getSavedTabIndex({ state, widgetId, id });\n\n if (isFloatingTabLocation(location)) {\n const floatingWidget = state.floatingWidgets.byId[widgetId];\n // widgetDef.setFloatingContainerId(location.floatingWidgetId);\n state = updateSavedTabState(state, id, (draft) => {\n draft.home = {\n widgetId,\n tabIndex,\n floatingWidget,\n };\n });\n } else if (isPanelTabLocation(location)) {\n const side = location.side;\n const widgetIndex = state.panels[side].widgets.indexOf(widgetId);\n\n state = updateSavedTabState(state, id, (draft) => {\n draft.home = {\n widgetId,\n side,\n widgetIndex,\n tabIndex,\n };\n });\n }\n\n return removeTabFromWidget(state, id);\n}\n\nfunction addTabToPanelSection(\n state: NineZoneState,\n tabId: TabState[\"id\"],\n panelSection: WidgetDefAddAction[\"panelSection\"]\n) {\n // Add to a panel section.\n const { side, id, index } = panelSection;\n // Add to an existing panel section.\n if (id in state.widgets) {\n return addTabToWidget(state, tabId, id);\n }\n\n const panel = state.panels[side];\n // Add to a new panel section.\n if (panel.widgets.length < panel.maxWidgetCount) {\n return addPanelWidget(state, side, id, [tabId]);\n }\n\n // Can't add additional sections, add to an existing one.\n const sectionIndex = Math.min(index, panel.widgets.length - 1);\n const existingSectionId = panel.widgets[sectionIndex];\n return addTabToWidget(state, tabId, existingSectionId);\n}\n\nfunction getSavedTabIndex({\n state,\n widgetId,\n id,\n}: {\n state: NineZoneState;\n widgetId: string;\n id: string;\n}) {\n const allTabs = getAllTabsFromWidget(state, widgetId);\n const index = allTabs.indexOf(id);\n assert(index !== -1);\n return index;\n}\n\n/** Returns all widget tabs, even those that are currently hidden. */\nfunction getAllTabsFromWidget(\n state: NineZoneState,\n widgetId: WidgetState[\"id\"]\n) {\n const allTabsId = [...state.widgets[widgetId].tabs];\n const savedTabs = Object.values(state.savedTabs.byId);\n\n for (const savedTab of savedTabs) {\n if (!savedTab?.home) continue;\n\n // Skip if this tab is already visible in the widget\n if (allTabsId.includes(savedTab.id)) continue;\n\n // Check if this saved tab belongs to the target widget\n let belongsToWidget = savedTab.home.widgetId === widgetId;\n\n // If no direct match, check if it belongs via panel position\n if (!belongsToWidget && isPanelWidgetRestoreState(savedTab.home)) {\n const tabWidgetId =\n state.panels[savedTab.home.side].widgets[savedTab.home.widgetIndex];\n belongsToWidget = tabWidgetId === widgetId;\n }\n\n if (belongsToWidget) {\n allTabsId.splice(savedTab.home.tabIndex, 0, savedTab.id);\n }\n }\n\n return allTabsId;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/Tab.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,YAAY,CAAC;AAEpB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuBrD,gBAAgB;AAChB,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,KAAK,EACL,aAAa,EACb,IAAI,EACJ,eAAe,GAChB,EAAE,sBAAsB,qBAmBxB;AAGD,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAS9C;AAkED,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,EACxD,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,GACV,EAAE,sBAAsB,4CAqLxB;AAED,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,uCAE9B,CAAC;AAGF,gBAAgB;AAChB,eAAO,MAAM,0BAA0B,wBAAsC,CAAC;AAG9E,gBAAgB;AAChB,eAAO,MAAM,4BAA4B,wBAAsC,CAAC"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/Tab.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,YAAY,CAAC;AAEpB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuBrD,gBAAgB;AAChB,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB;IACpE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,EAChC,EAAE,EACF,KAAK,EACL,aAAa,EACb,IAAI,EACJ,eAAe,GAChB,EAAE,sBAAsB,qBAmBxB;AAED,UAAU,cAAc;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAS9C;AAkED,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAAE,EACxD,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,GACV,EAAE,sBAAsB,4CAqLxB;AAED,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,uCAE9B,CAAC;AAGF,gBAAgB;AAChB,eAAO,MAAM,0BAA0B,wBAAsC,CAAC;AAG9E,gBAAgB;AAChB,eAAO,MAAM,4BAA4B,wBAAsC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./Tab.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Timer } from \"@itwin/core-react\";\nimport {\n Point,\n Rectangle,\n useRefs,\n useResizeObserver,\n} from \"@itwin/core-react/internal\";\nimport { Tooltip } from \"@itwin/itwinui-react\";\nimport { useDragTab } from \"../base/DragManager.js\";\nimport {\n MeasureContext,\n NineZoneDispatchContext,\n ShowWidgetIconContext,\n TabNodeContext,\n} from \"../base/NineZone.js\";\nimport type { TabState } from \"../state/TabState.js\";\nimport type {\n PointerCaptorArgs,\n PointerCaptorEvent,\n} from \"../base/usePointerCaptor.js\";\nimport { usePointerCaptor } from \"../base/usePointerCaptor.js\";\nimport { PanelSideContext } from \"../widget-panels/Panel.js\";\nimport { WidgetTabsEntryContext } from \"./Tabs.js\";\nimport {\n restrainInitialWidgetSize,\n WidgetContext,\n WidgetIdContext,\n} from \"./Widget.js\";\nimport { TabIdContext } from \"./ContentRenderer.js\";\nimport { TabTarget } from \"../target/TabTarget.js\";\nimport { WidgetMenuTab } from \"./MenuTab.js\";\nimport { WidgetOverflowContext } from \"./Overflow.js\";\nimport { useLayout, useLayoutStore } from \"../base/LayoutStore.js\";\nimport { useFloatingWidgetId } from \"./FloatingWidget.js\";\nimport { getWidgetState } from \"../state/internal/WidgetStateHelpers.js\";\nimport { useIsMaximizedWidget } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\nimport { FloatingTab } from \"./FloatingTab.js\";\n\n/** @internal */\nexport interface WidgetTabProviderProps extends TabPositionContextArgs {\n id: TabState[\"id\"];\n showOnlyTabIcon?: boolean;\n}\n\n/** @internal */\nexport function WidgetTabProvider({\n id,\n first,\n firstInactive,\n last,\n showOnlyTabIcon,\n}: WidgetTabProviderProps) {\n const tabNode = React.useContext(TabNodeContext);\n const position = React.useMemo<TabPositionContextArgs>(\n () => ({\n first,\n firstInactive,\n last,\n }),\n [first, firstInactive, last]\n );\n return (\n <TabIdContext.Provider value={id}>\n <TabPositionContext.Provider value={position}>\n <IconOnlyOnWidgetTabContext.Provider value={!!showOnlyTabIcon}>\n {tabNode}\n </IconOnlyOnWidgetTabContext.Provider>\n </TabPositionContext.Provider>\n </TabIdContext.Provider>\n );\n}\n\n// eslint-disable-next-line @typescript-eslint/no-deprecated\ninterface WidgetTabProps {\n badge?: React.ReactNode;\n icon?: React.ReactElement;\n}\n\n/** Component that displays a tab in a side panel widget.\n * @internal\n */\nexport function WidgetTab(props: WidgetTabProps) {\n const widgetOverflow = React.useContext(WidgetOverflowContext);\n const tabId = React.useContext(TabIdContext);\n const overflown = !!widgetOverflow;\n const floatingTabId = useLayout((state) => state.draggedTab?.tabId);\n\n if (tabId === floatingTabId) return <FloatingTab {...props} />;\n if (overflown) return <WidgetMenuTab {...props} />;\n return <WidgetTabComponent {...props} />;\n}\n\nfunction WidgetTabComponent(props: WidgetTabProps) {\n const id = React.useContext(TabIdContext);\n const { first, firstInactive, last } = React.useContext(TabPositionContext);\n const widgetTabsEntryContext = React.useContext(WidgetTabsEntryContext);\n const side = React.useContext(PanelSideContext);\n const widgetId = React.useContext(WidgetIdContext);\n const showIconOnly = React.useContext(IconOnlyOnWidgetTabContext);\n const showWidgetIcon = React.useContext(ShowWidgetIconContext);\n const showActiveWidgetLabel = React.useContext(ShowActiveWidgetLabelContext);\n assert(!!id);\n assert(!!widgetId);\n\n const label = useLayout((state) => state.tabs[id].label);\n const activeTabId = useLayout(\n (state) => getWidgetState(state, widgetId).activeTabId\n );\n const minimized = useLayout(\n (state) => getWidgetState(state, widgetId).minimized\n );\n\n const maximizedWidget = useIsMaximizedWidget();\n\n const resizeObserverRef = useResizeObserver<HTMLDivElement>(\n widgetTabsEntryContext?.onResize\n );\n const pointerCaptorRef = useTabInteractions({ clickOnly: maximizedWidget });\n const refs = useRefs<HTMLDivElement>(resizeObserverRef, pointerCaptorRef);\n\n const active = activeTabId === id;\n const className = classnames(\n \"nz-widget-tab\",\n active && \"nz-active\",\n undefined === side && minimized && \"nz-minimized\",\n first && \"nz-first\",\n last && \"nz-last\",\n firstInactive && \"nz-first-inactive\"\n );\n\n const showLabel =\n (showActiveWidgetLabel && active) ||\n (showIconOnly && !props.icon) ||\n (showWidgetIcon && !showIconOnly) ||\n !showWidgetIcon;\n return (\n <Tooltip content={label} ariaStrategy={showLabel ? \"none\" : \"label\"}>\n <div\n data-item-id={id}\n data-item-type=\"widget-tab\"\n className={className}\n ref={refs}\n role=\"tab\"\n tabIndex={0}\n >\n {(showWidgetIcon || showIconOnly) && (\n <span className=\"nz-icon\">{props.icon}</span>\n )}\n {showLabel && <span className=\"nz-label\">{label}</span>}\n {props.badge && <div className=\"nz-badge\">{props.badge}</div>}\n <TabTarget />\n </div>\n </Tooltip>\n );\n}\n\n/** @internal */\nexport interface UseTabInteractionsArgs {\n onClick?: () => void;\n onDoubleClick?: () => void;\n onDragStart?: () => void;\n clickOnly?: boolean;\n}\n\n/** @internal */\nexport function useTabInteractions<T extends HTMLElement>({\n onClick,\n onDoubleClick,\n onDragStart,\n clickOnly,\n}: UseTabInteractionsArgs) {\n const id = React.useContext(TabIdContext);\n const widgetContext = React.useContext(WidgetContext);\n const measure = React.useContext(MeasureContext);\n const dispatch = React.useContext(NineZoneDispatchContext);\n const side = React.useContext(PanelSideContext);\n const widgetId = React.useContext(WidgetIdContext);\n const widgetTabsEntryContext = React.useContext(WidgetTabsEntryContext);\n const floatingWidgetId = useFloatingWidgetId();\n assert(!!id);\n assert(!!widgetId);\n\n const layoutStore = useLayoutStore();\n const tabRef = React.useRef(layoutStore.getState().tabs[id]);\n const clickCount = React.useRef(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const doubleClickTimer = React.useRef(new Timer(300));\n const initialPointerPosition = React.useRef<Point | undefined>(undefined);\n\n const overflown = !widgetTabsEntryContext;\n\n React.useEffect(\n () =>\n layoutStore.subscribe((state) => {\n tabRef.current = state.tabs[id];\n }),\n [layoutStore, id]\n );\n\n const handleClick = React.useCallback(() => {\n dispatch({\n type: \"WIDGET_TAB_CLICK\",\n side,\n widgetId,\n id,\n });\n onClick?.();\n }, [dispatch, widgetId, id, side, onClick]);\n const handleDoubleClick = React.useCallback(() => {\n if (clickOnly) return;\n dispatch({\n type: \"WIDGET_TAB_DOUBLE_CLICK\",\n side,\n widgetId,\n floatingWidgetId,\n id,\n });\n onDoubleClick?.();\n }, [\n clickOnly,\n dispatch,\n floatingWidgetId,\n widgetId,\n id,\n side,\n onDoubleClick,\n ]);\n\n const handleDragTabStart = useDragTab({\n tabId: id,\n });\n const handleDragStart = React.useCallback(\n (pointerPosition: Point) => {\n if (clickOnly) return;\n assert(!!ref.current);\n assert(!!initialPointerPosition.current);\n const nzBounds = measure();\n const nzOffset = new Point(-nzBounds.left, -nzBounds.top);\n let bounds = Rectangle.create(ref.current.getBoundingClientRect());\n bounds = bounds.offset(nzOffset);\n\n const tab = tabRef.current;\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n let position = bounds.topLeft();\n const widgetBounds = widgetContext.measure();\n const widgetSize = restrainInitialWidgetSize(\n widgetBounds.getSize(),\n nzBounds.getSize()\n );\n if (overflown) {\n position = initialPointerPosition.current.offset(nzOffset);\n position = position.offset({ x: -7, y: -7 });\n }\n\n const dragOffset =\n initialPointerPosition.current.getOffsetTo(pointerPosition);\n position = position.offset(dragOffset);\n\n handleDragTabStart({\n initialPointerPosition: Point.create(initialPointerPosition.current),\n pointerPosition,\n widgetSize,\n });\n dispatch({\n type: \"WIDGET_TAB_DRAG_START\",\n floatingWidgetId,\n side,\n widgetId,\n id,\n position,\n userSized,\n });\n onDragStart?.();\n\n initialPointerPosition.current = undefined;\n },\n [\n clickOnly,\n measure,\n widgetContext,\n handleDragTabStart,\n dispatch,\n floatingWidgetId,\n side,\n widgetId,\n id,\n onDragStart,\n overflown,\n ]\n );\n const handlePointerDown = React.useCallback(\n (args: PointerCaptorArgs, e: PointerCaptorEvent) => {\n e.type === \"touchstart\" &&\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_BRING_TO_FRONT\",\n id: floatingWidgetId,\n });\n\n initialPointerPosition.current = new Point(args.clientX, args.clientY);\n },\n [dispatch, floatingWidgetId]\n );\n const handlePointerMove = React.useCallback(\n (args: PointerCaptorArgs) => {\n if (!initialPointerPosition.current) return;\n\n const pointerPosition = new Point(args.clientX, args.clientY);\n const distance =\n initialPointerPosition.current.getDistanceTo(pointerPosition);\n if (distance < 10) return;\n handleDragStart(pointerPosition);\n },\n [handleDragStart]\n );\n const handlePointerUp = React.useCallback(() => {\n clickCount.current++;\n initialPointerPosition.current = undefined;\n doubleClickTimer.current.start();\n }, []);\n\n const pointerCaptorRef = usePointerCaptor<T>(\n handlePointerDown,\n handlePointerMove,\n handlePointerUp\n );\n const ref = React.useRef<T | undefined>(undefined);\n const refs = useRefs(pointerCaptorRef, ref);\n\n React.useEffect(() => {\n const timer = doubleClickTimer.current;\n timer.setOnExecute(() => {\n if (clickCount.current === 1) handleClick();\n else handleDoubleClick();\n clickCount.current = 0;\n });\n const keydown = (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === Key.Enter.valueOf()) {\n handleClick();\n }\n };\n const instance = ref.current;\n instance && instance.addEventListener(\"keydown\", keydown);\n return () => {\n timer.setOnExecute(undefined);\n instance && instance.removeEventListener(\"keydown\", keydown);\n };\n }, [handleClick, handleDoubleClick]);\n return refs;\n}\n\n/** @internal */\nexport interface TabPositionContextArgs {\n first?: boolean;\n last?: boolean;\n firstInactive?: boolean;\n}\n\n/** @internal */\nexport const TabPositionContext = React.createContext<TabPositionContextArgs>(\n undefined!\n);\nTabPositionContext.displayName = \"nz:TabPositionContext\";\n\n/** @internal */\nexport const IconOnlyOnWidgetTabContext = React.createContext<boolean>(false);\nIconOnlyOnWidgetTabContext.displayName = \"nz:IconOnlyOnWidgetTabContext\";\n\n/** @internal */\nexport const ShowActiveWidgetLabelContext = React.createContext<boolean>(false);\nShowActiveWidgetLabelContext.displayName = \"nz:ShowActiveWidgetLabelContext\";\n"]}
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./Tab.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { Key } from \"ts-key-enum\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Timer } from \"@itwin/core-react\";\nimport {\n Point,\n Rectangle,\n useRefs,\n useResizeObserver,\n} from \"@itwin/core-react/internal\";\nimport { Tooltip } from \"@itwin/itwinui-react\";\nimport { useDragTab } from \"../base/DragManager.js\";\nimport {\n MeasureContext,\n NineZoneDispatchContext,\n ShowWidgetIconContext,\n TabNodeContext,\n} from \"../base/NineZone.js\";\nimport type { TabState } from \"../state/TabState.js\";\nimport type {\n PointerCaptorArgs,\n PointerCaptorEvent,\n} from \"../base/usePointerCaptor.js\";\nimport { usePointerCaptor } from \"../base/usePointerCaptor.js\";\nimport { PanelSideContext } from \"../widget-panels/Panel.js\";\nimport { WidgetTabsEntryContext } from \"./Tabs.js\";\nimport {\n restrainInitialWidgetSize,\n WidgetContext,\n WidgetIdContext,\n} from \"./Widget.js\";\nimport { TabIdContext } from \"./ContentRenderer.js\";\nimport { TabTarget } from \"../target/TabTarget.js\";\nimport { WidgetMenuTab } from \"./MenuTab.js\";\nimport { WidgetOverflowContext } from \"./Overflow.js\";\nimport { useLayout, useLayoutStore } from \"../base/LayoutStore.js\";\nimport { useFloatingWidgetId } from \"./FloatingWidget.js\";\nimport { getWidgetState } from \"../state/internal/WidgetStateHelpers.js\";\nimport { useIsMaximizedWidget } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\nimport { FloatingTab } from \"./FloatingTab.js\";\n\n/** @internal */\nexport interface WidgetTabProviderProps extends TabPositionContextArgs {\n id: TabState[\"id\"];\n showOnlyTabIcon?: boolean;\n}\n\n/** @internal */\nexport function WidgetTabProvider({\n id,\n first,\n firstInactive,\n last,\n showOnlyTabIcon,\n}: WidgetTabProviderProps) {\n const tabNode = React.useContext(TabNodeContext);\n const position = React.useMemo<TabPositionContextArgs>(\n () => ({\n first,\n firstInactive,\n last,\n }),\n [first, firstInactive, last]\n );\n return (\n <TabIdContext.Provider value={id}>\n <TabPositionContext.Provider value={position}>\n <IconOnlyOnWidgetTabContext.Provider value={!!showOnlyTabIcon}>\n {tabNode}\n </IconOnlyOnWidgetTabContext.Provider>\n </TabPositionContext.Provider>\n </TabIdContext.Provider>\n );\n}\n\ninterface WidgetTabProps {\n badge?: React.ReactNode;\n icon?: React.ReactElement;\n}\n\n/** Component that displays a tab in a side panel widget.\n * @internal\n */\nexport function WidgetTab(props: WidgetTabProps) {\n const widgetOverflow = React.useContext(WidgetOverflowContext);\n const tabId = React.useContext(TabIdContext);\n const overflown = !!widgetOverflow;\n const floatingTabId = useLayout((state) => state.draggedTab?.tabId);\n\n if (tabId === floatingTabId) return <FloatingTab {...props} />;\n if (overflown) return <WidgetMenuTab {...props} />;\n return <WidgetTabComponent {...props} />;\n}\n\nfunction WidgetTabComponent(props: WidgetTabProps) {\n const id = React.useContext(TabIdContext);\n const { first, firstInactive, last } = React.useContext(TabPositionContext);\n const widgetTabsEntryContext = React.useContext(WidgetTabsEntryContext);\n const side = React.useContext(PanelSideContext);\n const widgetId = React.useContext(WidgetIdContext);\n const showIconOnly = React.useContext(IconOnlyOnWidgetTabContext);\n const showWidgetIcon = React.useContext(ShowWidgetIconContext);\n const showActiveWidgetLabel = React.useContext(ShowActiveWidgetLabelContext);\n assert(!!id);\n assert(!!widgetId);\n\n const label = useLayout((state) => state.tabs[id].label);\n const activeTabId = useLayout(\n (state) => getWidgetState(state, widgetId).activeTabId\n );\n const minimized = useLayout(\n (state) => getWidgetState(state, widgetId).minimized\n );\n\n const maximizedWidget = useIsMaximizedWidget();\n\n const resizeObserverRef = useResizeObserver<HTMLDivElement>(\n widgetTabsEntryContext?.onResize\n );\n const pointerCaptorRef = useTabInteractions({ clickOnly: maximizedWidget });\n const refs = useRefs<HTMLDivElement>(resizeObserverRef, pointerCaptorRef);\n\n const active = activeTabId === id;\n const className = classnames(\n \"nz-widget-tab\",\n active && \"nz-active\",\n undefined === side && minimized && \"nz-minimized\",\n first && \"nz-first\",\n last && \"nz-last\",\n firstInactive && \"nz-first-inactive\"\n );\n\n const showLabel =\n (showActiveWidgetLabel && active) ||\n (showIconOnly && !props.icon) ||\n (showWidgetIcon && !showIconOnly) ||\n !showWidgetIcon;\n return (\n <Tooltip content={label} ariaStrategy={showLabel ? \"none\" : \"label\"}>\n <div\n data-item-id={id}\n data-item-type=\"widget-tab\"\n className={className}\n ref={refs}\n role=\"tab\"\n tabIndex={0}\n >\n {(showWidgetIcon || showIconOnly) && (\n <span className=\"nz-icon\">{props.icon}</span>\n )}\n {showLabel && <span className=\"nz-label\">{label}</span>}\n {props.badge && <div className=\"nz-badge\">{props.badge}</div>}\n <TabTarget />\n </div>\n </Tooltip>\n );\n}\n\n/** @internal */\nexport interface UseTabInteractionsArgs {\n onClick?: () => void;\n onDoubleClick?: () => void;\n onDragStart?: () => void;\n clickOnly?: boolean;\n}\n\n/** @internal */\nexport function useTabInteractions<T extends HTMLElement>({\n onClick,\n onDoubleClick,\n onDragStart,\n clickOnly,\n}: UseTabInteractionsArgs) {\n const id = React.useContext(TabIdContext);\n const widgetContext = React.useContext(WidgetContext);\n const measure = React.useContext(MeasureContext);\n const dispatch = React.useContext(NineZoneDispatchContext);\n const side = React.useContext(PanelSideContext);\n const widgetId = React.useContext(WidgetIdContext);\n const widgetTabsEntryContext = React.useContext(WidgetTabsEntryContext);\n const floatingWidgetId = useFloatingWidgetId();\n assert(!!id);\n assert(!!widgetId);\n\n const layoutStore = useLayoutStore();\n const tabRef = React.useRef(layoutStore.getState().tabs[id]);\n const clickCount = React.useRef(0);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const doubleClickTimer = React.useRef(new Timer(300));\n const initialPointerPosition = React.useRef<Point | undefined>(undefined);\n\n const overflown = !widgetTabsEntryContext;\n\n React.useEffect(\n () =>\n layoutStore.subscribe((state) => {\n tabRef.current = state.tabs[id];\n }),\n [layoutStore, id]\n );\n\n const handleClick = React.useCallback(() => {\n dispatch({\n type: \"WIDGET_TAB_CLICK\",\n side,\n widgetId,\n id,\n });\n onClick?.();\n }, [dispatch, widgetId, id, side, onClick]);\n const handleDoubleClick = React.useCallback(() => {\n if (clickOnly) return;\n dispatch({\n type: \"WIDGET_TAB_DOUBLE_CLICK\",\n side,\n widgetId,\n floatingWidgetId,\n id,\n });\n onDoubleClick?.();\n }, [\n clickOnly,\n dispatch,\n floatingWidgetId,\n widgetId,\n id,\n side,\n onDoubleClick,\n ]);\n\n const handleDragTabStart = useDragTab({\n tabId: id,\n });\n const handleDragStart = React.useCallback(\n (pointerPosition: Point) => {\n if (clickOnly) return;\n assert(!!ref.current);\n assert(!!initialPointerPosition.current);\n const nzBounds = measure();\n const nzOffset = new Point(-nzBounds.left, -nzBounds.top);\n let bounds = Rectangle.create(ref.current.getBoundingClientRect());\n bounds = bounds.offset(nzOffset);\n\n const tab = tabRef.current;\n const userSized =\n tab.userSized ||\n (tab.isFloatingWidgetResizable && !!tab.preferredFloatingWidgetSize);\n let position = bounds.topLeft();\n const widgetBounds = widgetContext.measure();\n const widgetSize = restrainInitialWidgetSize(\n widgetBounds.getSize(),\n nzBounds.getSize()\n );\n if (overflown) {\n position = initialPointerPosition.current.offset(nzOffset);\n position = position.offset({ x: -7, y: -7 });\n }\n\n const dragOffset =\n initialPointerPosition.current.getOffsetTo(pointerPosition);\n position = position.offset(dragOffset);\n\n handleDragTabStart({\n initialPointerPosition: Point.create(initialPointerPosition.current),\n pointerPosition,\n widgetSize,\n });\n dispatch({\n type: \"WIDGET_TAB_DRAG_START\",\n floatingWidgetId,\n side,\n widgetId,\n id,\n position,\n userSized,\n });\n onDragStart?.();\n\n initialPointerPosition.current = undefined;\n },\n [\n clickOnly,\n measure,\n widgetContext,\n handleDragTabStart,\n dispatch,\n floatingWidgetId,\n side,\n widgetId,\n id,\n onDragStart,\n overflown,\n ]\n );\n const handlePointerDown = React.useCallback(\n (args: PointerCaptorArgs, e: PointerCaptorEvent) => {\n e.type === \"touchstart\" &&\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_BRING_TO_FRONT\",\n id: floatingWidgetId,\n });\n\n initialPointerPosition.current = new Point(args.clientX, args.clientY);\n },\n [dispatch, floatingWidgetId]\n );\n const handlePointerMove = React.useCallback(\n (args: PointerCaptorArgs) => {\n if (!initialPointerPosition.current) return;\n\n const pointerPosition = new Point(args.clientX, args.clientY);\n const distance =\n initialPointerPosition.current.getDistanceTo(pointerPosition);\n if (distance < 10) return;\n handleDragStart(pointerPosition);\n },\n [handleDragStart]\n );\n const handlePointerUp = React.useCallback(() => {\n clickCount.current++;\n initialPointerPosition.current = undefined;\n doubleClickTimer.current.start();\n }, []);\n\n const pointerCaptorRef = usePointerCaptor<T>(\n handlePointerDown,\n handlePointerMove,\n handlePointerUp\n );\n const ref = React.useRef<T | undefined>(undefined);\n const refs = useRefs(pointerCaptorRef, ref);\n\n React.useEffect(() => {\n const timer = doubleClickTimer.current;\n timer.setOnExecute(() => {\n if (clickCount.current === 1) handleClick();\n else handleDoubleClick();\n clickCount.current = 0;\n });\n const keydown = (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === Key.Enter.valueOf()) {\n handleClick();\n }\n };\n const instance = ref.current;\n instance && instance.addEventListener(\"keydown\", keydown);\n return () => {\n timer.setOnExecute(undefined);\n instance && instance.removeEventListener(\"keydown\", keydown);\n };\n }, [handleClick, handleDoubleClick]);\n return refs;\n}\n\n/** @internal */\nexport interface TabPositionContextArgs {\n first?: boolean;\n last?: boolean;\n firstInactive?: boolean;\n}\n\n/** @internal */\nexport const TabPositionContext = React.createContext<TabPositionContextArgs>(\n undefined!\n);\nTabPositionContext.displayName = \"nz:TabPositionContext\";\n\n/** @internal */\nexport const IconOnlyOnWidgetTabContext = React.createContext<boolean>(false);\nIconOnlyOnWidgetTabContext.displayName = \"nz:IconOnlyOnWidgetTabContext\";\n\n/** @internal */\nexport const ShowActiveWidgetLabelContext = React.createContext<boolean>(false);\nShowActiveWidgetLabelContext.displayName = \"nz:ShowActiveWidgetLabelContext\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetContentLayout.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,KAAK,QAAQ,GAAG,cAAc,GAAG,eAAe,CAAC;AAEjD,UAAU,cAAc;IACtB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,8BAA+B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IAC3E;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;IACnD;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,IAAI,CAAA;SAAE,EAAE,CAAC;KACjD,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA2CD,UAAU,4BAA6B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IACzE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA+BD,UAAU,8BAA+B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IAC3E;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA6BD,UAAU,wBAAyB,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IACrE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA2CD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB;;;;CAI9B,CAAC"}
1
+ {"version":3,"file":"WidgetContentLayout.d.ts","sourceRoot":"","sources":["../../../../../src/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,KAAK,QAAQ,GAAG,cAAc,GAAG,eAAe,CAAC;AAEjD,UAAU,cAAc;IACtB,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,8BAA+B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IAC3E;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,YAAY,CAAC,CAAC;IACnD;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,IAAI,CAAA;SAAE,EAAE,CAAC;KACjD,CAAC;IACF;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC;;OAEG;IACH,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA4CD,UAAU,4BAA6B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IACzE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA+BD,UAAU,8BAA+B,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IAC3E;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA6BD,UAAU,wBAAyB,SAAQ,qBAAqB,CAAC,KAAK,CAAC;IACrE;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AA4CD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB;;;;CAI9B,CAAC"}
@@ -13,8 +13,7 @@ import { HeaderLayout } from "./header/HeaderLayout.js";
13
13
  const Header = React.forwardRef(function Header(props, ref) {
14
14
  const { className, children, toggle, buttons, menu, title, onSearch, icons, iconSize, ...rest } = props;
15
15
  return (React.createElement("div", { className: classNames("nz-widget-widgetContentLayout-header", className), ...rest, ref: ref },
16
- React.createElement(HeaderLayout, { toggle: toggle, buttons: buttons, menu: menu, title: title, onSearch: onSearch, icons: icons, iconSize: iconSize }),
17
- children));
16
+ React.createElement(HeaderLayout, { toggle: toggle, buttons: buttons, menu: menu, title: title, onSearch: onSearch, icons: icons, iconSize: iconSize }, children)));
18
17
  });
19
18
  Header.displayName = "appui:WidgetContentLayout.Header";
20
19
  const Body = React.forwardRef(function Body(props, ref) {
@@ -51,7 +50,7 @@ const WidgetContentLayoutInner = React.forwardRef(function WidgetContentLayoutIn
51
50
  });
52
51
  }, [children]);
53
52
  const widgetComponents = [headerElement, bodyElement, footerElement].filter(Boolean);
54
- return (React.createElement("div", { className: classNames("nz-widget-widgetContentLayout", className), ...divProps, ref: ref },
53
+ return (React.createElement("div", { className: classNames("nz-widget-widgetContentLayout", className), ...divProps, ref: ref, "data-_appui-hide-dividers": hideDividers ? "true" : "false" },
55
54
  isLoading && React.createElement(LoadingOverlay, null),
56
55
  widgetComponents.map((component, index) => (React.createElement(React.Fragment, { key: index },
57
56
  component,
@@ -1 +1 @@
1
- {"version":3,"file":"WidgetContentLayout.js","sourceRoot":"","sources":["../../../../../src/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,4BAA4B,CAAC;AACpC,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAyDxD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,SAAS,MAAM,CAAC,KAAK,EAAE,GAAG;IACxB,MAAM,EACJ,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAO,EACP,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,GAAG,IAAI,EACR,GAAG,KAAK,CAAC;IAEV,OAAO,CACL,6BACE,SAAS,EAAE,UAAU,CACnB,sCAAsC,EACtC,SAAS,CACV,KACG,IAAI,EACR,GAAG,EAAE,GAAG;QAER,oBAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,GAClB;QACD,QAAQ,CACL,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,WAAW,GAAG,kCAAkC,CAAC;AAiBxD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAC3B,SAAS,IAAI,CAAC,KAAK,EAAE,GAAG;IACtB,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GACrE,KAAK,CAAC;IACR,OAAO,CACL,6BAAK,SAAS,EAAC,4CAA4C;QACxD,SAAS,CAAC,CAAC,CAAC,CACX,oBAAC,cAAc,OAAG,CACnB,CAAC,CAAC,CAAC,CACF,oBAAoB,IAAI,CACtB,oBAAC,cAAc,IAAC,SAAS,EAAC,wCAAwC,GAAG,CACtE,CACF;QACD,6BACE,SAAS,EAAE,UAAU,CACnB,oCAAoC,EACpC,SAAS,CACV,KACG,IAAI,EACR,GAAG,EAAE,GAAG,IAEP,QAAQ,CACL,CACF,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AACF,IAAI,CAAC,WAAW,GAAG,gCAAgC,CAAC;AASpD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAC7B,SAAS,MAAM,CAAC,KAAK,EAAE,GAAG;IACxB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,OAAO,CACL,6BACE,SAAS,EAAE,UAAU,CACnB,sCAAsC,EACtC,SAAS,CACV,KACG,IAAI,EACR,GAAG,EAAE,GAAG,IAEP,QAAQ,CACL,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AACF,MAAM,CAAC,WAAW,GAAG,kCAAkC,CAAC;AAExD,SAAS,cAAc;IACrB,OAAO,CACL,6BAAK,SAAS,EAAC,8CAA8C;QAC3D,oBAAC,cAAc,OAAG,CACd,CACP,CAAC;AACJ,CAAC;AAiBD,MAAM,wBAAwB,GAAG,KAAK,CAAC,UAAU,CAG/C,SAAS,wBAAwB,CAAC,KAAK,EAAE,GAAG;IAC5C,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC5E,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAmB,CAAC;IAC5E,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAmB,CAAC;IACxE,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAmB,CAAC;IAE5E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YACzC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;gBAAE,OAAO;YACzC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;iBAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;gBAAE,cAAc,CAAC,KAAK,CAAC,CAAC;iBAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,MAAM,gBAAgB,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,MAAM,CACzE,OAAO,CACR,CAAC;IAEF,OAAO,CACL,6BACE,SAAS,EAAE,UAAU,CAAC,+BAA+B,EAAE,SAAS,CAAC,KAC7D,QAAQ,EACZ,GAAG,EAAE,GAAG;QAEP,SAAS,IAAI,oBAAC,cAAc,OAAG;QAC/B,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAC1C,oBAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,KAAK;YACvB,SAAS;YACT,KAAK,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CACvD,oBAAC,OAAO,IAAC,SAAS,EAAC,uCAAuC,GAAG,CAC9D,CACc,CAClB,CAAC,CACE,CACP,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE;IACzE,MAAM;IACN,IAAI;IACJ,MAAM;CACP,CAAC,CAAC;AAEH,mBAAmB,CAAC,MAAM,GAAG,MAAM,CAAC;AACpC,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAC;AAChC,mBAAmB,CAAC,MAAM,GAAG,MAAM,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WidgetContentLayout\n */\n\nimport \"./WidgetContentLayout.scss\";\nimport classNames from \"classnames\";\nimport type { ComponentPropsWithRef } from \"react\";\nimport * as React from \"react\";\n\nimport { Divider, ProgressLinear, ProgressRadial } from \"@itwin/itwinui-react\";\nimport type { ToggleSwitch } from \"@itwin/itwinui-react\";\n\nimport { HeaderLayout } from \"./header/HeaderLayout.js\";\n\ntype IconMenu = IconMenuButton | IconMenuDivider;\n\ninterface IconMenuButton {\n icon: React.ReactNode;\n onClick: () => void;\n label: string;\n tooltipContent?: string;\n type?: \"button\";\n disabled?: boolean;\n isActive?: boolean;\n}\n\ninterface IconMenuDivider {\n type: \"divider\";\n key?: string;\n}\n\ninterface WidgetContentLayoutHeaderProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Toggle switch in the header.\n */\n toggle?: React.ComponentProps<typeof ToggleSwitch>;\n /**\n * Array of buttons to display in the header.\n */\n buttons?: React.ReactNode[];\n /**\n * Menu in the header.\n */\n menu?: {\n title: string;\n items: { label: string; onClick: () => void }[];\n };\n /**\n * Title to display in the header.\n */\n title?: string;\n /**\n * Callback function for search functionality.\n */\n onSearch?: (value: string) => void;\n /**\n * Array of icon menu items to display in the header.\n */\n icons?: IconMenu[];\n /**\n * Size of the icons.\n */\n iconSize?: \"small\" | \"large\";\n /**\n * Child elements to render within the header.\n */\n children?: React.ReactNode;\n}\n\nconst Header = React.forwardRef<HTMLDivElement, WidgetContentLayoutHeaderProps>(\n function Header(props, ref) {\n const {\n className,\n children,\n toggle,\n buttons,\n menu,\n title,\n onSearch,\n icons,\n iconSize,\n ...rest\n } = props;\n\n return (\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-header\",\n className\n )}\n {...rest}\n ref={ref}\n >\n <HeaderLayout\n toggle={toggle}\n buttons={buttons}\n menu={menu}\n title={title}\n onSearch={onSearch}\n icons={icons}\n iconSize={iconSize}\n />\n {children}\n </div>\n );\n }\n);\n\nHeader.displayName = \"appui:WidgetContentLayout.Header\";\n\ninterface WidgetContentLayoutBodyProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Whether the body is in a loading state.\n */\n isLoading?: boolean;\n /**\n * Whether to show a non-blocking loading indicator.\n */\n isNonBlockingLoading?: boolean;\n /**\n * Child elements to render within the body.\n */\n children?: React.ReactNode;\n}\n\nconst Body = React.forwardRef<HTMLDivElement, WidgetContentLayoutBodyProps>(\n function Body(props, ref) {\n const { isNonBlockingLoading, isLoading, className, children, ...rest } =\n props;\n return (\n <div className=\"nz-widget-widgetContentLayout-body_wrapper\">\n {isLoading ? (\n <LoadingOverlay />\n ) : (\n isNonBlockingLoading && (\n <ProgressLinear className=\"nz-widget-widgetContentLayout-progress\" />\n )\n )}\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-body\",\n className\n )}\n {...rest}\n ref={ref}\n >\n {children}\n </div>\n </div>\n );\n }\n);\nBody.displayName = \"appui:WidgetContentLayout.Body\";\n\ninterface WidgetContentLayoutFooterProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Child elements to render within the footer.\n */\n children?: React.ReactNode;\n}\n\nconst Footer = React.forwardRef<HTMLDivElement, WidgetContentLayoutFooterProps>(\n function Footer(props, ref) {\n const { className, children, ...rest } = props;\n return (\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-footer\",\n className\n )}\n {...rest}\n ref={ref}\n >\n {children}\n </div>\n );\n }\n);\nFooter.displayName = \"appui:WidgetContentLayout.Footer\";\n\nfunction LoadingOverlay() {\n return (\n <div className=\"nz-widget-widgetContentLayout-loadingOverlay\">\n <ProgressRadial />\n </div>\n );\n}\n\ninterface WidgetContentLayoutProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Whether the entire layout is in a loading state.\n */\n isLoading?: boolean;\n /**\n * Whether to hide dividers between sections.\n */\n hideDividers?: boolean;\n /**\n * Child elements (Header, Body, Footer) to render.\n */\n children?: React.ReactNode;\n}\n\nconst WidgetContentLayoutInner = React.forwardRef<\n HTMLDivElement,\n WidgetContentLayoutProps\n>(function WidgetContentLayoutInner(props, ref) {\n const { isLoading, hideDividers, children, className, ...divProps } = props;\n const [headerElement, setHeaderElement] = React.useState<React.ReactNode>();\n const [bodyElement, setBodyElement] = React.useState<React.ReactNode>();\n const [footerElement, setFooterElement] = React.useState<React.ReactNode>();\n\n React.useEffect(() => {\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n if (child.type === Header) setHeaderElement(child);\n else if (child.type === Body) setBodyElement(child);\n else if (child.type === Footer) setFooterElement(child);\n });\n }, [children]);\n\n const widgetComponents = [headerElement, bodyElement, footerElement].filter(\n Boolean\n );\n\n return (\n <div\n className={classNames(\"nz-widget-widgetContentLayout\", className)}\n {...divProps}\n ref={ref}\n >\n {isLoading && <LoadingOverlay />}\n {widgetComponents.map((component, index) => (\n <React.Fragment key={index}>\n {component}\n {index < widgetComponents.length - 1 && !hideDividers && (\n <Divider className=\"nz-widget-widgetContentLayout-divider\" />\n )}\n </React.Fragment>\n ))}\n </div>\n );\n});\n\n/**\n * A layout component for widgets that provides a top section for buttons, a body section and a footer section.\n * @example\n * <WidgetContentLayout>\n * <WidgetContentLayout.Header />\n * <WidgetContentLayout.Body>\n * <ContentComponent />\n * </WidgetContentLayout.Body>\n * <WidgetContentLayout.Footer>\n * <FooterComponent />\n * </WidgetContentLayout.Footer>\n * </WidgetContentLayout>\n * @public\n */\nexport const WidgetContentLayout = Object.assign(WidgetContentLayoutInner, {\n Header,\n Body,\n Footer,\n});\n\nWidgetContentLayout.Header = Header;\nWidgetContentLayout.Body = Body;\nWidgetContentLayout.Footer = Footer;\n"]}
1
+ {"version":3,"file":"WidgetContentLayout.js","sourceRoot":"","sources":["../../../../../src/appui-react/layout/widget/widget-content-layout/WidgetContentLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module WidgetContentLayout\n */\n\nimport \"./WidgetContentLayout.scss\";\nimport classNames from \"classnames\";\nimport type { ComponentPropsWithRef } from \"react\";\nimport * as React from \"react\";\n\nimport { Divider, ProgressLinear, ProgressRadial } from \"@itwin/itwinui-react\";\nimport type { ToggleSwitch } from \"@itwin/itwinui-react\";\n\nimport { HeaderLayout } from \"./header/HeaderLayout.js\";\n\ntype IconMenu = IconMenuButton | IconMenuDivider;\n\ninterface IconMenuButton {\n icon: React.ReactNode;\n onClick: () => void;\n label: string;\n tooltipContent?: string;\n type?: \"button\";\n disabled?: boolean;\n isActive?: boolean;\n}\n\ninterface IconMenuDivider {\n type: \"divider\";\n key?: string;\n}\n\ninterface WidgetContentLayoutHeaderProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Toggle switch in the header.\n */\n toggle?: React.ComponentProps<typeof ToggleSwitch>;\n /**\n * Array of buttons to display in the header.\n */\n buttons?: React.ReactNode[];\n /**\n * Menu in the header.\n */\n menu?: {\n title: string;\n items: { label: string; onClick: () => void }[];\n };\n /**\n * Title to display in the header.\n */\n title?: string;\n /**\n * Callback function for search functionality.\n */\n onSearch?: (value: string) => void;\n /**\n * Array of icon menu items to display in the header.\n */\n icons?: IconMenu[];\n /**\n * Size of the icons.\n */\n iconSize?: \"small\" | \"large\";\n /**\n * Child elements to render within the header.\n */\n children?: React.ReactNode;\n}\n\nconst Header = React.forwardRef<HTMLDivElement, WidgetContentLayoutHeaderProps>(\n function Header(props, ref) {\n const {\n className,\n children,\n toggle,\n buttons,\n menu,\n title,\n onSearch,\n icons,\n iconSize,\n ...rest\n } = props;\n\n return (\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-header\",\n className\n )}\n {...rest}\n ref={ref}\n >\n <HeaderLayout\n toggle={toggle}\n buttons={buttons}\n menu={menu}\n title={title}\n onSearch={onSearch}\n icons={icons}\n iconSize={iconSize}\n >\n {children}\n </HeaderLayout>\n </div>\n );\n }\n);\n\nHeader.displayName = \"appui:WidgetContentLayout.Header\";\n\ninterface WidgetContentLayoutBodyProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Whether the body is in a loading state.\n */\n isLoading?: boolean;\n /**\n * Whether to show a non-blocking loading indicator.\n */\n isNonBlockingLoading?: boolean;\n /**\n * Child elements to render within the body.\n */\n children?: React.ReactNode;\n}\n\nconst Body = React.forwardRef<HTMLDivElement, WidgetContentLayoutBodyProps>(\n function Body(props, ref) {\n const { isNonBlockingLoading, isLoading, className, children, ...rest } =\n props;\n return (\n <div className=\"nz-widget-widgetContentLayout-body_wrapper\">\n {isLoading ? (\n <LoadingOverlay />\n ) : (\n isNonBlockingLoading && (\n <ProgressLinear className=\"nz-widget-widgetContentLayout-progress\" />\n )\n )}\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-body\",\n className\n )}\n {...rest}\n ref={ref}\n >\n {children}\n </div>\n </div>\n );\n }\n);\nBody.displayName = \"appui:WidgetContentLayout.Body\";\n\ninterface WidgetContentLayoutFooterProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Child elements to render within the footer.\n */\n children?: React.ReactNode;\n}\n\nconst Footer = React.forwardRef<HTMLDivElement, WidgetContentLayoutFooterProps>(\n function Footer(props, ref) {\n const { className, children, ...rest } = props;\n return (\n <div\n className={classNames(\n \"nz-widget-widgetContentLayout-footer\",\n className\n )}\n {...rest}\n ref={ref}\n >\n {children}\n </div>\n );\n }\n);\nFooter.displayName = \"appui:WidgetContentLayout.Footer\";\n\nfunction LoadingOverlay() {\n return (\n <div className=\"nz-widget-widgetContentLayout-loadingOverlay\">\n <ProgressRadial />\n </div>\n );\n}\n\ninterface WidgetContentLayoutProps extends ComponentPropsWithRef<\"div\"> {\n /**\n * Whether the entire layout is in a loading state.\n */\n isLoading?: boolean;\n /**\n * Whether to hide dividers between sections.\n */\n hideDividers?: boolean;\n /**\n * Child elements (Header, Body, Footer) to render.\n */\n children?: React.ReactNode;\n}\n\nconst WidgetContentLayoutInner = React.forwardRef<\n HTMLDivElement,\n WidgetContentLayoutProps\n>(function WidgetContentLayoutInner(props, ref) {\n const { isLoading, hideDividers, children, className, ...divProps } = props;\n const [headerElement, setHeaderElement] = React.useState<React.ReactNode>();\n const [bodyElement, setBodyElement] = React.useState<React.ReactNode>();\n const [footerElement, setFooterElement] = React.useState<React.ReactNode>();\n\n React.useEffect(() => {\n React.Children.forEach(children, (child) => {\n if (!React.isValidElement(child)) return;\n if (child.type === Header) setHeaderElement(child);\n else if (child.type === Body) setBodyElement(child);\n else if (child.type === Footer) setFooterElement(child);\n });\n }, [children]);\n\n const widgetComponents = [headerElement, bodyElement, footerElement].filter(\n Boolean\n );\n\n return (\n <div\n className={classNames(\"nz-widget-widgetContentLayout\", className)}\n {...divProps}\n ref={ref}\n data-_appui-hide-dividers={hideDividers ? \"true\" : \"false\"}\n >\n {isLoading && <LoadingOverlay />}\n {widgetComponents.map((component, index) => (\n <React.Fragment key={index}>\n {component}\n {index < widgetComponents.length - 1 && !hideDividers && (\n <Divider className=\"nz-widget-widgetContentLayout-divider\" />\n )}\n </React.Fragment>\n ))}\n </div>\n );\n});\n\n/**\n * A layout component for widgets that provides a top section for buttons, a body section and a footer section.\n * @example\n * <WidgetContentLayout>\n * <WidgetContentLayout.Header />\n * <WidgetContentLayout.Body>\n * <ContentComponent />\n * </WidgetContentLayout.Body>\n * <WidgetContentLayout.Footer>\n * <FooterComponent />\n * </WidgetContentLayout.Footer>\n * </WidgetContentLayout>\n * @public\n */\nexport const WidgetContentLayout = Object.assign(WidgetContentLayoutInner, {\n Header,\n Body,\n Footer,\n});\n\nWidgetContentLayout.Header = Header;\nWidgetContentLayout.Body = Body;\nWidgetContentLayout.Footer = Footer;\n"]}