/** @packageDocumentation * @module Base */ import { Draft } from "immer"; import { PointProps, RectangleProps, SizeProps } from "@bentley/ui-core"; import { HorizontalPanelSide, PanelSide, VerticalPanelSide } from "../widget-panels/Panel"; /** @internal future */ export interface SizeAndPositionProps extends SizeProps, PointProps { } /** @internal future */ export interface TabState { readonly id: string; readonly label: string; readonly preferredFloatingWidgetSize?: SizeProps; readonly preferredPopoutWidgetSize?: SizeAndPositionProps; readonly preferredPanelWidgetSize?: "fit-content"; readonly allowedPanelTargets?: PanelSide[]; readonly canPopout?: boolean; } /** @internal future */ export interface TabsState { readonly [id: string]: TabState; } /** @internal future */ export interface WidgetState { readonly activeTabId: TabState["id"]; readonly id: string; readonly minimized: boolean; readonly tabs: ReadonlyArray; } /** @internal future */ export interface FloatingWidgetState { readonly bounds: RectangleProps; readonly id: WidgetState["id"]; readonly home: FloatingWidgetHomeState; } /** @internal future */ export interface PopoutWidgetState { readonly bounds: RectangleProps; readonly id: WidgetState["id"]; readonly home: FloatingWidgetHomeState; } /** @internal future */ export interface FloatingWidgetHomeState { readonly widgetIndex: number; readonly widgetId: WidgetState["id"] | undefined; readonly side: PanelSide; } /** @internal future */ export interface DraggedTabState { readonly tabId: TabState["id"]; readonly position: PointProps; readonly home: FloatingWidgetHomeState; } /** @internal future */ export interface WidgetsState { readonly [id: string]: WidgetState; } /** @internal future */ export interface FloatingWidgetsState { readonly byId: { readonly [id: string]: FloatingWidgetState; }; readonly allIds: ReadonlyArray; } /** @internal future */ export interface PopoutWidgetsState { readonly byId: { readonly [id: string]: PopoutWidgetState; }; readonly allIds: ReadonlyArray; } /** @internal future */ export interface TabTargetTabState { readonly widgetId: WidgetState["id"]; readonly tabIndex: number; readonly type: "tab"; } /** @internal future */ export interface TabTargetPanelState { readonly side: PanelSide; readonly newWidgetId: WidgetState["id"]; readonly type: "panel"; } /** @internal future */ export interface TabTargetWidgetState { readonly side: PanelSide; readonly newWidgetId: WidgetState["id"]; readonly widgetIndex: number; readonly type: "widget"; } /** @internal future */ export interface TabTargetFloatingWidgetState { readonly type: "floatingWidget"; readonly newFloatingWidgetId: FloatingWidgetState["id"]; readonly size: SizeProps; } /** @internal future */ export declare type TabTargetState = TabTargetPanelState | TabTargetWidgetState | TabTargetTabState | TabTargetFloatingWidgetState; /** @internal future */ export declare type WidgetTargetPanelState = TabTargetPanelState; /** @internal future */ export declare type WidgetTargetWidgetState = TabTargetWidgetState; /** @internal future */ export declare type WidgetTargetTabState = TabTargetTabState; /** @internal future */ export interface WidgetTargetFloatingWidgetState { readonly type: "floatingWidget"; } /** @internal future */ export declare type WidgetTargetState = WidgetTargetPanelState | WidgetTargetWidgetState | WidgetTargetTabState | WidgetTargetFloatingWidgetState; /** @internal future */ export interface PanelsState { readonly bottom: HorizontalPanelState; readonly left: VerticalPanelState; readonly right: VerticalPanelState; readonly top: HorizontalPanelState; } /** @internal future */ export interface PanelState { readonly collapseOffset: number; readonly collapsed: boolean; readonly maxSize: number; readonly minSize: number; readonly pinned: boolean; readonly resizable: boolean; readonly side: PanelSide; readonly size: number | undefined; readonly widgets: ReadonlyArray; readonly maxWidgetCount: number; } /** @internal future */ export interface HorizontalPanelState extends PanelState { readonly span: boolean; readonly side: HorizontalPanelSide; } /** @internal future */ export interface VerticalPanelState extends PanelState { readonly side: VerticalPanelSide; } /** @internal future */ export interface DockedToolSettingsState { readonly type: "docked"; } /** @internal future */ export interface WidgetToolSettingsState { readonly type: "widget"; } /** @internal future */ export declare type ToolSettingsState = DockedToolSettingsState | WidgetToolSettingsState; /** @internal future */ export interface NineZoneState { readonly draggedTab: DraggedTabState | undefined; readonly floatingWidgets: FloatingWidgetsState; readonly popoutWidgets: PopoutWidgetsState; readonly panels: PanelsState; readonly tabs: TabsState; readonly toolSettings: ToolSettingsState; readonly widgets: WidgetsState; readonly size: SizeProps; } /** @internal future */ export interface ResizeAction { readonly type: "RESIZE"; readonly size: SizeProps; } /** @internal future */ export interface PanelToggleCollapsedAction { readonly type: "PANEL_TOGGLE_COLLAPSED"; readonly side: PanelSide; } /** @internal future */ export interface PanelSetCollapsedAction { readonly type: "PANEL_SET_COLLAPSED"; readonly collapsed: boolean; readonly side: PanelSide; } /** @internal future */ export interface PanelSetSizeAction { readonly type: "PANEL_SET_SIZE"; readonly side: PanelSide; readonly size: number; } /** @internal future */ export interface PanelToggleSpanAction { readonly type: "PANEL_TOGGLE_SPAN"; readonly side: HorizontalPanelSide; } /** @internal future */ export interface PanelTogglePinnedAction { readonly type: "PANEL_TOGGLE_PINNED"; readonly side: PanelSide; } /** @internal future */ export interface PanelInitializeAction { readonly type: "PANEL_INITIALIZE"; readonly side: PanelSide; readonly size: number; } /** @internal future */ export interface FloatingWidgetResizeAction { readonly type: "FLOATING_WIDGET_RESIZE"; readonly id: FloatingWidgetState["id"]; readonly resizeBy: RectangleProps; } /** @internal future */ export interface FloatingWidgetBringToFrontAction { readonly type: "FLOATING_WIDGET_BRING_TO_FRONT"; readonly id: FloatingWidgetState["id"]; } /** @internal future */ export interface FloatingWidgetSendBackAction { readonly type: "FLOATING_WIDGET_SEND_BACK"; readonly id: FloatingWidgetState["id"]; } /** @internal future */ export interface PopoutWidgetSendBackAction { readonly type: "POPOUT_WIDGET_SEND_BACK"; readonly id: PopoutWidgetState["id"]; } /** @internal future */ export interface PanelWidgetDragStartAction { readonly type: "PANEL_WIDGET_DRAG_START"; readonly newFloatingWidgetId: FloatingWidgetState["id"]; readonly id: WidgetState["id"]; readonly bounds: RectangleProps; readonly side: PanelSide; } /** @internal future */ export interface WidgetDragAction { readonly type: "WIDGET_DRAG"; readonly dragBy: PointProps; readonly floatingWidgetId: FloatingWidgetState["id"]; } /** @internal future */ export interface WidgetDragEndAction { readonly type: "WIDGET_DRAG_END"; readonly floatingWidgetId: FloatingWidgetState["id"]; readonly target: WidgetTargetState; } /** @internal future */ export interface WidgetTabClickAction { readonly type: "WIDGET_TAB_CLICK"; readonly side: PanelSide | undefined; readonly widgetId: WidgetState["id"]; readonly id: TabState["id"]; } /** @internal future */ export interface WidgetTabDoubleClickAction { readonly type: "WIDGET_TAB_DOUBLE_CLICK"; readonly side: PanelSide | undefined; readonly widgetId: WidgetState["id"]; readonly floatingWidgetId: FloatingWidgetState["id"] | undefined; readonly id: TabState["id"]; } /** @internal future */ export interface WidgetTabPopoutAction { readonly type: "WIDGET_TAB_POPOUT"; readonly id: WidgetState["activeTabId"]; } /** @internal future */ export interface WidgetTabDragStartAction { readonly type: "WIDGET_TAB_DRAG_START"; readonly side: PanelSide | undefined; readonly widgetId: WidgetState["id"]; readonly floatingWidgetId: FloatingWidgetState["id"] | undefined; readonly id: TabState["id"]; readonly position: PointProps; } /** @internal future */ export interface WidgetTabDragAction { readonly type: "WIDGET_TAB_DRAG"; readonly dragBy: PointProps; } /** @internal future */ export interface WidgetTabDragEndAction { readonly type: "WIDGET_TAB_DRAG_END"; readonly id: TabState["id"]; readonly target: TabTargetState; } /** @internal future */ export interface ToolSettingsDragStartAction { readonly type: "TOOL_SETTINGS_DRAG_START"; readonly newFloatingWidgetId: FloatingWidgetState["id"]; } /** @internal future */ export interface ToolSettingsDockAction { readonly type: "TOOL_SETTINGS_DOCK"; } /** @internal future */ export declare type NineZoneActionTypes = ResizeAction | PanelToggleCollapsedAction | PanelSetCollapsedAction | PanelSetSizeAction | PanelToggleSpanAction | PanelTogglePinnedAction | PanelInitializeAction | FloatingWidgetResizeAction | FloatingWidgetBringToFrontAction | FloatingWidgetSendBackAction | PopoutWidgetSendBackAction | PanelWidgetDragStartAction | WidgetDragAction | WidgetDragEndAction | WidgetTabClickAction | WidgetTabDoubleClickAction | WidgetTabDragStartAction | WidgetTabDragAction | WidgetTabDragEndAction | WidgetTabPopoutAction | ToolSettingsDragStartAction | ToolSettingsDockAction; /** @internal */ export declare const toolSettingsTabId = "nz-tool-settings-tab"; /** @internal future */ export declare const NineZoneStateReducer: (state: NineZoneState, action: NineZoneActionTypes) => NineZoneState; /** @internal */ export declare function floatingWidgetBringToFront(state: Draft, floatingWidgetId: FloatingWidgetState["id"]): void; /** Removes tab from the UI, but keeps the tab state. * @internal */ export declare function removeWidgetTab(state: Draft, tabId: TabState["id"]): void; /** Removes tab from the UI and deletes the tab state. * @internal */ export declare function removeTab(state: Draft, tabId: TabState["id"]): void; /** @internal */ export declare function createPanelsState(args?: Partial): PanelsState; /** @internal */ export declare function createTabsState(args?: Partial): TabsState; /** @internal future */ export declare function createNineZoneState(args?: Partial): NineZoneState; /** @internal */ export declare function createWidgetState(id: WidgetState["id"], tabs: WidgetState["tabs"], args?: Partial): WidgetState; /** @internal */ export declare function createFloatingWidgetState(id: FloatingWidgetState["id"], args?: Partial): FloatingWidgetState; /** @internal */ export declare function createPopoutWidgetState(id: PopoutWidgetState["id"], args?: Partial): PopoutWidgetState; /** @internal */ export declare function createTabState(id: TabState["id"], args?: Partial): TabState; /** @internal */ export declare function createDraggedTabState(tabId: DraggedTabState["tabId"], args?: Partial): DraggedTabState; /** @internal */ export declare function addPanelWidget(state: NineZoneState, side: PanelSide, id: WidgetState["id"], tabs: WidgetState["tabs"], widgetArgs?: Partial): NineZoneState; /** @internal */ export declare function addFloatingWidget(state: NineZoneState, id: FloatingWidgetState["id"], tabs: WidgetState["tabs"], floatingWidgetArgs?: Partial, widgetArgs?: Partial): NineZoneState; /** @internal */ export declare function addPopoutWidget(state: NineZoneState, id: PopoutWidgetState["id"], tabs: WidgetState["tabs"], popoutWidgetArgs?: Partial, widgetArgs?: Partial): NineZoneState; /** @internal */ export declare function addTab(state: NineZoneState, id: TabState["id"], tabArgs?: Partial): NineZoneState; /** @internal */ export declare function createPanelState(side: PanelSide): { collapseOffset: number; collapsed: boolean; maxSize: number; minSize: number; pinned: boolean; resizable: boolean; side: PanelSide; size: undefined; widgets: never[]; maxWidgetCount: number; }; /** @internal */ export declare function createVerticalPanelState(side: VerticalPanelSide, args?: Partial): VerticalPanelState; /** @internal */ export declare function createHorizontalPanelState(side: HorizontalPanelSide, args?: Partial): HorizontalPanelState; /** @internal */ export declare function isHorizontalPanelState(state: PanelState): state is HorizontalPanelState; /** @internal */ export declare function setRectangleProps(props: Draft, bounds: RectangleProps): void; declare type KeysOfType = { [K in keyof T]: T[K] extends Type ? K : never; }[keyof T]; /** @internal */ export declare function initSizeAndPositionProps>(obj: T, key: K, inValue: SizeAndPositionProps): void; interface PanelLocation { widgetId: WidgetState["id"]; side: PanelSide; } interface FloatingLocation { widgetId: WidgetState["id"]; floatingWidgetId: FloatingWidgetState["id"]; } interface PopoutLocation { widgetId: WidgetState["id"]; popoutWidgetId: PopoutWidgetState["id"]; } declare type TabLocation = PanelLocation | FloatingLocation | PopoutLocation; /** @internal */ export declare function isFloatingLocation(location: TabLocation): location is FloatingLocation; /** @internal */ export declare function isPopoutLocation(location: TabLocation): location is PopoutLocation; /** @internal */ export declare function isPanelLocation(location: TabLocation): location is PanelLocation; /** @internal */ export declare function isFloatingWidgetLocation(location: WidgetLocation): location is FloatingLocation; /** @internal */ export declare function isPopoutWidgetLocation(location: WidgetLocation): location is PopoutLocation; /** @internal */ export declare function findTab(state: NineZoneState, id: TabState["id"]): TabLocation | undefined; declare type WidgetLocation = { side: PanelSide; } | { floatingWidgetId: FloatingWidgetState["id"]; } | { popoutWidgetId: PopoutWidgetState["id"]; }; /** @internal */ export declare function findWidget(state: NineZoneState, id: WidgetState["id"]): WidgetLocation | undefined; /** @internal */ export declare function floatWidget(state: NineZoneState, widgetTabId: string, point?: PointProps, size?: SizeProps): NineZoneState | undefined; /** @internal */ export declare function dockWidgetContainer(state: NineZoneState, widgetTabId: string, idIsContainerId?: boolean): NineZoneState | undefined; /** @internal */ export declare function convertFloatingWidgetContainerToPopout(state: NineZoneState, widgetContainerId: string): NineZoneState; /** @internal */ export declare function convertPopoutWidgetContainerToFloating(state: NineZoneState, widgetContainerId: string): NineZoneState; /** * When running in web-browser - browser prohibits auto opening of popup windows so convert any PopoutWidgets to * FloatingWidgets in this situation. * @internal */ export declare function convertAllPopupWidgetContainersToFloating(state: NineZoneState): NineZoneState; /** @internal */ export declare function popoutWidgetToChildWindow(state: NineZoneState, widgetTabId: string, point?: PointProps, size?: SizeProps): NineZoneState | undefined; export {}; //# sourceMappingURL=NineZoneState.d.ts.map