@itwin/tree-widget-react 1.2.1 → 2.0.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +1 -1
  3. package/lib/cjs/TreeWidget.d.ts +0 -1
  4. package/lib/cjs/TreeWidget.js +9 -10
  5. package/lib/cjs/TreeWidget.js.map +1 -1
  6. package/lib/cjs/components/SelectableTree.js +24 -13
  7. package/lib/cjs/components/SelectableTree.js.map +1 -1
  8. package/lib/cjs/components/TreeFilteringState.js +3 -3
  9. package/lib/cjs/components/TreeFilteringState.js.map +1 -1
  10. package/lib/cjs/components/TreeWidgetUiItemsProvider.js +7 -5
  11. package/lib/cjs/components/TreeWidgetUiItemsProvider.js.map +1 -1
  12. package/lib/cjs/components/TreeWidgetUiItemsProvider.scss +1 -1
  13. package/lib/cjs/components/tree-header/TreeHeader.js +15 -12
  14. package/lib/cjs/components/tree-header/TreeHeader.js.map +1 -1
  15. package/lib/cjs/components/tree-header/TreeHeader.scss +1 -1
  16. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js +13 -8
  17. package/lib/cjs/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  18. package/lib/cjs/components/trees/VisibilityTreeBase.scss +1 -1
  19. package/lib/cjs/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  20. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js +25 -28
  21. package/lib/cjs/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  22. package/lib/cjs/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  23. package/lib/cjs/components/trees/VisibilityTreeRenderer.js +28 -10
  24. package/lib/cjs/components/trees/VisibilityTreeRenderer.js.map +1 -1
  25. package/lib/cjs/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  26. package/lib/cjs/components/trees/category-tree/CategoriesTree.js +47 -30
  27. package/lib/cjs/components/trees/category-tree/CategoriesTree.js.map +1 -1
  28. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  29. package/lib/cjs/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  30. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  31. package/lib/cjs/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  32. package/lib/cjs/components/trees/common/ContextMenu.js +4 -4
  33. package/lib/cjs/components/trees/common/ContextMenu.js.map +1 -1
  34. package/lib/cjs/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  35. package/lib/cjs/components/trees/common/TreeNodeRenderer.js +4 -4
  36. package/lib/cjs/components/trees/common/TreeNodeRenderer.js.map +1 -1
  37. package/lib/cjs/components/trees/common/TreeRenderer.d.ts +15 -1
  38. package/lib/cjs/components/trees/common/TreeRenderer.js +17 -7
  39. package/lib/cjs/components/trees/common/TreeRenderer.js.map +1 -1
  40. package/lib/cjs/components/trees/common/TreeRenderer.scss +7 -2
  41. package/lib/cjs/components/trees/common/Types.d.ts +8 -0
  42. package/lib/cjs/components/trees/common/Types.js +3 -3
  43. package/lib/cjs/components/trees/common/Types.js.map +1 -1
  44. package/lib/cjs/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  45. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js +47 -0
  46. package/lib/cjs/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  47. package/lib/cjs/components/trees/common/Utils.js +7 -5
  48. package/lib/cjs/components/trees/common/Utils.js.map +1 -1
  49. package/lib/cjs/components/trees/external-sources-tree/ExternalSources.json +1 -3
  50. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  51. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js +19 -7
  52. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  53. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  54. package/lib/cjs/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  55. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  56. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js +16 -12
  57. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  58. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  59. package/lib/cjs/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  60. package/lib/cjs/components/trees/index.js +3 -3
  61. package/lib/cjs/components/trees/index.js.map +1 -1
  62. package/lib/cjs/components/trees/models-tree/ModelsTree.d.ts +7 -2
  63. package/lib/cjs/components/trees/models-tree/ModelsTree.js +76 -62
  64. package/lib/cjs/components/trees/models-tree/ModelsTree.js.map +1 -1
  65. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js +11 -18
  66. package/lib/cjs/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  67. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  68. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js +31 -0
  69. package/lib/cjs/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  70. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  71. package/lib/cjs/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  72. package/lib/cjs/components/trees/models-tree/Utils.d.ts +4 -0
  73. package/lib/cjs/components/trees/models-tree/Utils.js +52 -58
  74. package/lib/cjs/components/trees/models-tree/Utils.js.map +1 -1
  75. package/lib/cjs/components/utils/AutoSizer.js +7 -5
  76. package/lib/cjs/components/utils/AutoSizer.js.map +1 -1
  77. package/lib/cjs/components/utils/IsPromiseLike.js +4 -4
  78. package/lib/cjs/components/utils/IsPromiseLike.js.map +1 -1
  79. package/lib/cjs/components/utils/UseTreeTransientState.js +3 -3
  80. package/lib/cjs/components/utils/UseTreeTransientState.js.map +1 -1
  81. package/lib/cjs/e2e-tests/TreeWidget.test.js +55 -1
  82. package/lib/cjs/e2e-tests/TreeWidget.test.js.map +1 -1
  83. package/lib/cjs/e2e-tests/utils.d.ts +1 -0
  84. package/lib/cjs/e2e-tests/utils.js +4 -5
  85. package/lib/cjs/e2e-tests/utils.js.map +1 -1
  86. package/lib/cjs/tree-widget-react.js +3 -3
  87. package/lib/cjs/tree-widget-react.js.map +1 -1
  88. package/lib/esm/TreeWidget.d.ts +0 -1
  89. package/lib/esm/TreeWidget.js +9 -10
  90. package/lib/esm/TreeWidget.js.map +1 -1
  91. package/lib/esm/components/SelectableTree.js +24 -13
  92. package/lib/esm/components/SelectableTree.js.map +1 -1
  93. package/lib/esm/components/TreeFilteringState.js +3 -3
  94. package/lib/esm/components/TreeFilteringState.js.map +1 -1
  95. package/lib/esm/components/TreeWidgetUiItemsProvider.js +7 -5
  96. package/lib/esm/components/TreeWidgetUiItemsProvider.js.map +1 -1
  97. package/lib/esm/components/TreeWidgetUiItemsProvider.scss +1 -1
  98. package/lib/esm/components/tree-header/TreeHeader.js +15 -12
  99. package/lib/esm/components/tree-header/TreeHeader.js.map +1 -1
  100. package/lib/esm/components/tree-header/TreeHeader.scss +1 -1
  101. package/lib/esm/components/trees/CategoriesVisibilityUtils.js +13 -8
  102. package/lib/esm/components/trees/CategoriesVisibilityUtils.js.map +1 -1
  103. package/lib/esm/components/trees/VisibilityTreeBase.scss +1 -1
  104. package/lib/esm/components/trees/VisibilityTreeEventHandler.d.ts +1 -1
  105. package/lib/esm/components/trees/VisibilityTreeEventHandler.js +22 -25
  106. package/lib/esm/components/trees/VisibilityTreeEventHandler.js.map +1 -1
  107. package/lib/esm/components/trees/VisibilityTreeRenderer.d.ts +20 -4
  108. package/lib/esm/components/trees/VisibilityTreeRenderer.js +27 -10
  109. package/lib/esm/components/trees/VisibilityTreeRenderer.js.map +1 -1
  110. package/lib/esm/components/trees/category-tree/CategoriesTree.d.ts +7 -2
  111. package/lib/esm/components/trees/category-tree/CategoriesTree.js +51 -34
  112. package/lib/esm/components/trees/category-tree/CategoriesTree.js.map +1 -1
  113. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js +14 -10
  114. package/lib/esm/components/trees/category-tree/CategoriesTreeComponent.js.map +1 -1
  115. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js +18 -13
  116. package/lib/esm/components/trees/category-tree/CategoryVisibilityHandler.js.map +1 -1
  117. package/lib/esm/components/trees/common/ContextMenu.js +4 -4
  118. package/lib/esm/components/trees/common/ContextMenu.js.map +1 -1
  119. package/lib/esm/components/trees/common/TreeNodeRenderer.d.ts +1 -1
  120. package/lib/esm/components/trees/common/TreeNodeRenderer.js +4 -4
  121. package/lib/esm/components/trees/common/TreeNodeRenderer.js.map +1 -1
  122. package/lib/esm/components/trees/common/TreeRenderer.d.ts +15 -1
  123. package/lib/esm/components/trees/common/TreeRenderer.js +15 -6
  124. package/lib/esm/components/trees/common/TreeRenderer.js.map +1 -1
  125. package/lib/esm/components/trees/common/TreeRenderer.scss +7 -2
  126. package/lib/esm/components/trees/common/Types.d.ts +8 -0
  127. package/lib/esm/components/trees/common/Types.js +3 -3
  128. package/lib/esm/components/trees/common/Types.js.map +1 -1
  129. package/lib/esm/components/trees/common/UseVisibilityTreeState.d.ts +36 -0
  130. package/lib/esm/components/trees/common/UseVisibilityTreeState.js +43 -0
  131. package/lib/esm/components/trees/common/UseVisibilityTreeState.js.map +1 -0
  132. package/lib/esm/components/trees/common/Utils.js +7 -5
  133. package/lib/esm/components/trees/common/Utils.js.map +1 -1
  134. package/lib/esm/components/trees/external-sources-tree/ExternalSources.json +1 -3
  135. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.d.ts +9 -3
  136. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js +22 -10
  137. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTree.js.map +1 -1
  138. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js +4 -4
  139. package/lib/esm/components/trees/external-sources-tree/ExternalSourcesTreeComponent.js.map +1 -1
  140. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.d.ts +9 -3
  141. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js +19 -15
  142. package/lib/esm/components/trees/imodel-content-tree/IModelContentTree.js.map +1 -1
  143. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js +6 -5
  144. package/lib/esm/components/trees/imodel-content-tree/IModelContentTreeComponent.js.map +1 -1
  145. package/lib/esm/components/trees/index.js +3 -3
  146. package/lib/esm/components/trees/index.js.map +1 -1
  147. package/lib/esm/components/trees/models-tree/ModelsTree.d.ts +7 -2
  148. package/lib/esm/components/trees/models-tree/ModelsTree.js +80 -66
  149. package/lib/esm/components/trees/models-tree/ModelsTree.js.map +1 -1
  150. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js +12 -19
  151. package/lib/esm/components/trees/models-tree/ModelsTreeComponent.js.map +1 -1
  152. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.d.ts +9 -0
  153. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js +27 -0
  154. package/lib/esm/components/trees/models-tree/ModelsTreeEventHandler.js.map +1 -0
  155. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js +125 -66
  156. package/lib/esm/components/trees/models-tree/ModelsVisibilityHandler.js.map +1 -1
  157. package/lib/esm/components/trees/models-tree/Utils.d.ts +4 -0
  158. package/lib/esm/components/trees/models-tree/Utils.js +50 -57
  159. package/lib/esm/components/trees/models-tree/Utils.js.map +1 -1
  160. package/lib/esm/components/utils/AutoSizer.js +7 -5
  161. package/lib/esm/components/utils/AutoSizer.js.map +1 -1
  162. package/lib/esm/components/utils/IsPromiseLike.js +4 -4
  163. package/lib/esm/components/utils/IsPromiseLike.js.map +1 -1
  164. package/lib/esm/components/utils/UseTreeTransientState.js +3 -3
  165. package/lib/esm/components/utils/UseTreeTransientState.js.map +1 -1
  166. package/lib/esm/e2e-tests/TreeWidget.test.js +56 -2
  167. package/lib/esm/e2e-tests/TreeWidget.test.js.map +1 -1
  168. package/lib/esm/e2e-tests/utils.d.ts +1 -0
  169. package/lib/esm/e2e-tests/utils.js +2 -4
  170. package/lib/esm/e2e-tests/utils.js.map +1 -1
  171. package/lib/esm/tree-widget-react.js +3 -3
  172. package/lib/esm/tree-widget-react.js.map +1 -1
  173. package/package.json +88 -87
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/tree-widget-react",
3
- "version": "1.2.1",
3
+ "version": "2.0.0-dev.0",
4
4
  "description": "Tree Widget React",
5
5
  "keywords": [
6
6
  "Bentley",
@@ -20,59 +20,92 @@
20
20
  "main": "lib/cjs/tree-widget-react.js",
21
21
  "module": "lib/esm/tree-widget-react.js",
22
22
  "typings": "lib/cjs/tree-widget-react",
23
+ "scripts": {
24
+ "start:test-viewer": "node ./scripts/start-test-viewer.js",
25
+ "start:test-viewer:watch": "node ./scripts/start-test-viewer.js --watch",
26
+ "build": "npm run -s dual-build && npm run -s copy:assets",
27
+ "dual-build": "npm run -s build:cjs && npm run -s build:esm",
28
+ "build:cjs": "tsc 1>&2 --outDir lib/cjs",
29
+ "build:esm": "tsc 1>&2 --module ES2020 --outDir lib/esm",
30
+ "copy:assets": "npm run -s copy:public && npm run -s copy:cjs && npm run -s copy:esm",
31
+ "copy:public": "cpx \"./public/**/*\" ./lib/public",
32
+ "copy:cjs": "cpx \"./src/**/*.{scss,json}\" ./lib/cjs",
33
+ "copy:esm": "cpx \"./src/**/*.{scss,json}\" ./lib/esm",
34
+ "cover": "nyc npm run test",
35
+ "extract-api": "betools extract-api --entry=tree-widget-react --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api",
36
+ "lint": "npm run lint:eslint && npm run lint:stylelint",
37
+ "lint:eslint": "eslint -f visualstudio \"./src/**/*.{ts,tsx}\" 1>&2",
38
+ "lint:stylelint": "stylelint \"./src/**/*.scss\"",
39
+ "lint:fix": "npm run lint:eslint -- --fix && npm run lint:stylelint -- --fix",
40
+ "pseudolocalize": "betools pseudolocalize --englishDir ./public/locales/en --out ./lib/public/locales/en-PSEUDO",
41
+ "test": "mocha \"./lib/cjs/test/**/*.test.js\"",
42
+ "test:e2e": "node ../../../scripts/run-e2e-with-docker.js tree-widget",
43
+ "test:e2e:local": "node ../../../scripts/run-e2e-tests.js",
44
+ "test:e2e:debug": "cross-env PWDEBUG=1 playwright test --ui",
45
+ "clean": "rimraf lib",
46
+ "rebuild": "npm run clean && npm run build"
47
+ },
48
+ "peerDependencies": {
49
+ "@itwin/appui-abstract": "^4.0.0",
50
+ "@itwin/appui-react": "^4.6.0",
51
+ "@itwin/components-react": "^4.6.0",
52
+ "@itwin/core-frontend": "^4.0.0",
53
+ "@itwin/core-react": "^4.6.0",
54
+ "@itwin/presentation-components": "^5.0.0-dev.3",
55
+ "react": "^17.0.0 || ^18.0.0",
56
+ "react-dom": "^17.0.0 || ^18.0.0"
57
+ },
23
58
  "dependencies": {
24
59
  "@bentley/icons-generic": "^1.0.34",
25
- "@itwin/itwinui-icons-react": "^2.1.0",
60
+ "@itwin/itwinui-icons-react": "^2.8.0",
26
61
  "@itwin/itwinui-illustrations-react": "^2.1.0",
27
- "@itwin/itwinui-react": "^2.11.0",
62
+ "@itwin/itwinui-react": "^3.4.2",
28
63
  "classnames": "^2.3.1",
29
64
  "i18next": "^10.2.2",
30
65
  "react-error-boundary": "^4.0.10",
31
- "rxjs": "^6.6.2"
66
+ "rxjs": "^7.8.1"
32
67
  },
33
68
  "devDependencies": {
34
- "@itwin/appui-abstract": "^4.0.0",
35
- "@itwin/appui-layout-react": "^4.5.0",
36
- "@itwin/appui-react": "^4.5.0",
37
- "@itwin/build-tools": "^4.0.0",
38
- "@itwin/components-react": "^4.5.0",
39
- "@itwin/core-backend": "^4.0.0",
40
- "@itwin/core-bentley": "^4.0.0",
41
- "@itwin/core-common": "^4.0.0",
42
- "@itwin/core-frontend": "^4.0.0",
43
- "@itwin/core-geometry": "^4.0.0",
44
- "@itwin/core-i18n": "^4.0.0",
45
- "@itwin/core-markup": "^4.0.0",
46
- "@itwin/core-orbitgt": "^4.0.0",
47
- "@itwin/core-quantity": "^4.0.0",
48
- "@itwin/core-react": "^4.5.0",
49
- "@itwin/core-telemetry": "^4.0.0",
50
- "@itwin/ecschema-metadata": "^4.0.0",
69
+ "@itwin/appui-abstract": "^4.4.0",
70
+ "@itwin/appui-react": "^4.9.0",
71
+ "@itwin/build-tools": "^4.4.0",
72
+ "@itwin/components-react": "^4.9.0",
73
+ "@itwin/core-backend": "^4.4.0",
74
+ "@itwin/core-bentley": "^4.4.0",
75
+ "@itwin/core-common": "^4.4.0",
76
+ "@itwin/core-frontend": "^4.4.0",
77
+ "@itwin/core-geometry": "^4.4.0",
78
+ "@itwin/core-i18n": "^4.4.0",
79
+ "@itwin/core-markup": "^4.4.0",
80
+ "@itwin/core-orbitgt": "^4.4.0",
81
+ "@itwin/core-quantity": "^4.4.0",
82
+ "@itwin/core-react": "^4.9.0",
83
+ "@itwin/core-telemetry": "^4.4.0",
84
+ "@itwin/ecschema-metadata": "^4.4.0",
51
85
  "@itwin/eslint-plugin": "^4.0.0-dev.38",
52
- "@itwin/imodel-components-react": "^4.5.0",
53
- "@itwin/presentation-backend": "^4.0.0",
54
- "@itwin/presentation-common": "^4.0.0",
55
- "@itwin/presentation-components": "^4.1.0",
56
- "@itwin/presentation-frontend": "^4.0.0",
57
- "@itwin/presentation-testing": "^4.0.0",
58
- "@itwin/webgl-compatibility": "^4.0.0",
59
- "@playwright/test": "^1.36.2",
60
- "@rushstack/eslint-patch": "1.2.0",
61
- "@testing-library/dom": "^8.12.0",
62
- "@testing-library/react": "^12.0.0",
63
- "@testing-library/react-hooks": "^7.0.2",
64
- "@testing-library/user-event": "14.4.3",
86
+ "@itwin/imodel-components-react": "^4.9.0",
87
+ "@itwin/presentation-backend": "^4.4.0",
88
+ "@itwin/presentation-common": "^4.4.0",
89
+ "@itwin/presentation-components": "5.0.0-dev.3",
90
+ "@itwin/presentation-frontend": "^4.4.0",
91
+ "@itwin/presentation-testing": "5.0.0-dev.3",
92
+ "@itwin/webgl-compatibility": "^4.4.0",
93
+ "@playwright/test": "^1.41.2",
94
+ "@testing-library/dom": "^9.3.3",
95
+ "@testing-library/react": "^14.1.2",
96
+ "@testing-library/user-event": "^14.5.2",
65
97
  "@types/chai": "4.3.5",
66
98
  "@types/chai-jest-snapshot": "^1.3.4",
67
99
  "@types/chai-subset": "1.3.3",
68
100
  "@types/deep-equal": "^1.0.1",
69
101
  "@types/i18next": "^8.4.2",
70
- "@types/jsdom-global": "^3.0.4",
71
- "@types/mocha": "^10.0.1",
72
- "@types/react": "^17.0.19",
73
- "@types/react-dom": "^17.0.9",
74
- "@types/sinon": "^10.0.15",
75
- "@types/sinon-chai": "^3.2.9",
102
+ "@types/jsdom": "^21.1.6",
103
+ "@types/mocha": "^10.0.6",
104
+ "@types/node": "^18.18.10",
105
+ "@types/react": "^18.0.34",
106
+ "@types/react-dom": "^18.0.11",
107
+ "@types/sinon": "^17.0.2",
108
+ "@types/sinon-chai": "^3.2.12",
76
109
  "@typescript-eslint/eslint-plugin": "^5.59.8",
77
110
  "@typescript-eslint/parser": "^5.59.8",
78
111
  "chai": "^4.3.7",
@@ -81,69 +114,37 @@
81
114
  "cpx2": "^3.0.0",
82
115
  "cross-env": "^7.0.3",
83
116
  "deep-equal": "^1.0.0",
117
+ "dotenv": "^16.3.1",
84
118
  "eslint": "^8.41.0",
85
- "eslint-plugin-react": "^7.32.2",
119
+ "eslint-config-prettier": "^9.1.0",
120
+ "eslint-plugin-import": "^2.29.0",
121
+ "eslint-plugin-react": "^7.33.2",
86
122
  "eslint-plugin-unused-imports": "^2.0.0",
123
+ "global-jsdom": "^9.2.0",
87
124
  "ignore-styles": "^5.0.1",
88
- "jsdom": "^22.1.0",
89
- "jsdom-global": "3.0.2",
125
+ "jsdom": "^23.1.0",
90
126
  "mocha": "^10.2.0",
91
127
  "nyc": "15.1.0",
128
+ "postcss": "^8.4.32",
92
129
  "raf": "^3.4.0",
93
- "react": "^17.0.0",
94
- "react-dom": "^17.0.0",
95
- "react-redux": "^7.2.2",
130
+ "react": "^18.0.0",
131
+ "react-dom": "^18.0.0",
132
+ "react-redux": "^7.2.9",
96
133
  "redux": "^4.1.0",
97
134
  "rimraf": "^3.0.2",
98
- "sinon": "^15.1.0",
135
+ "sinon": "^17.0.1",
99
136
  "sinon-chai": "^3.7.0",
100
137
  "source-map-support": "^0.5.6",
101
138
  "stylelint": "^15.11.0",
102
139
  "stylelint-config-standard-scss": "^11.1.0",
103
140
  "typemoq": "^2.1.0",
104
141
  "typescript": "~5.0.0",
105
- "xmlhttprequest": "^1.8.0"
106
- },
107
- "peerDependencies": {
108
- "@itwin/appui-abstract": "^4.0.0",
109
- "@itwin/appui-react": "^4.3.0",
110
- "@itwin/components-react": "^4.3.0",
111
- "@itwin/core-frontend": "^4.0.0",
112
- "@itwin/core-react": "^4.3.0",
113
- "@itwin/presentation-components": "^4.0.0",
114
- "react": "^17.0.0",
115
- "react-dom": "^17.0.0"
142
+ "xmlhttprequest": "^1.8.0",
143
+ "sanitize-filename": "^1.6.3"
116
144
  },
117
145
  "eslintConfig": {
118
146
  "extends": [
119
147
  ".eslintrc.js"
120
148
  ]
121
- },
122
- "scripts": {
123
- "start:test-viewer": "node ./scripts/start-test-viewer.js",
124
- "start:test-viewer:watch": "node ./scripts/start-test-viewer.js --watch",
125
- "build": "npm run -s dual-build && npm run -s copy:assets",
126
- "dual-build": "npm run -s build:cjs && npm run -s build:esm",
127
- "build:cjs": "tsc 1>&2 --outDir lib/cjs",
128
- "build:esm": "tsc 1>&2 --module ES2020 --outDir lib/esm",
129
- "copy:assets": "npm run -s copy:public && npm run -s copy:cjs && npm run -s copy:esm",
130
- "copy:public": "cpx \"./public/**/*\" ./lib/public",
131
- "copy:cjs": "cpx \"./src/**/*.{scss,json}\" ./lib/cjs",
132
- "copy:esm": "cpx \"./src/**/*.{scss,json}\" ./lib/esm",
133
- "cover": "nyc npm run test",
134
- "extract-api": "betools extract-api --entry=tree-widget-react",
135
- "lint": "npm run lint:eslint && npm run lint:stylelint",
136
- "lint:eslint": "eslint -f visualstudio \"./src/**/*.{ts,tsx}\" 1>&2",
137
- "lint:stylelint": "stylelint \"./src/**/*.scss\"",
138
- "lint:fix": "npm run lint:eslint -- --fix && npm run lint:stylelint -- --fix",
139
- "pseudolocalize": "betools pseudolocalize --englishDir ./public/locales/en --out ./lib/public/locales/en-PSEUDO",
140
- "test": "mocha \"./lib/cjs/test/**/*.test.js\"",
141
- "test:e2e": "",
142
- "//test:e2e": "node ../../../common/scripts/run-e2e-with-docker.js tree-widget",
143
- "test:e2e:local": "node ../../../common/scripts/run-e2e-tests.js",
144
- "test:e2e:debug": "cross-env PWDEBUG=1 playwright test --ui",
145
- "clean": "rimraf lib .rush/temp/package-deps*.json",
146
- "rebuild": "npm run clean && npm run build"
147
- },
148
- "readme": "# @itwin/tree-widget-react\n\nCopyright © Bentley Systems, Incorporated. All rights reserved.\n\nThe `@itwin/tree-widget-react` package provides React components to build a widget with tree components' selector, along with all the building blocks that can be used individually.\n\n![Widget example](./media/widget.png)\n\n## Usage\n\nTypically, the package is used with an [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based application, but the building blocks may as well be used with any other iTwin.js React app.\n\nIn any case, **before** using any APIs or components delivered with the package, it needs to be initialized:\n\n```ts\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { TreeWidget } from \"@itwin/tree-widget-react\";\n...\nawait TreeWidget.initialize(IModelApp.localization);\n```\n\nIn [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) based applications widgets are typically provided using `UiItemsProvider` implementations. The `@itwin/tree-widget-react` package delivers `TreeWidgetUiItemsProvider` that can be used to add the tree widget to UI:\n\n```ts\nimport { UiItemsManager } from \"@itwin/appui-react\";\nimport { TreeWidgetUiItemsProvider } from \"@itwin/tree-widget-react\";\n...\nUiItemsManager.register(\n new TreeWidgetUiItemsProvider()\n);\n```\n\nThe above example uses default widget parameters and results in a component similar to the one visible at the top of this README. Customization is also possible:\n\n```ts\nimport { UiItemsManager } from \"@itwin/appui-react\";\nimport { TreeWidgetUiItemsProvider, ModelsTreeComponent } from \"@itwin/tree-widget-react\";\n...\nUiItemsManager.register(\n new TreeWidgetUiItemsProvider({\n // defaults to `StagePanelLocation.Right`\n defaultPanelLocation: StagePanelLocation.Left,\n // defaults to `StagePanelSection.Start`\n defaultPanelSection: StagePanelSection.End,\n // defaults to whatever the default `Widget.priority` in AppUI is\n defaultTreeWidgetPriority: 1000,\n // defaults to `ModelsTreeComponent` and `CategoriesTreeComponent`\n trees: [{\n id: ModelsTreeComponent.id,\n getLabel: ModelsTreeComponent.getLabel,\n render: () => <ModelsTreeComponent />,\n }, {\n id: \"my-tree-id\",\n getLabel: \"My Custom Tree\",\n render: () => <>This is my custom tree.</>,\n }];\n })\n);\n```\n\nAs seen in the above code snippet, `TreeWidgetUiItemsProvider` takes a list of trees that are displayed in the widget. This package delivers a number of tree components for everyone's use (see below), but providing custom trees is also an option.\n\n## Components\n\nWhile we expect this package to be mostly used with [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) and widget created through `TreeWidgetUiItemsProvider`, the package delivers components used within the widget to meet other use cases:\n\n- `SelectableTree` renders a tree selector and selected tree (based on the `trees` prop).\n\n- Visibility tree components help you build trees that look and feel like [Models](#models-tree) and [Categories](#categories-tree) trees, letting you control display of elements in the hierarchy.\n\n - `createVisibilityTreeRenderer` returns a tree renderer that renders nodes with \"eye\" checkboxes. Its building blocks:\n - `createVisibilityTreeNodeRenderer`\n - `VisibilityTreeNodeCheckbox`\n - `useVisibilityTreeFiltering` is used to filter the hierarchy.\n - `VisibilityTreeNoFilteredData` is used to render a \"no results\" when filtering.\n - `VisibilityTreeEventHandler` is an extension of [UnifiedSelectionTreeEventHandler](https://www.itwinjs.org/reference/presentation-components/tree/unifiedselectiontreeeventhandler/), that additionally handles checkbox events and calls provided `IVisibilityHandler` to get/set display of the elements in the hierarchy.\n - `useTreeTransientState` is used to persist tree scroll position when tree is used in [AppUI](https://github.com/iTwin/appui/tree/master/ui/appui-react) widget.\n\n### Models tree\n\nThe component renders a tree that tries to replicate how a typical \"Models\" tree of the iModel would look like in the source application. There's also a header that renders models search box and various visibility control buttons.\n\n![Models tree example](./media/models-tree.png)\n\nTypical usage:\n\n```tsx\nimport { ModelsTreeComponent, ClassGroupingOption } from \"@itwin/tree-widget-react\";\nimport { SelectionMode } from \"@itwin/components-react\";\n...\nfunction MyWidget() {\n return (\n <ModelsTreeComponent\n headerButtons={[\n (props) => <ModelsTreeComponent.ShowAllButton {...props} />,\n (props) => <ModelsTreeComponent.HideAllButton {...props} />,\n (props) => <MyCustomButton />,\n ]}\n selectionMode={SelectionMode.Extended}\n hierarchyConfig={{\n enableElementsClassGrouping: ClassGroupingOption.Yes,\n }}\n />\n );\n}\n```\n\nAvailable header buttons:\n\n- `ModelsTreeComponent.ShowAllButton` makes everything in the iModel displayed.\n- `ModelsTreeComponent.HideAllButton` makes everything in the iModel hidden by turning off all models.\n- `ModelsTreeComponent.InvertButton` inverts display of all models.\n- `ModelsTreeComponent.View2DButton` toggles plan projection models' display.\n- `ModelsTreeComponent.View3DButton` toggles non-plan projection models' display.\n\n`ModelsTreeComponent` building blocks:\n\n- `ModelsTree` renders the tree without the header.\n- `ModelsVisibilityHandler` knows how to get and control display of various concepts displayed in the Models tree: Subjects, Models, Categories, Elements.\n\n### Categories tree\n\nThe component, based on the active view, renders a hierarchy of either spatial (3d) or drawing (2d) categories. The hierarchy consists of two levels - the category (spatial or drawing) and its sub-categories. There's also a header that renders categories search box and various visibility control buttons.\n\n![Categories tree example](./media/categories-tree.png)\n\nTypical usage:\n\n```tsx\nimport { CategoriesTreeComponent } from \"@itwin/tree-widget-react\";\n...\nfunction MyWidget() {\n return (\n <CategoriesTreeComponent\n headerButtons={[\n (props) => <CategoriesTreeComponent.ShowAllButton {...props} />,\n (props) => <CategoriesTreeComponent.HideAllButton {...props} />,\n (props) => <MyCustomButton />,\n ]}\n />\n );\n}\n```\n\nAvailable header buttons:\n\n- `ModelsTreeComponent.ShowAllButton` makes all categories and their subcategories displayed.\n- `ModelsTreeComponent.HideAllButton` makes all categories hidden.\n- `ModelsTreeComponent.InvertButton` inverts display of all categories.\n\n`CategoriesTreeComponent` building blocks:\n\n- `CategoryTree` renders the tree without the header.\n- `CategoryVisibilityHandler` knows how to get and control display of Categories and SubCategories.\n\n### IModel content tree\n\nThe component renders a similar hierarchy to [Models tree](#models-tree), but with the following changes:\n\n- Only the hierarchy, without a header is rendered.\n- Visibility control is not allowed.\n- There's less hiding of `Subject` and `Model` nodes.\n- Show not only geometric, but all Models.\n\nIn general, the component is expected to be used by advanced users to inspect contents of the iModel.\n\n![IModel content tree example](./media/imodel-content-tree.png)\n\nTypical usage:\n\n```tsx\nimport { IModelContentTreeComponent } from \"@itwin/tree-widget-react\";\n...\nfunction MyWidget() {\n return (\n <IModelContentTreeComponent />\n );\n}\n```\n"
149
- }
149
+ }
150
+ }