@itwin/map-layers 4.0.0-dev.8 → 4.0.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 (199) hide show
  1. package/CHANGELOG.md +746 -848
  2. package/README.md +32 -32
  3. package/lib/cjs/MapLayerPreferences.d.ts +88 -88
  4. package/lib/cjs/MapLayerPreferences.js +312 -312
  5. package/lib/cjs/MapLayerPreferences.js.map +1 -1
  6. package/lib/cjs/map-layers.d.ts +6 -6
  7. package/lib/cjs/map-layers.js +22 -22
  8. package/lib/cjs/mapLayers.d.ts +26 -44
  9. package/lib/cjs/mapLayers.d.ts.map +1 -1
  10. package/lib/cjs/mapLayers.js +34 -63
  11. package/lib/cjs/mapLayers.js.map +1 -1
  12. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts +16 -11
  13. package/lib/cjs/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  14. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js +47 -52
  15. package/lib/cjs/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  16. package/lib/cjs/ui/Interfaces.d.ts +50 -50
  17. package/lib/cjs/ui/Interfaces.js +2 -2
  18. package/lib/cjs/ui/Interfaces.js.map +1 -1
  19. package/lib/cjs/ui/MapFeatureInfoTool.d.ts +13 -13
  20. package/lib/cjs/ui/MapFeatureInfoTool.d.ts.map +1 -1
  21. package/lib/cjs/ui/MapFeatureInfoTool.js +50 -50
  22. package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -1
  23. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +8 -8
  24. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  25. package/lib/cjs/ui/MapLayersUiItemsProvider.js +35 -38
  26. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  27. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  28. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  29. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +338 -338
  30. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  31. package/lib/cjs/ui/widget/BasemapPanel.d.ts +7 -8
  32. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  33. package/lib/cjs/ui/widget/BasemapPanel.js +156 -156
  34. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  35. package/lib/cjs/ui/widget/BasemapPanel.scss +87 -87
  36. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  37. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  38. package/lib/cjs/ui/widget/ConfirmMessageDialog.js +25 -25
  39. package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
  40. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +35 -40
  41. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  42. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +140 -139
  43. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  44. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +6 -7
  45. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  46. package/lib/cjs/ui/widget/FeatureInfoWidget.js +76 -71
  47. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  48. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +18 -19
  49. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  50. package/lib/cjs/ui/widget/MapLayerDroppable.js +88 -88
  51. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  52. package/lib/cjs/ui/widget/MapLayerManager.d.ts +26 -26
  53. package/lib/cjs/ui/widget/MapLayerManager.js +403 -403
  54. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  55. package/lib/cjs/ui/widget/MapLayerManager.scss +409 -409
  56. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  57. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  58. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +83 -83
  59. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  60. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  61. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  62. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +65 -65
  63. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  64. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  65. package/lib/cjs/ui/widget/MapLayersWidget.d.ts +10 -11
  66. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  67. package/lib/cjs/ui/widget/MapLayersWidget.js +31 -31
  68. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  69. package/lib/cjs/ui/widget/MapManagerSettings.d.ts +2 -3
  70. package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
  71. package/lib/cjs/ui/widget/MapManagerSettings.js +200 -200
  72. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  73. package/lib/cjs/ui/widget/MapManagerSettings.scss +29 -29
  74. package/lib/cjs/ui/widget/MapUrlDialog.d.ts +22 -23
  75. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  76. package/lib/cjs/ui/widget/MapUrlDialog.js +533 -527
  77. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  78. package/lib/cjs/ui/widget/MapUrlDialog.scss +99 -100
  79. package/lib/cjs/ui/widget/SelectMapFormat.d.ts +17 -18
  80. package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
  81. package/lib/cjs/ui/widget/SelectMapFormat.js +59 -59
  82. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  83. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts +18 -20
  84. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  85. package/lib/cjs/ui/widget/SubLayersDataProvider.js +75 -76
  86. package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
  87. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts +9 -10
  88. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  89. package/lib/cjs/ui/widget/SubLayersPopupButton.js +40 -40
  90. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  91. package/lib/cjs/ui/widget/SubLayersTree.d.ts +14 -15
  92. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  93. package/lib/cjs/ui/widget/SubLayersTree.js +419 -419
  94. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  95. package/lib/cjs/ui/widget/SubLayersTree.scss +70 -69
  96. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts +13 -14
  97. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  98. package/lib/cjs/ui/widget/TransparencyPopupButton.js +47 -47
  99. package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
  100. package/lib/cjs/ui/widget/TransparencyPopupButton.scss +35 -36
  101. package/lib/esm/MapLayerPreferences.d.ts +88 -88
  102. package/lib/esm/MapLayerPreferences.js +308 -308
  103. package/lib/esm/MapLayerPreferences.js.map +1 -1
  104. package/lib/esm/map-layers.d.ts +6 -6
  105. package/lib/esm/map-layers.js +10 -10
  106. package/lib/esm/mapLayers.d.ts +26 -44
  107. package/lib/esm/mapLayers.d.ts.map +1 -1
  108. package/lib/esm/mapLayers.js +30 -59
  109. package/lib/esm/mapLayers.js.map +1 -1
  110. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +16 -11
  111. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  112. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +43 -48
  113. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  114. package/lib/esm/ui/Interfaces.d.ts +50 -50
  115. package/lib/esm/ui/Interfaces.js +1 -1
  116. package/lib/esm/ui/Interfaces.js.map +1 -1
  117. package/lib/esm/ui/MapFeatureInfoTool.d.ts +13 -13
  118. package/lib/esm/ui/MapFeatureInfoTool.d.ts.map +1 -1
  119. package/lib/esm/ui/MapFeatureInfoTool.js +45 -45
  120. package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -1
  121. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +8 -8
  122. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  123. package/lib/esm/ui/MapLayersUiItemsProvider.js +31 -34
  124. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  125. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  126. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  127. package/lib/esm/ui/widget/AttachLayerPopupButton.js +334 -334
  128. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  129. package/lib/esm/ui/widget/BasemapPanel.d.ts +7 -8
  130. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  131. package/lib/esm/ui/widget/BasemapPanel.js +152 -152
  132. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  133. package/lib/esm/ui/widget/BasemapPanel.scss +87 -87
  134. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  135. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  136. package/lib/esm/ui/widget/ConfirmMessageDialog.js +21 -21
  137. package/lib/esm/ui/widget/ConfirmMessageDialog.js.map +1 -1
  138. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +35 -40
  139. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts.map +1 -1
  140. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +136 -135
  141. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  142. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +6 -7
  143. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  144. package/lib/esm/ui/widget/FeatureInfoWidget.js +72 -67
  145. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  146. package/lib/esm/ui/widget/MapLayerDroppable.d.ts +18 -19
  147. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  148. package/lib/esm/ui/widget/MapLayerDroppable.js +84 -84
  149. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  150. package/lib/esm/ui/widget/MapLayerManager.d.ts +26 -26
  151. package/lib/esm/ui/widget/MapLayerManager.js +398 -398
  152. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  153. package/lib/esm/ui/widget/MapLayerManager.scss +409 -409
  154. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  155. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  156. package/lib/esm/ui/widget/MapLayerSettingsMenu.js +79 -79
  157. package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  158. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  159. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  160. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +61 -61
  161. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  162. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  163. package/lib/esm/ui/widget/MapLayersWidget.d.ts +10 -11
  164. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  165. package/lib/esm/ui/widget/MapLayersWidget.js +27 -27
  166. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  167. package/lib/esm/ui/widget/MapManagerSettings.d.ts +2 -3
  168. package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
  169. package/lib/esm/ui/widget/MapManagerSettings.js +196 -196
  170. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  171. package/lib/esm/ui/widget/MapManagerSettings.scss +29 -29
  172. package/lib/esm/ui/widget/MapUrlDialog.d.ts +22 -23
  173. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  174. package/lib/esm/ui/widget/MapUrlDialog.js +529 -523
  175. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  176. package/lib/esm/ui/widget/MapUrlDialog.scss +99 -100
  177. package/lib/esm/ui/widget/SelectMapFormat.d.ts +17 -18
  178. package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
  179. package/lib/esm/ui/widget/SelectMapFormat.js +55 -55
  180. package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
  181. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts +18 -20
  182. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  183. package/lib/esm/ui/widget/SubLayersDataProvider.js +71 -72
  184. package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
  185. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts +9 -10
  186. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  187. package/lib/esm/ui/widget/SubLayersPopupButton.js +36 -36
  188. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  189. package/lib/esm/ui/widget/SubLayersTree.d.ts +14 -15
  190. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  191. package/lib/esm/ui/widget/SubLayersTree.js +414 -414
  192. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  193. package/lib/esm/ui/widget/SubLayersTree.scss +70 -69
  194. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts +13 -14
  195. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  196. package/lib/esm/ui/widget/TransparencyPopupButton.js +43 -43
  197. package/lib/esm/ui/widget/TransparencyPopupButton.js.map +1 -1
  198. package/lib/esm/ui/widget/TransparencyPopupButton.scss +35 -36
  199. package/package.json +39 -38
@@ -1 +1 @@
1
- {"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n// cSpell:ignore droppable Sublayer Basemap\r\n\r\n// the following quiet warning caused by react-beautiful-dnd package\r\n/* eslint-disable @typescript-eslint/unbound-method */\r\n\r\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\r\nimport { ImageMapLayerSettings, MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\r\nimport {\r\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, MapLayerSources, NotifyMessageDetails, OutputMessagePriority,\r\n ScreenViewport, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport * as React from \"react\";\r\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\r\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\r\nimport { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\r\nimport { AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\r\nimport { BasemapPanel } from \"./BasemapPanel\";\r\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\r\nimport \"./MapLayerManager.scss\";\r\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\r\nimport { MapLayersUI } from \"../../mapLayers\";\r\n\r\n/** @internal */\r\nexport interface SourceMapContextProps {\r\n readonly sources: MapLayerSource[];\r\n readonly loadingSources: boolean;\r\n readonly bases: MapLayerSource[];\r\n readonly refreshFromStyle: () => void;\r\n readonly activeViewport?: ScreenViewport;\r\n readonly backgroundLayers?: StyleMapLayerSettings[];\r\n readonly overlayLayers?: StyleMapLayerSettings[];\r\n readonly mapLayerOptions?: MapLayerOptions;\r\n}\r\n\r\n/** @internal */\r\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\r\n sources: [],\r\n loadingSources: false,\r\n bases: [],\r\n refreshFromStyle: () => { },\r\n});\r\n\r\n/** @internal */\r\nexport function useSourceMapContext(): SourceMapContextProps {\r\n return React.useContext(SourceMapContext);\r\n}\r\n\r\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\r\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\r\n}\r\n\r\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\r\n const displayStyle = viewport.displayStyle;\r\n if (!displayStyle)\r\n return undefined;\r\n\r\n const layers = new Array<StyleMapLayerSettings>();\r\n\r\n const displayStyleLayers = (getBackgroundMap ? displayStyle.backgroundMapLayers : displayStyle.overlayMapLayers);\r\n for (let layerIndex = 0; layerIndex < displayStyleLayers.length; layerIndex++) {\r\n const layerSettings = displayStyleLayers[layerIndex];\r\n const isOverlay = !getBackgroundMap;\r\n const layerProvider = viewport.getMapLayerImageryProvider(layerIndex, isOverlay);\r\n const treeVisibility = viewport.getMapLayerScaleRangeVisibility(layerIndex, isOverlay);\r\n const popSubLayers = populateSubLayers && (layerSettings instanceof ImageMapLayerSettings);\r\n layers.push({\r\n visible: layerSettings.visible,\r\n treeVisibility,\r\n name: layerSettings.name,\r\n source: layerSettings.source,\r\n transparency: layerSettings.transparency,\r\n transparentBackground: layerSettings.transparentBackground,\r\n subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\r\n showSubLayers: false,\r\n isOverlay,\r\n layerIndex,\r\n provider: layerProvider,\r\n });\r\n }\r\n\r\n // since we want to display higher level maps above lower maps in UI reverse their order here.\r\n return layers.reverse();\r\n}\r\n\r\ninterface MapLayerManagerProps {\r\n getContainerForClone: () => HTMLElement;\r\n activeViewport: ScreenViewport;\r\n mapLayerOptions?: MapLayerOptions;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapLayerManager(props: MapLayerManagerProps) {\r\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [loadingSources, setLoadingSources] = React.useState(false);\r\n const [baseSources, setBaseSources] = React.useState<MapLayerSource[] | undefined>();\r\n const [overlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\r\n const [underlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\r\n const { activeViewport, mapLayerOptions } = props;\r\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\r\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\r\n\r\n // map layer settings from display style\r\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\r\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\r\n\r\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\r\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\r\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\r\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\r\n\r\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\r\n if (activeViewport) {\r\n return activeViewport.viewFlags.backgroundMap;\r\n }\r\n return false;\r\n });\r\n\r\n React.useEffect(() => {\r\n const updateBackgroundMapVisible = () => setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\r\n return activeViewport.onDisplayStyleChanged.addListener(updateBackgroundMapVisible);\r\n }, [activeViewport]);\r\n\r\n // 'isMounted' is used to prevent any async operation once the hook has been\r\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\r\n const isMounted = React.useRef(false);\r\n React.useEffect(() => {\r\n isMounted.current = true;\r\n return () => {\r\n isMounted.current = false;\r\n };\r\n });\r\n\r\n // Setup onTileTreeLoad events listening.\r\n // This is needed because we need to know when the imagery provider\r\n // is created, and be able to monitor to status change.\r\n React.useEffect(() => {\r\n const handleTileTreeLoad = (args: TileTreeOwner) => {\r\n\r\n // Ignore non-map tile trees\r\n if (args.tileTree instanceof ImageryMapTileTree) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n\r\n IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\r\n\r\n return () => {\r\n IModelApp.tileAdmin.onTileTreeLoad.removeListener(handleTileTreeLoad);\r\n };\r\n\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n React.useEffect(() => {\r\n const handleScaleRangeVisibilityChanged = (layerIndexes: MapLayerScaleRangeVisibility[]) => {\r\n const updateLayers = (array: StyleMapLayerSettings[] | undefined) => {\r\n if (array === undefined)\r\n return undefined;\r\n\r\n return array.map((curStyledLayer) => {\r\n const foundScaleRangeVisibility = layerIndexes.find((layerIdx)=> layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay);\r\n if (undefined === foundScaleRangeVisibility)\r\n return curStyledLayer;\r\n else\r\n return {...curStyledLayer, treeVisibility:foundScaleRangeVisibility.visibility};\r\n });\r\n\r\n };\r\n setBackgroundMapLayers(updateLayers(backgroundMapLayers));\r\n setOverlayMapLayers(updateLayers(overlayMapLayers));\r\n\r\n };\r\n activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\r\n\r\n return () => {\r\n activeViewport.onMapLayerScaleRangeVisibilityChanged.removeListener(handleScaleRangeVisibilityChanged);\r\n };\r\n\r\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\r\n\r\n // Setup onMapImageryChanged events listening.\r\n\r\n React.useEffect(() => {\r\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\r\n\r\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\r\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n };\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\r\n\r\n return () => {\r\n activeViewport?.displayStyle.settings.onMapImageryChanged.removeListener(handleMapImageryChanged);\r\n };\r\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\r\n\r\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\r\n\r\n // Triggered whenever a provider status change\r\n React.useEffect(() => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\r\n\r\n return () => {\r\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\r\n };\r\n\r\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\r\n\r\n // Monitor viewport updates, and refresh the widget accordingly.\r\n // Note: This is needed for multiple viewport applications.\r\n React.useEffect(() => {\r\n // Update background map status\r\n setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\r\n\r\n // Refresh list of layers\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n React.useEffect(() => {\r\n async function fetchWmsMapData() {\r\n const sources: MapLayerSource[] = [];\r\n const bases: MapLayerSource[] = [];\r\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\r\n\r\n const iModel = IModelApp.viewManager.selectedView ? IModelApp.viewManager.selectedView.iModel : undefined;\r\n try {\r\n const preferenceSources = ( iModel?.iTwinId === undefined\r\n ? []\r\n : await MapLayerPreferences.getSources(iModel?.iTwinId, iModel?.iModelId)\r\n );\r\n for (const source of preferenceSources)\r\n await MapLayerSources.addSourceToMapLayerSources(source);\r\n } catch (err) {\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\r\n }\r\n\r\n if (!isMounted.current) {\r\n return;\r\n }\r\n\r\n // This is where the list of layers first gets populated... I need to update it\r\n // MapUrlDialog gets around knowing MapLayerManager exists and vice versa by affecting the viewports displayStyle which MapLayerManager is listening for\r\n // We know when displayStyle changes we've added a layer, this layer may not be a custom layer\r\n sourceLayers?.layers.forEach((source: MapLayerSource) => { sources.push(source); });\r\n setMapSources(sources);\r\n sourceLayers?.bases.forEach((source: MapLayerSource) => { bases.push(source); });\r\n setBaseSources(bases);\r\n }\r\n\r\n setLoadingSources(true);\r\n fetchWmsMapData().then(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n\r\n }).catch(() => {\r\n if (isMounted.current) {\r\n setLoadingSources(false);\r\n }\r\n });\r\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection]);\r\n\r\n const updateMapSources = React.useCallback(() => {\r\n const newSources: MapLayerSource[] = [];\r\n MapLayerSources.getInstance()?.layers?.forEach((sourceLayer: MapLayerSource) => { newSources.push(sourceLayer); });\r\n setMapSources(newSources);\r\n }, [setMapSources]);\r\n\r\n /**\r\n * Handle change events in the MapLayerPreferences\r\n */\r\n React.useEffect(() => {\r\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\r\n const removeSourceOnly = (changeType === MapLayerSourceChangeType.Removed);\r\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\r\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\r\n\r\n if (removeSource) {\r\n if (oldSource) {\r\n const succeeded = MapLayerSources.removeLayerByName(oldSource.name);\r\n assert(succeeded);\r\n if (!succeeded) {\r\n return;\r\n }\r\n\r\n if (removeSourceOnly) {\r\n updateMapSources();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (addSource) {\r\n const sources = await MapLayerSources.addSourceToMapLayerSources(newSource);\r\n assert(sources !== undefined);\r\n if (sources) {\r\n updateMapSources();\r\n }\r\n }\r\n };\r\n MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\r\n return (() => {\r\n MapLayerPreferences.onLayerSourceChanged.removeListener(handleLayerSourceChange);\r\n });\r\n }, [updateMapSources]);\r\n\r\n // update when a different display style is loaded.\r\n React.useEffect(() => {\r\n const handleDisplayStyleChange = (vp: Viewport) => {\r\n loadMapLayerSettingsFromViewport(vp);\r\n };\r\n activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\r\n return () => {\r\n activeViewport?.onDisplayStyleChanged.removeListener(handleDisplayStyleChange);\r\n };\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\r\n if (!activeViewport || !activeViewport.displayStyle)\r\n return;\r\n\r\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (indexInDisplayStyle < 0)\r\n return;\r\n\r\n switch (action) {\r\n case \"delete\":\r\n activeViewport.displayStyle.detachMapLayerByIndex(indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n break;\r\n case \"zoom-to-layer\":\r\n activeViewport.displayStyle.viewMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay, activeViewport).then((status) => {\r\n if (!status) {\r\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\r\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\r\n }\r\n }).catch((_error) => { });\r\n break;\r\n }\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\r\n if (activeViewport) {\r\n const isVisible = !mapLayerSettings.visible;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\r\n if (-1 !== indexInDisplayStyle) {\r\n // update the display style\r\n displayStyle.changeMapLayerProps({ visible: isVisible }, indexInDisplayStyle, mapLayerSettings.isOverlay);\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }\r\n }\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const handleMapLayersToggle = React.useCallback(() => {\r\n if (activeViewport) {\r\n const newState = !backgroundMapVisible;\r\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\r\n setBackgroundMapVisible(newState);\r\n }\r\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\r\n\r\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\r\n const { destination, source } = result;\r\n\r\n if (!destination) // dropped outside of list\r\n return;\r\n\r\n // item was not moved\r\n if (destination.droppableId === source.droppableId && destination.index === source.index)\r\n return;\r\n\r\n let fromMapLayer: StyleMapLayerSettings | undefined;\r\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n fromMapLayer = overlayMapLayers[source.index];\r\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n fromMapLayer = backgroundMapLayers[source.index];\r\n\r\n if (!fromMapLayer || !activeViewport)\r\n return;\r\n\r\n const displayStyle = activeViewport.displayStyle;\r\n let toMapLayer: StyleMapLayerSettings | undefined;\r\n let toIndexInDisplayStyle = -1;\r\n\r\n // If destination.index is undefined then the user dropped the map at the end of list of maps. To get the \"actual\" index in the style, look up index in style by name.\r\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\r\n if (undefined !== destination.index) {\r\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\r\n toMapLayer = overlayMapLayers[destination.index];\r\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\r\n toMapLayer = backgroundMapLayers[destination.index];\r\n if (toMapLayer)\r\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\r\n }\r\n\r\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\r\n if (fromIndexInDisplayStyle < 0)\r\n return;\r\n\r\n if (destination.droppableId !== source.droppableId) {\r\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\r\n const settings = activeViewport.displayStyle.mapLayerAtIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n if (settings) {\r\n activeViewport.displayStyle.detachMapLayerByIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\r\n\r\n // Manually reverse index when moved from one section to the other\r\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\r\n toIndexInDisplayStyle = displayStyle.backgroundMapLayers.length - destination.index;\r\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\r\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\r\n }\r\n\r\n activeViewport.displayStyle.attachMapLayer({settings, isOverlay:!fromMapLayer.isOverlay, insertIndex:toIndexInDisplayStyle});\r\n }\r\n } else {\r\n if (undefined === destination.index) {\r\n displayStyle.moveMapLayerToBottom(fromIndexInDisplayStyle, destination.droppableId === \"overlayMapLayers\");\r\n } else {\r\n if (toMapLayer) {\r\n if (toIndexInDisplayStyle !== -1)\r\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\r\n }\r\n }\r\n }\r\n\r\n // apply display style change to view\r\n activeViewport.invalidateRenderPlan();\r\n\r\n // force UI to update\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\r\n\r\n const handleRefreshFromStyle = React.useCallback(() => {\r\n if (activeViewport)\r\n loadMapLayerSettingsFromViewport(activeViewport);\r\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\r\n\r\n const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\r\n\r\n return (\r\n <SourceMapContext.Provider value={{\r\n activeViewport,\r\n loadingSources,\r\n sources: mapSources ? mapSources : [],\r\n bases: baseSources ? baseSources : [],\r\n refreshFromStyle: handleRefreshFromStyle,\r\n backgroundLayers: backgroundMapLayers,\r\n overlayLayers: overlayMapLayers,\r\n mapLayerOptions,\r\n }}>\r\n <div className=\"map-manager-top-header\">\r\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\r\n <div className=\"map-manager-header-buttons-group\">\r\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\r\n <MapLayerSettingsPopupButton disabled={!backgroundMapVisible}/>\r\n </div>\r\n </div>\r\n\r\n <div className=\"map-manager-container\">\r\n\r\n <div className=\"map-manager-basemap\">\r\n <BasemapPanel disabled={!backgroundMapVisible} />\r\n </div>\r\n {!hideExternalMapLayersSection &&\r\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-underlays\" >\r\n <span className=\"map-manager-underlays-label\">{underlaysLabel}</span><AttachLayerPopupButton disabled={!backgroundMapVisible} isOverlay={false} />\r\n </div>\r\n <MapLayerDroppable\r\n disabled={!backgroundMapVisible}\r\n isOverlay={false}\r\n layersList={backgroundMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n\r\n <div className=\"map-manager-layer-wrapper\">\r\n <div className=\"map-manager-overlays\" >\r\n <span className=\"map-manager-overlays-label\">{overlaysLabel}</span><AttachLayerPopupButton disabled={!backgroundMapVisible} isOverlay={true} />\r\n </div>\r\n <MapLayerDroppable\r\n disabled={!backgroundMapVisible}\r\n isOverlay={true}\r\n layersList={overlayMapLayers}\r\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\r\n getContainerForClone={props.getContainerForClone as any}\r\n activeViewport={props.activeViewport}\r\n onMenuItemSelected={handleOnMenuItemSelection}\r\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\r\n onItemEdited={handleRefreshFromStyle} />\r\n </div>\r\n </DragDropContext>\r\n }\r\n </div >\r\n </SourceMapContext.Provider >\r\n );\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"MapLayerManager.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapLayerManager.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F,2CAA2C;;;AAE3C,oEAAoE;AACpE,sDAAsD;AAEtD,sDAA2D;AAC3D,oDAAsH;AACtH,wDAG8B;AAC9B,wDAAoD;AACpD,+BAA+B;AAC/B,6DAAkE;AAClE,mEAA0F;AAE1F,qEAAkE;AAClE,iDAA8C;AAC9C,2DAAwD;AACxD,kCAAgC;AAChC,+EAA4E;AAC5E,+CAA8C;AAc9C,gBAAgB;AACH,QAAA,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAwB;IACzE,OAAO,EAAE,EAAE;IACX,cAAc,EAAE,KAAK;IACrB,KAAK,EAAE,EAAE;IACT,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC;CAC5B,CAAC,CAAC;AAEH,gBAAgB;AAChB,SAAgB,mBAAmB;IACjC,OAAO,KAAK,CAAC,UAAU,CAAC,wBAAgB,CAAC,CAAC;AAC5C,CAAC;AAFD,kDAEC;AAED,SAAS,gBAAgB,CAAC,gBAAuC;IAC/D,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,+BAA+B,CAAC,QAAkB,EAAE,gBAAyB,EAAE,iBAAiB,GAAG,IAAI;IAC9G,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;IAC3C,IAAI,CAAC,YAAY;QACf,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,KAAK,EAAyB,CAAC;IAElD,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACjH,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE;QAC7E,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAC;QACpC,MAAM,aAAa,GAAG,QAAQ,CAAC,0BAA0B,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACjF,MAAM,cAAc,GAAG,QAAQ,CAAC,+BAA+B,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACvF,MAAM,YAAY,GAAG,iBAAiB,IAAI,CAAC,aAAa,YAAY,mCAAqB,CAAC,CAAC;QAC3F,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,aAAa,CAAC,OAAO;YAC9B,cAAc;YACd,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,MAAM,EAAE,aAAa,CAAC,MAAM;YAC5B,YAAY,EAAE,aAAa,CAAC,YAAY;YACxC,qBAAqB,EAAE,aAAa,CAAC,qBAAqB;YAC1D,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/E,aAAa,EAAE,KAAK;YACpB,SAAS;YACT,UAAU;YACV,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;KACJ;IAED,8FAA8F;IAC9F,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;AAC1B,CAAC;AAQD,gEAAgE;AAChE,SAAgB,eAAe,CAAC,KAA2B;;IACzD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAgC,CAAC;IACnF,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAgC,CAAC;IACrF,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACtH,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC1H,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,4BAA4B,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,qBAAqB,EAAC,CAAC,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK,CAAC;IAC5H,MAAM,0BAA0B,GAAG,CAAA,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,0BAA0B,EAAC,CAAC,CAAC,eAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC;IAEpI,wCAAwC;IACxC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsC,+BAA+B,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IACjK,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsC,+BAA+B,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5J,MAAM,gCAAgC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAkB,EAAE,EAAE;QAChF,sBAAsB,CAAC,+BAA+B,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACxE,mBAAmB,CAAC,+BAA+B,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IACxE,CAAC,EAAE,CAAC,sBAAsB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAElD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC1E,IAAI,cAAc,EAAE;YAClB,OAAO,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;SAC/C;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,0BAA0B,GAAG,GAAG,EAAE,CAAC,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzG,OAAO,cAAc,CAAC,qBAAqB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;IACtF,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,4EAA4E;IAC5E,wHAAwH;IACxH,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,yCAAyC;IACzC,mEAAmE;IACnE,uDAAuD;IACvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,kBAAkB,GAAG,CAAC,IAAmB,EAAE,EAAE;YAEjD,4BAA4B;YAC5B,IAAI,IAAI,CAAC,QAAQ,YAAY,kCAAkB,EAAE;gBAC/C,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;QACH,CAAC,CAAC;QAEF,yBAAS,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEnE,OAAO,GAAG,EAAE;YACV,yBAAS,CAAC,SAAS,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACxE,CAAC,CAAC;IAEJ,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,iCAAiC,GAAG,CAAC,YAA4C,EAAE,EAAE;YACzF,MAAM,YAAY,GAAG,CAAC,KAA0C,EAAE,EAAE;gBAClE,IAAI,KAAK,KAAK,SAAS;oBACrB,OAAO,SAAS,CAAC;gBAEnB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;oBAClC,MAAM,yBAAyB,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,cAAc,CAAC,UAAU,IAAI,QAAQ,CAAC,SAAS,KAAK,cAAc,CAAC,SAAS,CAAC,CAAC;oBAClK,IAAI,SAAS,KAAK,yBAAyB;wBACzC,OAAO,cAAc,CAAC;;wBAEtB,OAAO,EAAC,GAAG,cAAc,EAAE,cAAc,EAAC,yBAAyB,CAAC,UAAU,EAAC,CAAC;gBACpF,CAAC,CAAC,CAAC;YAEL,CAAC,CAAC;YACF,sBAAsB,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1D,mBAAmB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAEtD,CAAC,CAAC;QACF,cAAc,CAAC,qCAAqC,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC;QAEpG,OAAO,GAAG,EAAE;YACV,cAAc,CAAC,qCAAqC,CAAC,cAAc,CAAC,iCAAiC,CAAC,CAAC;QACzG,CAAC,CAAC;IAEJ,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE9F,8CAA8C;IAE9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,CAAC,IAAkC,EAAE,EAAE;YAErE,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;mBACtF,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;QACH,CAAC,CAAC;QACF,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAE/F,OAAO,GAAG,EAAE;YACV,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QACpG,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,gCAAgC,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE9F,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAA8B,EAAE,EAAE;QACvF,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,gCAAgC,EAAE,cAAc,CAAC,CAAC,CAAC;IAEvD,8CAA8C;IAC9C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,WAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvH,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,WAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,eAAe,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpH,OAAO,GAAG,EAAE;YACV,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,WAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,eAAe,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,WAAG,MAAA,KAAK,CAAC,QAAQ,0CAAE,eAAe,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,CAAC,CAAC;IAEJ,CAAC,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,cAAc,EAAE,gCAAgC,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAE3H,gEAAgE;IAChE,2DAA2D;IAC3D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,+BAA+B;QAC/B,uBAAuB,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QAEhE,yBAAyB;QACzB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IAEnD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,KAAK,UAAU,eAAe;YAC5B,MAAM,OAAO,GAAqB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAqB,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,MAAM,+BAAe,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,0BAA0B,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;YAE5H,MAAM,MAAM,GAAG,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,yBAAS,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1G,IAAI;gBACF,MAAM,iBAAiB,GAAG,CAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,MAAK,SAAS;oBACvD,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,MAAM,yCAAmB,CAAC,UAAU,CAAC,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,CAAC,CAC1E,CAAC;gBACF,KAAK,MAAM,MAAM,IAAI,iBAAiB;oBACpC,MAAM,+BAAe,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;aAC5D;YAAC,OAAO,GAAG,EAAE;gBACZ,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,2CAA2C,CAAC,EAAE,2BAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACzN;YAED,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtB,OAAO;aACR;YAED,+EAA+E;YAC/E,wJAAwJ;YACxJ,8FAA8F;YAC9F,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,MAAsB,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpF,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAsB,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,eAAe,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAC1B;QAEH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,SAAS,CAAC,OAAO,EAAE;gBACrB,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,aAAa,EAAE,0BAA0B,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAE9E,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;;QAC9C,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAA,MAAA,+BAAe,CAAC,WAAW,EAAE,0CAAE,MAAM,0CAAE,OAAO,CAAC,CAAC,WAA2B,EAAE,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnH,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB;;MAEE;IACF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,uBAAuB,GAAG,KAAK,EAAE,UAAoC,EAAE,SAA0B,EAAE,SAA0B,EAAE,EAAE;YACrI,MAAM,gBAAgB,GAAG,CAAC,UAAU,KAAK,8CAAwB,CAAC,OAAO,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,CAAC,UAAU,KAAK,8CAAwB,CAAC,QAAQ,IAAI,UAAU,KAAK,8CAAwB,CAAC,OAAO,CAAC,CAAC;YAC3H,MAAM,SAAS,GAAG,CAAC,UAAU,KAAK,8CAAwB,CAAC,QAAQ,IAAI,UAAU,KAAK,8CAAwB,CAAC,KAAK,CAAC,CAAC;YAEtH,IAAI,YAAY,EAAE;gBAChB,IAAI,SAAS,EAAE;oBACb,MAAM,SAAS,GAAG,+BAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpE,IAAA,qBAAM,EAAC,SAAS,CAAC,CAAC;oBAClB,IAAI,CAAC,SAAS,EAAE;wBACd,OAAO;qBACR;oBAED,IAAI,gBAAgB,EAAE;wBACpB,gBAAgB,EAAE,CAAC;wBACnB,OAAO;qBACR;iBACF;aACF;YAED,IAAI,SAAS,EAAE;gBACb,MAAM,OAAO,GAAG,MAAM,+BAAe,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;gBAC5E,IAAA,qBAAM,EAAC,OAAO,KAAK,SAAS,CAAC,CAAC;gBAC9B,IAAI,OAAO,EAAE;oBACX,gBAAgB,EAAE,CAAC;iBACpB;aACF;QACH,CAAC,CAAC;QACF,yCAAmB,CAAC,oBAAoB,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,EAAE;YACX,yCAAmB,CAAC,oBAAoB,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,mDAAmD;IACnD,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,wBAAwB,GAAG,CAAC,EAAY,EAAE,EAAE;YAChD,gCAAgC,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,qBAAqB,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAC5E,OAAO,GAAG,EAAE;YACV,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAE,qBAAqB,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;QACjF,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,yBAAyB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAc,EAAE,gBAAuC,EAAE,EAAE;QAC9G,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,YAAY;YACjD,OAAO;QAET,MAAM,mBAAmB,GAAG,cAAc,CAAC,YAAY,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACrK,IAAI,mBAAmB,GAAG,CAAC;YACzB,OAAO;QAET,QAAQ,MAAM,EAAE;YACd,KAAK,QAAQ;gBACX,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACnG,MAAM;YACR,KAAK,eAAe;gBAClB,cAAc,CAAC,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC7H,IAAI,CAAC,MAAM,EAAE;wBACX,MAAM,GAAG,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC;wBAC7F,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;qBACnI;gBACH,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC1B,MAAM;SACT;QACD,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAEtC,qBAAqB;QACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,gBAAuC,EAAE,EAAE;QAChG,IAAI,cAAc,EAAE;YAClB,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAC,OAAO,CAAC;YAE5C,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;YACjD,MAAM,mBAAmB,GAAG,YAAY,CAAC,gCAAgC,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;YACtJ,IAAI,CAAC,CAAC,KAAK,mBAAmB,EAAE;gBAC9B,2BAA2B;gBAC3B,YAAY,CAAC,mBAAmB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1G,cAAc,CAAC,oBAAoB,EAAE,CAAC;gBAEtC,qBAAqB;gBACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;aAClD;SACF;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnD,IAAI,cAAc,EAAE;YAClB,MAAM,QAAQ,GAAG,CAAC,oBAAoB,CAAC;YACvC,cAAc,CAAC,SAAS,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACpF,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SACnC;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAC,CAAC;IAEpE,MAAM,uBAAuB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAkB,CAAC,oCAAoC,EAAE,EAAE;QAC5G,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEvC,IAAI,CAAC,WAAW,EAAE,0BAA0B;YAC1C,OAAO;QAET,qBAAqB;QACrB,IAAI,WAAW,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YACtF,OAAO;QAET,IAAI,YAA+C,CAAC;QACpD,IAAI,MAAM,CAAC,WAAW,KAAK,kBAAkB,IAAI,gBAAgB;YAC/D,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC3C,IAAI,MAAM,CAAC,WAAW,KAAK,qBAAqB,IAAI,mBAAmB;YAC1E,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;YAClC,OAAO;QAET,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;QACjD,IAAI,UAA6C,CAAC;QAClD,IAAI,qBAAqB,GAAG,CAAC,CAAC,CAAC;QAE/B,sKAAsK;QACtK,gHAAgH;QAChH,IAAI,SAAS,KAAK,WAAW,CAAC,KAAK,EAAE;YACnC,IAAI,WAAW,CAAC,WAAW,KAAK,kBAAkB,IAAI,gBAAgB;gBACpE,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;iBAC9C,IAAI,WAAW,CAAC,WAAW,KAAK,qBAAqB,IAAI,mBAAmB;gBAC/E,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,UAAU;gBACZ,qBAAqB,GAAG,YAAY,CAAC,gCAAgC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;SACnI;QAED,MAAM,uBAAuB,GAAG,YAAY,CAAC,gCAAgC,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9I,IAAI,uBAAuB,GAAG,CAAC;YAC7B,OAAO;QAET,IAAI,WAAW,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,EAAE;YAClD,iFAAiF;YACjF,MAAM,QAAQ,GAAG,cAAc,CAAC,YAAY,CAAC,eAAe,CAAC,uBAAuB,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YAC9G,IAAI,QAAQ,EAAE;gBACZ,cAAc,CAAC,YAAY,CAAC,qBAAqB,CAAC,uBAAuB,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;gBAEnG,kEAAkE;gBAClE,IAAI,YAAY,CAAC,SAAS,IAAI,mBAAmB,EAAE;oBACjD,qBAAqB,GAAG,YAAY,CAAC,mBAAmB,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;iBACrF;qBAAM,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,gBAAgB,EAAE;oBACtD,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;iBACrE;gBAED,cAAc,CAAC,YAAY,CAAC,cAAc,CAAC,EAAC,QAAQ,EAAE,SAAS,EAAC,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,EAAC,qBAAqB,EAAC,CAAC,CAAC;aAC9H;SACF;aAAM;YACL,IAAI,SAAS,KAAK,WAAW,CAAC,KAAK,EAAE;gBACnC,YAAY,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,WAAW,CAAC,WAAW,KAAK,kBAAkB,CAAC,CAAC;aAC5G;iBAAM;gBACL,IAAI,UAAU,EAAE;oBACd,IAAI,qBAAqB,KAAK,CAAC,CAAC;wBAC9B,YAAY,CAAC,mBAAmB,CAAC,uBAAuB,EAAE,qBAAqB,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;iBAC1G;aACF;SACF;QAED,qCAAqC;QACrC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAEtC,qBAAqB;QACrB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACnD,CAAC,EAAE,CAAC,gCAAgC,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9F,MAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACpD,IAAI,cAAc;YAChB,gCAAgC,CAAC,cAAc,CAAC,CAAC;IACrD,CAAC,EAAE,CAAC,cAAc,EAAE,gCAAgC,CAAC,CAAC,CAAC;IAEvD,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAE/H,OAAO,CACL,oBAAC,wBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE;YAChC,cAAc;YACd,cAAc;YACd,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YACrC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;YACrC,gBAAgB,EAAE,sBAAsB;YACxC,gBAAgB,EAAE,mBAAmB;YACrC,aAAa,EAAE,gBAAgB;YAC/B,eAAe;SAChB;QACC,6BAAK,SAAS,EAAC,wBAAwB;YACrC,8BAAM,SAAS,EAAC,0BAA0B,IAAE,iBAAiB,CAAQ;YACrE,6BAAK,SAAS,EAAC,kCAAkC;gBAC/C,oBAAC,4BAAY,IAAC,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,GAAI;gBAC/G,oBAAC,yDAA2B,IAAC,QAAQ,EAAE,CAAC,oBAAoB,GAAG,CAC3D,CACF;QAEN,6BAAK,SAAS,EAAC,uBAAuB;YAEpC,6BAAK,SAAS,EAAC,qBAAqB;gBAClC,oBAAC,2BAAY,IAAC,QAAQ,EAAE,CAAC,oBAAoB,GAAI,CAC7C;YACL,CAAC,4BAA4B;gBAC5B,oBAAC,qCAAe,IAAC,SAAS,EAAE,uBAAuB;oBACjD,6BAAK,SAAS,EAAC,2BAA2B;wBACxC,6BAAK,SAAS,EAAC,uBAAuB;4BACpC,8BAAM,SAAS,EAAC,6BAA6B,IAAE,cAAc,CAAQ;4BAAA,oBAAC,+CAAsB,IAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,KAAK,GAAI,CAC9I;wBACN,oBAAC,qCAAiB,IAChB,QAAQ,EAAE,CAAC,oBAAoB,EAC/B,SAAS,EAAE,KAAK,EAChB,UAAU,EAAE,mBAAmB,EAC/B,eAAe,EAAE,MAAA,KAAK,CAAC,eAAe,0CAAE,cAAc,EACtD,oBAAoB,EAAE,KAAK,CAAC,oBAA2B,EACvD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,kBAAkB,EAAE,yBAAyB,EAC7C,6BAA6B,EAAE,2BAA2B,EAC1D,YAAY,EAAE,sBAAsB,GAAI,CACtC;oBAEN,6BAAK,SAAS,EAAC,2BAA2B;wBACxC,6BAAK,SAAS,EAAC,sBAAsB;4BACnC,8BAAM,SAAS,EAAC,4BAA4B,IAAE,aAAa,CAAQ;4BAAA,oBAAC,+CAAsB,IAAC,QAAQ,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,IAAI,GAAI,CAC3I;wBACN,oBAAC,qCAAiB,IAChB,QAAQ,EAAE,CAAC,oBAAoB,EAC/B,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,gBAAgB,EAC5B,eAAe,EAAE,MAAA,KAAK,CAAC,eAAe,0CAAE,cAAc,EACtD,oBAAoB,EAAE,KAAK,CAAC,oBAA2B,EACvD,cAAc,EAAE,KAAK,CAAC,cAAc,EACpC,kBAAkB,EAAE,yBAAyB,EAC7C,6BAA6B,EAAE,2BAA2B,EAC1D,YAAY,EAAE,sBAAsB,GAAI,CACtC,CACU,CAEf,CACoB,CAC9B,CAAC;AACJ,CAAC;AAvaD,0CAuaC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\n// the following quiet warning caused by react-beautiful-dnd package\n/* eslint-disable @typescript-eslint/unbound-method */\n\nimport { assert, BentleyError } from \"@itwin/core-bentley\";\nimport { ImageMapLayerSettings, MapImagerySettings, MapSubLayerProps, MapSubLayerSettings } from \"@itwin/core-common\";\nimport {\n ImageryMapTileTree, IModelApp, MapLayerImageryProvider, MapLayerScaleRangeVisibility, MapLayerSource, MapLayerSources, NotifyMessageDetails, OutputMessagePriority,\n ScreenViewport, TileTreeOwner, Viewport,\n} from \"@itwin/core-frontend\";\nimport { ToggleSwitch } from \"@itwin/itwinui-react\";\nimport * as React from \"react\";\nimport { DragDropContext, DropResult } from \"react-beautiful-dnd\";\nimport { MapLayerPreferences, MapLayerSourceChangeType } from \"../../MapLayerPreferences\";\nimport { MapLayerOptions, StyleMapLayerSettings } from \"../Interfaces\";\nimport { AttachLayerPopupButton } from \"./AttachLayerPopupButton\";\nimport { BasemapPanel } from \"./BasemapPanel\";\nimport { MapLayerDroppable } from \"./MapLayerDroppable\";\nimport \"./MapLayerManager.scss\";\nimport { MapLayerSettingsPopupButton } from \"./MapLayerSettingsPopupButton\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\n/** @internal */\nexport interface SourceMapContextProps {\n readonly sources: MapLayerSource[];\n readonly loadingSources: boolean;\n readonly bases: MapLayerSource[];\n readonly refreshFromStyle: () => void;\n readonly activeViewport?: ScreenViewport;\n readonly backgroundLayers?: StyleMapLayerSettings[];\n readonly overlayLayers?: StyleMapLayerSettings[];\n readonly mapLayerOptions?: MapLayerOptions;\n}\n\n/** @internal */\nexport const SourceMapContext = React.createContext<SourceMapContextProps>({ // eslint-disable-line @typescript-eslint/naming-convention\n sources: [],\n loadingSources: false,\n bases: [],\n refreshFromStyle: () => { },\n});\n\n/** @internal */\nexport function useSourceMapContext(): SourceMapContextProps {\n return React.useContext(SourceMapContext);\n}\n\nfunction getSubLayerProps(subLayerSettings: MapSubLayerSettings[]): MapSubLayerProps[] {\n return subLayerSettings.map((subLayer) => subLayer.toJSON());\n}\n\nfunction getMapLayerSettingsFromViewport(viewport: Viewport, getBackgroundMap: boolean, populateSubLayers = true): StyleMapLayerSettings[] | undefined {\n const displayStyle = viewport.displayStyle;\n if (!displayStyle)\n return undefined;\n\n const layers = new Array<StyleMapLayerSettings>();\n\n const displayStyleLayers = (getBackgroundMap ? displayStyle.backgroundMapLayers : displayStyle.overlayMapLayers);\n for (let layerIndex = 0; layerIndex < displayStyleLayers.length; layerIndex++) {\n const layerSettings = displayStyleLayers[layerIndex];\n const isOverlay = !getBackgroundMap;\n const layerProvider = viewport.getMapLayerImageryProvider(layerIndex, isOverlay);\n const treeVisibility = viewport.getMapLayerScaleRangeVisibility(layerIndex, isOverlay);\n const popSubLayers = populateSubLayers && (layerSettings instanceof ImageMapLayerSettings);\n layers.push({\n visible: layerSettings.visible,\n treeVisibility,\n name: layerSettings.name,\n source: layerSettings.source,\n transparency: layerSettings.transparency,\n transparentBackground: layerSettings.transparentBackground,\n subLayers: popSubLayers ? getSubLayerProps(layerSettings.subLayers) : undefined,\n showSubLayers: false,\n isOverlay,\n layerIndex,\n provider: layerProvider,\n });\n }\n\n // since we want to display higher level maps above lower maps in UI reverse their order here.\n return layers.reverse();\n}\n\ninterface MapLayerManagerProps {\n getContainerForClone: () => HTMLElement;\n activeViewport: ScreenViewport;\n mapLayerOptions?: MapLayerOptions;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapLayerManager(props: MapLayerManagerProps) {\n const [mapSources, setMapSources] = React.useState<MapLayerSource[] | undefined>();\n const [loadingSources, setLoadingSources] = React.useState(false);\n const [baseSources, setBaseSources] = React.useState<MapLayerSource[] | undefined>();\n const [overlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.OverlayLayers\"));\n const [underlaysLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Widget.BackgroundLayers\"));\n const { activeViewport, mapLayerOptions } = props;\n const hideExternalMapLayersSection = mapLayerOptions?.hideExternalMapLayers ? mapLayerOptions.hideExternalMapLayers : false;\n const fetchPublicMapLayerSources = mapLayerOptions?.fetchPublicMapLayerSources ? mapLayerOptions.fetchPublicMapLayerSources : false;\n\n // map layer settings from display style\n const [backgroundMapLayers, setBackgroundMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, true));\n const [overlayMapLayers, setOverlayMapLayers] = React.useState<StyleMapLayerSettings[] | undefined>(getMapLayerSettingsFromViewport(activeViewport, false));\n\n const loadMapLayerSettingsFromViewport = React.useCallback((viewport: Viewport) => {\n setBackgroundMapLayers(getMapLayerSettingsFromViewport(viewport, true));\n setOverlayMapLayers(getMapLayerSettingsFromViewport(viewport, false));\n }, [setBackgroundMapLayers, setOverlayMapLayers]);\n\n const [backgroundMapVisible, setBackgroundMapVisible] = React.useState(() => {\n if (activeViewport) {\n return activeViewport.viewFlags.backgroundMap;\n }\n return false;\n });\n\n React.useEffect(() => {\n const updateBackgroundMapVisible = () => setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n return activeViewport.onDisplayStyleChanged.addListener(updateBackgroundMapVisible);\n }, [activeViewport]);\n\n // 'isMounted' is used to prevent any async operation once the hook has been\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\n const isMounted = React.useRef(false);\n React.useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n });\n\n // Setup onTileTreeLoad events listening.\n // This is needed because we need to know when the imagery provider\n // is created, and be able to monitor to status change.\n React.useEffect(() => {\n const handleTileTreeLoad = (args: TileTreeOwner) => {\n\n // Ignore non-map tile trees\n if (args.tileTree instanceof ImageryMapTileTree) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n\n IModelApp.tileAdmin.onTileTreeLoad.addListener(handleTileTreeLoad);\n\n return () => {\n IModelApp.tileAdmin.onTileTreeLoad.removeListener(handleTileTreeLoad);\n };\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n const handleScaleRangeVisibilityChanged = (layerIndexes: MapLayerScaleRangeVisibility[]) => {\n const updateLayers = (array: StyleMapLayerSettings[] | undefined) => {\n if (array === undefined)\n return undefined;\n\n return array.map((curStyledLayer) => {\n const foundScaleRangeVisibility = layerIndexes.find((layerIdx)=> layerIdx.index === curStyledLayer.layerIndex && layerIdx.isOverlay === curStyledLayer.isOverlay);\n if (undefined === foundScaleRangeVisibility)\n return curStyledLayer;\n else\n return {...curStyledLayer, treeVisibility:foundScaleRangeVisibility.visibility};\n });\n\n };\n setBackgroundMapLayers(updateLayers(backgroundMapLayers));\n setOverlayMapLayers(updateLayers(overlayMapLayers));\n\n };\n activeViewport.onMapLayerScaleRangeVisibilityChanged.addListener(handleScaleRangeVisibilityChanged);\n\n return () => {\n activeViewport.onMapLayerScaleRangeVisibilityChanged.removeListener(handleScaleRangeVisibilityChanged);\n };\n\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n // Setup onMapImageryChanged events listening.\n\n React.useEffect(() => {\n const handleMapImageryChanged = (args: Readonly<MapImagerySettings>) => {\n\n if (args.backgroundLayers.length !== (backgroundMapLayers ? backgroundMapLayers.length : 0)\n || args.overlayLayers.length !== (overlayMapLayers ? overlayMapLayers.length : 0)) {\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n };\n activeViewport?.displayStyle.settings.onMapImageryChanged.addListener(handleMapImageryChanged);\n\n return () => {\n activeViewport?.displayStyle.settings.onMapImageryChanged.removeListener(handleMapImageryChanged);\n };\n }, [activeViewport, backgroundMapLayers, loadMapLayerSettingsFromViewport, overlayMapLayers]);\n\n const handleProviderStatusChanged = React.useCallback((_args: MapLayerImageryProvider) => {\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport]);\n\n // Triggered whenever a provider status change\n React.useEffect(() => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.addListener(handleProviderStatusChanged); });\n\n return () => {\n backgroundMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n overlayMapLayers?.forEach((layer) => { layer.provider?.onStatusChanged.removeListener(handleProviderStatusChanged); });\n };\n\n }, [backgroundMapLayers, overlayMapLayers, activeViewport, loadMapLayerSettingsFromViewport, handleProviderStatusChanged]);\n\n // Monitor viewport updates, and refresh the widget accordingly.\n // Note: This is needed for multiple viewport applications.\n React.useEffect(() => {\n // Update background map status\n setBackgroundMapVisible(activeViewport.viewFlags.backgroundMap);\n\n // Refresh list of layers\n loadMapLayerSettingsFromViewport(activeViewport);\n\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n React.useEffect(() => {\n async function fetchWmsMapData() {\n const sources: MapLayerSource[] = [];\n const bases: MapLayerSource[] = [];\n const sourceLayers = await MapLayerSources.create(undefined, (fetchPublicMapLayerSources && !hideExternalMapLayersSection));\n\n const iModel = IModelApp.viewManager.selectedView ? IModelApp.viewManager.selectedView.iModel : undefined;\n try {\n const preferenceSources = ( iModel?.iTwinId === undefined\n ? []\n : await MapLayerPreferences.getSources(iModel?.iTwinId, iModel?.iModelId)\n );\n for (const source of preferenceSources)\n await MapLayerSources.addSourceToMapLayerSources(source);\n } catch (err) {\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, IModelApp.localization.getLocalizedString(\"mapLayers:CustomAttach.ErrorLoadingLayers\"), BentleyError.getErrorMessage(err)));\n }\n\n if (!isMounted.current) {\n return;\n }\n\n // This is where the list of layers first gets populated... I need to update it\n // MapUrlDialog gets around knowing MapLayerManager exists and vice versa by affecting the viewports displayStyle which MapLayerManager is listening for\n // We know when displayStyle changes we've added a layer, this layer may not be a custom layer\n sourceLayers?.layers.forEach((source: MapLayerSource) => { sources.push(source); });\n setMapSources(sources);\n sourceLayers?.bases.forEach((source: MapLayerSource) => { bases.push(source); });\n setBaseSources(bases);\n }\n\n setLoadingSources(true);\n fetchWmsMapData().then(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n\n }).catch(() => {\n if (isMounted.current) {\n setLoadingSources(false);\n }\n });\n }, [setMapSources, fetchPublicMapLayerSources, hideExternalMapLayersSection]);\n\n const updateMapSources = React.useCallback(() => {\n const newSources: MapLayerSource[] = [];\n MapLayerSources.getInstance()?.layers?.forEach((sourceLayer: MapLayerSource) => { newSources.push(sourceLayer); });\n setMapSources(newSources);\n }, [setMapSources]);\n\n /**\n * Handle change events in the MapLayerPreferences\n */\n React.useEffect(() => {\n const handleLayerSourceChange = async (changeType: MapLayerSourceChangeType, oldSource?: MapLayerSource, newSource?: MapLayerSource) => {\n const removeSourceOnly = (changeType === MapLayerSourceChangeType.Removed);\n const removeSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Removed);\n const addSource = (changeType === MapLayerSourceChangeType.Replaced || changeType === MapLayerSourceChangeType.Added);\n\n if (removeSource) {\n if (oldSource) {\n const succeeded = MapLayerSources.removeLayerByName(oldSource.name);\n assert(succeeded);\n if (!succeeded) {\n return;\n }\n\n if (removeSourceOnly) {\n updateMapSources();\n return;\n }\n }\n }\n\n if (addSource) {\n const sources = await MapLayerSources.addSourceToMapLayerSources(newSource);\n assert(sources !== undefined);\n if (sources) {\n updateMapSources();\n }\n }\n };\n MapLayerPreferences.onLayerSourceChanged.addListener(handleLayerSourceChange);\n return (() => {\n MapLayerPreferences.onLayerSourceChanged.removeListener(handleLayerSourceChange);\n });\n }, [updateMapSources]);\n\n // update when a different display style is loaded.\n React.useEffect(() => {\n const handleDisplayStyleChange = (vp: Viewport) => {\n loadMapLayerSettingsFromViewport(vp);\n };\n activeViewport?.onDisplayStyleChanged.addListener(handleDisplayStyleChange);\n return () => {\n activeViewport?.onDisplayStyleChanged.removeListener(handleDisplayStyleChange);\n };\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleOnMenuItemSelection = React.useCallback((action: string, mapLayerSettings: StyleMapLayerSettings) => {\n if (!activeViewport || !activeViewport.displayStyle)\n return;\n\n const indexInDisplayStyle = activeViewport.displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (indexInDisplayStyle < 0)\n return;\n\n switch (action) {\n case \"delete\":\n activeViewport.displayStyle.detachMapLayerByIndex(indexInDisplayStyle, mapLayerSettings.isOverlay);\n break;\n case \"zoom-to-layer\":\n activeViewport.displayStyle.viewMapLayerRange(indexInDisplayStyle, mapLayerSettings.isOverlay, activeViewport).then((status) => {\n if (!status) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.NoRangeDefined\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} [${mapLayerSettings.name}]`));\n }\n }).catch((_error) => { });\n break;\n }\n activeViewport.invalidateRenderPlan();\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleLayerVisibilityChange = React.useCallback((mapLayerSettings: StyleMapLayerSettings) => {\n if (activeViewport) {\n const isVisible = !mapLayerSettings.visible;\n\n const displayStyle = activeViewport.displayStyle;\n const indexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(mapLayerSettings.name, mapLayerSettings.source, mapLayerSettings.isOverlay);\n if (-1 !== indexInDisplayStyle) {\n // update the display style\n displayStyle.changeMapLayerProps({ visible: isVisible }, indexInDisplayStyle, mapLayerSettings.isOverlay);\n activeViewport.invalidateRenderPlan();\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }\n }\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const handleMapLayersToggle = React.useCallback(() => {\n if (activeViewport) {\n const newState = !backgroundMapVisible;\n activeViewport.viewFlags = activeViewport.viewFlags.with(\"backgroundMap\", newState);\n setBackgroundMapVisible(newState);\n }\n }, [backgroundMapVisible, setBackgroundMapVisible, activeViewport]);\n\n const handleOnMapLayerDragEnd = React.useCallback((result: DropResult /* , _provided: ResponderProvided*/) => {\n const { destination, source } = result;\n\n if (!destination) // dropped outside of list\n return;\n\n // item was not moved\n if (destination.droppableId === source.droppableId && destination.index === source.index)\n return;\n\n let fromMapLayer: StyleMapLayerSettings | undefined;\n if (source.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n fromMapLayer = overlayMapLayers[source.index];\n else if (source.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n fromMapLayer = backgroundMapLayers[source.index];\n\n if (!fromMapLayer || !activeViewport)\n return;\n\n const displayStyle = activeViewport.displayStyle;\n let toMapLayer: StyleMapLayerSettings | undefined;\n let toIndexInDisplayStyle = -1;\n\n // If destination.index is undefined then the user dropped the map at the end of list of maps. To get the \"actual\" index in the style, look up index in style by name.\n // We need to do this because the order of layers in UI are reversed so higher layers appear above lower layers.\n if (undefined !== destination.index) {\n if (destination.droppableId === \"overlayMapLayers\" && overlayMapLayers)\n toMapLayer = overlayMapLayers[destination.index];\n else if (destination.droppableId === \"backgroundMapLayers\" && backgroundMapLayers)\n toMapLayer = backgroundMapLayers[destination.index];\n if (toMapLayer)\n toIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(toMapLayer.name, toMapLayer.source, toMapLayer.isOverlay);\n }\n\n const fromIndexInDisplayStyle = displayStyle.findMapLayerIndexByNameAndSource(fromMapLayer.name, fromMapLayer.source, fromMapLayer.isOverlay);\n if (fromIndexInDisplayStyle < 0)\n return;\n\n if (destination.droppableId !== source.droppableId) {\n // see if we moved from \"overlayMapLayers\" to \"backgroundMapLayers\" or vice-versa\n const settings = activeViewport.displayStyle.mapLayerAtIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\n if (settings) {\n activeViewport.displayStyle.detachMapLayerByIndex(fromIndexInDisplayStyle, fromMapLayer.isOverlay);\n\n // Manually reverse index when moved from one section to the other\n if (fromMapLayer.isOverlay && backgroundMapLayers) {\n toIndexInDisplayStyle = displayStyle.backgroundMapLayers.length - destination.index;\n } else if (!fromMapLayer.isOverlay && overlayMapLayers) {\n toIndexInDisplayStyle = overlayMapLayers.length - destination.index;\n }\n\n activeViewport.displayStyle.attachMapLayer({settings, isOverlay:!fromMapLayer.isOverlay, insertIndex:toIndexInDisplayStyle});\n }\n } else {\n if (undefined === destination.index) {\n displayStyle.moveMapLayerToBottom(fromIndexInDisplayStyle, destination.droppableId === \"overlayMapLayers\");\n } else {\n if (toMapLayer) {\n if (toIndexInDisplayStyle !== -1)\n displayStyle.moveMapLayerToIndex(fromIndexInDisplayStyle, toIndexInDisplayStyle, toMapLayer.isOverlay);\n }\n }\n }\n\n // apply display style change to view\n activeViewport.invalidateRenderPlan();\n\n // force UI to update\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [loadMapLayerSettingsFromViewport, activeViewport, overlayMapLayers, backgroundMapLayers]);\n\n const handleRefreshFromStyle = React.useCallback(() => {\n if (activeViewport)\n loadMapLayerSettingsFromViewport(activeViewport);\n }, [activeViewport, loadMapLayerSettingsFromViewport]);\n\n const [baseMapPanelLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Basemap.BaseMapPanelTitle\"));\n\n return (\n <SourceMapContext.Provider value={{\n activeViewport,\n loadingSources,\n sources: mapSources ? mapSources : [],\n bases: baseSources ? baseSources : [],\n refreshFromStyle: handleRefreshFromStyle,\n backgroundLayers: backgroundMapLayers,\n overlayLayers: overlayMapLayers,\n mapLayerOptions,\n }}>\n <div className=\"map-manager-top-header\">\n <span className=\"map-manager-header-label\">{baseMapPanelLabel}</span>\n <div className=\"map-manager-header-buttons-group\">\n <ToggleSwitch className=\"map-manager-toggle\" checked={backgroundMapVisible} onChange={handleMapLayersToggle} />\n <MapLayerSettingsPopupButton disabled={!backgroundMapVisible}/>\n </div>\n </div>\n\n <div className=\"map-manager-container\">\n\n <div className=\"map-manager-basemap\">\n <BasemapPanel disabled={!backgroundMapVisible} />\n </div>\n {!hideExternalMapLayersSection &&\n <DragDropContext onDragEnd={handleOnMapLayerDragEnd}>\n <div className=\"map-manager-layer-wrapper\">\n <div className=\"map-manager-underlays\" >\n <span className=\"map-manager-underlays-label\">{underlaysLabel}</span><AttachLayerPopupButton disabled={!backgroundMapVisible} isOverlay={false} />\n </div>\n <MapLayerDroppable\n disabled={!backgroundMapVisible}\n isOverlay={false}\n layersList={backgroundMapLayers}\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\n getContainerForClone={props.getContainerForClone as any}\n activeViewport={props.activeViewport}\n onMenuItemSelected={handleOnMenuItemSelection}\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\n onItemEdited={handleRefreshFromStyle} />\n </div>\n\n <div className=\"map-manager-layer-wrapper\">\n <div className=\"map-manager-overlays\" >\n <span className=\"map-manager-overlays-label\">{overlaysLabel}</span><AttachLayerPopupButton disabled={!backgroundMapVisible} isOverlay={true} />\n </div>\n <MapLayerDroppable\n disabled={!backgroundMapVisible}\n isOverlay={true}\n layersList={overlayMapLayers}\n mapTypesOptions={props.mapLayerOptions?.mapTypeOptions}\n getContainerForClone={props.getContainerForClone as any}\n activeViewport={props.activeViewport}\n onMenuItemSelected={handleOnMenuItemSelection}\n onItemVisibilityToggleClicked={handleLayerVisibilityChange}\n onItemEdited={handleRefreshFromStyle} />\n </div>\n </DragDropContext>\n }\n </div >\n </SourceMapContext.Provider >\n );\n}\n\n"]}