@itwin/components-react 4.0.0-dev.20 → 4.0.0-dev.21

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 (446) hide show
  1. package/lib/cjs/components-react/UiComponents.js.map +1 -1
  2. package/lib/cjs/components-react/_target.scss +9 -9
  3. package/lib/cjs/components-react/common/DateUtils.js.map +1 -1
  4. package/lib/cjs/components-react/common/DelayedSpinner.js.map +1 -1
  5. package/lib/cjs/components-react/common/HighlightedText.js.map +1 -1
  6. package/lib/cjs/components-react/common/HighlightingComponentProps.js.map +1 -1
  7. package/lib/cjs/components-react/common/IImageLoader.js.map +1 -1
  8. package/lib/cjs/components-react/common/ImageRenderer.js.map +1 -1
  9. package/lib/cjs/components-react/common/Links.js.map +1 -1
  10. package/lib/cjs/components-react/common/PageOptions.js.map +1 -1
  11. package/lib/cjs/components-react/common/SubscriptionScheduler.js.map +1 -1
  12. package/lib/cjs/components-react/common/UseAsyncValue.js.map +1 -1
  13. package/lib/cjs/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  14. package/lib/cjs/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  15. package/lib/cjs/components-react/common/UseRerender.js.map +1 -1
  16. package/lib/cjs/components-react/common/countMatchesInString.js.map +1 -1
  17. package/lib/cjs/components-react/common/selection/SelectionHandler.js.map +1 -1
  18. package/lib/cjs/components-react/common/selection/SelectionModes.js.map +1 -1
  19. package/lib/cjs/components-react/converters/BooleanTypeConverter.js.map +1 -1
  20. package/lib/cjs/components-react/converters/CompositeTypeConverter.js.map +1 -1
  21. package/lib/cjs/components-react/converters/DateTimeTypeConverter.js.map +1 -1
  22. package/lib/cjs/components-react/converters/EnumTypeConverter.js.map +1 -1
  23. package/lib/cjs/components-react/converters/HexadecimalTypeConverter.js.map +1 -1
  24. package/lib/cjs/components-react/converters/NavigationPropertyTypeConverter.js.map +1 -1
  25. package/lib/cjs/components-react/converters/NumericTypeConverter.js.map +1 -1
  26. package/lib/cjs/components-react/converters/PointTypeConverter.js.map +1 -1
  27. package/lib/cjs/components-react/converters/StringTypeConverter.js.map +1 -1
  28. package/lib/cjs/components-react/converters/TypeConverter.js.map +1 -1
  29. package/lib/cjs/components-react/converters/TypeConverterManager.js.map +1 -1
  30. package/lib/cjs/components-react/converters/valuetypes/ConvertedTypes.js.map +1 -1
  31. package/lib/cjs/components-react/datepicker/DateField.js.map +1 -1
  32. package/lib/cjs/components-react/datepicker/DateField.scss +22 -22
  33. package/lib/cjs/components-react/datepicker/DatePicker.js.map +1 -1
  34. package/lib/cjs/components-react/datepicker/DatePicker.scss +176 -176
  35. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  36. package/lib/cjs/components-react/datepicker/DatePickerPopupButton.scss +57 -57
  37. package/lib/cjs/components-react/datepicker/IntlFormatter.js.map +1 -1
  38. package/lib/cjs/components-react/datepicker/TimeField.js.map +1 -1
  39. package/lib/cjs/components-react/datepicker/TimeField.scss +76 -76
  40. package/lib/cjs/components-react/editors/BooleanEditor.js.map +1 -1
  41. package/lib/cjs/components-react/editors/BooleanEditor.scss +22 -22
  42. package/lib/cjs/components-react/editors/CustomNumberEditor.js.map +1 -1
  43. package/lib/cjs/components-react/editors/CustomNumberEditor.scss +20 -20
  44. package/lib/cjs/components-react/editors/DateTimeEditor.js.map +1 -1
  45. package/lib/cjs/components-react/editors/DateTimeEditor.scss +9 -9
  46. package/lib/cjs/components-react/editors/EditorContainer.js.map +1 -1
  47. package/lib/cjs/components-react/editors/EditorContainer.scss +6 -6
  48. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  49. package/lib/cjs/components-react/editors/EnumButtonGroupEditor.scss +141 -141
  50. package/lib/cjs/components-react/editors/EnumEditor.js.map +1 -1
  51. package/lib/cjs/components-react/editors/EnumEditor.scss +22 -22
  52. package/lib/cjs/components-react/editors/IconEditor.js.map +1 -1
  53. package/lib/cjs/components-react/editors/IconEditor.scss +16 -16
  54. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.js.map +1 -1
  55. package/lib/cjs/components-react/editors/ImageCheckBoxEditor.scss +24 -24
  56. package/lib/cjs/components-react/editors/NumericInputEditor.js.map +1 -1
  57. package/lib/cjs/components-react/editors/NumericInputEditor.scss +16 -16
  58. package/lib/cjs/components-react/editors/PopupButton.js.map +1 -1
  59. package/lib/cjs/components-react/editors/PopupButton.scss +116 -116
  60. package/lib/cjs/components-react/editors/PropertyEditorManager.js.map +1 -1
  61. package/lib/cjs/components-react/editors/SliderEditor.js.map +1 -1
  62. package/lib/cjs/components-react/editors/SliderEditor.scss +13 -13
  63. package/lib/cjs/components-react/editors/TextEditor.js.map +1 -1
  64. package/lib/cjs/components-react/editors/TextEditor.scss +20 -20
  65. package/lib/cjs/components-react/editors/TextareaEditor.js.map +1 -1
  66. package/lib/cjs/components-react/editors/TextareaEditor.scss +14 -14
  67. package/lib/cjs/components-react/editors/ToggleEditor.js.map +1 -1
  68. package/lib/cjs/components-react/editors/ToggleEditor.scss +23 -23
  69. package/lib/cjs/components-react/editors/variables.scss +7 -7
  70. package/lib/cjs/components-react/favorite/FavoritePropertiesRenderer.js.map +1 -1
  71. package/lib/cjs/components-react/favorite/FavoritePropertyList.js.map +1 -1
  72. package/lib/cjs/components-react/filter-builder/FilterBuilder.js.map +1 -1
  73. package/lib/cjs/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  74. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  75. package/lib/cjs/components-react/filter-builder/FilterBuilderRule.scss +38 -38
  76. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  77. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleGroup.scss +68 -68
  78. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  79. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  80. package/lib/cjs/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  81. package/lib/cjs/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  82. package/lib/cjs/components-react/filter-builder/Operators.js.map +1 -1
  83. package/lib/cjs/components-react/filter-builder/Types.js.map +1 -1
  84. package/lib/cjs/components-react/filtering/FilteringInput.js.map +1 -1
  85. package/lib/cjs/components-react/filtering/FilteringInput.scss +58 -58
  86. package/lib/cjs/components-react/filtering/ResultSelector.js.map +1 -1
  87. package/lib/cjs/components-react/filtering/ResultSelector.scss +68 -68
  88. package/lib/cjs/components-react/iconpicker/IconPickerButton.js.map +1 -1
  89. package/lib/cjs/components-react/iconpicker/IconPickerButton.scss +75 -75
  90. package/lib/cjs/components-react/inputs/ParsedInput.js.map +1 -1
  91. package/lib/cjs/components-react/inputs/ParsedInput.scss +23 -23
  92. package/lib/cjs/components-react/properties/ItemStyle.js.map +1 -1
  93. package/lib/cjs/components-react/properties/LinkHandler.js.map +1 -1
  94. package/lib/cjs/components-react/properties/ValueRendererManager.js.map +1 -1
  95. package/lib/cjs/components-react/properties/renderers/ActionButtonList.js.map +1 -1
  96. package/lib/cjs/components-react/properties/renderers/ActionButtonList.scss +25 -25
  97. package/lib/cjs/components-react/properties/renderers/ActionButtonRenderer.js.map +1 -1
  98. package/lib/cjs/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
  99. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
  100. package/lib/cjs/components-react/properties/renderers/NonPrimitivePropertyRenderer.scss +17 -17
  101. package/lib/cjs/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
  102. package/lib/cjs/components-react/properties/renderers/PropertyGridColumns.js.map +1 -1
  103. package/lib/cjs/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  104. package/lib/cjs/components-react/properties/renderers/PropertyView.js.map +1 -1
  105. package/lib/cjs/components-react/properties/renderers/PropertyView.scss +106 -106
  106. package/lib/cjs/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
  107. package/lib/cjs/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.js.map +1 -1
  108. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
  109. package/lib/cjs/components-react/properties/renderers/label/PropertyLabelRenderer.scss +88 -88
  110. package/lib/cjs/components-react/properties/renderers/value/ArrayPropertyValueRenderer.js.map +1 -1
  111. package/lib/cjs/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
  112. package/lib/cjs/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  113. package/lib/cjs/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  114. package/lib/cjs/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
  115. package/lib/cjs/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
  116. package/lib/cjs/components-react/properties/renderers/value/StructPropertyValueRenderer.js.map +1 -1
  117. package/lib/cjs/components-react/properties/renderers/value/UrlPropertyValueRenderer.js.map +1 -1
  118. package/lib/cjs/components-react/properties/renderers/value/WithContextStyle.js.map +1 -1
  119. package/lib/cjs/components-react/properties/renderers/value/table/ArrayValueRenderer.js.map +1 -1
  120. package/lib/cjs/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js.map +1 -1
  121. package/lib/cjs/components-react/properties/renderers/value/table/StructValueRenderer.js.map +1 -1
  122. package/lib/cjs/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
  123. package/lib/cjs/components-react/propertygrid/PropertyDataProvider.js.map +1 -1
  124. package/lib/cjs/components-react/propertygrid/SimplePropertyDataProvider.d.ts +4 -0
  125. package/lib/cjs/components-react/propertygrid/SimplePropertyDataProvider.d.ts.map +1 -1
  126. package/lib/cjs/components-react/propertygrid/SimplePropertyDataProvider.js +17 -4
  127. package/lib/cjs/components-react/propertygrid/SimplePropertyDataProvider.js.map +1 -1
  128. package/lib/cjs/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  129. package/lib/cjs/components-react/propertygrid/component/FlatItemNestedBorderWrapper.js.map +1 -1
  130. package/lib/cjs/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  131. package/lib/cjs/components-react/propertygrid/component/PropertyGrid.scss +73 -73
  132. package/lib/cjs/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
  133. package/lib/cjs/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js.map +1 -1
  134. package/lib/cjs/components-react/propertygrid/component/PropertyList.js.map +1 -1
  135. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  136. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +101 -101
  137. package/lib/cjs/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  138. package/lib/cjs/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
  139. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
  140. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  141. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
  142. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
  143. package/lib/cjs/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js.map +1 -1
  144. package/lib/cjs/components-react/propertygrid/internal/PropertyGridEventHandler.js.map +1 -1
  145. package/lib/cjs/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  146. package/lib/cjs/components-react/propertygrid/internal/PropertyGridModel.js.map +1 -1
  147. package/lib/cjs/components-react/propertygrid/internal/PropertyGridModelChangeEvent.js.map +1 -1
  148. package/lib/cjs/components-react/propertygrid/internal/PropertyGridModelSource.js.map +1 -1
  149. package/lib/cjs/components-react/propertygrid/internal/flat-items/FlatGridItem.js.map +1 -1
  150. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js.map +1 -1
  151. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedPrimitiveProperty.js.map +1 -1
  152. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js.map +1 -1
  153. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
  154. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
  155. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
  156. package/lib/cjs/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
  157. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  158. package/lib/cjs/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
  159. package/lib/cjs/components-react/selectable-content/SelectableContent.js.map +1 -1
  160. package/lib/cjs/components-react/selectable-content/SelectableContent.scss +20 -20
  161. package/lib/cjs/components-react/toolbar/Item.js.map +1 -1
  162. package/lib/cjs/components-react/toolbar/Item.scss +91 -91
  163. package/lib/cjs/components-react/toolbar/ItemWrapper.js.map +1 -1
  164. package/lib/cjs/components-react/toolbar/ItemWrapper.scss +10 -10
  165. package/lib/cjs/components-react/toolbar/Items.js.map +1 -1
  166. package/lib/cjs/components-react/toolbar/Items.scss +96 -96
  167. package/lib/cjs/components-react/toolbar/Overflow.js.map +1 -1
  168. package/lib/cjs/components-react/toolbar/Overflow.scss +57 -57
  169. package/lib/cjs/components-react/toolbar/OverflowPanel.js.map +1 -1
  170. package/lib/cjs/components-react/toolbar/OverflowPanel.scss +37 -37
  171. package/lib/cjs/components-react/toolbar/PopupItem.js.map +1 -1
  172. package/lib/cjs/components-react/toolbar/PopupItem.scss +88 -88
  173. package/lib/cjs/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
  174. package/lib/cjs/components-react/toolbar/PopupItemsPanel.js.map +1 -1
  175. package/lib/cjs/components-react/toolbar/Toolbar.js.map +1 -1
  176. package/lib/cjs/components-react/toolbar/Toolbar.scss +18 -18
  177. package/lib/cjs/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  178. package/lib/cjs/components-react/toolbar/_variables.scss +34 -34
  179. package/lib/cjs/components-react/toolbar/groupPanel/BackArrow.js.map +1 -1
  180. package/lib/cjs/components-react/toolbar/groupPanel/BackArrow.scss +44 -44
  181. package/lib/cjs/components-react/toolbar/groupPanel/Column.js.map +1 -1
  182. package/lib/cjs/components-react/toolbar/groupPanel/Column.scss +9 -9
  183. package/lib/cjs/components-react/toolbar/groupPanel/Columns.js.map +1 -1
  184. package/lib/cjs/components-react/toolbar/groupPanel/Columns.scss +10 -10
  185. package/lib/cjs/components-react/toolbar/groupPanel/Panel.js.map +1 -1
  186. package/lib/cjs/components-react/toolbar/groupPanel/Panel.scss +15 -15
  187. package/lib/cjs/components-react/toolbar/groupPanel/Title.js.map +1 -1
  188. package/lib/cjs/components-react/toolbar/groupPanel/Title.scss +33 -33
  189. package/lib/cjs/components-react/toolbar/groupPanel/_variables.scss +16 -16
  190. package/lib/cjs/components-react/toolbar/groupPanel/tool/Expander.js.map +1 -1
  191. package/lib/cjs/components-react/toolbar/groupPanel/tool/Expander.scss +29 -29
  192. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.js.map +1 -1
  193. package/lib/cjs/components-react/toolbar/groupPanel/tool/Tool.scss +117 -117
  194. package/lib/cjs/components-react/toolbar/groupPanel/tool/_variables.scss +12 -12
  195. package/lib/cjs/components-react/toolbar/useDragInteraction.js.map +1 -1
  196. package/lib/cjs/components-react/toolbar/utilities/Direction.js.map +1 -1
  197. package/lib/cjs/components-react/tree/HighlightingEngine.js.map +1 -1
  198. package/lib/cjs/components-react/tree/HighlightingEngine.scss +7 -7
  199. package/lib/cjs/components-react/tree/ImageLoader.js.map +1 -1
  200. package/lib/cjs/components-react/tree/SimpleTreeDataProvider.js.map +1 -1
  201. package/lib/cjs/components-react/tree/TreeComponentTestId.js.map +1 -1
  202. package/lib/cjs/components-react/tree/TreeDataProvider.js.map +1 -1
  203. package/lib/cjs/components-react/tree/controlled/Observable.js.map +1 -1
  204. package/lib/cjs/components-react/tree/controlled/TreeActions.js.map +1 -1
  205. package/lib/cjs/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
  206. package/lib/cjs/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
  207. package/lib/cjs/components-react/tree/controlled/TreeEvents.js.map +1 -1
  208. package/lib/cjs/components-react/tree/controlled/TreeHooks.js.map +1 -1
  209. package/lib/cjs/components-react/tree/controlled/TreeModel.js.map +1 -1
  210. package/lib/cjs/components-react/tree/controlled/TreeModelSource.js.map +1 -1
  211. package/lib/cjs/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  212. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.js.map +1 -1
  213. package/lib/cjs/components-react/tree/controlled/component/ControlledTree.scss +102 -102
  214. package/lib/cjs/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  215. package/lib/cjs/components-react/tree/controlled/component/NodeContent.scss +27 -27
  216. package/lib/cjs/components-react/tree/controlled/component/TreeNodeEditor.js.map +1 -1
  217. package/lib/cjs/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  218. package/lib/cjs/components-react/tree/controlled/component/TreeRenderer.js.map +1 -1
  219. package/lib/cjs/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
  220. package/lib/cjs/components-react/tree/controlled/internal/TreeModelMutator.js.map +1 -1
  221. package/lib/cjs/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
  222. package/lib/cjs/components-react.js.map +1 -1
  223. package/lib/esm/components-react/UiComponents.js.map +1 -1
  224. package/lib/esm/components-react/_target.scss +9 -9
  225. package/lib/esm/components-react/common/DateUtils.js.map +1 -1
  226. package/lib/esm/components-react/common/DelayedSpinner.js.map +1 -1
  227. package/lib/esm/components-react/common/HighlightedText.js.map +1 -1
  228. package/lib/esm/components-react/common/HighlightingComponentProps.js.map +1 -1
  229. package/lib/esm/components-react/common/IImageLoader.js.map +1 -1
  230. package/lib/esm/components-react/common/ImageRenderer.js.map +1 -1
  231. package/lib/esm/components-react/common/Links.js.map +1 -1
  232. package/lib/esm/components-react/common/PageOptions.js.map +1 -1
  233. package/lib/esm/components-react/common/SubscriptionScheduler.js.map +1 -1
  234. package/lib/esm/components-react/common/UseAsyncValue.js.map +1 -1
  235. package/lib/esm/components-react/common/UseContextWithMandatoryProvider.js.map +1 -1
  236. package/lib/esm/components-react/common/UseDebouncedAsyncValue.js.map +1 -1
  237. package/lib/esm/components-react/common/UseRerender.js.map +1 -1
  238. package/lib/esm/components-react/common/countMatchesInString.js.map +1 -1
  239. package/lib/esm/components-react/common/selection/SelectionHandler.js.map +1 -1
  240. package/lib/esm/components-react/common/selection/SelectionModes.js.map +1 -1
  241. package/lib/esm/components-react/converters/BooleanTypeConverter.js.map +1 -1
  242. package/lib/esm/components-react/converters/CompositeTypeConverter.js.map +1 -1
  243. package/lib/esm/components-react/converters/DateTimeTypeConverter.js.map +1 -1
  244. package/lib/esm/components-react/converters/EnumTypeConverter.js.map +1 -1
  245. package/lib/esm/components-react/converters/HexadecimalTypeConverter.js.map +1 -1
  246. package/lib/esm/components-react/converters/NavigationPropertyTypeConverter.js.map +1 -1
  247. package/lib/esm/components-react/converters/NumericTypeConverter.js.map +1 -1
  248. package/lib/esm/components-react/converters/PointTypeConverter.js.map +1 -1
  249. package/lib/esm/components-react/converters/StringTypeConverter.js.map +1 -1
  250. package/lib/esm/components-react/converters/TypeConverter.js.map +1 -1
  251. package/lib/esm/components-react/converters/TypeConverterManager.js.map +1 -1
  252. package/lib/esm/components-react/converters/valuetypes/ConvertedTypes.js.map +1 -1
  253. package/lib/esm/components-react/datepicker/DateField.js.map +1 -1
  254. package/lib/esm/components-react/datepicker/DateField.scss +22 -22
  255. package/lib/esm/components-react/datepicker/DatePicker.js.map +1 -1
  256. package/lib/esm/components-react/datepicker/DatePicker.scss +176 -176
  257. package/lib/esm/components-react/datepicker/DatePickerPopupButton.js.map +1 -1
  258. package/lib/esm/components-react/datepicker/DatePickerPopupButton.scss +57 -57
  259. package/lib/esm/components-react/datepicker/IntlFormatter.js.map +1 -1
  260. package/lib/esm/components-react/datepicker/TimeField.js.map +1 -1
  261. package/lib/esm/components-react/datepicker/TimeField.scss +76 -76
  262. package/lib/esm/components-react/editors/BooleanEditor.js.map +1 -1
  263. package/lib/esm/components-react/editors/BooleanEditor.scss +22 -22
  264. package/lib/esm/components-react/editors/CustomNumberEditor.js.map +1 -1
  265. package/lib/esm/components-react/editors/CustomNumberEditor.scss +20 -20
  266. package/lib/esm/components-react/editors/DateTimeEditor.js.map +1 -1
  267. package/lib/esm/components-react/editors/DateTimeEditor.scss +9 -9
  268. package/lib/esm/components-react/editors/EditorContainer.js.map +1 -1
  269. package/lib/esm/components-react/editors/EditorContainer.scss +6 -6
  270. package/lib/esm/components-react/editors/EnumButtonGroupEditor.js.map +1 -1
  271. package/lib/esm/components-react/editors/EnumButtonGroupEditor.scss +141 -141
  272. package/lib/esm/components-react/editors/EnumEditor.js.map +1 -1
  273. package/lib/esm/components-react/editors/EnumEditor.scss +22 -22
  274. package/lib/esm/components-react/editors/IconEditor.js.map +1 -1
  275. package/lib/esm/components-react/editors/IconEditor.scss +16 -16
  276. package/lib/esm/components-react/editors/ImageCheckBoxEditor.js.map +1 -1
  277. package/lib/esm/components-react/editors/ImageCheckBoxEditor.scss +24 -24
  278. package/lib/esm/components-react/editors/NumericInputEditor.js.map +1 -1
  279. package/lib/esm/components-react/editors/NumericInputEditor.scss +16 -16
  280. package/lib/esm/components-react/editors/PopupButton.js.map +1 -1
  281. package/lib/esm/components-react/editors/PopupButton.scss +116 -116
  282. package/lib/esm/components-react/editors/PropertyEditorManager.js.map +1 -1
  283. package/lib/esm/components-react/editors/SliderEditor.js.map +1 -1
  284. package/lib/esm/components-react/editors/SliderEditor.scss +13 -13
  285. package/lib/esm/components-react/editors/TextEditor.js.map +1 -1
  286. package/lib/esm/components-react/editors/TextEditor.scss +20 -20
  287. package/lib/esm/components-react/editors/TextareaEditor.js.map +1 -1
  288. package/lib/esm/components-react/editors/TextareaEditor.scss +14 -14
  289. package/lib/esm/components-react/editors/ToggleEditor.js.map +1 -1
  290. package/lib/esm/components-react/editors/ToggleEditor.scss +23 -23
  291. package/lib/esm/components-react/editors/variables.scss +7 -7
  292. package/lib/esm/components-react/favorite/FavoritePropertiesRenderer.js.map +1 -1
  293. package/lib/esm/components-react/favorite/FavoritePropertyList.js.map +1 -1
  294. package/lib/esm/components-react/filter-builder/FilterBuilder.js.map +1 -1
  295. package/lib/esm/components-react/filter-builder/FilterBuilderContext.js.map +1 -1
  296. package/lib/esm/components-react/filter-builder/FilterBuilderRule.js.map +1 -1
  297. package/lib/esm/components-react/filter-builder/FilterBuilderRule.scss +38 -38
  298. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.js.map +1 -1
  299. package/lib/esm/components-react/filter-builder/FilterBuilderRuleGroup.scss +68 -68
  300. package/lib/esm/components-react/filter-builder/FilterBuilderRuleOperator.js.map +1 -1
  301. package/lib/esm/components-react/filter-builder/FilterBuilderRuleProperty.js.map +1 -1
  302. package/lib/esm/components-react/filter-builder/FilterBuilderRuleValue.js.map +1 -1
  303. package/lib/esm/components-react/filter-builder/FilterBuilderState.js.map +1 -1
  304. package/lib/esm/components-react/filter-builder/Operators.js.map +1 -1
  305. package/lib/esm/components-react/filter-builder/Types.js.map +1 -1
  306. package/lib/esm/components-react/filtering/FilteringInput.js.map +1 -1
  307. package/lib/esm/components-react/filtering/FilteringInput.scss +58 -58
  308. package/lib/esm/components-react/filtering/ResultSelector.js.map +1 -1
  309. package/lib/esm/components-react/filtering/ResultSelector.scss +68 -68
  310. package/lib/esm/components-react/iconpicker/IconPickerButton.js.map +1 -1
  311. package/lib/esm/components-react/iconpicker/IconPickerButton.scss +75 -75
  312. package/lib/esm/components-react/inputs/ParsedInput.js.map +1 -1
  313. package/lib/esm/components-react/inputs/ParsedInput.scss +23 -23
  314. package/lib/esm/components-react/properties/ItemStyle.js.map +1 -1
  315. package/lib/esm/components-react/properties/LinkHandler.js.map +1 -1
  316. package/lib/esm/components-react/properties/ValueRendererManager.js.map +1 -1
  317. package/lib/esm/components-react/properties/renderers/ActionButtonList.js.map +1 -1
  318. package/lib/esm/components-react/properties/renderers/ActionButtonList.scss +25 -25
  319. package/lib/esm/components-react/properties/renderers/ActionButtonRenderer.js.map +1 -1
  320. package/lib/esm/components-react/properties/renderers/CommonPropertyRenderer.js.map +1 -1
  321. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.js.map +1 -1
  322. package/lib/esm/components-react/properties/renderers/NonPrimitivePropertyRenderer.scss +17 -17
  323. package/lib/esm/components-react/properties/renderers/PrimitivePropertyRenderer.js.map +1 -1
  324. package/lib/esm/components-react/properties/renderers/PropertyGridColumns.js.map +1 -1
  325. package/lib/esm/components-react/properties/renderers/PropertyRenderer.js.map +1 -1
  326. package/lib/esm/components-react/properties/renderers/PropertyView.js.map +1 -1
  327. package/lib/esm/components-react/properties/renderers/PropertyView.scss +106 -106
  328. package/lib/esm/components-react/properties/renderers/label/NonPrimitivePropertyLabelRenderer.js.map +1 -1
  329. package/lib/esm/components-react/properties/renderers/label/PrimitivePropertyLabelRenderer.js.map +1 -1
  330. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.js.map +1 -1
  331. package/lib/esm/components-react/properties/renderers/label/PropertyLabelRenderer.scss +88 -88
  332. package/lib/esm/components-react/properties/renderers/value/ArrayPropertyValueRenderer.js.map +1 -1
  333. package/lib/esm/components-react/properties/renderers/value/DoublePropertyValueRenderer.js.map +1 -1
  334. package/lib/esm/components-react/properties/renderers/value/MergedPropertyValueRenderer.js.map +1 -1
  335. package/lib/esm/components-react/properties/renderers/value/MultilineTextPropertyValueRenderer.js.map +1 -1
  336. package/lib/esm/components-react/properties/renderers/value/NavigationPropertyValueRenderer.js.map +1 -1
  337. package/lib/esm/components-react/properties/renderers/value/PrimitivePropertyValueRenderer.js.map +1 -1
  338. package/lib/esm/components-react/properties/renderers/value/StructPropertyValueRenderer.js.map +1 -1
  339. package/lib/esm/components-react/properties/renderers/value/UrlPropertyValueRenderer.js.map +1 -1
  340. package/lib/esm/components-react/properties/renderers/value/WithContextStyle.js.map +1 -1
  341. package/lib/esm/components-react/properties/renderers/value/table/ArrayValueRenderer.js.map +1 -1
  342. package/lib/esm/components-react/properties/renderers/value/table/NonPrimitiveValueRenderer.js.map +1 -1
  343. package/lib/esm/components-react/properties/renderers/value/table/StructValueRenderer.js.map +1 -1
  344. package/lib/esm/components-react/propertygrid/PropertyCategoryRendererManager.js.map +1 -1
  345. package/lib/esm/components-react/propertygrid/PropertyDataProvider.js.map +1 -1
  346. package/lib/esm/components-react/propertygrid/SimplePropertyDataProvider.d.ts +4 -0
  347. package/lib/esm/components-react/propertygrid/SimplePropertyDataProvider.d.ts.map +1 -1
  348. package/lib/esm/components-react/propertygrid/SimplePropertyDataProvider.js +17 -4
  349. package/lib/esm/components-react/propertygrid/SimplePropertyDataProvider.js.map +1 -1
  350. package/lib/esm/components-react/propertygrid/component/ColumnResizingPropertyListPropsSupplier.js.map +1 -1
  351. package/lib/esm/components-react/propertygrid/component/FlatItemNestedBorderWrapper.js.map +1 -1
  352. package/lib/esm/components-react/propertygrid/component/PropertyCategoryBlock.js.map +1 -1
  353. package/lib/esm/components-react/propertygrid/component/PropertyGrid.scss +73 -73
  354. package/lib/esm/components-react/propertygrid/component/PropertyGridCommons.js.map +1 -1
  355. package/lib/esm/components-react/propertygrid/component/PropertyGridEventsRelatedPropsSupplier.js.map +1 -1
  356. package/lib/esm/components-react/propertygrid/component/PropertyList.js.map +1 -1
  357. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.js.map +1 -1
  358. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGrid.scss +101 -101
  359. package/lib/esm/components-react/propertygrid/component/VirtualizedPropertyGridWithDataProvider.js.map +1 -1
  360. package/lib/esm/components-react/propertygrid/dataproviders/FilteringDataProvider.js.map +1 -1
  361. package/lib/esm/components-react/propertygrid/dataproviders/filterers/CompositePropertyDataFilterer.js.map +1 -1
  362. package/lib/esm/components-react/propertygrid/dataproviders/filterers/DisplayValuePropertyDataFilterer.js.map +1 -1
  363. package/lib/esm/components-react/propertygrid/dataproviders/filterers/LabelPropertyDataFilterer.js.map +1 -1
  364. package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyCategoryLabelFilterer.js.map +1 -1
  365. package/lib/esm/components-react/propertygrid/dataproviders/filterers/PropertyDataFiltererBase.js.map +1 -1
  366. package/lib/esm/components-react/propertygrid/internal/PropertyGridEventHandler.js.map +1 -1
  367. package/lib/esm/components-react/propertygrid/internal/PropertyGridHooks.js.map +1 -1
  368. package/lib/esm/components-react/propertygrid/internal/PropertyGridModel.js.map +1 -1
  369. package/lib/esm/components-react/propertygrid/internal/PropertyGridModelChangeEvent.js.map +1 -1
  370. package/lib/esm/components-react/propertygrid/internal/PropertyGridModelSource.js.map +1 -1
  371. package/lib/esm/components-react/propertygrid/internal/flat-items/FlatGridItem.js.map +1 -1
  372. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedArrayProperty.js.map +1 -1
  373. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedPrimitiveProperty.js.map +1 -1
  374. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCategorizedStructProperty.js.map +1 -1
  375. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableCustomGridCategory.js.map +1 -1
  376. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableFlatGridItem.js.map +1 -1
  377. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridCategory.js.map +1 -1
  378. package/lib/esm/components-react/propertygrid/internal/flat-items/MutableGridItemFactory.js.map +1 -1
  379. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatNonPrimitivePropertyRenderer.js.map +1 -1
  380. package/lib/esm/components-react/propertygrid/internal/flat-properties/FlatPropertyRenderer.js.map +1 -1
  381. package/lib/esm/components-react/selectable-content/SelectableContent.js.map +1 -1
  382. package/lib/esm/components-react/selectable-content/SelectableContent.scss +20 -20
  383. package/lib/esm/components-react/toolbar/Item.js.map +1 -1
  384. package/lib/esm/components-react/toolbar/Item.scss +91 -91
  385. package/lib/esm/components-react/toolbar/ItemWrapper.js.map +1 -1
  386. package/lib/esm/components-react/toolbar/ItemWrapper.scss +10 -10
  387. package/lib/esm/components-react/toolbar/Items.js.map +1 -1
  388. package/lib/esm/components-react/toolbar/Items.scss +96 -96
  389. package/lib/esm/components-react/toolbar/Overflow.js.map +1 -1
  390. package/lib/esm/components-react/toolbar/Overflow.scss +57 -57
  391. package/lib/esm/components-react/toolbar/OverflowPanel.js.map +1 -1
  392. package/lib/esm/components-react/toolbar/OverflowPanel.scss +37 -37
  393. package/lib/esm/components-react/toolbar/PopupItem.js.map +1 -1
  394. package/lib/esm/components-react/toolbar/PopupItem.scss +88 -88
  395. package/lib/esm/components-react/toolbar/PopupItemWithDrag.js.map +1 -1
  396. package/lib/esm/components-react/toolbar/PopupItemsPanel.js.map +1 -1
  397. package/lib/esm/components-react/toolbar/Toolbar.js.map +1 -1
  398. package/lib/esm/components-react/toolbar/Toolbar.scss +18 -18
  399. package/lib/esm/components-react/toolbar/ToolbarWithOverflow.js.map +1 -1
  400. package/lib/esm/components-react/toolbar/_variables.scss +34 -34
  401. package/lib/esm/components-react/toolbar/groupPanel/BackArrow.js.map +1 -1
  402. package/lib/esm/components-react/toolbar/groupPanel/BackArrow.scss +44 -44
  403. package/lib/esm/components-react/toolbar/groupPanel/Column.js.map +1 -1
  404. package/lib/esm/components-react/toolbar/groupPanel/Column.scss +9 -9
  405. package/lib/esm/components-react/toolbar/groupPanel/Columns.js.map +1 -1
  406. package/lib/esm/components-react/toolbar/groupPanel/Columns.scss +10 -10
  407. package/lib/esm/components-react/toolbar/groupPanel/Panel.js.map +1 -1
  408. package/lib/esm/components-react/toolbar/groupPanel/Panel.scss +15 -15
  409. package/lib/esm/components-react/toolbar/groupPanel/Title.js.map +1 -1
  410. package/lib/esm/components-react/toolbar/groupPanel/Title.scss +33 -33
  411. package/lib/esm/components-react/toolbar/groupPanel/_variables.scss +16 -16
  412. package/lib/esm/components-react/toolbar/groupPanel/tool/Expander.js.map +1 -1
  413. package/lib/esm/components-react/toolbar/groupPanel/tool/Expander.scss +29 -29
  414. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.js.map +1 -1
  415. package/lib/esm/components-react/toolbar/groupPanel/tool/Tool.scss +117 -117
  416. package/lib/esm/components-react/toolbar/groupPanel/tool/_variables.scss +12 -12
  417. package/lib/esm/components-react/toolbar/useDragInteraction.js.map +1 -1
  418. package/lib/esm/components-react/toolbar/utilities/Direction.js.map +1 -1
  419. package/lib/esm/components-react/tree/HighlightingEngine.js.map +1 -1
  420. package/lib/esm/components-react/tree/HighlightingEngine.scss +7 -7
  421. package/lib/esm/components-react/tree/ImageLoader.js.map +1 -1
  422. package/lib/esm/components-react/tree/SimpleTreeDataProvider.js.map +1 -1
  423. package/lib/esm/components-react/tree/TreeComponentTestId.js.map +1 -1
  424. package/lib/esm/components-react/tree/TreeDataProvider.js.map +1 -1
  425. package/lib/esm/components-react/tree/controlled/Observable.js.map +1 -1
  426. package/lib/esm/components-react/tree/controlled/TreeActions.js.map +1 -1
  427. package/lib/esm/components-react/tree/controlled/TreeEventDispatcher.js.map +1 -1
  428. package/lib/esm/components-react/tree/controlled/TreeEventHandler.js.map +1 -1
  429. package/lib/esm/components-react/tree/controlled/TreeEvents.js.map +1 -1
  430. package/lib/esm/components-react/tree/controlled/TreeHooks.js.map +1 -1
  431. package/lib/esm/components-react/tree/controlled/TreeModel.js.map +1 -1
  432. package/lib/esm/components-react/tree/controlled/TreeModelSource.js.map +1 -1
  433. package/lib/esm/components-react/tree/controlled/TreeNodeLoader.js.map +1 -1
  434. package/lib/esm/components-react/tree/controlled/component/ControlledTree.js.map +1 -1
  435. package/lib/esm/components-react/tree/controlled/component/ControlledTree.scss +102 -102
  436. package/lib/esm/components-react/tree/controlled/component/NodeContent.js.map +1 -1
  437. package/lib/esm/components-react/tree/controlled/component/NodeContent.scss +27 -27
  438. package/lib/esm/components-react/tree/controlled/component/TreeNodeEditor.js.map +1 -1
  439. package/lib/esm/components-react/tree/controlled/component/TreeNodeRenderer.js.map +1 -1
  440. package/lib/esm/components-react/tree/controlled/component/TreeRenderer.js.map +1 -1
  441. package/lib/esm/components-react/tree/controlled/internal/SparseTree.js.map +1 -1
  442. package/lib/esm/components-react/tree/controlled/internal/TreeModelMutator.js.map +1 -1
  443. package/lib/esm/components-react/tree/controlled/internal/TreeSelectionManager.js.map +1 -1
  444. package/lib/esm/components-react.js.map +1 -1
  445. package/lib/public/locales/en/UiComponents.json +139 -139
  446. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport { Observable as RxjsObservable } from \"rxjs/internal/Observable\";\nimport { defer } from \"rxjs/internal/observable/defer\";\nimport { from } from \"rxjs/internal/observable/from\";\nimport { of } from \"rxjs/internal/observable/of\";\nimport { concatAll } from \"rxjs/internal/operators/concatAll\";\nimport { concatMap } from \"rxjs/internal/operators/concatMap\";\nimport { finalize } from \"rxjs/internal/operators/finalize\";\nimport { map } from \"rxjs/internal/operators/map\";\nimport { publish } from \"rxjs/internal/operators/publish\";\nimport { refCount } from \"rxjs/internal/operators/refCount\";\nimport { toArray } from \"rxjs/internal/operators/toArray\";\nimport { UiError } from \"@itwin/appui-abstract\";\nimport { scheduleSubscription, SubscriptionScheduler } from \"../../common/SubscriptionScheduler\";\nimport { UiComponents } from \"../../UiComponents\";\nimport {\n ImmediatelyLoadedTreeNodeItem, isTreeDataProviderInterface, isTreeDataProviderMethod, isTreeDataProviderPromise, isTreeDataProviderRaw,\n TreeDataProvider, TreeDataProviderRaw, TreeNodeItem,\n} from \"../TreeDataProvider\";\nimport { Observable, toRxjsObservable } from \"./Observable\";\nimport { isTreeModelNode, MutableTreeModel, TreeModelNode, TreeModelNodeInput, TreeModelRootNode, TreeNodeItemData } from \"./TreeModel\";\nimport { TreeModelSource } from \"./TreeModelSource\";\n\n/**\n * Data structure that describes node load result\n * @public\n */\nexport interface TreeNodeLoadResult {\n loadedNodes: TreeNodeItem[];\n}\n\n/**\n * Tree node loader which is used to load tree nodes.\n * @public\n */\nexport interface ITreeNodeLoader {\n /**\n * Loads node at specified place in tree.\n * @param parentId specifies tree branch\n * @param childIndex specifies offset in the branch.\n */\n loadNode(parentId: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;\n}\n\n/**\n * Tree node loader which uses `TreeDataProvider` to load nodes.\n * @public\n */\nexport interface ITreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends ITreeNodeLoader {\n /** Returns `TreeDataProvider` used to load nodes. */\n readonly dataProvider: TDataProvider;\n}\n\n/**\n * Abstract node loader implementation which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\n private _treeModelSource: TreeModelSource;\n private _loadScheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\n\n protected constructor(modelSource: TreeModelSource) {\n this._treeModelSource = modelSource;\n }\n\n public get modelSource() { return this._treeModelSource; }\n\n /** Do not override this method. @see `load` */\n public loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\n }),\n scheduleSubscription(this._loadScheduler),\n );\n }\n\n /**\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\n * in the hierarchy, etc.)\n */\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\n }\n\n /** An abstract method to load a node at the specific index for the specified parent. */\n protected abstract load(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy>;\n}\n\n/**\n * Abstract node loader with tree data provider which loads nodes into provided model source.\n * @public\n */\nexport abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoader implements ITreeNodeLoaderWithProvider<TDataProvider> {\n private _dataProvider: TDataProvider;\n\n protected constructor(modelSource: TreeModelSource, dataProvider: TDataProvider) {\n super(modelSource);\n this._dataProvider = dataProvider;\n }\n\n public get dataProvider() { return this._dataProvider; }\n}\n\n/**\n * Default tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _activeRequests = new Map<string | undefined, RxjsObservable<TreeNodeLoadResult>>();\n private _scheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n }\n\n /**\n * Schedules to load children of node and returns an Observable.\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, _childIndex?: number): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const activeRequest = this._activeRequests.get(parentId);\n if (activeRequest) {\n return activeRequest;\n }\n\n const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, parent.numChildren === undefined)\n .pipe(\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\n }),\n scheduleSubscription(this._scheduler),\n finalize(() => this._activeRequests.delete(parentId))\n );\n this._activeRequests.set(parentId, newRequest);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Default paged tree node loader with `TreeDataProvider` implementation.\n * @public\n */\nexport class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\n private _treeDataSource: TreeDataSource;\n private _pageSize: number;\n private _activePageRequests: Map<string | undefined, Map<number, Observable<TreeNodeLoadResult>>>;\n private _scheduler: SubscriptionScheduler<TreeNodeLoadResult>;\n\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number) {\n super(modelSource, dataProvider);\n this._treeDataSource = new TreeDataSource(dataProvider);\n this._pageSize = pageSize;\n this._activePageRequests = new Map();\n this._scheduler = new SubscriptionScheduler();\n }\n\n /** Returns page size used by tree node loader. */\n public get pageSize(): number { return this._pageSize; }\n\n /**\n * Schedules to load one page of node children and returns an Observable.\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\n */\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\n return defer(() => {\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\n const parentId = parentItem?.id;\n const parentPageRequests = this._activePageRequests.get(parentId)\n ?? new Map<number, Observable<TreeNodeLoadResult>>();\n const page = Math.trunc(childIndex / this._pageSize);\n const activeRequest = parentPageRequests.get(page);\n if (activeRequest) {\n return activeRequest;\n }\n\n const startIndex = page * this._pageSize;\n const newRequest = requestLoadedHierarchy(\n parentItem,\n this._treeDataSource,\n startIndex,\n this._pageSize,\n parent.numChildren === undefined,\n ).pipe(\n map((loadedHierarchy) => {\n this.updateModel(loadedHierarchy);\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\n }),\n scheduleSubscription(this._scheduler),\n finalize(() => {\n parentPageRequests.delete(page);\n if (parentPageRequests.size === 0) {\n this._activePageRequests.delete(parentId);\n }\n }),\n );\n\n parentPageRequests.set(page, newRequest);\n this._activePageRequests.set(parentId, parentPageRequests);\n return newRequest;\n });\n }\n\n // istanbul ignore next\n protected load(): Observable<LoadedNodeHierarchy> {\n throw new Error(\"Method not implemented.\");\n }\n}\n\n/**\n * Data structure that describes hierarchy loaded for parent node.\n * @public\n */\nexport interface LoadedNodeHierarchy {\n /** Node id of the parent node for loaded hierarchy. */\n parentId: string | undefined;\n /** Hierarchy items offset in parent node children array. */\n offset: number;\n /** Loaded hierarchy items. */\n hierarchyItems: LoadedNodeHierarchyItem[];\n /** Number of children parent node has. */\n numChildren?: number;\n}\n\n/**\n * Data structure that describes one loaded hierarchy item.\n * @public\n */\nexport interface LoadedNodeHierarchyItem {\n /** Loaded tree node item. */\n item: TreeNodeItemData;\n /** Children of loaded tree node item. */\n children?: LoadedNodeHierarchyItem[];\n /** Number of children tree node item has. */\n numChildren?: number;\n}\n\nfunction requestLoadedHierarchy(\n parentItem: TreeNodeItem | undefined,\n dataSource: TreeDataSource,\n start: number,\n take: number,\n requestNumChildren: boolean,\n) {\n const parentId = parentItem && parentItem.id;\n return dataSource.requestItems(parentItem, start, take, requestNumChildren)\n .pipe(\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\n .pipe(\n map((hierarchyItems) => ({\n parentId,\n offset: start,\n hierarchyItems,\n numChildren,\n })),\n ),\n ),\n );\n}\n\nfunction loadHierarchy(rootItems: TreeNodeItemData[], dataSource: TreeDataSource, take: number): RxjsObservable<LoadedNodeHierarchyItem[]> {\n return from(rootItems)\n .pipe(\n concatMap((item) => {\n if (!item.autoExpand || item.children) {\n return of(convertToLoadedNodeHierarchyItem(item));\n }\n\n return dataSource.requestItems(item, 0, take, true)\n .pipe(\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\n .pipe(\n map((children) => ({ item, children, numChildren })),\n ),\n ),\n );\n }),\n toArray(),\n );\n}\n\nfunction convertToLoadedNodeHierarchyItem(item: TreeNodeItemData): LoadedNodeHierarchyItem {\n return {\n item,\n children: item.children ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child)) : undefined,\n numChildren: item.children ? item.children.length : undefined,\n };\n}\n\nfunction collectTreeNodeItems(hierarchyItems: LoadedNodeHierarchyItem[], result: TreeNodeItem[] = []) {\n for (const hierarchyItem of hierarchyItems) {\n result.push(hierarchyItem.item);\n if (hierarchyItem.children)\n collectTreeNodeItems(hierarchyItem.children, result);\n }\n\n return result;\n}\n\n/** @internal */\nexport function handleLoadedNodeHierarchy(modelSource: TreeModelSource, loadedHierarchy: LoadedNodeHierarchy) {\n modelSource.modifyModel((model) => {\n if (loadedHierarchy.parentId !== undefined) {\n // Make sure the model sill contains the parent node\n /* istanbul ignore if */\n if (model.getNode(loadedHierarchy.parentId) === undefined)\n return;\n }\n\n updateChildren(model, loadedHierarchy.parentId, loadedHierarchy.hierarchyItems, loadedHierarchy.offset, loadedHierarchy.numChildren);\n if (loadedHierarchy.parentId !== undefined) {\n const parentNode = model.getNode(loadedHierarchy.parentId);\n /* istanbul ignore else */\n if (parentNode && parentNode.isLoading && parentNode.numChildren !== undefined) {\n parentNode.isLoading = false;\n }\n }\n });\n}\n\nfunction updateChildren(\n model: MutableTreeModel,\n parentId: string | undefined,\n hierarchyItems: LoadedNodeHierarchyItem[],\n startIndex: number,\n numChildren?: number,\n) {\n // numChildren set to undefined indicates that this is not the first request for children\n if (numChildren !== undefined) {\n model.setNumChildren(parentId, numChildren);\n }\n\n // if children array is undefined do not add children as they should be disposed\n if (model.getChildren(parentId) === undefined) {\n return;\n }\n\n let offset = startIndex;\n for (const hierarchyItem of hierarchyItems) {\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\n const existingNode = model.getNode(hierarchyItem.item.id);\n\n // if same item exists in the same position and is expanded update it without removing it's subtree\n if (!existingNode || !existingNode.isExpanded || model.getChildOffset(parentId, existingNode.id) !== offset || nodeInput.numChildren === 0) {\n model.setChildren(parentId, [nodeInput], offset);\n } else {\n existingNode.label = nodeInput.label;\n existingNode.description = nodeInput.description ?? \"\";\n existingNode.item = nodeInput.item;\n }\n\n if (hierarchyItem.children) {\n updateChildren(model, hierarchyItem.item.id, hierarchyItem.children, 0, hierarchyItem.numChildren);\n }\n offset++;\n }\n}\n\nfunction convertToTreeModelNodeInput(item: TreeNodeItemData): TreeModelNodeInput {\n let numChildren: number | undefined;\n if (item.children) {\n numChildren = item.children.length;\n } else if (!item.hasChildren) {\n numChildren = 0;\n }\n\n return {\n description: item.description,\n isExpanded: !!item.autoExpand,\n id: item.id,\n item,\n label: item.label,\n isLoading: false,\n numChildren,\n isSelected: false,\n };\n}\n\ninterface TreeDataSourceResult {\n loadedItems: TreeNodeItemData[];\n numChildren?: number;\n}\n\n/**\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\n *\n * @internal\n */\nexport class TreeDataSource {\n private _dataProvider: TreeDataProvider;\n\n constructor(dataProvider: TreeDataProvider) {\n this._dataProvider = dataProvider;\n }\n\n public requestItems(\n parent: TreeNodeItem | undefined,\n firstItemIndex: number,\n numItems: number,\n requestNumChildren: boolean,\n ): RxjsObservable<TreeDataSourceResult> {\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\n return defer(async () => {\n if (isTreeDataProviderInterface(this._dataProvider)) {\n const dataProvider = this._dataProvider;\n return from(requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined])\n .pipe(\n concatMap(async (numChildren) => {\n const pageOptions = numItems !== 0 ? { size: numItems, start: firstItemIndex } : undefined;\n return {\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\n numChildren,\n };\n }),\n );\n }\n\n return from(this.getItems(parent))\n .pipe(\n map((loadedItems) => ({\n loadedItems: numItems !== 0 ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems) : loadedItems,\n numChildren: loadedItems.length,\n })),\n );\n })\n .pipe(\n concatAll(),\n publish(),\n refCount(),\n );\n }\n\n private async getItems(parent: TreeNodeItem | undefined): Promise<TreeNodeItemData[]> {\n if (isTreeDataProviderRaw(this._dataProvider)) {\n return this.getChildren(this._dataProvider, parent);\n }\n\n if (isTreeDataProviderMethod(this._dataProvider)) {\n return this._dataProvider(parent);\n }\n\n if (isTreeDataProviderPromise(this._dataProvider)) {\n this._dataProvider = await this._dataProvider;\n return this.getChildren(this._dataProvider, parent);\n }\n\n throw new UiError(UiComponents.loggerCategory(this), \"Unsupported TreeDataProvider.\");\n }\n\n private getChildren(rawProvider: TreeDataProviderRaw, parent: TreeNodeItem | undefined): TreeNodeItemData[] {\n if (parent === undefined)\n return rawProvider;\n\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\n }\n}\n"]}
1
+ {"version":3,"file":"TreeNodeLoader.js","sourceRoot":"","sources":["../../../../../src/components-react/tree/controlled/TreeNodeLoader.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 { Observable as RxjsObservable } from \"rxjs/internal/Observable\";\r\nimport { defer } from \"rxjs/internal/observable/defer\";\r\nimport { from } from \"rxjs/internal/observable/from\";\r\nimport { of } from \"rxjs/internal/observable/of\";\r\nimport { concatAll } from \"rxjs/internal/operators/concatAll\";\r\nimport { concatMap } from \"rxjs/internal/operators/concatMap\";\r\nimport { finalize } from \"rxjs/internal/operators/finalize\";\r\nimport { map } from \"rxjs/internal/operators/map\";\r\nimport { publish } from \"rxjs/internal/operators/publish\";\r\nimport { refCount } from \"rxjs/internal/operators/refCount\";\r\nimport { toArray } from \"rxjs/internal/operators/toArray\";\r\nimport { UiError } from \"@itwin/appui-abstract\";\r\nimport { scheduleSubscription, SubscriptionScheduler } from \"../../common/SubscriptionScheduler\";\r\nimport { UiComponents } from \"../../UiComponents\";\r\nimport {\r\n ImmediatelyLoadedTreeNodeItem, isTreeDataProviderInterface, isTreeDataProviderMethod, isTreeDataProviderPromise, isTreeDataProviderRaw,\r\n TreeDataProvider, TreeDataProviderRaw, TreeNodeItem,\r\n} from \"../TreeDataProvider\";\r\nimport { Observable, toRxjsObservable } from \"./Observable\";\r\nimport { isTreeModelNode, MutableTreeModel, TreeModelNode, TreeModelNodeInput, TreeModelRootNode, TreeNodeItemData } from \"./TreeModel\";\r\nimport { TreeModelSource } from \"./TreeModelSource\";\r\n\r\n/**\r\n * Data structure that describes node load result\r\n * @public\r\n */\r\nexport interface TreeNodeLoadResult {\r\n loadedNodes: TreeNodeItem[];\r\n}\r\n\r\n/**\r\n * Tree node loader which is used to load tree nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoader {\r\n /**\r\n * Loads node at specified place in tree.\r\n * @param parentId specifies tree branch\r\n * @param childIndex specifies offset in the branch.\r\n */\r\n loadNode(parentId: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult>;\r\n}\r\n\r\n/**\r\n * Tree node loader which uses `TreeDataProvider` to load nodes.\r\n * @public\r\n */\r\nexport interface ITreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends ITreeNodeLoader {\r\n /** Returns `TreeDataProvider` used to load nodes. */\r\n readonly dataProvider: TDataProvider;\r\n}\r\n\r\n/**\r\n * Abstract node loader implementation which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoader implements ITreeNodeLoader {\r\n private _treeModelSource: TreeModelSource;\r\n private _loadScheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\r\n\r\n protected constructor(modelSource: TreeModelSource) {\r\n this._treeModelSource = modelSource;\r\n }\r\n\r\n public get modelSource() { return this._treeModelSource; }\r\n\r\n /** Do not override this method. @see `load` */\r\n public loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\r\n return toRxjsObservable(this.load(parent, childIndex)).pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._loadScheduler),\r\n );\r\n }\r\n\r\n /**\r\n * A method that's called when `load` loads some nodes and we need to put them into model source. The\r\n * default implementation simply puts loaded child nodes under their parent at correct positions. Concrete\r\n * implementation may override this method to handle loaded nodes in a a custom way (put them at custom locations\r\n * in the hierarchy, etc.)\r\n */\r\n protected updateModel(loadedHierarchy: LoadedNodeHierarchy): void {\r\n handleLoadedNodeHierarchy(this._treeModelSource, loadedHierarchy);\r\n }\r\n\r\n /** An abstract method to load a node at the specific index for the specified parent. */\r\n protected abstract load(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<LoadedNodeHierarchy>;\r\n}\r\n\r\n/**\r\n * Abstract node loader with tree data provider which loads nodes into provided model source.\r\n * @public\r\n */\r\nexport abstract class AbstractTreeNodeLoaderWithProvider<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoader implements ITreeNodeLoaderWithProvider<TDataProvider> {\r\n private _dataProvider: TDataProvider;\r\n\r\n protected constructor(modelSource: TreeModelSource, dataProvider: TDataProvider) {\r\n super(modelSource);\r\n this._dataProvider = dataProvider;\r\n }\r\n\r\n public get dataProvider() { return this._dataProvider; }\r\n}\r\n\r\n/**\r\n * Default tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class TreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\r\n private _treeDataSource: TreeDataSource;\r\n private _activeRequests = new Map<string | undefined, RxjsObservable<TreeNodeLoadResult>>();\r\n private _scheduler = new SubscriptionScheduler<TreeNodeLoadResult>();\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource) {\r\n super(modelSource, dataProvider);\r\n this._treeDataSource = new TreeDataSource(dataProvider);\r\n }\r\n\r\n /**\r\n * Schedules to load children of node and returns an Observable.\r\n * @note It does not start loading node until '.subscribe()' is called on returned Observable.\r\n */\r\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, _childIndex?: number): Observable<TreeNodeLoadResult> {\r\n return defer(() => {\r\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\r\n const parentId = parentItem?.id;\r\n const activeRequest = this._activeRequests.get(parentId);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const newRequest = requestLoadedHierarchy(parentItem, this._treeDataSource, 0, 0, parent.numChildren === undefined)\r\n .pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._scheduler),\r\n finalize(() => this._activeRequests.delete(parentId))\r\n );\r\n this._activeRequests.set(parentId, newRequest);\r\n return newRequest;\r\n });\r\n }\r\n\r\n // istanbul ignore next\r\n protected load(): Observable<LoadedNodeHierarchy> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * Default paged tree node loader with `TreeDataProvider` implementation.\r\n * @public\r\n */\r\nexport class PagedTreeNodeLoader<TDataProvider extends TreeDataProvider> extends AbstractTreeNodeLoaderWithProvider<TDataProvider> {\r\n private _treeDataSource: TreeDataSource;\r\n private _pageSize: number;\r\n private _activePageRequests: Map<string | undefined, Map<number, Observable<TreeNodeLoadResult>>>;\r\n private _scheduler: SubscriptionScheduler<TreeNodeLoadResult>;\r\n\r\n constructor(dataProvider: TDataProvider, modelSource: TreeModelSource, pageSize: number) {\r\n super(modelSource, dataProvider);\r\n this._treeDataSource = new TreeDataSource(dataProvider);\r\n this._pageSize = pageSize;\r\n this._activePageRequests = new Map();\r\n this._scheduler = new SubscriptionScheduler();\r\n }\r\n\r\n /** Returns page size used by tree node loader. */\r\n public get pageSize(): number { return this._pageSize; }\r\n\r\n /**\r\n * Schedules to load one page of node children and returns an Observable.\r\n * @note It does not start loading node page until '.subscribe()' is called on returned Observable.\r\n */\r\n public override loadNode(parent: TreeModelNode | TreeModelRootNode, childIndex: number): Observable<TreeNodeLoadResult> {\r\n return defer(() => {\r\n const parentItem = isTreeModelNode(parent) ? parent.item : undefined;\r\n const parentId = parentItem?.id;\r\n const parentPageRequests = this._activePageRequests.get(parentId)\r\n ?? new Map<number, Observable<TreeNodeLoadResult>>();\r\n const page = Math.trunc(childIndex / this._pageSize);\r\n const activeRequest = parentPageRequests.get(page);\r\n if (activeRequest) {\r\n return activeRequest;\r\n }\r\n\r\n const startIndex = page * this._pageSize;\r\n const newRequest = requestLoadedHierarchy(\r\n parentItem,\r\n this._treeDataSource,\r\n startIndex,\r\n this._pageSize,\r\n parent.numChildren === undefined,\r\n ).pipe(\r\n map((loadedHierarchy) => {\r\n this.updateModel(loadedHierarchy);\r\n return { loadedNodes: collectTreeNodeItems(loadedHierarchy.hierarchyItems) };\r\n }),\r\n scheduleSubscription(this._scheduler),\r\n finalize(() => {\r\n parentPageRequests.delete(page);\r\n if (parentPageRequests.size === 0) {\r\n this._activePageRequests.delete(parentId);\r\n }\r\n }),\r\n );\r\n\r\n parentPageRequests.set(page, newRequest);\r\n this._activePageRequests.set(parentId, parentPageRequests);\r\n return newRequest;\r\n });\r\n }\r\n\r\n // istanbul ignore next\r\n protected load(): Observable<LoadedNodeHierarchy> {\r\n throw new Error(\"Method not implemented.\");\r\n }\r\n}\r\n\r\n/**\r\n * Data structure that describes hierarchy loaded for parent node.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchy {\r\n /** Node id of the parent node for loaded hierarchy. */\r\n parentId: string | undefined;\r\n /** Hierarchy items offset in parent node children array. */\r\n offset: number;\r\n /** Loaded hierarchy items. */\r\n hierarchyItems: LoadedNodeHierarchyItem[];\r\n /** Number of children parent node has. */\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Data structure that describes one loaded hierarchy item.\r\n * @public\r\n */\r\nexport interface LoadedNodeHierarchyItem {\r\n /** Loaded tree node item. */\r\n item: TreeNodeItemData;\r\n /** Children of loaded tree node item. */\r\n children?: LoadedNodeHierarchyItem[];\r\n /** Number of children tree node item has. */\r\n numChildren?: number;\r\n}\r\n\r\nfunction requestLoadedHierarchy(\r\n parentItem: TreeNodeItem | undefined,\r\n dataSource: TreeDataSource,\r\n start: number,\r\n take: number,\r\n requestNumChildren: boolean,\r\n) {\r\n const parentId = parentItem && parentItem.id;\r\n return dataSource.requestItems(parentItem, start, take, requestNumChildren)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((hierarchyItems) => ({\r\n parentId,\r\n offset: start,\r\n hierarchyItems,\r\n numChildren,\r\n })),\r\n ),\r\n ),\r\n );\r\n}\r\n\r\nfunction loadHierarchy(rootItems: TreeNodeItemData[], dataSource: TreeDataSource, take: number): RxjsObservable<LoadedNodeHierarchyItem[]> {\r\n return from(rootItems)\r\n .pipe(\r\n concatMap((item) => {\r\n if (!item.autoExpand || item.children) {\r\n return of(convertToLoadedNodeHierarchyItem(item));\r\n }\r\n\r\n return dataSource.requestItems(item, 0, take, true)\r\n .pipe(\r\n concatMap(({ numChildren, loadedItems }) => loadHierarchy(loadedItems, dataSource, take)\r\n .pipe(\r\n map((children) => ({ item, children, numChildren })),\r\n ),\r\n ),\r\n );\r\n }),\r\n toArray(),\r\n );\r\n}\r\n\r\nfunction convertToLoadedNodeHierarchyItem(item: TreeNodeItemData): LoadedNodeHierarchyItem {\r\n return {\r\n item,\r\n children: item.children ? item.children.map((child) => convertToLoadedNodeHierarchyItem(child)) : undefined,\r\n numChildren: item.children ? item.children.length : undefined,\r\n };\r\n}\r\n\r\nfunction collectTreeNodeItems(hierarchyItems: LoadedNodeHierarchyItem[], result: TreeNodeItem[] = []) {\r\n for (const hierarchyItem of hierarchyItems) {\r\n result.push(hierarchyItem.item);\r\n if (hierarchyItem.children)\r\n collectTreeNodeItems(hierarchyItem.children, result);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function handleLoadedNodeHierarchy(modelSource: TreeModelSource, loadedHierarchy: LoadedNodeHierarchy) {\r\n modelSource.modifyModel((model) => {\r\n if (loadedHierarchy.parentId !== undefined) {\r\n // Make sure the model sill contains the parent node\r\n /* istanbul ignore if */\r\n if (model.getNode(loadedHierarchy.parentId) === undefined)\r\n return;\r\n }\r\n\r\n updateChildren(model, loadedHierarchy.parentId, loadedHierarchy.hierarchyItems, loadedHierarchy.offset, loadedHierarchy.numChildren);\r\n if (loadedHierarchy.parentId !== undefined) {\r\n const parentNode = model.getNode(loadedHierarchy.parentId);\r\n /* istanbul ignore else */\r\n if (parentNode && parentNode.isLoading && parentNode.numChildren !== undefined) {\r\n parentNode.isLoading = false;\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction updateChildren(\r\n model: MutableTreeModel,\r\n parentId: string | undefined,\r\n hierarchyItems: LoadedNodeHierarchyItem[],\r\n startIndex: number,\r\n numChildren?: number,\r\n) {\r\n // numChildren set to undefined indicates that this is not the first request for children\r\n if (numChildren !== undefined) {\r\n model.setNumChildren(parentId, numChildren);\r\n }\r\n\r\n // if children array is undefined do not add children as they should be disposed\r\n if (model.getChildren(parentId) === undefined) {\r\n return;\r\n }\r\n\r\n let offset = startIndex;\r\n for (const hierarchyItem of hierarchyItems) {\r\n const nodeInput = convertToTreeModelNodeInput(hierarchyItem.item);\r\n const existingNode = model.getNode(hierarchyItem.item.id);\r\n\r\n // if same item exists in the same position and is expanded update it without removing it's subtree\r\n if (!existingNode || !existingNode.isExpanded || model.getChildOffset(parentId, existingNode.id) !== offset || nodeInput.numChildren === 0) {\r\n model.setChildren(parentId, [nodeInput], offset);\r\n } else {\r\n existingNode.label = nodeInput.label;\r\n existingNode.description = nodeInput.description ?? \"\";\r\n existingNode.item = nodeInput.item;\r\n }\r\n\r\n if (hierarchyItem.children) {\r\n updateChildren(model, hierarchyItem.item.id, hierarchyItem.children, 0, hierarchyItem.numChildren);\r\n }\r\n offset++;\r\n }\r\n}\r\n\r\nfunction convertToTreeModelNodeInput(item: TreeNodeItemData): TreeModelNodeInput {\r\n let numChildren: number | undefined;\r\n if (item.children) {\r\n numChildren = item.children.length;\r\n } else if (!item.hasChildren) {\r\n numChildren = 0;\r\n }\r\n\r\n return {\r\n description: item.description,\r\n isExpanded: !!item.autoExpand,\r\n id: item.id,\r\n item,\r\n label: item.label,\r\n isLoading: false,\r\n numChildren,\r\n isSelected: false,\r\n };\r\n}\r\n\r\ninterface TreeDataSourceResult {\r\n loadedItems: TreeNodeItemData[];\r\n numChildren?: number;\r\n}\r\n\r\n/**\r\n * Wrapper to handle different types of `TreeDataProvider`. Provides one method\r\n * to request items from `TreeDataProviderRaw`, `TreeDataProviderMethod`,\r\n * `TreeDataProviderPromise` or `TreeDataProviderInterface`.\r\n *\r\n * @internal\r\n */\r\nexport class TreeDataSource {\r\n private _dataProvider: TreeDataProvider;\r\n\r\n constructor(dataProvider: TreeDataProvider) {\r\n this._dataProvider = dataProvider;\r\n }\r\n\r\n public requestItems(\r\n parent: TreeNodeItem | undefined,\r\n firstItemIndex: number,\r\n numItems: number,\r\n requestNumChildren: boolean,\r\n ): RxjsObservable<TreeDataSourceResult> {\r\n // During each async operation there is a chance that data provider will become stale. Create an opportunity to\r\n // unsubscribe after each async operation so that we stop interacting with the stale data provider immediately.\r\n return defer(async () => {\r\n if (isTreeDataProviderInterface(this._dataProvider)) {\r\n const dataProvider = this._dataProvider;\r\n return from(requestNumChildren ? dataProvider.getNodesCount(parent) : [undefined])\r\n .pipe(\r\n concatMap(async (numChildren) => {\r\n const pageOptions = numItems !== 0 ? { size: numItems, start: firstItemIndex } : undefined;\r\n return {\r\n loadedItems: await dataProvider.getNodes(parent, pageOptions),\r\n numChildren,\r\n };\r\n }),\r\n );\r\n }\r\n\r\n return from(this.getItems(parent))\r\n .pipe(\r\n map((loadedItems) => ({\r\n loadedItems: numItems !== 0 ? loadedItems.slice(firstItemIndex, firstItemIndex + numItems) : loadedItems,\r\n numChildren: loadedItems.length,\r\n })),\r\n );\r\n })\r\n .pipe(\r\n concatAll(),\r\n publish(),\r\n refCount(),\r\n );\r\n }\r\n\r\n private async getItems(parent: TreeNodeItem | undefined): Promise<TreeNodeItemData[]> {\r\n if (isTreeDataProviderRaw(this._dataProvider)) {\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n if (isTreeDataProviderMethod(this._dataProvider)) {\r\n return this._dataProvider(parent);\r\n }\r\n\r\n if (isTreeDataProviderPromise(this._dataProvider)) {\r\n this._dataProvider = await this._dataProvider;\r\n return this.getChildren(this._dataProvider, parent);\r\n }\r\n\r\n throw new UiError(UiComponents.loggerCategory(this), \"Unsupported TreeDataProvider.\");\r\n }\r\n\r\n private getChildren(rawProvider: TreeDataProviderRaw, parent: TreeNodeItem | undefined): TreeNodeItemData[] {\r\n if (parent === undefined)\r\n return rawProvider;\r\n\r\n return (parent as ImmediatelyLoadedTreeNodeItem).children ?? [];\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ControlledTree.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/ControlledTree.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,kDAA8D;AAC9D,mEAAgE;AAEhE,wDAAqD;AAErD,mDAAoD;AACpD,gEAA6D;AAE7D,4CAA0I;AAE1I,yDAA6E;AAC7E,iDAAqF;AA4CrF;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAA0B;IACvD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,6BAAe,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,SAAgC,EAAE,EAAE,CAAC,CAC3E,oBAAC,mCAAgB,OACX,SAAS,EACb,kBAAkB,EAAE,KAAK,CAAC,mBAAmB,EAC7C,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,GACzD,CACH,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;IAEjE,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAA,+BAAmB,EAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1F,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAErH,MAAM,SAAS,GAAsB;QACnC,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;QAClD,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;IAEF,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CACL,oBAAC,MAAM,IAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,IACnH,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,oBAAC,2BAAY,OAAK,SAAS,GAAI,CAC9E,CACV,CAAC;AACJ,CAAC;AAjCD,wCAiCC;AAED,SAAS,iBAAiB,CAAC,YAA8B,EAAE,UAA2B;IACpF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,YAAY,CAAC,eAAe,EAAE,KAAK,SAAS,EAAE;YAChD,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC/F,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;SACzC;QAED,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;IACnB,CAAC,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;IAE/B,OAAO,YAAY,CAAC,eAAe,EAAE,KAAK,SAAS,CAAC;AACtD,CAAC;AAED,SAAS,kBAAkB,CAAC,UAA2B,EAAE,UAAsB,EAAE,aAA4B,EAAE,YAA8B;IAC3I,0BAA0B;IAC1B,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,yCAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAErJ,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC;IAEvC,OAAO,eAAe,CAAC;AACzB,CAAC;AAUD,SAAS,MAAM,CAAC,KAAkB;IAChC,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,OAAO,KAAK,CAAC,eAAe;YAC1B,CAAC,CAAC,KAAK,CAAC,eAAe,EAAE;YACzB,CAAC,CAAC,CACA,6BAAK,SAAS,EAAC,kCAAkC;gBAC/C,oBAAC,+BAAc,IAAC,IAAI,EAAC,OAAO,GAAG,CAC3B,CACP,CAAC;KACL;IACD,IAAI,KAAK,CAAC,MAAM,EAAE;QAChB,OAAO,KAAK,CAAC,cAAc;YACzB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE;YACxB,CAAC,CAAC,CACA,oBAAC,yBAAY;gBACX,2BAAG,SAAS,EAAC,wCAAwC,IAClD,2BAAY,CAAC,SAAS,CAAC,gBAAgB,CAAC,CACvC,CACS,CAChB,CAAC;KACL;IAED,OAAO,KAAK,CAAC,QAAQ,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CACpB,mBAA4B;IAE5B,OAAO,KAAK,CAAC,WAAW,CACtB,CAAC,IAA8C,EAAU,EAAE;QACzD,MAAM,aAAa,GAAG,CAAC,IAAA,2BAAe,EAAC,IAAI,CAAC,IAAI,mBAAmB,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3G,MAAM,UAAU,GAAG,CAAC,CAAC;QACrB,uFAAuF;QACvF,OAAO,aAAa,GAAG,UAAU,CAAC;IACpC,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport * as React from \"react\";\nimport { CommonProps, FillCentered } from \"@itwin/core-react\";\nimport { DelayedSpinner } from \"../../../common/DelayedSpinner\";\nimport { SelectionMode } from \"../../../common/selection/SelectionModes\";\nimport { UiComponents } from \"../../../UiComponents\";\nimport { HighlightableTreeProps } from \"../../HighlightingEngine\";\nimport { TreeImageLoader } from \"../../ImageLoader\";\nimport { TreeEventDispatcher } from \"../TreeEventDispatcher\";\nimport { TreeEvents } from \"../TreeEvents\";\nimport { computeVisibleNodes, isTreeModelNode, TreeModel, TreeModelNode, TreeModelNodePlaceholder, VisibleTreeNodes } from \"../TreeModel\";\nimport { ITreeNodeLoader } from \"../TreeNodeLoader\";\nimport { TreeNodeRenderer, TreeNodeRendererProps } from \"./TreeNodeRenderer\";\nimport { RenderedItemsRange, TreeRenderer, TreeRendererProps } from \"./TreeRenderer\";\n\n/**\n * Properties for [[ControlledTree]]\n * @public\n */\nexport interface ControlledTreeProps extends CommonProps {\n /** Model of the tree to display. */\n model: TreeModel;\n /** Node loader used to load root nodes and placeholder nodes. */\n nodeLoader: ITreeNodeLoader;\n /** Tree events handler. */\n eventsHandler: TreeEvents;\n /** Mode of nodes' selection in tree. */\n selectionMode: SelectionMode;\n /**\n * Specifies whether to show node description or not. It is used in default node renderer and to determine node height.\n * If custom node renderer and node height callbacks are used it does nothing.\n */\n descriptionsEnabled?: boolean;\n /**\n * Specifies whether to show node icon or not. It is used in default node renderer.\n * If custom node renderer is used it does nothing.\n */\n iconsEnabled?: boolean;\n /**\n * Used to highlight matches when filtering tree.\n * It is passed to treeRenderer.\n */\n nodeHighlightingProps?: HighlightableTreeProps;\n /** Custom renderer to be used to render a tree. */\n treeRenderer?: (props: TreeRendererProps) => React.ReactElement;\n /** Custom renderer to be used while root nodes is loading. */\n spinnerRenderer?: () => React.ReactElement;\n /** Custom renderer to be used when there is no data to show in tree. */\n noDataRenderer?: () => React.ReactElement;\n /** Callback that is invoked when rendered items range changes. */\n onItemsRendered?: (items: RenderedItemsRange) => void;\n /** Width of the tree renderer. */\n width: number;\n /** Height of the tree renderer. */\n height: number;\n}\n\n/**\n * React tree component which rendering is fully controlled from outside.\n * @public\n */\nexport function ControlledTree(props: ControlledTreeProps) {\n const nodeHeight = useNodeHeight(!!props.descriptionsEnabled);\n const imageLoader = React.useMemo(() => new TreeImageLoader(), []);\n const nodeRenderer = React.useCallback((nodeProps: TreeNodeRendererProps) => (\n <TreeNodeRenderer\n {...nodeProps}\n descriptionEnabled={props.descriptionsEnabled}\n imageLoader={props.iconsEnabled ? imageLoader : undefined}\n />\n ), [props.descriptionsEnabled, props.iconsEnabled, imageLoader]);\n\n const visibleNodes = React.useMemo(() => computeVisibleNodes(props.model), [props.model]);\n const eventDispatcher = useEventDispatcher(props.nodeLoader, props.eventsHandler, props.selectionMode, visibleNodes);\n\n const treeProps: TreeRendererProps = {\n nodeRenderer,\n nodeHeight,\n visibleNodes,\n treeActions: eventDispatcher,\n nodeLoader: props.nodeLoader,\n nodeHighlightingProps: props.nodeHighlightingProps,\n onItemsRendered: props.onItemsRendered,\n width: props.width,\n height: props.height,\n };\n\n const loading = useRootNodeLoader(visibleNodes, props.nodeLoader);\n const noData = visibleNodes.getNumRootNodes() === 0;\n return (\n <Loader loading={loading} noData={noData} spinnerRenderer={props.spinnerRenderer} noDataRenderer={props.noDataRenderer}>\n {props.treeRenderer ? props.treeRenderer(treeProps) : <TreeRenderer {...treeProps} />}\n </Loader>\n );\n}\n\nfunction useRootNodeLoader(visibleNodes: VisibleTreeNodes, nodeLoader: ITreeNodeLoader): boolean {\n React.useEffect(() => {\n if (visibleNodes.getNumRootNodes() === undefined) {\n const subscription = nodeLoader.loadNode(visibleNodes.getModel().getRootNode(), 0).subscribe();\n return () => subscription.unsubscribe();\n }\n\n return () => { };\n }, [visibleNodes, nodeLoader]);\n\n return visibleNodes.getNumRootNodes() === undefined;\n}\n\nfunction useEventDispatcher(nodeLoader: ITreeNodeLoader, treeEvents: TreeEvents, selectionMode: SelectionMode, visibleNodes: VisibleTreeNodes) {\n /* istanbul ignore next */\n const getVisibleNodes = React.useCallback(() => visibleNodes, [visibleNodes]);\n const eventDispatcher = React.useMemo(() => new TreeEventDispatcher(treeEvents, nodeLoader, selectionMode), [treeEvents, nodeLoader, selectionMode]);\n\n React.useEffect(() => {\n eventDispatcher.setVisibleNodes(getVisibleNodes);\n }, [eventDispatcher, getVisibleNodes]);\n\n return eventDispatcher;\n}\n\ninterface LoaderProps {\n loading: boolean;\n noData: boolean;\n spinnerRenderer?: () => React.ReactElement;\n noDataRenderer?: () => React.ReactElement;\n children: JSX.Element;\n}\n\nfunction Loader(props: LoaderProps) {\n if (props.loading) {\n return props.spinnerRenderer\n ? props.spinnerRenderer()\n : (\n <div className=\"components-controlledTree-loader\">\n <DelayedSpinner size=\"large\" />\n </div>\n );\n }\n if (props.noData) {\n return props.noDataRenderer\n ? props.noDataRenderer()\n : (\n <FillCentered>\n <p className=\"components-controlledTree-errorMessage\">\n {UiComponents.translate(\"general.noData\")}\n </p>\n </FillCentered>\n );\n }\n\n return props.children;\n}\n\nfunction useNodeHeight(\n descriptionsEnabled: boolean,\n): (node: TreeModelNode | TreeModelNodePlaceholder) => number {\n return React.useCallback(\n (node: TreeModelNode | TreeModelNodePlaceholder): number => {\n const contentHeight = (isTreeModelNode(node) && descriptionsEnabled && node && node.description) ? 43 : 24;\n const borderSize = 1;\n // Not counting node's border size twice because we want neighboring borders to overlap\n return contentHeight + borderSize;\n },\n [descriptionsEnabled],\n );\n}\n"]}
1
+ {"version":3,"file":"ControlledTree.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/ControlledTree.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 Tree\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { CommonProps, FillCentered } from \"@itwin/core-react\";\r\nimport { DelayedSpinner } from \"../../../common/DelayedSpinner\";\r\nimport { SelectionMode } from \"../../../common/selection/SelectionModes\";\r\nimport { UiComponents } from \"../../../UiComponents\";\r\nimport { HighlightableTreeProps } from \"../../HighlightingEngine\";\r\nimport { TreeImageLoader } from \"../../ImageLoader\";\r\nimport { TreeEventDispatcher } from \"../TreeEventDispatcher\";\r\nimport { TreeEvents } from \"../TreeEvents\";\r\nimport { computeVisibleNodes, isTreeModelNode, TreeModel, TreeModelNode, TreeModelNodePlaceholder, VisibleTreeNodes } from \"../TreeModel\";\r\nimport { ITreeNodeLoader } from \"../TreeNodeLoader\";\r\nimport { TreeNodeRenderer, TreeNodeRendererProps } from \"./TreeNodeRenderer\";\r\nimport { RenderedItemsRange, TreeRenderer, TreeRendererProps } from \"./TreeRenderer\";\r\n\r\n/**\r\n * Properties for [[ControlledTree]]\r\n * @public\r\n */\r\nexport interface ControlledTreeProps extends CommonProps {\r\n /** Model of the tree to display. */\r\n model: TreeModel;\r\n /** Node loader used to load root nodes and placeholder nodes. */\r\n nodeLoader: ITreeNodeLoader;\r\n /** Tree events handler. */\r\n eventsHandler: TreeEvents;\r\n /** Mode of nodes' selection in tree. */\r\n selectionMode: SelectionMode;\r\n /**\r\n * Specifies whether to show node description or not. It is used in default node renderer and to determine node height.\r\n * If custom node renderer and node height callbacks are used it does nothing.\r\n */\r\n descriptionsEnabled?: boolean;\r\n /**\r\n * Specifies whether to show node icon or not. It is used in default node renderer.\r\n * If custom node renderer is used it does nothing.\r\n */\r\n iconsEnabled?: boolean;\r\n /**\r\n * Used to highlight matches when filtering tree.\r\n * It is passed to treeRenderer.\r\n */\r\n nodeHighlightingProps?: HighlightableTreeProps;\r\n /** Custom renderer to be used to render a tree. */\r\n treeRenderer?: (props: TreeRendererProps) => React.ReactElement;\r\n /** Custom renderer to be used while root nodes is loading. */\r\n spinnerRenderer?: () => React.ReactElement;\r\n /** Custom renderer to be used when there is no data to show in tree. */\r\n noDataRenderer?: () => React.ReactElement;\r\n /** Callback that is invoked when rendered items range changes. */\r\n onItemsRendered?: (items: RenderedItemsRange) => void;\r\n /** Width of the tree renderer. */\r\n width: number;\r\n /** Height of the tree renderer. */\r\n height: number;\r\n}\r\n\r\n/**\r\n * React tree component which rendering is fully controlled from outside.\r\n * @public\r\n */\r\nexport function ControlledTree(props: ControlledTreeProps) {\r\n const nodeHeight = useNodeHeight(!!props.descriptionsEnabled);\r\n const imageLoader = React.useMemo(() => new TreeImageLoader(), []);\r\n const nodeRenderer = React.useCallback((nodeProps: TreeNodeRendererProps) => (\r\n <TreeNodeRenderer\r\n {...nodeProps}\r\n descriptionEnabled={props.descriptionsEnabled}\r\n imageLoader={props.iconsEnabled ? imageLoader : undefined}\r\n />\r\n ), [props.descriptionsEnabled, props.iconsEnabled, imageLoader]);\r\n\r\n const visibleNodes = React.useMemo(() => computeVisibleNodes(props.model), [props.model]);\r\n const eventDispatcher = useEventDispatcher(props.nodeLoader, props.eventsHandler, props.selectionMode, visibleNodes);\r\n\r\n const treeProps: TreeRendererProps = {\r\n nodeRenderer,\r\n nodeHeight,\r\n visibleNodes,\r\n treeActions: eventDispatcher,\r\n nodeLoader: props.nodeLoader,\r\n nodeHighlightingProps: props.nodeHighlightingProps,\r\n onItemsRendered: props.onItemsRendered,\r\n width: props.width,\r\n height: props.height,\r\n };\r\n\r\n const loading = useRootNodeLoader(visibleNodes, props.nodeLoader);\r\n const noData = visibleNodes.getNumRootNodes() === 0;\r\n return (\r\n <Loader loading={loading} noData={noData} spinnerRenderer={props.spinnerRenderer} noDataRenderer={props.noDataRenderer}>\r\n {props.treeRenderer ? props.treeRenderer(treeProps) : <TreeRenderer {...treeProps} />}\r\n </Loader>\r\n );\r\n}\r\n\r\nfunction useRootNodeLoader(visibleNodes: VisibleTreeNodes, nodeLoader: ITreeNodeLoader): boolean {\r\n React.useEffect(() => {\r\n if (visibleNodes.getNumRootNodes() === undefined) {\r\n const subscription = nodeLoader.loadNode(visibleNodes.getModel().getRootNode(), 0).subscribe();\r\n return () => subscription.unsubscribe();\r\n }\r\n\r\n return () => { };\r\n }, [visibleNodes, nodeLoader]);\r\n\r\n return visibleNodes.getNumRootNodes() === undefined;\r\n}\r\n\r\nfunction useEventDispatcher(nodeLoader: ITreeNodeLoader, treeEvents: TreeEvents, selectionMode: SelectionMode, visibleNodes: VisibleTreeNodes) {\r\n /* istanbul ignore next */\r\n const getVisibleNodes = React.useCallback(() => visibleNodes, [visibleNodes]);\r\n const eventDispatcher = React.useMemo(() => new TreeEventDispatcher(treeEvents, nodeLoader, selectionMode), [treeEvents, nodeLoader, selectionMode]);\r\n\r\n React.useEffect(() => {\r\n eventDispatcher.setVisibleNodes(getVisibleNodes);\r\n }, [eventDispatcher, getVisibleNodes]);\r\n\r\n return eventDispatcher;\r\n}\r\n\r\ninterface LoaderProps {\r\n loading: boolean;\r\n noData: boolean;\r\n spinnerRenderer?: () => React.ReactElement;\r\n noDataRenderer?: () => React.ReactElement;\r\n children: JSX.Element;\r\n}\r\n\r\nfunction Loader(props: LoaderProps) {\r\n if (props.loading) {\r\n return props.spinnerRenderer\r\n ? props.spinnerRenderer()\r\n : (\r\n <div className=\"components-controlledTree-loader\">\r\n <DelayedSpinner size=\"large\" />\r\n </div>\r\n );\r\n }\r\n if (props.noData) {\r\n return props.noDataRenderer\r\n ? props.noDataRenderer()\r\n : (\r\n <FillCentered>\r\n <p className=\"components-controlledTree-errorMessage\">\r\n {UiComponents.translate(\"general.noData\")}\r\n </p>\r\n </FillCentered>\r\n );\r\n }\r\n\r\n return props.children;\r\n}\r\n\r\nfunction useNodeHeight(\r\n descriptionsEnabled: boolean,\r\n): (node: TreeModelNode | TreeModelNodePlaceholder) => number {\r\n return React.useCallback(\r\n (node: TreeModelNode | TreeModelNodePlaceholder): number => {\r\n const contentHeight = (isTreeModelNode(node) && descriptionsEnabled && node && node.description) ? 43 : 24;\r\n const borderSize = 1;\r\n // Not counting node's border size twice because we want neighboring borders to overlap\r\n return contentHeight + borderSize;\r\n },\r\n [descriptionsEnabled],\r\n );\r\n}\r\n"]}
@@ -1,103 +1,103 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- @import "~@itwin/core-react/lib/cjs/core-react/scrollbar";
6
-
7
- .components-controlledTree-loader {
8
- position: relative;
9
- display: block;
10
- left: calc(50% - 24px);
11
- top: calc(50% - 24px);
12
- height: 48px;
13
- width: 48px;
14
- }
15
-
16
- .components-controlledTree-errorMessage {
17
- font-style: italic;
18
- color: var(--iui-color-text-muted);
19
- margin: 0 20%;
20
- text-align: center;
21
- }
22
-
23
- .components-controlledTree {
24
- color: var(--iui-color-text);
25
- background-color: var(--iui-color-background);
26
-
27
- /**
28
- * Workaround for horizontal scroll issue.
29
- * based on https://github.com/bvaughn/react-virtualized/issues/1248
30
- */
31
- .ReactVirtualized__Grid,
32
- .ReactWindow__VariableSizeList {
33
- overflow: auto !important;
34
- background-color: inherit;
35
-
36
- @include uicore-scrollbar;
37
-
38
- &:focus {
39
- outline: none;
40
- }
41
-
42
- >div {
43
- overflow: visible !important;
44
- max-width: none !important;
45
- }
46
- }
47
-
48
- .node-wrapper {
49
- // The virtualized list wants to use absolute layout, but we
50
- // need the inner container to grow in width based on the widest
51
- // node. To workaround, we use relative layout with 0 heigh nodes.
52
- position: relative !important;
53
- height: 0 !important;
54
- width: fit-content !important;
55
- min-width: 100% !important;
56
- overflow: visible !important;
57
-
58
- &.is-selected {
59
- // Prevent selected node's borders from being overdrawn by non-selected neighbors
60
- z-index: 1;
61
- }
62
-
63
- .core-tree-node {
64
-
65
- &.is-focused,
66
- &:focus {
67
- outline: none;
68
- }
69
- }
70
- }
71
-
72
- @mixin enable-border($edge) {
73
- border-#{$edge}: 1px solid var(--iui-color-icon-accent);
74
- padding-#{$edge}: 0;
75
- }
76
-
77
- .node-wrapper.is-selected {
78
- .core-tree-node {
79
- background: var(--iui-color-background-accent-muted);
80
- @include enable-border("left");
81
- @include enable-border("right");
82
- }
83
- }
84
-
85
- .node-wrapper.is-selected:first-child,
86
- .node-wrapper:not(.is-selected) + .node-wrapper.is-selected {
87
- .core-tree-node {
88
- @include enable-border("top");
89
- }
90
- }
91
-
92
- .node-wrapper.is-selected + .node-wrapper:not(.is-selected) {
93
- .core-tree-node {
94
- @include enable-border("top");
95
- }
96
- }
97
-
98
- .node-wrapper.is-selected:last-child {
99
- .core-tree-node {
100
- @include enable-border("bottom");
101
- }
102
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/core-react/lib/cjs/core-react/scrollbar";
6
+
7
+ .components-controlledTree-loader {
8
+ position: relative;
9
+ display: block;
10
+ left: calc(50% - 24px);
11
+ top: calc(50% - 24px);
12
+ height: 48px;
13
+ width: 48px;
14
+ }
15
+
16
+ .components-controlledTree-errorMessage {
17
+ font-style: italic;
18
+ color: var(--iui-color-text-muted);
19
+ margin: 0 20%;
20
+ text-align: center;
21
+ }
22
+
23
+ .components-controlledTree {
24
+ color: var(--iui-color-text);
25
+ background-color: var(--iui-color-background);
26
+
27
+ /**
28
+ * Workaround for horizontal scroll issue.
29
+ * based on https://github.com/bvaughn/react-virtualized/issues/1248
30
+ */
31
+ .ReactVirtualized__Grid,
32
+ .ReactWindow__VariableSizeList {
33
+ overflow: auto !important;
34
+ background-color: inherit;
35
+
36
+ @include uicore-scrollbar;
37
+
38
+ &:focus {
39
+ outline: none;
40
+ }
41
+
42
+ >div {
43
+ overflow: visible !important;
44
+ max-width: none !important;
45
+ }
46
+ }
47
+
48
+ .node-wrapper {
49
+ // The virtualized list wants to use absolute layout, but we
50
+ // need the inner container to grow in width based on the widest
51
+ // node. To workaround, we use relative layout with 0 heigh nodes.
52
+ position: relative !important;
53
+ height: 0 !important;
54
+ width: fit-content !important;
55
+ min-width: 100% !important;
56
+ overflow: visible !important;
57
+
58
+ &.is-selected {
59
+ // Prevent selected node's borders from being overdrawn by non-selected neighbors
60
+ z-index: 1;
61
+ }
62
+
63
+ .core-tree-node {
64
+
65
+ &.is-focused,
66
+ &:focus {
67
+ outline: none;
68
+ }
69
+ }
70
+ }
71
+
72
+ @mixin enable-border($edge) {
73
+ border-#{$edge}: 1px solid var(--iui-color-icon-accent);
74
+ padding-#{$edge}: 0;
75
+ }
76
+
77
+ .node-wrapper.is-selected {
78
+ .core-tree-node {
79
+ background: var(--iui-color-background-accent-muted);
80
+ @include enable-border("left");
81
+ @include enable-border("right");
82
+ }
83
+ }
84
+
85
+ .node-wrapper.is-selected:first-child,
86
+ .node-wrapper:not(.is-selected) + .node-wrapper.is-selected {
87
+ .core-tree-node {
88
+ @include enable-border("top");
89
+ }
90
+ }
91
+
92
+ .node-wrapper.is-selected + .node-wrapper:not(.is-selected) {
93
+ .core-tree-node {
94
+ @include enable-border("top");
95
+ }
96
+ }
97
+
98
+ .node-wrapper.is-selected:last-child {
99
+ .core-tree-node {
100
+ @include enable-border("bottom");
101
+ }
102
+ }
103
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NodeContent.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/NodeContent.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport \"./NodeContent.scss\";\nimport classnames from \"classnames\";\nimport * as React from \"react\";\nimport { CommonProps, TreeNodePlaceholder } from \"@itwin/core-react\";\nimport { ItemStyle, ItemStyleProvider } from \"../../../properties/ItemStyle\";\nimport { PropertyContainerType, PropertyValueRendererContext, PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\nimport { HighlightableTreeNodeProps, HighlightingEngine } from \"../../HighlightingEngine\";\nimport { TreeModelNode } from \"../TreeModel\";\nimport { TreeNodeEditor, TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\n\n/** Properties for [[TreeNodeContent]] component\n * @internal\n */\nexport interface TreeNodeContentProps extends CommonProps {\n node: TreeModelNode;\n showDescription?: boolean;\n highlightProps?: HighlightableTreeNodeProps;\n valueRendererManager: PropertyValueRendererManager;\n\n onLabelRendered?: (node: TreeModelNode) => void;\n nodeEditorRenderer?: TreeNodeEditorRenderer;\n}\n\n/** React component for displaying [[TreeNode]] label\n * @internal\n */\nexport function TreeNodeContent(props: TreeNodeContentProps) {\n const { node, valueRendererManager, onLabelRendered, highlightProps } = props;\n // eslint-disable-next-line @typescript-eslint/promise-function-async\n const label = React.useMemo(() => getLabel(node, valueRendererManager, highlightProps), [node, valueRendererManager, highlightProps]);\n React.useEffect(() => {\n onLabelRendered && onLabelRendered(node);\n }, [label, node, onLabelRendered]);\n\n // handle cell editing\n let editor: React.ReactNode;\n if (props.node.editingInfo) {\n // if cell editing is enabled, return editor instead of the label\n const style = getStyle(props.node.item.style, props.node.isSelected);\n const editorProps = {\n node: props.node,\n onCancel: props.node.editingInfo.onCancel,\n onCommit: props.node.editingInfo.onCommit,\n style,\n };\n editor = props.nodeEditorRenderer ? props.nodeEditorRenderer(editorProps) : <TreeNodeEditor {...editorProps} />;\n }\n\n const isDescriptionEnabled = props.node.item.description && props.showDescription;\n\n const containerClassName = classnames(\n \"components-controlledTree-node-content\",\n isDescriptionEnabled ? \"with-description\" : undefined,\n props.className,\n );\n\n const descriptionClassName = classnames(\n \"components-controlledTree-node-description\",\n editor ? \"with-editor\" : undefined,\n );\n\n return (\n <div className={containerClassName} style={props.style}>\n <>\n {editor ? editor : label}\n {isDescriptionEnabled ?\n <div className={descriptionClassName}>\n {props.node.item.description}\n </div>\n : undefined}\n </>\n </div>\n );\n}\n\nfunction getLabel(\n node: TreeModelNode,\n valueRendererManager: PropertyValueRendererManager,\n highlightProps?: HighlightableTreeNodeProps): React.ReactNode | Promise<React.ReactNode> {\n // handle filtered matches' highlighting\n const highlightCallback = highlightProps\n ? (text: string) => HighlightingEngine.renderNodeLabel(text, highlightProps)\n : undefined;\n\n // handle custom cell rendering\n const context: PropertyValueRendererContext = {\n containerType: PropertyContainerType.Tree,\n style: getStyle(node.item.style, node.isSelected),\n textHighlighter: highlightCallback,\n defaultValue: <TreeNodePlaceholder level={0} data-testid={\"node-label-placeholder\"} />,\n };\n\n return valueRendererManager.render(node.item.label, context);\n}\n\nfunction getStyle(style?: ItemStyle, isSelected?: boolean): React.CSSProperties {\n return ItemStyleProvider.createStyle(style ? style : {}, isSelected);\n}\n"]}
1
+ {"version":3,"file":"NodeContent.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/NodeContent.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 Tree\r\n */\r\n\r\nimport \"./NodeContent.scss\";\r\nimport classnames from \"classnames\";\r\nimport * as React from \"react\";\r\nimport { CommonProps, TreeNodePlaceholder } from \"@itwin/core-react\";\r\nimport { ItemStyle, ItemStyleProvider } from \"../../../properties/ItemStyle\";\r\nimport { PropertyContainerType, PropertyValueRendererContext, PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\r\nimport { HighlightableTreeNodeProps, HighlightingEngine } from \"../../HighlightingEngine\";\r\nimport { TreeModelNode } from \"../TreeModel\";\r\nimport { TreeNodeEditor, TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\r\n\r\n/** Properties for [[TreeNodeContent]] component\r\n * @internal\r\n */\r\nexport interface TreeNodeContentProps extends CommonProps {\r\n node: TreeModelNode;\r\n showDescription?: boolean;\r\n highlightProps?: HighlightableTreeNodeProps;\r\n valueRendererManager: PropertyValueRendererManager;\r\n\r\n onLabelRendered?: (node: TreeModelNode) => void;\r\n nodeEditorRenderer?: TreeNodeEditorRenderer;\r\n}\r\n\r\n/** React component for displaying [[TreeNode]] label\r\n * @internal\r\n */\r\nexport function TreeNodeContent(props: TreeNodeContentProps) {\r\n const { node, valueRendererManager, onLabelRendered, highlightProps } = props;\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n const label = React.useMemo(() => getLabel(node, valueRendererManager, highlightProps), [node, valueRendererManager, highlightProps]);\r\n React.useEffect(() => {\r\n onLabelRendered && onLabelRendered(node);\r\n }, [label, node, onLabelRendered]);\r\n\r\n // handle cell editing\r\n let editor: React.ReactNode;\r\n if (props.node.editingInfo) {\r\n // if cell editing is enabled, return editor instead of the label\r\n const style = getStyle(props.node.item.style, props.node.isSelected);\r\n const editorProps = {\r\n node: props.node,\r\n onCancel: props.node.editingInfo.onCancel,\r\n onCommit: props.node.editingInfo.onCommit,\r\n style,\r\n };\r\n editor = props.nodeEditorRenderer ? props.nodeEditorRenderer(editorProps) : <TreeNodeEditor {...editorProps} />;\r\n }\r\n\r\n const isDescriptionEnabled = props.node.item.description && props.showDescription;\r\n\r\n const containerClassName = classnames(\r\n \"components-controlledTree-node-content\",\r\n isDescriptionEnabled ? \"with-description\" : undefined,\r\n props.className,\r\n );\r\n\r\n const descriptionClassName = classnames(\r\n \"components-controlledTree-node-description\",\r\n editor ? \"with-editor\" : undefined,\r\n );\r\n\r\n return (\r\n <div className={containerClassName} style={props.style}>\r\n <>\r\n {editor ? editor : label}\r\n {isDescriptionEnabled ?\r\n <div className={descriptionClassName}>\r\n {props.node.item.description}\r\n </div>\r\n : undefined}\r\n </>\r\n </div>\r\n );\r\n}\r\n\r\nfunction getLabel(\r\n node: TreeModelNode,\r\n valueRendererManager: PropertyValueRendererManager,\r\n highlightProps?: HighlightableTreeNodeProps): React.ReactNode | Promise<React.ReactNode> {\r\n // handle filtered matches' highlighting\r\n const highlightCallback = highlightProps\r\n ? (text: string) => HighlightingEngine.renderNodeLabel(text, highlightProps)\r\n : undefined;\r\n\r\n // handle custom cell rendering\r\n const context: PropertyValueRendererContext = {\r\n containerType: PropertyContainerType.Tree,\r\n style: getStyle(node.item.style, node.isSelected),\r\n textHighlighter: highlightCallback,\r\n defaultValue: <TreeNodePlaceholder level={0} data-testid={\"node-label-placeholder\"} />,\r\n };\r\n\r\n return valueRendererManager.render(node.item.label, context);\r\n}\r\n\r\nfunction getStyle(style?: ItemStyle, isSelected?: boolean): React.CSSProperties {\r\n return ItemStyleProvider.createStyle(style ? style : {}, isSelected);\r\n}\r\n"]}
@@ -1,27 +1,27 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
-
6
- .components-controlledTree-node-description {
7
- color: var(--iui-color-text-muted);
8
- font-size: var(--iui-font-size-0);
9
- margin-top: 4px;
10
-
11
- &.with-editor {
12
- margin: 0;
13
- padding-top: 1px;
14
- }
15
- }
16
-
17
- .components-controlledTree-node-content {
18
- height: 24px;
19
- line-height: var(--iui-font-size-0);
20
- display: flex;
21
- flex-direction: column;
22
- justify-content: center;
23
-
24
- &.with-description {
25
- height: 43px;
26
- }
27
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .components-controlledTree-node-description {
7
+ color: var(--iui-color-text-muted);
8
+ font-size: var(--iui-font-size-0);
9
+ margin-top: 4px;
10
+
11
+ &.with-editor {
12
+ margin: 0;
13
+ padding-top: 1px;
14
+ }
15
+ }
16
+
17
+ .components-controlledTree-node-content {
18
+ height: 24px;
19
+ line-height: var(--iui-font-size-0);
20
+ display: flex;
21
+ flex-direction: column;
22
+ justify-content: center;
23
+
24
+ &.with-description {
25
+ height: 43px;
26
+ }
27
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeEditor.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeEditor.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,0DAA4F;AAC5F,sEAAwF;AA2BxF;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAA0B;IACvD,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAI,IAAI,CAAC,QAA2B,CAAC,KAAe,CAAC;QACnE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnE,OAAO,CACL,8BAAM,KAAK,EAAE,KAAK,CAAC,KAAK;QACtB,oBAAC,iCAAe,IACd,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,cAAc,CAAC,WAAW,EACjC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,QAAQ,EAAE,IAAI,GACd,CACG,CACR,CAAC;AACJ,CAAC;AApBD,wCAoBC;AAED,SAAS,oBAAoB,CAAC,KAAqB;IACjD,MAAM,QAAQ,GAAwB;QACpC,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,kBAAkB;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;KAClC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport * as React from \"react\";\nimport { PrimitiveValue, PropertyDescription, PropertyRecord } from \"@itwin/appui-abstract\";\nimport { EditorContainer, PropertyUpdatedArgs } from \"../../../editors/EditorContainer\";\nimport { TreeModelNode } from \"../TreeModel\";\n\n/**\n * Properties for [[TreeNodeEditor]] component.\n * @public\n */\nexport interface TreeNodeEditorProps {\n /** Tree node which is in editing mode. */\n node: TreeModelNode;\n /** Callback that is called when changes are committed. */\n onCommit: (node: TreeModelNode, newValue: string) => void;\n /** Callback that is called when editing is canceled. */\n onCancel: () => void;\n /** Editor style. */\n style?: React.CSSProperties;\n\n /** @internal */\n ignoreEditorBlur?: boolean;\n}\n\n/**\n * Type for tree node editor renderer.\n * @public\n */\nexport type TreeNodeEditorRenderer = (props: TreeNodeEditorProps) => React.ReactNode;\n\n/**\n * React component for displaying tree node editor.\n * @public\n */\nexport function TreeNodeEditor(props: TreeNodeEditorProps) {\n const onCommit = (args: PropertyUpdatedArgs) => {\n const newValue = (args.newValue as PrimitiveValue).value as string;\n props.onCommit(props.node, newValue);\n };\n\n const propertyRecord = createPropertyRecord(props.node.item.label);\n\n return (\n <span style={props.style}>\n <EditorContainer\n propertyRecord={propertyRecord}\n title={propertyRecord.description}\n onCommit={onCommit}\n onCancel={props.onCancel}\n ignoreEditorBlur={props.ignoreEditorBlur}\n setFocus={true}\n />\n </span>\n );\n}\n\nfunction createPropertyRecord(label: PropertyRecord) {\n const property: PropertyDescription = {\n name: \"tree-node-editor\",\n displayLabel: \"Tree Node Editor\",\n typename: label.property.typename,\n };\n\n const record = new PropertyRecord(label.value, property);\n record.description = \"\";\n record.isReadonly = false;\n\n return record;\n}\n"]}
1
+ {"version":3,"file":"TreeNodeEditor.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeEditor.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,6CAA+B;AAC/B,0DAA4F;AAC5F,sEAAwF;AA2BxF;;;GAGG;AACH,SAAgB,cAAc,CAAC,KAA0B;IACvD,MAAM,QAAQ,GAAG,CAAC,IAAyB,EAAE,EAAE;QAC7C,MAAM,QAAQ,GAAI,IAAI,CAAC,QAA2B,CAAC,KAAe,CAAC;QACnE,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnE,OAAO,CACL,8BAAM,KAAK,EAAE,KAAK,CAAC,KAAK;QACtB,oBAAC,iCAAe,IACd,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,cAAc,CAAC,WAAW,EACjC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,QAAQ,EAAE,IAAI,GACd,CACG,CACR,CAAC;AACJ,CAAC;AApBD,wCAoBC;AAED,SAAS,oBAAoB,CAAC,KAAqB;IACjD,MAAM,QAAQ,GAAwB;QACpC,IAAI,EAAE,kBAAkB;QACxB,YAAY,EAAE,kBAAkB;QAChC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ;KAClC,CAAC;IAEF,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC;IAE1B,OAAO,MAAM,CAAC;AAChB,CAAC","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 * as React from \"react\";\r\nimport { PrimitiveValue, PropertyDescription, PropertyRecord } from \"@itwin/appui-abstract\";\r\nimport { EditorContainer, PropertyUpdatedArgs } from \"../../../editors/EditorContainer\";\r\nimport { TreeModelNode } from \"../TreeModel\";\r\n\r\n/**\r\n * Properties for [[TreeNodeEditor]] component.\r\n * @public\r\n */\r\nexport interface TreeNodeEditorProps {\r\n /** Tree node which is in editing mode. */\r\n node: TreeModelNode;\r\n /** Callback that is called when changes are committed. */\r\n onCommit: (node: TreeModelNode, newValue: string) => void;\r\n /** Callback that is called when editing is canceled. */\r\n onCancel: () => void;\r\n /** Editor style. */\r\n style?: React.CSSProperties;\r\n\r\n /** @internal */\r\n ignoreEditorBlur?: boolean;\r\n}\r\n\r\n/**\r\n * Type for tree node editor renderer.\r\n * @public\r\n */\r\nexport type TreeNodeEditorRenderer = (props: TreeNodeEditorProps) => React.ReactNode;\r\n\r\n/**\r\n * React component for displaying tree node editor.\r\n * @public\r\n */\r\nexport function TreeNodeEditor(props: TreeNodeEditorProps) {\r\n const onCommit = (args: PropertyUpdatedArgs) => {\r\n const newValue = (args.newValue as PrimitiveValue).value as string;\r\n props.onCommit(props.node, newValue);\r\n };\r\n\r\n const propertyRecord = createPropertyRecord(props.node.item.label);\r\n\r\n return (\r\n <span style={props.style}>\r\n <EditorContainer\r\n propertyRecord={propertyRecord}\r\n title={propertyRecord.description}\r\n onCommit={onCommit}\r\n onCancel={props.onCancel}\r\n ignoreEditorBlur={props.ignoreEditorBlur}\r\n setFocus={true}\r\n />\r\n </span>\r\n );\r\n}\r\n\r\nfunction createPropertyRecord(label: PropertyRecord) {\r\n const property: PropertyDescription = {\r\n name: \"tree-node-editor\",\r\n displayLabel: \"Tree Node Editor\",\r\n typename: label.property.typename,\r\n };\r\n\r\n const record = new PropertyRecord(label.value, property);\r\n record.description = \"\";\r\n record.isReadonly = false;\r\n\r\n return record;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodeRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tree\n */\n\nimport * as React from \"react\";\nimport { CommonProps, NodeCheckboxProps, NodeCheckboxRenderer, TreeNode } from \"@itwin/core-react\";\nimport { ImageRenderer } from \"../../../common/ImageRenderer\";\nimport { PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\nimport { HighlightableTreeNodeProps } from \"../../HighlightingEngine\";\nimport { ITreeImageLoader } from \"../../ImageLoader\";\nimport { TreeComponentTestId } from \"../../TreeComponentTestId\";\nimport { TreeActions } from \"../TreeActions\";\nimport { CheckBoxInfo, TreeModelNode } from \"../TreeModel\";\nimport { TreeNodeContent } from \"./NodeContent\";\nimport { TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\n\n/**\n * Properties for [[TreeNodeRenderer]].\n * @public\n */\nexport interface TreeNodeRendererProps extends CommonProps {\n /** Tree node to render. */\n node: TreeModelNode;\n\n /** Action handler. */\n treeActions: TreeActions;\n\n /** Properties used to highlight matches when tree is filtered. */\n nodeHighlightProps?: HighlightableTreeNodeProps;\n\n /** Specifies whether to show descriptions or not. */\n descriptionEnabled?: boolean;\n\n /** Image loader for node icons. */\n imageLoader?: ITreeImageLoader;\n\n /** Callback to render custom checkbox. */\n checkboxRenderer?: NodeCheckboxRenderer;\n\n /** Callback to render custom node editor when node is in editing mode. */\n nodeEditorRenderer?: TreeNodeEditorRenderer;\n\n /**\n * Callback used to detect when label is rendered. It is used by TreeRenderer for scrolling to active match.\n * @internal\n */\n onLabelRendered?: (node: TreeModelNode) => void;\n\n /** Child components to render inside the node.*/\n children?: React.ReactNode;\n}\n\n/**\n * Default component for rendering tree node.\n * @public\n */\nexport const TreeNodeRenderer = React.memo(function TreeNodeRenderer(props: TreeNodeRendererProps) {\n const label = (\n <TreeNodeContent\n key={props.node.id}\n node={props.node}\n showDescription={props.descriptionEnabled}\n valueRendererManager={PropertyValueRendererManager.defaultManager}\n highlightProps={props.nodeHighlightProps}\n onLabelRendered={props.onLabelRendered}\n nodeEditorRenderer={props.nodeEditorRenderer}\n />\n );\n\n function onExpansionToggle() {\n if (props.node.isExpanded)\n props.treeActions.onNodeCollapsed(props.node.id);\n else\n props.treeActions.onNodeExpanded(props.node.id);\n }\n\n const createCheckboxProps = (checkboxInfo: CheckBoxInfo): NodeCheckboxProps => ({\n state: checkboxInfo.state,\n tooltip: checkboxInfo.tooltip,\n isDisabled: checkboxInfo.isDisabled,\n onClick: (newState) => props.treeActions.onNodeCheckboxClicked(props.node.id, newState),\n });\n\n return (\n <TreeNode\n data-testid={TreeComponentTestId.Node}\n className={props.className}\n checkboxProps={props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined}\n style={props.style}\n isExpanded={props.node.isExpanded}\n isSelected={props.node.isSelected}\n isLoading={props.node.isLoading}\n isLeaf={props.node.numChildren === 0}\n icon={props.imageLoader ? <TreeNodeIcon node={props.node} imageLoader={props.imageLoader} /> : undefined}\n label={label}\n level={props.node.depth}\n onClick={(event) => props.treeActions.onNodeClicked(props.node.id, event)}\n onMouseDown={() => props.treeActions.onNodeMouseDown(props.node.id)}\n onMouseMove={() => props.treeActions.onNodeMouseMove(props.node.id)}\n onClickExpansionToggle={onExpansionToggle}\n renderOverrides={{ renderCheckbox: props.checkboxRenderer }}\n >\n {props.children}\n </TreeNode>\n );\n});\n\ninterface TreeNodeIconProps {\n node: TreeModelNode;\n imageLoader: ITreeImageLoader;\n}\n\nfunction TreeNodeIcon(props: TreeNodeIconProps) {\n const { imageLoader, node } = props;\n const image = imageLoader.load(node.item);\n\n if (!image)\n return null;\n\n const renderer = new ImageRenderer();\n return <>{renderer.render(image)}</>;\n}\n"]}
1
+ {"version":3,"file":"TreeNodeRenderer.js","sourceRoot":"","sources":["../../../../../../src/components-react/tree/controlled/component/TreeNodeRenderer.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 Tree\r\n */\r\n\r\nimport * as React from \"react\";\r\nimport { CommonProps, NodeCheckboxProps, NodeCheckboxRenderer, TreeNode } from \"@itwin/core-react\";\r\nimport { ImageRenderer } from \"../../../common/ImageRenderer\";\r\nimport { PropertyValueRendererManager } from \"../../../properties/ValueRendererManager\";\r\nimport { HighlightableTreeNodeProps } from \"../../HighlightingEngine\";\r\nimport { ITreeImageLoader } from \"../../ImageLoader\";\r\nimport { TreeComponentTestId } from \"../../TreeComponentTestId\";\r\nimport { TreeActions } from \"../TreeActions\";\r\nimport { CheckBoxInfo, TreeModelNode } from \"../TreeModel\";\r\nimport { TreeNodeContent } from \"./NodeContent\";\r\nimport { TreeNodeEditorRenderer } from \"./TreeNodeEditor\";\r\n\r\n/**\r\n * Properties for [[TreeNodeRenderer]].\r\n * @public\r\n */\r\nexport interface TreeNodeRendererProps extends CommonProps {\r\n /** Tree node to render. */\r\n node: TreeModelNode;\r\n\r\n /** Action handler. */\r\n treeActions: TreeActions;\r\n\r\n /** Properties used to highlight matches when tree is filtered. */\r\n nodeHighlightProps?: HighlightableTreeNodeProps;\r\n\r\n /** Specifies whether to show descriptions or not. */\r\n descriptionEnabled?: boolean;\r\n\r\n /** Image loader for node icons. */\r\n imageLoader?: ITreeImageLoader;\r\n\r\n /** Callback to render custom checkbox. */\r\n checkboxRenderer?: NodeCheckboxRenderer;\r\n\r\n /** Callback to render custom node editor when node is in editing mode. */\r\n nodeEditorRenderer?: TreeNodeEditorRenderer;\r\n\r\n /**\r\n * Callback used to detect when label is rendered. It is used by TreeRenderer for scrolling to active match.\r\n * @internal\r\n */\r\n onLabelRendered?: (node: TreeModelNode) => void;\r\n\r\n /** Child components to render inside the node.*/\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Default component for rendering tree node.\r\n * @public\r\n */\r\nexport const TreeNodeRenderer = React.memo(function TreeNodeRenderer(props: TreeNodeRendererProps) {\r\n const label = (\r\n <TreeNodeContent\r\n key={props.node.id}\r\n node={props.node}\r\n showDescription={props.descriptionEnabled}\r\n valueRendererManager={PropertyValueRendererManager.defaultManager}\r\n highlightProps={props.nodeHighlightProps}\r\n onLabelRendered={props.onLabelRendered}\r\n nodeEditorRenderer={props.nodeEditorRenderer}\r\n />\r\n );\r\n\r\n function onExpansionToggle() {\r\n if (props.node.isExpanded)\r\n props.treeActions.onNodeCollapsed(props.node.id);\r\n else\r\n props.treeActions.onNodeExpanded(props.node.id);\r\n }\r\n\r\n const createCheckboxProps = (checkboxInfo: CheckBoxInfo): NodeCheckboxProps => ({\r\n state: checkboxInfo.state,\r\n tooltip: checkboxInfo.tooltip,\r\n isDisabled: checkboxInfo.isDisabled,\r\n onClick: (newState) => props.treeActions.onNodeCheckboxClicked(props.node.id, newState),\r\n });\r\n\r\n return (\r\n <TreeNode\r\n data-testid={TreeComponentTestId.Node}\r\n className={props.className}\r\n checkboxProps={props.node.checkbox.isVisible ? createCheckboxProps(props.node.checkbox) : undefined}\r\n style={props.style}\r\n isExpanded={props.node.isExpanded}\r\n isSelected={props.node.isSelected}\r\n isLoading={props.node.isLoading}\r\n isLeaf={props.node.numChildren === 0}\r\n icon={props.imageLoader ? <TreeNodeIcon node={props.node} imageLoader={props.imageLoader} /> : undefined}\r\n label={label}\r\n level={props.node.depth}\r\n onClick={(event) => props.treeActions.onNodeClicked(props.node.id, event)}\r\n onMouseDown={() => props.treeActions.onNodeMouseDown(props.node.id)}\r\n onMouseMove={() => props.treeActions.onNodeMouseMove(props.node.id)}\r\n onClickExpansionToggle={onExpansionToggle}\r\n renderOverrides={{ renderCheckbox: props.checkboxRenderer }}\r\n >\r\n {props.children}\r\n </TreeNode>\r\n );\r\n});\r\n\r\ninterface TreeNodeIconProps {\r\n node: TreeModelNode;\r\n imageLoader: ITreeImageLoader;\r\n}\r\n\r\nfunction TreeNodeIcon(props: TreeNodeIconProps) {\r\n const { imageLoader, node } = props;\r\n const image = imageLoader.load(node.item);\r\n\r\n if (!image)\r\n return null;\r\n\r\n const renderer = new ImageRenderer();\r\n return <>{renderer.render(image)}</>;\r\n}\r\n"]}