@itwin/appui-react 3.1.0-dev.8 → 3.2.0-dev.12

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 (212) hide show
  1. package/CHANGELOG.md +130 -16
  2. package/lib/cjs/appui-react/UiFramework.d.ts +4 -2
  3. package/lib/cjs/appui-react/UiFramework.d.ts.map +1 -1
  4. package/lib/cjs/appui-react/UiFramework.js +7 -3
  5. package/lib/cjs/appui-react/UiFramework.js.map +1 -1
  6. package/lib/cjs/appui-react/backstage/Backstage.d.ts +0 -2
  7. package/lib/cjs/appui-react/backstage/Backstage.d.ts.map +1 -1
  8. package/lib/cjs/appui-react/backstage/Backstage.js +0 -1
  9. package/lib/cjs/appui-react/backstage/Backstage.js.map +1 -1
  10. package/lib/cjs/appui-react/backstage/BackstageComposerItem.d.ts +1 -0
  11. package/lib/cjs/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  12. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js +2 -2
  13. package/lib/cjs/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  14. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  15. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.js +2 -0
  16. package/lib/cjs/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  17. package/lib/cjs/appui-react/configurableui/ConfigurableUiManager.d.ts.map +1 -1
  18. package/lib/cjs/appui-react/configurableui/ConfigurableUiManager.js +6 -1
  19. package/lib/cjs/appui-react/configurableui/ConfigurableUiManager.js.map +1 -1
  20. package/lib/cjs/appui-react/content/ContentControl.d.ts +6 -0
  21. package/lib/cjs/appui-react/content/ContentControl.d.ts.map +1 -1
  22. package/lib/cjs/appui-react/content/ContentControl.js +11 -1
  23. package/lib/cjs/appui-react/content/ContentControl.js.map +1 -1
  24. package/lib/cjs/appui-react/content/ContentLayout.d.ts +8 -0
  25. package/lib/cjs/appui-react/content/ContentLayout.d.ts.map +1 -1
  26. package/lib/cjs/appui-react/content/ContentLayout.js +43 -36
  27. package/lib/cjs/appui-react/content/ContentLayout.js.map +1 -1
  28. package/lib/cjs/appui-react/content/ContentLayout.scss +27 -27
  29. package/lib/cjs/appui-react/content/ContentViewManager.d.ts +7 -0
  30. package/lib/cjs/appui-react/content/ContentViewManager.d.ts.map +1 -1
  31. package/lib/cjs/appui-react/content/ContentViewManager.js +46 -22
  32. package/lib/cjs/appui-react/content/ContentViewManager.js.map +1 -1
  33. package/lib/cjs/appui-react/content/FloatingViewportContent.css +9 -0
  34. package/lib/cjs/appui-react/content/FloatingViewportContent.d.ts +25 -0
  35. package/lib/cjs/appui-react/content/FloatingViewportContent.d.ts.map +1 -0
  36. package/lib/cjs/appui-react/content/FloatingViewportContent.js +73 -0
  37. package/lib/cjs/appui-react/content/FloatingViewportContent.js.map +1 -0
  38. package/lib/cjs/appui-react/content/IModelViewport.d.ts +1 -1
  39. package/lib/cjs/appui-react/content/IModelViewport.d.ts.map +1 -1
  40. package/lib/cjs/appui-react/content/IModelViewport.js +1 -1
  41. package/lib/cjs/appui-react/content/IModelViewport.js.map +1 -1
  42. package/lib/cjs/appui-react/content/ViewportContentControl.d.ts +9 -0
  43. package/lib/cjs/appui-react/content/ViewportContentControl.d.ts.map +1 -1
  44. package/lib/cjs/appui-react/content/ViewportContentControl.js +24 -1
  45. package/lib/cjs/appui-react/content/ViewportContentControl.js.map +1 -1
  46. package/lib/cjs/appui-react/dialog/ContentDialog.d.ts +24 -0
  47. package/lib/cjs/appui-react/dialog/ContentDialog.d.ts.map +1 -0
  48. package/lib/cjs/appui-react/dialog/ContentDialog.js +72 -0
  49. package/lib/cjs/appui-react/dialog/ContentDialog.js.map +1 -0
  50. package/lib/cjs/appui-react/dialog/ContentDialog.scss +25 -0
  51. package/lib/cjs/appui-react/dialog/ContentDialogManager.d.ts +65 -0
  52. package/lib/cjs/appui-react/dialog/ContentDialogManager.d.ts.map +1 -0
  53. package/lib/cjs/appui-react/dialog/ContentDialogManager.js +148 -0
  54. package/lib/cjs/appui-react/dialog/ContentDialogManager.js.map +1 -0
  55. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts +9 -0
  56. package/lib/cjs/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  57. package/lib/cjs/appui-react/frontstage/FrontstageDef.js +65 -7
  58. package/lib/cjs/appui-react/frontstage/FrontstageDef.js.map +1 -1
  59. package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts +3 -0
  60. package/lib/cjs/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
  61. package/lib/cjs/appui-react/frontstage/FrontstageManager.js +8 -0
  62. package/lib/cjs/appui-react/frontstage/FrontstageManager.js.map +1 -1
  63. package/lib/cjs/appui-react/hooks/useUiVisibility.d.ts +6 -0
  64. package/lib/cjs/appui-react/hooks/useUiVisibility.d.ts.map +1 -0
  65. package/lib/cjs/appui-react/hooks/useUiVisibility.js +27 -0
  66. package/lib/cjs/appui-react/hooks/useUiVisibility.js.map +1 -0
  67. package/lib/cjs/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.d.ts.map +1 -1
  68. package/lib/cjs/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.js +2 -1
  69. package/lib/cjs/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.js.map +1 -1
  70. package/lib/cjs/appui-react/imodel-components/models-tree/ModelsTreeSearch.json +3 -3
  71. package/lib/cjs/appui-react/popup/CardPopup.scss +3 -1
  72. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts +2 -3
  73. package/lib/cjs/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  74. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js +2 -3
  75. package/lib/cjs/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  76. package/lib/cjs/appui-react/statusbar/StatusBarComposer.d.ts +3 -0
  77. package/lib/cjs/appui-react/statusbar/StatusBarComposer.d.ts.map +1 -1
  78. package/lib/cjs/appui-react/statusbar/StatusBarComposer.js +20 -5
  79. package/lib/cjs/appui-react/statusbar/StatusBarComposer.js.map +1 -1
  80. package/lib/cjs/appui-react/timeline/AnalysisAnimationProvider.js +1 -1
  81. package/lib/cjs/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
  82. package/lib/cjs/appui-react/uiprovider/DefaultDialogGridContainer.scss +3 -0
  83. package/lib/cjs/appui-react/widget-panels/Content.d.ts.map +1 -1
  84. package/lib/cjs/appui-react/widget-panels/Content.js +2 -2
  85. package/lib/cjs/appui-react/widget-panels/Content.js.map +1 -1
  86. package/lib/cjs/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  87. package/lib/cjs/appui-react/widget-panels/Frontstage.js +25 -7
  88. package/lib/cjs/appui-react/widget-panels/Frontstage.js.map +1 -1
  89. package/lib/cjs/appui-react/widgets/BasicNavigationWidget.js +2 -2
  90. package/lib/cjs/appui-react/widgets/BasicNavigationWidget.js.map +1 -1
  91. package/lib/cjs/appui-react/widgets/BasicToolWidget.d.ts +0 -2
  92. package/lib/cjs/appui-react/widgets/BasicToolWidget.d.ts.map +1 -1
  93. package/lib/cjs/appui-react/widgets/BasicToolWidget.js +3 -17
  94. package/lib/cjs/appui-react/widgets/BasicToolWidget.js.map +1 -1
  95. package/lib/cjs/appui-react/widgets/ContentToolWidgetComposer.js +2 -2
  96. package/lib/cjs/appui-react/widgets/ContentToolWidgetComposer.js.map +1 -1
  97. package/lib/cjs/appui-react/widgets/ViewToolWidgetComposer.js +2 -2
  98. package/lib/cjs/appui-react/widgets/ViewToolWidgetComposer.js.map +1 -1
  99. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts +2 -0
  100. package/lib/cjs/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  101. package/lib/cjs/appui-react/widgets/WidgetDef.js +2 -0
  102. package/lib/cjs/appui-react/widgets/WidgetDef.js.map +1 -1
  103. package/lib/cjs/appui-react.d.ts +4 -0
  104. package/lib/cjs/appui-react.d.ts.map +1 -1
  105. package/lib/cjs/appui-react.js +4 -0
  106. package/lib/cjs/appui-react.js.map +1 -1
  107. package/lib/esm/appui-react/UiFramework.d.ts +4 -2
  108. package/lib/esm/appui-react/UiFramework.d.ts.map +1 -1
  109. package/lib/esm/appui-react/UiFramework.js +7 -3
  110. package/lib/esm/appui-react/UiFramework.js.map +1 -1
  111. package/lib/esm/appui-react/backstage/Backstage.d.ts +0 -2
  112. package/lib/esm/appui-react/backstage/Backstage.d.ts.map +1 -1
  113. package/lib/esm/appui-react/backstage/Backstage.js +0 -1
  114. package/lib/esm/appui-react/backstage/Backstage.js.map +1 -1
  115. package/lib/esm/appui-react/backstage/BackstageComposerItem.d.ts +1 -0
  116. package/lib/esm/appui-react/backstage/BackstageComposerItem.d.ts.map +1 -1
  117. package/lib/esm/appui-react/backstage/BackstageComposerItem.js +2 -2
  118. package/lib/esm/appui-react/backstage/BackstageComposerItem.js.map +1 -1
  119. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.d.ts.map +1 -1
  120. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.js +2 -0
  121. package/lib/esm/appui-react/configurableui/ConfigurableUiContent.js.map +1 -1
  122. package/lib/esm/appui-react/configurableui/ConfigurableUiManager.d.ts.map +1 -1
  123. package/lib/esm/appui-react/configurableui/ConfigurableUiManager.js +6 -1
  124. package/lib/esm/appui-react/configurableui/ConfigurableUiManager.js.map +1 -1
  125. package/lib/esm/appui-react/content/ContentControl.d.ts +6 -0
  126. package/lib/esm/appui-react/content/ContentControl.d.ts.map +1 -1
  127. package/lib/esm/appui-react/content/ContentControl.js +10 -1
  128. package/lib/esm/appui-react/content/ContentControl.js.map +1 -1
  129. package/lib/esm/appui-react/content/ContentLayout.d.ts +8 -0
  130. package/lib/esm/appui-react/content/ContentLayout.d.ts.map +1 -1
  131. package/lib/esm/appui-react/content/ContentLayout.js +41 -35
  132. package/lib/esm/appui-react/content/ContentLayout.js.map +1 -1
  133. package/lib/esm/appui-react/content/ContentLayout.scss +27 -27
  134. package/lib/esm/appui-react/content/ContentViewManager.d.ts +7 -0
  135. package/lib/esm/appui-react/content/ContentViewManager.d.ts.map +1 -1
  136. package/lib/esm/appui-react/content/ContentViewManager.js +46 -22
  137. package/lib/esm/appui-react/content/ContentViewManager.js.map +1 -1
  138. package/lib/esm/appui-react/content/FloatingViewportContent.css +9 -0
  139. package/lib/esm/appui-react/content/FloatingViewportContent.d.ts +25 -0
  140. package/lib/esm/appui-react/content/FloatingViewportContent.d.ts.map +1 -0
  141. package/lib/esm/appui-react/content/FloatingViewportContent.js +69 -0
  142. package/lib/esm/appui-react/content/FloatingViewportContent.js.map +1 -0
  143. package/lib/esm/appui-react/content/IModelViewport.d.ts +1 -1
  144. package/lib/esm/appui-react/content/IModelViewport.d.ts.map +1 -1
  145. package/lib/esm/appui-react/content/IModelViewport.js +1 -1
  146. package/lib/esm/appui-react/content/IModelViewport.js.map +1 -1
  147. package/lib/esm/appui-react/content/ViewportContentControl.d.ts +9 -0
  148. package/lib/esm/appui-react/content/ViewportContentControl.d.ts.map +1 -1
  149. package/lib/esm/appui-react/content/ViewportContentControl.js +23 -1
  150. package/lib/esm/appui-react/content/ViewportContentControl.js.map +1 -1
  151. package/lib/esm/appui-react/dialog/ContentDialog.d.ts +24 -0
  152. package/lib/esm/appui-react/dialog/ContentDialog.d.ts.map +1 -0
  153. package/lib/esm/appui-react/dialog/ContentDialog.js +67 -0
  154. package/lib/esm/appui-react/dialog/ContentDialog.js.map +1 -0
  155. package/lib/esm/appui-react/dialog/ContentDialog.scss +25 -0
  156. package/lib/esm/appui-react/dialog/ContentDialogManager.d.ts +65 -0
  157. package/lib/esm/appui-react/dialog/ContentDialogManager.d.ts.map +1 -0
  158. package/lib/esm/appui-react/dialog/ContentDialogManager.js +142 -0
  159. package/lib/esm/appui-react/dialog/ContentDialogManager.js.map +1 -0
  160. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts +9 -0
  161. package/lib/esm/appui-react/frontstage/FrontstageDef.d.ts.map +1 -1
  162. package/lib/esm/appui-react/frontstage/FrontstageDef.js +66 -8
  163. package/lib/esm/appui-react/frontstage/FrontstageDef.js.map +1 -1
  164. package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts +3 -0
  165. package/lib/esm/appui-react/frontstage/FrontstageManager.d.ts.map +1 -1
  166. package/lib/esm/appui-react/frontstage/FrontstageManager.js +8 -0
  167. package/lib/esm/appui-react/frontstage/FrontstageManager.js.map +1 -1
  168. package/lib/esm/appui-react/hooks/useUiVisibility.d.ts +6 -0
  169. package/lib/esm/appui-react/hooks/useUiVisibility.d.ts.map +1 -0
  170. package/lib/esm/appui-react/hooks/useUiVisibility.js +23 -0
  171. package/lib/esm/appui-react/hooks/useUiVisibility.js.map +1 -0
  172. package/lib/esm/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.d.ts.map +1 -1
  173. package/lib/esm/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.js +2 -1
  174. package/lib/esm/appui-react/imodel-components/category-tree/CategoryVisibilityHandler.js.map +1 -1
  175. package/lib/esm/appui-react/imodel-components/models-tree/ModelsTreeSearch.json +3 -3
  176. package/lib/esm/appui-react/popup/CardPopup.scss +3 -1
  177. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts +2 -3
  178. package/lib/esm/appui-react/stagepanels/StagePanelDef.d.ts.map +1 -1
  179. package/lib/esm/appui-react/stagepanels/StagePanelDef.js +1 -2
  180. package/lib/esm/appui-react/stagepanels/StagePanelDef.js.map +1 -1
  181. package/lib/esm/appui-react/statusbar/StatusBarComposer.d.ts +3 -0
  182. package/lib/esm/appui-react/statusbar/StatusBarComposer.d.ts.map +1 -1
  183. package/lib/esm/appui-react/statusbar/StatusBarComposer.js +20 -5
  184. package/lib/esm/appui-react/statusbar/StatusBarComposer.js.map +1 -1
  185. package/lib/esm/appui-react/timeline/AnalysisAnimationProvider.js +1 -1
  186. package/lib/esm/appui-react/timeline/AnalysisAnimationProvider.js.map +1 -1
  187. package/lib/esm/appui-react/uiprovider/DefaultDialogGridContainer.scss +3 -0
  188. package/lib/esm/appui-react/widget-panels/Content.d.ts.map +1 -1
  189. package/lib/esm/appui-react/widget-panels/Content.js +2 -2
  190. package/lib/esm/appui-react/widget-panels/Content.js.map +1 -1
  191. package/lib/esm/appui-react/widget-panels/Frontstage.d.ts.map +1 -1
  192. package/lib/esm/appui-react/widget-panels/Frontstage.js +25 -7
  193. package/lib/esm/appui-react/widget-panels/Frontstage.js.map +1 -1
  194. package/lib/esm/appui-react/widgets/BasicNavigationWidget.js +1 -1
  195. package/lib/esm/appui-react/widgets/BasicNavigationWidget.js.map +1 -1
  196. package/lib/esm/appui-react/widgets/BasicToolWidget.d.ts +0 -2
  197. package/lib/esm/appui-react/widgets/BasicToolWidget.d.ts.map +1 -1
  198. package/lib/esm/appui-react/widgets/BasicToolWidget.js +1 -14
  199. package/lib/esm/appui-react/widgets/BasicToolWidget.js.map +1 -1
  200. package/lib/esm/appui-react/widgets/ContentToolWidgetComposer.js +1 -1
  201. package/lib/esm/appui-react/widgets/ContentToolWidgetComposer.js.map +1 -1
  202. package/lib/esm/appui-react/widgets/ViewToolWidgetComposer.js +1 -1
  203. package/lib/esm/appui-react/widgets/ViewToolWidgetComposer.js.map +1 -1
  204. package/lib/esm/appui-react/widgets/WidgetDef.d.ts +2 -0
  205. package/lib/esm/appui-react/widgets/WidgetDef.d.ts.map +1 -1
  206. package/lib/esm/appui-react/widgets/WidgetDef.js +2 -0
  207. package/lib/esm/appui-react/widgets/WidgetDef.js.map +1 -1
  208. package/lib/esm/appui-react.d.ts +4 -0
  209. package/lib/esm/appui-react.d.ts.map +1 -1
  210. package/lib/esm/appui-react.js +4 -0
  211. package/lib/esm/appui-react.js.map +1 -1
  212. package/package.json +34 -35
@@ -6,6 +6,14 @@ import * as React from "react";
6
6
  import { CommonProps } from "@itwin/core-react";
7
7
  import { ContentGroup } from "./ContentGroup";
8
8
  import { ContentLayoutProps, LayoutFragmentProps, UiEvent } from "@itwin/appui-abstract";
9
+ /** Properties for [[ContentWrapper]] */
10
+ interface ContentWrapperProps extends CommonProps {
11
+ content: React.ReactNode;
12
+ }
13
+ /** ContentWrapper React component.
14
+ * @internal
15
+ */
16
+ export declare function ContentWrapper(props: ContentWrapperProps): JSX.Element;
9
17
  /** Common interface for HorizontalSplit and VerticalSplit
10
18
  */
11
19
  interface LayoutSplit {
@@ -1 +1 @@
1
- {"version":3,"file":"ContentLayout.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAA8E,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAqKrK;GACG;AACH,UAAU,WAAW;IACnB,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7F,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6JD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAM;IACvB,iCAAiC;IAC1B,WAAW,EAAE,MAAM,CAAM;gBACpB,WAAW,EAAE,kBAAkB;IAO3C,IAAW,SAAS,IAAI,WAAW,GAAG,SAAS,CAA4B;IAE3E;;OAEG;IACI,MAAM,IAAI,kBAAkB;IAEnC;OACG;IACI,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS;IAa5G;OACG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAexC,OAAO,CAAC,gCAAgC;IAuBxC,OAAO,CAAC,8BAA8B;IAuBtC,gBAAgB;WACF,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,WAAW,GAAG,SAAS;CAUrF;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,OAAO,CAAC,+BAA+B,CAAC;CAAI;AAE7F;GACG;AACH,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC9D,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;IAEjG,gBAAgB;IAChB,SAAyB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAEjD,KAAK,EAAE,2BAA2B;IAgB9B,iBAAiB;IAIjB,oBAAoB;IAIpC,OAAO,CAAC,6BAA6B,CAYnC;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IAezC,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,UAAU,CAEhB;CACH"}
1
+ {"version":3,"file":"ContentLayout.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,sBAAsB,CAAC;AAE9B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAe,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAA8E,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrK,wCAAwC;AACxC,UAAU,mBAAoB,SAAQ,WAAW;IAC/C,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAmDxD;AA4FD;GACG;AACH,UAAU,WAAW;IACnB,sBAAsB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;IAC7F,QAAQ,EAAE,OAAO,CAAC;CACnB;AA6JD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC,iCAAiC;IAC1B,EAAE,EAAE,MAAM,CAAM;IACvB,iCAAiC;IAC1B,WAAW,EAAE,MAAM,CAAM;gBACpB,WAAW,EAAE,kBAAkB;IAO3C,IAAW,SAAS,IAAI,WAAW,GAAG,SAAS,CAA4B;IAE3E;;OAEG;IACI,MAAM,IAAI,kBAAkB;IAEnC;OACG;IACI,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS;IAa5G;OACG;IACI,qBAAqB,IAAI,MAAM,EAAE;IAexC,OAAO,CAAC,gCAAgC;IAuBxC,OAAO,CAAC,8BAA8B;IAuBtC,gBAAgB;WACF,WAAW,CAAC,WAAW,EAAE,mBAAmB,GAAG,WAAW,GAAG,SAAS;CAUrF;AAED;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,OAAO,CAAC,+BAA+B,CAAC;CAAI;AAE7F;GACG;AACH,UAAU,kBAAkB;IAC1B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,WAAW;IAC9D,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;IAEjG,gBAAgB;IAChB,SAAyB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAEjD,KAAK,EAAE,2BAA2B;IAgB9B,iBAAiB;IAIjB,oBAAoB;IAIpC,OAAO,CAAC,6BAA6B,CAYnC;IAEc,MAAM,IAAI,KAAK,CAAC,SAAS;IAezC,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,UAAU,CAEhB;CACH"}
@@ -15,44 +15,49 @@ import { FrontstageManager } from "../frontstage/FrontstageManager";
15
15
  import { UiShowHideManager } from "../utils/UiShowHideManager";
16
16
  import { UiEvent } from "@itwin/appui-abstract";
17
17
  import { ContentViewManager } from "./ContentViewManager";
18
+ import { useActiveFrontstageDef } from "../frontstage/Frontstage";
18
19
  /** ContentWrapper React component.
20
+ * @internal
19
21
  */
20
- class ContentWrapper extends React.Component {
21
- constructor(props) {
22
- super(props);
23
- this._handleMouseDown = (_event) => {
24
- // event.preventDefault();
25
- ContentViewManager.setActiveContent(this.state.content);
26
- };
27
- this._handleActiveContentChanged = (args) => {
28
- const isActive = this.state.content === args.activeContent;
29
- if (this.state.isActive !== isActive) {
30
- this.setState({ isActive });
31
- }
22
+ export function ContentWrapper(props) {
23
+ const { content } = props;
24
+ const [isActive, setIsActive] = React.useState(content === ContentViewManager.getActiveContent());
25
+ const activeFrontstageDef = useActiveFrontstageDef();
26
+ // istanbul ignore next
27
+ const [hasMultipleContents, setHasMultipleContents] = React.useState(() => {
28
+ var _a, _b, _c;
29
+ return (activeFrontstageDef && (!!((_a = activeFrontstageDef.floatingContentControls) === null || _a === void 0 ? void 0 : _a.length)) ||
30
+ ((_c = (_b = activeFrontstageDef === null || activeFrontstageDef === void 0 ? void 0 : activeFrontstageDef.contentGroup) === null || _b === void 0 ? void 0 : _b.getContentControls().length) !== null && _c !== void 0 ? _c : 0) > 1);
31
+ });
32
+ React.useEffect(() => {
33
+ setIsActive(content === ContentViewManager.getActiveContent());
34
+ }, [content]);
35
+ React.useEffect(() => {
36
+ const handleActiveContentChanged = (args) => {
37
+ var _a, _b, _c;
38
+ setIsActive(content === args.activeContent);
39
+ // istanbul ignore next
40
+ setHasMultipleContents((activeFrontstageDef && (!!((_a = activeFrontstageDef.floatingContentControls) === null || _a === void 0 ? void 0 : _a.length)) ||
41
+ ((_c = (_b = activeFrontstageDef === null || activeFrontstageDef === void 0 ? void 0 : activeFrontstageDef.contentGroup) === null || _b === void 0 ? void 0 : _b.getContentControls().length) !== null && _c !== void 0 ? _c : 0) > 1));
32
42
  };
33
- this.state = {
34
- content: this.props.content,
35
- isActive: this.props.content === ContentViewManager.getActiveContent(),
43
+ return ContentViewManager.onActiveContentChangedEvent.addListener(handleActiveContentChanged);
44
+ }, [activeFrontstageDef, content]);
45
+ const handleMouseDown = React.useCallback(() => {
46
+ ContentViewManager.setActiveContent(content);
47
+ }, [content]);
48
+ React.useEffect(() => {
49
+ const onAvailableContentChanged = () => {
50
+ var _a, _b, _c;
51
+ // istanbul ignore next
52
+ setHasMultipleContents((activeFrontstageDef && (!!((_a = activeFrontstageDef.floatingContentControls) === null || _a === void 0 ? void 0 : _a.length)) ||
53
+ ((_c = (_b = activeFrontstageDef === null || activeFrontstageDef === void 0 ? void 0 : activeFrontstageDef.contentGroup) === null || _b === void 0 ? void 0 : _b.getContentControls().length) !== null && _c !== void 0 ? _c : 0) > 1));
36
54
  };
37
- }
38
- render() {
39
- const overlayClassName = classnames("uifw-contentlayout-overlay-div", this.state.isActive ? "uifw-contentlayout-overlay-active" : "uifw-contentlayout-overlay-inactive");
40
- return (React.createElement("div", { className: classnames("uifw-contentlayout-wrapper", this.props.className), style: this.props.style, onMouseDown: this._handleMouseDown, onMouseMove: UiShowHideManager.handleContentMouseMove, role: "presentation" },
41
- this.state.content,
42
- React.createElement("div", { className: overlayClassName })));
43
- }
44
- componentDidMount() {
45
- ContentViewManager.onActiveContentChangedEvent.addListener(this._handleActiveContentChanged);
46
- }
47
- componentWillUnmount() {
48
- ContentViewManager.onActiveContentChangedEvent.removeListener(this._handleActiveContentChanged);
49
- }
50
- // istanbul ignore next
51
- componentDidUpdate(prevProps, _prevState) {
52
- if (this.props.content !== prevProps.content) {
53
- this.setState((_, props) => ({ content: props.content, isActive: props.content === ContentViewManager.getActiveContent() }));
54
- }
55
- }
55
+ return ContentViewManager.onAvailableContentChangedEvent.addListener(onAvailableContentChanged);
56
+ }, [activeFrontstageDef]);
57
+ const overlayClassName = classnames("uifw-contentlayout-overlay-div", isActive && hasMultipleContents ? "uifw-contentlayout-overlay-active" : "uifw-contentlayout-overlay-inactive");
58
+ return (React.createElement("div", { className: classnames("uifw-contentlayout-wrapper", props.className), style: props.style, onMouseDown: handleMouseDown, onMouseMove: UiShowHideManager.handleContentMouseMove, role: "presentation" },
59
+ content,
60
+ React.createElement("div", { className: overlayClassName })));
56
61
  }
57
62
  /** Split Container class.
58
63
  */
@@ -97,7 +102,8 @@ class SplitContainer extends React.Component {
97
102
  */
98
103
  class SingleContentContainer extends React.Component {
99
104
  render() {
100
- return (React.createElement("div", { className: classnames("uifw-contentlayout-full-size", this.props.className), style: this.props.style, "data-testid": "single-content-container", onMouseMove: UiShowHideManager.handleContentMouseMove }, this.props.content));
105
+ return (React.createElement("div", { className: classnames("uifw-contentlayout-full-size", this.props.className), style: this.props.style, "data-testid": "single-content-container", onMouseMove: UiShowHideManager.handleContentMouseMove },
106
+ React.createElement(ContentWrapper, { content: this.props.content, style: { height: "100%", position: "relative" } })));
101
107
  }
102
108
  }
103
109
  /** Minimum split size */
@@ -1 +1 @@
1
- {"version":3,"file":"ContentLayout.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,8BAA8B;AAE9B,OAAO,sBAAsB,CAAC;AAC9B,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,OAAO,EAAuH,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrK,OAAO,EAAiC,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAazF;GACG;AACH,MAAM,cAAe,SAAQ,KAAK,CAAC,SAAmD;IAKpF,YAAY,KAA0B;QACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAwBP,qBAAgB,GAAG,CAAC,MAAwC,EAAE,EAAE;YACtE,0BAA0B;YAE1B,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC;QAUM,gCAA2B,GAAG,CAAC,IAAmC,EAAE,EAAE;YAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa,CAAC;YAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBACpC,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC;QAzCA,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;YAC3B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,kBAAkB,CAAC,gBAAgB,EAAE;SACvE,CAAC;IACJ,CAAC;IAEe,MAAM;QACpB,MAAM,gBAAgB,GAAG,UAAU,CACjC,gCAAgC,EAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,qCAAqC,CAClG,CAAC;QAEF,OAAO,CACL,6BAAK,SAAS,EAAE,UAAU,CAAC,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACrG,WAAW,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,EAAE,iBAAiB,CAAC,sBAAsB,EAAE,IAAI,EAAC,cAAc;YAE7G,IAAI,CAAC,KAAK,CAAC,OAAO;YACnB,6BAAK,SAAS,EAAE,gBAAgB,GAAI,CAChC,CACP,CAAC;IACJ,CAAC;IAQe,iBAAiB;QAC/B,kBAAkB,CAAC,2BAA2B,CAAC,WAAW,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAC/F,CAAC;IAEe,oBAAoB;QAClC,kBAAkB,CAAC,2BAA2B,CAAC,cAAc,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IAClG,CAAC;IASD,uBAAuB;IACP,kBAAkB,CAAC,SAA8B,EAAE,UAA+B;QAChG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,OAAO,EAAE;YAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,KAAK,kBAAkB,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC;SAC9H;IACH,CAAC;CACF;AAeD;GACG;AACH,MAAM,cAAe,SAAQ,KAAK,CAAC,SAA8B;IAG/D,YAAY,KAA0B;QACpC,KAAK,CAAC,KAAK,CAAC,CAAC;QAHP,kBAAa,GAA0B,IAAI,CAAC;QAM5C,sBAAiB,GAAG,CAAC,IAAY,EAAQ,EAAE;YACjD,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,uBAAuB;YACvB,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,GAAG,CAAC,EAAE;gBAClC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,EAAE;oBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC;oBACjE,qBAAqB;oBACrB,IAAI,MAAM,GAAG,CAAC;wBACZ,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC;iBAC9B;qBAAM;oBACL,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;oBAC/D,qBAAqB;oBACrB,IAAI,KAAK,GAAG,CAAC;wBACX,UAAU,GAAG,IAAI,GAAG,KAAK,CAAC;iBAC7B;gBAED,uBAAuB;gBACvB,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB;oBAC7B,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;aACjD;QACH,CAAC,CAAC;IAvBF,CAAC;IAyBe,MAAM;QACpB,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;QACpG,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;QACjD,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAE5D,OAAO,CACL,6BAAK,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1C,SAAS,EAAE,UAAU,CAAC,8BAA8B,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAC3E,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YAEvB,oBAAC,SAAS,IAAC,KAAK,EAAE,WAAW,EAC3B,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,WAAW,EAC9E,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;gBAElE,IAAI,CAAC,KAAK,CAAC,QAAQ;gBACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CACV,CACP,CACR,CAAC;IACJ,CAAC;CACF;AAQD;GACG;AACH,MAAM,sBAAuB,SAAQ,KAAK,CAAC,SAA6B;IAEtD,MAAM;QAEpB,OAAO,CACL,6BAAK,SAAS,EAAE,UAAU,CAAC,8BAA8B,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAc,0BAA0B,EAC/I,WAAW,EAAE,iBAAiB,CAAC,sBAAsB,IAEpD,IAAI,CAAC,KAAK,CAAC,OAAO,CACf,CACP,CAAC;IACJ,CAAC;CACF;AASD,0BAA0B;AAC1B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;GACG;AACH,MAAM,SAAS;IAKb,YAAY,KAA2B;QAHhC,YAAO,GAAW,EAAE,CAAC;QACrB,aAAQ,GAAY,KAAK,CAAC;QAG/B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC;QAE1C,uBAAuB;QACvB,IAAI,KAAK,CAAC,EAAE;YACV,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC;QAE1B,uBAAuB;QACvB,IAAI,KAAK,CAAC,IAAI;YACZ,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC;CACF;AAED;GACG;AACH,MAAM,eAAgB,SAAQ,SAAS;IASrC,YAAY,KAAiC;QAC3C,KAAK,CAAC,KAAK,CAAC,CAAC;QATP,cAAS,GAAW,CAAC,CAAC,CAAC;QACvB,iBAAY,GAAW,CAAC,CAAC,CAAC;QAI1B,gBAAW,GAAW,cAAc,CAAC;QACrC,mBAAc,GAAW,cAAc,CAAC;QA0BxC,0BAAqB,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAQ,EAAE;YAC1E,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,CAAC,CAAC;QAvBA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YACjC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC;SAC5B;aAAM;YACL,IAAI,CAAC,SAAS,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC1D;QAED,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE;YACpC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;SAClC;aAAM;YACL,IAAI,CAAC,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;SAChE;QAED,IAAI,KAAK,CAAC,UAAU;YAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAEhE,IAAI,KAAK,CAAC,aAAa;YACrB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IACxE,CAAC;IAMM,sBAAsB,CAAC,YAA+B,EAAE,SAAkB;QAC/E,IAAI,IAAI,CAAC,QAAQ;YACf,SAAS,GAAG,KAAK,CAAC;QAEpB,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACpC,oBAAC,cAAc,IAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,GAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACjE,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1C,oBAAC,cAAc,IAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,GAAI,CAAC,CAAC;YAC9D,IAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAEpE,OAAO,CACL,oBAAC,cAAc,IACb,QAAQ,EAAE,UAAU,EACpB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,WAAW,CAAC,UAAU,EACnC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,IAAI,CAAC,WAAW,EAChC,kBAAkB,EAAE,IAAI,CAAC,cAAc,EACvC,eAAe,EAAE,IAAI,CAAC,OAAO,EAC7B,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAED;GACG;AACH,MAAM,aAAc,SAAQ,SAAS;IASnC,YAAY,KAA+B;QACzC,KAAK,CAAC,KAAK,CAAC,CAAC;QATP,eAAU,GAAW,CAAC,CAAC,CAAC;QACxB,gBAAW,GAAW,CAAC,CAAC,CAAC;QAIzB,iBAAY,GAAW,cAAc,CAAC;QACtC,kBAAa,GAAW,cAAc,CAAC;QA0BvC,0BAAqB,GAAG,CAAC,KAAa,EAAE,UAAkB,EAAQ,EAAE;YAC1E,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QACtC,CAAC,CAAC;QAvBA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YAClC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5D;QAED,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;YACnC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC;SAChC;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC9D;QAED,IAAI,KAAK,CAAC,WAAW;YACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAElE,IAAI,KAAK,CAAC,YAAY;YACpB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC;IAMM,sBAAsB,CAAC,YAA+B,EAAE,SAAkB;QAC/E,IAAI,IAAI,CAAC,QAAQ;YACf,SAAS,GAAG,KAAK,CAAC;QAEpB,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,oBAAC,cAAc,IAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,GAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACxC,oBAAC,cAAc,IAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAEnE,OAAO,CACL,oBAAC,cAAc,IACb,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,CAAC,QAAQ,EACjC,UAAU,EAAE,IAAI,CAAC,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,IAAI,CAAC,YAAY,EACjC,kBAAkB,EAAE,IAAI,CAAC,aAAa,EACtC,eAAe,EAAE,IAAI,CAAC,OAAO,EAC7B,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,GAC5C,CACH,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAQ3B,YAAY,WAA+B;QAJ3C,iCAAiC;QAC1B,OAAE,GAAW,EAAE,CAAC;QACvB,iCAAiC;QAC1B,gBAAW,GAAW,EAAE,CAAC;QAE9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;QACzB,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS;YACvC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IAC/C,CAAC;IAED,IAAW,SAAS,KAA8B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAE3E;;OAEG;IACI,MAAM,KAAyB,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEjE;OACG;IACI,mBAAmB,CAAC,YAA+B,EAAE,SAAkB;QAC5E,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAElE,IAAI,IAAI,CAAC,SAAS,EAAE;YAClB,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;SACvE;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YACzB,OAAO,oBAAC,sBAAsB,IAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAI,CAAC;QAE9D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;OACG;IACI,qBAAqB;QAC1B,IAAI,iBAAiB,GAAa,EAAE,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa;YACxE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;YACH,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;YACvH,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;SACpH;QAED,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE7D,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEO,gCAAgC,CAAC,UAAuC;QAC9E,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC,UAAU;YACb,OAAO,cAAc,CAAC;QAExB,IAAI,OAAO,UAAU,CAAC,GAAG,KAAK,QAAQ;YACpC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aACjC;YACH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9G,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;SAC3G;QAED,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ;YACvC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;aACpC;YACH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC;YACjH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;SAC9G;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,8BAA8B,CAAC,UAAqC;QAC1E,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC,UAAU;YACb,OAAO,cAAc,CAAC;QAExB,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;YACrC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aAClC;YACH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC/G,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;SAC5G;QAED,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ;YACtC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACnC;YACH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;YAChH,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;SAC7G;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,MAAM,CAAC,WAAW,CAAC,WAAgC;QACxD,IAAI,WAAW,CAAC,eAAe,EAAE;YAC/B,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;SACzD;aAAM,IAAI,WAAW,CAAC,aAAa,EAAE;YACpC,OAAO,IAAI,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;SACrD;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CAEF;AAUD;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,OAAwC;CAAI;AAmB7F;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK,CAAC,SAA0D;IAKjG,YAAY,KAAkC;QAC5C,KAAK,CAAC,KAAK,CAAC,CAAC;QAuBP,kCAA6B,GAAG,CAAC,IAAqC,EAAE,EAAE;YAChF,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YAEvC,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;YACpD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAElF,IAAI,CAAC,QAAQ,CAAC;gBACZ,gBAAgB,EAAE,IAAI,CAAC,aAAa;gBACpC,gBAAgB;gBAChB,cAAc,EAAE,YAAY,CAAC,OAAO;aACrC,CAAC,CAAC;QACL,CAAC,CAAC;QAiBM,iBAAY,GAAG,CAAC,MAAwC,EAAE,EAAE;YAClE,kBAAkB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC;QAEM,eAAU,GAAG,CAAC,MAAwC,EAAE,EAAE;YAChE,kBAAkB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC;QAxDA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAE7C,MAAM,YAAY,GAAG,YAAY,CAAC,eAAe,EAAE,CAAC;QACpD,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAElF,IAAI,CAAC,KAAK,GAAG;YACX,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;YAC1C,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO;SAChD,CAAC;IACJ,CAAC;IAEe,iBAAiB;QAC/B,iBAAiB,CAAC,6BAA6B,CAAC,WAAW,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClG,CAAC;IAEe,oBAAoB;QAClC,iBAAiB,CAAC,6BAA6B,CAAC,cAAc,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACrG,CAAC;IAgBe,MAAM;QACpB,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC/B,OAAO,CACL,6BAAK,EAAE,EAAC,wBAAwB,EAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EACvF,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,EACrE,WAAW,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,EAAC,cAAc,IAE9E,IAAI,CAAC,KAAK,CAAC,gBAAgB,CACxB,CACP,CAAC;SACH;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CASF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\n// cSpell:ignore contentlayout\r\n\r\nimport \"./ContentLayout.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { SplitPane } from \"./split-pane/SplitPane\";\r\nimport { CommonProps, Orientation } from \"@itwin/core-react\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { ContentLayoutProps, LayoutFragmentProps, LayoutHorizontalSplitProps, LayoutSplitPropsBase, LayoutVerticalSplitProps, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { ActiveContentChangedEventArgs, ContentViewManager } from \"./ContentViewManager\";\r\n\r\n/** Properties for [[ContentWrapper]] */\r\ninterface ContentWrapperProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** State for [[ContentWrapper]] */\r\ninterface ContentWrapperState {\r\n content: React.ReactNode;\r\n isActive: boolean;\r\n}\r\n\r\n/** ContentWrapper React component.\r\n */\r\nclass ContentWrapper extends React.Component<ContentWrapperProps, ContentWrapperState> {\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<ContentWrapperState>;\r\n\r\n constructor(props: ContentWrapperProps) {\r\n super(props);\r\n\r\n this.state = {\r\n content: this.props.content,\r\n isActive: this.props.content === ContentViewManager.getActiveContent(),\r\n };\r\n }\r\n\r\n public override render(): React.ReactNode {\r\n const overlayClassName = classnames(\r\n \"uifw-contentlayout-overlay-div\",\r\n this.state.isActive ? \"uifw-contentlayout-overlay-active\" : \"uifw-contentlayout-overlay-inactive\",\r\n );\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-wrapper\", this.props.className)} style={this.props.style}\r\n onMouseDown={this._handleMouseDown} onMouseMove={UiShowHideManager.handleContentMouseMove} role=\"presentation\"\r\n >\r\n {this.state.content}\r\n <div className={overlayClassName} />\r\n </div>\r\n );\r\n }\r\n\r\n private _handleMouseDown = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n // event.preventDefault();\r\n\r\n ContentViewManager.setActiveContent(this.state.content);\r\n };\r\n\r\n public override componentDidMount() {\r\n ContentViewManager.onActiveContentChangedEvent.addListener(this._handleActiveContentChanged);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n ContentViewManager.onActiveContentChangedEvent.removeListener(this._handleActiveContentChanged);\r\n }\r\n\r\n private _handleActiveContentChanged = (args: ActiveContentChangedEventArgs) => {\r\n const isActive = this.state.content === args.activeContent;\r\n if (this.state.isActive !== isActive) {\r\n this.setState({ isActive });\r\n }\r\n };\r\n\r\n // istanbul ignore next\r\n public override componentDidUpdate(prevProps: ContentWrapperProps, _prevState: ContentWrapperState) {\r\n if (this.props.content !== prevProps.content) {\r\n this.setState((_, props) => ({ content: props.content, isActive: props.content === ContentViewManager.getActiveContent() }));\r\n }\r\n }\r\n}\r\n\r\n/** Properties for the [[SplitContainer]] component */\r\ninterface SplitContainerProps extends CommonProps {\r\n contentA: React.ReactNode;\r\n contentB: React.ReactNode;\r\n orientation: Orientation;\r\n percentage: number;\r\n resizable: boolean;\r\n minSizeTopLeft: number;\r\n minSizeBottomRight: number;\r\n splitterStateId?: string;\r\n onSplitterChange?: (size: number, percentage: number) => void;\r\n}\r\n\r\n/** Split Container class.\r\n */\r\nclass SplitContainer extends React.Component<SplitContainerProps> {\r\n private _containerDiv: HTMLDivElement | null = null;\r\n\r\n constructor(props: SplitContainerProps) {\r\n super(props);\r\n }\r\n\r\n private _onSplitterChange = (size: number): void => {\r\n let percentage = 0;\r\n\r\n // istanbul ignore else\r\n if (this._containerDiv && size > 0) {\r\n if (this.props.orientation === Orientation.Horizontal) {\r\n const height = this._containerDiv.getBoundingClientRect().height;\r\n // istanbul ignore if\r\n if (height > 0)\r\n percentage = size / height;\r\n } else {\r\n const width = this._containerDiv.getBoundingClientRect().width;\r\n // istanbul ignore if\r\n if (width > 0)\r\n percentage = size / width;\r\n }\r\n\r\n // istanbul ignore else\r\n if (this.props.onSplitterChange)\r\n this.props.onSplitterChange(size, percentage);\r\n }\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const orientation = (this.props.orientation === Orientation.Horizontal) ? \"horizontal\" : \"vertical\";\r\n const defaultSize = `${(this.props.percentage * 100).toString()}%`;\r\n const minSizeTopLeft = this.props.minSizeTopLeft;\r\n const minSizeBottomRight = -(this.props.minSizeBottomRight);\r\n\r\n return (\r\n <div ref={(e) => { this._containerDiv = e; }}\r\n className={classnames(\"uifw-contentlayout-full-size\", this.props.className)}\r\n style={this.props.style}\r\n >\r\n <SplitPane split={orientation}\r\n minSize={minSizeTopLeft} maxSize={minSizeBottomRight} defaultSize={defaultSize}\r\n onChange={this._onSplitterChange} allowResize={this.props.resizable}\r\n >\r\n {this.props.contentA}\r\n {this.props.contentB}\r\n </SplitPane>\r\n </div >\r\n );\r\n }\r\n}\r\n\r\n/** Properties for [[SingleContentContainer]] component\r\n */\r\ninterface SingleContentProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** Single Content Container class.\r\n */\r\nclass SingleContentContainer extends React.Component<SingleContentProps> {\r\n\r\n public override render(): React.ReactNode {\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-full-size\", this.props.className)} style={this.props.style} data-testid=\"single-content-container\"\r\n onMouseMove={UiShowHideManager.handleContentMouseMove}\r\n >\r\n {this.props.content}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Common interface for HorizontalSplit and VerticalSplit\r\n */\r\ninterface LayoutSplit {\r\n createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode;\r\n isLocked: boolean;\r\n}\r\n\r\n/** Minimum split size */\r\nconst MIN_SPLIT_SIZE = 6;\r\n\r\n/** Base Split class.\r\n */\r\nclass BaseSplit {\r\n public defaultPercentage: number;\r\n public stateId: string = \"\";\r\n public isLocked: boolean = false;\r\n\r\n constructor(props: LayoutSplitPropsBase) {\r\n this.defaultPercentage = props.percentage;\r\n\r\n // istanbul ignore else\r\n if (props.id)\r\n this.stateId = props.id;\r\n\r\n // istanbul ignore else\r\n if (props.lock)\r\n this.isLocked = props.lock;\r\n }\r\n}\r\n\r\n/** Horizontal Split class.\r\n */\r\nclass HorizontalSplit extends BaseSplit implements LayoutSplit {\r\n private _topIndex: number = -1;\r\n private _bottomIndex: number = -1;\r\n private _topSplit?: LayoutSplit;\r\n private _bottomSplit?: LayoutSplit;\r\n private _props: LayoutHorizontalSplitProps;\r\n private _minSizeTop: number = MIN_SPLIT_SIZE;\r\n private _minSizeBottom: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutHorizontalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.top === \"number\") {\r\n this._topIndex = props.top;\r\n } else {\r\n this._topSplit = ContentLayoutDef.createSplit(props.top);\r\n }\r\n\r\n if (typeof props.bottom === \"number\") {\r\n this._bottomIndex = props.bottom;\r\n } else {\r\n this._bottomSplit = ContentLayoutDef.createSplit(props.bottom);\r\n }\r\n\r\n if (props.minSizeTop)\r\n this._minSizeTop = Math.max(props.minSizeTop, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeBottom)\r\n this._minSizeBottom = Math.max(props.minSizeBottom, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const topContent = (!this._topSplit) ?\r\n <ContentWrapper content={contentNodes[this._topIndex]} /> :\r\n this._topSplit.createContentContainer(contentNodes, resizable);\r\n const bottomContent = (!this._bottomSplit) ?\r\n <ContentWrapper content={contentNodes[this._bottomIndex]} /> :\r\n this._bottomSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={topContent}\r\n contentB={bottomContent}\r\n orientation={Orientation.Horizontal}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeTop}\r\n minSizeBottomRight={this._minSizeBottom}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Vertical Split class.\r\n */\r\nclass VerticalSplit extends BaseSplit implements LayoutSplit {\r\n private _leftIndex: number = -1;\r\n private _rightIndex: number = -1;\r\n private _leftSplit?: LayoutSplit;\r\n private _rightSplit?: LayoutSplit;\r\n private _props: LayoutVerticalSplitProps;\r\n private _minSizeLeft: number = MIN_SPLIT_SIZE;\r\n private _minSizeRight: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutVerticalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.left === \"number\") {\r\n this._leftIndex = props.left;\r\n } else {\r\n this._leftSplit = ContentLayoutDef.createSplit(props.left);\r\n }\r\n\r\n if (typeof props.right === \"number\") {\r\n this._rightIndex = props.right;\r\n } else {\r\n this._rightSplit = ContentLayoutDef.createSplit(props.right);\r\n }\r\n\r\n if (props.minSizeLeft)\r\n this._minSizeLeft = Math.max(props.minSizeLeft, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeRight)\r\n this._minSizeRight = Math.max(props.minSizeRight, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const leftContent = (!this._leftSplit) ?\r\n <ContentWrapper content={contentNodes[this._leftIndex]} /> :\r\n this._leftSplit.createContentContainer(contentNodes, resizable);\r\n const rightContent = (!this._rightSplit) ?\r\n <ContentWrapper content={contentNodes[this._rightIndex]} /> :\r\n this._rightSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={leftContent}\r\n contentB={rightContent}\r\n orientation={Orientation.Vertical}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeLeft}\r\n minSizeBottomRight={this._minSizeRight}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Content Layout Definition class.\r\n * @public\r\n */\r\nexport class ContentLayoutDef {\r\n private _layoutProps: ContentLayoutProps;\r\n private _rootSplit?: LayoutSplit;\r\n\r\n /** ID for this Content Layout */\r\n public id: string = \"\";\r\n /** Description of the layout. */\r\n public description: string = \"\";\r\n constructor(layoutProps: ContentLayoutProps) {\r\n this._layoutProps = layoutProps;\r\n this.id = layoutProps.id;\r\n if (layoutProps.description !== undefined)\r\n this.description = layoutProps.description;\r\n }\r\n\r\n public get rootSplit(): LayoutSplit | undefined { return this._rootSplit; }\r\n\r\n /** Creates [[ContentLayoutProps]] for JSON purposes\r\n * @public\r\n */\r\n public toJSON(): ContentLayoutProps { return this._layoutProps; }\r\n\r\n /** Fill a layout container with React nodes for each content view\r\n */\r\n public fillLayoutContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode | undefined {\r\n this._rootSplit = ContentLayoutDef.createSplit(this._layoutProps);\r\n\r\n if (this.rootSplit) {\r\n return this.rootSplit.createContentContainer(contentNodes, resizable);\r\n }\r\n\r\n if (contentNodes.length > 0)\r\n return <SingleContentContainer content={contentNodes[0]} />;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Gets the indexes of content views used in this Content Layout\r\n */\r\n public getUsedContentIndexes(): number[] {\r\n let allContentIndexes: number[] = [];\r\n\r\n if (!this._layoutProps.horizontalSplit && !this._layoutProps.verticalSplit)\r\n allContentIndexes.push(0);\r\n else {\r\n allContentIndexes = allContentIndexes.concat(this.getHorizontalSplitContentIndexes(this._layoutProps.horizontalSplit));\r\n allContentIndexes = allContentIndexes.concat(this.getVerticalSplitContentIndexes(this._layoutProps.verticalSplit));\r\n }\r\n\r\n const uniqueContentIndexes = [...new Set(allContentIndexes)];\r\n\r\n return uniqueContentIndexes;\r\n }\r\n\r\n private getHorizontalSplitContentIndexes(splitProps?: LayoutHorizontalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.top === \"number\")\r\n contentIndexes.push(splitProps.top);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.top.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.top.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.bottom === \"number\")\r\n contentIndexes.push(splitProps.bottom);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.bottom.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.bottom.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n private getVerticalSplitContentIndexes(splitProps?: LayoutVerticalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.left === \"number\")\r\n contentIndexes.push(splitProps.left);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.left.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.left.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.right === \"number\")\r\n contentIndexes.push(splitProps.right);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.right.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.right.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n /** @internal */\r\n public static createSplit(fragmentDef: LayoutFragmentProps): LayoutSplit | undefined {\r\n if (fragmentDef.horizontalSplit) {\r\n return new HorizontalSplit(fragmentDef.horizontalSplit);\r\n } else if (fragmentDef.verticalSplit) {\r\n return new VerticalSplit(fragmentDef.verticalSplit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** Content Layout Activated Event Args class.\r\n * @public\r\n */\r\nexport interface ContentLayoutActivatedEventArgs {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n}\r\n\r\n/** Content Layout Activated Event class.\r\n * @public\r\n */\r\nexport class ContentLayoutActivatedEvent extends UiEvent<ContentLayoutActivatedEventArgs> { }\r\n\r\n/** State for the [[ContentLayout]].\r\n */\r\ninterface ContentLayoutState {\r\n contentLayoutDef: ContentLayoutDef;\r\n contentContainer?: React.ReactNode;\r\n contentGroupId?: string;\r\n}\r\n\r\n/** Properties for the [[ContentLayout]] React component.\r\n * @public\r\n */\r\nexport interface ContentLayoutComponentProps extends CommonProps {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n isInFooterMode: boolean;\r\n}\r\n\r\n/** Content Layout React component.\r\n * @public\r\n */\r\nexport class ContentLayout extends React.Component<ContentLayoutComponentProps, ContentLayoutState> {\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<ContentLayoutState>;\r\n\r\n constructor(props: ContentLayoutComponentProps) {\r\n super(props);\r\n\r\n const contentLayoutDef = this.props.contentLayout;\r\n const contentGroup = this.props.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.state = {\r\n contentLayoutDef: this.props.contentLayout,\r\n contentContainer,\r\n contentGroupId: this.props.contentGroup.groupId,\r\n };\r\n }\r\n\r\n public override componentDidMount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.addListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.removeListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n private _handleContentLayoutActivated = (args: ContentLayoutActivatedEventArgs) => {\r\n const contentLayoutDef = args.contentLayout;\r\n const contentGroup = args.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.setState({\r\n contentLayoutDef: args.contentLayout,\r\n contentContainer,\r\n contentGroupId: contentGroup.groupId,\r\n });\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n if (this.state.contentContainer) {\r\n return (\r\n <div id=\"uifw-contentlayout-div\" className={this.props.className} style={this.props.style}\r\n key={`${this.state.contentGroupId}-${this.state.contentLayoutDef.id}`}\r\n onMouseDown={this._onMouseDown} onMouseUp={this._onMouseUp} role=\"presentation\"\r\n >\r\n {this.state.contentContainer}\r\n </div>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _onMouseDown = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(true);\r\n };\r\n\r\n private _onMouseUp = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(false);\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"ContentLayout.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\n// cSpell:ignore contentlayout\r\n\r\nimport \"./ContentLayout.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { SplitPane } from \"./split-pane/SplitPane\";\r\nimport { CommonProps, Orientation } from \"@itwin/core-react\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { UiShowHideManager } from \"../utils/UiShowHideManager\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\nimport { ContentLayoutProps, LayoutFragmentProps, LayoutHorizontalSplitProps, LayoutSplitPropsBase, LayoutVerticalSplitProps, UiEvent } from \"@itwin/appui-abstract\";\r\nimport { ActiveContentChangedEventArgs, ContentViewManager } from \"./ContentViewManager\";\r\nimport { useActiveFrontstageDef } from \"../frontstage/Frontstage\";\r\n\r\n/** Properties for [[ContentWrapper]] */\r\ninterface ContentWrapperProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** ContentWrapper React component.\r\n * @internal\r\n */\r\nexport function ContentWrapper(props: ContentWrapperProps) {\r\n const { content } = props;\r\n const [isActive, setIsActive] = React.useState(content === ContentViewManager.getActiveContent());\r\n const activeFrontstageDef = useActiveFrontstageDef();\r\n\r\n // istanbul ignore next\r\n const [hasMultipleContents, setHasMultipleContents] = React.useState(() =>\r\n (activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1)\r\n );\r\n\r\n React.useEffect(() => {\r\n setIsActive(content === ContentViewManager.getActiveContent());\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const handleActiveContentChanged = (args: ActiveContentChangedEventArgs) => {\r\n setIsActive(content === args.activeContent);\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onActiveContentChangedEvent.addListener(handleActiveContentChanged);\r\n }, [activeFrontstageDef, content]);\r\n\r\n const handleMouseDown = React.useCallback(() => {\r\n ContentViewManager.setActiveContent(content);\r\n }, [content]);\r\n\r\n React.useEffect(() => {\r\n const onAvailableContentChanged = () => {\r\n // istanbul ignore next\r\n setHasMultipleContents((activeFrontstageDef && (!!activeFrontstageDef.floatingContentControls?.length) ||\r\n (activeFrontstageDef?.contentGroup?.getContentControls().length ?? 0) > 1));\r\n };\r\n return ContentViewManager.onAvailableContentChangedEvent.addListener(onAvailableContentChanged);\r\n }, [activeFrontstageDef]);\r\n\r\n const overlayClassName = classnames(\r\n \"uifw-contentlayout-overlay-div\",\r\n isActive && hasMultipleContents ? \"uifw-contentlayout-overlay-active\" : \"uifw-contentlayout-overlay-inactive\",\r\n );\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-wrapper\", props.className)} style={props.style}\r\n onMouseDown={handleMouseDown} onMouseMove={UiShowHideManager.handleContentMouseMove} role=\"presentation\"\r\n >\r\n {content}\r\n <div className={overlayClassName} />\r\n </div>\r\n );\r\n}\r\n\r\n/** Properties for the [[SplitContainer]] component */\r\ninterface SplitContainerProps extends CommonProps {\r\n contentA: React.ReactNode;\r\n contentB: React.ReactNode;\r\n orientation: Orientation;\r\n percentage: number;\r\n resizable: boolean;\r\n minSizeTopLeft: number;\r\n minSizeBottomRight: number;\r\n splitterStateId?: string;\r\n onSplitterChange?: (size: number, percentage: number) => void;\r\n}\r\n\r\n/** Split Container class.\r\n */\r\nclass SplitContainer extends React.Component<SplitContainerProps> {\r\n private _containerDiv: HTMLDivElement | null = null;\r\n\r\n constructor(props: SplitContainerProps) {\r\n super(props);\r\n }\r\n\r\n private _onSplitterChange = (size: number): void => {\r\n let percentage = 0;\r\n\r\n // istanbul ignore else\r\n if (this._containerDiv && size > 0) {\r\n if (this.props.orientation === Orientation.Horizontal) {\r\n const height = this._containerDiv.getBoundingClientRect().height;\r\n // istanbul ignore if\r\n if (height > 0)\r\n percentage = size / height;\r\n } else {\r\n const width = this._containerDiv.getBoundingClientRect().width;\r\n // istanbul ignore if\r\n if (width > 0)\r\n percentage = size / width;\r\n }\r\n\r\n // istanbul ignore else\r\n if (this.props.onSplitterChange)\r\n this.props.onSplitterChange(size, percentage);\r\n }\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n const orientation = (this.props.orientation === Orientation.Horizontal) ? \"horizontal\" : \"vertical\";\r\n const defaultSize = `${(this.props.percentage * 100).toString()}%`;\r\n const minSizeTopLeft = this.props.minSizeTopLeft;\r\n const minSizeBottomRight = -(this.props.minSizeBottomRight);\r\n\r\n return (\r\n <div ref={(e) => { this._containerDiv = e; }}\r\n className={classnames(\"uifw-contentlayout-full-size\", this.props.className)}\r\n style={this.props.style}\r\n >\r\n <SplitPane split={orientation}\r\n minSize={minSizeTopLeft} maxSize={minSizeBottomRight} defaultSize={defaultSize}\r\n onChange={this._onSplitterChange} allowResize={this.props.resizable}\r\n >\r\n {this.props.contentA}\r\n {this.props.contentB}\r\n </SplitPane>\r\n </div >\r\n );\r\n }\r\n}\r\n\r\n/** Properties for [[SingleContentContainer]] component\r\n */\r\ninterface SingleContentProps extends CommonProps {\r\n content: React.ReactNode;\r\n}\r\n\r\n/** Single Content Container class.\r\n */\r\nclass SingleContentContainer extends React.Component<SingleContentProps> {\r\n\r\n public override render(): React.ReactNode {\r\n\r\n return (\r\n <div className={classnames(\"uifw-contentlayout-full-size\", this.props.className)} style={this.props.style} data-testid=\"single-content-container\"\r\n onMouseMove={UiShowHideManager.handleContentMouseMove}\r\n >\r\n <ContentWrapper content={this.props.content} style={{ height: \"100%\", position: \"relative\" }} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\n/** Common interface for HorizontalSplit and VerticalSplit\r\n */\r\ninterface LayoutSplit {\r\n createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode;\r\n isLocked: boolean;\r\n}\r\n\r\n/** Minimum split size */\r\nconst MIN_SPLIT_SIZE = 6;\r\n\r\n/** Base Split class.\r\n */\r\nclass BaseSplit {\r\n public defaultPercentage: number;\r\n public stateId: string = \"\";\r\n public isLocked: boolean = false;\r\n\r\n constructor(props: LayoutSplitPropsBase) {\r\n this.defaultPercentage = props.percentage;\r\n\r\n // istanbul ignore else\r\n if (props.id)\r\n this.stateId = props.id;\r\n\r\n // istanbul ignore else\r\n if (props.lock)\r\n this.isLocked = props.lock;\r\n }\r\n}\r\n\r\n/** Horizontal Split class.\r\n */\r\nclass HorizontalSplit extends BaseSplit implements LayoutSplit {\r\n private _topIndex: number = -1;\r\n private _bottomIndex: number = -1;\r\n private _topSplit?: LayoutSplit;\r\n private _bottomSplit?: LayoutSplit;\r\n private _props: LayoutHorizontalSplitProps;\r\n private _minSizeTop: number = MIN_SPLIT_SIZE;\r\n private _minSizeBottom: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutHorizontalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.top === \"number\") {\r\n this._topIndex = props.top;\r\n } else {\r\n this._topSplit = ContentLayoutDef.createSplit(props.top);\r\n }\r\n\r\n if (typeof props.bottom === \"number\") {\r\n this._bottomIndex = props.bottom;\r\n } else {\r\n this._bottomSplit = ContentLayoutDef.createSplit(props.bottom);\r\n }\r\n\r\n if (props.minSizeTop)\r\n this._minSizeTop = Math.max(props.minSizeTop, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeBottom)\r\n this._minSizeBottom = Math.max(props.minSizeBottom, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const topContent = (!this._topSplit) ?\r\n <ContentWrapper content={contentNodes[this._topIndex]} /> :\r\n this._topSplit.createContentContainer(contentNodes, resizable);\r\n const bottomContent = (!this._bottomSplit) ?\r\n <ContentWrapper content={contentNodes[this._bottomIndex]} /> :\r\n this._bottomSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={topContent}\r\n contentB={bottomContent}\r\n orientation={Orientation.Horizontal}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeTop}\r\n minSizeBottomRight={this._minSizeBottom}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Vertical Split class.\r\n */\r\nclass VerticalSplit extends BaseSplit implements LayoutSplit {\r\n private _leftIndex: number = -1;\r\n private _rightIndex: number = -1;\r\n private _leftSplit?: LayoutSplit;\r\n private _rightSplit?: LayoutSplit;\r\n private _props: LayoutVerticalSplitProps;\r\n private _minSizeLeft: number = MIN_SPLIT_SIZE;\r\n private _minSizeRight: number = MIN_SPLIT_SIZE;\r\n\r\n constructor(props: LayoutVerticalSplitProps) {\r\n super(props);\r\n\r\n this._props = props;\r\n\r\n if (typeof props.left === \"number\") {\r\n this._leftIndex = props.left;\r\n } else {\r\n this._leftSplit = ContentLayoutDef.createSplit(props.left);\r\n }\r\n\r\n if (typeof props.right === \"number\") {\r\n this._rightIndex = props.right;\r\n } else {\r\n this._rightSplit = ContentLayoutDef.createSplit(props.right);\r\n }\r\n\r\n if (props.minSizeLeft)\r\n this._minSizeLeft = Math.max(props.minSizeLeft, MIN_SPLIT_SIZE);\r\n\r\n if (props.minSizeRight)\r\n this._minSizeRight = Math.max(props.minSizeRight, MIN_SPLIT_SIZE);\r\n }\r\n\r\n private _handleSplitterChange = (_size: number, percentage: number): void => {\r\n this._props.percentage = percentage;\r\n };\r\n\r\n public createContentContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode {\r\n if (this.isLocked)\r\n resizable = false;\r\n\r\n const leftContent = (!this._leftSplit) ?\r\n <ContentWrapper content={contentNodes[this._leftIndex]} /> :\r\n this._leftSplit.createContentContainer(contentNodes, resizable);\r\n const rightContent = (!this._rightSplit) ?\r\n <ContentWrapper content={contentNodes[this._rightIndex]} /> :\r\n this._rightSplit.createContentContainer(contentNodes, resizable);\r\n\r\n return (\r\n <SplitContainer\r\n contentA={leftContent}\r\n contentB={rightContent}\r\n orientation={Orientation.Vertical}\r\n percentage={this.defaultPercentage}\r\n resizable={resizable}\r\n minSizeTopLeft={this._minSizeLeft}\r\n minSizeBottomRight={this._minSizeRight}\r\n splitterStateId={this.stateId}\r\n onSplitterChange={this._handleSplitterChange}\r\n />\r\n );\r\n }\r\n}\r\n\r\n/** Content Layout Definition class.\r\n * @public\r\n */\r\nexport class ContentLayoutDef {\r\n private _layoutProps: ContentLayoutProps;\r\n private _rootSplit?: LayoutSplit;\r\n\r\n /** ID for this Content Layout */\r\n public id: string = \"\";\r\n /** Description of the layout. */\r\n public description: string = \"\";\r\n constructor(layoutProps: ContentLayoutProps) {\r\n this._layoutProps = layoutProps;\r\n this.id = layoutProps.id;\r\n if (layoutProps.description !== undefined)\r\n this.description = layoutProps.description;\r\n }\r\n\r\n public get rootSplit(): LayoutSplit | undefined { return this._rootSplit; }\r\n\r\n /** Creates [[ContentLayoutProps]] for JSON purposes\r\n * @public\r\n */\r\n public toJSON(): ContentLayoutProps { return this._layoutProps; }\r\n\r\n /** Fill a layout container with React nodes for each content view\r\n */\r\n public fillLayoutContainer(contentNodes: React.ReactNode[], resizable: boolean): React.ReactNode | undefined {\r\n this._rootSplit = ContentLayoutDef.createSplit(this._layoutProps);\r\n\r\n if (this.rootSplit) {\r\n return this.rootSplit.createContentContainer(contentNodes, resizable);\r\n }\r\n\r\n if (contentNodes.length > 0)\r\n return <SingleContentContainer content={contentNodes[0]} />;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Gets the indexes of content views used in this Content Layout\r\n */\r\n public getUsedContentIndexes(): number[] {\r\n let allContentIndexes: number[] = [];\r\n\r\n if (!this._layoutProps.horizontalSplit && !this._layoutProps.verticalSplit)\r\n allContentIndexes.push(0);\r\n else {\r\n allContentIndexes = allContentIndexes.concat(this.getHorizontalSplitContentIndexes(this._layoutProps.horizontalSplit));\r\n allContentIndexes = allContentIndexes.concat(this.getVerticalSplitContentIndexes(this._layoutProps.verticalSplit));\r\n }\r\n\r\n const uniqueContentIndexes = [...new Set(allContentIndexes)];\r\n\r\n return uniqueContentIndexes;\r\n }\r\n\r\n private getHorizontalSplitContentIndexes(splitProps?: LayoutHorizontalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.top === \"number\")\r\n contentIndexes.push(splitProps.top);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.top.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.top.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.bottom === \"number\")\r\n contentIndexes.push(splitProps.bottom);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.bottom.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.bottom.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n private getVerticalSplitContentIndexes(splitProps?: LayoutVerticalSplitProps): number[] {\r\n let contentIndexes: number[] = [];\r\n\r\n if (!splitProps)\r\n return contentIndexes;\r\n\r\n if (typeof splitProps.left === \"number\")\r\n contentIndexes.push(splitProps.left);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.left.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.left.verticalSplit));\r\n }\r\n\r\n if (typeof splitProps.right === \"number\")\r\n contentIndexes.push(splitProps.right);\r\n else {\r\n contentIndexes = contentIndexes.concat(this.getHorizontalSplitContentIndexes(splitProps.right.horizontalSplit));\r\n contentIndexes = contentIndexes.concat(this.getVerticalSplitContentIndexes(splitProps.right.verticalSplit));\r\n }\r\n\r\n return contentIndexes;\r\n }\r\n\r\n /** @internal */\r\n public static createSplit(fragmentDef: LayoutFragmentProps): LayoutSplit | undefined {\r\n if (fragmentDef.horizontalSplit) {\r\n return new HorizontalSplit(fragmentDef.horizontalSplit);\r\n } else if (fragmentDef.verticalSplit) {\r\n return new VerticalSplit(fragmentDef.verticalSplit);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n}\r\n\r\n/** Content Layout Activated Event Args class.\r\n * @public\r\n */\r\nexport interface ContentLayoutActivatedEventArgs {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n}\r\n\r\n/** Content Layout Activated Event class.\r\n * @public\r\n */\r\nexport class ContentLayoutActivatedEvent extends UiEvent<ContentLayoutActivatedEventArgs> { }\r\n\r\n/** State for the [[ContentLayout]].\r\n */\r\ninterface ContentLayoutState {\r\n contentLayoutDef: ContentLayoutDef;\r\n contentContainer?: React.ReactNode;\r\n contentGroupId?: string;\r\n}\r\n\r\n/** Properties for the [[ContentLayout]] React component.\r\n * @public\r\n */\r\nexport interface ContentLayoutComponentProps extends CommonProps {\r\n contentLayout: ContentLayoutDef;\r\n contentGroup: ContentGroup;\r\n isInFooterMode: boolean;\r\n}\r\n\r\n/** Content Layout React component.\r\n * @public\r\n */\r\nexport class ContentLayout extends React.Component<ContentLayoutComponentProps, ContentLayoutState> {\r\n\r\n /** @internal */\r\n public override readonly state: Readonly<ContentLayoutState>;\r\n\r\n constructor(props: ContentLayoutComponentProps) {\r\n super(props);\r\n\r\n const contentLayoutDef = this.props.contentLayout;\r\n const contentGroup = this.props.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.state = {\r\n contentLayoutDef: this.props.contentLayout,\r\n contentContainer,\r\n contentGroupId: this.props.contentGroup.groupId,\r\n };\r\n }\r\n\r\n public override componentDidMount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.addListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n public override componentWillUnmount() {\r\n FrontstageManager.onContentLayoutActivatedEvent.removeListener(this._handleContentLayoutActivated);\r\n }\r\n\r\n private _handleContentLayoutActivated = (args: ContentLayoutActivatedEventArgs) => {\r\n const contentLayoutDef = args.contentLayout;\r\n const contentGroup = args.contentGroup;\r\n\r\n const contentNodes = contentGroup.getContentNodes();\r\n const contentContainer = contentLayoutDef.fillLayoutContainer(contentNodes, true);\r\n\r\n this.setState({\r\n contentLayoutDef: args.contentLayout,\r\n contentContainer,\r\n contentGroupId: contentGroup.groupId,\r\n });\r\n };\r\n\r\n public override render(): React.ReactNode {\r\n if (this.state.contentContainer) {\r\n return (\r\n <div id=\"uifw-contentlayout-div\" className={this.props.className} style={this.props.style}\r\n key={`${this.state.contentGroupId}-${this.state.contentLayoutDef.id}`}\r\n onMouseDown={this._onMouseDown} onMouseUp={this._onMouseUp} role=\"presentation\"\r\n >\r\n {this.state.contentContainer}\r\n </div>\r\n );\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private _onMouseDown = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(true);\r\n };\r\n\r\n private _onMouseUp = (_event: React.MouseEvent<HTMLDivElement>) => {\r\n ContentViewManager.setMouseDown(false);\r\n };\r\n}\r\n"]}
@@ -63,32 +63,6 @@ $resizer-size-large: 14px;
63
63
  }
64
64
  }
65
65
 
66
- .uifw-contentlayout-wrapper {
67
- position: relative;
68
- width: 100%;
69
- height: 100%;
70
-
71
- .uifw-contentlayout-overlay-div {
72
- position: absolute;
73
- top: 0;
74
- left: 0;
75
- width: 100%;
76
- height: 100%;
77
- border-style: solid;
78
- border-width: 2px 0 0 0;
79
- box-sizing: border-box;
80
- pointer-events: none;
81
-
82
- &.uifw-contentlayout-overlay-active {
83
- border-color: $uicore-orange;
84
- }
85
-
86
- &.uifw-contentlayout-overlay-inactive {
87
- border-color: transparent;
88
- }
89
- }
90
- }
91
-
92
66
  .uifw-contentlayout-full-size {
93
67
  @include uicore-full-size;
94
68
  }
@@ -96,4 +70,30 @@ $resizer-size-large: 14px;
96
70
 
97
71
  div.uifw-contentlayout-full-size div.SplitPane div.Pane {
98
72
  overflow: hidden;
99
- }
73
+ }
74
+
75
+ .uifw-contentlayout-wrapper {
76
+ position: relative;
77
+ width: 100%;
78
+ height: 100%;
79
+
80
+ .uifw-contentlayout-overlay-div {
81
+ position: absolute;
82
+ top: 0;
83
+ left: 0;
84
+ width: 100%;
85
+ height: 100%;
86
+ border-style: solid;
87
+ border-width: 4px 0 0 0;
88
+ box-sizing: border-box;
89
+ pointer-events: none;
90
+
91
+ &.uifw-contentlayout-overlay-active {
92
+ border-color: $uicore-orange;
93
+ }
94
+
95
+ &.uifw-contentlayout-overlay-inactive {
96
+ border-color: transparent;
97
+ }
98
+ }
99
+ }
@@ -44,10 +44,17 @@ export declare class ContentViewManager {
44
44
  static setMouseDown(mouseDown: boolean): void;
45
45
  /** Gets the [[ActiveContentChangedEvent]] */
46
46
  static readonly onActiveContentChangedEvent: ActiveContentChangedEvent;
47
+ /** Fires when floating contents are added or removed */
48
+ static readonly onAvailableContentChangedEvent: UiEvent<{
49
+ contentId: string;
50
+ }>;
47
51
  /** Gets the active content as a React.ReactNode. */
48
52
  static getActiveContent(): React.ReactNode | undefined;
53
+ private static getControlFromElement;
49
54
  /** Return the active ContentControl. */
50
55
  static getActiveContentControl(): ContentControl | undefined;
56
+ static addFloatingContentControl(contentControl?: ContentControl): void;
57
+ static dropFloatingContentControl(contentControl?: ContentControl): void;
51
58
  /** Sets the active [[ContentControl]] */
52
59
  static setActiveContent(activeContent?: React.ReactNode, forceEventProcessing?: boolean): void;
53
60
  /** Refreshes the active [[ContentControl]] */
@@ -1 +1 @@
1
- {"version":3,"file":"ContentViewManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,OAAO,CAAC,yBAAyB,CAAC;CAAI;AAEjF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,oCAAoC;IACpC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,OAAO,CAAC,6BAA6B,CAAC;CAAI;AAEzF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAkB;IAEhD,yCAAyC;IACzC,gBAAuB,uBAAuB,wBAA+B;IAE7E,wDAAwD;IACxD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED,oDAAoD;WACtC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKpD,6CAA6C;IAC7C,gBAAuB,2BAA2B,4BAAmC;IAErF,oDAAoD;WACtC,gBAAgB,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;IAI7D,wCAAwC;WAC1B,uBAAuB,IAAI,cAAc,GAAG,SAAS;IAgBnE,yCAAyC;WAC3B,gBAAgB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,UAAQ,GAAG,IAAI;IAyCnG,8CAA8C;WAChC,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS;IAKjE;;;OAGG;WACW,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM9E;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMrF;;;OAGG;WACW,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM3E;;;OAGG;WACW,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;CAMlF"}
1
+ {"version":3,"file":"ContentViewManager.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKlD;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,OAAO,CAAC,yBAAyB,CAAC;CAAI;AAEjF;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,oCAAoC;IACpC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,6CAA6C;IAC7C,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,OAAO,CAAC,6BAA6B,CAAC;CAAI;AAEzF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkB;IAC3C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAkB;IAEhD,yCAAyC;IACzC,gBAAuB,uBAAuB,wBAA+B;IAE7E,wDAAwD;IACxD,WAAkB,WAAW,IAAI,OAAO,CAEvC;IAED,oDAAoD;WACtC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKpD,6CAA6C;IAC7C,gBAAuB,2BAA2B,4BAAmC;IAErF,wDAAwD;IAExD,gBAAuB,8BAA8B;mBAA4B,MAAM;OAAM;IAE7F,oDAAoD;WACtC,gBAAgB,IAAI,KAAK,CAAC,SAAS,GAAG,SAAS;IAI7D,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAiBpC,wCAAwC;WAC1B,uBAAuB,IAAI,cAAc,GAAG,SAAS;WAarD,yBAAyB,CAAC,cAAc,CAAC,EAAE,cAAc;WAQzD,0BAA0B,CAAC,cAAc,CAAC,EAAE,cAAc;IAOxE,yCAAyC;WAC3B,gBAAgB,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,oBAAoB,UAAQ,GAAG,IAAI;IAuCnG,8CAA8C;WAChC,oBAAoB,CAAC,aAAa,EAAE,KAAK,CAAC,SAAS;IAKjE;;;OAGG;WACW,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM9E;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMhF;;;OAGG;WACW,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAMrF;;;OAGG;WACW,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;IAM3E;;;OAGG;WACW,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,SAAS,GAAG,OAAO;CAKlF"}
@@ -37,6 +37,20 @@ export class ContentViewManager {
37
37
  static getActiveContent() {
38
38
  return this._activeContent;
39
39
  }
40
+ static getControlFromElement(content, activeContentGroup, floatingControls) {
41
+ if (floatingControls === null || floatingControls === void 0 ? void 0 : floatingControls.length) {
42
+ const control = floatingControls.find((contentControl) => contentControl.reactNode === content);
43
+ if (control)
44
+ return control;
45
+ }
46
+ // istanbul ignore else
47
+ if (activeContentGroup) {
48
+ const activeContentControl = activeContentGroup.getControlFromElement(content);
49
+ if (activeContentControl)
50
+ return activeContentControl;
51
+ }
52
+ return undefined;
53
+ }
40
54
  /** Return the active ContentControl. */
41
55
  static getActiveContentControl() {
42
56
  let activeContentControl;
@@ -44,13 +58,23 @@ export class ContentViewManager {
44
58
  // istanbul ignore else
45
59
  if (this._activeContent && activeFrontstageDef) {
46
60
  const activeContentGroup = activeFrontstageDef.contentGroup;
47
- // istanbul ignore else
48
- if (activeContentGroup) {
49
- activeContentControl = activeContentGroup.getControlFromElement(this._activeContent);
50
- }
61
+ activeContentControl = this.getControlFromElement(this._activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);
51
62
  }
52
63
  return activeContentControl;
53
64
  }
65
+ static addFloatingContentControl(contentControl) {
66
+ const activeFrontstageDef = FrontstageManager.activeFrontstageDef;
67
+ // istanbul ignore else
68
+ if (activeFrontstageDef && contentControl) {
69
+ activeFrontstageDef.addFloatingContentControl(contentControl);
70
+ }
71
+ }
72
+ static dropFloatingContentControl(contentControl) {
73
+ const activeFrontstageDef = FrontstageManager.activeFrontstageDef;
74
+ // istanbul ignore else
75
+ if (activeFrontstageDef && contentControl)
76
+ activeFrontstageDef.dropFloatingContentControl(contentControl);
77
+ }
54
78
  /** Sets the active [[ContentControl]] */
55
79
  static setActiveContent(activeContent, forceEventProcessing = false) {
56
80
  // istanbul ignore else
@@ -62,25 +86,23 @@ export class ContentViewManager {
62
86
  if (activeFrontstageDef) {
63
87
  const activeContentGroup = activeFrontstageDef.contentGroup;
64
88
  // istanbul ignore else
65
- if (activeContentGroup) {
66
- const oldContentControl = oldContent ? activeContentGroup.getControlFromElement(oldContent) : undefined;
67
- const activeContentControl = activeContentGroup.getControlFromElement(this._activeContent);
68
- // Only call setActiveView if going to or coming from a non-viewport ContentControl
89
+ const oldContentControl = this.getControlFromElement(oldContent, activeContentGroup, activeFrontstageDef.floatingContentControls);
90
+ const activeContentControl = this.getControlFromElement(activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);
91
+ // Only call setActiveView if going to or coming from a non-viewport ContentControl
92
+ // istanbul ignore else
93
+ if (activeContentControl) {
94
+ // istanbul ignore next
95
+ const doSetActiveView = forceEventProcessing || (!activeContentControl.viewport ||
96
+ ( /* istanbul ignore next */oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));
69
97
  // istanbul ignore else
70
- if (activeContentControl) {
71
- // istanbul ignore next
72
- const doSetActiveView = forceEventProcessing || (!activeContentControl.viewport ||
73
- ( /* istanbul ignore next */oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));
74
- // istanbul ignore else
75
- if (doSetActiveView) {
76
- activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);
77
- this.onActiveContentChangedEvent.emit({ activeContent, oldContent });
78
- }
79
- else {
80
- if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {
81
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
82
- IModelApp.viewManager.setSelectedView(activeContentControl.viewport);
83
- }
98
+ if (doSetActiveView) {
99
+ activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);
100
+ this.onActiveContentChangedEvent.emit({ activeContent, oldContent });
101
+ }
102
+ else {
103
+ if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {
104
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
105
+ IModelApp.viewManager.setSelectedView(activeContentControl.viewport);
84
106
  }
85
107
  }
86
108
  }
@@ -152,4 +174,6 @@ ContentViewManager._mouseDown = false;
152
174
  ContentViewManager.onMouseDownChangedEvent = new MouseDownChangedEvent();
153
175
  /** Gets the [[ActiveContentChangedEvent]] */
154
176
  ContentViewManager.onActiveContentChangedEvent = new ActiveContentChangedEvent();
177
+ /** Fires when floating contents are added or removed */
178
+ ContentViewManager.onAvailableContentChangedEvent = new UiEvent();
155
179
  //# sourceMappingURL=ContentViewManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContentViewManager.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\r\nimport { ContentControl } from \"./ContentControl\";\r\nimport { ContentLayoutManager } from \"./ContentLayoutManager\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\n\r\n/** [[MouseDownChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface MouseDownChangedEventArgs {\r\n /** Indicates whether the mouse is down */\r\n mouseDown: boolean;\r\n}\r\n\r\n/** Mouse Down Changed Event class.\r\n * @public\r\n */\r\nexport class MouseDownChangedEvent extends UiEvent<MouseDownChangedEventArgs> { }\r\n\r\n/** [[ActiveContentChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface ActiveContentChangedEventArgs {\r\n /** React node of the old content */\r\n oldContent?: React.ReactNode;\r\n /** React node of the newly active content */\r\n activeContent?: React.ReactNode;\r\n}\r\n\r\n/** Active Content Changed Event class.\r\n * @public\r\n */\r\nexport class ActiveContentChangedEvent extends UiEvent<ActiveContentChangedEventArgs> { }\r\n\r\n/** Content View Manager class.\r\n * @public\r\n */\r\nexport class ContentViewManager {\r\n private static _mouseDown: boolean = false;\r\n private static _activeContent?: React.ReactNode;\r\n\r\n /** Gets the [[MouseDownChangedEvent]] */\r\n public static readonly onMouseDownChangedEvent = new MouseDownChangedEvent();\r\n\r\n /** Determines if the mouse is down in a content view */\r\n public static get isMouseDown(): boolean {\r\n return this._mouseDown;\r\n }\r\n\r\n /** Sets the mouse down status for a content view */\r\n public static setMouseDown(mouseDown: boolean): void {\r\n this._mouseDown = mouseDown;\r\n this.onMouseDownChangedEvent.emit({ mouseDown });\r\n }\r\n\r\n /** Gets the [[ActiveContentChangedEvent]] */\r\n public static readonly onActiveContentChangedEvent = new ActiveContentChangedEvent();\r\n\r\n /** Gets the active content as a React.ReactNode. */\r\n public static getActiveContent(): React.ReactNode | undefined {\r\n return this._activeContent;\r\n }\r\n\r\n /** Return the active ContentControl. */\r\n public static getActiveContentControl(): ContentControl | undefined {\r\n let activeContentControl: ContentControl | undefined;\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (this._activeContent && activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n // istanbul ignore else\r\n if (activeContentGroup) {\r\n activeContentControl = activeContentGroup.getControlFromElement(this._activeContent);\r\n }\r\n }\r\n\r\n return activeContentControl;\r\n }\r\n\r\n /** Sets the active [[ContentControl]] */\r\n public static setActiveContent(activeContent?: React.ReactNode, forceEventProcessing = false): void {\r\n // istanbul ignore else\r\n if (this._activeContent !== activeContent || forceEventProcessing) {\r\n const oldContent = this._activeContent;\r\n this._activeContent = activeContent;\r\n\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n\r\n // istanbul ignore else\r\n if (activeContentGroup) {\r\n const oldContentControl = oldContent ? activeContentGroup.getControlFromElement(oldContent) : undefined;\r\n const activeContentControl = activeContentGroup.getControlFromElement(this._activeContent);\r\n\r\n // Only call setActiveView if going to or coming from a non-viewport ContentControl\r\n // istanbul ignore else\r\n if (activeContentControl) {\r\n // istanbul ignore next\r\n const doSetActiveView =\r\n forceEventProcessing || (!activeContentControl.viewport ||\r\n (/* istanbul ignore next */ oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));\r\n\r\n // istanbul ignore else\r\n if (doSetActiveView) {\r\n activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);\r\n this.onActiveContentChangedEvent.emit({ activeContent, oldContent });\r\n } else {\r\n if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.viewManager.setSelectedView(activeContentControl.viewport);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Refreshes the active [[ContentControl]] */\r\n public static refreshActiveContent(activeContent: React.ReactNode) {\r\n ContentLayoutManager.refreshActiveLayout();\r\n this.setActiveContent(activeContent, true);\r\n }\r\n\r\n /**\r\n * Determines if content displays a Sheet view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSheetView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSheetView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Drawing view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentDrawingView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isDrawingView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Spatial view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSpatialView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSpatialView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Orthographic view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentOrthographicView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isOrthographicView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a 3d view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContent3dView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.is3dView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if viewport supports use of a camera.\r\n * @param content ContentControl to check\r\n */\r\n public static contentSupportsCamera(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.viewSupportsCamera(content.viewport));\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ContentViewManager.js","sourceRoot":"","sources":["../../../../src/appui-react/content/ContentViewManager.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ContentView\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { UiEvent } from \"@itwin/appui-abstract\";\r\nimport { FrontstageManager } from \"../frontstage/FrontstageManager\";\r\nimport { ViewUtilities } from \"../utils/ViewUtilities\";\r\nimport { ContentControl } from \"./ContentControl\";\r\nimport { ContentLayoutManager } from \"./ContentLayoutManager\";\r\nimport { IModelApp } from \"@itwin/core-frontend\";\r\nimport { ContentGroup } from \"./ContentGroup\";\r\n\r\n/** [[MouseDownChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface MouseDownChangedEventArgs {\r\n /** Indicates whether the mouse is down */\r\n mouseDown: boolean;\r\n}\r\n\r\n/** Mouse Down Changed Event class.\r\n * @public\r\n */\r\nexport class MouseDownChangedEvent extends UiEvent<MouseDownChangedEventArgs> { }\r\n\r\n/** [[ActiveContentChangedEvent]] Args interface.\r\n * @public\r\n */\r\nexport interface ActiveContentChangedEventArgs {\r\n /** React node of the old content */\r\n oldContent?: React.ReactNode;\r\n /** React node of the newly active content */\r\n activeContent?: React.ReactNode;\r\n}\r\n\r\n/** Active Content Changed Event class.\r\n * @public\r\n */\r\nexport class ActiveContentChangedEvent extends UiEvent<ActiveContentChangedEventArgs> { }\r\n\r\n/** Content View Manager class.\r\n * @public\r\n */\r\nexport class ContentViewManager {\r\n private static _mouseDown: boolean = false;\r\n private static _activeContent?: React.ReactNode;\r\n\r\n /** Gets the [[MouseDownChangedEvent]] */\r\n public static readonly onMouseDownChangedEvent = new MouseDownChangedEvent();\r\n\r\n /** Determines if the mouse is down in a content view */\r\n public static get isMouseDown(): boolean {\r\n return this._mouseDown;\r\n }\r\n\r\n /** Sets the mouse down status for a content view */\r\n public static setMouseDown(mouseDown: boolean): void {\r\n this._mouseDown = mouseDown;\r\n this.onMouseDownChangedEvent.emit({ mouseDown });\r\n }\r\n\r\n /** Gets the [[ActiveContentChangedEvent]] */\r\n public static readonly onActiveContentChangedEvent = new ActiveContentChangedEvent();\r\n\r\n /** Fires when floating contents are added or removed */\r\n\r\n public static readonly onAvailableContentChangedEvent = new UiEvent<{ contentId: string }>();\r\n\r\n /** Gets the active content as a React.ReactNode. */\r\n public static getActiveContent(): React.ReactNode | undefined {\r\n return this._activeContent;\r\n }\r\n\r\n private static getControlFromElement(content: React.ReactNode, activeContentGroup: ContentGroup | undefined, floatingControls: ContentControl[] | undefined) {\r\n if (floatingControls?.length) {\r\n const control = floatingControls.find((contentControl) => contentControl.reactNode === content);\r\n if (control)\r\n return control;\r\n }\r\n\r\n // istanbul ignore else\r\n if (activeContentGroup) {\r\n const activeContentControl = activeContentGroup.getControlFromElement(content);\r\n if (activeContentControl)\r\n return activeContentControl;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Return the active ContentControl. */\r\n public static getActiveContentControl(): ContentControl | undefined {\r\n let activeContentControl: ContentControl | undefined;\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (this._activeContent && activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n activeContentControl = this.getControlFromElement(this._activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n }\r\n\r\n return activeContentControl;\r\n }\r\n\r\n public static addFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl) {\r\n activeFrontstageDef.addFloatingContentControl(contentControl);\r\n }\r\n }\r\n\r\n public static dropFloatingContentControl(contentControl?: ContentControl) {\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n // istanbul ignore else\r\n if (activeFrontstageDef && contentControl)\r\n activeFrontstageDef.dropFloatingContentControl(contentControl);\r\n }\r\n\r\n /** Sets the active [[ContentControl]] */\r\n public static setActiveContent(activeContent?: React.ReactNode, forceEventProcessing = false): void {\r\n // istanbul ignore else\r\n if (this._activeContent !== activeContent || forceEventProcessing) {\r\n const oldContent = this._activeContent;\r\n this._activeContent = activeContent;\r\n\r\n const activeFrontstageDef = FrontstageManager.activeFrontstageDef;\r\n\r\n // istanbul ignore else\r\n if (activeFrontstageDef) {\r\n const activeContentGroup = activeFrontstageDef.contentGroup;\r\n\r\n // istanbul ignore else\r\n const oldContentControl = this.getControlFromElement(oldContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n const activeContentControl = this.getControlFromElement(activeContent, activeContentGroup, activeFrontstageDef.floatingContentControls);\r\n\r\n // Only call setActiveView if going to or coming from a non-viewport ContentControl\r\n // istanbul ignore else\r\n if (activeContentControl) {\r\n // istanbul ignore next\r\n const doSetActiveView =\r\n forceEventProcessing || (!activeContentControl.viewport ||\r\n (/* istanbul ignore next */ oldContentControl && /* istanbul ignore next */ !oldContentControl.viewport));\r\n\r\n // istanbul ignore else\r\n if (doSetActiveView) {\r\n activeFrontstageDef.setActiveView(activeContentControl, oldContentControl);\r\n this.onActiveContentChangedEvent.emit({ activeContent, oldContent });\r\n } else {\r\n if (activeContentControl.viewport && activeContentControl.viewport !== IModelApp.viewManager.selectedView) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n IModelApp.viewManager.setSelectedView(activeContentControl.viewport);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Refreshes the active [[ContentControl]] */\r\n public static refreshActiveContent(activeContent: React.ReactNode) {\r\n ContentLayoutManager.refreshActiveLayout();\r\n this.setActiveContent(activeContent, true);\r\n }\r\n\r\n /**\r\n * Determines if content displays a Sheet view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSheetView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSheetView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Drawing view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentDrawingView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isDrawingView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Spatial view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentSpatialView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isSpatialView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a Orthographic view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContentOrthographicView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.isOrthographicView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if content displays a 3d view.\r\n * @param content ContentControl to check\r\n */\r\n public static isContent3dView(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.is3dView(content.viewport));\r\n }\r\n\r\n /**\r\n * Determines if viewport supports use of a camera.\r\n * @param content ContentControl to check\r\n */\r\n public static contentSupportsCamera(content: ContentControl | undefined): boolean {\r\n if (!content || !content.viewport)\r\n return false;\r\n return (ViewUtilities.viewSupportsCamera(content.viewport));\r\n }\r\n}\r\n"]}
@@ -0,0 +1,9 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .ViewportContentComponent {
7
+ height: 100%;
8
+ width: 100%;
9
+ }
@@ -0,0 +1,25 @@
1
+ /** @packageDocumentation
2
+ * @module ContentView
3
+ */
4
+ import "./FloatingViewportContent.css";
5
+ import * as React from "react";
6
+ import { ViewState } from "@itwin/core-frontend";
7
+ /**
8
+ * @beta
9
+ */
10
+ export interface FloatingViewportContentProps {
11
+ /** callback used to construct context menu when user right-clicks on canvas/viewport */
12
+ onContextMenu?: (e: React.MouseEvent) => boolean;
13
+ /** viewport/content control uniqueId */
14
+ contentId: string;
15
+ /** The initial view state used to create the viewport */
16
+ initialViewState: ViewState;
17
+ }
18
+ /**
19
+ * FloatingViewportContent component that creates its own [FloatingViewportContentControl].
20
+ * This allows it to be recognized as an "active" content control so that tools operate on this
21
+ * content.
22
+ * @beta
23
+ */
24
+ export declare function FloatingViewportContent(props: FloatingViewportContentProps): JSX.Element;
25
+ //# sourceMappingURL=FloatingViewportContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FloatingViewportContent.d.ts","sourceRoot":"","sources":["../../../../src/appui-react/content/FloatingViewportContent.tsx"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA6B,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAW5E;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,wFAAwF;IACxF,aAAa,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,OAAO,CAAC;IACjD,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,yDAAyD;IACzD,gBAAgB,EAAE,SAAS,CAAC;CAC7B;AAED;;;;;GAKG;AAEH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,eA0D1E"}