@itwin/components-react 4.0.0-dev.10 → 4.0.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 (179) hide show
  1. package/lib/cjs/components-react/datepicker/DateField.scss +1 -1
  2. package/lib/cjs/components-react/datepicker/DatePicker.d.ts.map +1 -1
  3. package/lib/cjs/components-react/datepicker/DatePicker.js +4 -3
  4. package/lib/cjs/components-react/datepicker/DatePicker.js.map +1 -1
  5. package/lib/cjs/components-react/datepicker/DatePicker.scss +9 -9
  6. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  7. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js +2 -1
  8. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  9. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.scss +4 -4
  10. package/lib/cjs/components-react/datepicker/TimeField.scss +4 -4
  11. package/lib/cjs/components-react/editors/DateTimeEditor.js +2 -2
  12. package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
  13. package/lib/cjs/components-react/editors/EditorContainer.d.ts +10 -0
  14. package/lib/cjs/components-react/editors/EditorContainer.d.ts.map +1 -1
  15. package/lib/cjs/components-react/editors/EditorContainer.js +1 -0
  16. package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
  17. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts +1 -0
  18. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.d.ts.map +1 -1
  19. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js +3 -1
  20. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  21. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.scss +16 -57
  22. package/lib/cjs/components-react/editors/IconEditor.scss +1 -1
  23. package/lib/cjs/components-react/editors/NumericInputEditor.d.ts.map +1 -1
  24. package/lib/cjs/components-react/editors/NumericInputEditor.js +1 -1
  25. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  26. package/lib/cjs/components-react/editors/PopupButton.d.ts.map +1 -1
  27. package/lib/cjs/components-react/editors/PopupButton.js +5 -3
  28. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  29. package/lib/cjs/components-react/editors/PopupButton.scss +10 -10
  30. package/lib/cjs/components-react/editors/TextEditor.d.ts.map +1 -1
  31. package/lib/cjs/components-react/editors/TextEditor.js +7 -0
  32. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  33. package/lib/cjs/components-react/editors/TextareaEditor.d.ts +1 -1
  34. package/lib/cjs/components-react/editors/TextareaEditor.js +1 -1
  35. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  36. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  37. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +3 -11
  38. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  39. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -0
  40. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  41. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  42. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js +1 -1
  43. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  44. package/lib/cjs/components-react/filtering/FilteringInput.d.ts.map +1 -1
  45. package/lib/cjs/components-react/filtering/FilteringInput.js +12 -5
  46. package/lib/cjs/components-react/filtering/FilteringInput.js.map +1 -1
  47. package/lib/cjs/components-react/filtering/FilteringInput.scss +2 -11
  48. package/lib/cjs/components-react/filtering/ResultSelector.d.ts.map +1 -1
  49. package/lib/cjs/components-react/filtering/ResultSelector.js +6 -2
  50. package/lib/cjs/components-react/filtering/ResultSelector.js.map +1 -1
  51. package/lib/cjs/components-react/filtering/ResultSelector.scss +3 -8
  52. package/lib/cjs/components-react/iconpicker/IconPickerButton.d.ts.map +1 -1
  53. package/lib/cjs/components-react/iconpicker/IconPickerButton.js +5 -1
  54. package/lib/cjs/components-react/iconpicker/IconPickerButton.js.map +1 -1
  55. package/lib/cjs/components-react/iconpicker/IconPickerButton.scss +5 -5
  56. package/lib/cjs/components-react/inputs/ParsedInput.scss +2 -2
  57. package/lib/cjs/components-react/properties/renderers/PropertyView.scss +3 -3
  58. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts.map +1 -1
  59. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js +3 -1
  60. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
  61. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.scss +2 -2
  62. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.d.ts.map +1 -1
  63. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js +4 -0
  64. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  65. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +8 -7
  66. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js +1 -1
  67. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  68. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +14 -16
  69. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts.map +1 -1
  70. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  71. package/lib/cjs/components-react/table/TableDataProvider.d.ts +2 -1
  72. package/lib/cjs/components-react/table/TableDataProvider.d.ts.map +1 -1
  73. package/lib/cjs/components-react/table/TableDataProvider.js +2 -1
  74. package/lib/cjs/components-react/table/TableDataProvider.js.map +1 -1
  75. package/lib/cjs/components-react/toolbar/Item.scss +20 -51
  76. package/lib/cjs/components-react/toolbar/Items.scss +2 -3
  77. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  78. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js +3 -1
  79. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  80. package/lib/cjs/components-react/toolbar/_variables.scss +4 -4
  81. package/lib/cjs/components-react/toolbar/groupPanel/BackArrow.scss +2 -2
  82. package/lib/cjs/components-react/toolbar/groupPanel/Panel.scss +2 -4
  83. package/lib/cjs/components-react/toolbar/groupPanel/Title.scss +1 -2
  84. package/lib/cjs/components-react/toolbar/groupPanel/_variables.scss +1 -1
  85. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.scss +9 -38
  86. package/lib/cjs/components-react/tree/controlled/TreeModel.js +2 -5
  87. package/lib/cjs/components-react/tree/controlled/TreeModel.js.map +1 -1
  88. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.scss +7 -7
  89. package/lib/cjs/components-react/tree/controlled/component/NodeContent.scss +1 -2
  90. package/lib/esm/components-react/datepicker/DateField.scss +1 -1
  91. package/lib/esm/components-react/datepicker/DatePicker.d.ts.map +1 -1
  92. package/lib/esm/components-react/datepicker/DatePicker.js +4 -3
  93. package/lib/esm/components-react/datepicker/DatePicker.js.map +1 -1
  94. package/lib/esm/components-react/datepicker/DatePicker.scss +9 -9
  95. package/lib/esm/components-react/datepicker/DatePickerPopupButton.d.ts.map +1 -1
  96. package/lib/esm/components-react/datepicker/DatePickerPopupButton.js +3 -2
  97. package/lib/esm/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  98. package/lib/esm/components-react/datepicker/DatePickerPopupButton.scss +4 -4
  99. package/lib/esm/components-react/datepicker/TimeField.scss +4 -4
  100. package/lib/esm/components-react/editors/DateTimeEditor.js +2 -2
  101. package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
  102. package/lib/esm/components-react/editors/EditorContainer.d.ts +10 -0
  103. package/lib/esm/components-react/editors/EditorContainer.d.ts.map +1 -1
  104. package/lib/esm/components-react/editors/EditorContainer.js +1 -0
  105. package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
  106. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts +1 -0
  107. package/lib/esm/components-react/editors/EnumButtonGroupEditor.d.ts.map +1 -1
  108. package/lib/esm/components-react/editors/EnumButtonGroupEditor.js +4 -2
  109. package/lib/esm/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  110. package/lib/esm/components-react/editors/EnumButtonGroupEditor.scss +16 -57
  111. package/lib/esm/components-react/editors/IconEditor.scss +1 -1
  112. package/lib/esm/components-react/editors/NumericInputEditor.d.ts.map +1 -1
  113. package/lib/esm/components-react/editors/NumericInputEditor.js +1 -1
  114. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  115. package/lib/esm/components-react/editors/PopupButton.d.ts.map +1 -1
  116. package/lib/esm/components-react/editors/PopupButton.js +5 -3
  117. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  118. package/lib/esm/components-react/editors/PopupButton.scss +10 -10
  119. package/lib/esm/components-react/editors/TextEditor.d.ts.map +1 -1
  120. package/lib/esm/components-react/editors/TextEditor.js +7 -0
  121. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  122. package/lib/esm/components-react/editors/TextareaEditor.d.ts +1 -1
  123. package/lib/esm/components-react/editors/TextareaEditor.js +1 -1
  124. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  125. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +0 -6
  126. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +3 -11
  127. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.d.ts.map +1 -1
  128. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js +1 -0
  129. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  130. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.d.ts.map +1 -1
  131. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js +1 -1
  132. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  133. package/lib/esm/components-react/filtering/FilteringInput.d.ts.map +1 -1
  134. package/lib/esm/components-react/filtering/FilteringInput.js +13 -6
  135. package/lib/esm/components-react/filtering/FilteringInput.js.map +1 -1
  136. package/lib/esm/components-react/filtering/FilteringInput.scss +2 -11
  137. package/lib/esm/components-react/filtering/ResultSelector.d.ts.map +1 -1
  138. package/lib/esm/components-react/filtering/ResultSelector.js +6 -2
  139. package/lib/esm/components-react/filtering/ResultSelector.js.map +1 -1
  140. package/lib/esm/components-react/filtering/ResultSelector.scss +3 -8
  141. package/lib/esm/components-react/iconpicker/IconPickerButton.d.ts.map +1 -1
  142. package/lib/esm/components-react/iconpicker/IconPickerButton.js +5 -1
  143. package/lib/esm/components-react/iconpicker/IconPickerButton.js.map +1 -1
  144. package/lib/esm/components-react/iconpicker/IconPickerButton.scss +5 -5
  145. package/lib/esm/components-react/inputs/ParsedInput.scss +2 -2
  146. package/lib/esm/components-react/properties/renderers/PropertyView.scss +3 -3
  147. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.d.ts.map +1 -1
  148. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js +3 -1
  149. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
  150. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.scss +2 -2
  151. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.d.ts.map +1 -1
  152. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js +4 -0
  153. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  154. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +8 -7
  155. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js +1 -1
  156. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  157. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +14 -16
  158. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.d.ts.map +1 -1
  159. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  160. package/lib/esm/components-react/table/TableDataProvider.d.ts +2 -1
  161. package/lib/esm/components-react/table/TableDataProvider.d.ts.map +1 -1
  162. package/lib/esm/components-react/table/TableDataProvider.js +2 -1
  163. package/lib/esm/components-react/table/TableDataProvider.js.map +1 -1
  164. package/lib/esm/components-react/toolbar/Item.scss +20 -51
  165. package/lib/esm/components-react/toolbar/Items.scss +2 -3
  166. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.d.ts.map +1 -1
  167. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js +4 -2
  168. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  169. package/lib/esm/components-react/toolbar/_variables.scss +4 -4
  170. package/lib/esm/components-react/toolbar/groupPanel/BackArrow.scss +2 -2
  171. package/lib/esm/components-react/toolbar/groupPanel/Panel.scss +2 -4
  172. package/lib/esm/components-react/toolbar/groupPanel/Title.scss +1 -2
  173. package/lib/esm/components-react/toolbar/groupPanel/_variables.scss +1 -1
  174. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.scss +9 -38
  175. package/lib/esm/components-react/tree/controlled/TreeModel.js +2 -2
  176. package/lib/esm/components-react/tree/controlled/TreeModel.js.map +1 -1
  177. package/lib/esm/components-react/tree/controlled/component/ControlledTree.scss +7 -7
  178. package/lib/esm/components-react/tree/controlled/component/NodeContent.scss +1 -2
  179. package/package.json +16 -32
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarWithOverflow.js","sourceRoot":"","sources":["../../../../src/components-react/toolbar/ToolbarWithOverflow.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 Toolbar\r\n */\r\n\r\nimport \"./Toolbar.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport {\r\n ActionButton, CommonToolbarItem, ConditionalBooleanValue, ConditionalStringValue, CustomButtonDefinition,\r\n GroupButton, OnItemExecutedFunc, ToolbarItemUtilities,\r\n} from \"@itwin/appui-abstract\";\r\nimport { BadgeUtilities, CommonProps, IconHelper, NoChildrenProps, useRefs } from \"@itwin/core-react\";\r\nimport { ToolbarButtonItem } from \"./Item\";\r\nimport { ToolbarItems } from \"./Items\";\r\nimport { ItemWrapper, useResizeObserverSingleDimension } from \"./ItemWrapper\";\r\nimport { ToolbarOverflowButton } from \"./Overflow\";\r\nimport { ToolbarOverflowPanel } from \"./OverflowPanel\";\r\nimport { PopupItem } from \"./PopupItem\";\r\nimport { PopupItemsPanel } from \"./PopupItemsPanel\";\r\nimport { PopupItemWithDrag } from \"./PopupItemWithDrag\";\r\nimport { Direction, DirectionHelpers, OrthogonalDirection, OrthogonalDirectionHelpers } from \"./utilities/Direction\";\r\nimport { UiComponents } from \"../UiComponents\";\r\n\r\n/** Describes the data needed to insert a custom `React` button into an ToolbarWithOverflow.\r\n * @public\r\n */\r\nexport interface CustomToolbarItem extends CustomButtonDefinition {\r\n /** defines the content to display in popup panel */\r\n panelContentNode?: React.ReactNode;\r\n /** If true the popup panel is mounted once and unmounted when button is unmounted. If false the\r\n * content node is unmounted each time the popup is closed. */\r\n keepContentsLoaded?: boolean;\r\n}\r\n\r\n/**\r\n * Context used by Toolbar items to know if popup panel should be hidden - via AutoHide.\r\n * @public\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarPopupAutoHideContext = React.createContext<boolean>(false);\r\n\r\n/**\r\n * React hook used to retrieve the ToolbarPopupAutoHideContext.\r\n * @public\r\n */\r\nexport function useToolbarPopupAutoHideContext() {\r\n return React.useContext(ToolbarPopupAutoHideContext);\r\n}\r\n\r\n/** Describes toolbar item.\r\n * @public\r\n */\r\nexport type ToolbarItem = ActionButton | GroupButton | CustomToolbarItem;\r\n\r\n/** CustomToolbarItem type guard.\r\n * @internal\r\n */\r\nexport function isCustomToolbarItem(item: ToolbarItem): item is CustomToolbarItem {\r\n return !!(item as CustomToolbarItem).isCustom && (\"panelContentNode\" in item);\r\n}\r\n\r\n/** @internal */\r\nexport const getToolbarDirection = (expandsTo: Direction): OrthogonalDirection => {\r\n const orthogonalDirection = DirectionHelpers.getOrthogonalDirection(expandsTo);\r\n return OrthogonalDirectionHelpers.inverse(orthogonalDirection);\r\n};\r\n\r\n/** Available alignment modes of [[ToolbarWithOverflow]] panels.\r\n * @public\r\n */\r\nexport enum ToolbarPanelAlignment {\r\n Start,\r\n End,\r\n}\r\n\r\n/** Enumeration of Toolbar Opacity setting.\r\n * @public\r\n */\r\nexport enum ToolbarOpacitySetting {\r\n /** Use the default background, box-shadow opacity and backdrop-filter blur */\r\n Defaults,\r\n /** Alter the opacity from transparent to the defaults based on mouse proximity */\r\n Proximity,\r\n /** Use a transparent background, box-shadow opacity and backdrop-filter blur */\r\n Transparent,\r\n}\r\n\r\n/** Helpers for [[ToolbarPanelAlignment]].\r\n * @internal\r\n */\r\nexport class ToolbarPanelAlignmentHelpers {\r\n /** Class name of [[ToolbarPanelAlignment.Start]] */\r\n public static readonly START_CLASS_NAME = \"components-panel-alignment-start\";\r\n /** Class name of [[ToolbarPanelAlignment.End]] */\r\n public static readonly END_CLASS_NAME = \"components-panel-alignment-end\";\r\n\r\n /** @returns Class name of specified [[ToolbarPanelAlignment]] */\r\n public static getCssClassName(panelAlignment: ToolbarPanelAlignment): string {\r\n switch (panelAlignment) {\r\n case ToolbarPanelAlignment.Start:\r\n return ToolbarPanelAlignmentHelpers.START_CLASS_NAME;\r\n case ToolbarPanelAlignment.End:\r\n return ToolbarPanelAlignmentHelpers.END_CLASS_NAME;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface ToolbarOverflowContextProps {\r\n readonly expandsTo: Direction;\r\n readonly direction: OrthogonalDirection;\r\n readonly overflowExpandsTo: Direction;\r\n readonly overflowDirection: OrthogonalDirection;\r\n readonly panelAlignment: ToolbarPanelAlignment;\r\n readonly useDragInteraction: boolean;\r\n readonly toolbarOpacitySetting: ToolbarOpacitySetting;\r\n readonly openPopupCount: number;\r\n readonly onPopupPanelOpenClose: (isOpening: boolean) => void;\r\n readonly overflowDisplayActive: boolean;\r\n readonly onItemExecuted: OnItemExecutedFunc;\r\n readonly onKeyDown: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\n/**\r\n * Context used by Toolbar component to provide Direction to child components.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarWithOverflowDirectionContext = React.createContext<ToolbarOverflowContextProps>({\r\n expandsTo: Direction.Bottom,\r\n direction: OrthogonalDirection.Horizontal,\r\n overflowExpandsTo: Direction.Right,\r\n overflowDirection: OrthogonalDirection.Vertical,\r\n panelAlignment: ToolbarPanelAlignment.Start,\r\n useDragInteraction: false,\r\n toolbarOpacitySetting: ToolbarOpacitySetting.Proximity,\r\n openPopupCount: 0,\r\n onPopupPanelOpenClose: /* istanbul ignore next */ (_isOpening: boolean) => { },\r\n overflowDisplayActive: false,\r\n onItemExecuted: /* istanbul ignore next */ (_item: any) => void {},\r\n onKeyDown: /* istanbul ignore next */ (_e: React.KeyboardEvent) => void {},\r\n});\r\n\r\n/** @internal */\r\nfunction CustomItem({ item, addGroupSeparator }: { item: CustomToolbarItem, addGroupSeparator: boolean }) {\r\n const { useDragInteraction } = useToolbarWithOverflowDirectionContext();\r\n const icon = React.useMemo(() => (item.icon &&\r\n IconHelper.getIconReactNode(item.icon, item.internalData)) || /* istanbul ignore next */\r\n <i className=\"icon icon-placeholder\" />, [item.icon, item.internalData]);\r\n const isDisabled = React.useMemo(() => ConditionalBooleanValue.getValue(item.isDisabled), [item.isDisabled]);\r\n const title = React.useMemo(() => /* istanbul ignore next */ ConditionalStringValue.getValue(item.label) ?? item.id, [item.id, item.label]);\r\n const badge = React.useMemo(() => BadgeUtilities.getComponentForBadgeType(item.badgeType), [item.badgeType]);\r\n\r\n return <PopupItem\r\n key={item.id}\r\n itemId={item.id}\r\n icon={icon}\r\n isDisabled={isDisabled}\r\n title={title}\r\n panel={item.panelContentNode}\r\n hideIndicator={useDragInteraction}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n keepContentsMounted={item.keepContentsLoaded}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nfunction GroupPopupItem({ item, addGroupSeparator }: { item: GroupButton, addGroupSeparator: boolean }) {\r\n const { useDragInteraction } = useToolbarWithOverflowDirectionContext();\r\n const title = ConditionalStringValue.getValue(item.label)!;\r\n const badge = BadgeUtilities.getComponentForBadgeType(item.badgeType);\r\n const panel = React.useMemo(() => <PopupItemsPanel groupItem={item} activateOnPointerUp={false} />, [item]);\r\n if (useDragInteraction) {\r\n return <PopupItemWithDrag\r\n key={item.id}\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n groupItem={item}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n }\r\n return <PopupItem\r\n key={item.id}\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n panel={panel}\r\n badge={badge}\r\n hideIndicator={useDragInteraction}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nfunction ActionItem({ item, addGroupSeparator }: { item: ActionButton, addGroupSeparator: boolean }) {\r\n const title = ConditionalStringValue.getValue(item.label)!;\r\n const badge = BadgeUtilities.getComponentForBadgeType(item.badgeType);\r\n const { onItemExecuted } = useToolbarWithOverflowDirectionContext();\r\n const onExecute = React.useCallback(() => {\r\n item.execute();\r\n onItemExecuted(item);\r\n }, [item, onItemExecuted]);\r\n\r\n return <ToolbarButtonItem\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n key={item.id}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isActive={item.isActive}\r\n onClick={onExecute}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nexport function ToolbarItemComponent({ item, addGroupSeparator }: { item: ToolbarItem, addGroupSeparator: boolean }) {\r\n if (ToolbarItemUtilities.isGroupButton(item)) {\r\n return <GroupPopupItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n } else if (isCustomToolbarItem(item)) {\r\n return <CustomItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n } else {\r\n // istanbul ignore else\r\n if (ToolbarItemUtilities.isActionButton(item)) {\r\n return <ActionItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n }\r\n }\r\n // istanbul ignore next\r\n return null;\r\n}\r\n\r\n/** @internal */\r\nexport function useToolbarWithOverflowDirectionContext() {\r\n return React.useContext(ToolbarWithOverflowDirectionContext);\r\n}\r\n\r\nfunction OverflowItemsContainer(p: { children: React.ReactNode }) {\r\n return <>{p.children}</>;\r\n}\r\n\r\nfunction getItemWrapperClass(child: React.ReactNode) {\r\n // istanbul ignore else\r\n if (React.isValidElement(child)) {\r\n if (child.props && child.props.addGroupSeparator)\r\n return \"components-toolbar-button-add-gap-before\";\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Properties of [[ToolbarWithOverflow]] component.\r\n * @public\r\n */\r\nexport interface ToolbarWithOverflowProps extends CommonProps, NoChildrenProps {\r\n /** Describes to which direction the popup panels are expanded. Defaults to: [[Direction.Bottom]] */\r\n expandsTo?: Direction;\r\n /** Describes to which direction the overflow popup panels are expanded. Defaults to: [[Direction.Right]] */\r\n overflowExpandsTo?: Direction;\r\n /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */\r\n items: CommonToolbarItem[];\r\n /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */\r\n panelAlignment?: ToolbarPanelAlignment;\r\n /** Use Drag Interaction to open popups with nest action buttons */\r\n useDragInteraction?: boolean;\r\n /** Determines whether to use mouse proximity to alter the opacity of the toolbar */\r\n toolbarOpacitySetting?: ToolbarOpacitySetting;\r\n /** Optional function to call on any item execution */\r\n onItemExecuted?: OnItemExecutedFunc;\r\n /** Optional function to call on any KeyDown events processed by toolbar */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\n/** Component that displays tool settings as a bar across the top of the content view.\r\n * @public\r\n */\r\nexport function ToolbarWithOverflow(props: ToolbarWithOverflowProps) {\r\n const expandsTo = props.expandsTo ? props.expandsTo : Direction.Bottom;\r\n const useDragInteraction = !!props.useDragInteraction;\r\n const panelAlignment = props.panelAlignment ? props.panelAlignment : ToolbarPanelAlignment.Start;\r\n const useHeight = (expandsTo === Direction.Right || expandsTo === Direction.Left);\r\n const [isOverflowPanelOpen, setIsOverflowPanelOpen] = React.useState(false);\r\n const [popupPanelCount, setPopupPanelCount] = React.useState(0);\r\n const overflowTitle = React.useRef(UiComponents.translate(\"toolbar.overflow\"));\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n });\r\n const handlePopupPanelOpenClose = React.useCallback((isOpening: boolean) => {\r\n // use setTimeout to avoid warning about setting state in ToolbarWithOverflow from render method of PopupItem/PopupItemWithDrag\r\n setTimeout(() => {\r\n // istanbul ignore next\r\n if (!isMounted.current)\r\n return;\r\n setPopupPanelCount((prev) => {\r\n const nextCount = isOpening ? (prev + 1) : (prev - 1);\r\n // eslint-disable-next-line no-console\r\n // console.log(`new popup count = ${nextCount}`);\r\n return nextCount < 0 ? /* istanbul ignore next */ 0 : nextCount;\r\n });\r\n });\r\n }, []);\r\n\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n const width = React.useRef<number | undefined>(undefined);\r\n const availableNodes = React.useMemo<React.ReactNode>(() => {\r\n return props.items.map((item, index) => {\r\n let addGroupSeparator = false;\r\n if (index > 0)\r\n addGroupSeparator = item.groupPriority !== props.items[index - 1].groupPriority;\r\n return (\r\n <ToolbarItemComponent\r\n key={item.id}\r\n item={item}\r\n addGroupSeparator={!!addGroupSeparator}\r\n />\r\n );\r\n });\r\n }, [props.items]);\r\n /* overflowItemKeys - keys of items to show in overflow panel\r\n * handleContainerResize - handler called when container <div> is resized.\r\n * handleOverflowResize - handler called when determining size of overflow indicator/button.\r\n * handleEntryResize - handler called when determining size of each item/button. */\r\n const [overflowItemKeys, handleContainerResize, handleOverflowResize, handleEntryResize] = useOverflow(availableNodes, panelAlignment === ToolbarPanelAlignment.End);\r\n // handler called by ResizeObserver\r\n const handleResize = React.useCallback((w: number) => {\r\n width.current = w;\r\n width.current !== undefined && handleContainerResize(width.current);\r\n }, [handleContainerResize]);\r\n const resizeObserverRef = useResizeObserverSingleDimension(handleResize, useHeight);\r\n const handleClick = React.useCallback(() => {\r\n setIsOverflowPanelOpen((prev) => !prev);\r\n }, []);\r\n // istanbul ignore next - NEEDSWORK add complete tests\r\n const handleClose = React.useCallback(() => {\r\n setIsOverflowPanelOpen(false);\r\n }, []);\r\n\r\n const refs = useRefs(ref, resizeObserverRef);\r\n const availableItems = React.Children.toArray(availableNodes);\r\n const displayedItems = availableItems.reduce<Array<[string, React.ReactNode]>>((acc, child, index) => {\r\n const key = getChildKey(child, index);\r\n if (!overflowItemKeys || overflowItemKeys.indexOf(key) < 0) {\r\n acc.push([key, child]);\r\n }\r\n return acc;\r\n }, []);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const overflowPanelItems = overflowItemKeys ? availableItems.reduce<Array<[string, React.ReactNode]>>((acc, child, index) => {\r\n const key = getChildKey(child, index);\r\n if (overflowItemKeys.indexOf(key) >= 0) {\r\n acc.push([key, child]);\r\n }\r\n return acc;\r\n }, []) : [];\r\n\r\n const direction = getToolbarDirection(expandsTo);\r\n const overflowExpandsTo = undefined !== props.overflowExpandsTo ? props.overflowExpandsTo : Direction.Right;\r\n const addOverflowButton = React.useCallback((atStart: boolean) => {\r\n const overflowItems = !!atStart ? overflowPanelItems.reverse() : overflowPanelItems;\r\n return (<ToolbarItemContext.Provider\r\n value={{\r\n hasOverflow: false,\r\n useHeight,\r\n onResize: handleOverflowResize,\r\n }}\r\n >\r\n <ToolbarOverflowButton\r\n expandsTo={expandsTo}\r\n onClick={handleClick}\r\n onClose={handleClose}\r\n open={overflowItems.length > 0 && isOverflowPanelOpen}\r\n panelNode={\r\n <ToolbarOverflowPanel>\r\n <OverflowItemsContainer>\r\n {overflowItems.map(([key, child]) => {\r\n return (\r\n <ToolbarItemContext.Provider\r\n key={key}\r\n value={{\r\n hasOverflow: true,\r\n useHeight,\r\n onResize: () => { },\r\n }}\r\n >\r\n {<ItemWrapper className={getItemWrapperClass(child)}>{child}</ItemWrapper>}\r\n </ToolbarItemContext.Provider>\r\n );\r\n })}\r\n </OverflowItemsContainer>\r\n </ToolbarOverflowPanel>\r\n }\r\n title={overflowTitle.current}\r\n />\r\n </ToolbarItemContext.Provider>);\r\n }, [handleClick, handleClose, handleOverflowResize, isOverflowPanelOpen, expandsTo, overflowPanelItems, useHeight]);\r\n\r\n const className = classnames(\r\n \"components-toolbar-overflow-sizer\",\r\n OrthogonalDirectionHelpers.getCssClassName(direction),\r\n props.className);\r\n\r\n const showOverflowAtStart = (direction === OrthogonalDirection.Horizontal) && (panelAlignment === ToolbarPanelAlignment.End);\r\n /* The ItemWrapper is used to wrap the <Item> <ExpandableItem> with a <div> that specifies a ref that the sizing logic uses to determine the\r\n size of the item. */\r\n return (\r\n <ToolbarWithOverflowDirectionContext.Provider value={\r\n {\r\n expandsTo, direction, overflowExpandsTo, panelAlignment, useDragInteraction,\r\n toolbarOpacitySetting: undefined !== props.toolbarOpacitySetting ? props.toolbarOpacitySetting : ToolbarOpacitySetting.Proximity,\r\n overflowDirection: direction === OrthogonalDirection.Horizontal ? OrthogonalDirection.Vertical : OrthogonalDirection.Horizontal,\r\n openPopupCount: popupPanelCount,\r\n onPopupPanelOpenClose: handlePopupPanelOpenClose,\r\n overflowDisplayActive: overflowPanelItems.length > 0 && isOverflowPanelOpen,\r\n onItemExecuted: props.onItemExecuted ? props.onItemExecuted : () => { },\r\n onKeyDown: props.onKeyDown ? props.onKeyDown : /* istanbul ignore next */ (_e: React.KeyboardEvent) => { },\r\n }\r\n }>\r\n {(availableItems.length > 0) &&\r\n <div\r\n className={className}\r\n ref={refs}\r\n style={props.style}\r\n onKeyDown={props.onKeyDown}\r\n role=\"presentation\"\r\n >\r\n <ToolbarItems\r\n className=\"components-items\"\r\n direction={direction}\r\n >\r\n {(!overflowItemKeys || overflowItemKeys.length > 0) && showOverflowAtStart && addOverflowButton(true)}\r\n {displayedItems.map(([key, child]) => {\r\n const onEntryResize = handleEntryResize(key);\r\n return (\r\n <ToolbarItemContext.Provider\r\n key={key}\r\n value={{\r\n hasOverflow: false,\r\n useHeight,\r\n onResize: onEntryResize,\r\n }}\r\n >\r\n {<ItemWrapper className={getItemWrapperClass(child)}>{child}</ItemWrapper>}\r\n </ToolbarItemContext.Provider>\r\n );\r\n })}\r\n {(!overflowItemKeys || overflowItemKeys.length > 0) && !showOverflowAtStart && addOverflowButton(false)}\r\n\r\n </ToolbarItems>\r\n </div>\r\n }\r\n </ToolbarWithOverflowDirectionContext.Provider >\r\n );\r\n}\r\n\r\n/** Returns key of a child. Must be used along with React.Children.toArray to preserve the semantics of availableItems.\r\n * @internal\r\n */\r\nfunction getChildKey(child: React.ReactNode, index: number) {\r\n // istanbul ignore else\r\n if (React.isValidElement(child) && child.key !== null) {\r\n return child.key.toString();\r\n }\r\n // istanbul ignore next\r\n return index.toString();\r\n}\r\n\r\n/** Returns a subset of toolbar item entry keys that exceed given width and should be overflowItemKeys.\r\n * @internal\r\n */\r\nfunction determineOverflowItems(size: number, entries: ReadonlyArray<readonly [string, number]>, overflowButtonSize: number, overflowButtonAtStart: boolean): string[] {\r\n let toolbarSize = 0;\r\n const buttonPadding = 2;\r\n if (overflowButtonAtStart && entries.length > 0) {\r\n let i = entries.length - 1;\r\n for (; i >= 0; i--) {\r\n const w = entries[i][1] + buttonPadding;\r\n const newSettingsWidth = toolbarSize + w;\r\n if (newSettingsWidth > size) {\r\n toolbarSize += (overflowButtonSize + buttonPadding);\r\n break;\r\n }\r\n toolbarSize = newSettingsWidth;\r\n }\r\n if (i >= 0) {\r\n let j = i + 1;\r\n for (; j < entries.length; j++) {\r\n if (toolbarSize <= size)\r\n break;\r\n const w = entries[j][1] + buttonPadding;\r\n toolbarSize -= w;\r\n }\r\n\r\n return entries.slice(0, j).map((e) => e[0]);\r\n } else {\r\n return [];\r\n }\r\n } else {\r\n let i = 0;\r\n for (; i < entries.length; i++) {\r\n const w = entries[i][1] + buttonPadding;\r\n const newSettingsWidth = toolbarSize + w;\r\n if (newSettingsWidth > size) {\r\n toolbarSize += (overflowButtonSize + buttonPadding);\r\n break;\r\n }\r\n toolbarSize = newSettingsWidth;\r\n }\r\n let j = i;\r\n for (; j > 0; j--) {\r\n if (toolbarSize <= size)\r\n break;\r\n const w = entries[j][1] + buttonPadding;\r\n toolbarSize -= w;\r\n }\r\n\r\n return entries.slice(j).map((e) => e[0]);\r\n }\r\n}\r\n\r\n/** Hook that returns a list of overflowItemKeys availableItems.\r\n * @internal\r\n */\r\nfunction useOverflow(availableItems: React.ReactNode, overflowButtonAtStart: boolean): [\r\n ReadonlyArray<string> | undefined,\r\n (size: number) => void,\r\n (size: number) => void,\r\n (key: string) => (size: number) => void,\r\n] {\r\n const [overflowItemKeys, setOverflown] = React.useState<ReadonlyArray<string>>();\r\n const itemSizes = React.useRef(new Map<string, number | undefined>());\r\n const size = React.useRef<number | undefined>(undefined);\r\n const overflowButtonSize = React.useRef<number | undefined>(undefined);\r\n\r\n const calculateOverflow = React.useCallback(() => {\r\n const sizes = verifiedMapEntries(itemSizes.current);\r\n if (size.current === undefined ||\r\n sizes === undefined ||\r\n overflowButtonSize.current === undefined) {\r\n setOverflown(undefined);\r\n return;\r\n }\r\n\r\n // Calculate overflow.\r\n const newOverflown = determineOverflowItems(size.current, [...sizes.entries()], overflowButtonSize.current, overflowButtonAtStart);\r\n setOverflown((prevOverflown) => {\r\n return eql(prevOverflown, newOverflown) ? prevOverflown : newOverflown;\r\n });\r\n }, [overflowButtonAtStart]);\r\n\r\n React.useLayoutEffect(() => {\r\n const newEntryWidths = new Map<string, number | undefined>();\r\n const array = React.Children.toArray(availableItems);\r\n for (let i = 0; i < array.length; i++) {\r\n const child = array[i];\r\n const key = getChildKey(child, i);\r\n const lastW = itemSizes.current.get(key);\r\n newEntryWidths.set(key, lastW);\r\n }\r\n itemSizes.current = newEntryWidths;\r\n calculateOverflow();\r\n }, [availableItems, calculateOverflow]);\r\n\r\n const handleContainerResize = React.useCallback((w: number) => {\r\n const calculate = size.current !== w;\r\n size.current = w;\r\n calculate && calculateOverflow();\r\n }, [calculateOverflow]);\r\n\r\n const handleOverflowResize = React.useCallback((w: number) => {\r\n const calculate = overflowButtonSize.current !== w;\r\n overflowButtonSize.current = w;\r\n calculate && calculateOverflow();\r\n }, [calculateOverflow]);\r\n\r\n const handleEntryResize = React.useCallback((key: string) => (w: number) => {\r\n const oldW = itemSizes.current.get(key);\r\n if (oldW !== w) {\r\n itemSizes.current.set(key, w);\r\n calculateOverflow();\r\n }\r\n }, [calculateOverflow]);\r\n\r\n return [overflowItemKeys, handleContainerResize, handleOverflowResize, handleEntryResize];\r\n}\r\n\r\n/** Interface toolbars use to define context for its items.\r\n * @internal\r\n */\r\nexport interface ToolbarItemContextArgs {\r\n readonly hasOverflow: boolean;\r\n readonly useHeight: boolean;\r\n readonly onResize: (w: number) => void;\r\n}\r\n\r\n/** Interface toolbars use to define context for its items.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarItemContext = React.createContext<ToolbarItemContextArgs>(null!);\r\n\r\n/** @internal */\r\nexport function useToolItemEntryContext() {\r\n return React.useContext(ToolbarItemContext);\r\n}\r\n\r\nfunction verifiedMapEntries<T>(map: Map<string, T | undefined>) {\r\n for (const [, val] of map) {\r\n // istanbul ignore next during unit testing\r\n if (val === undefined)\r\n return undefined;\r\n }\r\n return map as Map<string, T>;\r\n}\r\n\r\nfunction eql(prev: readonly string[] | undefined, value: readonly string[]) {\r\n if (!prev)\r\n return false;\r\n // istanbul ignore next\r\n if (prev.length !== value.length)\r\n return false;\r\n for (let i = 0; i < prev.length; i++) {\r\n const p = prev[i];\r\n const v = value[i];\r\n // istanbul ignore next\r\n if (p !== v)\r\n return false;\r\n }\r\n return true;\r\n}\r\n"]}
1
+ {"version":3,"file":"ToolbarWithOverflow.js","sourceRoot":"","sources":["../../../../src/components-react/toolbar/ToolbarWithOverflow.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 Toolbar\r\n */\r\n\r\nimport \"./Toolbar.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport {\r\n ActionButton, CommonToolbarItem, ConditionalBooleanValue, ConditionalStringValue, CustomButtonDefinition,\r\n GroupButton, OnItemExecutedFunc, ToolbarItemUtilities,\r\n} from \"@itwin/appui-abstract\";\r\nimport { BadgeUtilities, CommonProps, Icon, IconHelper, NoChildrenProps, useRefs } from \"@itwin/core-react\";\r\nimport { ToolbarButtonItem } from \"./Item\";\r\nimport { ToolbarItems } from \"./Items\";\r\nimport { ItemWrapper, useResizeObserverSingleDimension } from \"./ItemWrapper\";\r\nimport { ToolbarOverflowButton } from \"./Overflow\";\r\nimport { ToolbarOverflowPanel } from \"./OverflowPanel\";\r\nimport { PopupItem } from \"./PopupItem\";\r\nimport { PopupItemsPanel } from \"./PopupItemsPanel\";\r\nimport { PopupItemWithDrag } from \"./PopupItemWithDrag\";\r\nimport { Direction, DirectionHelpers, OrthogonalDirection, OrthogonalDirectionHelpers } from \"./utilities/Direction\";\r\nimport { UiComponents } from \"../UiComponents\";\r\nimport { SvgPlaceholder } from \"@itwin/itwinui-icons-react\";\r\n\r\n/** Describes the data needed to insert a custom `React` button into an ToolbarWithOverflow.\r\n * @public\r\n */\r\nexport interface CustomToolbarItem extends CustomButtonDefinition {\r\n /** defines the content to display in popup panel */\r\n panelContentNode?: React.ReactNode;\r\n /** If true the popup panel is mounted once and unmounted when button is unmounted. If false the\r\n * content node is unmounted each time the popup is closed. */\r\n keepContentsLoaded?: boolean;\r\n}\r\n\r\n/**\r\n * Context used by Toolbar items to know if popup panel should be hidden - via AutoHide.\r\n * @public\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarPopupAutoHideContext = React.createContext<boolean>(false);\r\n\r\n/**\r\n * React hook used to retrieve the ToolbarPopupAutoHideContext.\r\n * @public\r\n */\r\nexport function useToolbarPopupAutoHideContext() {\r\n return React.useContext(ToolbarPopupAutoHideContext);\r\n}\r\n\r\n/** Describes toolbar item.\r\n * @public\r\n */\r\nexport type ToolbarItem = ActionButton | GroupButton | CustomToolbarItem;\r\n\r\n/** CustomToolbarItem type guard.\r\n * @internal\r\n */\r\nexport function isCustomToolbarItem(item: ToolbarItem): item is CustomToolbarItem {\r\n return !!(item as CustomToolbarItem).isCustom && (\"panelContentNode\" in item);\r\n}\r\n\r\n/** @internal */\r\nexport const getToolbarDirection = (expandsTo: Direction): OrthogonalDirection => {\r\n const orthogonalDirection = DirectionHelpers.getOrthogonalDirection(expandsTo);\r\n return OrthogonalDirectionHelpers.inverse(orthogonalDirection);\r\n};\r\n\r\n/** Available alignment modes of [[ToolbarWithOverflow]] panels.\r\n * @public\r\n */\r\nexport enum ToolbarPanelAlignment {\r\n Start,\r\n End,\r\n}\r\n\r\n/** Enumeration of Toolbar Opacity setting.\r\n * @public\r\n */\r\nexport enum ToolbarOpacitySetting {\r\n /** Use the default background, box-shadow opacity and backdrop-filter blur */\r\n Defaults,\r\n /** Alter the opacity from transparent to the defaults based on mouse proximity */\r\n Proximity,\r\n /** Use a transparent background, box-shadow opacity and backdrop-filter blur */\r\n Transparent,\r\n}\r\n\r\n/** Helpers for [[ToolbarPanelAlignment]].\r\n * @internal\r\n */\r\nexport class ToolbarPanelAlignmentHelpers {\r\n /** Class name of [[ToolbarPanelAlignment.Start]] */\r\n public static readonly START_CLASS_NAME = \"components-panel-alignment-start\";\r\n /** Class name of [[ToolbarPanelAlignment.End]] */\r\n public static readonly END_CLASS_NAME = \"components-panel-alignment-end\";\r\n\r\n /** @returns Class name of specified [[ToolbarPanelAlignment]] */\r\n public static getCssClassName(panelAlignment: ToolbarPanelAlignment): string {\r\n switch (panelAlignment) {\r\n case ToolbarPanelAlignment.Start:\r\n return ToolbarPanelAlignmentHelpers.START_CLASS_NAME;\r\n case ToolbarPanelAlignment.End:\r\n return ToolbarPanelAlignmentHelpers.END_CLASS_NAME;\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface ToolbarOverflowContextProps {\r\n readonly expandsTo: Direction;\r\n readonly direction: OrthogonalDirection;\r\n readonly overflowExpandsTo: Direction;\r\n readonly overflowDirection: OrthogonalDirection;\r\n readonly panelAlignment: ToolbarPanelAlignment;\r\n readonly useDragInteraction: boolean;\r\n readonly toolbarOpacitySetting: ToolbarOpacitySetting;\r\n readonly openPopupCount: number;\r\n readonly onPopupPanelOpenClose: (isOpening: boolean) => void;\r\n readonly overflowDisplayActive: boolean;\r\n readonly onItemExecuted: OnItemExecutedFunc;\r\n readonly onKeyDown: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\n/**\r\n * Context used by Toolbar component to provide Direction to child components.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarWithOverflowDirectionContext = React.createContext<ToolbarOverflowContextProps>({\r\n expandsTo: Direction.Bottom,\r\n direction: OrthogonalDirection.Horizontal,\r\n overflowExpandsTo: Direction.Right,\r\n overflowDirection: OrthogonalDirection.Vertical,\r\n panelAlignment: ToolbarPanelAlignment.Start,\r\n useDragInteraction: false,\r\n toolbarOpacitySetting: ToolbarOpacitySetting.Proximity,\r\n openPopupCount: 0,\r\n onPopupPanelOpenClose: /* istanbul ignore next */ (_isOpening: boolean) => { },\r\n overflowDisplayActive: false,\r\n onItemExecuted: /* istanbul ignore next */ (_item: any) => void {},\r\n onKeyDown: /* istanbul ignore next */ (_e: React.KeyboardEvent) => void {},\r\n});\r\n\r\n/** @internal */\r\nfunction CustomItem({ item, addGroupSeparator }: { item: CustomToolbarItem, addGroupSeparator: boolean }) {\r\n const { useDragInteraction } = useToolbarWithOverflowDirectionContext();\r\n const icon = React.useMemo(() => (item.icon &&\r\n IconHelper.getIconReactNode(item.icon, item.internalData)) || /* istanbul ignore next */\r\n <Icon className=\"icon\" iconSpec={<SvgPlaceholder />} />, [item.icon, item.internalData]);\r\n const isDisabled = React.useMemo(() => ConditionalBooleanValue.getValue(item.isDisabled), [item.isDisabled]);\r\n const title = React.useMemo(() => /* istanbul ignore next */ ConditionalStringValue.getValue(item.label) ?? item.id, [item.id, item.label]);\r\n const badge = React.useMemo(() => BadgeUtilities.getComponentForBadgeType(item.badgeType), [item.badgeType]);\r\n\r\n return <PopupItem\r\n key={item.id}\r\n itemId={item.id}\r\n icon={icon}\r\n isDisabled={isDisabled}\r\n title={title}\r\n panel={item.panelContentNode}\r\n hideIndicator={useDragInteraction}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n keepContentsMounted={item.keepContentsLoaded}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nfunction GroupPopupItem({ item, addGroupSeparator }: { item: GroupButton, addGroupSeparator: boolean }) {\r\n const { useDragInteraction } = useToolbarWithOverflowDirectionContext();\r\n const title = ConditionalStringValue.getValue(item.label)!;\r\n const badge = BadgeUtilities.getComponentForBadgeType(item.badgeType);\r\n const panel = React.useMemo(() => <PopupItemsPanel groupItem={item} activateOnPointerUp={false} />, [item]);\r\n if (useDragInteraction) {\r\n return <PopupItemWithDrag\r\n key={item.id}\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n groupItem={item}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n }\r\n return <PopupItem\r\n key={item.id}\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n panel={panel}\r\n badge={badge}\r\n hideIndicator={useDragInteraction}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nfunction ActionItem({ item, addGroupSeparator }: { item: ActionButton, addGroupSeparator: boolean }) {\r\n const title = ConditionalStringValue.getValue(item.label)!;\r\n const badge = BadgeUtilities.getComponentForBadgeType(item.badgeType);\r\n const { onItemExecuted } = useToolbarWithOverflowDirectionContext();\r\n const onExecute = React.useCallback(() => {\r\n item.execute();\r\n onItemExecuted(item);\r\n }, [item, onItemExecuted]);\r\n\r\n return <ToolbarButtonItem\r\n itemId={item.id}\r\n providerId={item.providerId}\r\n itemPriority={item.itemPriority}\r\n groupPriority={item.groupPriority}\r\n key={item.id}\r\n isDisabled={ConditionalBooleanValue.getValue(item.isDisabled)}\r\n title={title}\r\n icon={IconHelper.getIconReactNode(item.icon, item.internalData)}\r\n isActive={item.isActive}\r\n onClick={onExecute}\r\n badge={badge}\r\n addGroupSeparator={addGroupSeparator}\r\n />;\r\n}\r\n\r\n/** @internal */\r\nexport function ToolbarItemComponent({ item, addGroupSeparator }: { item: ToolbarItem, addGroupSeparator: boolean }) {\r\n if (ToolbarItemUtilities.isGroupButton(item)) {\r\n return <GroupPopupItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n } else if (isCustomToolbarItem(item)) {\r\n return <CustomItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n } else {\r\n // istanbul ignore else\r\n if (ToolbarItemUtilities.isActionButton(item)) {\r\n return <ActionItem item={item} addGroupSeparator={addGroupSeparator} />;\r\n }\r\n }\r\n // istanbul ignore next\r\n return null;\r\n}\r\n\r\n/** @internal */\r\nexport function useToolbarWithOverflowDirectionContext() {\r\n return React.useContext(ToolbarWithOverflowDirectionContext);\r\n}\r\n\r\nfunction OverflowItemsContainer(p: { children: React.ReactNode }) {\r\n return <>{p.children}</>;\r\n}\r\n\r\nfunction getItemWrapperClass(child: React.ReactNode) {\r\n // istanbul ignore else\r\n if (React.isValidElement(child)) {\r\n if (child.props && child.props.addGroupSeparator)\r\n return \"components-toolbar-button-add-gap-before\";\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Properties of [[ToolbarWithOverflow]] component.\r\n * @public\r\n */\r\nexport interface ToolbarWithOverflowProps extends CommonProps, NoChildrenProps {\r\n /** Describes to which direction the popup panels are expanded. Defaults to: [[Direction.Bottom]] */\r\n expandsTo?: Direction;\r\n /** Describes to which direction the overflow popup panels are expanded. Defaults to: [[Direction.Right]] */\r\n overflowExpandsTo?: Direction;\r\n /** Definitions for items of the toolbar. Items are expected to be already sorted by group and item. */\r\n items: CommonToolbarItem[];\r\n /** Describes how expanded panels are aligned. Defaults to: [[ToolbarPanelAlignment.Start]] */\r\n panelAlignment?: ToolbarPanelAlignment;\r\n /** Use Drag Interaction to open popups with nest action buttons */\r\n useDragInteraction?: boolean;\r\n /** Determines whether to use mouse proximity to alter the opacity of the toolbar */\r\n toolbarOpacitySetting?: ToolbarOpacitySetting;\r\n /** Optional function to call on any item execution */\r\n onItemExecuted?: OnItemExecutedFunc;\r\n /** Optional function to call on any KeyDown events processed by toolbar */\r\n onKeyDown?: (e: React.KeyboardEvent) => void;\r\n}\r\n\r\n/** Component that displays tool settings as a bar across the top of the content view.\r\n * @public\r\n */\r\nexport function ToolbarWithOverflow(props: ToolbarWithOverflowProps) {\r\n const expandsTo = props.expandsTo ? props.expandsTo : Direction.Bottom;\r\n const useDragInteraction = !!props.useDragInteraction;\r\n const panelAlignment = props.panelAlignment ? props.panelAlignment : ToolbarPanelAlignment.Start;\r\n const useHeight = (expandsTo === Direction.Right || expandsTo === Direction.Left);\r\n const [isOverflowPanelOpen, setIsOverflowPanelOpen] = React.useState(false);\r\n const [popupPanelCount, setPopupPanelCount] = React.useState(0);\r\n const overflowTitle = React.useRef(UiComponents.translate(\"toolbar.overflow\"));\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n });\r\n const handlePopupPanelOpenClose = React.useCallback((isOpening: boolean) => {\r\n // use setTimeout to avoid warning about setting state in ToolbarWithOverflow from render method of PopupItem/PopupItemWithDrag\r\n setTimeout(() => {\r\n // istanbul ignore next\r\n if (!isMounted.current)\r\n return;\r\n setPopupPanelCount((prev) => {\r\n /* istanbul ignore next */\r\n const nextCount = isOpening ? (prev + 1) : (prev - 1);\r\n // eslint-disable-next-line no-console\r\n // console.log(`new popup count = ${nextCount}`);\r\n return nextCount < 0 ? /* istanbul ignore next */ 0 : nextCount;\r\n });\r\n });\r\n }, []);\r\n\r\n const ref = React.useRef<HTMLDivElement>(null);\r\n const width = React.useRef<number | undefined>(undefined);\r\n const availableNodes = React.useMemo<React.ReactNode>(() => {\r\n return props.items.map((item, index) => {\r\n let addGroupSeparator = false;\r\n if (index > 0)\r\n addGroupSeparator = item.groupPriority !== props.items[index - 1].groupPriority;\r\n return (\r\n <ToolbarItemComponent\r\n key={item.id}\r\n item={item}\r\n addGroupSeparator={!!addGroupSeparator}\r\n />\r\n );\r\n });\r\n }, [props.items]);\r\n /* overflowItemKeys - keys of items to show in overflow panel\r\n * handleContainerResize - handler called when container <div> is resized.\r\n * handleOverflowResize - handler called when determining size of overflow indicator/button.\r\n * handleEntryResize - handler called when determining size of each item/button. */\r\n const [overflowItemKeys, handleContainerResize, handleOverflowResize, handleEntryResize] = useOverflow(availableNodes, panelAlignment === ToolbarPanelAlignment.End);\r\n // handler called by ResizeObserver\r\n const handleResize = React.useCallback((w: number) => {\r\n width.current = w;\r\n width.current !== undefined && handleContainerResize(width.current);\r\n }, [handleContainerResize]);\r\n const resizeObserverRef = useResizeObserverSingleDimension(handleResize, useHeight);\r\n const handleClick = React.useCallback(() => {\r\n setIsOverflowPanelOpen((prev) => !prev);\r\n }, []);\r\n // istanbul ignore next - NEEDSWORK add complete tests\r\n const handleClose = React.useCallback(() => {\r\n setIsOverflowPanelOpen(false);\r\n }, []);\r\n\r\n const refs = useRefs(ref, resizeObserverRef);\r\n const availableItems = React.Children.toArray(availableNodes);\r\n const displayedItems = availableItems.reduce<Array<[string, React.ReactNode]>>((acc, child, index) => {\r\n const key = getChildKey(child, index);\r\n if (!overflowItemKeys || overflowItemKeys.indexOf(key) < 0) {\r\n acc.push([key, child]);\r\n }\r\n return acc;\r\n }, []);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n const overflowPanelItems = overflowItemKeys ? availableItems.reduce<Array<[string, React.ReactNode]>>((acc, child, index) => {\r\n const key = getChildKey(child, index);\r\n if (overflowItemKeys.indexOf(key) >= 0) {\r\n acc.push([key, child]);\r\n }\r\n return acc;\r\n }, []) : [];\r\n\r\n const direction = getToolbarDirection(expandsTo);\r\n const overflowExpandsTo = undefined !== props.overflowExpandsTo ? props.overflowExpandsTo : Direction.Right;\r\n const addOverflowButton = React.useCallback((atStart: boolean) => {\r\n const overflowItems = !!atStart ? overflowPanelItems.reverse() : overflowPanelItems;\r\n return (<ToolbarItemContext.Provider\r\n value={{\r\n hasOverflow: false,\r\n useHeight,\r\n onResize: handleOverflowResize,\r\n }}\r\n >\r\n <ToolbarOverflowButton\r\n expandsTo={expandsTo}\r\n onClick={handleClick}\r\n onClose={handleClose}\r\n open={overflowItems.length > 0 && isOverflowPanelOpen}\r\n panelNode={\r\n <ToolbarOverflowPanel>\r\n <OverflowItemsContainer>\r\n {overflowItems.map(([key, child]) => {\r\n return (\r\n <ToolbarItemContext.Provider\r\n key={key}\r\n value={{\r\n hasOverflow: true,\r\n useHeight,\r\n onResize: () => { },\r\n }}\r\n >\r\n {<ItemWrapper className={getItemWrapperClass(child)}>{child}</ItemWrapper>}\r\n </ToolbarItemContext.Provider>\r\n );\r\n })}\r\n </OverflowItemsContainer>\r\n </ToolbarOverflowPanel>\r\n }\r\n title={overflowTitle.current}\r\n />\r\n </ToolbarItemContext.Provider>);\r\n }, [handleClick, handleClose, handleOverflowResize, isOverflowPanelOpen, expandsTo, overflowPanelItems, useHeight]);\r\n\r\n const className = classnames(\r\n \"components-toolbar-overflow-sizer\",\r\n OrthogonalDirectionHelpers.getCssClassName(direction),\r\n props.className);\r\n\r\n const showOverflowAtStart = (direction === OrthogonalDirection.Horizontal) && (panelAlignment === ToolbarPanelAlignment.End);\r\n /* The ItemWrapper is used to wrap the <Item> <ExpandableItem> with a <div> that specifies a ref that the sizing logic uses to determine the\r\n size of the item. */\r\n return (\r\n <ToolbarWithOverflowDirectionContext.Provider value={\r\n {\r\n expandsTo, direction, overflowExpandsTo, panelAlignment, useDragInteraction,\r\n toolbarOpacitySetting: undefined !== props.toolbarOpacitySetting ? props.toolbarOpacitySetting : ToolbarOpacitySetting.Proximity,\r\n overflowDirection: direction === OrthogonalDirection.Horizontal ? OrthogonalDirection.Vertical : OrthogonalDirection.Horizontal,\r\n openPopupCount: popupPanelCount,\r\n onPopupPanelOpenClose: handlePopupPanelOpenClose,\r\n overflowDisplayActive: overflowPanelItems.length > 0 && isOverflowPanelOpen,\r\n onItemExecuted: props.onItemExecuted ? props.onItemExecuted : () => { },\r\n onKeyDown: props.onKeyDown ? props.onKeyDown : /* istanbul ignore next */ (_e: React.KeyboardEvent) => { },\r\n }\r\n }>\r\n {(availableItems.length > 0) &&\r\n <div\r\n className={className}\r\n ref={refs}\r\n style={props.style}\r\n onKeyDown={props.onKeyDown}\r\n role=\"presentation\"\r\n >\r\n <ToolbarItems\r\n className=\"components-items\"\r\n direction={direction}\r\n >\r\n {(!overflowItemKeys || overflowItemKeys.length > 0) && showOverflowAtStart && addOverflowButton(true)}\r\n {displayedItems.map(([key, child]) => {\r\n const onEntryResize = handleEntryResize(key);\r\n return (\r\n <ToolbarItemContext.Provider\r\n key={key}\r\n value={{\r\n hasOverflow: false,\r\n useHeight,\r\n onResize: onEntryResize,\r\n }}\r\n >\r\n {<ItemWrapper className={getItemWrapperClass(child)}>{child}</ItemWrapper>}\r\n </ToolbarItemContext.Provider>\r\n );\r\n })}\r\n {(!overflowItemKeys || overflowItemKeys.length > 0) && !showOverflowAtStart && addOverflowButton(false)}\r\n\r\n </ToolbarItems>\r\n </div>\r\n }\r\n </ToolbarWithOverflowDirectionContext.Provider >\r\n );\r\n}\r\n\r\n/** Returns key of a child. Must be used along with React.Children.toArray to preserve the semantics of availableItems.\r\n * @internal\r\n */\r\nfunction getChildKey(child: React.ReactNode, index: number) {\r\n // istanbul ignore else\r\n if (React.isValidElement(child) && child.key !== null) {\r\n return child.key.toString();\r\n }\r\n // istanbul ignore next\r\n return index.toString();\r\n}\r\n\r\n/** Returns a subset of toolbar item entry keys that exceed given width and should be overflowItemKeys.\r\n * @internal\r\n */\r\nfunction determineOverflowItems(size: number, entries: ReadonlyArray<readonly [string, number]>, overflowButtonSize: number, overflowButtonAtStart: boolean): string[] {\r\n let toolbarSize = 0;\r\n const buttonPadding = 2;\r\n if (overflowButtonAtStart && entries.length > 0) {\r\n let i = entries.length - 1;\r\n for (; i >= 0; i--) {\r\n const w = entries[i][1] + buttonPadding;\r\n const newSettingsWidth = toolbarSize + w;\r\n if (newSettingsWidth > size) {\r\n toolbarSize += (overflowButtonSize + buttonPadding);\r\n break;\r\n }\r\n toolbarSize = newSettingsWidth;\r\n }\r\n if (i >= 0) {\r\n let j = i + 1;\r\n for (; j < entries.length; j++) {\r\n if (toolbarSize <= size)\r\n break;\r\n const w = entries[j][1] + buttonPadding;\r\n toolbarSize -= w;\r\n }\r\n\r\n return entries.slice(0, j).map((e) => e[0]);\r\n } else {\r\n return [];\r\n }\r\n } else {\r\n let i = 0;\r\n for (; i < entries.length; i++) {\r\n const w = entries[i][1] + buttonPadding;\r\n const newSettingsWidth = toolbarSize + w;\r\n if (newSettingsWidth > size) {\r\n toolbarSize += (overflowButtonSize + buttonPadding);\r\n break;\r\n }\r\n toolbarSize = newSettingsWidth;\r\n }\r\n let j = i;\r\n for (; j > 0; j--) {\r\n if (toolbarSize <= size)\r\n break;\r\n const w = entries[j][1] + buttonPadding;\r\n toolbarSize -= w;\r\n }\r\n\r\n return entries.slice(j).map((e) => e[0]);\r\n }\r\n}\r\n\r\n/** Hook that returns a list of overflowItemKeys availableItems.\r\n * @internal\r\n */\r\nfunction useOverflow(availableItems: React.ReactNode, overflowButtonAtStart: boolean): [\r\n ReadonlyArray<string> | undefined,\r\n (size: number) => void,\r\n (size: number) => void,\r\n (key: string) => (size: number) => void,\r\n] {\r\n const [overflowItemKeys, setOverflown] = React.useState<ReadonlyArray<string>>();\r\n const itemSizes = React.useRef(new Map<string, number | undefined>());\r\n const size = React.useRef<number | undefined>(undefined);\r\n const overflowButtonSize = React.useRef<number | undefined>(undefined);\r\n\r\n const calculateOverflow = React.useCallback(() => {\r\n const sizes = verifiedMapEntries(itemSizes.current);\r\n if (size.current === undefined ||\r\n sizes === undefined ||\r\n overflowButtonSize.current === undefined) {\r\n setOverflown(undefined);\r\n return;\r\n }\r\n\r\n // Calculate overflow.\r\n const newOverflown = determineOverflowItems(size.current, [...sizes.entries()], overflowButtonSize.current, overflowButtonAtStart);\r\n setOverflown((prevOverflown) => {\r\n return eql(prevOverflown, newOverflown) ? prevOverflown : newOverflown;\r\n });\r\n }, [overflowButtonAtStart]);\r\n\r\n React.useLayoutEffect(() => {\r\n const newEntryWidths = new Map<string, number | undefined>();\r\n const array = React.Children.toArray(availableItems);\r\n for (let i = 0; i < array.length; i++) {\r\n const child = array[i];\r\n const key = getChildKey(child, i);\r\n const lastW = itemSizes.current.get(key);\r\n newEntryWidths.set(key, lastW);\r\n }\r\n itemSizes.current = newEntryWidths;\r\n calculateOverflow();\r\n }, [availableItems, calculateOverflow]);\r\n\r\n const handleContainerResize = React.useCallback((w: number) => {\r\n const calculate = size.current !== w;\r\n size.current = w;\r\n calculate && calculateOverflow();\r\n }, [calculateOverflow]);\r\n\r\n const handleOverflowResize = React.useCallback((w: number) => {\r\n const calculate = overflowButtonSize.current !== w;\r\n overflowButtonSize.current = w;\r\n calculate && calculateOverflow();\r\n }, [calculateOverflow]);\r\n\r\n const handleEntryResize = React.useCallback((key: string) => (w: number) => {\r\n const oldW = itemSizes.current.get(key);\r\n if (oldW !== w) {\r\n itemSizes.current.set(key, w);\r\n calculateOverflow();\r\n }\r\n }, [calculateOverflow]);\r\n\r\n return [overflowItemKeys, handleContainerResize, handleOverflowResize, handleEntryResize];\r\n}\r\n\r\n/** Interface toolbars use to define context for its items.\r\n * @internal\r\n */\r\nexport interface ToolbarItemContextArgs {\r\n readonly hasOverflow: boolean;\r\n readonly useHeight: boolean;\r\n readonly onResize: (w: number) => void;\r\n}\r\n\r\n/** Interface toolbars use to define context for its items.\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport const ToolbarItemContext = React.createContext<ToolbarItemContextArgs>(null!);\r\n\r\n/** @internal */\r\nexport function useToolItemEntryContext() {\r\n return React.useContext(ToolbarItemContext);\r\n}\r\n\r\nfunction verifiedMapEntries<T>(map: Map<string, T | undefined>) {\r\n for (const [, val] of map) {\r\n // istanbul ignore next during unit testing\r\n if (val === undefined)\r\n return undefined;\r\n }\r\n return map as Map<string, T>;\r\n}\r\n\r\nfunction eql(prev: readonly string[] | undefined, value: readonly string[]) {\r\n if (!prev)\r\n return false;\r\n // istanbul ignore next\r\n if (prev.length !== value.length)\r\n return false;\r\n for (let i = 0; i < prev.length; i++) {\r\n const p = prev[i];\r\n const v = value[i];\r\n // istanbul ignore next\r\n if (p !== v)\r\n return false;\r\n }\r\n return true;\r\n}\r\n"]}
@@ -21,11 +21,11 @@ $desktop-tool-stripe-height: 30px;
21
21
 
22
22
  $font-size: var(--iui-font-size-1);
23
23
  $icon-size: 16px;
24
- $icon-color: $buic-icon-color;
25
- $hovered-icon-color: $buic-foreground-activehover;
24
+ $icon-color: var(--iui-color-icon);
25
+ $hovered-icon-color: var(--iui-color-icon-hover);
26
26
  $pressed-icon-color: $buic-foreground-activehover;
27
- $active-icon-color: $buic-foreground-activehover;
28
- $disabled-icon-color: $buic-icon-color-disabled;
27
+ $active-icon-color: var(--iui-color-icon-accent);
28
+ $disabled-icon-color: var(--iui-color-icon-disabled);
29
29
  $icon-shadow-color: $buic-icon-color-reverse;
30
30
  $icon-shadow: drop-shadow(0 1px 0 $icon-shadow-color);
31
31
  $no-shadow: drop-shadow(0 0 0 transparent);
@@ -17,7 +17,7 @@
17
17
  cursor: pointer;
18
18
 
19
19
  &:after {
20
- color: $buic-foreground-primary;
20
+ color: var(--iui-color-text-accent);
21
21
  }
22
22
  }
23
23
 
@@ -27,7 +27,7 @@
27
27
  position: relative;
28
28
  left: 3px;
29
29
  top: 3px;
30
- color: $buic-foreground-body;
30
+ color: var(--iui-color-text);
31
31
  width: $size;
32
32
  height: $size;
33
33
  border-top: $border;
@@ -5,13 +5,11 @@
5
5
  @import "variables";
6
6
 
7
7
  .components-toolbar-item-expandable-group-panel {
8
- $fill-color: $buic-background-panel;
9
-
10
8
  line-height: normal;
11
- background: $fill-color;
9
+ background: var(--iui-color-background);
12
10
  padding: 8px;
13
11
  border-radius: var(--iui-border-radius-1);
14
12
  pointer-events: auto;
15
- border: 1px solid $buic-background-widget-stroke;
13
+ border: 1px solid var(--iui-color-border);
16
14
  font-size: $font-size;
17
15
  }
@@ -7,8 +7,7 @@
7
7
  .components-toolbar-item-expandable-group-title {
8
8
  white-space: nowrap;
9
9
  text-align: center;
10
- color: $title-color;
11
- filter: drop-shadow(0 1px 0 $buic-foreground-body-reverse);
10
+ color: var(--iui-color-text);
12
11
  margin-bottom: 9px;
13
12
  margin-left: $title-horizontal-margin;
14
13
  margin-right: $title-horizontal-margin;
@@ -10,7 +10,7 @@ $panel-padding-left: 16px;
10
10
  $panel-padding-right: 8px;
11
11
  $panel-padding-top: $panel-padding-right;
12
12
  $panel-padding-bottom: 12px;
13
- $title-color: $buic-text-color;
13
+ $title-color: var(--iui-color-text);
14
14
  $back-arrow-thickness: 2px;
15
15
  $back-arrow-size-val: 6;
16
16
  $title-horizontal-margin: 20px;
@@ -7,12 +7,6 @@
7
7
  @import "variables";
8
8
 
9
9
  .components-toolbar-item-expandable-group-tool-item {
10
- $label-color: $buic-text-color;
11
- $pressed-label-color: $buic-foreground-activehover;
12
- $hovered-label-color: $buic-foreground-primary;
13
- $focused-label-color: $buic-foreground-primary;
14
- $active-label-color: $buic-foreground-primary;
15
- $disabled-label-color: $buic-text-color-disabled;
16
10
  $item-height: 32px;
17
11
  $item-border-width: 2px;
18
12
  $active-tool-stripe-height: 22px;
@@ -22,7 +16,7 @@
22
16
 
23
17
  white-space: nowrap;
24
18
  height: $item-height;
25
- color: $label-color;
19
+ color: var(--iui-color-text);
26
20
  cursor: pointer;
27
21
  border-radius: var(--iui-border-radius-1);
28
22
  display: flex;
@@ -32,13 +26,8 @@
32
26
 
33
27
  @mixin components-active-tool {
34
28
  &:not(.components-disabled) {
35
- background: $buic-row-selection;
36
- color: $pressed-label-color;
37
-
38
- > .components-icon,
39
- .components-label {
40
- filter: $no-shadow;
41
- }
29
+ background: var(--iui-color-background-hover);
30
+ color: var(--iui-color-text-accent-hover);
42
31
  }
43
32
  }
44
33
 
@@ -48,14 +37,12 @@
48
37
  display: inline-block;
49
38
  margin-right: $space-between-icon-and-label;
50
39
  margin-left: 8px;
51
- filter: $shadow;
52
40
  position: relative;
53
41
 
54
42
  > .components-badge {
55
43
  position: absolute;
56
44
  top: -8px;
57
45
  left: -8px;
58
- filter: $no-shadow;
59
46
  }
60
47
  }
61
48
 
@@ -63,7 +50,6 @@
63
50
  display: inline-block;
64
51
  margin-right: $space-after-label;
65
52
  line-height: $item-height;
66
- filter: $shadow;
67
53
 
68
54
  &:after {
69
55
  display: block;
@@ -78,14 +64,9 @@
78
64
 
79
65
  @include components-internal-targeted {
80
66
  &:not(.components-disabled) {
81
- color: $hovered-label-color;
67
+ color: var(--iui-color-text-hover);
82
68
 
83
69
  @include body1;
84
-
85
- > .components-icon,
86
- .components-label {
87
- filter: $shadow;
88
- }
89
70
  }
90
71
  }
91
72
 
@@ -104,27 +85,22 @@
104
85
  }
105
86
 
106
87
  &.components-focused:not(.components-disabled) {
107
- color: $focused-label-color;
108
- border-color: $buic-foreground-primary;
88
+ color: var(--iui-color-text-accent);
89
+ border-color: var(--iui-color-border-accent);
109
90
  border-width: $item-border-width;
110
91
  border-style: solid;
111
92
 
112
93
  @include body1;
113
-
114
- > .components-icon,
115
- .components-label {
116
- filter: $shadow;
117
- }
118
94
  }
119
95
 
120
96
  &.components-active:not(.components-disabled) {
121
- color: $active-label-color;
97
+ color: var(--iui-color-text-accent);
122
98
 
123
99
  @include body1;
124
100
 
125
101
  &::before {
126
102
  content: "";
127
- background-color: $active-label-color;
103
+ background-color: var(--iui-color-border-accent);
128
104
  display: block;
129
105
  position: relative;
130
106
  top: 0;
@@ -133,14 +109,9 @@
133
109
  height: $active-tool-stripe-height;
134
110
  border-radius: 2px;
135
111
  }
136
-
137
- > .components-icon,
138
- .components-label {
139
- filter: $no-shadow;
140
- }
141
112
  }
142
113
 
143
114
  &.components-disabled {
144
- color: $disabled-label-color;
115
+ color: var(--iui-color-text-disabled);
145
116
  }
146
117
  }
@@ -7,7 +7,7 @@
7
7
  */
8
8
  var _a;
9
9
  import { immerable } from "immer";
10
- import _ from "lodash";
10
+ import { cloneDeep } from "lodash";
11
11
  import { assert } from "@itwin/core-bentley";
12
12
  import { CheckBoxState } from "@itwin/core-react";
13
13
  import { SparseTree } from "./internal/SparseTree";
@@ -258,7 +258,7 @@ export class MutableTreeModel {
258
258
  isDisabled: !!input.item.isCheckboxDisabled,
259
259
  isVisible: !!input.item.isCheckboxVisible,
260
260
  },
261
- item: _.cloneDeep(input.item),
261
+ item: cloneDeep(input.item),
262
262
  };
263
263
  }
264
264
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TreeModel.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeModel.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 Tree\r\n */\r\n\r\nimport { immerable } from \"immer\";\r\nimport _ from \"lodash\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\r\nimport { CheckBoxState } from \"@itwin/core-react\";\r\nimport { DelayLoadedTreeNodeItem, ImmediatelyLoadedTreeNodeItem, TreeNodeItem } from \"../TreeDataProvider\";\r\nimport { SparseArray, SparseTree } from \"./internal/SparseTree\";\r\n\r\n/**\r\n * Immutable data structure that describes tree node.\r\n * @public\r\n */\r\nexport interface TreeModelNode {\r\n readonly id: string;\r\n readonly parentId: string | undefined;\r\n readonly depth: number;\r\n\r\n readonly isLoading?: boolean;\r\n readonly numChildren: number | undefined;\r\n\r\n readonly description: string | undefined;\r\n readonly isExpanded: boolean;\r\n readonly label: PropertyRecord;\r\n readonly isSelected: boolean;\r\n readonly isSelectionDisabled?: boolean;\r\n\r\n /** Specifies that node is in editing mode. It holds callbacks that are used by node editor. */\r\n readonly editingInfo?: TreeModelNodeEditingInfo;\r\n\r\n readonly checkbox: CheckBoxInfo;\r\n\r\n readonly item: TreeNodeItem;\r\n}\r\n\r\n/**\r\n * Immutable data structure that describes checkbox info.\r\n * @public\r\n */\r\nexport interface CheckBoxInfo {\r\n readonly state: CheckBoxState;\r\n readonly tooltip?: string;\r\n readonly isDisabled: boolean;\r\n readonly isVisible: boolean;\r\n}\r\n\r\n/**\r\n * Mutable data structure that describes tree node.\r\n * @public\r\n */\r\nexport interface MutableTreeModelNode extends TreeModelNode {\r\n isLoading: boolean;\r\n\r\n description: string;\r\n isExpanded: boolean;\r\n label: PropertyRecord;\r\n isSelected: boolean;\r\n isSelectionDisabled?: boolean;\r\n\r\n /** Specifies that node is in editing mode. It holds callbacks that are used by node editor. */\r\n editingInfo?: TreeModelNodeEditingInfo;\r\n\r\n checkbox: MutableCheckBoxInfo;\r\n\r\n item: TreeNodeItem;\r\n}\r\n\r\n/**\r\n * Data structure that holds callbacks used for tree node editing.\r\n * @public\r\n */\r\nexport interface TreeModelNodeEditingInfo {\r\n onCommit: (node: TreeModelNode, newValue: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\n/**\r\n * Mutable data structure that describes checkbox info.\r\n * @public\r\n */\r\nexport interface MutableCheckBoxInfo extends CheckBoxInfo {\r\n state: CheckBoxState;\r\n tooltip?: string;\r\n isDisabled: boolean;\r\n isVisible: boolean;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree node placeholder.\r\n * @public\r\n */\r\nexport interface TreeModelNodePlaceholder {\r\n readonly childIndex: number;\r\n readonly depth: number;\r\n readonly parentId?: string;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree root node.\r\n * @public\r\n */\r\nexport interface TreeModelRootNode {\r\n readonly depth: -1;\r\n readonly id: undefined;\r\n readonly numChildren: number | undefined;\r\n}\r\n\r\n/**\r\n * Data structure that describes input used to create tree node.\r\n * @public\r\n */\r\nexport interface TreeModelNodeInput {\r\n readonly description?: string;\r\n readonly isExpanded: boolean;\r\n readonly id: string;\r\n readonly item: TreeNodeItem;\r\n readonly label: PropertyRecord;\r\n readonly isLoading: boolean;\r\n readonly numChildren?: number;\r\n readonly isSelected: boolean;\r\n}\r\n\r\n/**\r\n * Type definition of all tree model nodes.\r\n * @public\r\n */\r\nexport type TreeModelNodeType = TreeModelNode | TreeModelNodePlaceholder | TreeModelRootNode;\r\n\r\n/**\r\n * Checks if object is [[TreeModelNode]]\r\n * @public\r\n */\r\nexport function isTreeModelNode(obj: TreeModelNodeType | undefined): obj is TreeModelNode {\r\n return obj !== undefined && !isTreeModelNodePlaceholder(obj) && !isTreeModelRootNode(obj);\r\n}\r\n\r\n/**\r\n * Checks if object is [[TreeModelNodePlaceholder]]\r\n * @public\r\n */\r\nexport function isTreeModelNodePlaceholder(obj: TreeModelNodeType | undefined): obj is TreeModelNodePlaceholder {\r\n return obj !== undefined && \"childIndex\" in obj;\r\n}\r\n\r\n/**\r\n * Checks if object is [[TreeModelRootNode]]\r\n * @public\r\n */\r\nexport function isTreeModelRootNode(obj: TreeModelNodeType | undefined): obj is TreeModelRootNode {\r\n return obj !== undefined && (obj as TreeModelRootNode).id === undefined && !(\"childIndex\" in obj);\r\n}\r\n\r\n/**\r\n * Type definition of tree node item data.\r\n * @public\r\n */\r\nexport type TreeNodeItemData = ImmediatelyLoadedTreeNodeItem & DelayLoadedTreeNodeItem;\r\n\r\n/**\r\n * Data structure that describes set of visible tree nodes as a flat list.\r\n * @public\r\n */\r\nexport interface VisibleTreeNodes extends Iterable<TreeModelNode | TreeModelNodePlaceholder> {\r\n getNumNodes(): number;\r\n getAtIndex(index: number): TreeModelNode | TreeModelNodePlaceholder | undefined;\r\n getModel(): TreeModel;\r\n getNumRootNodes(): number | undefined;\r\n getIndexOfNode(nodeId: string): number;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree model.\r\n * @public\r\n */\r\nexport interface TreeModel {\r\n getRootNode(): TreeModelRootNode;\r\n\r\n getNode(id: string): TreeModelNode | undefined;\r\n getNode(parentId: string | undefined, childIndex: number): TreeModelNode | TreeModelNodePlaceholder | undefined;\r\n getNode(nodeId: string | undefined, childIndex?: number): TreeModelNode | TreeModelNodePlaceholder | TreeModelRootNode | undefined;\r\n\r\n getChildren(parentId: string | undefined): SparseArray<string> | undefined;\r\n getChildOffset(parentId: string | undefined, childId: string): number | undefined;\r\n\r\n iterateTreeModelNodes(parentId?: string): IterableIterator<TreeModelNode>;\r\n}\r\n\r\n/**\r\n * Mutable tree model which holds nodes and allows adding or removing them.\r\n * @public\r\n */\r\nexport class MutableTreeModel implements TreeModel {\r\n public [immerable] = true;\r\n\r\n private _tree = new SparseTree<MutableTreeModelNode>();\r\n private _rootNode: TreeModelRootNode = { depth: -1, id: undefined, numChildren: undefined };\r\n\r\n public constructor(seed?: TreeModel) {\r\n if (!seed) {\r\n return;\r\n }\r\n\r\n cloneSubree(seed, this, undefined);\r\n }\r\n\r\n /** Returns root node of a tree. This node is not visible and is there to allow having multiple visible root nodes. */\r\n public getRootNode(): TreeModelRootNode {\r\n return this._rootNode;\r\n }\r\n\r\n /** Returns tree node or placeholder for node that is not loaded yet.\r\n * @returns node, node placeholder or undefined if node is not found in model.\r\n */\r\n public getNode(id: string): MutableTreeModelNode | undefined;\r\n public getNode(parentId: string | undefined, childIndex: number): MutableTreeModelNode | TreeModelNodePlaceholder | undefined;\r\n public getNode(nodeId: string | undefined, childIndex?: number): MutableTreeModelNode | TreeModelNodePlaceholder | undefined {\r\n if (childIndex === undefined) {\r\n return this._tree.getNode(nodeId!);\r\n }\r\n\r\n const children = this._tree.getChildren(nodeId);\r\n const childId = children !== undefined ? children.get(childIndex) : undefined;\r\n if (childId !== undefined) {\r\n return this._tree.getNode(childId);\r\n }\r\n\r\n const parentNode = nodeId === undefined ? this._rootNode : this._tree.getNode(nodeId);\r\n if (parentNode !== undefined) {\r\n return {\r\n childIndex,\r\n depth: parentNode.depth + 1,\r\n parentId: nodeId,\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Returns children for specific parent.\r\n * @param parentId id of parent node.\r\n * @returns children of parent node or root nodes if undefined is passed as parent id.\r\n */\r\n public getChildren(parentId: string | undefined): SparseArray<string> | undefined {\r\n return this._tree.getChildren(parentId);\r\n }\r\n\r\n /** Returns children offset in children array for specific parent. */\r\n public getChildOffset(parentId: string | undefined, childId: string): number | undefined {\r\n return this._tree.getChildOffset(parentId, childId);\r\n }\r\n\r\n /**\r\n * Sets children for parent node starting from the specific offset.\r\n * If offset overlaps with already added nodes, the overlapping nodes are overwritten.\r\n */\r\n public setChildren(parentId: string | undefined, nodeInputs: TreeModelNodeInput[], offset: number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined)\r\n return;\r\n\r\n const children: MutableTreeModelNode[] = [];\r\n for (const input of nodeInputs) {\r\n const child = MutableTreeModel.createTreeModelNode(parentNode, input);\r\n children.push(child);\r\n }\r\n\r\n this._tree.setChildren(parentNode.id, children, offset);\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /**\r\n * Inserts child in the specified position.\r\n * If offset is higher then current length of children array, the length is increased.\r\n */\r\n public insertChild(parentId: string | undefined, childNodeInput: TreeModelNodeInput, offset: number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined)\r\n return;\r\n\r\n const child = MutableTreeModel.createTreeModelNode(parentNode, childNodeInput);\r\n\r\n this._tree.insertChild(parentNode.id, child, offset);\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /**\r\n * Changes the id of target node.\r\n * @returns `true` on success, `false` otherwise.\r\n */\r\n public changeNodeId(currentId: string, newId: string): boolean {\r\n const node = this.getNode(currentId);\r\n if (node === undefined) {\r\n return false;\r\n }\r\n\r\n if (currentId === newId) {\r\n return true;\r\n }\r\n\r\n const index = this.getChildOffset(node.parentId, currentId);\r\n assert(index !== undefined);\r\n\r\n if (!this._tree.setNodeId(node.parentId, index, newId)) {\r\n return false;\r\n }\r\n\r\n (node.id as string) = newId; // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\r\n for (const [childId] of this.getChildren(newId)?.iterateValues() ?? []) {\r\n const child = this.getNode(childId);\r\n assert(child !== undefined);\r\n (child.parentId as string) = newId;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Transfers node along with its children to a new location. Fails if destination has undefined child count.\r\n * @param sourceNodeId Node that is being moved.\r\n * @param targetParentId Node that will receive a new child.\r\n * @param targetIndex Insertion location among target's *current* children.\r\n * @returns `true` on success, `false` otherwise.\r\n */\r\n public moveNode(sourceNodeId: string, targetParentId: string | undefined, targetIndex: number): boolean {\r\n const sourceNode = this.getNode(sourceNodeId);\r\n if (sourceNode === undefined) {\r\n return false;\r\n }\r\n\r\n const targetParent = targetParentId === undefined ? this._rootNode : this.getNode(targetParentId);\r\n if (targetParent === undefined || targetParent.numChildren === undefined) {\r\n return false;\r\n }\r\n\r\n if (targetParentId !== undefined && this.areNodesRelated(sourceNodeId, targetParentId)) {\r\n return false;\r\n }\r\n\r\n this._tree.moveNode(sourceNode.parentId, sourceNodeId, targetParentId, targetIndex);\r\n\r\n const sourceParent = sourceNode.parentId === undefined ? this._rootNode : this.getNode(sourceNode.parentId);\r\n assert(sourceParent !== undefined);\r\n MutableTreeModel.setNumChildrenForNode(sourceParent, this._tree.getChildren(sourceNode.parentId));\r\n MutableTreeModel.setNumChildrenForNode(targetParent, this._tree.getChildren(targetParentId));\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (sourceNode.parentId as string | undefined) = targetParentId;\r\n\r\n const updateDepths = (parentId: string, depth: number) => {\r\n const node = this.getNode(parentId);\r\n assert(node !== undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (node.depth as number) = depth;\r\n for (const [nodeId] of this.getChildren(parentId)?.iterateValues() ?? []) {\r\n updateDepths(nodeId, depth + 1);\r\n }\r\n };\r\n\r\n updateDepths(sourceNodeId, targetParent.depth + 1);\r\n return true;\r\n }\r\n\r\n private areNodesRelated(ancestorNodeId: string, descendantNodeId: string): boolean {\r\n const node = this.getNode(descendantNodeId);\r\n if (node === undefined || node.parentId === undefined) {\r\n return false;\r\n }\r\n\r\n return node.parentId === ancestorNodeId ? true : this.areNodesRelated(ancestorNodeId, node.parentId);\r\n }\r\n\r\n /**\r\n * Sets the number of child nodes a parent is expected to contain. All child nodes of this parent will be subsequently\r\n * removed.\r\n */\r\n public setNumChildren(parentId: string | undefined, numChildren: number | undefined): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (parentNode.numChildren as number | undefined) = numChildren;\r\n this._tree.setNumChildren(parentId, numChildren ?? 0);\r\n }\r\n\r\n /** Removes children specified by id.\r\n * @param parentId id of the parent node.\r\n * @param child child node id or index that should be removed.\r\n */\r\n public removeChild(parentId: string | undefined, child: string | number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n this._tree.removeChild(parentId, child);\r\n\r\n // istanbul ignore else\r\n if (parentNode)\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /** Removes all children for parent specified by id.\r\n * @param parentId id of parent node or undefined to remove root nodes.\r\n */\r\n public clearChildren(parentId: string | undefined) {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode !== undefined) {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (parentNode.numChildren as number | undefined) = undefined;\r\n }\r\n this._tree.deleteSubtree(parentId, false);\r\n }\r\n\r\n /** Iterates over all nodes present in the tree model. */\r\n public * iterateTreeModelNodes(parentId?: string): IterableIterator<MutableTreeModelNode> {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const _this = this;\r\n function* iterateDescendants(subParentId: string | undefined): IterableIterator<MutableTreeModelNode> {\r\n const children = _this.getChildren(subParentId);\r\n if (children === undefined) {\r\n return;\r\n }\r\n\r\n for (const [nodeId] of children.iterateValues()) {\r\n const node = _this.getNode(nodeId);\r\n if (node !== undefined) {\r\n yield node;\r\n yield* iterateDescendants(nodeId);\r\n }\r\n }\r\n }\r\n\r\n yield* iterateDescendants(parentId);\r\n }\r\n\r\n private static setNumChildrenForNode(node: TreeModelRootNode | MutableTreeModelNode, children: SparseArray<string> | undefined) {\r\n const numChildren = children ? children.getLength() : undefined;\r\n if (node.numChildren === numChildren)\r\n return;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (node.numChildren as number | undefined) = numChildren;\r\n }\r\n\r\n private static createTreeModelNode(parentNode: TreeModelNode | TreeModelRootNode, input: TreeModelNodeInput): MutableTreeModelNode {\r\n return {\r\n id: input.id,\r\n parentId: parentNode.id,\r\n depth: parentNode.depth + 1,\r\n\r\n isLoading: input.isLoading,\r\n numChildren: input.numChildren,\r\n\r\n description: input.description || \"\",\r\n isExpanded: input.isExpanded,\r\n label: input.label,\r\n isSelected: input.isSelected,\r\n isSelectionDisabled: input.item.isSelectionDisabled,\r\n\r\n checkbox: {\r\n state: input.item.checkBoxState || CheckBoxState.Off,\r\n isDisabled: !!input.item.isCheckboxDisabled,\r\n isVisible: !!input.item.isCheckboxVisible,\r\n },\r\n\r\n item: _.cloneDeep(input.item),\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Generates flat list of visible nodes in the tree model.\r\n * @public\r\n */\r\nexport function computeVisibleNodes(model: TreeModel): VisibleTreeNodes {\r\n const result = getVisibleDescendants(model, model.getRootNode());\r\n return {\r\n getNumNodes: () => result.length,\r\n getAtIndex: (index: number): TreeModelNode | TreeModelNodePlaceholder | undefined => {\r\n return result[index];\r\n },\r\n getModel: () => model,\r\n getNumRootNodes: () => model.getRootNode().numChildren,\r\n [Symbol.iterator]: () => result[Symbol.iterator](),\r\n getIndexOfNode: (nodeId: string): number => {\r\n return result.findIndex((visibleNode) => (visibleNode as TreeModelNode).id === nodeId);\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Traverses the tree and collects visible descendants.\r\n * @public\r\n */\r\nexport function getVisibleDescendants(\r\n model: TreeModel,\r\n parentNode: TreeModelNode | TreeModelRootNode,\r\n result: Array<TreeModelNode | TreeModelNodePlaceholder> = [],\r\n): Array<TreeModelNode | TreeModelNodePlaceholder> {\r\n const children = model.getChildren(parentNode.id);\r\n if (!children) {\r\n return result;\r\n }\r\n\r\n let index = 0;\r\n for (const childId of children) {\r\n if (childId === undefined) {\r\n result.push({ parentId: parentNode.id, depth: parentNode.depth + 1, childIndex: index });\r\n } else {\r\n const childNode = model.getNode(childId);\r\n if (childNode === undefined) {\r\n // node was disposed\r\n result.push({ parentId: parentNode.id, depth: parentNode.depth + 1, childIndex: index });\r\n } else {\r\n result.push(childNode);\r\n if (childNode.isExpanded && childNode.numChildren !== undefined) {\r\n getVisibleDescendants(model, childNode, result);\r\n }\r\n }\r\n }\r\n ++index;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction cloneSubree(source: TreeModel, target: MutableTreeModel, parentId: string | undefined): void {\r\n target.setNumChildren(\r\n parentId,\r\n (parentId === undefined ? source.getRootNode() : source.getNode(parentId)!).numChildren,\r\n );\r\n for (const [childId, index] of source.getChildren(parentId)?.iterateValues() ?? []) {\r\n const node = source.getNode(childId)!;\r\n target.setChildren(parentId, [{ ...node, isLoading: !!node.isLoading }], index);\r\n cloneSubree(source, target, childId);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TreeModel.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeModel.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 Tree\r\n */\r\n\r\nimport { immerable } from \"immer\";\r\nimport { cloneDeep } from \"lodash\";\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\r\nimport { CheckBoxState } from \"@itwin/core-react\";\r\nimport { DelayLoadedTreeNodeItem, ImmediatelyLoadedTreeNodeItem, TreeNodeItem } from \"../TreeDataProvider\";\r\nimport { SparseArray, SparseTree } from \"./internal/SparseTree\";\r\n\r\n/**\r\n * Immutable data structure that describes tree node.\r\n * @public\r\n */\r\nexport interface TreeModelNode {\r\n readonly id: string;\r\n readonly parentId: string | undefined;\r\n readonly depth: number;\r\n\r\n readonly isLoading?: boolean;\r\n readonly numChildren: number | undefined;\r\n\r\n readonly description: string | undefined;\r\n readonly isExpanded: boolean;\r\n readonly label: PropertyRecord;\r\n readonly isSelected: boolean;\r\n readonly isSelectionDisabled?: boolean;\r\n\r\n /** Specifies that node is in editing mode. It holds callbacks that are used by node editor. */\r\n readonly editingInfo?: TreeModelNodeEditingInfo;\r\n\r\n readonly checkbox: CheckBoxInfo;\r\n\r\n readonly item: TreeNodeItem;\r\n}\r\n\r\n/**\r\n * Immutable data structure that describes checkbox info.\r\n * @public\r\n */\r\nexport interface CheckBoxInfo {\r\n readonly state: CheckBoxState;\r\n readonly tooltip?: string;\r\n readonly isDisabled: boolean;\r\n readonly isVisible: boolean;\r\n}\r\n\r\n/**\r\n * Mutable data structure that describes tree node.\r\n * @public\r\n */\r\nexport interface MutableTreeModelNode extends TreeModelNode {\r\n isLoading: boolean;\r\n\r\n description: string;\r\n isExpanded: boolean;\r\n label: PropertyRecord;\r\n isSelected: boolean;\r\n isSelectionDisabled?: boolean;\r\n\r\n /** Specifies that node is in editing mode. It holds callbacks that are used by node editor. */\r\n editingInfo?: TreeModelNodeEditingInfo;\r\n\r\n checkbox: MutableCheckBoxInfo;\r\n\r\n item: TreeNodeItem;\r\n}\r\n\r\n/**\r\n * Data structure that holds callbacks used for tree node editing.\r\n * @public\r\n */\r\nexport interface TreeModelNodeEditingInfo {\r\n onCommit: (node: TreeModelNode, newValue: string) => void;\r\n onCancel: () => void;\r\n}\r\n\r\n/**\r\n * Mutable data structure that describes checkbox info.\r\n * @public\r\n */\r\nexport interface MutableCheckBoxInfo extends CheckBoxInfo {\r\n state: CheckBoxState;\r\n tooltip?: string;\r\n isDisabled: boolean;\r\n isVisible: boolean;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree node placeholder.\r\n * @public\r\n */\r\nexport interface TreeModelNodePlaceholder {\r\n readonly childIndex: number;\r\n readonly depth: number;\r\n readonly parentId?: string;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree root node.\r\n * @public\r\n */\r\nexport interface TreeModelRootNode {\r\n readonly depth: -1;\r\n readonly id: undefined;\r\n readonly numChildren: number | undefined;\r\n}\r\n\r\n/**\r\n * Data structure that describes input used to create tree node.\r\n * @public\r\n */\r\nexport interface TreeModelNodeInput {\r\n readonly description?: string;\r\n readonly isExpanded: boolean;\r\n readonly id: string;\r\n readonly item: TreeNodeItem;\r\n readonly label: PropertyRecord;\r\n readonly isLoading: boolean;\r\n readonly numChildren?: number;\r\n readonly isSelected: boolean;\r\n}\r\n\r\n/**\r\n * Type definition of all tree model nodes.\r\n * @public\r\n */\r\nexport type TreeModelNodeType = TreeModelNode | TreeModelNodePlaceholder | TreeModelRootNode;\r\n\r\n/**\r\n * Checks if object is [[TreeModelNode]]\r\n * @public\r\n */\r\nexport function isTreeModelNode(obj: TreeModelNodeType | undefined): obj is TreeModelNode {\r\n return obj !== undefined && !isTreeModelNodePlaceholder(obj) && !isTreeModelRootNode(obj);\r\n}\r\n\r\n/**\r\n * Checks if object is [[TreeModelNodePlaceholder]]\r\n * @public\r\n */\r\nexport function isTreeModelNodePlaceholder(obj: TreeModelNodeType | undefined): obj is TreeModelNodePlaceholder {\r\n return obj !== undefined && \"childIndex\" in obj;\r\n}\r\n\r\n/**\r\n * Checks if object is [[TreeModelRootNode]]\r\n * @public\r\n */\r\nexport function isTreeModelRootNode(obj: TreeModelNodeType | undefined): obj is TreeModelRootNode {\r\n return obj !== undefined && (obj as TreeModelRootNode).id === undefined && !(\"childIndex\" in obj);\r\n}\r\n\r\n/**\r\n * Type definition of tree node item data.\r\n * @public\r\n */\r\nexport type TreeNodeItemData = ImmediatelyLoadedTreeNodeItem & DelayLoadedTreeNodeItem;\r\n\r\n/**\r\n * Data structure that describes set of visible tree nodes as a flat list.\r\n * @public\r\n */\r\nexport interface VisibleTreeNodes extends Iterable<TreeModelNode | TreeModelNodePlaceholder> {\r\n getNumNodes(): number;\r\n getAtIndex(index: number): TreeModelNode | TreeModelNodePlaceholder | undefined;\r\n getModel(): TreeModel;\r\n getNumRootNodes(): number | undefined;\r\n getIndexOfNode(nodeId: string): number;\r\n}\r\n\r\n/**\r\n * Data structure that describes tree model.\r\n * @public\r\n */\r\nexport interface TreeModel {\r\n getRootNode(): TreeModelRootNode;\r\n\r\n getNode(id: string): TreeModelNode | undefined;\r\n getNode(parentId: string | undefined, childIndex: number): TreeModelNode | TreeModelNodePlaceholder | undefined;\r\n getNode(nodeId: string | undefined, childIndex?: number): TreeModelNode | TreeModelNodePlaceholder | TreeModelRootNode | undefined;\r\n\r\n getChildren(parentId: string | undefined): SparseArray<string> | undefined;\r\n getChildOffset(parentId: string | undefined, childId: string): number | undefined;\r\n\r\n iterateTreeModelNodes(parentId?: string): IterableIterator<TreeModelNode>;\r\n}\r\n\r\n/**\r\n * Mutable tree model which holds nodes and allows adding or removing them.\r\n * @public\r\n */\r\nexport class MutableTreeModel implements TreeModel {\r\n public [immerable] = true;\r\n\r\n private _tree = new SparseTree<MutableTreeModelNode>();\r\n private _rootNode: TreeModelRootNode = { depth: -1, id: undefined, numChildren: undefined };\r\n\r\n public constructor(seed?: TreeModel) {\r\n if (!seed) {\r\n return;\r\n }\r\n\r\n cloneSubree(seed, this, undefined);\r\n }\r\n\r\n /** Returns root node of a tree. This node is not visible and is there to allow having multiple visible root nodes. */\r\n public getRootNode(): TreeModelRootNode {\r\n return this._rootNode;\r\n }\r\n\r\n /** Returns tree node or placeholder for node that is not loaded yet.\r\n * @returns node, node placeholder or undefined if node is not found in model.\r\n */\r\n public getNode(id: string): MutableTreeModelNode | undefined;\r\n public getNode(parentId: string | undefined, childIndex: number): MutableTreeModelNode | TreeModelNodePlaceholder | undefined;\r\n public getNode(nodeId: string | undefined, childIndex?: number): MutableTreeModelNode | TreeModelNodePlaceholder | undefined {\r\n if (childIndex === undefined) {\r\n return this._tree.getNode(nodeId!);\r\n }\r\n\r\n const children = this._tree.getChildren(nodeId);\r\n const childId = children !== undefined ? children.get(childIndex) : undefined;\r\n if (childId !== undefined) {\r\n return this._tree.getNode(childId);\r\n }\r\n\r\n const parentNode = nodeId === undefined ? this._rootNode : this._tree.getNode(nodeId);\r\n if (parentNode !== undefined) {\r\n return {\r\n childIndex,\r\n depth: parentNode.depth + 1,\r\n parentId: nodeId,\r\n };\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /** Returns children for specific parent.\r\n * @param parentId id of parent node.\r\n * @returns children of parent node or root nodes if undefined is passed as parent id.\r\n */\r\n public getChildren(parentId: string | undefined): SparseArray<string> | undefined {\r\n return this._tree.getChildren(parentId);\r\n }\r\n\r\n /** Returns children offset in children array for specific parent. */\r\n public getChildOffset(parentId: string | undefined, childId: string): number | undefined {\r\n return this._tree.getChildOffset(parentId, childId);\r\n }\r\n\r\n /**\r\n * Sets children for parent node starting from the specific offset.\r\n * If offset overlaps with already added nodes, the overlapping nodes are overwritten.\r\n */\r\n public setChildren(parentId: string | undefined, nodeInputs: TreeModelNodeInput[], offset: number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined)\r\n return;\r\n\r\n const children: MutableTreeModelNode[] = [];\r\n for (const input of nodeInputs) {\r\n const child = MutableTreeModel.createTreeModelNode(parentNode, input);\r\n children.push(child);\r\n }\r\n\r\n this._tree.setChildren(parentNode.id, children, offset);\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /**\r\n * Inserts child in the specified position.\r\n * If offset is higher then current length of children array, the length is increased.\r\n */\r\n public insertChild(parentId: string | undefined, childNodeInput: TreeModelNodeInput, offset: number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined)\r\n return;\r\n\r\n const child = MutableTreeModel.createTreeModelNode(parentNode, childNodeInput);\r\n\r\n this._tree.insertChild(parentNode.id, child, offset);\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /**\r\n * Changes the id of target node.\r\n * @returns `true` on success, `false` otherwise.\r\n */\r\n public changeNodeId(currentId: string, newId: string): boolean {\r\n const node = this.getNode(currentId);\r\n if (node === undefined) {\r\n return false;\r\n }\r\n\r\n if (currentId === newId) {\r\n return true;\r\n }\r\n\r\n const index = this.getChildOffset(node.parentId, currentId);\r\n assert(index !== undefined);\r\n\r\n if (!this._tree.setNodeId(node.parentId, index, newId)) {\r\n return false;\r\n }\r\n\r\n (node.id as string) = newId; // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion\r\n for (const [childId] of this.getChildren(newId)?.iterateValues() ?? []) {\r\n const child = this.getNode(childId);\r\n assert(child !== undefined);\r\n (child.parentId as string) = newId;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Transfers node along with its children to a new location. Fails if destination has undefined child count.\r\n * @param sourceNodeId Node that is being moved.\r\n * @param targetParentId Node that will receive a new child.\r\n * @param targetIndex Insertion location among target's *current* children.\r\n * @returns `true` on success, `false` otherwise.\r\n */\r\n public moveNode(sourceNodeId: string, targetParentId: string | undefined, targetIndex: number): boolean {\r\n const sourceNode = this.getNode(sourceNodeId);\r\n if (sourceNode === undefined) {\r\n return false;\r\n }\r\n\r\n const targetParent = targetParentId === undefined ? this._rootNode : this.getNode(targetParentId);\r\n if (targetParent === undefined || targetParent.numChildren === undefined) {\r\n return false;\r\n }\r\n\r\n if (targetParentId !== undefined && this.areNodesRelated(sourceNodeId, targetParentId)) {\r\n return false;\r\n }\r\n\r\n this._tree.moveNode(sourceNode.parentId, sourceNodeId, targetParentId, targetIndex);\r\n\r\n const sourceParent = sourceNode.parentId === undefined ? this._rootNode : this.getNode(sourceNode.parentId);\r\n assert(sourceParent !== undefined);\r\n MutableTreeModel.setNumChildrenForNode(sourceParent, this._tree.getChildren(sourceNode.parentId));\r\n MutableTreeModel.setNumChildrenForNode(targetParent, this._tree.getChildren(targetParentId));\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (sourceNode.parentId as string | undefined) = targetParentId;\r\n\r\n const updateDepths = (parentId: string, depth: number) => {\r\n const node = this.getNode(parentId);\r\n assert(node !== undefined);\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (node.depth as number) = depth;\r\n for (const [nodeId] of this.getChildren(parentId)?.iterateValues() ?? []) {\r\n updateDepths(nodeId, depth + 1);\r\n }\r\n };\r\n\r\n updateDepths(sourceNodeId, targetParent.depth + 1);\r\n return true;\r\n }\r\n\r\n private areNodesRelated(ancestorNodeId: string, descendantNodeId: string): boolean {\r\n const node = this.getNode(descendantNodeId);\r\n if (node === undefined || node.parentId === undefined) {\r\n return false;\r\n }\r\n\r\n return node.parentId === ancestorNodeId ? true : this.areNodesRelated(ancestorNodeId, node.parentId);\r\n }\r\n\r\n /**\r\n * Sets the number of child nodes a parent is expected to contain. All child nodes of this parent will be subsequently\r\n * removed.\r\n */\r\n public setNumChildren(parentId: string | undefined, numChildren: number | undefined): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode === undefined) {\r\n return;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (parentNode.numChildren as number | undefined) = numChildren;\r\n this._tree.setNumChildren(parentId, numChildren ?? 0);\r\n }\r\n\r\n /** Removes children specified by id.\r\n * @param parentId id of the parent node.\r\n * @param child child node id or index that should be removed.\r\n */\r\n public removeChild(parentId: string | undefined, child: string | number): void {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n this._tree.removeChild(parentId, child);\r\n\r\n // istanbul ignore else\r\n if (parentNode)\r\n MutableTreeModel.setNumChildrenForNode(parentNode, this._tree.getChildren(parentNode.id));\r\n }\r\n\r\n /** Removes all children for parent specified by id.\r\n * @param parentId id of parent node or undefined to remove root nodes.\r\n */\r\n public clearChildren(parentId: string | undefined) {\r\n const parentNode = parentId === undefined ? this._rootNode : this._tree.getNode(parentId);\r\n if (parentNode !== undefined) {\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (parentNode.numChildren as number | undefined) = undefined;\r\n }\r\n this._tree.deleteSubtree(parentId, false);\r\n }\r\n\r\n /** Iterates over all nodes present in the tree model. */\r\n public * iterateTreeModelNodes(parentId?: string): IterableIterator<MutableTreeModelNode> {\r\n // eslint-disable-next-line @typescript-eslint/no-this-alias\r\n const _this = this;\r\n function* iterateDescendants(subParentId: string | undefined): IterableIterator<MutableTreeModelNode> {\r\n const children = _this.getChildren(subParentId);\r\n if (children === undefined) {\r\n return;\r\n }\r\n\r\n for (const [nodeId] of children.iterateValues()) {\r\n const node = _this.getNode(nodeId);\r\n if (node !== undefined) {\r\n yield node;\r\n yield* iterateDescendants(nodeId);\r\n }\r\n }\r\n }\r\n\r\n yield* iterateDescendants(parentId);\r\n }\r\n\r\n private static setNumChildrenForNode(node: TreeModelRootNode | MutableTreeModelNode, children: SparseArray<string> | undefined) {\r\n const numChildren = children ? children.getLength() : undefined;\r\n if (node.numChildren === numChildren)\r\n return;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\r\n (node.numChildren as number | undefined) = numChildren;\r\n }\r\n\r\n private static createTreeModelNode(parentNode: TreeModelNode | TreeModelRootNode, input: TreeModelNodeInput): MutableTreeModelNode {\r\n return {\r\n id: input.id,\r\n parentId: parentNode.id,\r\n depth: parentNode.depth + 1,\r\n\r\n isLoading: input.isLoading,\r\n numChildren: input.numChildren,\r\n\r\n description: input.description || \"\",\r\n isExpanded: input.isExpanded,\r\n label: input.label,\r\n isSelected: input.isSelected,\r\n isSelectionDisabled: input.item.isSelectionDisabled,\r\n\r\n checkbox: {\r\n state: input.item.checkBoxState || CheckBoxState.Off,\r\n isDisabled: !!input.item.isCheckboxDisabled,\r\n isVisible: !!input.item.isCheckboxVisible,\r\n },\r\n\r\n item: cloneDeep(input.item),\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Generates flat list of visible nodes in the tree model.\r\n * @public\r\n */\r\nexport function computeVisibleNodes(model: TreeModel): VisibleTreeNodes {\r\n const result = getVisibleDescendants(model, model.getRootNode());\r\n return {\r\n getNumNodes: () => result.length,\r\n getAtIndex: (index: number): TreeModelNode | TreeModelNodePlaceholder | undefined => {\r\n return result[index];\r\n },\r\n getModel: () => model,\r\n getNumRootNodes: () => model.getRootNode().numChildren,\r\n [Symbol.iterator]: () => result[Symbol.iterator](),\r\n getIndexOfNode: (nodeId: string): number => {\r\n return result.findIndex((visibleNode) => (visibleNode as TreeModelNode).id === nodeId);\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Traverses the tree and collects visible descendants.\r\n * @public\r\n */\r\nexport function getVisibleDescendants(\r\n model: TreeModel,\r\n parentNode: TreeModelNode | TreeModelRootNode,\r\n result: Array<TreeModelNode | TreeModelNodePlaceholder> = [],\r\n): Array<TreeModelNode | TreeModelNodePlaceholder> {\r\n const children = model.getChildren(parentNode.id);\r\n if (!children) {\r\n return result;\r\n }\r\n\r\n let index = 0;\r\n for (const childId of children) {\r\n if (childId === undefined) {\r\n result.push({ parentId: parentNode.id, depth: parentNode.depth + 1, childIndex: index });\r\n } else {\r\n const childNode = model.getNode(childId);\r\n if (childNode === undefined) {\r\n // node was disposed\r\n result.push({ parentId: parentNode.id, depth: parentNode.depth + 1, childIndex: index });\r\n } else {\r\n result.push(childNode);\r\n if (childNode.isExpanded && childNode.numChildren !== undefined) {\r\n getVisibleDescendants(model, childNode, result);\r\n }\r\n }\r\n }\r\n ++index;\r\n }\r\n\r\n return result;\r\n}\r\n\r\nfunction cloneSubree(source: TreeModel, target: MutableTreeModel, parentId: string | undefined): void {\r\n target.setNumChildren(\r\n parentId,\r\n (parentId === undefined ? source.getRootNode() : source.getNode(parentId)!).numChildren,\r\n );\r\n for (const [childId, index] of source.getChildren(parentId)?.iterateValues() ?? []) {\r\n const node = source.getNode(childId)!;\r\n target.setChildren(parentId, [{ ...node, isLoading: !!node.isLoading }], index);\r\n cloneSubree(source, target, childId);\r\n }\r\n}\r\n"]}