@itwin/tree-widget-react 2.3.2 → 3.0.0-dev.1
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.
- package/CHANGELOG.md +2 -2
- package/README.md +232 -147
- package/lib/cjs/TreeWidget.d.ts +2 -4
- package/lib/cjs/TreeWidget.js +0 -6
- package/lib/cjs/TreeWidget.js.map +1 -1
- package/lib/cjs/components/SelectableTree.d.ts +3 -9
- package/lib/cjs/components/SelectableTree.js +1 -1
- package/lib/cjs/components/SelectableTree.js.map +1 -1
- package/lib/cjs/components/TreeSelector.d.ts +2 -2
- package/lib/cjs/components/TreeSelector.js.map +1 -1
- package/lib/cjs/components/TreeWidgetUiItemsProvider.d.ts +14 -25
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js +43 -45
- package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.js +17 -9
- package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/cjs/components/tree-header/TreeHeader.scss +7 -41
- package/lib/cjs/components/trees/Tree.scss +23 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTree.js +78 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTree.js.map +1 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js +37 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js +75 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js +185 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js +94 -0
- package/lib/cjs/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
- package/lib/cjs/components/trees/categories-tree/UseCategories.d.ts +8 -0
- package/lib/cjs/components/trees/categories-tree/UseCategories.js +22 -0
- package/lib/cjs/components/trees/categories-tree/UseCategories.js.map +1 -0
- package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
- package/lib/cjs/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +56 -8
- package/lib/cjs/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContext.d.ts +14 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContext.js +16 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContext.js.map +1 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js +71 -0
- package/lib/cjs/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
- package/lib/cjs/components/trees/common/Rxjs.d.ts +10 -0
- package/lib/cjs/components/trees/common/Rxjs.js +46 -0
- package/lib/cjs/components/trees/common/Rxjs.js.map +1 -0
- package/lib/cjs/components/trees/common/UseFeatureReporting.d.ts +11 -0
- package/lib/cjs/components/trees/common/UseFeatureReporting.js +10 -1
- package/lib/cjs/components/trees/common/UseFeatureReporting.js.map +1 -1
- package/lib/cjs/components/trees/common/UseFiltering.d.ts +12 -0
- package/lib/cjs/components/trees/common/UseFiltering.js +29 -0
- package/lib/cjs/components/trees/common/UseFiltering.js.map +1 -0
- package/lib/cjs/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
- package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js +33 -0
- package/lib/cjs/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
- package/lib/cjs/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
- package/lib/cjs/components/trees/common/UseHierarchyFiltering.js +157 -0
- package/lib/cjs/components/trees/common/UseHierarchyFiltering.js.map +1 -0
- package/lib/cjs/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
- package/lib/cjs/components/trees/common/UseHierarchyVisibility.js +98 -0
- package/lib/cjs/components/trees/common/UseHierarchyVisibility.js.map +1 -0
- package/lib/cjs/components/trees/common/UseIModelChangeListener.d.ts +9 -0
- package/lib/cjs/components/trees/common/UseIModelChangeListener.js +20 -0
- package/lib/cjs/components/trees/common/UseIModelChangeListener.js.map +1 -0
- package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
- package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js +35 -0
- package/lib/cjs/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
- package/lib/cjs/components/trees/common/UseNodeHighlighting.d.ts +16 -0
- package/lib/cjs/components/trees/common/UseNodeHighlighting.js +140 -0
- package/lib/cjs/components/trees/common/UseNodeHighlighting.js.map +1 -0
- package/lib/cjs/components/trees/common/Utils.d.ts +16 -6
- package/lib/cjs/components/trees/common/Utils.js +38 -34
- package/lib/cjs/components/trees/common/Utils.js.map +1 -1
- package/lib/cjs/components/trees/common/components/BaseTree.d.ts +34 -0
- package/lib/cjs/components/trees/common/components/BaseTree.js +77 -0
- package/lib/cjs/components/trees/common/components/BaseTree.js.map +1 -0
- package/lib/cjs/components/trees/common/components/Delayed.d.ts +6 -0
- package/lib/cjs/components/trees/common/components/Delayed.js +31 -0
- package/lib/cjs/components/trees/common/components/Delayed.js.map +1 -0
- package/lib/cjs/components/trees/common/components/ProgressOverlay.d.ts +5 -0
- package/lib/cjs/components/trees/common/components/ProgressOverlay.js +16 -0
- package/lib/cjs/components/trees/common/components/ProgressOverlay.js.map +1 -0
- package/lib/cjs/components/trees/common/components/ProgressOverlay.scss +21 -0
- package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
- package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js +28 -0
- package/lib/cjs/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
- package/lib/cjs/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
- package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js +20 -0
- package/lib/cjs/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
- package/lib/cjs/components/trees/common/components/TreeRenderer.d.ts +19 -0
- package/lib/cjs/components/trees/common/components/TreeRenderer.js +30 -0
- package/lib/cjs/components/trees/common/components/TreeRenderer.js.map +1 -0
- package/lib/cjs/components/trees/common/components/TreeRenderer.scss +62 -0
- package/lib/cjs/components/trees/common/components/VisibilityTree.d.ts +14 -0
- package/lib/cjs/components/trees/common/components/VisibilityTree.js +41 -0
- package/lib/cjs/components/trees/common/components/VisibilityTree.js.map +1 -0
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +29 -83
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +262 -0
- package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +41 -79
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +619 -0
- package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
- package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
- package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +203 -0
- package/lib/cjs/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
- package/lib/cjs/components/trees/index.d.ts +4 -16
- package/lib/cjs/components/trees/index.js +9 -30
- package/lib/cjs/components/trees/index.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +17 -72
- package/lib/cjs/components/trees/models-tree/ModelsTree.js +196 -135
- package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js +101 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +40 -83
- package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js +617 -0
- package/lib/cjs/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +121 -0
- package/lib/cjs/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js +325 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js +40 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +757 -0
- package/lib/cjs/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
- package/lib/cjs/components/trees/models-tree/internal/Tooltip.js +29 -0
- package/lib/cjs/components/trees/models-tree/internal/Tooltip.js.map +1 -0
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js +43 -0
- package/lib/cjs/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
- package/lib/cjs/tree-widget-react.d.ts +3 -4
- package/lib/cjs/tree-widget-react.js +8 -4
- package/lib/cjs/tree-widget-react.js.map +1 -1
- package/lib/esm/TreeWidget.d.ts +2 -4
- package/lib/esm/TreeWidget.js +0 -6
- package/lib/esm/TreeWidget.js.map +1 -1
- package/lib/esm/components/SelectableTree.d.ts +3 -9
- package/lib/esm/components/SelectableTree.js +1 -1
- package/lib/esm/components/SelectableTree.js.map +1 -1
- package/lib/esm/components/TreeSelector.d.ts +2 -2
- package/lib/esm/components/TreeSelector.js.map +1 -1
- package/lib/esm/components/TreeWidgetUiItemsProvider.d.ts +14 -25
- package/lib/esm/components/TreeWidgetUiItemsProvider.js +42 -44
- package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.js +17 -9
- package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
- package/lib/esm/components/tree-header/TreeHeader.scss +7 -41
- package/lib/esm/components/trees/Tree.scss +23 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTree.d.ts +22 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTree.js +74 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTree.js.map +1 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.d.ts +21 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js +31 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeButtons.js.map +1 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.d.ts +55 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js +68 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeComponent.js.map +1 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.d.ts +23 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js +181 -0
- package/lib/esm/components/trees/categories-tree/CategoriesTreeDefinition.js.map +1 -0
- package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.d.ts +36 -0
- package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js +90 -0
- package/lib/esm/components/trees/categories-tree/CategoriesVisibilityHandler.js.map +1 -0
- package/lib/esm/components/trees/categories-tree/UseCategories.d.ts +8 -0
- package/lib/esm/components/trees/categories-tree/UseCategories.js +18 -0
- package/lib/esm/components/trees/categories-tree/UseCategories.js.map +1 -0
- package/lib/esm/components/trees/common/CategoriesVisibilityUtils.d.ts +46 -0
- package/lib/esm/components/trees/{CategoriesVisibilityUtils.js → common/CategoriesVisibilityUtils.js} +51 -6
- package/lib/esm/components/trees/common/CategoriesVisibilityUtils.js.map +1 -0
- package/lib/esm/components/trees/common/FocusedInstancesContext.d.ts +14 -0
- package/lib/esm/components/trees/common/FocusedInstancesContext.js +12 -0
- package/lib/esm/components/trees/common/FocusedInstancesContext.js.map +1 -0
- package/lib/esm/components/trees/common/FocusedInstancesContextProvider.d.ts +8 -0
- package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js +67 -0
- package/lib/esm/components/trees/common/FocusedInstancesContextProvider.js.map +1 -0
- package/lib/esm/components/trees/common/Rxjs.d.ts +10 -0
- package/lib/esm/components/trees/common/Rxjs.js +40 -0
- package/lib/esm/components/trees/common/Rxjs.js.map +1 -0
- package/lib/esm/components/trees/common/UseFeatureReporting.d.ts +11 -0
- package/lib/esm/components/trees/common/UseFeatureReporting.js +8 -0
- package/lib/esm/components/trees/common/UseFeatureReporting.js.map +1 -1
- package/lib/esm/components/trees/common/UseFiltering.d.ts +12 -0
- package/lib/esm/components/trees/common/UseFiltering.js +25 -0
- package/lib/esm/components/trees/common/UseFiltering.js.map +1 -0
- package/lib/esm/components/trees/common/UseHierarchiesLocalization.d.ts +8 -0
- package/lib/esm/components/trees/common/UseHierarchiesLocalization.js +29 -0
- package/lib/esm/components/trees/common/UseHierarchiesLocalization.js.map +1 -0
- package/lib/esm/components/trees/common/UseHierarchyFiltering.d.ts +19 -0
- package/lib/esm/components/trees/common/UseHierarchyFiltering.js +153 -0
- package/lib/esm/components/trees/common/UseHierarchyFiltering.js.map +1 -0
- package/lib/esm/components/trees/common/UseHierarchyVisibility.d.ts +30 -0
- package/lib/esm/components/trees/common/UseHierarchyVisibility.js +94 -0
- package/lib/esm/components/trees/common/UseHierarchyVisibility.js.map +1 -0
- package/lib/esm/components/trees/common/UseIModelChangeListener.d.ts +9 -0
- package/lib/esm/components/trees/common/UseIModelChangeListener.js +16 -0
- package/lib/esm/components/trees/common/UseIModelChangeListener.js.map +1 -0
- package/lib/esm/components/trees/common/UseMultiCheckboxHandler.d.ts +13 -0
- package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js +31 -0
- package/lib/esm/components/trees/common/UseMultiCheckboxHandler.js.map +1 -0
- package/lib/esm/components/trees/common/UseNodeHighlighting.d.ts +16 -0
- package/lib/esm/components/trees/common/UseNodeHighlighting.js +136 -0
- package/lib/esm/components/trees/common/UseNodeHighlighting.js.map +1 -0
- package/lib/esm/components/trees/common/Utils.d.ts +16 -6
- package/lib/esm/components/trees/common/Utils.js +33 -29
- package/lib/esm/components/trees/common/Utils.js.map +1 -1
- package/lib/esm/components/trees/common/components/BaseTree.d.ts +34 -0
- package/lib/esm/components/trees/common/components/BaseTree.js +73 -0
- package/lib/esm/components/trees/common/components/BaseTree.js.map +1 -0
- package/lib/esm/components/trees/common/components/Delayed.d.ts +6 -0
- package/lib/esm/components/trees/common/components/Delayed.js +27 -0
- package/lib/esm/components/trees/common/components/Delayed.js.map +1 -0
- package/lib/esm/components/trees/common/components/ProgressOverlay.d.ts +5 -0
- package/lib/esm/components/trees/common/components/ProgressOverlay.js +12 -0
- package/lib/esm/components/trees/common/components/ProgressOverlay.js.map +1 -0
- package/lib/esm/components/trees/common/components/ProgressOverlay.scss +21 -0
- package/lib/esm/components/trees/common/components/TreeNodeCheckbox.d.ts +20 -0
- package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js +21 -0
- package/lib/esm/components/trees/common/components/TreeNodeCheckbox.js.map +1 -0
- package/lib/esm/components/trees/common/components/TreeNodeRenderer.d.ts +13 -0
- package/lib/esm/components/trees/common/components/TreeNodeRenderer.js +13 -0
- package/lib/esm/components/trees/common/components/TreeNodeRenderer.js.map +1 -0
- package/lib/esm/components/trees/common/components/TreeRenderer.d.ts +19 -0
- package/lib/esm/components/trees/common/components/TreeRenderer.js +26 -0
- package/lib/esm/components/trees/common/components/TreeRenderer.js.map +1 -0
- package/lib/esm/components/trees/common/components/TreeRenderer.scss +62 -0
- package/lib/esm/components/trees/common/components/VisibilityTree.d.ts +14 -0
- package/lib/esm/components/trees/common/components/VisibilityTree.js +37 -0
- package/lib/esm/components/trees/common/components/VisibilityTree.js.map +1 -0
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +11 -35
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +27 -58
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.d.ts +14 -14
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +12 -12
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.d.ts +24 -0
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js +258 -0
- package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeDefinition.js.map +1 -0
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +11 -35
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +39 -54
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.d.ts +14 -14
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +12 -12
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.d.ts +28 -0
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js +615 -0
- package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeDefinition.js.map +1 -0
- package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.d.ts +26 -0
- package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js +199 -0
- package/lib/esm/components/trees/imodel-content-tree/internal/IModelContentTreeIdsCache.js.map +1 -0
- package/lib/esm/components/trees/index.d.ts +4 -16
- package/lib/esm/components/trees/index.js +4 -16
- package/lib/esm/components/trees/index.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +17 -72
- package/lib/esm/components/trees/models-tree/ModelsTree.js +196 -132
- package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeButtons.d.ts +33 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js +92 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeButtons.js.map +1 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.d.ts +14 -35
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +38 -81
- package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
- package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.d.ts +67 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js +613 -0
- package/lib/esm/components/trees/models-tree/ModelsTreeDefinition.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.d.ts +24 -0
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js +117 -0
- package/lib/esm/components/trees/models-tree/internal/AlwaysAndNeverDrawnElementInfo.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.d.ts +44 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js +321 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeIdsCache.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.d.ts +31 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js +37 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeNode.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.d.ts +122 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js +748 -0
- package/lib/esm/components/trees/models-tree/internal/ModelsTreeVisibilityHandler.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/Tooltip.d.ts +13 -0
- package/lib/esm/components/trees/models-tree/internal/Tooltip.js +24 -0
- package/lib/esm/components/trees/models-tree/internal/Tooltip.js.map +1 -0
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.d.ts +10 -0
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js +39 -0
- package/lib/esm/components/trees/models-tree/internal/VisibilityChangeEventListener.js.map +1 -0
- package/lib/esm/tree-widget-react.d.ts +3 -4
- package/lib/esm/tree-widget-react.js +3 -4
- package/lib/esm/tree-widget-react.js.map +1 -1
- package/lib/public/locales/en/TreeWidget.json +126 -42
- package/package.json +19 -6
- package/lib/cjs/components/TreeFilteringState.d.ts +0 -18
- package/lib/cjs/components/TreeFilteringState.js +0 -46
- package/lib/cjs/components/TreeFilteringState.js.map +0 -1
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
- package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +0 -1
- package/lib/cjs/components/trees/VisibilityTreeBase.scss +0 -82
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +0 -158
- package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +0 -1
- package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +0 -100
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js +0 -98
- package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +0 -1
- package/lib/cjs/components/trees/category-tree/Categories.json +0 -99
- package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +0 -60
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js +0 -141
- package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +0 -1
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +0 -123
- package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +0 -172
- package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
- package/lib/cjs/components/trees/common/ContextMenu.d.ts +0 -39
- package/lib/cjs/components/trees/common/ContextMenu.js +0 -44
- package/lib/cjs/components/trees/common/ContextMenu.js.map +0 -1
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js +0 -51
- package/lib/cjs/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
- package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +0 -61
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js +0 -50
- package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +0 -1
- package/lib/cjs/components/trees/common/TreeRenderer.d.ts +0 -55
- package/lib/cjs/components/trees/common/TreeRenderer.js +0 -67
- package/lib/cjs/components/trees/common/TreeRenderer.js.map +0 -1
- package/lib/cjs/components/trees/common/TreeRenderer.scss +0 -149
- package/lib/cjs/components/trees/common/Types.d.ts +0 -57
- package/lib/cjs/components/trees/common/Types.js +0 -21
- package/lib/cjs/components/trees/common/Types.js.map +0 -1
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +0 -49
- package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +0 -1
- package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +0 -228
- package/lib/cjs/components/trees/imodel-content-tree/IModelContent.json +0 -443
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +0 -36
- package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +0 -651
- package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
- package/lib/cjs/components/trees/models-tree/Utils.d.ts +0 -29
- package/lib/cjs/components/trees/models-tree/Utils.js +0 -556
- package/lib/cjs/components/trees/models-tree/Utils.js.map +0 -1
- package/lib/cjs/components/utils/UseTreeTransientState.d.ts +0 -19
- package/lib/cjs/components/utils/UseTreeTransientState.js +0 -33
- package/lib/cjs/components/utils/UseTreeTransientState.js.map +0 -1
- package/lib/esm/components/TreeFilteringState.d.ts +0 -18
- package/lib/esm/components/TreeFilteringState.js +0 -42
- package/lib/esm/components/TreeFilteringState.js.map +0 -1
- package/lib/esm/components/trees/CategoriesVisibilityUtils.d.ts +0 -25
- package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +0 -1
- package/lib/esm/components/trees/VisibilityTreeBase.scss +0 -82
- package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +0 -67
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js +0 -154
- package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +0 -1
- package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +0 -100
- package/lib/esm/components/trees/VisibilityTreeRenderer.js +0 -86
- package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +0 -1
- package/lib/esm/components/trees/category-tree/Categories.json +0 -99
- package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +0 -60
- package/lib/esm/components/trees/category-tree/CategoriesTree.js +0 -111
- package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +0 -1
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.d.ts +0 -71
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +0 -116
- package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +0 -1
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.d.ts +0 -72
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +0 -164
- package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +0 -1
- package/lib/esm/components/trees/common/ContextMenu.d.ts +0 -39
- package/lib/esm/components/trees/common/ContextMenu.js +0 -39
- package/lib/esm/components/trees/common/ContextMenu.js.map +0 -1
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.d.ts +0 -27
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.js +0 -47
- package/lib/esm/components/trees/common/ReportingTreeEventHandler.js.map +0 -1
- package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +0 -61
- package/lib/esm/components/trees/common/TreeNodeRenderer.js +0 -44
- package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +0 -1
- package/lib/esm/components/trees/common/TreeRenderer.d.ts +0 -55
- package/lib/esm/components/trees/common/TreeRenderer.js +0 -59
- package/lib/esm/components/trees/common/TreeRenderer.js.map +0 -1
- package/lib/esm/components/trees/common/TreeRenderer.scss +0 -149
- package/lib/esm/components/trees/common/Types.d.ts +0 -57
- package/lib/esm/components/trees/common/Types.js +0 -18
- package/lib/esm/components/trees/common/Types.js.map +0 -1
- package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +0 -43
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js +0 -45
- package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +0 -1
- package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +0 -228
- package/lib/esm/components/trees/imodel-content-tree/IModelContent.json +0 -443
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +0 -19
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +0 -32
- package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +0 -1
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.d.ts +0 -130
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +0 -641
- package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +0 -1
- package/lib/esm/components/trees/models-tree/Utils.d.ts +0 -29
- package/lib/esm/components/trees/models-tree/Utils.js +0 -548
- package/lib/esm/components/trees/models-tree/Utils.js.map +0 -1
- package/lib/esm/components/utils/UseTreeTransientState.d.ts +0 -19
- package/lib/esm/components/utils/UseTreeTransientState.js +0 -29
- package/lib/esm/components/utils/UseTreeTransientState.js.map +0 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useNodeHighlighting = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const presentation_hierarchies_react_1 = require("@itwin/presentation-hierarchies-react");
|
|
11
|
+
/** @internal */
|
|
12
|
+
function useNodeHighlighting({ rootNodes, searchText, activeMatchIndex, onHighlightChanged }) {
|
|
13
|
+
const state = (0, react_1.useRef)({ nodeInfoMap: new Map(), totalMatches: 0 });
|
|
14
|
+
const [activeNodeId, setActiveNodeId] = (0, react_1.useState)();
|
|
15
|
+
const activeMatchIndexRef = useLatest(activeMatchIndex);
|
|
16
|
+
const activeNodeIdRef = useLatest(activeNodeId);
|
|
17
|
+
const updateHighlightInfo = (0, react_1.useCallback)((index, matches) => {
|
|
18
|
+
if (matches === 0) {
|
|
19
|
+
setActiveNodeId(undefined);
|
|
20
|
+
index = 0;
|
|
21
|
+
}
|
|
22
|
+
onHighlightChanged?.(index, matches);
|
|
23
|
+
}, [onHighlightChanged]);
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
const { state: newState, activeIndex } = rootNodes && searchText
|
|
26
|
+
? computeHighlightState(rootNodes, searchText, state.current, activeNodeIdRef.current, activeMatchIndexRef.current)
|
|
27
|
+
: { state: { nodeInfoMap: new Map(), totalMatches: 0 }, activeIndex: 0 };
|
|
28
|
+
state.current = newState;
|
|
29
|
+
updateHighlightInfo(activeIndex, newState.totalMatches);
|
|
30
|
+
}, [rootNodes, searchText, activeNodeIdRef, activeMatchIndexRef, updateHighlightInfo]);
|
|
31
|
+
(0, react_1.useEffect)(() => {
|
|
32
|
+
for (const nodeId of state.current.nodeInfoMap.keys()) {
|
|
33
|
+
if (getNodeChunkInfo(state.current, nodeId, activeMatchIndex)?.activeChunkIndex !== undefined) {
|
|
34
|
+
setActiveNodeId(nodeId);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}, [activeMatchIndex]);
|
|
38
|
+
const getLabel = (0, react_1.useCallback)((node) => {
|
|
39
|
+
const chunkInfo = getNodeChunkInfo(state.current, node.id, activeMatchIndex);
|
|
40
|
+
if (searchText && chunkInfo) {
|
|
41
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: markChunks(node.label, chunkInfo.chunks, chunkInfo.activeChunkIndex) });
|
|
42
|
+
}
|
|
43
|
+
return (0, jsx_runtime_1.jsx)("span", { children: node.label });
|
|
44
|
+
}, [searchText, activeMatchIndex]);
|
|
45
|
+
return { activeNodeId, getLabel };
|
|
46
|
+
}
|
|
47
|
+
exports.useNodeHighlighting = useNodeHighlighting;
|
|
48
|
+
function getNodeChunkInfo(state, nodeId, activeIndex) {
|
|
49
|
+
const info = state.nodeInfoMap.get(nodeId);
|
|
50
|
+
if (!info) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
if (activeIndex === undefined) {
|
|
54
|
+
return { chunks: info.matches };
|
|
55
|
+
}
|
|
56
|
+
const isActive = info && activeIndex >= info.startIndex && activeIndex < info.startIndex + info.matches.length;
|
|
57
|
+
return isActive ? { activeChunkIndex: activeIndex - info.startIndex, chunks: info.matches } : { chunks: info.matches };
|
|
58
|
+
}
|
|
59
|
+
function computeHighlightState(rootNodes, searchText, state, activeNodeId, activeMatchIndex) {
|
|
60
|
+
const newState = { nodeInfoMap: new Map(), totalMatches: 0 };
|
|
61
|
+
let newActiveIndex = activeMatchIndex ?? 0;
|
|
62
|
+
const computeHighlightStateRecursively = (nodes) => {
|
|
63
|
+
nodes.forEach((node) => {
|
|
64
|
+
if (!(0, presentation_hierarchies_react_1.isPresentationHierarchyNode)(node)) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const matches = findChunks(node.label, searchText);
|
|
68
|
+
newState.nodeInfoMap.set(node.id, { startIndex: newState.totalMatches, matches });
|
|
69
|
+
newState.totalMatches += matches.length;
|
|
70
|
+
if (typeof node.children !== "boolean") {
|
|
71
|
+
computeHighlightStateRecursively(node.children);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
computeHighlightStateRecursively(rootNodes);
|
|
76
|
+
// update active index to not cause active chunk jumps when hierarchy changes
|
|
77
|
+
if (activeNodeId && newActiveIndex !== 0) {
|
|
78
|
+
const activeNodeInfo = getNodeChunkInfo(state, activeNodeId, activeMatchIndex);
|
|
79
|
+
const updatedInfo = newState.nodeInfoMap.get(activeNodeId);
|
|
80
|
+
if (updatedInfo && activeNodeInfo?.activeChunkIndex !== undefined) {
|
|
81
|
+
newActiveIndex = updatedInfo.startIndex + activeNodeInfo.activeChunkIndex;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { state: newState, activeIndex: newActiveIndex };
|
|
85
|
+
}
|
|
86
|
+
function findChunks(text, searchText) {
|
|
87
|
+
const chunks = [];
|
|
88
|
+
const contentText = text.toLowerCase();
|
|
89
|
+
const inputText = searchText.toLowerCase();
|
|
90
|
+
let index = contentText.indexOf(inputText);
|
|
91
|
+
while (index !== -1) {
|
|
92
|
+
chunks.push({ start: index, end: index + inputText.length });
|
|
93
|
+
index = contentText.indexOf(inputText, index + 1);
|
|
94
|
+
}
|
|
95
|
+
return chunks;
|
|
96
|
+
}
|
|
97
|
+
function markChunks(text, chunks, activeChunk) {
|
|
98
|
+
const markedText = [];
|
|
99
|
+
let previousIndex = 0;
|
|
100
|
+
const { mergedChunks, newActiveIndex } = mergeChunks(chunks, activeChunk);
|
|
101
|
+
for (let i = 0; i < mergedChunks.length; i++) {
|
|
102
|
+
const { start, end } = mergedChunks[i];
|
|
103
|
+
// add unmarked text between previous chunk and current one
|
|
104
|
+
const nonMarkedText = text.substring(previousIndex, start);
|
|
105
|
+
nonMarkedText.length && markedText.push((0, jsx_runtime_1.jsx)("span", { children: nonMarkedText }, previousIndex));
|
|
106
|
+
// add marked chunk text
|
|
107
|
+
markedText.push((0, jsx_runtime_1.jsx)("mark", { className: i === newActiveIndex ? "tw-active-match-highlight" : undefined, children: text.substring(start, end) }, start));
|
|
108
|
+
previousIndex = end;
|
|
109
|
+
}
|
|
110
|
+
// add unmarked text after last chunk
|
|
111
|
+
const lastNonMarkedText = text.substring(previousIndex, text.length);
|
|
112
|
+
lastNonMarkedText.length && markedText.push((0, jsx_runtime_1.jsx)("span", { children: lastNonMarkedText }, previousIndex));
|
|
113
|
+
return markedText;
|
|
114
|
+
}
|
|
115
|
+
function mergeChunks(chunks, activeChunk) {
|
|
116
|
+
const mergedChunks = [];
|
|
117
|
+
let lastChunk;
|
|
118
|
+
let newActiveIndex;
|
|
119
|
+
for (let i = 0; i < chunks.length; i++) {
|
|
120
|
+
const chunk = chunks[i];
|
|
121
|
+
const isActive = i === activeChunk;
|
|
122
|
+
if (lastChunk && lastChunk.info.end === chunk.start && !isActive && !lastChunk.isActive) {
|
|
123
|
+
lastChunk.info.end = chunk.end;
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
isActive && (newActiveIndex = mergedChunks.length);
|
|
127
|
+
const newChunk = { start: chunk.start, end: chunk.end };
|
|
128
|
+
lastChunk = { isActive, info: newChunk };
|
|
129
|
+
mergedChunks.push(newChunk);
|
|
130
|
+
}
|
|
131
|
+
return { mergedChunks, newActiveIndex };
|
|
132
|
+
}
|
|
133
|
+
function useLatest(value) {
|
|
134
|
+
const ref = (0, react_1.useRef)(value);
|
|
135
|
+
(0, react_1.useEffect)(() => {
|
|
136
|
+
ref.current = value;
|
|
137
|
+
}, [value]);
|
|
138
|
+
return ref;
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=UseNodeHighlighting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UseNodeHighlighting.js","sourceRoot":"","sources":["../../../../../src/components/trees/common/UseNodeHighlighting.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\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { isPresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\n\nimport type { PresentationHierarchyNode, PresentationTreeNode } from \"@itwin/presentation-hierarchies-react\";\n\ninterface UseNodeHighlightingProps {\n rootNodes: PresentationTreeNode[] | undefined;\n searchText?: string;\n activeMatchIndex?: number;\n onHighlightChanged?: (activeMatchIndex: number, matches: number) => void;\n}\n\ninterface HighlightedChunk {\n start: number;\n end: number;\n}\n\ninterface NodeChunkInfo {\n chunks: HighlightedChunk[];\n activeChunkIndex?: number;\n}\n\ninterface NodeHighlightInfo {\n startIndex: number;\n matches: HighlightedChunk[];\n}\n\ninterface HighlightState {\n nodeInfoMap: Map<string, NodeHighlightInfo>;\n totalMatches: number;\n}\n\ninterface UseNodeHighlightingResult {\n activeNodeId?: string;\n getLabel: (node: PresentationHierarchyNode) => React.ReactElement;\n}\n\n/** @internal */\nexport function useNodeHighlighting({ rootNodes, searchText, activeMatchIndex, onHighlightChanged }: UseNodeHighlightingProps): UseNodeHighlightingResult {\n const state = useRef<HighlightState>({ nodeInfoMap: new Map(), totalMatches: 0 });\n const [activeNodeId, setActiveNodeId] = useState<string | undefined>();\n const activeMatchIndexRef = useLatest(activeMatchIndex);\n const activeNodeIdRef = useLatest(activeNodeId);\n\n const updateHighlightInfo = useCallback(\n (index: number, matches: number) => {\n if (matches === 0) {\n setActiveNodeId(undefined);\n index = 0;\n }\n onHighlightChanged?.(index, matches);\n },\n [onHighlightChanged],\n );\n\n useEffect(() => {\n const { state: newState, activeIndex } =\n rootNodes && searchText\n ? computeHighlightState(rootNodes, searchText, state.current, activeNodeIdRef.current, activeMatchIndexRef.current)\n : { state: { nodeInfoMap: new Map(), totalMatches: 0 }, activeIndex: 0 };\n\n state.current = newState;\n updateHighlightInfo(activeIndex, newState.totalMatches);\n }, [rootNodes, searchText, activeNodeIdRef, activeMatchIndexRef, updateHighlightInfo]);\n\n useEffect(() => {\n for (const nodeId of state.current.nodeInfoMap.keys()) {\n if (getNodeChunkInfo(state.current, nodeId, activeMatchIndex)?.activeChunkIndex !== undefined) {\n setActiveNodeId(nodeId);\n }\n }\n }, [activeMatchIndex]);\n\n const getLabel = useCallback(\n (node: PresentationHierarchyNode) => {\n const chunkInfo = getNodeChunkInfo(state.current, node.id, activeMatchIndex);\n if (searchText && chunkInfo) {\n return <>{markChunks(node.label, chunkInfo.chunks, chunkInfo.activeChunkIndex)}</>;\n }\n return <span>{node.label}</span>;\n },\n [searchText, activeMatchIndex],\n );\n\n return { activeNodeId, getLabel };\n}\n\nfunction getNodeChunkInfo(state: HighlightState, nodeId: string, activeIndex?: number): NodeChunkInfo | undefined {\n const info = state.nodeInfoMap.get(nodeId);\n if (!info) {\n return undefined;\n }\n if (activeIndex === undefined) {\n return { chunks: info.matches };\n }\n const isActive = info && activeIndex >= info.startIndex && activeIndex < info.startIndex + info.matches.length;\n return isActive ? { activeChunkIndex: activeIndex - info.startIndex, chunks: info.matches } : { chunks: info.matches };\n}\n\nfunction computeHighlightState(rootNodes: PresentationTreeNode[], searchText: string, state: HighlightState, activeNodeId?: string, activeMatchIndex?: number) {\n const newState: HighlightState = { nodeInfoMap: new Map(), totalMatches: 0 };\n let newActiveIndex = activeMatchIndex ?? 0;\n\n const computeHighlightStateRecursively = (nodes: Array<PresentationTreeNode>) => {\n nodes.forEach((node) => {\n if (!isPresentationHierarchyNode(node)) {\n return;\n }\n\n const matches = findChunks(node.label, searchText);\n newState.nodeInfoMap.set(node.id, { startIndex: newState.totalMatches, matches });\n newState.totalMatches += matches.length;\n\n if (typeof node.children !== \"boolean\") {\n computeHighlightStateRecursively(node.children);\n }\n });\n };\n\n computeHighlightStateRecursively(rootNodes);\n\n // update active index to not cause active chunk jumps when hierarchy changes\n if (activeNodeId && newActiveIndex !== 0) {\n const activeNodeInfo = getNodeChunkInfo(state, activeNodeId, activeMatchIndex);\n const updatedInfo = newState.nodeInfoMap.get(activeNodeId);\n\n if (updatedInfo && activeNodeInfo?.activeChunkIndex !== undefined) {\n newActiveIndex = updatedInfo.startIndex + activeNodeInfo.activeChunkIndex;\n }\n }\n\n return { state: newState, activeIndex: newActiveIndex };\n}\n\nfunction findChunks(text: string, searchText: string): HighlightedChunk[] {\n const chunks: HighlightedChunk[] = [];\n\n const contentText = text.toLowerCase();\n const inputText = searchText.toLowerCase();\n let index = contentText.indexOf(inputText);\n\n while (index !== -1) {\n chunks.push({ start: index, end: index + inputText.length });\n index = contentText.indexOf(inputText, index + 1);\n }\n\n return chunks;\n}\n\nfunction markChunks(text: string, chunks: HighlightedChunk[], activeChunk?: number) {\n const markedText: React.ReactElement[] = [];\n let previousIndex = 0;\n\n const { mergedChunks, newActiveIndex } = mergeChunks(chunks, activeChunk);\n\n for (let i = 0; i < mergedChunks.length; i++) {\n const { start, end } = mergedChunks[i];\n\n // add unmarked text between previous chunk and current one\n const nonMarkedText = text.substring(previousIndex, start);\n nonMarkedText.length && markedText.push(<span key={previousIndex}>{nonMarkedText}</span>);\n\n // add marked chunk text\n markedText.push(\n <mark key={start} className={i === newActiveIndex ? \"tw-active-match-highlight\" : undefined}>\n {text.substring(start, end)}\n </mark>,\n );\n previousIndex = end;\n }\n\n // add unmarked text after last chunk\n const lastNonMarkedText = text.substring(previousIndex, text.length);\n lastNonMarkedText.length && markedText.push(<span key={previousIndex}>{lastNonMarkedText}</span>);\n\n return markedText;\n}\n\nfunction mergeChunks(chunks: HighlightedChunk[], activeChunk?: number) {\n const mergedChunks: HighlightedChunk[] = [];\n let lastChunk: { isActive: boolean; info: HighlightedChunk } | undefined;\n let newActiveIndex: number | undefined;\n\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const isActive = i === activeChunk;\n if (lastChunk && lastChunk.info.end === chunk.start && !isActive && !lastChunk.isActive) {\n lastChunk.info.end = chunk.end;\n continue;\n }\n isActive && (newActiveIndex = mergedChunks.length);\n const newChunk = { start: chunk.start, end: chunk.end };\n lastChunk = { isActive, info: newChunk };\n mergedChunks.push(newChunk);\n }\n return { mergedChunks, newActiveIndex };\n}\n\nfunction useLatest<T>(value: T) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n\n return ref;\n}\n"]}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { Id64Array } from "@itwin/core-bentley";
|
|
2
|
+
import type { IModelConnection } from "@itwin/core-frontend";
|
|
3
|
+
import type { SchemaContext } from "@itwin/ecschema-metadata";
|
|
3
4
|
/** @internal */
|
|
4
|
-
export declare function
|
|
5
|
+
export declare function createIdsSelector(ids: Id64Array): string;
|
|
5
6
|
/** @internal */
|
|
6
|
-
export declare function
|
|
7
|
+
export declare function parseIdsSelectorResult(selectorResult: any): Id64Array;
|
|
7
8
|
/** @internal */
|
|
8
|
-
export declare function
|
|
9
|
+
export declare function pushToMap<TKey, TValue>(targetMap: Map<TKey, Set<TValue>>, key: TKey, value: TValue): void;
|
|
9
10
|
/** @internal */
|
|
10
|
-
export declare function
|
|
11
|
+
export declare function createIModelAccess({ imodel, getSchemaContext }: {
|
|
12
|
+
imodel: IModelConnection;
|
|
13
|
+
getSchemaContext: (imodel: IModelConnection) => SchemaContext;
|
|
14
|
+
}): {
|
|
15
|
+
createQueryReader(query: import("@itwin/presentation-shared").ECSqlQueryDef, config?: (import("@itwin/presentation-shared").ECSqlQueryReaderOptions & {
|
|
16
|
+
limit?: number | "unbounded" | undefined;
|
|
17
|
+
}) | undefined): AsyncIterableIterator<import("@itwin/presentation-shared").ECSqlQueryRow>;
|
|
18
|
+
classDerivesFrom(derivedClassFullName: string, candidateBaseClassFullName: string): boolean | Promise<boolean>;
|
|
19
|
+
getSchema(schemaName: string): Promise<import("@itwin/presentation-shared").EC.Schema | undefined>;
|
|
20
|
+
};
|
|
11
21
|
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -4,48 +4,52 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
7
|
+
exports.createIModelAccess = exports.pushToMap = exports.parseIdsSelectorResult = exports.createIdsSelector = void 0;
|
|
8
|
+
const presentation_core_interop_1 = require("@itwin/presentation-core-interop");
|
|
9
|
+
const presentation_hierarchies_1 = require("@itwin/presentation-hierarchies");
|
|
10
|
+
const presentation_shared_1 = require("@itwin/presentation-shared");
|
|
11
11
|
/** @internal */
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
function createIdsSelector(ids) {
|
|
13
|
+
// Note: `json_array` function only accepts up to 127 arguments and we may have more `ids` than that. As a workaround,
|
|
14
|
+
// we're creating an array of arrays
|
|
15
|
+
const slices = new Array();
|
|
16
|
+
for (let sliceStartIndex = 0; sliceStartIndex < ids.length; sliceStartIndex += 127) {
|
|
17
|
+
let sliceEndIndex = sliceStartIndex + 127;
|
|
18
|
+
if (sliceEndIndex > ids.length) {
|
|
19
|
+
sliceEndIndex = undefined;
|
|
20
|
+
}
|
|
21
|
+
slices.push(ids.slice(sliceStartIndex, sliceEndIndex));
|
|
22
|
+
}
|
|
23
|
+
return `json_array(${slices.map((sliceIds) => `json_array(${sliceIds.map((id) => `'${id}'`).join(",")})`).join(",")})`;
|
|
16
24
|
}
|
|
17
|
-
exports.
|
|
25
|
+
exports.createIdsSelector = createIdsSelector;
|
|
18
26
|
/** @internal */
|
|
19
|
-
function
|
|
20
|
-
if (!
|
|
21
|
-
return;
|
|
27
|
+
function parseIdsSelectorResult(selectorResult) {
|
|
28
|
+
if (!Array.isArray(selectorResult)) {
|
|
29
|
+
return [];
|
|
22
30
|
}
|
|
23
|
-
|
|
31
|
+
return selectorResult.reduce((arr, ids) => [...arr, ...(Array.isArray(ids) ? ids : [ids])], new Array());
|
|
24
32
|
}
|
|
25
|
-
exports.
|
|
33
|
+
exports.parseIdsSelectorResult = parseIdsSelectorResult;
|
|
26
34
|
/** @internal */
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
function pushToMap(targetMap, key, value) {
|
|
36
|
+
let set = targetMap.get(key);
|
|
37
|
+
if (!set) {
|
|
38
|
+
set = new Set();
|
|
39
|
+
targetMap.set(key, set);
|
|
40
|
+
}
|
|
41
|
+
set.add(value);
|
|
31
42
|
}
|
|
32
|
-
exports.
|
|
43
|
+
exports.pushToMap = pushToMap;
|
|
33
44
|
/** @internal */
|
|
34
|
-
function
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
-
|
|
41
|
-
for (const { name, renderer } of renderers) {
|
|
42
|
-
components_react_1.PropertyValueRendererManager.defaultManager.registerRenderer(name, renderer);
|
|
43
|
-
}
|
|
44
|
-
return () => {
|
|
45
|
-
for (const { name } of renderers) {
|
|
46
|
-
components_react_1.PropertyValueRendererManager.defaultManager.unregisterRenderer(name);
|
|
47
|
-
}
|
|
45
|
+
function createIModelAccess({ imodel, getSchemaContext }) {
|
|
46
|
+
const schemas = getSchemaContext(imodel);
|
|
47
|
+
const schemaProvider = (0, presentation_core_interop_1.createECSchemaProvider)(schemas);
|
|
48
|
+
return {
|
|
49
|
+
...schemaProvider,
|
|
50
|
+
...(0, presentation_shared_1.createCachingECClassHierarchyInspector)({ schemaProvider }),
|
|
51
|
+
...(0, presentation_hierarchies_1.createLimitingECSqlQueryExecutor)((0, presentation_core_interop_1.createECSqlQueryExecutor)(imodel), 1000),
|
|
48
52
|
};
|
|
49
53
|
}
|
|
50
|
-
exports.
|
|
54
|
+
exports.createIModelAccess = createIModelAccess;
|
|
51
55
|
//# sourceMappingURL=Utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/components/trees/common/Utils.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../../src/components/trees/common/Utils.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,gFAAoG;AACpG,8EAAmF;AACnF,oEAAoF;AAMpF,gBAAgB;AAChB,SAAgB,iBAAiB,CAAC,GAAc;IAC9C,sHAAsH;IACtH,oCAAoC;IACpC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAgB,CAAC;IACzC,KAAK,IAAI,eAAe,GAAG,CAAC,EAAE,eAAe,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,IAAI,GAAG,EAAE;QAClF,IAAI,aAAa,GAAuB,eAAe,GAAG,GAAG,CAAC;QAC9D,IAAI,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE;YAC9B,aAAa,GAAG,SAAS,CAAC;SAC3B;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;KACxD;IACD,OAAO,cAAc,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACzH,CAAC;AAZD,8CAYC;AAED,gBAAgB;AAChB,SAAgB,sBAAsB,CAAC,cAAmB;IACxD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QAClC,OAAO,EAAE,CAAC;KACX;IACD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAA8B,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,EAAc,CAAC,CAAC;AAClJ,CAAC;AALD,wDAKC;AAED,gBAAgB;AAChB,SAAgB,SAAS,CAAe,SAAiC,EAAE,GAAS,EAAE,KAAa;IACjG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE;QACR,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;QAChB,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjB,CAAC;AAPD,8BAOC;AAED,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAA+F;IAC1J,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,IAAA,kDAAsB,EAAC,OAAO,CAAC,CAAC;IACvD,OAAO;QACL,GAAG,cAAc;QACjB,GAAG,IAAA,4DAAsC,EAAC,EAAE,cAAc,EAAE,CAAC;QAC7D,GAAG,IAAA,2DAAgC,EAAC,IAAA,oDAAwB,EAAC,MAAM,CAAC,EAAE,IAAI,CAAC;KAC5E,CAAC;AACJ,CAAC;AARD,gDAQC","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\nimport { createECSchemaProvider, createECSqlQueryExecutor } from \"@itwin/presentation-core-interop\";\nimport { createLimitingECSqlQueryExecutor } from \"@itwin/presentation-hierarchies\";\nimport { createCachingECClassHierarchyInspector } from \"@itwin/presentation-shared\";\n\nimport type { Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { SchemaContext } from \"@itwin/ecschema-metadata\";\n\n/** @internal */\nexport function createIdsSelector(ids: Id64Array): string {\n // Note: `json_array` function only accepts up to 127 arguments and we may have more `ids` than that. As a workaround,\n // we're creating an array of arrays\n const slices = new Array<Id64String[]>();\n for (let sliceStartIndex = 0; sliceStartIndex < ids.length; sliceStartIndex += 127) {\n let sliceEndIndex: number | undefined = sliceStartIndex + 127;\n if (sliceEndIndex > ids.length) {\n sliceEndIndex = undefined;\n }\n slices.push(ids.slice(sliceStartIndex, sliceEndIndex));\n }\n return `json_array(${slices.map((sliceIds) => `json_array(${sliceIds.map((id) => `'${id}'`).join(\",\")})`).join(\",\")})`;\n}\n\n/** @internal */\nexport function parseIdsSelectorResult(selectorResult: any): Id64Array {\n if (!Array.isArray(selectorResult)) {\n return [];\n }\n return selectorResult.reduce((arr, ids: Id64String | Id64String[]) => [...arr, ...(Array.isArray(ids) ? ids : [ids])], new Array<Id64String>());\n}\n\n/** @internal */\nexport function pushToMap<TKey, TValue>(targetMap: Map<TKey, Set<TValue>>, key: TKey, value: TValue) {\n let set = targetMap.get(key);\n if (!set) {\n set = new Set();\n targetMap.set(key, set);\n }\n set.add(value);\n}\n\n/** @internal */\nexport function createIModelAccess({ imodel, getSchemaContext }: { imodel: IModelConnection; getSchemaContext: (imodel: IModelConnection) => SchemaContext }) {\n const schemas = getSchemaContext(imodel);\n const schemaProvider = createECSchemaProvider(schemas);\n return {\n ...schemaProvider,\n ...createCachingECClassHierarchyInspector({ schemaProvider }),\n ...createLimitingECSqlQueryExecutor(createECSqlQueryExecutor(imodel), 1000),\n };\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useSelectionHandler } from "@itwin/presentation-hierarchies-react";
|
|
2
|
+
import { useNodeHighlighting } from "../UseNodeHighlighting";
|
|
3
|
+
import { TreeRenderer } from "./TreeRenderer";
|
|
4
|
+
import type { IModelConnection } from "@itwin/core-frontend";
|
|
5
|
+
import type { SchemaContext } from "@itwin/ecschema-metadata";
|
|
6
|
+
import type { useTree } from "@itwin/presentation-hierarchies-react";
|
|
7
|
+
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
8
|
+
import type { UsageTrackedFeatures } from "../UseFeatureReporting";
|
|
9
|
+
type TreeRendererProps = Pick<ComponentPropsWithoutRef<typeof TreeRenderer>, "rootNodes" | "expandNode" | "onNodeClick" | "onNodeKeyDown" | "onFilterClick" | "isNodeSelected" | "getHierarchyLevelDetails" | "size" | "getIcon" | "getLabel" | "getSublabel" | "onNodeDoubleClick">;
|
|
10
|
+
interface BaseTreeOwnProps {
|
|
11
|
+
imodel: IModelConnection;
|
|
12
|
+
getSchemaContext: (imodel: IModelConnection) => SchemaContext;
|
|
13
|
+
height: number;
|
|
14
|
+
width: number;
|
|
15
|
+
treeName: string;
|
|
16
|
+
imodelAccess?: IModelAccess;
|
|
17
|
+
treeRenderer?: (treeProps: TreeRendererProps) => ReactNode;
|
|
18
|
+
hierarchyLevelSizeLimit?: number;
|
|
19
|
+
density?: "default" | "enlarged";
|
|
20
|
+
noDataMessage?: ReactNode;
|
|
21
|
+
reportUsage?: (props: {
|
|
22
|
+
featureId?: UsageTrackedFeatures;
|
|
23
|
+
reportInteraction: boolean;
|
|
24
|
+
}) => void;
|
|
25
|
+
}
|
|
26
|
+
type UseTreeProps = Parameters<typeof useTree>[0];
|
|
27
|
+
type UseSelectionHandlerProps = Parameters<typeof useSelectionHandler>[0];
|
|
28
|
+
type UseNodeHighlightingProps = Parameters<typeof useNodeHighlighting>[0];
|
|
29
|
+
type IModelAccess = UseTreeProps["imodelAccess"];
|
|
30
|
+
type BaseTreeProps = BaseTreeOwnProps & Pick<UseTreeProps, "getFilteredPaths" | "getHierarchyDefinition" | "onPerformanceMeasured"> & Pick<Partial<UseSelectionHandlerProps>, "selectionMode"> & Pick<UseNodeHighlightingProps, "searchText"> & Pick<TreeRendererProps, "getIcon" | "getSublabel" | "onNodeDoubleClick">;
|
|
31
|
+
/** @internal */
|
|
32
|
+
export declare function BaseTree({ getSchemaContext, hierarchyLevelSizeLimit, imodelAccess: providedIModelAccess, ...props }: BaseTreeProps): JSX.Element;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=BaseTree.d.ts.map
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseTree = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
11
|
+
const presentation_components_1 = require("@itwin/presentation-components");
|
|
12
|
+
const presentation_hierarchies_react_1 = require("@itwin/presentation-hierarchies-react");
|
|
13
|
+
const TreeWidget_1 = require("../../../../TreeWidget");
|
|
14
|
+
const UseFeatureReporting_1 = require("../UseFeatureReporting");
|
|
15
|
+
const UseHierarchiesLocalization_1 = require("../UseHierarchiesLocalization");
|
|
16
|
+
const UseHierarchyFiltering_1 = require("../UseHierarchyFiltering");
|
|
17
|
+
const UseIModelChangeListener_1 = require("../UseIModelChangeListener");
|
|
18
|
+
const UseNodeHighlighting_1 = require("../UseNodeHighlighting");
|
|
19
|
+
const Utils_1 = require("../Utils");
|
|
20
|
+
const Delayed_1 = require("./Delayed");
|
|
21
|
+
const ProgressOverlay_1 = require("./ProgressOverlay");
|
|
22
|
+
const TreeRenderer_1 = require("./TreeRenderer");
|
|
23
|
+
/** @internal */
|
|
24
|
+
function BaseTree({ getSchemaContext, hierarchyLevelSizeLimit, imodelAccess: providedIModelAccess, ...props }) {
|
|
25
|
+
const defaultHierarchyLevelSizeLimit = hierarchyLevelSizeLimit ?? 1000;
|
|
26
|
+
const imodelAccess = (0, react_1.useMemo)(() => {
|
|
27
|
+
return providedIModelAccess ?? (0, Utils_1.createIModelAccess)({ getSchemaContext, imodel: props.imodel });
|
|
28
|
+
}, [providedIModelAccess, getSchemaContext, props.imodel]);
|
|
29
|
+
return ((0, jsx_runtime_1.jsx)(presentation_components_1.SchemaMetadataContextProvider, { imodel: props.imodel, schemaContextProvider: getSchemaContext, children: (0, jsx_runtime_1.jsx)(BaseTreeRenderer, { ...props, imodelAccess: imodelAccess, defaultHierarchyLevelSizeLimit: defaultHierarchyLevelSizeLimit }) }));
|
|
30
|
+
}
|
|
31
|
+
exports.BaseTree = BaseTree;
|
|
32
|
+
/** @internal */
|
|
33
|
+
function BaseTreeRenderer({ imodel, imodelAccess, height, width, treeName, noDataMessage, getFilteredPaths, defaultHierarchyLevelSizeLimit, getHierarchyDefinition, selectionMode, onPerformanceMeasured, reportUsage, treeRenderer, density, getIcon, getSublabel, onNodeDoubleClick, searchText, }) {
|
|
34
|
+
const localizedStrings = (0, UseHierarchiesLocalization_1.useHierarchiesLocalization)();
|
|
35
|
+
const { rootNodes, isLoading, reloadTree, selectNodes, setFormatter: _setFormatter, expandNode, ...treeProps } = (0, presentation_hierarchies_react_1.useUnifiedSelectionTree)({
|
|
36
|
+
imodelAccess,
|
|
37
|
+
getHierarchyDefinition,
|
|
38
|
+
getFilteredPaths,
|
|
39
|
+
imodelKey: imodel.key,
|
|
40
|
+
sourceName: treeName,
|
|
41
|
+
localizedStrings,
|
|
42
|
+
onPerformanceMeasured,
|
|
43
|
+
onHierarchyLimitExceeded: () => reportUsage?.({ featureId: "hierarchy-level-size-limit-hit", reportInteraction: false }),
|
|
44
|
+
});
|
|
45
|
+
(0, UseIModelChangeListener_1.useIModelChangeListener)({ imodel, action: (0, react_1.useCallback)(() => reloadTree({ dataSourceChanged: true }), [reloadTree]) });
|
|
46
|
+
const reportingSelectNodes = (0, UseFeatureReporting_1.useReportingAction)({ action: selectNodes, reportUsage });
|
|
47
|
+
const { onNodeClick, onNodeKeyDown } = (0, presentation_hierarchies_react_1.useSelectionHandler)({ rootNodes, selectNodes: reportingSelectNodes, selectionMode: selectionMode ?? "single" });
|
|
48
|
+
const { filteringDialog, onFilterClick } = (0, UseHierarchyFiltering_1.useHierarchyLevelFiltering)({
|
|
49
|
+
imodel,
|
|
50
|
+
defaultHierarchyLevelSizeLimit,
|
|
51
|
+
reportUsage,
|
|
52
|
+
});
|
|
53
|
+
const reportingExpandNode = (0, UseFeatureReporting_1.useReportingAction)({ action: expandNode, reportUsage });
|
|
54
|
+
const reportingOnFilterClicked = (0, UseFeatureReporting_1.useReportingAction)({ action: onFilterClick, reportUsage });
|
|
55
|
+
const { getLabel } = (0, UseNodeHighlighting_1.useNodeHighlighting)({ rootNodes, searchText });
|
|
56
|
+
if (rootNodes === undefined) {
|
|
57
|
+
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.Flex, { alignItems: "center", justifyContent: "center", flexDirection: "column", style: { width, height }, children: (0, jsx_runtime_1.jsx)(Delayed_1.Delayed, { show: true, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.ProgressRadial, { size: "large" }) }) }));
|
|
58
|
+
}
|
|
59
|
+
if (rootNodes.length === 0 && !isLoading) {
|
|
60
|
+
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.Flex, { alignItems: "center", justifyContent: "center", flexDirection: "column", style: { width, height }, children: noDataMessage ? noDataMessage : (0, jsx_runtime_1.jsx)(itwinui_react_1.Text, { children: TreeWidget_1.TreeWidget.translate("baseTree.dataIsNotAvailable") }) }));
|
|
61
|
+
}
|
|
62
|
+
const treeRendererProps = {
|
|
63
|
+
...treeProps,
|
|
64
|
+
rootNodes,
|
|
65
|
+
onNodeClick,
|
|
66
|
+
onNodeKeyDown,
|
|
67
|
+
expandNode: reportingExpandNode,
|
|
68
|
+
onFilterClick: reportingOnFilterClicked,
|
|
69
|
+
getIcon,
|
|
70
|
+
getLabel,
|
|
71
|
+
getSublabel,
|
|
72
|
+
onNodeDoubleClick,
|
|
73
|
+
size: density === "enlarged" ? "default" : "small",
|
|
74
|
+
};
|
|
75
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: { position: "relative", height, overflow: "hidden" }, children: [(0, jsx_runtime_1.jsxs)("div", { id: "tw-tree-renderer-container", style: { overflow: "auto", height: "100%" }, children: [treeRenderer ? treeRenderer(treeRendererProps) : (0, jsx_runtime_1.jsx)(TreeRenderer_1.TreeRenderer, { ...treeRendererProps }), filteringDialog] }), (0, jsx_runtime_1.jsx)(Delayed_1.Delayed, { show: isLoading, children: (0, jsx_runtime_1.jsx)(ProgressOverlay_1.ProgressOverlay, {}) })] }));
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=BaseTree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTree.js","sourceRoot":"","sources":["../../../../../../src/components/trees/common/components/BaseTree.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\nimport { useCallback, useMemo } from \"react\";\nimport { Flex, ProgressRadial, Text } from \"@itwin/itwinui-react\";\nimport { SchemaMetadataContextProvider } from \"@itwin/presentation-components\";\nimport { useSelectionHandler, useUnifiedSelectionTree } from \"@itwin/presentation-hierarchies-react\";\nimport { TreeWidget } from \"../../../../TreeWidget\";\nimport { useReportingAction } from \"../UseFeatureReporting\";\nimport { useHierarchiesLocalization } from \"../UseHierarchiesLocalization\";\nimport { useHierarchyLevelFiltering } from \"../UseHierarchyFiltering\";\nimport { useIModelChangeListener } from \"../UseIModelChangeListener\";\nimport { useNodeHighlighting } from \"../UseNodeHighlighting\";\nimport { createIModelAccess } from \"../Utils\";\nimport { Delayed } from \"./Delayed\";\nimport { ProgressOverlay } from \"./ProgressOverlay\";\nimport { TreeRenderer } from \"./TreeRenderer\";\n\nimport type { MarkRequired } from \"@itwin/core-bentley\";\nimport type { IModelConnection } from \"@itwin/core-frontend\";\nimport type { SchemaContext } from \"@itwin/ecschema-metadata\";\nimport type { useTree } from \"@itwin/presentation-hierarchies-react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport type { UsageTrackedFeatures } from \"../UseFeatureReporting\";\n\ntype TreeRendererProps = Pick<\n ComponentPropsWithoutRef<typeof TreeRenderer>,\n | \"rootNodes\"\n | \"expandNode\"\n | \"onNodeClick\"\n | \"onNodeKeyDown\"\n | \"onFilterClick\"\n | \"isNodeSelected\"\n | \"getHierarchyLevelDetails\"\n | \"size\"\n | \"getIcon\"\n | \"getLabel\"\n | \"getSublabel\"\n | \"onNodeDoubleClick\"\n>;\n\ninterface BaseTreeOwnProps {\n imodel: IModelConnection;\n getSchemaContext: (imodel: IModelConnection) => SchemaContext;\n height: number;\n width: number;\n treeName: string;\n imodelAccess?: IModelAccess;\n treeRenderer?: (treeProps: TreeRendererProps) => ReactNode;\n hierarchyLevelSizeLimit?: number;\n density?: \"default\" | \"enlarged\";\n noDataMessage?: ReactNode;\n reportUsage?: (props: { featureId?: UsageTrackedFeatures; reportInteraction: boolean }) => void;\n}\n\ntype UseTreeProps = Parameters<typeof useTree>[0];\ntype UseSelectionHandlerProps = Parameters<typeof useSelectionHandler>[0];\ntype UseNodeHighlightingProps = Parameters<typeof useNodeHighlighting>[0];\ntype IModelAccess = UseTreeProps[\"imodelAccess\"];\n\ntype BaseTreeProps = BaseTreeOwnProps &\n Pick<UseTreeProps, \"getFilteredPaths\" | \"getHierarchyDefinition\" | \"onPerformanceMeasured\"> &\n Pick<Partial<UseSelectionHandlerProps>, \"selectionMode\"> &\n Pick<UseNodeHighlightingProps, \"searchText\"> &\n Pick<TreeRendererProps, \"getIcon\" | \"getSublabel\" | \"onNodeDoubleClick\">;\n\n/** @internal */\nexport function BaseTree({ getSchemaContext, hierarchyLevelSizeLimit, imodelAccess: providedIModelAccess, ...props }: BaseTreeProps) {\n const defaultHierarchyLevelSizeLimit = hierarchyLevelSizeLimit ?? 1000;\n\n const imodelAccess = useMemo(() => {\n return providedIModelAccess ?? createIModelAccess({ getSchemaContext, imodel: props.imodel });\n }, [providedIModelAccess, getSchemaContext, props.imodel]);\n\n return (\n <SchemaMetadataContextProvider imodel={props.imodel} schemaContextProvider={getSchemaContext}>\n <BaseTreeRenderer {...props} imodelAccess={imodelAccess} defaultHierarchyLevelSizeLimit={defaultHierarchyLevelSizeLimit} />\n </SchemaMetadataContextProvider>\n );\n}\n\n/** @internal */\nfunction BaseTreeRenderer({\n imodel,\n imodelAccess,\n height,\n width,\n treeName,\n noDataMessage,\n getFilteredPaths,\n defaultHierarchyLevelSizeLimit,\n getHierarchyDefinition,\n selectionMode,\n onPerformanceMeasured,\n reportUsage,\n treeRenderer,\n density,\n getIcon,\n getSublabel,\n onNodeDoubleClick,\n searchText,\n}: MarkRequired<Omit<BaseTreeProps, \"getSchemaContext\">, \"imodelAccess\"> & { defaultHierarchyLevelSizeLimit: number }) {\n const localizedStrings = useHierarchiesLocalization();\n const {\n rootNodes,\n isLoading,\n reloadTree,\n selectNodes,\n setFormatter: _setFormatter,\n expandNode,\n ...treeProps\n } = useUnifiedSelectionTree({\n imodelAccess,\n getHierarchyDefinition,\n getFilteredPaths,\n imodelKey: imodel.key,\n sourceName: treeName,\n localizedStrings,\n onPerformanceMeasured,\n onHierarchyLimitExceeded: () => reportUsage?.({ featureId: \"hierarchy-level-size-limit-hit\", reportInteraction: false }),\n });\n\n useIModelChangeListener({ imodel, action: useCallback(() => reloadTree({ dataSourceChanged: true }), [reloadTree]) });\n const reportingSelectNodes = useReportingAction({ action: selectNodes, reportUsage });\n const { onNodeClick, onNodeKeyDown } = useSelectionHandler({ rootNodes, selectNodes: reportingSelectNodes, selectionMode: selectionMode ?? \"single\" });\n const { filteringDialog, onFilterClick } = useHierarchyLevelFiltering({\n imodel,\n defaultHierarchyLevelSizeLimit,\n reportUsage,\n });\n const reportingExpandNode = useReportingAction({ action: expandNode, reportUsage });\n const reportingOnFilterClicked = useReportingAction({ action: onFilterClick, reportUsage });\n const { getLabel } = useNodeHighlighting({ rootNodes, searchText });\n\n if (rootNodes === undefined) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\" style={{ width, height }}>\n <Delayed show={true}>\n <ProgressRadial size=\"large\" />\n </Delayed>\n </Flex>\n );\n }\n\n if (rootNodes.length === 0 && !isLoading) {\n return (\n <Flex alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\" style={{ width, height }}>\n {noDataMessage ? noDataMessage : <Text>{TreeWidget.translate(\"baseTree.dataIsNotAvailable\")}</Text>}\n </Flex>\n );\n }\n\n const treeRendererProps: TreeRendererProps = {\n ...treeProps,\n rootNodes,\n onNodeClick,\n onNodeKeyDown,\n expandNode: reportingExpandNode,\n onFilterClick: reportingOnFilterClicked,\n getIcon,\n getLabel,\n getSublabel,\n onNodeDoubleClick,\n size: density === \"enlarged\" ? \"default\" : \"small\",\n };\n\n return (\n <div style={{ position: \"relative\", height, overflow: \"hidden\" }}>\n <div id=\"tw-tree-renderer-container\" style={{ overflow: \"auto\", height: \"100%\" }}>\n {treeRenderer ? treeRenderer(treeRendererProps) : <TreeRenderer {...treeRendererProps} />}\n {filteringDialog}\n </div>\n <Delayed show={isLoading}>\n <ProgressOverlay />\n </Delayed>\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Delayed = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
const react_1 = require("react");
|
|
10
|
+
/** @internal */
|
|
11
|
+
function Delayed({ show, children }) {
|
|
12
|
+
const [visible, setVisible] = (0, react_1.useState)(false);
|
|
13
|
+
(0, react_1.useLayoutEffect)(() => {
|
|
14
|
+
if (!show) {
|
|
15
|
+
setVisible(false);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const timer = setTimeout(() => {
|
|
19
|
+
setVisible(show);
|
|
20
|
+
}, 250);
|
|
21
|
+
return () => {
|
|
22
|
+
clearTimeout(timer);
|
|
23
|
+
};
|
|
24
|
+
}, [show]);
|
|
25
|
+
if (!visible) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
|
|
29
|
+
}
|
|
30
|
+
exports.Delayed = Delayed;
|
|
31
|
+
//# sourceMappingURL=Delayed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Delayed.js","sourceRoot":"","sources":["../../../../../../src/components/trees/common/components/Delayed.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,iCAAkD;AAIlD,gBAAgB;AAChB,SAAgB,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAwC;IAC9E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAE9C,IAAA,uBAAe,EAAC,GAAG,EAAE;QACnB,IAAI,CAAC,IAAI,EAAE;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,OAAO;SACR;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,IAAI,CAAC,OAAO,EAAE;QACZ,OAAO,IAAI,CAAC;KACb;IAED,OAAO,2DAAG,QAAQ,GAAI,CAAC;AACzB,CAAC;AAtBD,0BAsBC","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\nimport { useLayoutEffect, useState } from \"react\";\n\nimport type { PropsWithChildren } from \"react\";\n\n/** @internal */\nexport function Delayed({ show, children }: PropsWithChildren<{ show: boolean }>) {\n const [visible, setVisible] = useState(false);\n\n useLayoutEffect(() => {\n if (!show) {\n setVisible(false);\n return;\n }\n\n const timer = setTimeout(() => {\n setVisible(show);\n }, 250);\n return () => {\n clearTimeout(timer);\n };\n }, [show]);\n\n if (!visible) {\n return null;\n }\n\n return <>{children}</>;\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProgressOverlay = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
/*---------------------------------------------------------------------------------------------
|
|
6
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
7
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
8
|
+
*--------------------------------------------------------------------------------------------*/
|
|
9
|
+
require("./ProgressOverlay.scss");
|
|
10
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
11
|
+
/** @internal */
|
|
12
|
+
function ProgressOverlay() {
|
|
13
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "tw-progress-overlay-container", children: [(0, jsx_runtime_1.jsx)(itwinui_react_1.ProgressLinear, { indeterminate: true }), (0, jsx_runtime_1.jsx)("div", { className: "tw-progress-overlay-backdrop" })] }));
|
|
14
|
+
}
|
|
15
|
+
exports.ProgressOverlay = ProgressOverlay;
|
|
16
|
+
//# sourceMappingURL=ProgressOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressOverlay.js","sourceRoot":"","sources":["../../../../../../src/components/trees/common/components/ProgressOverlay.tsx"],"names":[],"mappings":";;;;AAAA;;;gGAGgG;AAEhG,kCAAgC;AAChC,wDAAsD;AAEtD,gBAAgB;AAChB,SAAgB,eAAe;IAC7B,OAAO,CACL,iCAAK,SAAS,EAAC,+BAA+B,aAC5C,uBAAC,8BAAc,IAAC,aAAa,SAAG,EAChC,gCAAK,SAAS,EAAC,8BAA8B,GAAG,IAC5C,CACP,CAAC;AACJ,CAAC;AAPD,0CAOC","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\nimport \"./ProgressOverlay.scss\";\nimport { ProgressLinear } from \"@itwin/itwinui-react\";\n\n/** @internal */\nexport function ProgressOverlay() {\n return (\n <div className=\"tw-progress-overlay-container\">\n <ProgressLinear indeterminate />\n <div className=\"tw-progress-overlay-backdrop\" />\n </div>\n );\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
.tw-progress-overlay-container {
|
|
7
|
+
position: absolute;
|
|
8
|
+
left: 0;
|
|
9
|
+
top: 0;
|
|
10
|
+
z-index: 1;
|
|
11
|
+
height: 100%;
|
|
12
|
+
width: 100%;
|
|
13
|
+
overflow: hidden;
|
|
14
|
+
|
|
15
|
+
.tw-progress-overlay-backdrop {
|
|
16
|
+
opacity: 0.5;
|
|
17
|
+
background-color: var(--iui-color-background-backdrop);
|
|
18
|
+
height: 100%;
|
|
19
|
+
width: 100%;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Checkbox } from "@itwin/itwinui-react";
|
|
2
|
+
import type { PresentationHierarchyNode, RenderedTreeNode } from "@itwin/presentation-hierarchies-react";
|
|
3
|
+
import type { ComponentPropsWithoutRef } from "react";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export interface TreeNodeCheckboxState {
|
|
6
|
+
state: "on" | "off" | "partial";
|
|
7
|
+
isDisabled?: boolean;
|
|
8
|
+
tooltip?: string;
|
|
9
|
+
}
|
|
10
|
+
interface TreeNodeCheckboxOwnProps {
|
|
11
|
+
node: RenderedTreeNode;
|
|
12
|
+
onCheckboxClicked: (node: PresentationHierarchyNode, checked: boolean) => void;
|
|
13
|
+
getCheckboxState: (node: PresentationHierarchyNode) => TreeNodeCheckboxState;
|
|
14
|
+
}
|
|
15
|
+
type CheckboxProps = ComponentPropsWithoutRef<typeof Checkbox>;
|
|
16
|
+
type TreeNodeCheckboxProps = TreeNodeCheckboxOwnProps & Omit<CheckboxProps, "onClick" | "checked" | "onChange" | "indeterminate" | "disabled" | "title">;
|
|
17
|
+
/** @internal */
|
|
18
|
+
export declare function TreeNodeCheckbox({ node, onCheckboxClicked, getCheckboxState, ...props }: TreeNodeCheckboxProps): JSX.Element | null;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=TreeNodeCheckbox.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TreeNodeCheckbox = void 0;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
/*---------------------------------------------------------------------------------------------
|
|
9
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
10
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
11
|
+
*--------------------------------------------------------------------------------------------*/
|
|
12
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
13
|
+
const itwinui_react_1 = require("@itwin/itwinui-react");
|
|
14
|
+
const presentation_hierarchies_react_1 = require("@itwin/presentation-hierarchies-react");
|
|
15
|
+
/** @internal */
|
|
16
|
+
function TreeNodeCheckbox({ node, onCheckboxClicked, getCheckboxState, ...props }) {
|
|
17
|
+
if ("type" in node || !(0, presentation_hierarchies_react_1.isPresentationHierarchyNode)(node)) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const checkboxState = getCheckboxState(node);
|
|
21
|
+
return ((0, jsx_runtime_1.jsx)(itwinui_react_1.Checkbox, { ...props, className: (0, classnames_1.default)("tw-tree-node-checkbox", props.className), checked: checkboxState.state === "on", onClick: (e) => {
|
|
22
|
+
e.stopPropagation();
|
|
23
|
+
}, onChange: (e) => {
|
|
24
|
+
onCheckboxClicked(node, e.currentTarget.checked);
|
|
25
|
+
}, indeterminate: checkboxState.state === "partial", disabled: checkboxState.isDisabled, title: checkboxState.tooltip }));
|
|
26
|
+
}
|
|
27
|
+
exports.TreeNodeCheckbox = TreeNodeCheckbox;
|
|
28
|
+
//# sourceMappingURL=TreeNodeCheckbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TreeNodeCheckbox.js","sourceRoot":"","sources":["../../../../../../src/components/trees/common/components/TreeNodeCheckbox.tsx"],"names":[],"mappings":";;;;;;;AAAA;;;gGAGgG;AAEhG,4DAA4B;AAC5B,wDAAgD;AAChD,0FAAoF;AAqBpF,gBAAgB;AAChB,SAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,KAAK,EAAyB;IAC7G,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,IAAA,4DAA2B,EAAC,IAAI,CAAC,EAAE;QACxD,OAAO,IAAI,CAAC;KACb;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,CACL,uBAAC,wBAAQ,OACH,KAAK,EACT,SAAS,EAAE,IAAA,oBAAE,EAAC,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC,EACvD,OAAO,EAAE,aAAa,CAAC,KAAK,KAAK,IAAI,EACrC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,eAAe,EAAE,CAAC;QACtB,CAAC,EACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC,EACD,aAAa,EAAE,aAAa,CAAC,KAAK,KAAK,SAAS,EAChD,QAAQ,EAAE,aAAa,CAAC,UAAU,EAClC,KAAK,EAAE,aAAa,CAAC,OAAO,GAC5B,CACH,CAAC;AACJ,CAAC;AAtBD,4CAsBC","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\nimport cx from \"classnames\";\nimport { Checkbox } from \"@itwin/itwinui-react\";\nimport { isPresentationHierarchyNode } from \"@itwin/presentation-hierarchies-react\";\n\nimport type { PresentationHierarchyNode, RenderedTreeNode } from \"@itwin/presentation-hierarchies-react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\n/** @internal */\nexport interface TreeNodeCheckboxState {\n state: \"on\" | \"off\" | \"partial\";\n isDisabled?: boolean;\n tooltip?: string;\n}\n\ninterface TreeNodeCheckboxOwnProps {\n node: RenderedTreeNode;\n onCheckboxClicked: (node: PresentationHierarchyNode, checked: boolean) => void;\n getCheckboxState: (node: PresentationHierarchyNode) => TreeNodeCheckboxState;\n}\n\ntype CheckboxProps = ComponentPropsWithoutRef<typeof Checkbox>;\ntype TreeNodeCheckboxProps = TreeNodeCheckboxOwnProps & Omit<CheckboxProps, \"onClick\" | \"checked\" | \"onChange\" | \"indeterminate\" | \"disabled\" | \"title\">;\n\n/** @internal */\nexport function TreeNodeCheckbox({ node, onCheckboxClicked, getCheckboxState, ...props }: TreeNodeCheckboxProps) {\n if (\"type\" in node || !isPresentationHierarchyNode(node)) {\n return null;\n }\n\n const checkboxState = getCheckboxState(node);\n return (\n <Checkbox\n {...props}\n className={cx(\"tw-tree-node-checkbox\", props.className)}\n checked={checkboxState.state === \"on\"}\n onClick={(e) => {\n e.stopPropagation();\n }}\n onChange={(e) => {\n onCheckboxClicked(node, e.currentTarget.checked);\n }}\n indeterminate={checkboxState.state === \"partial\"}\n disabled={checkboxState.isDisabled}\n title={checkboxState.tooltip}\n />\n );\n}\n"]}
|