@itwin/appui-react 5.1.0 → 5.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/lib/appui-react/UiFramework.d.ts +2 -2
  3. package/lib/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/appui-react/UiFramework.js +4 -2
  5. package/lib/appui-react/UiFramework.js.map +1 -1
  6. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts +16 -2
  7. package/lib/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  8. package/lib/appui-react/configurableui/ConfigurableUiContent.js +41 -23
  9. package/lib/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  10. package/lib/appui-react/cursor/CursorInformation.d.ts +7 -0
  11. package/lib/appui-react/cursor/CursorInformation.d.ts.map +1 -1
  12. package/lib/appui-react/cursor/CursorInformation.js +13 -0
  13. package/lib/appui-react/cursor/CursorInformation.js.map +1 -1
  14. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js +1 -1
  15. package/lib/appui-react/cursor/cursorpopup/CursorPopup.js.map +1 -1
  16. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts +3 -0
  17. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.d.ts.map +1 -1
  18. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js +45 -30
  19. package/lib/appui-react/cursor/cursorpopup/CursorPopupManager.js.map +1 -1
  20. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts +12 -15
  21. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.d.ts.map +1 -1
  22. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js +47 -38
  23. package/lib/appui-react/cursor/cursorprompt/CursorPrompt.js.map +1 -1
  24. package/lib/appui-react/frontstage/FrontstageConfig.d.ts +6 -0
  25. package/lib/appui-react/frontstage/FrontstageConfig.d.ts.map +1 -1
  26. package/lib/appui-react/frontstage/FrontstageConfig.js.map +1 -1
  27. package/lib/appui-react/frontstage/FrontstageDef.d.ts +2 -0
  28. package/lib/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  29. package/lib/appui-react/frontstage/FrontstageDef.js +4 -0
  30. package/lib/appui-react/frontstage/FrontstageDef.js.map +1 -1
  31. package/lib/appui-react/layout/StandardLayout.d.ts.map +1 -1
  32. package/lib/appui-react/layout/StandardLayout.js +5 -1
  33. package/lib/appui-react/layout/StandardLayout.js.map +1 -1
  34. package/lib/appui-react/layout/base/NineZone.d.ts +0 -5
  35. package/lib/appui-react/layout/base/NineZone.d.ts.map +1 -1
  36. package/lib/appui-react/layout/base/NineZone.js.map +1 -1
  37. package/lib/appui-react/layout/widget/Dock.d.ts.map +1 -1
  38. package/lib/appui-react/layout/widget/Dock.js +6 -4
  39. package/lib/appui-react/layout/widget/Dock.js.map +1 -1
  40. package/lib/appui-react/layout/widget/PinToggle.d.ts.map +1 -1
  41. package/lib/appui-react/layout/widget/PinToggle.js +7 -5
  42. package/lib/appui-react/layout/widget/PinToggle.js.map +1 -1
  43. package/lib/appui-react/layout/widget/PopoutToggle.d.ts.map +1 -1
  44. package/lib/appui-react/layout/widget/PopoutToggle.js +6 -4
  45. package/lib/appui-react/layout/widget/PopoutToggle.js.map +1 -1
  46. package/lib/appui-react/layout/widget/SendBack.d.ts.map +1 -1
  47. package/lib/appui-react/layout/widget/SendBack.js +6 -6
  48. package/lib/appui-react/layout/widget/SendBack.js.map +1 -1
  49. package/lib/appui-react/layout/widget/TabBar.d.ts.map +1 -1
  50. package/lib/appui-react/layout/widget/TabBar.js +4 -2
  51. package/lib/appui-react/layout/widget/TabBar.js.map +1 -1
  52. package/lib/appui-react/layout/widget/WidgetAction.d.ts +16 -0
  53. package/lib/appui-react/layout/widget/WidgetAction.d.ts.map +1 -0
  54. package/lib/appui-react/{preview/widget-action-dropdown/Button.js → layout/widget/WidgetAction.js} +13 -9
  55. package/lib/appui-react/layout/widget/WidgetAction.js.map +1 -0
  56. package/lib/appui-react/layout/widget/WidgetActions.d.ts +45 -0
  57. package/lib/appui-react/layout/widget/WidgetActions.d.ts.map +1 -0
  58. package/lib/appui-react/layout/widget/{Buttons.js → WidgetActions.js} +35 -29
  59. package/lib/appui-react/layout/widget/WidgetActions.js.map +1 -0
  60. package/lib/appui-react/layout/widget/{Buttons.scss → WidgetActions.scss} +1 -1
  61. package/lib/appui-react/layout/widget-panels/useAnimatePanel.d.ts +1 -1
  62. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.js +2 -2
  63. package/lib/appui-react/preview/control-widget-visibility/CloseWidgetButton.js.map +1 -1
  64. package/lib/appui-react/preview/enable-maximized-widget/MaximizeToggle.js +2 -2
  65. package/lib/appui-react/preview/enable-maximized-widget/MaximizeToggle.js.map +1 -1
  66. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.d.ts +2 -2
  67. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.d.ts.map +1 -1
  68. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.js +4 -4
  69. package/lib/appui-react/preview/widget-action-dropdown/MoreButton.js.map +1 -1
  70. package/lib/appui-react/redux/FrameworkState.d.ts +1 -1
  71. package/lib/appui-react/redux/SessionState.d.ts +2 -2
  72. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts +11 -7
  73. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.d.ts.map +1 -1
  74. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js +22 -4
  75. package/lib/appui-react/statusfields/toolassistance/ToolAssistanceField.js.map +1 -1
  76. package/lib/appui-react/theme/ThemeManager.d.ts +1 -1
  77. package/lib/appui-react/theme/ThemeManager.js +1 -1
  78. package/lib/appui-react/theme/ThemeManager.js.map +1 -1
  79. package/lib/appui-react/toolbar/ToolbarItem.d.ts +4 -0
  80. package/lib/appui-react/toolbar/ToolbarItem.d.ts.map +1 -1
  81. package/lib/appui-react/toolbar/ToolbarItem.js.map +1 -1
  82. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.d.ts +1 -1
  83. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.d.ts.map +1 -1
  84. package/lib/appui-react/ui-items-provider/AbstractUiItemsManager.js.map +1 -1
  85. package/lib/appui-react/ui-items-provider/UiItemsManager.d.ts +25 -23
  86. package/lib/appui-react/ui-items-provider/UiItemsManager.d.ts.map +1 -1
  87. package/lib/appui-react/ui-items-provider/UiItemsManager.js +67 -40
  88. package/lib/appui-react/ui-items-provider/UiItemsManager.js.map +1 -1
  89. package/lib/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  90. package/lib/appui-react/widget-panels/Frontstage.js +2 -5
  91. package/lib/appui-react/widget-panels/Frontstage.js.map +1 -1
  92. package/lib/appui-react/widgets/Widget.d.ts +15 -2
  93. package/lib/appui-react/widgets/Widget.d.ts.map +1 -1
  94. package/lib/appui-react/widgets/Widget.js.map +1 -1
  95. package/lib/appui-react/widgets/useWidget.d.ts +1 -1
  96. package/lib/appui-react.d.ts +3 -1
  97. package/lib/appui-react.d.ts.map +1 -1
  98. package/lib/appui-react.js +3 -1
  99. package/lib/appui-react.js.map +1 -1
  100. package/lib/cjs/appui-react/layout/widget/{Buttons.scss → WidgetActions.scss} +1 -1
  101. package/lib/esm/appui-react/layout/widget/{Buttons.scss → WidgetActions.scss} +1 -1
  102. package/package.json +11 -12
  103. package/lib/appui-react/layout/widget/Buttons.d.ts +0 -12
  104. package/lib/appui-react/layout/widget/Buttons.d.ts.map +0 -1
  105. package/lib/appui-react/layout/widget/Buttons.js.map +0 -1
  106. package/lib/appui-react/preview/widget-action-dropdown/Button.d.ts +0 -17
  107. package/lib/appui-react/preview/widget-action-dropdown/Button.d.ts.map +0 -1
  108. package/lib/appui-react/preview/widget-action-dropdown/Button.js.map +0 -1
@@ -7,16 +7,18 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { SvgWindowPopout } from "@itwin/itwinui-icons-react";
10
- import { NineZoneDispatchContext, useLabel } from "../base/NineZone.js";
10
+ import { NineZoneDispatchContext } from "../base/NineZone.js";
11
11
  import { useActiveTabId } from "./Widget.js";
12
12
  import { useLayout } from "../base/LayoutStore.js";
13
- import { ActionButton } from "../../preview/widget-action-dropdown/Button.js";
13
+ import { WidgetAction } from "./WidgetAction.js";
14
+ import { useTranslation } from "../../hooks/useTranslation.js";
14
15
  /** @internal */
15
16
  export function PopoutToggle() {
16
17
  const dispatch = React.useContext(NineZoneDispatchContext);
17
18
  const activeTabId = useActiveTabId();
18
- const label = useLabel("popoutActiveTab");
19
- return (React.createElement(ActionButton, { icon: React.createElement(SvgWindowPopout, null), label: label, onClick: () => {
19
+ const { translate } = useTranslation();
20
+ const label = translate("widget.tooltips.popoutActiveTab");
21
+ return (React.createElement(WidgetAction, { icon: React.createElement(SvgWindowPopout, null), label: label, onClick: () => {
20
22
  dispatch({
21
23
  id: activeTabId,
22
24
  type: "WIDGET_TAB_POPOUT",
@@ -1 +1 @@
1
- {"version":3,"file":"PopoutToggle.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/PopoutToggle.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAE9E,gBAAgB;AAChB,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAE1C,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,oBAAC,eAAe,OAAG,EACzB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,CAAC;gBACP,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;QACL,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,OAAO,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,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 Widget\n */\n\nimport * as React from \"react\";\nimport { SvgWindowPopout } from \"@itwin/itwinui-icons-react\";\nimport { NineZoneDispatchContext, useLabel } from \"../base/NineZone.js\";\nimport { useActiveTabId } from \"./Widget.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport { ActionButton } from \"../../preview/widget-action-dropdown/Button.js\";\n\n/** @internal */\nexport function PopoutToggle() {\n const dispatch = React.useContext(NineZoneDispatchContext);\n const activeTabId = useActiveTabId();\n const label = useLabel(\"popoutActiveTab\");\n\n return (\n <ActionButton\n icon={<SvgWindowPopout />}\n label={label}\n onClick={() => {\n dispatch({\n id: activeTabId,\n type: \"WIDGET_TAB_POPOUT\",\n });\n }}\n />\n );\n}\n\n/** @internal */\nexport function usePopoutToggle() {\n const tabId = useActiveTabId();\n return useLayout((state) => {\n const tab = state.tabs[tabId];\n return !!tab.canPopout;\n });\n}\n"]}
1
+ {"version":3,"file":"PopoutToggle.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/PopoutToggle.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,gBAAgB;AAChB,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,iCAAiC,CAAC,CAAC;IAE3D,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,oBAAC,eAAe,OAAG,EACzB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,CAAC;gBACP,EAAE,EAAE,WAAW;gBACf,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;QACL,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,eAAe;IAC7B,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,OAAO,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,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 Widget\n */\n\nimport * as React from \"react\";\nimport { SvgWindowPopout } from \"@itwin/itwinui-icons-react\";\nimport { NineZoneDispatchContext } from \"../base/NineZone.js\";\nimport { useActiveTabId } from \"./Widget.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport { WidgetAction } from \"./WidgetAction.js\";\nimport { useTranslation } from \"../../hooks/useTranslation.js\";\n\n/** @internal */\nexport function PopoutToggle() {\n const dispatch = React.useContext(NineZoneDispatchContext);\n const activeTabId = useActiveTabId();\n const { translate } = useTranslation();\n const label = translate(\"widget.tooltips.popoutActiveTab\");\n\n return (\n <WidgetAction\n icon={<SvgWindowPopout />}\n label={label}\n onClick={() => {\n dispatch({\n id: activeTabId,\n type: \"WIDGET_TAB_POPOUT\",\n });\n }}\n />\n );\n}\n\n/** @internal */\nexport function usePopoutToggle() {\n const tabId = useActiveTabId();\n return useLayout((state) => {\n const tab = state.tabs[tabId];\n return !!tab.canPopout;\n });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SendBack.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/SendBack.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK/D,gBAAgB;AAChB,eAAO,MAAM,8BAA8B,iFAEzB,CAAC;AAEnB,gBAAgB;AAChB,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;;;;;;;;;;;;EAoC5B;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB;;;;;;;;;;;;cAKnC;AAiBD,gBAAgB;AAChB,wBAAgB,QAAQ,sBAsCvB;AAED,gBAAgB;AAChB,wBAAgB,WAAW,YAO1B"}
1
+ {"version":3,"file":"SendBack.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/SendBack.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAM/D,gBAAgB;AAChB,eAAO,MAAM,8BAA8B,iFAEzB,CAAC;AAEnB,gBAAgB;AAChB,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;;;;;;;;;;;;EAoC5B;AAED,gBAAgB;AAChB,wBAAgB,oBAAoB;;;;;;;;;;;;cAKnC;AAiBD,gBAAgB;AAChB,wBAAgB,QAAQ,sBAqCvB;AAED,gBAAgB;AAChB,wBAAgB,WAAW,YAO1B"}
@@ -9,13 +9,14 @@ import * as React from "react";
9
9
  import { create } from "zustand";
10
10
  import { assert } from "@itwin/core-bentley";
11
11
  import { SvgDockBottom, SvgDockLeft, SvgDockRight, SvgDockTop, } from "@itwin/itwinui-icons-react";
12
- import { NineZoneDispatchContext, useLabel } from "../base/NineZone.js";
12
+ import { NineZoneDispatchContext } from "../base/NineZone.js";
13
13
  import { useLayout } from "../base/LayoutStore.js";
14
14
  import { useFloatingWidgetId, useWidgetAllowedToDock, } from "./FloatingWidget.js";
15
15
  import { getWidgetPanelSectionId } from "../state/PanelState.js";
16
16
  import { useIsToolSettingsTab } from "./useIsToolSettingsTab.js";
17
- import { ActionButton } from "../../preview/widget-action-dropdown/Button.js";
17
+ import { WidgetAction } from "./WidgetAction.js";
18
18
  import { useIsMaximizedWidget } from "../../preview/enable-maximized-widget/useMaximizedWidget.js";
19
+ import { useTranslation } from "../../hooks/useTranslation.js";
19
20
  /** @internal */
20
21
  export const useActiveSendBackWidgetIdStore = create(() => undefined);
21
22
  /** @internal */
@@ -66,7 +67,8 @@ export function SendBack() {
66
67
  const id = useFloatingWidgetId();
67
68
  assert(!!id);
68
69
  const dispatch = React.useContext(NineZoneDispatchContext);
69
- const label = useLabel("sendWidgetHomeTitle");
70
+ const { translate } = useTranslation();
71
+ const label = translate("widget.tooltips.sendHome");
70
72
  const setActiveWidgetId = (newId) => useActiveSendBackWidgetIdStore.setState(newId);
71
73
  const onClick = () => {
72
74
  setActiveWidgetId(undefined);
@@ -88,9 +90,7 @@ export function SendBack() {
88
90
  setActiveWidgetId(undefined);
89
91
  };
90
92
  const eventHandlers = { onMouseOver, onFocus, onMouseOut, onBlur };
91
- return (React.createElement(ActionButton, { icon: React.createElement(Icon, null), label: label, onClick: onClick, buttonProps: eventHandlers,
92
- // TODO: can not pass down event handlers due to iTwinUI type issues.
93
- menuProps: eventHandlers }));
93
+ return (React.createElement(WidgetAction, { icon: React.createElement(Icon, null), label: label, onClick: onClick, ...eventHandlers }));
94
94
  }
95
95
  /** @internal */
96
96
  export function useSendBack() {
@@ -1 +1 @@
1
- {"version":3,"file":"SendBack.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/SendBack.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 * as React from \"react\";\nimport { create } from \"zustand\";\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n SvgDockBottom,\n SvgDockLeft,\n SvgDockRight,\n SvgDockTop,\n} from \"@itwin/itwinui-icons-react\";\nimport { NineZoneDispatchContext, useLabel } from \"../base/NineZone.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport {\n useFloatingWidgetId,\n useWidgetAllowedToDock,\n} from \"./FloatingWidget.js\";\nimport type { WidgetState } from \"../state/WidgetState.js\";\nimport { getWidgetPanelSectionId } from \"../state/PanelState.js\";\nimport type { NineZoneState } from \"../state/NineZoneState.js\";\nimport { useIsToolSettingsTab } from \"./useIsToolSettingsTab.js\";\nimport { ActionButton } from \"../../preview/widget-action-dropdown/Button.js\";\nimport { useIsMaximizedWidget } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\n\n/** @internal */\nexport const useActiveSendBackWidgetIdStore = create<\n WidgetState[\"id\"] | undefined\n>(() => undefined);\n\n/** @internal */\nexport function getSendBackHomeState(\n state: NineZoneState,\n widgetId: WidgetState[\"id\"]\n) {\n const floatingWidget = state.floatingWidgets.byId[widgetId];\n const home = floatingWidget.home;\n const panel = state.panels[home.side];\n const destinationWidgetId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(panel.side, home.widgetIndex);\n\n let destinationWidget = state.widgets[destinationWidgetId];\n\n if (!destinationWidget && panel.widgets.length === panel.maxWidgetCount) {\n const id = panel.widgets[home.widgetIndex];\n destinationWidget = state.widgets[id];\n }\n\n // Widget would be added to an existing panel widget.\n if (destinationWidget) {\n return {\n side: home.side,\n widgetId: destinationWidget.id,\n };\n }\n\n // Widget would be added to a panel as it's first panel widget.\n if (panel.widgets.length === 0) {\n return {\n side: home.side,\n };\n }\n\n // Widget would be added to a panel with an existing panel widget as a separate panel widget.\n return {\n side: home.side,\n sectionIndex: destinationWidgetId.endsWith(\"End\") ? 1 : 0,\n };\n}\n\n/** @internal */\nexport function useSendBackHomeState() {\n const widgetId = useActiveSendBackWidgetIdStore((state) => state);\n return useLayout((state) =>\n widgetId ? getSendBackHomeState(state, widgetId) : undefined\n );\n}\n\nfunction Icon() {\n const id = useFloatingWidgetId();\n assert(!!id);\n const home = useLayout((state) => state.floatingWidgets.byId[id].home);\n return home.side === \"left\" ? (\n <SvgDockLeft />\n ) : home.side === \"right\" ? (\n <SvgDockRight />\n ) : home.side === \"top\" ? (\n <SvgDockTop />\n ) : (\n <SvgDockBottom />\n );\n}\n\n/** @internal */\nexport function SendBack() {\n const id = useFloatingWidgetId();\n assert(!!id);\n const dispatch = React.useContext(NineZoneDispatchContext);\n const label = useLabel(\"sendWidgetHomeTitle\");\n const setActiveWidgetId = (newId: WidgetState[\"id\"] | undefined) =>\n useActiveSendBackWidgetIdStore.setState(newId);\n\n const onClick = () => {\n setActiveWidgetId(undefined);\n dispatch({\n type: \"FLOATING_WIDGET_SEND_BACK\",\n id,\n });\n };\n const onMouseOver = () => {\n setActiveWidgetId(id);\n };\n const onFocus = () => {\n setActiveWidgetId(id);\n };\n const onMouseOut = () => {\n setActiveWidgetId(undefined);\n };\n const onBlur = () => {\n setActiveWidgetId(undefined);\n };\n const eventHandlers = { onMouseOver, onFocus, onMouseOut, onBlur };\n return (\n <ActionButton\n icon={<Icon />}\n label={label}\n onClick={onClick}\n buttonProps={eventHandlers}\n // TODO: can not pass down event handlers due to iTwinUI type issues.\n menuProps={eventHandlers as any}\n />\n );\n}\n\n/** @internal */\nexport function useSendBack() {\n const maximizedWidget = useIsMaximizedWidget();\n const isToolSettings = useIsToolSettingsTab();\n const isFloatingWidget = !!useFloatingWidgetId();\n const canBeDocked = useWidgetAllowedToDock();\n\n return !maximizedWidget && isFloatingWidget && !isToolSettings && canBeDocked;\n}\n"]}
1
+ {"version":3,"file":"SendBack.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/SendBack.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 * as React from \"react\";\nimport { create } from \"zustand\";\nimport { assert } from \"@itwin/core-bentley\";\nimport {\n SvgDockBottom,\n SvgDockLeft,\n SvgDockRight,\n SvgDockTop,\n} from \"@itwin/itwinui-icons-react\";\nimport { NineZoneDispatchContext } from \"../base/NineZone.js\";\nimport { useLayout } from \"../base/LayoutStore.js\";\nimport {\n useFloatingWidgetId,\n useWidgetAllowedToDock,\n} from \"./FloatingWidget.js\";\nimport type { WidgetState } from \"../state/WidgetState.js\";\nimport { getWidgetPanelSectionId } from \"../state/PanelState.js\";\nimport type { NineZoneState } from \"../state/NineZoneState.js\";\nimport { useIsToolSettingsTab } from \"./useIsToolSettingsTab.js\";\nimport { WidgetAction } from \"./WidgetAction.js\";\nimport { useIsMaximizedWidget } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\nimport { useTranslation } from \"../../hooks/useTranslation.js\";\n\n/** @internal */\nexport const useActiveSendBackWidgetIdStore = create<\n WidgetState[\"id\"] | undefined\n>(() => undefined);\n\n/** @internal */\nexport function getSendBackHomeState(\n state: NineZoneState,\n widgetId: WidgetState[\"id\"]\n) {\n const floatingWidget = state.floatingWidgets.byId[widgetId];\n const home = floatingWidget.home;\n const panel = state.panels[home.side];\n const destinationWidgetId = home.widgetId\n ? home.widgetId\n : getWidgetPanelSectionId(panel.side, home.widgetIndex);\n\n let destinationWidget = state.widgets[destinationWidgetId];\n\n if (!destinationWidget && panel.widgets.length === panel.maxWidgetCount) {\n const id = panel.widgets[home.widgetIndex];\n destinationWidget = state.widgets[id];\n }\n\n // Widget would be added to an existing panel widget.\n if (destinationWidget) {\n return {\n side: home.side,\n widgetId: destinationWidget.id,\n };\n }\n\n // Widget would be added to a panel as it's first panel widget.\n if (panel.widgets.length === 0) {\n return {\n side: home.side,\n };\n }\n\n // Widget would be added to a panel with an existing panel widget as a separate panel widget.\n return {\n side: home.side,\n sectionIndex: destinationWidgetId.endsWith(\"End\") ? 1 : 0,\n };\n}\n\n/** @internal */\nexport function useSendBackHomeState() {\n const widgetId = useActiveSendBackWidgetIdStore((state) => state);\n return useLayout((state) =>\n widgetId ? getSendBackHomeState(state, widgetId) : undefined\n );\n}\n\nfunction Icon() {\n const id = useFloatingWidgetId();\n assert(!!id);\n const home = useLayout((state) => state.floatingWidgets.byId[id].home);\n return home.side === \"left\" ? (\n <SvgDockLeft />\n ) : home.side === \"right\" ? (\n <SvgDockRight />\n ) : home.side === \"top\" ? (\n <SvgDockTop />\n ) : (\n <SvgDockBottom />\n );\n}\n\n/** @internal */\nexport function SendBack() {\n const id = useFloatingWidgetId();\n assert(!!id);\n const dispatch = React.useContext(NineZoneDispatchContext);\n const { translate } = useTranslation();\n const label = translate(\"widget.tooltips.sendHome\");\n const setActiveWidgetId = (newId: WidgetState[\"id\"] | undefined) =>\n useActiveSendBackWidgetIdStore.setState(newId);\n\n const onClick = () => {\n setActiveWidgetId(undefined);\n dispatch({\n type: \"FLOATING_WIDGET_SEND_BACK\",\n id,\n });\n };\n const onMouseOver = () => {\n setActiveWidgetId(id);\n };\n const onFocus = () => {\n setActiveWidgetId(id);\n };\n const onMouseOut = () => {\n setActiveWidgetId(undefined);\n };\n const onBlur = () => {\n setActiveWidgetId(undefined);\n };\n const eventHandlers = { onMouseOver, onFocus, onMouseOut, onBlur };\n return (\n <WidgetAction\n icon={<Icon />}\n label={label}\n onClick={onClick}\n {...eventHandlers}\n />\n );\n}\n\n/** @internal */\nexport function useSendBack() {\n const maximizedWidget = useIsMaximizedWidget();\n const isToolSettings = useIsToolSettingsTab();\n const isFloatingWidget = !!useFloatingWidgetId();\n const canBeDocked = useWidgetAllowedToDock();\n\n return !maximizedWidget && isFloatingWidget && !isToolSettings && canBeDocked;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/TabBar.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAEvB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAgBnD,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAmFpD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,WAAW,EAC3C,WAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,KAAK,IAAI,EAC7E,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,EAClC,SAAS,CAAC,EAAE,MAAM,IAAI,EACtB,YAAY,CAAC,EAAE,MAAM,IAAI,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,gCAqD3B"}
1
+ {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/TabBar.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,eAAe,CAAC;AAEvB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAiBnD,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAoFpD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,WAAW,EAC3C,WAAW,CAAC,EAAE,CAAC,sBAAsB,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,KAAK,IAAI,EAC7E,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,IAAI,EAClC,SAAS,CAAC,EAAE,MAAM,IAAI,EACtB,YAAY,CAAC,EAAE,MAAM,IAAI,EACzB,aAAa,CAAC,EAAE,MAAM,IAAI,gCAqD3B"}
@@ -14,16 +14,18 @@ import { Point } from "@itwin/core-react/internal";
14
14
  import { useDragWidget } from "../base/DragManager.js";
15
15
  import { NineZoneDispatchContext } from "../base/NineZone.js";
16
16
  import { usePointerCaptor } from "../base/usePointerCaptor.js";
17
- import { TabBarButtons } from "./Buttons.js";
18
17
  import { WidgetTabs } from "./Tabs.js";
19
18
  import { WidgetIdContext } from "./Widget.js";
20
19
  import { useDoubleClick } from "../widget-panels/Grip.js";
21
20
  import { useFloatingWidgetId } from "./FloatingWidget.js";
22
21
  import { useMaximizedWidgetTabBarHandle } from "../../preview/enable-maximized-widget/useMaximizedWidget.js";
22
+ import { WidgetActions } from "./WidgetActions.js";
23
+ import { ConfigurableUiContext } from "../../configurableui/ConfigurableUiContent.js";
23
24
  /** @internal */
24
25
  export function WidgetTabBar(props) {
25
26
  const dispatch = React.useContext(NineZoneDispatchContext);
26
27
  const id = React.useContext(WidgetIdContext);
28
+ const { widgetActions } = React.useContext(ConfigurableUiContext);
27
29
  const floatingWidgetId = useFloatingWidgetId();
28
30
  assert(!!id);
29
31
  const widgetId = floatingWidgetId === undefined ? id : floatingWidgetId;
@@ -78,7 +80,7 @@ export function WidgetTabBar(props) {
78
80
  return (React.createElement("div", { ref: containerRef, className: className },
79
81
  React.createElement("div", { className: handleClassName, ref: ref }),
80
82
  React.createElement(WidgetTabs, null),
81
- React.createElement(TabBarButtons, null)));
83
+ widgetActions ?? React.createElement(WidgetActions, null)));
82
84
  }
83
85
  /** Hook to control drag interactions.
84
86
  * Starts drag interaction after pointer moves or after timeout.
@@ -1 +1 @@
1
- {"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/TabBar.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 \"./TabBar.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Timer } from \"@itwin/core-react\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport type { UseDragWidgetArgs } from \"../base/DragManager.js\";\nimport { useDragWidget } from \"../base/DragManager.js\";\nimport { NineZoneDispatchContext } from \"../base/NineZone.js\";\nimport type {\n PointerCaptorArgs,\n PointerCaptorEvent,\n} from \"../base/usePointerCaptor.js\";\nimport { usePointerCaptor } from \"../base/usePointerCaptor.js\";\nimport { TabBarButtons } from \"./Buttons.js\";\nimport { WidgetTabs } from \"./Tabs.js\";\nimport { WidgetIdContext } from \"./Widget.js\";\nimport { useDoubleClick } from \"../widget-panels/Grip.js\";\nimport { useFloatingWidgetId } from \"./FloatingWidget.js\";\nimport { useMaximizedWidgetTabBarHandle } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\n\n/** @internal */\nexport interface WidgetTabBarProps {\n separator?: boolean;\n}\n\n/** @internal */\nexport function WidgetTabBar(props: WidgetTabBarProps) {\n const dispatch = React.useContext(NineZoneDispatchContext);\n const id = React.useContext(WidgetIdContext);\n const floatingWidgetId = useFloatingWidgetId();\n assert(!!id);\n const widgetId = floatingWidgetId === undefined ? id : floatingWidgetId;\n const handleDoubleClick = React.useCallback(() => {\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_CLEAR_USER_SIZED\",\n id: floatingWidgetId,\n });\n }, [dispatch, floatingWidgetId]);\n const handleActionAreaClick = useDoubleClick(handleDoubleClick);\n\n const onDrag = React.useCallback<NonNullable<UseDragWidgetArgs[\"onDrag\"]>>(\n (dragBy) => {\n floatingWidgetId !== undefined &&\n dispatch({\n type: \"WIDGET_DRAG\",\n dragBy,\n floatingWidgetId,\n });\n },\n [dispatch, floatingWidgetId]\n );\n const onDragEnd = React.useCallback<\n NonNullable<UseDragWidgetArgs[\"onDragEnd\"]>\n >(\n (target) => {\n floatingWidgetId !== undefined && handleActionAreaClick();\n floatingWidgetId !== undefined &&\n dispatch({\n type: \"WIDGET_DRAG_END\",\n floatingWidgetId,\n target,\n });\n },\n [dispatch, floatingWidgetId, handleActionAreaClick]\n );\n const handleWidgetDragStart = useDragWidget({\n widgetId,\n onDrag,\n onDragEnd,\n });\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleDragStart = React.useCallback(\n (initialPointerPosition: Point, pointerPosition: Point) => {\n handleWidgetDragStart({\n initialPointerPosition,\n pointerPosition,\n });\n },\n [handleWidgetDragStart]\n );\n const handleTouchStart = React.useCallback(() => {\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_BRING_TO_FRONT\",\n id: floatingWidgetId,\n });\n }, [dispatch, floatingWidgetId]);\n const ref = useDrag(\n handleDragStart,\n undefined,\n undefined,\n handleTouchStart,\n handleDoubleClick\n );\n const maximizedWidgetHandle = useMaximizedWidgetTabBarHandle();\n const className = classnames(\n \"nz-widget-tabBar\",\n props.separator && \"nz-separator\"\n );\n const handleClassName = classnames(\"nz-handle\", maximizedWidgetHandle);\n return (\n <div ref={containerRef} className={className}>\n <div className={handleClassName} ref={ref} />\n <WidgetTabs />\n <TabBarButtons />\n </div>\n );\n}\n\n/** Hook to control drag interactions.\n * Starts drag interaction after pointer moves or after timeout.\n * @internal\n */\nexport function useDrag<T extends HTMLElement>(\n onDragStart?: (initialPointerPosition: Point, pointerPosition: Point) => void,\n onDrag?: (position: Point) => void,\n onDragEnd?: () => void,\n onTouchStart?: () => void,\n onDoubleClick?: () => void\n) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const doubleClickTimer = React.useRef(new Timer(300));\n const clickCount = React.useRef(0);\n const initialPointerPosition = React.useRef<Point>();\n\n React.useEffect(() => {\n const handleExecute = () => {\n if (clickCount.current === 2) onDoubleClick && onDoubleClick();\n clickCount.current = 0;\n };\n const timer = doubleClickTimer.current;\n timer.setOnExecute(handleExecute);\n return () => {\n timer.setOnExecute(undefined);\n };\n }, [onDoubleClick]);\n\n const handlePointerDown = React.useCallback(\n (args: PointerCaptorArgs, e: PointerCaptorEvent) => {\n initialPointerPosition.current = new Point(args.clientX, args.clientY);\n e.type === \"touchstart\" && onTouchStart && onTouchStart();\n },\n [onTouchStart]\n );\n const handlePointerMove = React.useCallback(\n (args: PointerCaptorArgs) => {\n if (initialPointerPosition.current) {\n onDragStart &&\n onDragStart(\n initialPointerPosition.current,\n new Point(args.clientX, args.clientY)\n );\n initialPointerPosition.current = undefined;\n return;\n }\n onDrag && onDrag(new Point(args.clientX, args.clientY));\n },\n [onDragStart, onDrag]\n );\n const handlePointerUp = React.useCallback(() => {\n clickCount.current++;\n doubleClickTimer.current.start();\n initialPointerPosition.current = undefined;\n onDragEnd && onDragEnd();\n }, [onDragEnd]);\n const ref = usePointerCaptor<T>(\n handlePointerDown,\n handlePointerMove,\n handlePointerUp\n );\n return ref;\n}\n"]}
1
+ {"version":3,"file":"TabBar.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/TabBar.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 \"./TabBar.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { assert } from \"@itwin/core-bentley\";\nimport { Timer } from \"@itwin/core-react\";\nimport { Point } from \"@itwin/core-react/internal\";\nimport type { UseDragWidgetArgs } from \"../base/DragManager.js\";\nimport { useDragWidget } from \"../base/DragManager.js\";\nimport { NineZoneDispatchContext } from \"../base/NineZone.js\";\nimport type {\n PointerCaptorArgs,\n PointerCaptorEvent,\n} from \"../base/usePointerCaptor.js\";\nimport { usePointerCaptor } from \"../base/usePointerCaptor.js\";\nimport { WidgetTabs } from \"./Tabs.js\";\nimport { WidgetIdContext } from \"./Widget.js\";\nimport { useDoubleClick } from \"../widget-panels/Grip.js\";\nimport { useFloatingWidgetId } from \"./FloatingWidget.js\";\nimport { useMaximizedWidgetTabBarHandle } from \"../../preview/enable-maximized-widget/useMaximizedWidget.js\";\nimport { WidgetActions } from \"./WidgetActions.js\";\nimport { ConfigurableUiContext } from \"../../configurableui/ConfigurableUiContent.js\";\n\n/** @internal */\nexport interface WidgetTabBarProps {\n separator?: boolean;\n}\n\n/** @internal */\nexport function WidgetTabBar(props: WidgetTabBarProps) {\n const dispatch = React.useContext(NineZoneDispatchContext);\n const id = React.useContext(WidgetIdContext);\n const { widgetActions } = React.useContext(ConfigurableUiContext);\n const floatingWidgetId = useFloatingWidgetId();\n assert(!!id);\n const widgetId = floatingWidgetId === undefined ? id : floatingWidgetId;\n const handleDoubleClick = React.useCallback(() => {\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_CLEAR_USER_SIZED\",\n id: floatingWidgetId,\n });\n }, [dispatch, floatingWidgetId]);\n const handleActionAreaClick = useDoubleClick(handleDoubleClick);\n\n const onDrag = React.useCallback<NonNullable<UseDragWidgetArgs[\"onDrag\"]>>(\n (dragBy) => {\n floatingWidgetId !== undefined &&\n dispatch({\n type: \"WIDGET_DRAG\",\n dragBy,\n floatingWidgetId,\n });\n },\n [dispatch, floatingWidgetId]\n );\n const onDragEnd = React.useCallback<\n NonNullable<UseDragWidgetArgs[\"onDragEnd\"]>\n >(\n (target) => {\n floatingWidgetId !== undefined && handleActionAreaClick();\n floatingWidgetId !== undefined &&\n dispatch({\n type: \"WIDGET_DRAG_END\",\n floatingWidgetId,\n target,\n });\n },\n [dispatch, floatingWidgetId, handleActionAreaClick]\n );\n const handleWidgetDragStart = useDragWidget({\n widgetId,\n onDrag,\n onDragEnd,\n });\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleDragStart = React.useCallback(\n (initialPointerPosition: Point, pointerPosition: Point) => {\n handleWidgetDragStart({\n initialPointerPosition,\n pointerPosition,\n });\n },\n [handleWidgetDragStart]\n );\n const handleTouchStart = React.useCallback(() => {\n floatingWidgetId &&\n dispatch({\n type: \"FLOATING_WIDGET_BRING_TO_FRONT\",\n id: floatingWidgetId,\n });\n }, [dispatch, floatingWidgetId]);\n const ref = useDrag(\n handleDragStart,\n undefined,\n undefined,\n handleTouchStart,\n handleDoubleClick\n );\n const maximizedWidgetHandle = useMaximizedWidgetTabBarHandle();\n const className = classnames(\n \"nz-widget-tabBar\",\n props.separator && \"nz-separator\"\n );\n const handleClassName = classnames(\"nz-handle\", maximizedWidgetHandle);\n return (\n <div ref={containerRef} className={className}>\n <div className={handleClassName} ref={ref} />\n <WidgetTabs />\n {widgetActions ?? <WidgetActions />}\n </div>\n );\n}\n\n/** Hook to control drag interactions.\n * Starts drag interaction after pointer moves or after timeout.\n * @internal\n */\nexport function useDrag<T extends HTMLElement>(\n onDragStart?: (initialPointerPosition: Point, pointerPosition: Point) => void,\n onDrag?: (position: Point) => void,\n onDragEnd?: () => void,\n onTouchStart?: () => void,\n onDoubleClick?: () => void\n) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const doubleClickTimer = React.useRef(new Timer(300));\n const clickCount = React.useRef(0);\n const initialPointerPosition = React.useRef<Point>();\n\n React.useEffect(() => {\n const handleExecute = () => {\n if (clickCount.current === 2) onDoubleClick && onDoubleClick();\n clickCount.current = 0;\n };\n const timer = doubleClickTimer.current;\n timer.setOnExecute(handleExecute);\n return () => {\n timer.setOnExecute(undefined);\n };\n }, [onDoubleClick]);\n\n const handlePointerDown = React.useCallback(\n (args: PointerCaptorArgs, e: PointerCaptorEvent) => {\n initialPointerPosition.current = new Point(args.clientX, args.clientY);\n e.type === \"touchstart\" && onTouchStart && onTouchStart();\n },\n [onTouchStart]\n );\n const handlePointerMove = React.useCallback(\n (args: PointerCaptorArgs) => {\n if (initialPointerPosition.current) {\n onDragStart &&\n onDragStart(\n initialPointerPosition.current,\n new Point(args.clientX, args.clientY)\n );\n initialPointerPosition.current = undefined;\n return;\n }\n onDrag && onDrag(new Point(args.clientX, args.clientY));\n },\n [onDragStart, onDrag]\n );\n const handlePointerUp = React.useCallback(() => {\n clickCount.current++;\n doubleClickTimer.current.start();\n initialPointerPosition.current = undefined;\n onDragEnd && onDragEnd();\n }, [onDragEnd]);\n const ref = usePointerCaptor<T>(\n handlePointerDown,\n handlePointerMove,\n handlePointerUp\n );\n return ref;\n}\n"]}
@@ -0,0 +1,16 @@
1
+ /** @packageDocumentation
2
+ * @module Widget
3
+ */
4
+ import * as React from "react";
5
+ interface WidgetActionProps extends React.HTMLAttributes<HTMLElement> {
6
+ label: string;
7
+ icon: React.JSX.Element;
8
+ onClick?: () => void;
9
+ }
10
+ /** A widget action rendered in a widget title bar.
11
+ * Should be used in {@link WidgetActions} component.
12
+ * @alpha
13
+ */
14
+ export declare function WidgetAction(props: WidgetActionProps): React.JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=WidgetAction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetAction.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/WidgetAction.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,UAAU,iBAAkB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,qBAsBpD"}
@@ -7,17 +7,21 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { MenuItem } from "@itwin/itwinui-react";
10
- import { WidgetActionDropdownContext } from "./MoreButton.js";
11
- import { TabBarButton } from "../../layout/widget/Button.js";
12
- /** @internal */
13
- export function ActionButton(props) {
10
+ import { WidgetActionDropdownContext } from "../../preview/widget-action-dropdown/MoreButton.js";
11
+ import { TabBarButton } from "./Button.js";
12
+ /** A widget action rendered in a widget title bar.
13
+ * Should be used in {@link WidgetActions} component.
14
+ * @alpha
15
+ */
16
+ export function WidgetAction(props) {
17
+ const { label, icon, onClick, ...rest } = props;
14
18
  const dropdownContext = React.useContext(WidgetActionDropdownContext);
15
19
  if (dropdownContext !== undefined) {
16
- return (React.createElement(MenuItem, { icon: props.icon, onClick: () => {
17
- props.onClick?.();
20
+ return (React.createElement(MenuItem, { startIcon: icon, onClick: () => {
21
+ onClick?.();
18
22
  dropdownContext.onClose();
19
- }, ...props.menuProps }, props.label));
23
+ }, ...rest }, label));
20
24
  }
21
- return (React.createElement(TabBarButton, { onClick: props.onClick, label: props.label, ...props.buttonProps }, props.icon));
25
+ return (React.createElement(TabBarButton, { onClick: onClick, label: label, ...rest }, icon));
22
26
  }
23
- //# sourceMappingURL=Button.js.map
27
+ //# sourceMappingURL=WidgetAction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetAction.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/WidgetAction.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAS3C;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAChD,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACtE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CACL,oBAAC,QAAQ,IACP,SAAS,EAAE,IAAI,EACf,OAAO,EAAE,GAAG,EAAE;gBACZ,OAAO,EAAE,EAAE,CAAC;gBACZ,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5B,CAAC,KACG,IAAI,IAEP,KAAK,CACG,CACZ,CAAC;IACJ,CAAC;IACD,OAAO,CACL,oBAAC,YAAY,IAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAM,IAAI,IACnD,IAAI,CACQ,CAChB,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport * as React from \"react\";\nimport { MenuItem } from \"@itwin/itwinui-react\";\nimport { WidgetActionDropdownContext } from \"../../preview/widget-action-dropdown/MoreButton.js\";\nimport { TabBarButton } from \"./Button.js\";\nimport type { WidgetActions } from \"./WidgetActions.js\";\n\ninterface WidgetActionProps extends React.HTMLAttributes<HTMLElement> {\n label: string;\n icon: React.JSX.Element;\n onClick?: () => void;\n}\n\n/** A widget action rendered in a widget title bar.\n * Should be used in {@link WidgetActions} component.\n * @alpha\n */\nexport function WidgetAction(props: WidgetActionProps) {\n const { label, icon, onClick, ...rest } = props;\n const dropdownContext = React.useContext(WidgetActionDropdownContext);\n if (dropdownContext !== undefined) {\n return (\n <MenuItem\n startIcon={icon}\n onClick={() => {\n onClick?.();\n dropdownContext.onClose();\n }}\n {...rest}\n >\n {label}\n </MenuItem>\n );\n }\n return (\n <TabBarButton onClick={onClick} label={label} {...rest}>\n {icon}\n </TabBarButton>\n );\n}\n"]}
@@ -0,0 +1,45 @@
1
+ /** @packageDocumentation
2
+ * @module Widget
3
+ */
4
+ import "./WidgetActions.scss";
5
+ import * as React from "react";
6
+ import { Dock } from "./Dock.js";
7
+ import { PinToggle } from "./PinToggle.js";
8
+ import { PopoutToggle } from "./PopoutToggle.js";
9
+ import { PreviewHorizontalPanelAlignButton } from "../../preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.js";
10
+ import { SendBack } from "./SendBack.js";
11
+ import { MaximizeToggle } from "../../preview/enable-maximized-widget/MaximizeToggle.js";
12
+ import { CloseWidgetButton } from "../../preview/control-widget-visibility/CloseWidgetButton.js";
13
+ import { AddWidgetButton } from "../../preview/control-widget-visibility/AddWidgetButton.js";
14
+ declare const widgetActions: {
15
+ popout: typeof PopoutToggle;
16
+ sendBack: typeof SendBack;
17
+ dock: typeof Dock;
18
+ pin: typeof PinToggle;
19
+ maximize: typeof MaximizeToggle;
20
+ horizontalAlign: typeof PreviewHorizontalPanelAlignButton;
21
+ closeWidget: typeof CloseWidgetButton;
22
+ addWidget: typeof AddWidgetButton;
23
+ };
24
+ /** @internal */
25
+ export type WidgetActionId = keyof typeof widgetActions;
26
+ interface WidgetActionSpec {
27
+ id: WidgetActionId | (string & {});
28
+ action: React.ComponentType;
29
+ }
30
+ interface WidgetActionsProps {
31
+ /** Function to modify the default widget actions.
32
+ * Use {@link WidgetAction} component when adding new widget actions.
33
+ */
34
+ modifyActions?: (defaultActions: WidgetActionSpec[]) => WidgetActionSpec[];
35
+ }
36
+ /**
37
+ * Renders widget actions in the widget title bar.
38
+ * Should be used in `widgetActions` prop of {@link StandardLayout} component.
39
+ * @alpha
40
+ */
41
+ export declare function WidgetActions(props: WidgetActionsProps): React.JSX.Element;
42
+ /** @internal */
43
+ export declare function useWidgetActions(): WidgetActionId[];
44
+ export {};
45
+ //# sourceMappingURL=WidgetActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetActions.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/WidgetActions.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,sBAAsB,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAgB,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACL,iCAAiC,EAElC,MAAM,yEAAyE,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAe,MAAM,eAAe,CAAC;AAKtD,OAAO,EACL,cAAc,EAEf,MAAM,yDAAyD,CAAC;AACjE,OAAO,EACL,iBAAiB,EAElB,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,eAAe,EAEhB,MAAM,4DAA4D,CAAC;AAIpE,QAAA,MAAM,aAAa;;;;;;;;;CASlB,CAAC;AAEF,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,aAAa,CAAC;AAExD,UAAU,gBAAgB;IACxB,EAAE,EAAE,cAAc,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACnC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,UAAU,kBAAkB;IAC1B;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,CAAC;CAC5E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,qBAsBtD;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,IAAI,cAAc,EAAE,CAmBnD"}
@@ -5,46 +5,52 @@
5
5
  /** @packageDocumentation
6
6
  * @module Widget
7
7
  */
8
- import "./Buttons.scss";
8
+ import "./WidgetActions.scss";
9
9
  import * as React from "react";
10
10
  import { Dock, useDock } from "./Dock.js";
11
11
  import { PinToggle, usePinToggle } from "./PinToggle.js";
12
12
  import { PopoutToggle, usePopoutToggle } from "./PopoutToggle.js";
13
13
  import { PreviewHorizontalPanelAlignButton, useHorizontalPanelAlignButton, } from "../../preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.js";
14
14
  import { SendBack, useSendBack } from "./SendBack.js";
15
- import { MoreButton, useDropdownFeatures, } from "../../preview/widget-action-dropdown/MoreButton.js";
15
+ import { MoreButton, useDropdownActions, } from "../../preview/widget-action-dropdown/MoreButton.js";
16
16
  import { MaximizeToggle, useMaximizeToggle, } from "../../preview/enable-maximized-widget/MaximizeToggle.js";
17
17
  import { CloseWidgetButton, useCloseTab, } from "../../preview/control-widget-visibility/CloseWidgetButton.js";
18
18
  import { AddWidgetButton, useAddTab, } from "../../preview/control-widget-visibility/AddWidgetButton.js";
19
- /** @internal */
20
- export function TabBarButtons() {
21
- const features = useWidgetFeatures();
22
- const [sortedFeatures, isDropdown] = useDropdownFeatures(features);
23
- const buttons = sortedFeatures.map((feature) => {
24
- switch (feature) {
25
- case "popout":
26
- return React.createElement(PopoutToggle, { key: "popout" });
27
- case "maximize":
28
- return React.createElement(MaximizeToggle, { key: "maximize" });
29
- case "sendBack":
30
- return React.createElement(SendBack, { key: "sendBack" });
31
- case "dock":
32
- return React.createElement(Dock, { key: "dock" });
33
- case "horizontalAlign":
34
- return React.createElement(PreviewHorizontalPanelAlignButton, { key: "horizontalAlign" });
35
- case "pin":
36
- return React.createElement(PinToggle, { key: "pin" });
37
- case "closeWidget":
38
- return React.createElement(CloseWidgetButton, { key: "closeWidget" });
39
- case "addWidget":
40
- return React.createElement(AddWidgetButton, { key: "addWidget" });
41
- }
42
- return undefined;
19
+ const widgetActions = {
20
+ popout: PopoutToggle,
21
+ sendBack: SendBack,
22
+ dock: Dock,
23
+ pin: PinToggle,
24
+ maximize: MaximizeToggle,
25
+ horizontalAlign: PreviewHorizontalPanelAlignButton,
26
+ closeWidget: CloseWidgetButton,
27
+ addWidget: AddWidgetButton,
28
+ };
29
+ /**
30
+ * Renders widget actions in the widget title bar.
31
+ * Should be used in `widgetActions` prop of {@link StandardLayout} component.
32
+ * @alpha
33
+ */
34
+ export function WidgetActions(props) {
35
+ const { modifyActions } = props;
36
+ const defaultActions = useWidgetActions();
37
+ const [dropdownActions, isDropdown] = useDropdownActions(defaultActions);
38
+ const finalActions = React.useMemo(() => {
39
+ const knownActions = dropdownActions.map((feature) => ({
40
+ id: feature,
41
+ action: widgetActions[feature],
42
+ }));
43
+ if (!modifyActions)
44
+ return knownActions;
45
+ return modifyActions(knownActions);
46
+ }, [dropdownActions, modifyActions]);
47
+ const buttons = finalActions.map(({ id, action: Action }) => {
48
+ return React.createElement(Action, { key: id });
43
49
  });
44
- return (React.createElement("div", { className: "nz-widget-buttons" }, isDropdown ? React.createElement(MoreButton, null, buttons) : buttons));
50
+ return (React.createElement("div", { className: "nz-widget-widgetActions" }, isDropdown ? React.createElement(MoreButton, null, buttons) : buttons));
45
51
  }
46
52
  /** @internal */
47
- export function useWidgetFeatures() {
53
+ export function useWidgetActions() {
48
54
  const popoutToggle = usePopoutToggle();
49
55
  const maximizeToggle = useMaximizeToggle();
50
56
  const sendBack = useSendBack();
@@ -64,4 +70,4 @@ export function useWidgetFeatures() {
64
70
  ...(pinToggle ? ["pin"] : []),
65
71
  ];
66
72
  }
67
- //# sourceMappingURL=Buttons.js.map
73
+ //# sourceMappingURL=WidgetActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WidgetActions.js","sourceRoot":"","sources":["../../../../src/appui-react/layout/widget/WidgetActions.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,sBAAsB,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EACL,iCAAiC,EACjC,6BAA6B,GAC9B,MAAM,yEAAyE,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACL,UAAU,EACV,kBAAkB,GACnB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,cAAc,EACd,iBAAiB,GAClB,MAAM,yDAAyD,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,WAAW,GACZ,MAAM,8DAA8D,CAAC;AACtE,OAAO,EACL,eAAe,EACf,SAAS,GACV,MAAM,4DAA4D,CAAC;AAIpE,MAAM,aAAa,GAAG;IACpB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,cAAc;IACxB,eAAe,EAAE,iCAAiC;IAClD,WAAW,EAAE,iBAAiB;IAC9B,SAAS,EAAE,eAAe;CAC3B,CAAC;AAiBF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAChC,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC;IAC1C,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,GAAG,kBAAkB,CAAC,cAAc,CAAC,CAAC;IACzE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACtC,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrD,EAAE,EAAE,OAAO;YACX,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;SAC/B,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,aAAa;YAAE,OAAO,YAAY,CAAC;QACxC,OAAO,aAAa,CAAC,YAAY,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1D,OAAO,oBAAC,MAAM,IAAC,GAAG,EAAE,EAAE,GAAI,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,OAAO,CACL,6BAAK,SAAS,EAAC,yBAAyB,IACrC,UAAU,CAAC,CAAC,CAAC,oBAAC,UAAU,QAAE,OAAO,CAAc,CAAC,CAAC,CAAC,OAAO,CACtD,CACP,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,gBAAgB;IAC9B,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;IACvC,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,0BAA0B,GAAG,6BAA6B,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,WAAW,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,aAAa,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,UAAU,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,UAAU,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,MAAM,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAE,CAAC,iBAAiB,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC;KACzC,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widget\n */\n\nimport \"./WidgetActions.scss\";\nimport * as React from \"react\";\nimport { Dock, useDock } from \"./Dock.js\";\nimport { PinToggle, usePinToggle } from \"./PinToggle.js\";\nimport { PopoutToggle, usePopoutToggle } from \"./PopoutToggle.js\";\nimport {\n PreviewHorizontalPanelAlignButton,\n useHorizontalPanelAlignButton,\n} from \"../../preview/horizontal-panel-alignment/PreviewHorizontalPanelAlign.js\";\nimport { SendBack, useSendBack } from \"./SendBack.js\";\nimport {\n MoreButton,\n useDropdownActions,\n} from \"../../preview/widget-action-dropdown/MoreButton.js\";\nimport {\n MaximizeToggle,\n useMaximizeToggle,\n} from \"../../preview/enable-maximized-widget/MaximizeToggle.js\";\nimport {\n CloseWidgetButton,\n useCloseTab,\n} from \"../../preview/control-widget-visibility/CloseWidgetButton.js\";\nimport {\n AddWidgetButton,\n useAddTab,\n} from \"../../preview/control-widget-visibility/AddWidgetButton.js\";\nimport type { StandardLayout } from \"../../configurableui/ConfigurableUiContent.js\";\nimport type { WidgetAction } from \"./WidgetAction.js\";\n\nconst widgetActions = {\n popout: PopoutToggle,\n sendBack: SendBack,\n dock: Dock,\n pin: PinToggle,\n maximize: MaximizeToggle,\n horizontalAlign: PreviewHorizontalPanelAlignButton,\n closeWidget: CloseWidgetButton,\n addWidget: AddWidgetButton,\n};\n\n/** @internal */\nexport type WidgetActionId = keyof typeof widgetActions;\n\ninterface WidgetActionSpec {\n id: WidgetActionId | (string & {});\n action: React.ComponentType;\n}\n\ninterface WidgetActionsProps {\n /** Function to modify the default widget actions.\n * Use {@link WidgetAction} component when adding new widget actions.\n */\n modifyActions?: (defaultActions: WidgetActionSpec[]) => WidgetActionSpec[];\n}\n\n/**\n * Renders widget actions in the widget title bar.\n * Should be used in `widgetActions` prop of {@link StandardLayout} component.\n * @alpha\n */\nexport function WidgetActions(props: WidgetActionsProps) {\n const { modifyActions } = props;\n const defaultActions = useWidgetActions();\n const [dropdownActions, isDropdown] = useDropdownActions(defaultActions);\n const finalActions = React.useMemo(() => {\n const knownActions = dropdownActions.map((feature) => ({\n id: feature,\n action: widgetActions[feature],\n }));\n if (!modifyActions) return knownActions;\n return modifyActions(knownActions);\n }, [dropdownActions, modifyActions]);\n\n const buttons = finalActions.map(({ id, action: Action }) => {\n return <Action key={id} />;\n });\n\n return (\n <div className=\"nz-widget-widgetActions\">\n {isDropdown ? <MoreButton>{buttons}</MoreButton> : buttons}\n </div>\n );\n}\n\n/** @internal */\nexport function useWidgetActions(): WidgetActionId[] {\n const popoutToggle = usePopoutToggle();\n const maximizeToggle = useMaximizeToggle();\n const sendBack = useSendBack();\n const dock = useDock();\n const horizontalPanelAlignButton = useHorizontalPanelAlignButton();\n const pinToggle = usePinToggle();\n const closeTab = useCloseTab();\n const addTab = useAddTab();\n return [\n ...(addTab ? ([\"addWidget\"] as const) : []),\n ...(closeTab ? ([\"closeWidget\"] as const) : []),\n ...(popoutToggle ? ([\"popout\"] as const) : []),\n ...(maximizeToggle ? ([\"maximize\"] as const) : []),\n ...(sendBack ? ([\"sendBack\"] as const) : []),\n ...(dock ? ([\"dock\"] as const) : []),\n ...(horizontalPanelAlignButton ? ([\"horizontalAlign\"] as const) : []),\n ...(pinToggle ? ([\"pin\"] as const) : []),\n ];\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
- .nz-widget-buttons {
5
+ .nz-widget-widgetActions {
6
6
  display: flex;
7
7
  align-items: center;
8
8
  align-content: center;
@@ -8,6 +8,6 @@ export declare function useAnimatePanel(): {
8
8
  size: number;
9
9
  handleTransitionEnd: (e: React.TransitionEvent<HTMLDivElement>) => void;
10
10
  contentSize: number | undefined;
11
- transition: "init" | "transition" | undefined;
11
+ transition: "transition" | "init" | undefined;
12
12
  };
13
13
  //# sourceMappingURL=useAnimatePanel.d.ts.map
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { SvgCloseSmall } from "@itwin/itwinui-icons-react";
10
- import { ActionButton } from "../widget-action-dropdown/Button.js";
10
+ import { WidgetAction } from "../../layout/widget/WidgetAction.js";
11
11
  import { usePreviewFeatures } from "../PreviewFeatures.js";
12
12
  import { useActiveTabId } from "../../layout/widget/Widget.js";
13
13
  import { NineZoneDispatchContext } from "../../layout/base/NineZone.js";
@@ -15,7 +15,7 @@ import { NineZoneDispatchContext } from "../../layout/base/NineZone.js";
15
15
  export function CloseWidgetButton() {
16
16
  const id = useActiveTabId();
17
17
  const dispatch = React.useContext(NineZoneDispatchContext);
18
- return (React.createElement(ActionButton, { icon: React.createElement(SvgCloseSmall, null), label: "Close widget", onClick: () => {
18
+ return (React.createElement(WidgetAction, { icon: React.createElement(SvgCloseSmall, null), label: "Close widget", onClick: () => {
19
19
  dispatch({
20
20
  type: "WIDGET_TAB_HIDE",
21
21
  id,
@@ -1 +1 @@
1
- {"version":3,"file":"CloseWidgetButton.js","sourceRoot":"","sources":["../../../../src/appui-react/preview/control-widget-visibility/CloseWidgetButton.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,gBAAgB;AAChB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAE3D,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,oBAAC,aAAa,OAAG,EACvB,KAAK,EAAC,cAAc,EACpB,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,CAAC;gBACP,IAAI,EAAE,iBAAiB;gBACvB,EAAE;aACH,CAAC,CAAC;QACL,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,MAAM,EAAE,uBAAuB,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3C,OAAO,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC,uBAAuB,CAAC;AACnC,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 Widget\n */\n\nimport * as React from \"react\";\nimport { SvgCloseSmall } from \"@itwin/itwinui-icons-react\";\nimport { ActionButton } from \"../widget-action-dropdown/Button.js\";\nimport { usePreviewFeatures } from \"../PreviewFeatures.js\";\nimport { useActiveTabId } from \"../../layout/widget/Widget.js\";\nimport { NineZoneDispatchContext } from \"../../layout/base/NineZone.js\";\n\n/** @internal */\nexport function CloseWidgetButton() {\n const id = useActiveTabId();\n const dispatch = React.useContext(NineZoneDispatchContext);\n\n return (\n <ActionButton\n icon={<SvgCloseSmall />}\n label=\"Close widget\"\n onClick={() => {\n dispatch({\n type: \"WIDGET_TAB_HIDE\",\n id,\n });\n }}\n />\n );\n}\n\n/** @internal */\nexport function useCloseTab() {\n const id = useActiveTabId();\n const { controlWidgetVisibility } = usePreviewFeatures();\n if (Array.isArray(controlWidgetVisibility)) {\n return controlWidgetVisibility.includes(id);\n }\n return !!controlWidgetVisibility;\n}\n"]}
1
+ {"version":3,"file":"CloseWidgetButton.js","sourceRoot":"","sources":["../../../../src/appui-react/preview/control-widget-visibility/CloseWidgetButton.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE,gBAAgB;AAChB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAC;IAE3D,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,oBAAC,aAAa,OAAG,EACvB,KAAK,EAAC,cAAc,EACpB,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,CAAC;gBACP,IAAI,EAAE,iBAAiB;gBACvB,EAAE;aACH,CAAC,CAAC;QACL,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,MAAM,EAAE,uBAAuB,EAAE,GAAG,kBAAkB,EAAE,CAAC;IACzD,IAAI,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3C,OAAO,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,CAAC,CAAC,uBAAuB,CAAC;AACnC,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 Widget\n */\n\nimport * as React from \"react\";\nimport { SvgCloseSmall } from \"@itwin/itwinui-icons-react\";\nimport { WidgetAction } from \"../../layout/widget/WidgetAction.js\";\nimport { usePreviewFeatures } from \"../PreviewFeatures.js\";\nimport { useActiveTabId } from \"../../layout/widget/Widget.js\";\nimport { NineZoneDispatchContext } from \"../../layout/base/NineZone.js\";\n\n/** @internal */\nexport function CloseWidgetButton() {\n const id = useActiveTabId();\n const dispatch = React.useContext(NineZoneDispatchContext);\n\n return (\n <WidgetAction\n icon={<SvgCloseSmall />}\n label=\"Close widget\"\n onClick={() => {\n dispatch({\n type: \"WIDGET_TAB_HIDE\",\n id,\n });\n }}\n />\n );\n}\n\n/** @internal */\nexport function useCloseTab() {\n const id = useActiveTabId();\n const { controlWidgetVisibility } = usePreviewFeatures();\n if (Array.isArray(controlWidgetVisibility)) {\n return controlWidgetVisibility.includes(id);\n }\n return !!controlWidgetVisibility;\n}\n"]}
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import * as React from "react";
9
9
  import { SvgWindowMaximize, SvgWindowMinimize, } from "@itwin/itwinui-icons-react";
10
- import { ActionButton } from "../widget-action-dropdown/Button.js";
10
+ import { WidgetAction } from "../../layout/widget/WidgetAction.js";
11
11
  import { WidgetIdContext } from "../../layout/widget/Widget.js";
12
12
  import { MaximizedWidgetContext } from "./MaximizedWidget.js";
13
13
  import { usePreviewFeatures } from "../PreviewFeatures.js";
@@ -28,7 +28,7 @@ export function MaximizeToggle() {
28
28
  label: "Maximize",
29
29
  iconSpec: React.createElement(SvgWindowMaximize, null),
30
30
  };
31
- return (React.createElement(ActionButton, { icon: iconSpec, label: label, onClick: () => {
31
+ return (React.createElement(WidgetAction, { icon: iconSpec, label: label, onClick: () => {
32
32
  setMaximizedWidget(id);
33
33
  } }));
34
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MaximizeToggle.js","sourceRoot":"","sources":["../../../../src/appui-react/preview/enable-maximized-widget/MaximizeToggle.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,gBAAgB;AAChB,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,UAAU,CAC9D,sBAAsB,CACvB,CAAC;IAEF,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAC3B,eAAe,KAAK,QAAQ;QAC1B,CAAC,CAAC;YACE,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,oBAAC,iBAAiB,OAAG;SAChC;QACH,CAAC,CAAC;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,oBAAC,iBAAiB,OAAG;SAChC,CAAC;IAER,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE;YACZ,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,GACjE,kBAAkB,EAAE,CAAC;IACvB,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,IAAI,6BAA6B,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,0BAA0B,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,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 Widget\n */\n\nimport * as React from \"react\";\nimport {\n SvgWindowMaximize,\n SvgWindowMinimize,\n} from \"@itwin/itwinui-icons-react\";\nimport { ActionButton } from \"../widget-action-dropdown/Button.js\";\nimport { WidgetIdContext } from \"../../layout/widget/Widget.js\";\nimport { MaximizedWidgetContext } from \"./MaximizedWidget.js\";\nimport { usePreviewFeatures } from \"../PreviewFeatures.js\";\nimport { useFloatingWidgetId } from \"../../layout/widget/FloatingWidget.js\";\nimport { usePanelWidgetId } from \"../../layout/widget/usePanelWidgetId.js\";\n\n/** @internal */\nexport function MaximizeToggle() {\n const widgetId = React.useContext(WidgetIdContext);\n const { maximizedWidget, setMaximizedWidget } = React.useContext(\n MaximizedWidgetContext\n );\n\n const { id, label, iconSpec } =\n maximizedWidget === widgetId\n ? {\n id: undefined,\n label: \"Restore\",\n iconSpec: <SvgWindowMinimize />,\n }\n : {\n id: widgetId,\n label: \"Maximize\",\n iconSpec: <SvgWindowMaximize />,\n };\n\n return (\n <ActionButton\n icon={iconSpec}\n label={label}\n onClick={() => {\n setMaximizedWidget(id);\n }}\n />\n );\n}\n\n/** @internal */\nexport function useMaximizeToggle() {\n const { enableMaximizedFloatingWidget, enableMaximizedPanelWidget } =\n usePreviewFeatures();\n const floatingWidgetId = useFloatingWidgetId();\n const panelWidgetId = usePanelWidgetId();\n\n if (enableMaximizedFloatingWidget && floatingWidgetId) return true;\n if (enableMaximizedPanelWidget && panelWidgetId) return true;\n return false;\n}\n"]}
1
+ {"version":3,"file":"MaximizeToggle.js","sourceRoot":"","sources":["../../../../src/appui-react/preview/enable-maximized-widget/MaximizeToggle.tsx"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,gBAAgB;AAChB,MAAM,UAAU,cAAc;IAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,EAAE,eAAe,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,UAAU,CAC9D,sBAAsB,CACvB,CAAC;IAEF,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,GAC3B,eAAe,KAAK,QAAQ;QAC1B,CAAC,CAAC;YACE,EAAE,EAAE,SAAS;YACb,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,oBAAC,iBAAiB,OAAG;SAChC;QACH,CAAC,CAAC;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,oBAAC,iBAAiB,OAAG;SAChC,CAAC;IAER,OAAO,CACL,oBAAC,YAAY,IACX,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,GAAG,EAAE;YACZ,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,GACD,CACH,CAAC;AACJ,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,6BAA6B,EAAE,0BAA0B,EAAE,GACjE,kBAAkB,EAAE,CAAC;IACvB,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,IAAI,6BAA6B,IAAI,gBAAgB;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,0BAA0B,IAAI,aAAa;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,KAAK,CAAC;AACf,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 Widget\n */\n\nimport * as React from \"react\";\nimport {\n SvgWindowMaximize,\n SvgWindowMinimize,\n} from \"@itwin/itwinui-icons-react\";\nimport { WidgetAction } from \"../../layout/widget/WidgetAction.js\";\nimport { WidgetIdContext } from \"../../layout/widget/Widget.js\";\nimport { MaximizedWidgetContext } from \"./MaximizedWidget.js\";\nimport { usePreviewFeatures } from \"../PreviewFeatures.js\";\nimport { useFloatingWidgetId } from \"../../layout/widget/FloatingWidget.js\";\nimport { usePanelWidgetId } from \"../../layout/widget/usePanelWidgetId.js\";\n\n/** @internal */\nexport function MaximizeToggle() {\n const widgetId = React.useContext(WidgetIdContext);\n const { maximizedWidget, setMaximizedWidget } = React.useContext(\n MaximizedWidgetContext\n );\n\n const { id, label, iconSpec } =\n maximizedWidget === widgetId\n ? {\n id: undefined,\n label: \"Restore\",\n iconSpec: <SvgWindowMinimize />,\n }\n : {\n id: widgetId,\n label: \"Maximize\",\n iconSpec: <SvgWindowMaximize />,\n };\n\n return (\n <WidgetAction\n icon={iconSpec}\n label={label}\n onClick={() => {\n setMaximizedWidget(id);\n }}\n />\n );\n}\n\n/** @internal */\nexport function useMaximizeToggle() {\n const { enableMaximizedFloatingWidget, enableMaximizedPanelWidget } =\n usePreviewFeatures();\n const floatingWidgetId = useFloatingWidgetId();\n const panelWidgetId = usePanelWidgetId();\n\n if (enableMaximizedFloatingWidget && floatingWidgetId) return true;\n if (enableMaximizedPanelWidget && panelWidgetId) return true;\n return false;\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * @module Widget
3
3
  */
4
4
  import * as React from "react";
5
- import type { WidgetFeature } from "../../layout/widget/Buttons.js";
5
+ import type { WidgetActionId } from "../../layout/widget/WidgetActions.js";
6
6
  /** @internal */
7
7
  export declare function MoreButton(props: React.PropsWithChildren<object>): React.JSX.Element;
8
8
  /** @internal */
@@ -10,5 +10,5 @@ export declare const WidgetActionDropdownContext: React.Context<{
10
10
  onClose: () => void;
11
11
  } | undefined>;
12
12
  /** @internal */
13
- export declare function useDropdownFeatures(features: WidgetFeature[]): readonly [WidgetFeature[], false] | readonly [WidgetFeature[], true];
13
+ export declare function useDropdownActions(actions: WidgetActionId[]): readonly [("popout" | "sendBack" | "dock" | "pin" | "maximize" | "horizontalAlign" | "closeWidget" | "addWidget")[], false] | readonly [("popout" | "sendBack" | "dock" | "pin" | "maximize" | "horizontalAlign" | "closeWidget" | "addWidget")[], true];
14
14
  //# sourceMappingURL=MoreButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MoreButton.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/preview/widget-action-dropdown/MoreButton.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAEpE,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAmBhE;AAED,gBAAgB;AAChB,eAAO,MAAM,2BAA2B;aAGzB,MAAM,IAAI;cAEb,CAAC;AA2Bb,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,wEAS5D"}
1
+ {"version":3,"file":"MoreButton.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/preview/widget-action-dropdown/MoreButton.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAE3E,gBAAgB;AAChB,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,qBAmBhE;AAED,gBAAgB;AAChB,eAAO,MAAM,2BAA2B;aAGzB,MAAM,IAAI;cAEb,CAAC;AA2Bb,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,4PAS3D"}
@@ -51,13 +51,13 @@ const order = [
51
51
  "sendBack",
52
52
  ];
53
53
  /** @internal */
54
- export function useDropdownFeatures(features) {
54
+ export function useDropdownActions(actions) {
55
55
  const { widgetActionDropdown } = usePreviewFeatures();
56
56
  const threshold = widgetActionDropdown?.threshold ?? Infinity;
57
- const isDropdown = features.length > threshold;
57
+ const isDropdown = actions.length > threshold;
58
58
  if (!isDropdown)
59
- return [features, false];
60
- const sorted = [...features].sort((a, b) => order.indexOf(a) - order.indexOf(b));
59
+ return [actions, false];
60
+ const sorted = [...actions].sort((a, b) => order.indexOf(a) - order.indexOf(b));
61
61
  return [sorted, true];
62
62
  }
63
63
  //# sourceMappingURL=MoreButton.js.map