@itwin/map-layers 5.4.3 → 5.5.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 (306) hide show
  1. package/CHANGELOG.md +19 -2
  2. package/README.md +7 -7
  3. package/lib/cjs/BrowserStorage.d.ts +1 -1
  4. package/lib/cjs/BrowserStorage.d.ts.map +1 -1
  5. package/lib/cjs/BrowserStorage.js +24 -14
  6. package/lib/cjs/BrowserStorage.js.map +1 -1
  7. package/lib/cjs/CustomParamUtils.d.ts +1 -1
  8. package/lib/cjs/CustomParamUtils.d.ts.map +1 -1
  9. package/lib/cjs/CustomParamUtils.js +18 -7
  10. package/lib/cjs/CustomParamUtils.js.map +1 -1
  11. package/lib/cjs/CustomParamsMappingStorage.d.ts +1 -1
  12. package/lib/cjs/CustomParamsMappingStorage.d.ts.map +1 -1
  13. package/lib/cjs/CustomParamsMappingStorage.js +3 -3
  14. package/lib/cjs/CustomParamsMappingStorage.js.map +1 -1
  15. package/lib/cjs/CustomParamsStorage.d.ts +1 -1
  16. package/lib/cjs/CustomParamsStorage.d.ts.map +1 -1
  17. package/lib/cjs/CustomParamsStorage.js +3 -3
  18. package/lib/cjs/CustomParamsStorage.js.map +1 -1
  19. package/lib/cjs/MapLayerPreferences.d.ts +2 -1
  20. package/lib/cjs/MapLayerPreferences.d.ts.map +1 -1
  21. package/lib/cjs/MapLayerPreferences.js +50 -25
  22. package/lib/cjs/MapLayerPreferences.js.map +1 -1
  23. package/lib/cjs/MapLayersActionIds.d.ts +5 -0
  24. package/lib/cjs/MapLayersActionIds.d.ts.map +1 -0
  25. package/lib/cjs/MapLayersActionIds.js +10 -0
  26. package/lib/cjs/MapLayersActionIds.js.map +1 -0
  27. package/lib/cjs/MapLayersPrefBrowserStorage.d.ts.map +1 -1
  28. package/lib/cjs/MapLayersPrefBrowserStorage.js +4 -5
  29. package/lib/cjs/MapLayersPrefBrowserStorage.js.map +1 -1
  30. package/lib/cjs/PreferencesBrowserStorage.d.ts +18 -18
  31. package/lib/cjs/PreferencesBrowserStorage.d.ts.map +1 -1
  32. package/lib/cjs/PreferencesBrowserStorage.js +14 -14
  33. package/lib/cjs/PreferencesBrowserStorage.js.map +1 -1
  34. package/lib/cjs/map-layers.d.ts +1 -0
  35. package/lib/cjs/map-layers.d.ts.map +1 -1
  36. package/lib/cjs/map-layers.js +4 -3
  37. package/lib/cjs/map-layers.js.map +1 -1
  38. package/lib/cjs/mapLayers.d.ts +2 -2
  39. package/lib/cjs/mapLayers.d.ts.map +1 -1
  40. package/lib/cjs/mapLayers.js.map +1 -1
  41. package/lib/cjs/public/locales/en/mapLayers.json +179 -184
  42. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +3 -2
  43. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  44. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +48 -16
  45. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  46. package/lib/cjs/ui/Interfaces.d.ts +3 -3
  47. package/lib/cjs/ui/Interfaces.d.ts.map +1 -1
  48. package/lib/cjs/ui/Interfaces.js.map +1 -1
  49. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +3 -2
  50. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  51. package/lib/cjs/ui/MapLayersUiItemsProvider.js +2 -6
  52. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  53. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  54. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +81 -46
  55. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  56. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  57. package/lib/cjs/ui/widget/BasemapPanel.js +44 -25
  58. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  59. package/lib/cjs/ui/widget/BasemapPanel.scss +2 -4
  60. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts +1 -1
  61. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  62. package/lib/cjs/ui/widget/ConfirmMessageDialog.js +31 -8
  63. package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
  64. package/lib/cjs/ui/widget/CustomParamEditDialog.d.ts +1 -1
  65. package/lib/cjs/ui/widget/CustomParamEditDialog.d.ts.map +1 -1
  66. package/lib/cjs/ui/widget/CustomParamEditDialog.js +34 -20
  67. package/lib/cjs/ui/widget/CustomParamEditDialog.js.map +1 -1
  68. package/lib/cjs/ui/widget/CustomParamEditDialog.scss +1 -2
  69. package/lib/cjs/ui/widget/CustomParamsSettings.d.ts.map +1 -1
  70. package/lib/cjs/ui/widget/CustomParamsSettings.js +43 -28
  71. package/lib/cjs/ui/widget/CustomParamsSettings.js.map +1 -1
  72. package/lib/cjs/ui/widget/CustomParamsSettings.scss +7 -9
  73. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +3 -2
  74. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  75. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +4 -2
  76. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  77. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +1 -1
  78. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  79. package/lib/cjs/ui/widget/FeatureInfoWidget.js +36 -6
  80. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  81. package/lib/cjs/ui/widget/MapLayerActionButtons.d.ts +1 -1
  82. package/lib/cjs/ui/widget/MapLayerActionButtons.d.ts.map +1 -1
  83. package/lib/cjs/ui/widget/MapLayerActionButtons.js +30 -17
  84. package/lib/cjs/ui/widget/MapLayerActionButtons.js.map +1 -1
  85. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +2 -2
  86. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  87. package/lib/cjs/ui/widget/MapLayerDroppable.js +64 -50
  88. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  89. package/lib/cjs/ui/widget/MapLayerManager.d.ts +2 -2
  90. package/lib/cjs/ui/widget/MapLayerManager.d.ts.map +1 -1
  91. package/lib/cjs/ui/widget/MapLayerManager.js +160 -86
  92. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  93. package/lib/cjs/ui/widget/MapLayerManager.scss +3 -6
  94. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts +2 -2
  95. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  96. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +33 -13
  97. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  98. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  99. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +36 -14
  100. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  101. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +5 -5
  102. package/lib/cjs/ui/widget/MapLayersWidget.d.ts +1 -1
  103. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  104. package/lib/cjs/ui/widget/MapLayersWidget.js +34 -11
  105. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  106. package/lib/cjs/ui/widget/MapManagerMapLayersHeader.d.ts.map +1 -1
  107. package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js +5 -8
  108. package/lib/cjs/ui/widget/MapManagerMapLayersHeader.js.map +1 -1
  109. package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
  110. package/lib/cjs/ui/widget/MapManagerSettings.js +55 -56
  111. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  112. package/lib/cjs/ui/widget/MapManagerSettings.scss +1 -1
  113. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.d.ts +2 -2
  114. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.d.ts.map +1 -1
  115. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js +33 -18
  116. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
  117. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.scss +1 -3
  118. package/lib/cjs/ui/widget/MapUrlDialog.d.ts +4 -3
  119. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  120. package/lib/cjs/ui/widget/MapUrlDialog.js +125 -96
  121. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  122. package/lib/cjs/ui/widget/MapUrlDialog.scss +6 -7
  123. package/lib/cjs/ui/widget/SelectApiKey.d.ts.map +1 -1
  124. package/lib/cjs/ui/widget/SelectApiKey.js +38 -10
  125. package/lib/cjs/ui/widget/SelectApiKey.js.map +1 -1
  126. package/lib/cjs/ui/widget/SelectCustomParam.d.ts.map +1 -1
  127. package/lib/cjs/ui/widget/SelectCustomParam.js +40 -11
  128. package/lib/cjs/ui/widget/SelectCustomParam.js.map +1 -1
  129. package/lib/cjs/ui/widget/SelectMapFormat.d.ts +3 -3
  130. package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
  131. package/lib/cjs/ui/widget/SelectMapFormat.js +35 -13
  132. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  133. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts +2 -2
  134. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  135. package/lib/cjs/ui/widget/SubLayersDataProvider.js +13 -9
  136. package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
  137. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts +1 -1
  138. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  139. package/lib/cjs/ui/widget/SubLayersPopupButton.js +30 -12
  140. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  141. package/lib/cjs/ui/widget/SubLayersTree.d.ts +2 -2
  142. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  143. package/lib/cjs/ui/widget/SubLayersTree.js +83 -45
  144. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  145. package/lib/cjs/ui/widget/SubLayersTree.scss +4 -7
  146. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  147. package/lib/cjs/ui/widget/TransparencyPopupButton.js +33 -16
  148. package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
  149. package/lib/cjs/ui/widget/TransparencyPopupButton.scss +1 -2
  150. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.d.ts +1 -1
  151. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.d.ts.map +1 -1
  152. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js +2 -8
  153. package/lib/cjs/ui/widget/UserPreferencesStorageOptions.js.map +1 -1
  154. package/lib/esm/BrowserStorage.d.ts +1 -1
  155. package/lib/esm/BrowserStorage.d.ts.map +1 -1
  156. package/lib/esm/BrowserStorage.js +24 -14
  157. package/lib/esm/BrowserStorage.js.map +1 -1
  158. package/lib/esm/CustomParamUtils.d.ts +1 -1
  159. package/lib/esm/CustomParamUtils.d.ts.map +1 -1
  160. package/lib/esm/CustomParamUtils.js +18 -7
  161. package/lib/esm/CustomParamUtils.js.map +1 -1
  162. package/lib/esm/CustomParamsMappingStorage.d.ts +1 -1
  163. package/lib/esm/CustomParamsMappingStorage.d.ts.map +1 -1
  164. package/lib/esm/CustomParamsMappingStorage.js +3 -3
  165. package/lib/esm/CustomParamsMappingStorage.js.map +1 -1
  166. package/lib/esm/CustomParamsStorage.d.ts +1 -1
  167. package/lib/esm/CustomParamsStorage.d.ts.map +1 -1
  168. package/lib/esm/CustomParamsStorage.js +3 -3
  169. package/lib/esm/CustomParamsStorage.js.map +1 -1
  170. package/lib/esm/MapLayerPreferences.d.ts +2 -1
  171. package/lib/esm/MapLayerPreferences.d.ts.map +1 -1
  172. package/lib/esm/MapLayerPreferences.js +50 -25
  173. package/lib/esm/MapLayerPreferences.js.map +1 -1
  174. package/lib/esm/MapLayersActionIds.d.ts +5 -0
  175. package/lib/esm/MapLayersActionIds.d.ts.map +1 -0
  176. package/lib/esm/MapLayersActionIds.js +7 -0
  177. package/lib/esm/MapLayersActionIds.js.map +1 -0
  178. package/lib/esm/MapLayersPrefBrowserStorage.d.ts.map +1 -1
  179. package/lib/esm/MapLayersPrefBrowserStorage.js +4 -5
  180. package/lib/esm/MapLayersPrefBrowserStorage.js.map +1 -1
  181. package/lib/esm/PreferencesBrowserStorage.d.ts +18 -18
  182. package/lib/esm/PreferencesBrowserStorage.d.ts.map +1 -1
  183. package/lib/esm/PreferencesBrowserStorage.js +14 -14
  184. package/lib/esm/PreferencesBrowserStorage.js.map +1 -1
  185. package/lib/esm/map-layers.d.ts +1 -0
  186. package/lib/esm/map-layers.d.ts.map +1 -1
  187. package/lib/esm/map-layers.js +4 -3
  188. package/lib/esm/map-layers.js.map +1 -1
  189. package/lib/esm/mapLayers.d.ts +2 -2
  190. package/lib/esm/mapLayers.d.ts.map +1 -1
  191. package/lib/esm/mapLayers.js.map +1 -1
  192. package/lib/esm/public/locales/en/mapLayers.json +179 -184
  193. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +3 -2
  194. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  195. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +48 -16
  196. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  197. package/lib/esm/ui/Interfaces.d.ts +3 -3
  198. package/lib/esm/ui/Interfaces.d.ts.map +1 -1
  199. package/lib/esm/ui/Interfaces.js.map +1 -1
  200. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +3 -2
  201. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  202. package/lib/esm/ui/MapLayersUiItemsProvider.js +2 -6
  203. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  204. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  205. package/lib/esm/ui/widget/AttachLayerPopupButton.js +57 -45
  206. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  207. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  208. package/lib/esm/ui/widget/BasemapPanel.js +19 -23
  209. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  210. package/lib/esm/ui/widget/BasemapPanel.scss +2 -4
  211. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts +1 -1
  212. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  213. package/lib/esm/ui/widget/ConfirmMessageDialog.js +5 -5
  214. package/lib/esm/ui/widget/ConfirmMessageDialog.js.map +1 -1
  215. package/lib/esm/ui/widget/CustomParamEditDialog.d.ts +1 -1
  216. package/lib/esm/ui/widget/CustomParamEditDialog.d.ts.map +1 -1
  217. package/lib/esm/ui/widget/CustomParamEditDialog.js +9 -18
  218. package/lib/esm/ui/widget/CustomParamEditDialog.js.map +1 -1
  219. package/lib/esm/ui/widget/CustomParamEditDialog.scss +1 -2
  220. package/lib/esm/ui/widget/CustomParamsSettings.d.ts.map +1 -1
  221. package/lib/esm/ui/widget/CustomParamsSettings.js +18 -26
  222. package/lib/esm/ui/widget/CustomParamsSettings.js.map +1 -1
  223. package/lib/esm/ui/widget/CustomParamsSettings.scss +7 -9
  224. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +3 -2
  225. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  226. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +4 -2
  227. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  228. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +1 -1
  229. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  230. package/lib/esm/ui/widget/FeatureInfoWidget.js +12 -5
  231. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  232. package/lib/esm/ui/widget/MapLayerActionButtons.d.ts +1 -1
  233. package/lib/esm/ui/widget/MapLayerActionButtons.d.ts.map +1 -1
  234. package/lib/esm/ui/widget/MapLayerActionButtons.js +6 -16
  235. package/lib/esm/ui/widget/MapLayerActionButtons.js.map +1 -1
  236. package/lib/esm/ui/widget/MapLayerDroppable.d.ts +2 -2
  237. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  238. package/lib/esm/ui/widget/MapLayerDroppable.js +38 -47
  239. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  240. package/lib/esm/ui/widget/MapLayerManager.d.ts +2 -2
  241. package/lib/esm/ui/widget/MapLayerManager.d.ts.map +1 -1
  242. package/lib/esm/ui/widget/MapLayerManager.js +136 -85
  243. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  244. package/lib/esm/ui/widget/MapLayerManager.scss +3 -6
  245. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts +2 -2
  246. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  247. package/lib/esm/ui/widget/MapLayerSettingsMenu.js +9 -12
  248. package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  249. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  250. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +11 -12
  251. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  252. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +5 -5
  253. package/lib/esm/ui/widget/MapLayersWidget.d.ts +1 -1
  254. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  255. package/lib/esm/ui/widget/MapLayersWidget.js +9 -9
  256. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  257. package/lib/esm/ui/widget/MapManagerMapLayersHeader.d.ts.map +1 -1
  258. package/lib/esm/ui/widget/MapManagerMapLayersHeader.js +5 -8
  259. package/lib/esm/ui/widget/MapManagerMapLayersHeader.js.map +1 -1
  260. package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
  261. package/lib/esm/ui/widget/MapManagerSettings.js +29 -53
  262. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  263. package/lib/esm/ui/widget/MapManagerSettings.scss +1 -1
  264. package/lib/esm/ui/widget/MapSelectFeaturesDialog.d.ts +2 -2
  265. package/lib/esm/ui/widget/MapSelectFeaturesDialog.d.ts.map +1 -1
  266. package/lib/esm/ui/widget/MapSelectFeaturesDialog.js +7 -15
  267. package/lib/esm/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
  268. package/lib/esm/ui/widget/MapSelectFeaturesDialog.scss +1 -3
  269. package/lib/esm/ui/widget/MapUrlDialog.d.ts +4 -3
  270. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  271. package/lib/esm/ui/widget/MapUrlDialog.js +100 -94
  272. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  273. package/lib/esm/ui/widget/MapUrlDialog.scss +6 -7
  274. package/lib/esm/ui/widget/SelectApiKey.d.ts.map +1 -1
  275. package/lib/esm/ui/widget/SelectApiKey.js +12 -7
  276. package/lib/esm/ui/widget/SelectApiKey.js.map +1 -1
  277. package/lib/esm/ui/widget/SelectCustomParam.d.ts.map +1 -1
  278. package/lib/esm/ui/widget/SelectCustomParam.js +14 -8
  279. package/lib/esm/ui/widget/SelectCustomParam.js.map +1 -1
  280. package/lib/esm/ui/widget/SelectMapFormat.d.ts +3 -3
  281. package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
  282. package/lib/esm/ui/widget/SelectMapFormat.js +9 -10
  283. package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
  284. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts +2 -2
  285. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  286. package/lib/esm/ui/widget/SubLayersDataProvider.js +13 -9
  287. package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
  288. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts +1 -1
  289. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  290. package/lib/esm/ui/widget/SubLayersPopupButton.js +6 -11
  291. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  292. package/lib/esm/ui/widget/SubLayersTree.d.ts +2 -2
  293. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  294. package/lib/esm/ui/widget/SubLayersTree.js +59 -44
  295. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  296. package/lib/esm/ui/widget/SubLayersTree.scss +4 -7
  297. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  298. package/lib/esm/ui/widget/TransparencyPopupButton.js +8 -14
  299. package/lib/esm/ui/widget/TransparencyPopupButton.js.map +1 -1
  300. package/lib/esm/ui/widget/TransparencyPopupButton.scss +1 -2
  301. package/lib/esm/ui/widget/UserPreferencesStorageOptions.d.ts +1 -1
  302. package/lib/esm/ui/widget/UserPreferencesStorageOptions.d.ts.map +1 -1
  303. package/lib/esm/ui/widget/UserPreferencesStorageOptions.js +2 -8
  304. package/lib/esm/ui/widget/UserPreferencesStorageOptions.js.map +1 -1
  305. package/lib/public/locales/en/mapLayers.json +179 -184
  306. package/package.json +9 -21
@@ -1,7 +1,7 @@
1
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
- *--------------------------------------------------------------------------------------------*/
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
5
  import { compareStringsOrUndefined } from "@itwin/core-bentley";
6
6
  import { PropertyRecord } from "@itwin/appui-abstract";
7
7
  import { CheckBoxState } from "@itwin/core-react";
@@ -15,9 +15,10 @@ export class SubLayersDataProvider {
15
15
  this.loadNodes(subLayers);
16
16
  }
17
17
  static isUnnamedGroup(subLayer) {
18
- if (!subLayer)
18
+ if (!subLayer) {
19
19
  return false;
20
- return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);
20
+ }
21
+ return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;
21
22
  }
22
23
  createId(props) {
23
24
  return undefined !== props.id ? `${props.id}` : props.name ? props.name : "no-id";
@@ -41,9 +42,10 @@ export class SubLayersDataProvider {
41
42
  filteredProps?.sort((a, b) => compareStringsOrUndefined(a.title, b.title));
42
43
  const treeNodes = [];
43
44
  filteredProps.forEach((props) => {
44
- treeNodes.push(this.createNode(props, (this._expandMode === "full" ? true : (!parentId && props?.children !== undefined) ? true : undefined), undefined, SubLayersDataProvider.isUnnamedGroup(props) ? "icon-folder" : "icon-layers"));
45
- if (props.children)
45
+ treeNodes.push(this.createNode(props, this._expandMode === "full" ? true : !parentId && props?.children !== undefined ? true : undefined, undefined, SubLayersDataProvider.isUnnamedGroup(props) ? "icon-folder" : "icon-layers"));
46
+ if (props.children) {
46
47
  this.loadChildNodes(allSubLayers, props.id);
48
+ }
47
49
  });
48
50
  this._nodeMap.set(undefined !== parentId ? `${parentId}` : "", treeNodes);
49
51
  }
@@ -56,14 +58,16 @@ export class SubLayersDataProvider {
56
58
  }
57
59
  async getNodesCount(parent) {
58
60
  const nodeArray = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get("");
59
- if (nodeArray)
61
+ if (nodeArray) {
60
62
  return nodeArray.length;
63
+ }
61
64
  return 0;
62
65
  }
63
66
  async getNodes(parent) {
64
67
  const nodeArray = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get("");
65
- if (nodeArray)
68
+ if (nodeArray) {
66
69
  return nodeArray;
70
+ }
67
71
  return [];
68
72
  }
69
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersDataProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { compareStringsOrUndefined } from \"@itwin/core-bentley\";\nimport { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport { DelayLoadedTreeNodeItem, ITreeDataProvider, TreeNodeItem } from \"@itwin/components-react\";\nimport { CheckBoxState } from \"@itwin/core-react\";\n\nexport type SubLayersTreeExpandMode = \"full\" | \"rootGroupOnly\";\n\n/**\n * Data provider that returns some fake nodes to show in tree.\n */\nexport class SubLayersDataProvider implements ITreeDataProvider {\n private readonly _nodeMap = new Map<string, TreeNodeItem[]>();\n private readonly _expandMode;\n\n constructor(subLayers: MapSubLayerProps[], expandMode: SubLayersTreeExpandMode = \"rootGroupOnly\") {\n this._expandMode = expandMode;\n this.loadNodes(subLayers);\n }\n\n public static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer)\n return false;\n\n return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);\n }\n\n private createId(props: MapSubLayerProps): string {\n return undefined !== props.id ? `${props.id}` : props.name ? props.name : \"no-id\";\n }\n\n private createNode(props: MapSubLayerProps, expanded?: boolean, isCheckboxDisabled?: boolean, icon?: string): DelayLoadedTreeNodeItem {\n return {\n id: this.createId(props),\n label: PropertyRecord.fromString(props.title ?? props.name ?? \"unknown\"),\n hasChildren: !!props.children,\n isCheckboxVisible: true,\n checkBoxState: props.visible && !isCheckboxDisabled ? CheckBoxState.On : CheckBoxState.Off,\n extendedData: { subLayerId: props.id },\n isCheckboxDisabled,\n autoExpand: expanded,\n icon,\n };\n }\n\n private loadChildNodes(allSubLayers: MapSubLayerProps[], parentId?: SubLayerId) {\n const filteredProps = allSubLayers.filter((props) => parentId === props.parent);\n if (filteredProps.length) {\n filteredProps?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n const treeNodes: TreeNodeItem[] = [];\n\n filteredProps.forEach((props) => {\n treeNodes.push(this.createNode(props,\n (this._expandMode === \"full\" ? true : (!parentId && props?.children !== undefined) ? true : undefined),\n undefined,\n SubLayersDataProvider.isUnnamedGroup(props) ? \"icon-folder\" : \"icon-layers\"\n\n ));\n if (props.children)\n this.loadChildNodes(allSubLayers, props.id);\n });\n\n this._nodeMap.set(undefined !== parentId ? `${parentId}` : \"\", treeNodes);\n }\n }\n\n private loadNodes(subLayerNodes: MapSubLayerProps[] | undefined) {\n subLayerNodes?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n if (subLayerNodes) {\n this.loadChildNodes(subLayerNodes, undefined);\n }\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray)\n return nodeArray.length;\n\n return 0;\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray)\n return nodeArray;\n\n return [];\n }\n}\n"]}
1
+ {"version":3,"file":"SubLayersDataProvider.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersDataProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport { compareStringsOrUndefined } from \"@itwin/core-bentley\";\nimport type { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport { PropertyRecord } from \"@itwin/appui-abstract\";\nimport type { DelayLoadedTreeNodeItem, ITreeDataProvider, TreeNodeItem } from \"@itwin/components-react\";\nimport { CheckBoxState } from \"@itwin/core-react\";\n\nexport type SubLayersTreeExpandMode = \"full\" | \"rootGroupOnly\";\n\n/**\n * Data provider that returns some fake nodes to show in tree.\n */\nexport class SubLayersDataProvider implements ITreeDataProvider {\n private readonly _nodeMap = new Map<string, TreeNodeItem[]>();\n private readonly _expandMode;\n\n constructor(subLayers: MapSubLayerProps[], expandMode: SubLayersTreeExpandMode = \"rootGroupOnly\") {\n this._expandMode = expandMode;\n this.loadNodes(subLayers);\n }\n\n public static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer) {\n return false;\n }\n\n return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;\n }\n\n private createId(props: MapSubLayerProps): string {\n return undefined !== props.id ? `${props.id}` : props.name ? props.name : \"no-id\";\n }\n\n private createNode(props: MapSubLayerProps, expanded?: boolean, isCheckboxDisabled?: boolean, icon?: string): DelayLoadedTreeNodeItem {\n return {\n id: this.createId(props),\n label: PropertyRecord.fromString(props.title ?? props.name ?? \"unknown\"),\n hasChildren: !!props.children,\n isCheckboxVisible: true,\n checkBoxState: props.visible && !isCheckboxDisabled ? CheckBoxState.On : CheckBoxState.Off,\n extendedData: { subLayerId: props.id },\n isCheckboxDisabled,\n autoExpand: expanded,\n icon,\n };\n }\n\n private loadChildNodes(allSubLayers: MapSubLayerProps[], parentId?: SubLayerId) {\n const filteredProps = allSubLayers.filter((props) => parentId === props.parent);\n if (filteredProps.length) {\n filteredProps?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n const treeNodes: TreeNodeItem[] = [];\n\n filteredProps.forEach((props) => {\n treeNodes.push(\n this.createNode(\n props,\n this._expandMode === \"full\" ? true : !parentId && props?.children !== undefined ? true : undefined,\n undefined,\n SubLayersDataProvider.isUnnamedGroup(props) ? \"icon-folder\" : \"icon-layers\",\n ),\n );\n if (props.children) {\n this.loadChildNodes(allSubLayers, props.id);\n }\n });\n\n this._nodeMap.set(undefined !== parentId ? `${parentId}` : \"\", treeNodes);\n }\n }\n\n private loadNodes(subLayerNodes: MapSubLayerProps[] | undefined) {\n subLayerNodes?.sort((a: MapSubLayerProps, b: MapSubLayerProps) => compareStringsOrUndefined(a.title, b.title));\n if (subLayerNodes) {\n this.loadChildNodes(subLayerNodes, undefined);\n }\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray.length;\n }\n\n return 0;\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const nodeArray: TreeNodeItem[] | undefined = parent ? this._nodeMap.get(parent.id) : this._nodeMap.get(\"\");\n if (nodeArray) {\n return nodeArray;\n }\n\n return [];\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { SubLayersPanelProps } from "./SubLayersTree";
2
+ import type { SubLayersPanelProps } from "./SubLayersTree";
3
3
  /** @internal */
4
4
  export declare type SubLayersPopupButtonProps = SubLayersPanelProps;
5
5
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAkB,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAMtE,gBAAgB;AAEhB,oBAAY,yBAAyB,GAAG,mBAAmB,CAAC;AAE5D,gBAAgB;AAEhB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,eA0CpE"}
1
+ {"version":3,"file":"SubLayersPopupButton.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":";AASA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAO3D,gBAAgB;AAEhB,oBAAY,yBAAyB,GAAG,mBAAmB,CAAC;AAE5D,gBAAgB;AAEhB,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,eA0CpE"}
@@ -1,7 +1,8 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
2
  /*---------------------------------------------------------------------------------------------
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
- *--------------------------------------------------------------------------------------------*/
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
5
6
  import * as React from "react";
6
7
  import { RelativePosition } from "@itwin/appui-abstract";
7
8
  import { Popup, useOnOutsideClick, WebFontIcon } from "@itwin/core-react";
@@ -23,15 +24,9 @@ export function SubLayersPopupButton(props) {
23
24
  }, []);
24
25
  const isOutsideEvent = React.useCallback((e) => {
25
26
  // if clicking on button that open panel - don't trigger outside click processing
26
- return !!buttonRef.current && (e.target instanceof Node) && !buttonRef.current.contains(e.target);
27
+ return !!buttonRef.current && e.target instanceof Node && !buttonRef.current.contains(e.target);
27
28
  }, []);
28
29
  const panelRef = useOnOutsideClick(onOutsideClick, isOutsideEvent);
29
- return (React.createElement(React.Fragment, null,
30
- React.createElement(Button, { size: "small", styleType: "borderless", ref: buttonRef, className: "map-manager-item-sub-layer-button", title: popupOpen ? hideSubLayersLabel : showSubLayersLabel, onClick: togglePopup },
31
- React.createElement(WebFontIcon, { iconName: "icon-layers" })),
32
- React.createElement(Popup, { isOpen: popupOpen, position: RelativePosition.BottomRight, onClose: onOutsideClick, target: buttonRef.current },
33
- React.createElement("div", { className: "map-transparency-popup-panel" },
34
- React.createElement("div", { ref: panelRef, className: "map-manager-sublayer-panel" },
35
- React.createElement(SubLayersPanel, { ...props, width: 390, height: 350 }))))));
30
+ return (_jsxs(_Fragment, { children: [_jsx(Button, { size: "small", styleType: "borderless", ref: buttonRef, className: "map-manager-item-sub-layer-button", title: popupOpen ? hideSubLayersLabel : showSubLayersLabel, onClick: togglePopup, children: _jsx(WebFontIcon, { iconName: "icon-layers" }) }), _jsx(Popup, { isOpen: popupOpen, position: RelativePosition.BottomRight, onClose: onOutsideClick, target: buttonRef.current, children: _jsx("div", { className: "map-transparency-popup-panel", children: _jsx("div", { ref: panelRef, className: "map-manager-sublayer-panel", children: _jsx(SubLayersPanel, { ...props, width: 390, height: 350 }) }) }) })] }));
36
31
  }
37
32
  //# sourceMappingURL=SubLayersPopupButton.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAqB,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAuB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQ9C,gBAAgB;AAChB,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IAEnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAoB,EAAE,EAAE;QAChE,iFAAiF;QACjF,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACpG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,iBAAiB,CAAiB,cAAc,EAAE,cAAc,CAAC,CAAC;IAEnF,OAAO,CACL;QACE,oBAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,YAAY,EAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,mCAAmC,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,EAClK,OAAO,EAAE,WAAW;YACpB,oBAAC,WAAW,IAAC,QAAQ,EAAC,aAAa,GAAG,CAC/B;QACT,oBAAC,KAAK,IACJ,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,gBAAgB,CAAC,WAAW,EACtC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,SAAS,CAAC,OAAO;YAEzB,6BAAK,SAAS,EAAC,8BAA8B;gBAC3C,6BAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,4BAA4B;oBACxD,oBAAC,cAAc,OAAK,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAG,CACjD,CACF,CACC,CACR,CACJ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\n\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport { OutsideClickEvent, Popup, useOnOutsideClick, WebFontIcon } from \"@itwin/core-react\";\nimport { SubLayersPanel, SubLayersPanelProps } from \"./SubLayersTree\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { Button } from \"@itwin/itwinui-react\";\n\n// cSpell:ignore droppable Sublayer\n\n/** @internal */\n\nexport type SubLayersPopupButtonProps = SubLayersPanelProps;\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersPopupButton(props: SubLayersPopupButtonProps) {\n\n const [showSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Show\"));\n const [hideSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Hide\"));\n const [popupOpen, setPopupOpen] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const togglePopup = React.useCallback(() => {\n setPopupOpen(!popupOpen);\n }, [popupOpen]);\n\n const onOutsideClick = React.useCallback(() => {\n setPopupOpen(false);\n }, []);\n\n const isOutsideEvent = React.useCallback((e: OutsideClickEvent) => {\n // if clicking on button that open panel - don't trigger outside click processing\n return !!buttonRef.current && (e.target instanceof Node) && !buttonRef.current.contains(e.target);\n }, []);\n\n const panelRef = useOnOutsideClick<HTMLDivElement>(onOutsideClick, isOutsideEvent);\n\n return (\n <>\n <Button size=\"small\" styleType=\"borderless\" ref={buttonRef} className=\"map-manager-item-sub-layer-button\" title={popupOpen ? hideSubLayersLabel : showSubLayersLabel}\n onClick={togglePopup}>\n <WebFontIcon iconName=\"icon-layers\" />\n </Button>\n <Popup\n isOpen={popupOpen}\n position={RelativePosition.BottomRight}\n onClose={onOutsideClick}\n target={buttonRef.current}\n >\n <div className=\"map-transparency-popup-panel\">\n <div ref={panelRef} className=\"map-manager-sublayer-panel\">\n <SubLayersPanel {...props} width={390} height={350}/>\n </div>\n </div>\n </Popup >\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"SubLayersPopupButton.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersPopupButton.tsx"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAQ9C,gBAAgB;AAChB,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACnE,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAoB,IAAI,CAAC,CAAC;IAExD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAoB,EAAE,EAAE;QAChE,iFAAiF;QACjF,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAClG,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,iBAAiB,CAAiB,cAAc,EAAE,cAAc,CAAC,CAAC;IAEnF,OAAO,CACL,8BACE,KAAC,MAAM,IACL,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,YAAY,EACtB,GAAG,EAAE,SAAS,EACd,SAAS,EAAC,mCAAmC,EAC7C,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,EAC1D,OAAO,EAAE,WAAW,YAEpB,KAAC,WAAW,IAAC,QAAQ,EAAC,aAAa,GAAG,GAC/B,EACT,KAAC,KAAK,IAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,YAClH,cAAK,SAAS,EAAC,8BAA8B,YAC3C,cAAK,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,4BAA4B,YACxD,KAAC,cAAc,OAAK,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAI,GAClD,GACF,GACA,IACP,CACJ,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\nimport * as React from \"react\";\n\nimport { RelativePosition } from \"@itwin/appui-abstract\";\nimport type { OutsideClickEvent } from \"@itwin/core-react\";\nimport { Popup, useOnOutsideClick, WebFontIcon } from \"@itwin/core-react\";\nimport type { SubLayersPanelProps } from \"./SubLayersTree\";\nimport { SubLayersPanel } from \"./SubLayersTree\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { Button } from \"@itwin/itwinui-react\";\n\n// cSpell:ignore droppable Sublayer\n\n/** @internal */\n\nexport type SubLayersPopupButtonProps = SubLayersPanelProps;\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersPopupButton(props: SubLayersPopupButtonProps) {\n const [showSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Show\"));\n const [hideSubLayersLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.Hide\"));\n const [popupOpen, setPopupOpen] = React.useState(false);\n const buttonRef = React.useRef<HTMLButtonElement>(null);\n\n const togglePopup = React.useCallback(() => {\n setPopupOpen(!popupOpen);\n }, [popupOpen]);\n\n const onOutsideClick = React.useCallback(() => {\n setPopupOpen(false);\n }, []);\n\n const isOutsideEvent = React.useCallback((e: OutsideClickEvent) => {\n // if clicking on button that open panel - don't trigger outside click processing\n return !!buttonRef.current && e.target instanceof Node && !buttonRef.current.contains(e.target);\n }, []);\n\n const panelRef = useOnOutsideClick<HTMLDivElement>(onOutsideClick, isOutsideEvent);\n\n return (\n <>\n <Button\n size=\"small\"\n styleType=\"borderless\"\n ref={buttonRef}\n className=\"map-manager-item-sub-layer-button\"\n title={popupOpen ? hideSubLayersLabel : showSubLayersLabel}\n onClick={togglePopup}\n >\n <WebFontIcon iconName=\"icon-layers\" />\n </Button>\n <Popup isOpen={popupOpen} position={RelativePosition.BottomRight} onClose={onOutsideClick} target={buttonRef.current}>\n <div className=\"map-transparency-popup-panel\">\n <div ref={panelRef} className=\"map-manager-sublayer-panel\">\n <SubLayersPanel {...props} width={390} height={350} />\n </div>\n </div>\n </Popup>\n </>\n );\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="react" />
2
- import { MapSubLayerProps, SubLayerId } from "@itwin/core-common";
3
- import { SubLayersTreeExpandMode } from "./SubLayersDataProvider";
2
+ import type { MapSubLayerProps, SubLayerId } from "@itwin/core-common";
3
+ import type { SubLayersTreeExpandMode } from "./SubLayersDataProvider";
4
4
  import "./SubLayersTree.scss";
5
5
  export declare type OnSubLayerStateChangeType = (subLayerId: SubLayerId, isSelected: boolean) => void;
6
6
  export interface SubLayersPanelProps extends Omit<SubLayersTreeProps, "subLayers"> {
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":";AAWA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIlE,OAAO,EAAyB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,sBAAsB,CAAC;AAuB9B,oBAAY,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AAEH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eAmGtD"}
1
+ {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":";AA+BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAKvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,OAAO,sBAAsB,CAAC;AAmB9B,oBAAY,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAGD,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AAEH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,eAwHtD"}
@@ -1,7 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
2
  /*---------------------------------------------------------------------------------------------
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
- *--------------------------------------------------------------------------------------------*/
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
5
6
  import { PropertyValueFormat } from "@itwin/appui-abstract";
6
7
  import { ControlledTree, SelectionMode, TreeEventHandler, TreeImageLoader, TreeModelSource, TreeNodeLoader, TreeNodeRenderer, TreeRenderer, useTreeModel, } from "@itwin/components-react";
7
8
  import { CheckBoxState, ImageCheckBox, ResizableContainerObserver, useDisposable } from "@itwin/core-react";
@@ -13,19 +14,16 @@ import { MapLayersUI } from "../../mapLayers";
13
14
  import { SvgCheckboxDeselect, SvgCheckboxSelect, SvgVisibilityHide, SvgVisibilityShow } from "@itwin/itwinui-icons-react";
14
15
  // eslint-disable-next-line @typescript-eslint/naming-convention
15
16
  function Toolbar(props) {
16
- return (React.createElement("div", { className: "map-manager-sublayer-tree-toolbar" },
17
- React.createElement("div", { className: "tree-toolbar-action-buttons" }, props.children),
18
- props.searchField && React.createElement("div", { className: "tree-toolbar-searchbox" }, props.searchField)));
17
+ return (_jsxs("div", { className: "map-manager-sublayer-tree-toolbar", children: [_jsx("div", { className: "tree-toolbar-action-buttons", children: props.children }), props.searchField && _jsx("div", { className: "tree-toolbar-searchbox", children: props.searchField })] }));
19
18
  }
20
19
  // eslint-disable-next-line @typescript-eslint/naming-convention
21
20
  export function SubLayersPanel(props) {
22
21
  const [noneAvailableLabel] = React.useState(MapLayersUI.localization.getLocalizedString("mapLayers:SubLayers.NoSubLayers"));
23
22
  if (undefined === props.subLayers || 0 === props.subLayers.length) {
24
- return React.createElement("div", { className: "map-manager-sublayer-panel" },
25
- React.createElement("div", null, noneAvailableLabel));
23
+ return (_jsx("div", { className: "map-manager-sublayer-panel", children: _jsx("div", { children: noneAvailableLabel }) }));
26
24
  }
27
25
  else {
28
- return (React.createElement(SubLayersTree, { subLayers: props.subLayers, ...props }));
26
+ return _jsx(SubLayersTree, { subLayers: props.subLayers, ...props });
29
27
  }
30
28
  }
31
29
  /**
@@ -47,7 +45,7 @@ export function SubLayersTree(props) {
47
45
  const dataProvider = React.useMemo(() => new SubLayersDataProvider(subLayers, props.expandMode),
48
46
  // eslint-disable-next-line react-hooks/exhaustive-deps
49
47
  [subLayers, props.expandMode, layerFilterString]);
50
- const { modelSource, nodeLoader, nodeHighlightingProps, } = useTreeFiltering(dataProvider, layerFilterString);
48
+ const { modelSource, nodeLoader, nodeHighlightingProps } = useTreeFiltering(dataProvider, layerFilterString);
51
49
  // create custom event handler. It handles all tree event same as `TreeEventHandler` but additionally
52
50
  // it selects/deselects node when checkbox is checked/unchecked and vice versa.
53
51
  // `useDisposable` takes care of disposing old event handler when new is created in case 'nodeLoader' has changed
@@ -64,22 +62,22 @@ export function SubLayersTree(props) {
64
62
  });
65
63
  setSubLayers(tmpSubLayers);
66
64
  }
67
- if (props.onSubLayerStateChange)
65
+ if (props.onSubLayerStateChange) {
68
66
  props.onSubLayerStateChange(-1, visible);
67
+ }
69
68
  }, [subLayers, props]);
70
69
  const handleFilterTextChanged = React.useCallback((event) => {
71
70
  setLayerFilterString(event.target.value);
72
71
  }, []);
73
- return React.createElement(React.Fragment, null,
74
- React.createElement("div", { className: "map-manager-sublayer-tree" },
75
- React.createElement(Toolbar, { searchField: React.createElement(Input, { type: "text", className: "map-manager-sublayer-tree-searchbox", placeholder: placeholderLabel, value: layerFilterString, onChange: handleFilterTextChanged, size: "small" }) }, props.singleVisibleSubLayer ? undefined : [
76
- React.createElement(IconButton, { key: "show-all-btn", size: "small", title: props.checkboxStyle === "eye" ? MapLayersUI.translate("SubLayers.AllOn") : MapLayersUI.translate("SelectFeaturesDialog.AllOn"), onClick: async () => changeAll(true) }, props.checkboxStyle === "eye" ? React.createElement(SvgVisibilityShow, null) : React.createElement(SvgCheckboxSelect, null)),
77
- React.createElement(IconButton, { style: { marginLeft: "5px" }, key: "hide-all-btn", size: "small", title: props.checkboxStyle === "eye" ? MapLayersUI.translate("SubLayers.AllOff") : MapLayersUI.translate("SelectFeaturesDialog.AllOff"), onClick: async () => changeAll(false) }, props.checkboxStyle === "eye" ? React.createElement(SvgVisibilityHide, null) : React.createElement(SvgCheckboxDeselect, null)),
78
- ]),
79
- React.createElement("div", { className: "map-manager-sublayer-tree-content" },
80
- (props.width === undefined && props.height === undefined) && React.createElement(ResizableContainerObserver, { onResize: (w, h) => { setWidth(w); setHeight(h); } }),
81
- (width !== undefined && height !== undefined)
82
- && React.createElement(ControlledTree, { nodeLoader: nodeLoader, selectionMode: SelectionMode.None, eventsHandler: eventHandler, model: treeModel, treeRenderer: props.checkboxStyle === "eye" ? nodeWithEyeCheckboxTreeRenderer : undefined, nodeHighlightingProps: nodeHighlightingProps, width: width, height: height, noDataRenderer: () => (React.createElement("p", { className: "components-controlledTree-errorMessage" }, noResults)) }))));
72
+ return (_jsx(_Fragment, { children: _jsxs("div", { className: "map-manager-sublayer-tree", children: [_jsx(Toolbar, { searchField: _jsx(Input, { type: "text", className: "map-manager-sublayer-tree-searchbox", placeholder: placeholderLabel, value: layerFilterString, onChange: handleFilterTextChanged, size: "small" }), children: props.singleVisibleSubLayer
73
+ ? undefined
74
+ : [
75
+ _jsx(IconButton, { size: "small", title: props.checkboxStyle === "eye" ? MapLayersUI.translate("SubLayers.AllOn") : MapLayersUI.translate("SelectFeaturesDialog.AllOn"), onClick: async () => changeAll(true), children: props.checkboxStyle === "eye" ? _jsx(SvgVisibilityShow, {}) : _jsx(SvgCheckboxSelect, {}) }, "show-all-btn"),
76
+ _jsx(IconButton, { style: { marginLeft: "5px" }, size: "small", title: props.checkboxStyle === "eye" ? MapLayersUI.translate("SubLayers.AllOff") : MapLayersUI.translate("SelectFeaturesDialog.AllOff"), onClick: async () => changeAll(false), children: props.checkboxStyle === "eye" ? _jsx(SvgVisibilityHide, {}) : _jsx(SvgCheckboxDeselect, {}) }, "hide-all-btn"),
77
+ ] }), _jsxs("div", { className: "map-manager-sublayer-tree-content", children: [props.width === undefined && props.height === undefined && (_jsx(ResizableContainerObserver, { onResize: (w, h) => {
78
+ setWidth(w);
79
+ setHeight(h);
80
+ } })), width !== undefined && height !== undefined && (_jsx(ControlledTree, { nodeLoader: nodeLoader, selectionMode: SelectionMode.None, eventsHandler: eventHandler, model: treeModel, treeRenderer: props.checkboxStyle === "eye" ? nodeWithEyeCheckboxTreeRenderer : undefined, nodeHighlightingProps: nodeHighlightingProps, width: width, height: height, noDataRenderer: () => _jsx("p", { className: "components-controlledTree-errorMessage", children: noResults }) }))] })] }) }));
83
81
  }
84
82
  /** TreeEventHandler derived class that handler processing changes to subLayer visibility */
85
83
  class SubLayerCheckboxHandler extends TreeEventHandler {
@@ -99,8 +97,9 @@ class SubLayerCheckboxHandler extends TreeEventHandler {
99
97
  this.modelSource.modifyModel((model) => {
100
98
  const addedNodes = args[1].addedNodeIds.map((id) => model.getNode(id));
101
99
  addedNodes.forEach((node) => {
102
- if (!node)
100
+ if (!node) {
103
101
  return;
102
+ }
104
103
  this.syncNodeStateWithParent(model, node);
105
104
  });
106
105
  });
@@ -119,41 +118,49 @@ class SubLayerCheckboxHandler extends TreeEventHandler {
119
118
  // they get rendered anyway.
120
119
  cascadeStateToAllChildren(model, parentId) {
121
120
  const children = model.getChildren(parentId);
122
- if (children === undefined)
121
+ if (children === undefined) {
123
122
  return;
123
+ }
124
124
  for (const childID of children) {
125
125
  const childNode = childID ? model.getNode(childID) : undefined;
126
- if (childNode)
126
+ if (childNode) {
127
127
  this.syncNodeStateWithParent(model, childNode);
128
+ }
128
129
  // Drill down the tree.
129
130
  this.cascadeStateToAllChildren(model, childID);
130
131
  }
131
132
  }
132
133
  applyMutualExclusiveState(model, nodeId) {
133
134
  const changedNode = model.getNode(nodeId);
134
- if (changedNode?.checkbox.state === CheckBoxState.Off)
135
+ if (changedNode?.checkbox.state === CheckBoxState.Off) {
135
136
  return;
137
+ }
136
138
  for (const node of model.iterateTreeModelNodes()) {
137
- if (node.id === changedNode?.id)
139
+ if (node.id === changedNode?.id) {
138
140
  continue;
139
- if (node && node.checkbox.state === CheckBoxState.On)
141
+ }
142
+ if (node && node.checkbox.state === CheckBoxState.On) {
140
143
  node.checkbox.state = CheckBoxState.Off;
144
+ }
141
145
  }
142
146
  }
143
147
  static isUnnamedGroup(subLayer) {
144
- if (!subLayer)
148
+ if (!subLayer) {
145
149
  return false;
146
- return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);
150
+ }
151
+ return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;
147
152
  }
148
153
  // Ensure the state of changed node matches the state of its parent.
149
154
  syncNodeStateWithParent(model, changedNode) {
150
155
  // Lookup node parent. If non exists, I assume thats the root node,
151
156
  // and it must have a proper initial state.
152
157
  const parentNode = changedNode.parentId ? model.getNode(changedNode.parentId) : undefined;
153
- if (!parentNode)
158
+ if (!parentNode) {
154
159
  return;
155
- if (!changedNode.checkbox)
156
- return; // don't see why this would happen, but if there is no checkbox, we cant do much here.
160
+ }
161
+ if (!changedNode.checkbox) {
162
+ return;
163
+ } // don't see why this would happen, but if there is no checkbox, we cant do much here.
157
164
  const parentLayerId = undefined !== parentNode.item.extendedData?.subLayerId ? parentNode.item.extendedData?.subLayerId : parentNode.item.id;
158
165
  const parentSubLayer = this._subLayers?.find((subLayer) => subLayer.id === parentLayerId);
159
166
  // If parent is disabled, then children must be too.
@@ -178,36 +185,41 @@ class SubLayerCheckboxHandler extends TreeEventHandler {
178
185
  const selectionHandling = stateChanges.subscribe({
179
186
  next: (changes) => {
180
187
  changes.forEach((change) => {
181
- const isSelected = (change.newState === CheckBoxState.On);
188
+ const isSelected = change.newState === CheckBoxState.On;
182
189
  const subLayerId = undefined !== change.nodeItem.extendedData?.subLayerId ? change.nodeItem.extendedData?.subLayerId : change.nodeItem.id;
183
190
  // Get the previously visible node if we are in 'singleVisibleSubLayer' node
184
191
  let prevVisibleSubLayers = [];
185
192
  if (this._singleVisibleSubLayer) {
186
193
  prevVisibleSubLayers = this._subLayers.reduce((filtered, subLayer) => {
187
- if (subLayer.visible && subLayer.id !== undefined)
194
+ if (subLayer.visible && subLayer.id !== undefined) {
188
195
  filtered.push(subLayer.id);
196
+ }
189
197
  return filtered;
190
198
  }, []);
191
199
  }
192
200
  // Inform caller that subLayer state is going to change (i.e. update display style state)
193
201
  if (this._onSubLayerStateChange) {
194
- for (const slId of prevVisibleSubLayers)
202
+ for (const slId of prevVisibleSubLayers) {
195
203
  this._onSubLayerStateChange(slId, false);
204
+ }
196
205
  this._onSubLayerStateChange(subLayerId, isSelected);
197
206
  }
198
207
  // Update sublayer object, otherwise state would get out of sync with DisplayStyle each time the TreeView is re-rendered
199
208
  this._subLayers?.forEach((curSubLayer) => {
200
209
  if (curSubLayer.id !== undefined) {
201
- if (curSubLayer.id === subLayerId)
210
+ if (curSubLayer.id === subLayerId) {
202
211
  curSubLayer.visible = isSelected;
203
- else if (prevVisibleSubLayers.includes(curSubLayer.id))
212
+ }
213
+ else if (prevVisibleSubLayers.includes(curSubLayer.id)) {
204
214
  curSubLayer.visible = false;
215
+ }
205
216
  }
206
217
  });
207
218
  // Cascade state
208
219
  this.modelSource.modifyModel((model) => {
209
- if (this._singleVisibleSubLayer)
220
+ if (this._singleVisibleSubLayer) {
210
221
  this.applyMutualExclusiveState(model, change.nodeItem.id);
222
+ }
211
223
  this.cascadeStateToAllChildren(model, change.nodeItem.id);
212
224
  });
213
225
  });
@@ -219,12 +231,12 @@ class SubLayerCheckboxHandler extends TreeEventHandler {
219
231
  }
220
232
  }
221
233
  /** Custom checkbox renderer that renders checkbox as an eye */
222
- const eyeCheckboxRenderer = (props) => (React.createElement(ImageCheckBox, { checked: props.checked, disabled: props.disabled, imageOn: "icon-visibility", imageOff: "icon-visibility-hide-2", onClick: props.onChange, tooltip: props.title }));
234
+ const eyeCheckboxRenderer = (props) => (_jsx(ImageCheckBox, { checked: props.checked, disabled: props.disabled, imageOn: "icon-visibility", imageOff: "icon-visibility-hide-2", onClick: props.onChange, tooltip: props.title }));
223
235
  /** Custom node renderer. It uses default 'TreeNodeRenderer' but overrides default checkbox renderer to render checkbox as an eye */
224
236
  const imageLoader = new TreeImageLoader();
225
- const nodeWithEyeCheckboxRenderer = (props) => (React.createElement(TreeNodeRenderer, { ...props, checkboxRenderer: eyeCheckboxRenderer, imageLoader: imageLoader }));
237
+ const nodeWithEyeCheckboxRenderer = (props) => (_jsx(TreeNodeRenderer, { ...props, checkboxRenderer: eyeCheckboxRenderer, imageLoader: imageLoader }));
226
238
  /** Custom tree renderer. It uses default `TreeRenderer` but overrides default node renderer to render node with custom checkbox */
227
- const nodeWithEyeCheckboxTreeRenderer = (props) => (React.createElement(TreeRenderer, { ...props, nodeRenderer: nodeWithEyeCheckboxRenderer }));
239
+ const nodeWithEyeCheckboxTreeRenderer = (props) => _jsx(TreeRenderer, { ...props, nodeRenderer: nodeWithEyeCheckboxRenderer });
228
240
  function useTreeFiltering(dataProvider, filter) {
229
241
  const nodeLoader = useFilteredProvider(dataProvider, filter);
230
242
  const nodeHighlightingProps = useNodeHighlightingProps(filter);
@@ -298,8 +310,9 @@ class FilteredTreeHierarchy {
298
310
  filterNodes(hierarchy, current) {
299
311
  const matches = current ? this.matchesFilter(current) : false;
300
312
  const children = hierarchy.get(current?.id);
301
- if (!children)
313
+ if (!children) {
302
314
  return matches ? current : undefined;
315
+ }
303
316
  const matchedChildren = new Array();
304
317
  for (const child of children) {
305
318
  const matchedChild = this.filterNodes(hierarchy, child);
@@ -322,11 +335,13 @@ class FilteredTreeHierarchy {
322
335
  return filtered;
323
336
  }
324
337
  matchesFilter(node) {
325
- if (node.label.value.valueFormat !== PropertyValueFormat.Primitive)
338
+ if (node.label.value.valueFormat !== PropertyValueFormat.Primitive) {
326
339
  return false;
340
+ }
327
341
  const value = node.label.value.displayValue?.toLowerCase();
328
- if (!value)
342
+ if (!value) {
329
343
  return false;
344
+ }
330
345
  return value.includes(this._filter.toLowerCase());
331
346
  }
332
347
  async getHierarchy() {
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersTree.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.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*--------------------------------------------------------------------------------------------*/\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport {\n AbstractTreeNodeLoaderWithProvider, ControlledTree, DelayLoadedTreeNodeItem, HighlightableTreeProps, ITreeDataProvider,\n MutableTreeModel, MutableTreeModelNode, SelectionMode, TreeCheckboxStateChangeEventArgs, TreeDataProvider,\n TreeEventHandler, TreeImageLoader, TreeModel, TreeModelChanges, TreeModelSource, TreeNodeItem, TreeNodeLoader,\n TreeNodeRenderer, TreeNodeRendererProps, TreeRenderer, TreeRendererProps, useTreeModel,\n} from \"@itwin/components-react\";\nimport { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport { CheckBoxState, ImageCheckBox, NodeCheckboxRenderProps, ResizableContainerObserver, useDisposable } from \"@itwin/core-react\";\nimport { IconButton, Input } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { SubLayersDataProvider, SubLayersTreeExpandMode } from \"./SubLayersDataProvider\";\nimport \"./SubLayersTree.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SvgCheckboxDeselect, SvgCheckboxSelect, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\n\ninterface ToolbarProps {\n searchField?: React.ReactNode;\n children?: React.ReactNode[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction Toolbar(props: ToolbarProps) {\n return (\n <div className=\"map-manager-sublayer-tree-toolbar\">\n <div className=\"tree-toolbar-action-buttons\">\n {props.children}\n </div>\n {props.searchField && <div className=\"tree-toolbar-searchbox\">\n {props.searchField}\n </div>}\n </div>\n );\n}\n\nexport type OnSubLayerStateChangeType = (subLayerId: SubLayerId, isSelected: boolean) => void;\nexport interface SubLayersPanelProps extends Omit<SubLayersTreeProps, \"subLayers\"> {\n subLayers?: MapSubLayerProps[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersPanel(props: SubLayersPanelProps) {\n const [noneAvailableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.NoSubLayers\"));\n if (undefined === props.subLayers || 0 === props.subLayers.length) {\n return <div className=\"map-manager-sublayer-panel\">\n <div>{noneAvailableLabel}</div>\n </div>;\n } else {\n return (\n <SubLayersTree subLayers={props.subLayers} {...props} />\n );\n }\n}\n\nexport interface SubLayersTreeProps {\n checkboxStyle: \"standard\" | \"eye\";\n expandMode: SubLayersTreeExpandMode;\n subLayers: MapSubLayerProps[];\n singleVisibleSubLayer?: boolean;\n onSubLayerStateChange?: OnSubLayerStateChangeType;\n height?: number;\n width?: number;\n}\n\n/**\n * Tree Control that displays sub-layer hierarchy\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersTree(props: SubLayersTreeProps) {\n const [width, setWidth] = React.useState<number|undefined>(props.width);\n const [height, setHeight] = React.useState<number|undefined>(props.height);\n\n const [placeholderLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.SearchPlaceholder\"));\n const [noResults] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.NoResults\"));\n const [subLayers, setSubLayers] = React.useState(props.subLayers);\n const [layerFilterString, setLayerFilterString] = React.useState<string>(\"\");\n\n // create data provider to get some nodes to show in tree\n // `React.useMemo' is used avoid creating new object on each render cycle\n // We DO want a dependency on 'layerFilterString' (event though eslint doesn't like it)..\n // each time the filter is updated the provider must be refreshed otherwise the state of model is out of synch.\n const dataProvider = React.useMemo(() => new SubLayersDataProvider(subLayers, props.expandMode),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [subLayers, props.expandMode, layerFilterString]);\n\n const {\n modelSource,\n nodeLoader,\n nodeHighlightingProps,\n } = useTreeFiltering(dataProvider, layerFilterString);\n\n // create custom event handler. It handles all tree event same as `TreeEventHandler` but additionally\n // it selects/deselects node when checkbox is checked/unchecked and vice versa.\n // `useDisposable` takes care of disposing old event handler when new is created in case 'nodeLoader' has changed\n // `React.useCallback` is used to avoid creating new callback that creates handler on each render\n const eventHandler = useDisposable(React.useCallback(() => new SubLayerCheckboxHandler(subLayers, props.singleVisibleSubLayer ?? false, nodeLoader, props.onSubLayerStateChange),\n [nodeLoader, subLayers, props.onSubLayerStateChange, props.singleVisibleSubLayer]));\n\n // Get an immutable tree model from the model source. The model is regenerated every time the model source\n // emits the `onModelChanged` event.\n const treeModel = useTreeModel(modelSource);\n const changeAll = React.useCallback(async (visible: boolean) => {\n const tmpSubLayers = [...subLayers]; // deep copy to trigger state change\n if (tmpSubLayers) {\n tmpSubLayers?.forEach((subLayer: MapSubLayerProps) => {\n subLayer.visible = visible;\n });\n\n setSubLayers(tmpSubLayers);\n }\n\n if (props.onSubLayerStateChange)\n props.onSubLayerStateChange(-1, visible);\n }, [subLayers, props]);\n\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setLayerFilterString(event.target.value);\n }, []);\n\n return <>\n <div className=\"map-manager-sublayer-tree\">\n <Toolbar\n searchField={\n <Input type=\"text\" className=\"map-manager-sublayer-tree-searchbox\"\n placeholder={placeholderLabel}\n value={layerFilterString}\n onChange={handleFilterTextChanged}\n size=\"small\" />\n }\n >\n {props.singleVisibleSubLayer ? undefined : [\n <IconButton\n key=\"show-all-btn\"\n size=\"small\"\n title={props.checkboxStyle === \"eye\" ? MapLayersUI.translate(\"SubLayers.AllOn\") : MapLayersUI.translate(\"SelectFeaturesDialog.AllOn\")}\n onClick={async () => changeAll(true)}\n >\n {props.checkboxStyle === \"eye\" ? <SvgVisibilityShow /> : <SvgCheckboxSelect /> }\n </IconButton>,\n <IconButton\n style={{ marginLeft: \"5px\" }}\n key=\"hide-all-btn\"\n size=\"small\"\n title={props.checkboxStyle === \"eye\" ? MapLayersUI.translate(\"SubLayers.AllOff\") : MapLayersUI.translate(\"SelectFeaturesDialog.AllOff\")}\n onClick={async () => changeAll(false)}\n >\n {props.checkboxStyle === \"eye\" ? <SvgVisibilityHide /> : <SvgCheckboxDeselect /> }\n </IconButton>,\n ]}\n </Toolbar>\n <div className=\"map-manager-sublayer-tree-content\" >\n {(props.width === undefined && props.height === undefined) && <ResizableContainerObserver onResize={(w, h) => {setWidth(w); setHeight(h);} }/> }\n {(width !== undefined && height !== undefined)\n && <ControlledTree\n nodeLoader={nodeLoader}\n selectionMode={SelectionMode.None}\n eventsHandler={eventHandler}\n model={treeModel}\n treeRenderer={props.checkboxStyle === \"eye\" ? nodeWithEyeCheckboxTreeRenderer : undefined}\n nodeHighlightingProps={nodeHighlightingProps}\n width={width}\n height={height}\n noDataRenderer={()=>(<p className=\"components-controlledTree-errorMessage\">{noResults}</p>)}\n />}\n </div>\n </div >\n </>;\n}\n\n/** TreeEventHandler derived class that handler processing changes to subLayer visibility */\nclass SubLayerCheckboxHandler extends TreeEventHandler {\n private _removeModelChangedListener: () => void;\n private _onSubLayerStateChange?: OnSubLayerStateChangeType;\n private _subLayers: MapSubLayerProps[];\n private _singleVisibleSubLayer?: boolean;\n\n constructor(subLayers: MapSubLayerProps[], singleVisibleSubLayer: boolean, nodeLoader: AbstractTreeNodeLoaderWithProvider<TreeDataProvider>, onSubLayerStateChange?: OnSubLayerStateChangeType) {\n super({ modelSource: nodeLoader.modelSource, nodeLoader, collapsedChildrenDisposalEnabled: true });\n this._subLayers = subLayers;\n this._singleVisibleSubLayer = singleVisibleSubLayer;\n this._onSubLayerStateChange = onSubLayerStateChange;\n this._removeModelChangedListener = this.modelSource.onModelChanged.addListener(this.onModelChanged);\n }\n\n public override dispose() {\n this._removeModelChangedListener();\n super.dispose();\n }\n\n // Cascade state\n // Children on unnamed groups must get disabled in the tree view, because\n // they get rendered anyway.\n private cascadeStateToAllChildren(model: MutableTreeModel, parentId?: string) {\n const children = model.getChildren(parentId);\n if (children === undefined)\n return;\n\n for (const childID of children) {\n const childNode = childID ? model.getNode(childID) : undefined;\n\n if (childNode)\n this.syncNodeStateWithParent(model, childNode);\n\n // Drill down the tree.\n this.cascadeStateToAllChildren(model, childID);\n }\n }\n\n private applyMutualExclusiveState(model: MutableTreeModel, nodeId: string) {\n const changedNode = model.getNode(nodeId);\n if (changedNode?.checkbox.state === CheckBoxState.Off)\n return;\n\n for (const node of model.iterateTreeModelNodes()) {\n if (node.id === changedNode?.id)\n continue;\n\n if (node && node.checkbox.state === CheckBoxState.On)\n node.checkbox.state = CheckBoxState.Off;\n }\n }\n\n //-----------------------------------------------------------------------\n // Listen to model changes\n //------------------------------------------------------------------------\n // This is required because nodes are delay loaded in the model until\n // they are made visible (i.e. parent node is expanded). So even though\n // you might have created nodes in the data provided with a proper\n // initial state, by the time it gets loaded, their state might have became\n // out of date in the TreeView's active model. So whenever a node\n // is added, when must confirm its state matches the current model\n // (i.e. state of their parent.)\n public onModelChanged = (args: [TreeModel, TreeModelChanges]) => {\n this.modelSource.modifyModel((model) => {\n const addedNodes = args[1].addedNodeIds.map((id) => model.getNode(id));\n addedNodes.forEach((node) => {\n if (!node)\n return;\n\n this.syncNodeStateWithParent(model, node);\n });\n });\n };\n\n private static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer)\n return false;\n\n return (!subLayer.name || subLayer.name.length === 0) && (subLayer.children !== undefined && subLayer.children.length > 0);\n }\n\n // Ensure the state of changed node matches the state of its parent.\n private syncNodeStateWithParent(model: MutableTreeModel, changedNode: MutableTreeModelNode) {\n // Lookup node parent. If non exists, I assume thats the root node,\n // and it must have a proper initial state.\n const parentNode = changedNode.parentId ? model.getNode(changedNode.parentId) : undefined;\n if (!parentNode)\n return;\n\n if (!changedNode.checkbox)\n return; // don't see why this would happen, but if there is no checkbox, we cant do much here.\n\n const parentLayerId = undefined !== parentNode.item.extendedData?.subLayerId ? parentNode.item.extendedData?.subLayerId : parentNode.item.id;\n const parentSubLayer = this._subLayers?.find((subLayer) => subLayer.id === parentLayerId);\n\n // If parent is disabled, then children must be too.\n // Also, Non-visible unnamed group must have their children disabled (unamed groups have visibility inherence)\n if (parentNode.checkbox.isDisabled || (SubLayerCheckboxHandler.isUnnamedGroup(parentSubLayer) && parentNode.checkbox.state === CheckBoxState.Off)) {\n changedNode.checkbox.isDisabled = true;\n changedNode.checkbox.state = CheckBoxState.Off;\n } else {\n // Visibility state from StyleMapLayerSettings applies\n const subLayerId = undefined !== changedNode.item.extendedData?.subLayerId ? changedNode.item.extendedData?.subLayerId : changedNode.item.id;\n const foundSubLayer = this._subLayers?.find((subLayer) => subLayer.id === subLayerId);\n changedNode.checkbox.isDisabled = false;\n changedNode.checkbox.state = foundSubLayer?.visible ? CheckBoxState.On : CheckBoxState.Off;\n }\n }\n\n /** Changes nodes checkboxes states until event is handled or handler is disposed */\n public override onCheckboxStateChanged({ stateChanges }: TreeCheckboxStateChangeEventArgs) {\n // call base checkbox handling\n const baseHandling = super.onCheckboxStateChanged({ stateChanges });\n\n // subscribe to checkbox state changes to new checkbox states and do some additional work with them\n const selectionHandling = stateChanges.subscribe({\n next: (changes) => {\n changes.forEach((change) => {\n const isSelected = (change.newState === CheckBoxState.On);\n const subLayerId = undefined !== change.nodeItem.extendedData?.subLayerId ? change.nodeItem.extendedData?.subLayerId : change.nodeItem.id;\n\n // Get the previously visible node if we are in 'singleVisibleSubLayer' node\n let prevVisibleSubLayers: SubLayerId[] = [];\n if (this._singleVisibleSubLayer) {\n prevVisibleSubLayers = this._subLayers.reduce((filtered: SubLayerId[], subLayer) => {\n if (subLayer.visible && subLayer.id !== undefined)\n filtered.push(subLayer.id);\n return filtered;\n }, []);\n }\n\n // Inform caller that subLayer state is going to change (i.e. update display style state)\n if (this._onSubLayerStateChange) {\n for (const slId of prevVisibleSubLayers)\n this._onSubLayerStateChange(slId, false);\n\n this._onSubLayerStateChange(subLayerId, isSelected);\n }\n\n // Update sublayer object, otherwise state would get out of sync with DisplayStyle each time the TreeView is re-rendered\n this._subLayers?.forEach((curSubLayer) => {\n if (curSubLayer.id !== undefined) {\n if (curSubLayer.id === subLayerId)\n curSubLayer.visible = isSelected;\n else if (prevVisibleSubLayers.includes(curSubLayer.id))\n curSubLayer.visible = false;\n }\n });\n\n // Cascade state\n this.modelSource.modifyModel((model) => {\n if (this._singleVisibleSubLayer)\n this.applyMutualExclusiveState(model, change.nodeItem.id);\n this.cascadeStateToAllChildren(model, change.nodeItem.id);\n });\n });\n },\n });\n // stop handling selection when checkboxes handling is stopped\n baseHandling?.add(selectionHandling);\n return baseHandling;\n }\n}\n\n/** Custom checkbox renderer that renders checkbox as an eye */\nconst eyeCheckboxRenderer = (props: NodeCheckboxRenderProps) => (\n <ImageCheckBox\n checked={props.checked}\n disabled={props.disabled}\n imageOn=\"icon-visibility\"\n imageOff=\"icon-visibility-hide-2\"\n onClick={props.onChange}\n tooltip={props.title}\n />\n);\n\n/** Custom node renderer. It uses default 'TreeNodeRenderer' but overrides default checkbox renderer to render checkbox as an eye */\nconst imageLoader = new TreeImageLoader();\nconst nodeWithEyeCheckboxRenderer = (props: TreeNodeRendererProps) => (\n <TreeNodeRenderer\n {...props}\n checkboxRenderer={eyeCheckboxRenderer}\n imageLoader={imageLoader}\n />\n);\n\n/** Custom tree renderer. It uses default `TreeRenderer` but overrides default node renderer to render node with custom checkbox */\nconst nodeWithEyeCheckboxTreeRenderer = (props: TreeRendererProps) => (\n <TreeRenderer\n {...props}\n nodeRenderer={nodeWithEyeCheckboxRenderer}\n />\n);\n\nfunction useTreeFiltering(\n dataProvider: ITreeDataProvider,\n filter: string,\n) {\n const nodeLoader = useFilteredProvider(dataProvider, filter);\n const nodeHighlightingProps = useNodeHighlightingProps(filter);\n return {\n nodeLoader,\n modelSource: nodeLoader.modelSource,\n nodeHighlightingProps,\n };\n}\n\nfunction useFilteredProvider(\n dataProvider: ITreeDataProvider,\n filter: string,\n) {\n const filteredProvider = React.useMemo(() => {\n return new FilteredTreeDataProvider(dataProvider, filter);\n }, [dataProvider, filter]);\n\n const nodeLoader = React.useMemo(() => {\n return new TreeNodeLoader(filteredProvider, new TreeModelSource());\n }, [filteredProvider]);\n\n return nodeLoader;\n}\n\nfunction useNodeHighlightingProps(\n filter: string,\n) {\n const [nodeHighlightingProps, setNodeHighlightingProps] = React.useState<HighlightableTreeProps>();\n\n React.useEffect(() => {\n if (filter === \"\") {\n setNodeHighlightingProps(undefined);\n return;\n }\n setNodeHighlightingProps({\n searchText: filter,\n activeMatch: undefined,\n });\n }, [filter]);\n\n return nodeHighlightingProps;\n}\n\nclass FullTreeHierarchy {\n private _dataProvider: ITreeDataProvider;\n private _hierarchy = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\n private _init: Promise<void>;\n\n public constructor(dataProvider: ITreeDataProvider) {\n this._dataProvider = dataProvider;\n\n this._init = (async () => {\n await this.initNode();\n })();\n }\n\n private async initNode(parent?: TreeNodeItem) {\n const nodes = await this._dataProvider.getNodes(parent);\n this._hierarchy.set(parent?.id, nodes);\n for (const node of nodes) {\n await this.initNode(node);\n }\n }\n\n public async getHierarchy() {\n await this._init;\n return this._hierarchy;\n }\n}\n\nclass FilteredTreeHierarchy {\n private _fullHierarchy: FullTreeHierarchy;\n private _filter: string;\n private _filtered = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\n private _init: Promise<void>;\n\n public constructor(dataProvider: ITreeDataProvider, filter: string) {\n this._fullHierarchy = new FullTreeHierarchy(dataProvider);\n this._filter = filter;\n\n this._init = (async () => {\n await this.init();\n })();\n }\n\n private async init() {\n const hierarchy = await this._fullHierarchy.getHierarchy();\n if (this._filter === \"\") {\n this._filtered = hierarchy;\n return;\n }\n this.filterNodes(hierarchy);\n }\n\n /** Initializes `this._filtered` field. Returns a node if it matches a filter. */\n private filterNodes(hierarchy: Map<string | undefined, DelayLoadedTreeNodeItem[]>, current?: DelayLoadedTreeNodeItem): DelayLoadedTreeNodeItem | undefined {\n const matches = current ? this.matchesFilter(current) : false;\n const children = hierarchy.get(current?.id);\n if (!children)\n return matches ? current : undefined;\n\n const matchedChildren = new Array<DelayLoadedTreeNodeItem>();\n for (const child of children) {\n const matchedChild = this.filterNodes(hierarchy, child);\n matchedChild && matchedChildren.push(matchedChild);\n }\n\n const hasChildren = matchedChildren.length > 0;\n const included = matches || hasChildren;\n let filtered: DelayLoadedTreeNodeItem | undefined;\n if (included) {\n this._filtered.set(current?.id, matchedChildren);\n\n // Return a modified copy of current node (to persist initial hierarchy when filter is cleared).\n if (current) {\n filtered = {\n ...current,\n hasChildren,\n autoExpand: hasChildren ? true : current.autoExpand,\n };\n }\n }\n return filtered;\n }\n\n private matchesFilter(node: TreeNodeItem) {\n if (node.label.value.valueFormat !== PropertyValueFormat.Primitive)\n return false;\n\n const value = node.label.value.displayValue?.toLowerCase();\n if (!value)\n return false;\n return value.includes(this._filter.toLowerCase());\n }\n\n public async getHierarchy() {\n await this._init;\n return this._filtered;\n }\n}\n\nclass FilteredTreeDataProvider implements ITreeDataProvider {\n private _hierarchy: FilteredTreeHierarchy;\n\n public constructor(\n parentDataProvider: ITreeDataProvider,\n filter: string,\n ) {\n this._hierarchy = new FilteredTreeHierarchy(parentDataProvider, filter);\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const hierarchy = await this._hierarchy.getHierarchy();\n const nodes = hierarchy.get(parent?.id);\n return nodes || [];\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const hierarchy = await this._hierarchy.getHierarchy();\n const nodes = hierarchy.get(parent?.id);\n return nodes?.length || 0;\n }\n}\n"]}
1
+ {"version":3,"file":"SubLayersTree.js","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.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 *--------------------------------------------------------------------------------------------*/\nimport { PropertyValueFormat } from \"@itwin/appui-abstract\";\nimport type {\n AbstractTreeNodeLoaderWithProvider,\n DelayLoadedTreeNodeItem,\n HighlightableTreeProps,\n ITreeDataProvider,\n MutableTreeModel,\n MutableTreeModelNode,\n TreeCheckboxStateChangeEventArgs,\n TreeDataProvider,\n TreeModel,\n TreeModelChanges,\n TreeNodeItem,\n TreeNodeRendererProps,\n TreeRendererProps,\n} from \"@itwin/components-react\";\nimport {\n ControlledTree,\n SelectionMode,\n TreeEventHandler,\n TreeImageLoader,\n TreeModelSource,\n TreeNodeLoader,\n TreeNodeRenderer,\n TreeRenderer,\n useTreeModel,\n} from \"@itwin/components-react\";\nimport type { MapSubLayerProps, SubLayerId } from \"@itwin/core-common\";\nimport type { NodeCheckboxRenderProps } from \"@itwin/core-react\";\nimport { CheckBoxState, ImageCheckBox, ResizableContainerObserver, useDisposable } from \"@itwin/core-react\";\nimport { IconButton, Input } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport type { SubLayersTreeExpandMode } from \"./SubLayersDataProvider\";\nimport { SubLayersDataProvider } from \"./SubLayersDataProvider\";\nimport \"./SubLayersTree.scss\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SvgCheckboxDeselect, SvgCheckboxSelect, SvgVisibilityHide, SvgVisibilityShow } from \"@itwin/itwinui-icons-react\";\n\ninterface ToolbarProps {\n searchField?: React.ReactNode;\n children?: React.ReactNode[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction Toolbar(props: ToolbarProps) {\n return (\n <div className=\"map-manager-sublayer-tree-toolbar\">\n <div className=\"tree-toolbar-action-buttons\">{props.children}</div>\n {props.searchField && <div className=\"tree-toolbar-searchbox\">{props.searchField}</div>}\n </div>\n );\n}\n\nexport type OnSubLayerStateChangeType = (subLayerId: SubLayerId, isSelected: boolean) => void;\nexport interface SubLayersPanelProps extends Omit<SubLayersTreeProps, \"subLayers\"> {\n subLayers?: MapSubLayerProps[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersPanel(props: SubLayersPanelProps) {\n const [noneAvailableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.NoSubLayers\"));\n if (undefined === props.subLayers || 0 === props.subLayers.length) {\n return (\n <div className=\"map-manager-sublayer-panel\">\n <div>{noneAvailableLabel}</div>\n </div>\n );\n } else {\n return <SubLayersTree subLayers={props.subLayers} {...props} />;\n }\n}\n\nexport interface SubLayersTreeProps {\n checkboxStyle: \"standard\" | \"eye\";\n expandMode: SubLayersTreeExpandMode;\n subLayers: MapSubLayerProps[];\n singleVisibleSubLayer?: boolean;\n onSubLayerStateChange?: OnSubLayerStateChangeType;\n height?: number;\n width?: number;\n}\n\n/**\n * Tree Control that displays sub-layer hierarchy\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function SubLayersTree(props: SubLayersTreeProps) {\n const [width, setWidth] = React.useState<number | undefined>(props.width);\n const [height, setHeight] = React.useState<number | undefined>(props.height);\n\n const [placeholderLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.SearchPlaceholder\"));\n const [noResults] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:SubLayers.NoResults\"));\n const [subLayers, setSubLayers] = React.useState(props.subLayers);\n const [layerFilterString, setLayerFilterString] = React.useState<string>(\"\");\n\n // create data provider to get some nodes to show in tree\n // `React.useMemo' is used avoid creating new object on each render cycle\n // We DO want a dependency on 'layerFilterString' (event though eslint doesn't like it)..\n // each time the filter is updated the provider must be refreshed otherwise the state of model is out of synch.\n const dataProvider = React.useMemo(\n () => new SubLayersDataProvider(subLayers, props.expandMode),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [subLayers, props.expandMode, layerFilterString],\n );\n\n const { modelSource, nodeLoader, nodeHighlightingProps } = useTreeFiltering(dataProvider, layerFilterString);\n\n // create custom event handler. It handles all tree event same as `TreeEventHandler` but additionally\n // it selects/deselects node when checkbox is checked/unchecked and vice versa.\n // `useDisposable` takes care of disposing old event handler when new is created in case 'nodeLoader' has changed\n // `React.useCallback` is used to avoid creating new callback that creates handler on each render\n const eventHandler = useDisposable(\n React.useCallback(\n () => new SubLayerCheckboxHandler(subLayers, props.singleVisibleSubLayer ?? false, nodeLoader, props.onSubLayerStateChange),\n [nodeLoader, subLayers, props.onSubLayerStateChange, props.singleVisibleSubLayer],\n ),\n );\n\n // Get an immutable tree model from the model source. The model is regenerated every time the model source\n // emits the `onModelChanged` event.\n const treeModel = useTreeModel(modelSource);\n const changeAll = React.useCallback(\n async (visible: boolean) => {\n const tmpSubLayers = [...subLayers]; // deep copy to trigger state change\n if (tmpSubLayers) {\n tmpSubLayers?.forEach((subLayer: MapSubLayerProps) => {\n subLayer.visible = visible;\n });\n\n setSubLayers(tmpSubLayers);\n }\n\n if (props.onSubLayerStateChange) {\n props.onSubLayerStateChange(-1, visible);\n }\n },\n [subLayers, props],\n );\n\n const handleFilterTextChanged = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setLayerFilterString(event.target.value);\n }, []);\n\n return (\n <>\n <div className=\"map-manager-sublayer-tree\">\n <Toolbar\n searchField={\n <Input\n type=\"text\"\n className=\"map-manager-sublayer-tree-searchbox\"\n placeholder={placeholderLabel}\n value={layerFilterString}\n onChange={handleFilterTextChanged}\n size=\"small\"\n />\n }\n >\n {props.singleVisibleSubLayer\n ? undefined\n : [\n <IconButton\n key=\"show-all-btn\"\n size=\"small\"\n title={props.checkboxStyle === \"eye\" ? MapLayersUI.translate(\"SubLayers.AllOn\") : MapLayersUI.translate(\"SelectFeaturesDialog.AllOn\")}\n onClick={async () => changeAll(true)}\n >\n {props.checkboxStyle === \"eye\" ? <SvgVisibilityShow /> : <SvgCheckboxSelect />}\n </IconButton>,\n <IconButton\n style={{ marginLeft: \"5px\" }}\n key=\"hide-all-btn\"\n size=\"small\"\n title={props.checkboxStyle === \"eye\" ? MapLayersUI.translate(\"SubLayers.AllOff\") : MapLayersUI.translate(\"SelectFeaturesDialog.AllOff\")}\n onClick={async () => changeAll(false)}\n >\n {props.checkboxStyle === \"eye\" ? <SvgVisibilityHide /> : <SvgCheckboxDeselect />}\n </IconButton>,\n ]}\n </Toolbar>\n <div className=\"map-manager-sublayer-tree-content\">\n {props.width === undefined && props.height === undefined && (\n <ResizableContainerObserver\n onResize={(w, h) => {\n setWidth(w);\n setHeight(h);\n }}\n />\n )}\n {width !== undefined && height !== undefined && (\n <ControlledTree\n nodeLoader={nodeLoader}\n selectionMode={SelectionMode.None}\n eventsHandler={eventHandler}\n model={treeModel}\n treeRenderer={props.checkboxStyle === \"eye\" ? nodeWithEyeCheckboxTreeRenderer : undefined}\n nodeHighlightingProps={nodeHighlightingProps}\n width={width}\n height={height}\n noDataRenderer={() => <p className=\"components-controlledTree-errorMessage\">{noResults}</p>}\n />\n )}\n </div>\n </div>\n </>\n );\n}\n\n/** TreeEventHandler derived class that handler processing changes to subLayer visibility */\nclass SubLayerCheckboxHandler extends TreeEventHandler {\n private _removeModelChangedListener: () => void;\n private _onSubLayerStateChange?: OnSubLayerStateChangeType;\n private _subLayers: MapSubLayerProps[];\n private _singleVisibleSubLayer?: boolean;\n\n constructor(\n subLayers: MapSubLayerProps[],\n singleVisibleSubLayer: boolean,\n nodeLoader: AbstractTreeNodeLoaderWithProvider<TreeDataProvider>,\n onSubLayerStateChange?: OnSubLayerStateChangeType,\n ) {\n super({ modelSource: nodeLoader.modelSource, nodeLoader, collapsedChildrenDisposalEnabled: true });\n this._subLayers = subLayers;\n this._singleVisibleSubLayer = singleVisibleSubLayer;\n this._onSubLayerStateChange = onSubLayerStateChange;\n this._removeModelChangedListener = this.modelSource.onModelChanged.addListener(this.onModelChanged);\n }\n\n public override dispose() {\n this._removeModelChangedListener();\n super.dispose();\n }\n\n // Cascade state\n // Children on unnamed groups must get disabled in the tree view, because\n // they get rendered anyway.\n private cascadeStateToAllChildren(model: MutableTreeModel, parentId?: string) {\n const children = model.getChildren(parentId);\n if (children === undefined) {\n return;\n }\n\n for (const childID of children) {\n const childNode = childID ? model.getNode(childID) : undefined;\n\n if (childNode) {\n this.syncNodeStateWithParent(model, childNode);\n }\n\n // Drill down the tree.\n this.cascadeStateToAllChildren(model, childID);\n }\n }\n\n private applyMutualExclusiveState(model: MutableTreeModel, nodeId: string) {\n const changedNode = model.getNode(nodeId);\n if (changedNode?.checkbox.state === CheckBoxState.Off) {\n return;\n }\n\n for (const node of model.iterateTreeModelNodes()) {\n if (node.id === changedNode?.id) {\n continue;\n }\n\n if (node && node.checkbox.state === CheckBoxState.On) {\n node.checkbox.state = CheckBoxState.Off;\n }\n }\n }\n\n //-----------------------------------------------------------------------\n // Listen to model changes\n //------------------------------------------------------------------------\n // This is required because nodes are delay loaded in the model until\n // they are made visible (i.e. parent node is expanded). So even though\n // you might have created nodes in the data provided with a proper\n // initial state, by the time it gets loaded, their state might have became\n // out of date in the TreeView's active model. So whenever a node\n // is added, when must confirm its state matches the current model\n // (i.e. state of their parent.)\n public onModelChanged = (args: [TreeModel, TreeModelChanges]) => {\n this.modelSource.modifyModel((model) => {\n const addedNodes = args[1].addedNodeIds.map((id) => model.getNode(id));\n addedNodes.forEach((node) => {\n if (!node) {\n return;\n }\n\n this.syncNodeStateWithParent(model, node);\n });\n });\n };\n\n private static isUnnamedGroup(subLayer: MapSubLayerProps | undefined): boolean {\n if (!subLayer) {\n return false;\n }\n\n return (!subLayer.name || subLayer.name.length === 0) && subLayer.children !== undefined && subLayer.children.length > 0;\n }\n\n // Ensure the state of changed node matches the state of its parent.\n private syncNodeStateWithParent(model: MutableTreeModel, changedNode: MutableTreeModelNode) {\n // Lookup node parent. If non exists, I assume thats the root node,\n // and it must have a proper initial state.\n const parentNode = changedNode.parentId ? model.getNode(changedNode.parentId) : undefined;\n if (!parentNode) {\n return;\n }\n\n if (!changedNode.checkbox) {\n return;\n } // don't see why this would happen, but if there is no checkbox, we cant do much here.\n\n const parentLayerId = undefined !== parentNode.item.extendedData?.subLayerId ? parentNode.item.extendedData?.subLayerId : parentNode.item.id;\n const parentSubLayer = this._subLayers?.find((subLayer) => subLayer.id === parentLayerId);\n\n // If parent is disabled, then children must be too.\n // Also, Non-visible unnamed group must have their children disabled (unamed groups have visibility inherence)\n if (parentNode.checkbox.isDisabled || (SubLayerCheckboxHandler.isUnnamedGroup(parentSubLayer) && parentNode.checkbox.state === CheckBoxState.Off)) {\n changedNode.checkbox.isDisabled = true;\n changedNode.checkbox.state = CheckBoxState.Off;\n } else {\n // Visibility state from StyleMapLayerSettings applies\n const subLayerId = undefined !== changedNode.item.extendedData?.subLayerId ? changedNode.item.extendedData?.subLayerId : changedNode.item.id;\n const foundSubLayer = this._subLayers?.find((subLayer) => subLayer.id === subLayerId);\n changedNode.checkbox.isDisabled = false;\n changedNode.checkbox.state = foundSubLayer?.visible ? CheckBoxState.On : CheckBoxState.Off;\n }\n }\n\n /** Changes nodes checkboxes states until event is handled or handler is disposed */\n public override onCheckboxStateChanged({ stateChanges }: TreeCheckboxStateChangeEventArgs) {\n // call base checkbox handling\n const baseHandling = super.onCheckboxStateChanged({ stateChanges });\n\n // subscribe to checkbox state changes to new checkbox states and do some additional work with them\n const selectionHandling = stateChanges.subscribe({\n next: (changes) => {\n changes.forEach((change) => {\n const isSelected = change.newState === CheckBoxState.On;\n const subLayerId = undefined !== change.nodeItem.extendedData?.subLayerId ? change.nodeItem.extendedData?.subLayerId : change.nodeItem.id;\n\n // Get the previously visible node if we are in 'singleVisibleSubLayer' node\n let prevVisibleSubLayers: SubLayerId[] = [];\n if (this._singleVisibleSubLayer) {\n prevVisibleSubLayers = this._subLayers.reduce((filtered: SubLayerId[], subLayer) => {\n if (subLayer.visible && subLayer.id !== undefined) {\n filtered.push(subLayer.id);\n }\n return filtered;\n }, []);\n }\n\n // Inform caller that subLayer state is going to change (i.e. update display style state)\n if (this._onSubLayerStateChange) {\n for (const slId of prevVisibleSubLayers) {\n this._onSubLayerStateChange(slId, false);\n }\n\n this._onSubLayerStateChange(subLayerId, isSelected);\n }\n\n // Update sublayer object, otherwise state would get out of sync with DisplayStyle each time the TreeView is re-rendered\n this._subLayers?.forEach((curSubLayer) => {\n if (curSubLayer.id !== undefined) {\n if (curSubLayer.id === subLayerId) {\n curSubLayer.visible = isSelected;\n } else if (prevVisibleSubLayers.includes(curSubLayer.id)) {\n curSubLayer.visible = false;\n }\n }\n });\n\n // Cascade state\n this.modelSource.modifyModel((model) => {\n if (this._singleVisibleSubLayer) {\n this.applyMutualExclusiveState(model, change.nodeItem.id);\n }\n this.cascadeStateToAllChildren(model, change.nodeItem.id);\n });\n });\n },\n });\n // stop handling selection when checkboxes handling is stopped\n baseHandling?.add(selectionHandling);\n return baseHandling;\n }\n}\n\n/** Custom checkbox renderer that renders checkbox as an eye */\nconst eyeCheckboxRenderer = (props: NodeCheckboxRenderProps) => (\n <ImageCheckBox\n checked={props.checked}\n disabled={props.disabled}\n imageOn=\"icon-visibility\"\n imageOff=\"icon-visibility-hide-2\"\n onClick={props.onChange}\n tooltip={props.title}\n />\n);\n\n/** Custom node renderer. It uses default 'TreeNodeRenderer' but overrides default checkbox renderer to render checkbox as an eye */\nconst imageLoader = new TreeImageLoader();\nconst nodeWithEyeCheckboxRenderer = (props: TreeNodeRendererProps) => (\n <TreeNodeRenderer {...props} checkboxRenderer={eyeCheckboxRenderer} imageLoader={imageLoader} />\n);\n\n/** Custom tree renderer. It uses default `TreeRenderer` but overrides default node renderer to render node with custom checkbox */\nconst nodeWithEyeCheckboxTreeRenderer = (props: TreeRendererProps) => <TreeRenderer {...props} nodeRenderer={nodeWithEyeCheckboxRenderer} />;\n\nfunction useTreeFiltering(dataProvider: ITreeDataProvider, filter: string) {\n const nodeLoader = useFilteredProvider(dataProvider, filter);\n const nodeHighlightingProps = useNodeHighlightingProps(filter);\n return {\n nodeLoader,\n modelSource: nodeLoader.modelSource,\n nodeHighlightingProps,\n };\n}\n\nfunction useFilteredProvider(dataProvider: ITreeDataProvider, filter: string) {\n const filteredProvider = React.useMemo(() => {\n return new FilteredTreeDataProvider(dataProvider, filter);\n }, [dataProvider, filter]);\n\n const nodeLoader = React.useMemo(() => {\n return new TreeNodeLoader(filteredProvider, new TreeModelSource());\n }, [filteredProvider]);\n\n return nodeLoader;\n}\n\nfunction useNodeHighlightingProps(filter: string) {\n const [nodeHighlightingProps, setNodeHighlightingProps] = React.useState<HighlightableTreeProps>();\n\n React.useEffect(() => {\n if (filter === \"\") {\n setNodeHighlightingProps(undefined);\n return;\n }\n setNodeHighlightingProps({\n searchText: filter,\n activeMatch: undefined,\n });\n }, [filter]);\n\n return nodeHighlightingProps;\n}\n\nclass FullTreeHierarchy {\n private _dataProvider: ITreeDataProvider;\n private _hierarchy = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\n private _init: Promise<void>;\n\n public constructor(dataProvider: ITreeDataProvider) {\n this._dataProvider = dataProvider;\n\n this._init = (async () => {\n await this.initNode();\n })();\n }\n\n private async initNode(parent?: TreeNodeItem) {\n const nodes = await this._dataProvider.getNodes(parent);\n this._hierarchy.set(parent?.id, nodes);\n for (const node of nodes) {\n await this.initNode(node);\n }\n }\n\n public async getHierarchy() {\n await this._init;\n return this._hierarchy;\n }\n}\n\nclass FilteredTreeHierarchy {\n private _fullHierarchy: FullTreeHierarchy;\n private _filter: string;\n private _filtered = new Map<string | undefined, DelayLoadedTreeNodeItem[]>();\n private _init: Promise<void>;\n\n public constructor(dataProvider: ITreeDataProvider, filter: string) {\n this._fullHierarchy = new FullTreeHierarchy(dataProvider);\n this._filter = filter;\n\n this._init = (async () => {\n await this.init();\n })();\n }\n\n private async init() {\n const hierarchy = await this._fullHierarchy.getHierarchy();\n if (this._filter === \"\") {\n this._filtered = hierarchy;\n return;\n }\n this.filterNodes(hierarchy);\n }\n\n /** Initializes `this._filtered` field. Returns a node if it matches a filter. */\n private filterNodes(hierarchy: Map<string | undefined, DelayLoadedTreeNodeItem[]>, current?: DelayLoadedTreeNodeItem): DelayLoadedTreeNodeItem | undefined {\n const matches = current ? this.matchesFilter(current) : false;\n const children = hierarchy.get(current?.id);\n if (!children) {\n return matches ? current : undefined;\n }\n\n const matchedChildren = new Array<DelayLoadedTreeNodeItem>();\n for (const child of children) {\n const matchedChild = this.filterNodes(hierarchy, child);\n matchedChild && matchedChildren.push(matchedChild);\n }\n\n const hasChildren = matchedChildren.length > 0;\n const included = matches || hasChildren;\n let filtered: DelayLoadedTreeNodeItem | undefined;\n if (included) {\n this._filtered.set(current?.id, matchedChildren);\n\n // Return a modified copy of current node (to persist initial hierarchy when filter is cleared).\n if (current) {\n filtered = {\n ...current,\n hasChildren,\n autoExpand: hasChildren ? true : current.autoExpand,\n };\n }\n }\n return filtered;\n }\n\n private matchesFilter(node: TreeNodeItem) {\n if (node.label.value.valueFormat !== PropertyValueFormat.Primitive) {\n return false;\n }\n\n const value = node.label.value.displayValue?.toLowerCase();\n if (!value) {\n return false;\n }\n return value.includes(this._filter.toLowerCase());\n }\n\n public async getHierarchy() {\n await this._init;\n return this._filtered;\n }\n}\n\nclass FilteredTreeDataProvider implements ITreeDataProvider {\n private _hierarchy: FilteredTreeHierarchy;\n\n public constructor(parentDataProvider: ITreeDataProvider, filter: string) {\n this._hierarchy = new FilteredTreeHierarchy(parentDataProvider, filter);\n }\n\n public async getNodes(parent?: TreeNodeItem) {\n const hierarchy = await this._hierarchy.getHierarchy();\n const nodes = hierarchy.get(parent?.id);\n return nodes || [];\n }\n\n public async getNodesCount(parent?: TreeNodeItem) {\n const hierarchy = await this._hierarchy.getHierarchy();\n const nodes = hierarchy.get(parent?.id);\n return nodes?.length || 0;\n }\n}\n"]}