@itwin/map-layers 4.0.0-dev.41 → 4.0.0-dev.47

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 (193) hide show
  1. package/CHANGELOG.md +864 -864
  2. package/README.md +32 -32
  3. package/lib/cjs/MapLayerPreferences.d.ts +88 -88
  4. package/lib/cjs/MapLayerPreferences.js +311 -311
  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 +33 -61
  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 +46 -51
  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.js +50 -50
  21. package/lib/cjs/ui/MapFeatureInfoTool.js.map +1 -1
  22. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts +8 -8
  23. package/lib/cjs/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  24. package/lib/cjs/ui/MapLayersUiItemsProvider.js +35 -38
  25. package/lib/cjs/ui/MapLayersUiItemsProvider.js.map +1 -1
  26. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  27. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  28. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +335 -335
  29. package/lib/cjs/ui/widget/BasemapPanel.d.ts +7 -8
  30. package/lib/cjs/ui/widget/BasemapPanel.d.ts.map +1 -1
  31. package/lib/cjs/ui/widget/BasemapPanel.js +156 -156
  32. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  33. package/lib/cjs/ui/widget/BasemapPanel.scss +87 -87
  34. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  35. package/lib/cjs/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  36. package/lib/cjs/ui/widget/ConfirmMessageDialog.js +22 -22
  37. package/lib/cjs/ui/widget/ConfirmMessageDialog.js.map +1 -1
  38. package/lib/cjs/ui/widget/FeatureInfoDataProvider.d.ts +40 -40
  39. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js +138 -138
  40. package/lib/cjs/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  41. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +6 -7
  42. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  43. package/lib/cjs/ui/widget/FeatureInfoWidget.js +65 -65
  44. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  45. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +18 -19
  46. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  47. package/lib/cjs/ui/widget/MapLayerDroppable.js +85 -85
  48. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  49. package/lib/cjs/ui/widget/MapLayerManager.d.ts +26 -26
  50. package/lib/cjs/ui/widget/MapLayerManager.js +401 -401
  51. package/lib/cjs/ui/widget/MapLayerManager.js.map +1 -1
  52. package/lib/cjs/ui/widget/MapLayerManager.scss +409 -409
  53. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  54. package/lib/cjs/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  55. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js +82 -82
  56. package/lib/cjs/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  57. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  58. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  59. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js +65 -65
  60. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  61. package/lib/cjs/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  62. package/lib/cjs/ui/widget/MapLayersWidget.d.ts +10 -11
  63. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  64. package/lib/cjs/ui/widget/MapLayersWidget.js +31 -31
  65. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  66. package/lib/cjs/ui/widget/MapManagerSettings.d.ts +2 -3
  67. package/lib/cjs/ui/widget/MapManagerSettings.d.ts.map +1 -1
  68. package/lib/cjs/ui/widget/MapManagerSettings.js +200 -200
  69. package/lib/cjs/ui/widget/MapManagerSettings.js.map +1 -1
  70. package/lib/cjs/ui/widget/MapManagerSettings.scss +29 -29
  71. package/lib/cjs/ui/widget/MapUrlDialog.d.ts +22 -23
  72. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  73. package/lib/cjs/ui/widget/MapUrlDialog.js +530 -530
  74. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  75. package/lib/cjs/ui/widget/MapUrlDialog.scss +99 -100
  76. package/lib/cjs/ui/widget/SelectMapFormat.d.ts +17 -18
  77. package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
  78. package/lib/cjs/ui/widget/SelectMapFormat.js +54 -54
  79. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  80. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts +18 -20
  81. package/lib/cjs/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  82. package/lib/cjs/ui/widget/SubLayersDataProvider.js +74 -75
  83. package/lib/cjs/ui/widget/SubLayersDataProvider.js.map +1 -1
  84. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts +9 -10
  85. package/lib/cjs/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  86. package/lib/cjs/ui/widget/SubLayersPopupButton.js +40 -40
  87. package/lib/cjs/ui/widget/SubLayersPopupButton.js.map +1 -1
  88. package/lib/cjs/ui/widget/SubLayersTree.d.ts +14 -15
  89. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  90. package/lib/cjs/ui/widget/SubLayersTree.js +413 -413
  91. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  92. package/lib/cjs/ui/widget/SubLayersTree.scss +69 -69
  93. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts +13 -14
  94. package/lib/cjs/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  95. package/lib/cjs/ui/widget/TransparencyPopupButton.js +47 -47
  96. package/lib/cjs/ui/widget/TransparencyPopupButton.js.map +1 -1
  97. package/lib/cjs/ui/widget/TransparencyPopupButton.scss +35 -36
  98. package/lib/esm/MapLayerPreferences.d.ts +88 -88
  99. package/lib/esm/MapLayerPreferences.js +307 -307
  100. package/lib/esm/MapLayerPreferences.js.map +1 -1
  101. package/lib/esm/map-layers.d.ts +6 -6
  102. package/lib/esm/map-layers.js +10 -10
  103. package/lib/esm/mapLayers.d.ts +26 -44
  104. package/lib/esm/mapLayers.d.ts.map +1 -1
  105. package/lib/esm/mapLayers.js +29 -57
  106. package/lib/esm/mapLayers.js.map +1 -1
  107. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts +16 -11
  108. package/lib/esm/ui/FeatureInfoUiItemsProvider.d.ts.map +1 -1
  109. package/lib/esm/ui/FeatureInfoUiItemsProvider.js +42 -47
  110. package/lib/esm/ui/FeatureInfoUiItemsProvider.js.map +1 -1
  111. package/lib/esm/ui/Interfaces.d.ts +50 -50
  112. package/lib/esm/ui/Interfaces.js +1 -1
  113. package/lib/esm/ui/Interfaces.js.map +1 -1
  114. package/lib/esm/ui/MapFeatureInfoTool.d.ts +13 -13
  115. package/lib/esm/ui/MapFeatureInfoTool.js +45 -45
  116. package/lib/esm/ui/MapFeatureInfoTool.js.map +1 -1
  117. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts +8 -8
  118. package/lib/esm/ui/MapLayersUiItemsProvider.d.ts.map +1 -1
  119. package/lib/esm/ui/MapLayersUiItemsProvider.js +31 -34
  120. package/lib/esm/ui/MapLayersUiItemsProvider.js.map +1 -1
  121. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts +13 -14
  122. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  123. package/lib/esm/ui/widget/AttachLayerPopupButton.js +331 -331
  124. package/lib/esm/ui/widget/BasemapPanel.d.ts +7 -8
  125. package/lib/esm/ui/widget/BasemapPanel.d.ts.map +1 -1
  126. package/lib/esm/ui/widget/BasemapPanel.js +152 -152
  127. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  128. package/lib/esm/ui/widget/BasemapPanel.scss +87 -87
  129. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts +20 -21
  130. package/lib/esm/ui/widget/ConfirmMessageDialog.d.ts.map +1 -1
  131. package/lib/esm/ui/widget/ConfirmMessageDialog.js +18 -18
  132. package/lib/esm/ui/widget/ConfirmMessageDialog.js.map +1 -1
  133. package/lib/esm/ui/widget/FeatureInfoDataProvider.d.ts +40 -40
  134. package/lib/esm/ui/widget/FeatureInfoDataProvider.js +134 -134
  135. package/lib/esm/ui/widget/FeatureInfoDataProvider.js.map +1 -1
  136. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +6 -7
  137. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  138. package/lib/esm/ui/widget/FeatureInfoWidget.js +61 -61
  139. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  140. package/lib/esm/ui/widget/MapLayerDroppable.d.ts +18 -19
  141. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  142. package/lib/esm/ui/widget/MapLayerDroppable.js +81 -81
  143. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  144. package/lib/esm/ui/widget/MapLayerManager.d.ts +26 -26
  145. package/lib/esm/ui/widget/MapLayerManager.js +396 -396
  146. package/lib/esm/ui/widget/MapLayerManager.js.map +1 -1
  147. package/lib/esm/ui/widget/MapLayerManager.scss +409 -409
  148. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts +11 -12
  149. package/lib/esm/ui/widget/MapLayerSettingsMenu.d.ts.map +1 -1
  150. package/lib/esm/ui/widget/MapLayerSettingsMenu.js +78 -78
  151. package/lib/esm/ui/widget/MapLayerSettingsMenu.js.map +1 -1
  152. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts +6 -7
  153. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.d.ts.map +1 -1
  154. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js +61 -61
  155. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.js.map +1 -1
  156. package/lib/esm/ui/widget/MapLayerSettingsPopupButton.scss +20 -20
  157. package/lib/esm/ui/widget/MapLayersWidget.d.ts +10 -11
  158. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  159. package/lib/esm/ui/widget/MapLayersWidget.js +27 -27
  160. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  161. package/lib/esm/ui/widget/MapManagerSettings.d.ts +2 -3
  162. package/lib/esm/ui/widget/MapManagerSettings.d.ts.map +1 -1
  163. package/lib/esm/ui/widget/MapManagerSettings.js +196 -196
  164. package/lib/esm/ui/widget/MapManagerSettings.js.map +1 -1
  165. package/lib/esm/ui/widget/MapManagerSettings.scss +29 -29
  166. package/lib/esm/ui/widget/MapUrlDialog.d.ts +22 -23
  167. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  168. package/lib/esm/ui/widget/MapUrlDialog.js +526 -526
  169. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  170. package/lib/esm/ui/widget/MapUrlDialog.scss +99 -100
  171. package/lib/esm/ui/widget/SelectMapFormat.d.ts +17 -18
  172. package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
  173. package/lib/esm/ui/widget/SelectMapFormat.js +50 -50
  174. package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
  175. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts +18 -20
  176. package/lib/esm/ui/widget/SubLayersDataProvider.d.ts.map +1 -1
  177. package/lib/esm/ui/widget/SubLayersDataProvider.js +70 -71
  178. package/lib/esm/ui/widget/SubLayersDataProvider.js.map +1 -1
  179. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts +9 -10
  180. package/lib/esm/ui/widget/SubLayersPopupButton.d.ts.map +1 -1
  181. package/lib/esm/ui/widget/SubLayersPopupButton.js +36 -36
  182. package/lib/esm/ui/widget/SubLayersPopupButton.js.map +1 -1
  183. package/lib/esm/ui/widget/SubLayersTree.d.ts +14 -15
  184. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  185. package/lib/esm/ui/widget/SubLayersTree.js +408 -408
  186. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  187. package/lib/esm/ui/widget/SubLayersTree.scss +69 -69
  188. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts +13 -14
  189. package/lib/esm/ui/widget/TransparencyPopupButton.d.ts.map +1 -1
  190. package/lib/esm/ui/widget/TransparencyPopupButton.js +43 -43
  191. package/lib/esm/ui/widget/TransparencyPopupButton.js.map +1 -1
  192. package/lib/esm/ui/widget/TransparencyPopupButton.scss +35 -36
  193. package/package.json +31 -37
@@ -1,201 +1,201 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
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
- *--------------------------------------------------------------------------------------------*/
6
- // cSpell:ignore droppable Sublayer Basemap
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.MapManagerSettings = void 0;
9
- const React = require("react");
10
- const core_react_1 = require("@itwin/core-react");
11
- const core_frontend_1 = require("@itwin/core-frontend");
12
- const core_common_1 = require("@itwin/core-common");
13
- const MapLayerManager_1 = require("./MapLayerManager");
14
- require("./MapManagerSettings.scss");
15
- const itwinui_react_1 = require("@itwin/itwinui-react");
16
- const imodel_components_react_1 = require("@itwin/imodel-components-react");
17
- const mapLayers_1 = require("../../mapLayers");
18
- /* eslint-disable deprecation/deprecation */
19
- var MapMaskingOption;
20
- (function (MapMaskingOption) {
21
- MapMaskingOption[MapMaskingOption["None"] = 0] = "None";
22
- MapMaskingOption[MapMaskingOption["AllModels"] = 1] = "AllModels";
23
- })(MapMaskingOption || (MapMaskingOption = {}));
24
- function getMapMaskingFromBackgroundMapSetting(backgroundMapSettings) {
25
- if (backgroundMapSettings.planarClipMask.mode === core_common_1.PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {
26
- if (backgroundMapSettings.planarClipMask.priority >= core_common_1.PlanarClipMaskPriority.BackgroundMap) {
27
- return MapMaskingOption.AllModels;
28
- }
29
- }
30
- return MapMaskingOption.None;
31
- }
32
- function getHeightOriginModeKey(mode) {
33
- if (core_common_1.TerrainHeightOriginMode.Geodetic === mode)
34
- return "geodetic";
35
- if (core_common_1.TerrainHeightOriginMode.Geoid === mode)
36
- return "geoid";
37
- return "ground";
38
- }
39
- function getHeightOriginModeFromKey(mode) {
40
- if ("geodetic" === mode)
41
- return core_common_1.TerrainHeightOriginMode.Geodetic;
42
- if ("geoid" === mode)
43
- return core_common_1.TerrainHeightOriginMode.Geoid;
44
- return core_common_1.TerrainHeightOriginMode.Ground;
45
- }
46
- // eslint-disable-next-line @typescript-eslint/naming-convention
47
- function MapManagerSettings() {
48
- const { activeViewport } = (0, MapLayerManager_1.useSourceMapContext)();
49
- const backgroundMapSettings = activeViewport.view.getDisplayStyle3d().settings.backgroundMap;
50
- const [transparency, setTransparency] = React.useState(() => typeof backgroundMapSettings.transparency === "boolean"
51
- ? 0
52
- : Math.round((backgroundMapSettings.transparency) * 100) / 100);
53
- const terrainSettings = backgroundMapSettings.terrainSettings;
54
- const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);
55
- const terrainHeightOptions = React.useRef([
56
- { value: "geodetic", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGeodetic") },
57
- { value: "geoid", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGeoid") },
58
- { value: "ground", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGround") },
59
- ]);
60
- const updateTerrainSettings = React.useCallback((props) => {
61
- activeViewport.changeBackgroundMapProps({ terrainSettings: props });
62
- activeViewport.invalidateRenderPlan();
63
- }, [activeViewport]);
64
- const updateBackgroundMap = React.useCallback((props) => {
65
- activeViewport.changeBackgroundMapProps(props);
66
- activeViewport.invalidateRenderPlan();
67
- }, [activeViewport]);
68
- const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));
69
- const handleElevationTypeSelected = React.useCallback((newValue) => {
70
- if (newValue) {
71
- const newHeightOriginMode = getHeightOriginModeFromKey(newValue);
72
- updateTerrainSettings({ heightOriginMode: newHeightOriginMode });
73
- setHeightOriginMode(newValue);
74
- }
75
- }, [updateTerrainSettings]);
76
- const [maskTransparency, setMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency === undefined
77
- ? undefined
78
- : Math.round((backgroundMapSettings.planarClipMask.transparency) * 100) / 100);
79
- const getNormalizedMaskTransparency = React.useCallback(() => { return (maskTransparency === undefined ? 0 : maskTransparency); }, [maskTransparency]);
80
- const updateMaskingSettings = React.useCallback((option) => {
81
- if (option === MapMaskingOption.AllModels) {
82
- activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency } });
83
- }
84
- if (option === MapMaskingOption.None) {
85
- activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.None } });
86
- }
87
- activeViewport.invalidateRenderPlan();
88
- }, [activeViewport, maskTransparency]);
89
- const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));
90
- const onMaskingToggle = React.useCallback((e) => {
91
- const checked = e.target.checked;
92
- const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;
93
- updateMaskingSettings(maskingOption);
94
- setMasking(maskingOption);
95
- }, [updateMaskingSettings]);
96
- const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);
97
- const onOverrideMaskTransparencyToggle = React.useCallback((e) => {
98
- const checked = e.target.checked;
99
- const trans = checked ? getNormalizedMaskTransparency() : undefined;
100
- activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: trans } });
101
- setOverrideMaskTransparency(checked);
102
- }, [activeViewport, getNormalizedMaskTransparency]);
103
- const handleElevationChange = React.useCallback((value) => {
104
- if (value !== undefined) {
105
- updateBackgroundMap({ groundBias: value });
106
- setGroundBias(value);
107
- }
108
- }, [updateBackgroundMap]);
109
- const handleAlphaChange = React.useCallback((values) => {
110
- const newTransparency = values[0] / 100;
111
- activeViewport.changeBackgroundMapProps({ transparency: newTransparency });
112
- activeViewport.invalidateRenderPlan();
113
- setTransparency(newTransparency);
114
- }, [activeViewport]);
115
- const handleMaskTransparencyChange = React.useCallback((values) => {
116
- const newTransparency = values[0] / 100;
117
- activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency } });
118
- activeViewport.invalidateRenderPlan();
119
- setMaskTransparency(newTransparency);
120
- }, [activeViewport]);
121
- const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);
122
- const onToggleTerrain = React.useCallback((e) => {
123
- const checked = e.target.checked;
124
- updateBackgroundMap({ applyTerrain: checked });
125
- setApplyTerrain(checked);
126
- }, [updateBackgroundMap]);
127
- const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);
128
- const handleExaggerationChange = React.useCallback((value, _stringValue) => {
129
- if (undefined !== value) {
130
- updateTerrainSettings({ exaggeration: value });
131
- setExaggeration(value);
132
- }
133
- }, [updateTerrainSettings]);
134
- const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);
135
- const handleHeightOriginChange = React.useCallback((value) => {
136
- if (undefined !== value) {
137
- updateTerrainSettings({ heightOrigin: value });
138
- setTerrainOrigin(value);
139
- }
140
- }, [updateTerrainSettings]);
141
- const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);
142
- const onToggleUseDepthBuffer = React.useCallback((e) => {
143
- const checked = e.target.checked;
144
- updateBackgroundMap({ useDepthBuffer: checked });
145
- setUseDepthBuffer(checked);
146
- }, [updateBackgroundMap]);
147
- /** Disable commas and letters */
148
- const onKeyDown = React.useCallback((event) => {
149
- if (event.keyCode === 188 || (event.keyCode >= 65 && event.keyCode <= 90))
150
- event.preventDefault();
151
- }, []);
152
- const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);
153
- const onLocatableToggle = React.useCallback((e) => {
154
- const checked = e.target.checked;
155
- updateBackgroundMap({ nonLocatable: !checked });
156
- setIsLocatable(checked);
157
- }, [updateBackgroundMap]);
158
- const [transparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Transparency"));
159
- const [terrainLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Terrain"));
160
- const [enableLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Enable"));
161
- const [elevationOffsetLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationOffset"));
162
- const [useDepthBufferLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.UseDepthBuffer"));
163
- const [modelHeightLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ModelHeight"));
164
- const [heightOriginLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.HeightOrigin"));
165
- const [exaggerationLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Exaggeration"));
166
- const [locatableLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Locatable"));
167
- const [maskingLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Mask"));
168
- const [overrideMaskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.OverrideMaskTransparency"));
169
- const [maskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.MaskTransparency"));
170
- return (React.createElement(React.Fragment, null,
171
- React.createElement("div", { className: "maplayers-settings-container" },
172
- React.createElement("span", { className: "map-manager-settings-label" }, transparencyLabel),
173
- React.createElement(itwinui_react_1.Slider, { min: 0, max: 100, values: [transparency * 100], onChange: handleAlphaChange, step: 1 }),
174
- React.createElement("span", { className: "map-manager-settings-label" }, locatableLabel),
175
- React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onLocatableToggle, checked: isLocatable }),
176
- React.createElement("span", { className: "map-manager-settings-label" }, maskingLabel),
177
- React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onMaskingToggle, checked: masking !== MapMaskingOption.None }),
178
- React.createElement("span", { className: "map-manager-settings-label" }, overrideMaskTransparencyLabel),
179
- React.createElement(itwinui_react_1.ToggleSwitch, { disabled: masking === MapMaskingOption.None, onChange: onOverrideMaskTransparencyToggle, checked: overrideMaskTransparency }),
180
- React.createElement("span", { className: "map-manager-settings-label" }, maskTransparencyLabel),
181
- React.createElement(itwinui_react_1.Slider, { disabled: masking === MapMaskingOption.None || !overrideMaskTransparency, min: 0, max: 100, values: [getNormalizedMaskTransparency() * 100], onChange: handleMaskTransparencyChange, step: 1 }),
182
- React.createElement(React.Fragment, null,
183
- React.createElement("span", { className: "map-manager-settings-label" }, elevationOffsetLabel),
184
- React.createElement(imodel_components_react_1.QuantityNumberInput, { disabled: applyTerrain, persistenceValue: groundBias, step: 1, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleElevationChange, onKeyDown: onKeyDown }),
185
- React.createElement("span", { className: "map-manager-settings-label" }, useDepthBufferLabel),
186
- React.createElement(itwinui_react_1.ToggleSwitch, { disabled: applyTerrain, onChange: onToggleUseDepthBuffer, checked: useDepthBuffer }))),
187
- React.createElement("div", { className: "map-manager-settings-group" },
188
- React.createElement("fieldset", null,
189
- React.createElement("legend", null, terrainLabel),
190
- React.createElement("div", { className: "maplayers-settings-container" },
191
- React.createElement("span", { className: "map-manager-settings-label" }, enableLabel),
192
- React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onToggleTerrain, checked: applyTerrain }),
193
- React.createElement("span", { className: "map-manager-settings-label" }, modelHeightLabel),
194
- React.createElement(imodel_components_react_1.QuantityNumberInput, { disabled: !applyTerrain, persistenceValue: terrainOrigin, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleHeightOriginChange, onKeyDown: onKeyDown }),
195
- React.createElement("span", { className: "map-manager-settings-label" }, heightOriginLabel),
196
- React.createElement(itwinui_react_1.Select, { popoverProps: { appendTo: "parent" }, options: terrainHeightOptions.current, disabled: !applyTerrain, value: heightOriginMode, onChange: handleElevationTypeSelected, size: "small" }),
197
- React.createElement("span", { className: "map-manager-settings-label" }, exaggerationLabel),
198
- React.createElement(core_react_1.NumberInput, { value: exaggeration, disabled: !applyTerrain, onChange: handleExaggerationChange, onKeyDown: onKeyDown }))))));
199
- }
200
- exports.MapManagerSettings = MapManagerSettings;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
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
+ *--------------------------------------------------------------------------------------------*/
6
+ // cSpell:ignore droppable Sublayer Basemap
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.MapManagerSettings = void 0;
9
+ const React = require("react");
10
+ const core_react_1 = require("@itwin/core-react");
11
+ const core_frontend_1 = require("@itwin/core-frontend");
12
+ const core_common_1 = require("@itwin/core-common");
13
+ const MapLayerManager_1 = require("./MapLayerManager");
14
+ require("./MapManagerSettings.scss");
15
+ const itwinui_react_1 = require("@itwin/itwinui-react");
16
+ const imodel_components_react_1 = require("@itwin/imodel-components-react");
17
+ const mapLayers_1 = require("../../mapLayers");
18
+ /* eslint-disable deprecation/deprecation */
19
+ var MapMaskingOption;
20
+ (function (MapMaskingOption) {
21
+ MapMaskingOption[MapMaskingOption["None"] = 0] = "None";
22
+ MapMaskingOption[MapMaskingOption["AllModels"] = 1] = "AllModels";
23
+ })(MapMaskingOption || (MapMaskingOption = {}));
24
+ function getMapMaskingFromBackgroundMapSetting(backgroundMapSettings) {
25
+ if (backgroundMapSettings.planarClipMask.mode === core_common_1.PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {
26
+ if (backgroundMapSettings.planarClipMask.priority >= core_common_1.PlanarClipMaskPriority.BackgroundMap) {
27
+ return MapMaskingOption.AllModels;
28
+ }
29
+ }
30
+ return MapMaskingOption.None;
31
+ }
32
+ function getHeightOriginModeKey(mode) {
33
+ if (core_common_1.TerrainHeightOriginMode.Geodetic === mode)
34
+ return "geodetic";
35
+ if (core_common_1.TerrainHeightOriginMode.Geoid === mode)
36
+ return "geoid";
37
+ return "ground";
38
+ }
39
+ function getHeightOriginModeFromKey(mode) {
40
+ if ("geodetic" === mode)
41
+ return core_common_1.TerrainHeightOriginMode.Geodetic;
42
+ if ("geoid" === mode)
43
+ return core_common_1.TerrainHeightOriginMode.Geoid;
44
+ return core_common_1.TerrainHeightOriginMode.Ground;
45
+ }
46
+ // eslint-disable-next-line @typescript-eslint/naming-convention
47
+ function MapManagerSettings() {
48
+ const { activeViewport } = (0, MapLayerManager_1.useSourceMapContext)();
49
+ const backgroundMapSettings = activeViewport.view.getDisplayStyle3d().settings.backgroundMap;
50
+ const [transparency, setTransparency] = React.useState(() => typeof backgroundMapSettings.transparency === "boolean"
51
+ ? 0
52
+ : Math.round((backgroundMapSettings.transparency) * 100) / 100);
53
+ const terrainSettings = backgroundMapSettings.terrainSettings;
54
+ const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);
55
+ const terrainHeightOptions = React.useRef([
56
+ { value: "geodetic", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGeodetic") },
57
+ { value: "geoid", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGeoid") },
58
+ { value: "ground", label: mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationTypeGround") },
59
+ ]);
60
+ const updateTerrainSettings = React.useCallback((props) => {
61
+ activeViewport.changeBackgroundMapProps({ terrainSettings: props });
62
+ activeViewport.invalidateRenderPlan();
63
+ }, [activeViewport]);
64
+ const updateBackgroundMap = React.useCallback((props) => {
65
+ activeViewport.changeBackgroundMapProps(props);
66
+ activeViewport.invalidateRenderPlan();
67
+ }, [activeViewport]);
68
+ const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));
69
+ const handleElevationTypeSelected = React.useCallback((newValue) => {
70
+ if (newValue) {
71
+ const newHeightOriginMode = getHeightOriginModeFromKey(newValue);
72
+ updateTerrainSettings({ heightOriginMode: newHeightOriginMode });
73
+ setHeightOriginMode(newValue);
74
+ }
75
+ }, [updateTerrainSettings]);
76
+ const [maskTransparency, setMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency === undefined
77
+ ? undefined
78
+ : Math.round((backgroundMapSettings.planarClipMask.transparency) * 100) / 100);
79
+ const getNormalizedMaskTransparency = React.useCallback(() => { return (maskTransparency === undefined ? 0 : maskTransparency); }, [maskTransparency]);
80
+ const updateMaskingSettings = React.useCallback((option) => {
81
+ if (option === MapMaskingOption.AllModels) {
82
+ activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency } });
83
+ }
84
+ if (option === MapMaskingOption.None) {
85
+ activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.None } });
86
+ }
87
+ activeViewport.invalidateRenderPlan();
88
+ }, [activeViewport, maskTransparency]);
89
+ const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));
90
+ const onMaskingToggle = React.useCallback((e) => {
91
+ const checked = e.target.checked;
92
+ const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;
93
+ updateMaskingSettings(maskingOption);
94
+ setMasking(maskingOption);
95
+ }, [updateMaskingSettings]);
96
+ const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);
97
+ const onOverrideMaskTransparencyToggle = React.useCallback((e) => {
98
+ const checked = e.target.checked;
99
+ const trans = checked ? getNormalizedMaskTransparency() : undefined;
100
+ activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: trans } });
101
+ setOverrideMaskTransparency(checked);
102
+ }, [activeViewport, getNormalizedMaskTransparency]);
103
+ const handleElevationChange = React.useCallback((value) => {
104
+ if (value !== undefined) {
105
+ updateBackgroundMap({ groundBias: value });
106
+ setGroundBias(value);
107
+ }
108
+ }, [updateBackgroundMap]);
109
+ const handleAlphaChange = React.useCallback((values) => {
110
+ const newTransparency = values[0] / 100;
111
+ activeViewport.changeBackgroundMapProps({ transparency: newTransparency });
112
+ activeViewport.invalidateRenderPlan();
113
+ setTransparency(newTransparency);
114
+ }, [activeViewport]);
115
+ const handleMaskTransparencyChange = React.useCallback((values) => {
116
+ const newTransparency = values[0] / 100;
117
+ activeViewport.changeBackgroundMapProps({ planarClipMask: { mode: core_common_1.PlanarClipMaskMode.Priority, priority: core_common_1.PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency } });
118
+ activeViewport.invalidateRenderPlan();
119
+ setMaskTransparency(newTransparency);
120
+ }, [activeViewport]);
121
+ const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);
122
+ const onToggleTerrain = React.useCallback((e) => {
123
+ const checked = e.target.checked;
124
+ updateBackgroundMap({ applyTerrain: checked });
125
+ setApplyTerrain(checked);
126
+ }, [updateBackgroundMap]);
127
+ const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);
128
+ const handleExaggerationChange = React.useCallback((value, _stringValue) => {
129
+ if (undefined !== value) {
130
+ updateTerrainSettings({ exaggeration: value });
131
+ setExaggeration(value);
132
+ }
133
+ }, [updateTerrainSettings]);
134
+ const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);
135
+ const handleHeightOriginChange = React.useCallback((value) => {
136
+ if (undefined !== value) {
137
+ updateTerrainSettings({ heightOrigin: value });
138
+ setTerrainOrigin(value);
139
+ }
140
+ }, [updateTerrainSettings]);
141
+ const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);
142
+ const onToggleUseDepthBuffer = React.useCallback((e) => {
143
+ const checked = e.target.checked;
144
+ updateBackgroundMap({ useDepthBuffer: checked });
145
+ setUseDepthBuffer(checked);
146
+ }, [updateBackgroundMap]);
147
+ /** Disable commas and letters */
148
+ const onKeyDown = React.useCallback((event) => {
149
+ if (event.keyCode === 188 || (event.keyCode >= 65 && event.keyCode <= 90))
150
+ event.preventDefault();
151
+ }, []);
152
+ const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);
153
+ const onLocatableToggle = React.useCallback((e) => {
154
+ const checked = e.target.checked;
155
+ updateBackgroundMap({ nonLocatable: !checked });
156
+ setIsLocatable(checked);
157
+ }, [updateBackgroundMap]);
158
+ const [transparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Transparency"));
159
+ const [terrainLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Terrain"));
160
+ const [enableLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Enable"));
161
+ const [elevationOffsetLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ElevationOffset"));
162
+ const [useDepthBufferLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.UseDepthBuffer"));
163
+ const [modelHeightLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.ModelHeight"));
164
+ const [heightOriginLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.HeightOrigin"));
165
+ const [exaggerationLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Exaggeration"));
166
+ const [locatableLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Locatable"));
167
+ const [maskingLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.Mask"));
168
+ const [overrideMaskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.OverrideMaskTransparency"));
169
+ const [maskTransparencyLabel] = React.useState(mapLayers_1.MapLayersUI.localization.getLocalizedString("mapLayers:Settings.MaskTransparency"));
170
+ return (React.createElement(React.Fragment, null,
171
+ React.createElement("div", { className: "maplayers-settings-container" },
172
+ React.createElement("span", { className: "map-manager-settings-label" }, transparencyLabel),
173
+ React.createElement(itwinui_react_1.Slider, { min: 0, max: 100, values: [transparency * 100], onChange: handleAlphaChange, step: 1 }),
174
+ React.createElement("span", { className: "map-manager-settings-label" }, locatableLabel),
175
+ React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onLocatableToggle, checked: isLocatable }),
176
+ React.createElement("span", { className: "map-manager-settings-label" }, maskingLabel),
177
+ React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onMaskingToggle, checked: masking !== MapMaskingOption.None }),
178
+ React.createElement("span", { className: "map-manager-settings-label" }, overrideMaskTransparencyLabel),
179
+ React.createElement(itwinui_react_1.ToggleSwitch, { disabled: masking === MapMaskingOption.None, onChange: onOverrideMaskTransparencyToggle, checked: overrideMaskTransparency }),
180
+ React.createElement("span", { className: "map-manager-settings-label" }, maskTransparencyLabel),
181
+ React.createElement(itwinui_react_1.Slider, { disabled: masking === MapMaskingOption.None || !overrideMaskTransparency, min: 0, max: 100, values: [getNormalizedMaskTransparency() * 100], onChange: handleMaskTransparencyChange, step: 1 }),
182
+ React.createElement(React.Fragment, null,
183
+ React.createElement("span", { className: "map-manager-settings-label" }, elevationOffsetLabel),
184
+ React.createElement(imodel_components_react_1.QuantityNumberInput, { disabled: applyTerrain, persistenceValue: groundBias, step: 1, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleElevationChange, onKeyDown: onKeyDown }),
185
+ React.createElement("span", { className: "map-manager-settings-label" }, useDepthBufferLabel),
186
+ React.createElement(itwinui_react_1.ToggleSwitch, { disabled: applyTerrain, onChange: onToggleUseDepthBuffer, checked: useDepthBuffer }))),
187
+ React.createElement("div", { className: "map-manager-settings-group" },
188
+ React.createElement("fieldset", null,
189
+ React.createElement("legend", null, terrainLabel),
190
+ React.createElement("div", { className: "maplayers-settings-container" },
191
+ React.createElement("span", { className: "map-manager-settings-label" }, enableLabel),
192
+ React.createElement(itwinui_react_1.ToggleSwitch, { onChange: onToggleTerrain, checked: applyTerrain }),
193
+ React.createElement("span", { className: "map-manager-settings-label" }, modelHeightLabel),
194
+ React.createElement(imodel_components_react_1.QuantityNumberInput, { disabled: !applyTerrain, persistenceValue: terrainOrigin, snap: true, quantityType: core_frontend_1.QuantityType.LengthEngineering, onChange: handleHeightOriginChange, onKeyDown: onKeyDown }),
195
+ React.createElement("span", { className: "map-manager-settings-label" }, heightOriginLabel),
196
+ React.createElement(itwinui_react_1.Select, { popoverProps: { appendTo: "parent" }, options: terrainHeightOptions.current, disabled: !applyTerrain, value: heightOriginMode, onChange: handleElevationTypeSelected, size: "small" }),
197
+ React.createElement("span", { className: "map-manager-settings-label" }, exaggerationLabel),
198
+ React.createElement(core_react_1.NumberInput, { value: exaggeration, disabled: !applyTerrain, onChange: handleExaggerationChange, onKeyDown: onKeyDown }))))));
199
+ }
200
+ exports.MapManagerSettings = MapManagerSettings;
201
201
  //# sourceMappingURL=MapManagerSettings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapManagerSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F,2CAA2C;;;AAE3C,+BAA+B;AAC/B,kDAAgD;AAChD,wDAAkE;AAClE,oDAAkK;AAClK,uDAAwD;AACxD,qCAAmC;AACnC,wDAAkF;AAClF,4EAAqE;AACrE,+CAA8C;AAE9C,4CAA4C;AAE5C,IAAK,gBAGJ;AAHD,WAAK,gBAAgB;IACnB,uDAAI,CAAA;IACJ,iEAAS,CAAA;AACX,CAAC,EAHI,gBAAgB,KAAhB,gBAAgB,QAGpB;AAED,SAAS,qCAAqC,CAAC,qBAA4C;IACzF,IAAI,qBAAqB,CAAC,cAAc,CAAC,IAAI,KAAK,gCAAkB,CAAC,QAAQ,IAAI,qBAAqB,CAAC,cAAc,CAAC,QAAQ,EAAE;QAC9H,IAAI,qBAAqB,CAAC,cAAc,CAAC,QAAQ,IAAI,oCAAsB,CAAC,aAAa,EAAE;YACzF,OAAO,gBAAgB,CAAC,SAAS,CAAC;SACnC;KAEF;IACD,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED,SAAS,sBAAsB,CAAC,IAA6B;IAC3D,IAAI,qCAAuB,CAAC,QAAQ,KAAK,IAAI;QAC3C,OAAO,UAAU,CAAC;IACpB,IAAI,qCAAuB,CAAC,KAAK,KAAK,IAAI;QACxC,OAAO,OAAO,CAAC;IACjB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,IAAI,UAAU,KAAK,IAAI;QACrB,OAAO,qCAAuB,CAAC,QAAQ,CAAC;IAC1C,IAAI,OAAO,KAAK,IAAI;QAClB,OAAO,qCAAuB,CAAC,KAAK,CAAC;IACvC,OAAO,qCAAuB,CAAC,MAAM,CAAC;AACxC,CAAC;AAED,gEAAgE;AAChE,SAAgB,kBAAkB;IAChC,MAAM,EAAE,cAAc,EAAC,GAAG,IAAA,qCAAmB,GAAE,CAAC;IAChD,MAAM,qBAAqB,GAAI,cAAe,CAAC,IAAoB,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;IAE/G,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAC1D,OAAO,qBAAqB,CAAC,YAAY,KAAK,SAAS;QACrD,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAEpE,MAAM,eAAe,GAAG,qBAAqB,CAAC,eAAe,CAAC;IAC9D,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAE3F,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAyB;QAChE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,0CAA0C,CAAC,EAAE;QACrH,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,uCAAuC,CAAC,EAAE;QAC/G,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,EAAE;KAClH,CAAC,CAAC;IAEH,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAmB,EAAE,EAAE;QACtE,cAAe,CAAC,wBAAwB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACrE,cAAe,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAyB,EAAE,EAAE;QAC1E,cAAe,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAChD,cAAe,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/H,MAAM,2BAA2B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,QAAgB,EAAQ,EAAE;QAC/E,IAAI,QAAQ,EAAE;YACZ,MAAM,mBAAmB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;YACjE,qBAAqB,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACjE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;SAC/B;IACH,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAClE,qBAAqB,CAAC,cAAc,CAAC,YAAY,KAAK,SAAS;QAC7D,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAEnF,MAAM,6BAA6B,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvJ,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAwB,EAAE,EAAE;QAC3E,IAAI,MAAM,KAAK,gBAAgB,CAAC,SAAS,EAAE;YACzC,cAAe,CAAC,wBAAwB,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,gCAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,oCAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;SACrL;QACD,IAAI,MAAM,KAAK,gBAAgB,CAAC,IAAI,EAAE;YACpC,cAAe,CAAC,wBAAwB,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,gCAAkB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;SACjG;QAED,cAAe,CAAC,oBAAoB,EAAE,CAAC;IACzC,CAAC,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEvC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qCAAqC,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEjH,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACnF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACnF,qBAAqB,CAAC,aAAa,CAAC,CAAC;QACrC,UAAU,CAAC,aAAa,CAAC,CAAC;IAC5B,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,cAAc,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;IAEtJ,MAAM,gCAAgC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACpG,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,cAAe,CAAC,wBAAwB,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,gCAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,oCAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAEzK,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,cAAc,EAAE,6BAA6B,CAAC,CAAC,CAAC;IAEpD,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAChE,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,mBAAmB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3C,aAAa,CAAC,KAAK,CAAC,CAAC;SACtB;IACH,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAyB,EAAE,EAAE;QACxE,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxC,cAAe,CAAC,wBAAwB,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC;QAC5E,cAAe,CAAC,oBAAoB,EAAE,CAAC;QACvC,eAAe,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,4BAA4B,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAyB,EAAE,EAAE;QACnF,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACxC,cAAe,CAAC,wBAAwB,CAAC,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,gCAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,oCAAsB,CAAC,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QACnL,cAAe,CAAC,oBAAoB,EAAE,CAAC;QACvC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAEjG,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACnF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/C,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAE3F,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAyB,EAAE,YAAoB,EAAE,EAAE;QACrG,IAAI,SAAS,KAAK,KAAK,EAAE;YACvB,qBAAqB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,eAAe,CAAC,KAAK,CAAC,CAAC;SACxB;IACH,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IAE7F,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACnE,IAAI,SAAS,KAAK,KAAK,EAAE;YACvB,qBAAqB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/C,gBAAgB,CAAC,KAAK,CAAC,CAAC;SACzB;IACH,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACvG,MAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QAC1F,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,iCAAiC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAA4C,EAAE,EAAE;QACnF,IAAI,KAAK,CAAC,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YACvE,KAAK,CAAC,cAAc,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;IAC5F,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAsC,EAAE,EAAE;QACrF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE1B,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3H,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC/G,MAAM,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjI,MAAM,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,gCAAgC,CAAC,CAAC,CAAC;IACzH,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3H,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC3H,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACrH,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAC9G,MAAM,CAAC,6BAA6B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACnJ,MAAM,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAEnI,OAAO,CACL;QACE,6BAAK,SAAS,EAAC,8BAA8B;YAE3C,8BAAM,SAAS,EAAC,4BAA4B,IAAE,iBAAiB,CAAQ;YACvE,oBAAC,sBAAM,IAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAI;YAEhG,8BAAM,SAAS,EAAC,4BAA4B,IAAE,cAAc,CAAQ;YAEpE,oBAAC,4BAAY,IAAC,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,WAAW,GAAI;YAEnE,8BAAM,SAAS,EAAC,4BAA4B,IAAE,YAAY,CAAQ;YAElE,oBAAC,4BAAY,IAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,KAAK,gBAAgB,CAAC,IAAI,GAAI;YAEvF,8BAAM,SAAS,EAAC,4BAA4B,IAAE,6BAA6B,CAAQ;YACnF,oBAAC,4BAAY,IAAC,QAAQ,EAAE,OAAO,KAAK,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,gCAAgC,EAAE,OAAO,EAAE,wBAAwB,GAAI;YAE5I,8BAAM,SAAS,EAAC,4BAA4B,IAAE,qBAAqB,CAAQ;YAC3E,oBAAC,sBAAM,IAAC,QAAQ,EAAE,OAAO,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,6BAA6B,EAAE,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,4BAA4B,EAAE,IAAI,EAAE,CAAC,GAAI;YAExM;gBACE,8BAAM,SAAS,EAAC,4BAA4B,IAAE,oBAAoB,CAAQ;gBAC1E,oBAAC,6CAAmB,IAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,QAAC,YAAY,EAAE,4BAAY,CAAC,iBAAiB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,SAAS,EAAE,SAAS,GAAG;gBAE/L,8BAAM,SAAS,EAAC,4BAA4B,IAAE,mBAAmB,CAAQ;gBAEzE,oBAAC,4BAAY,IAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,cAAc,GAAI,CAClG,CAEC;QACN,6BAAK,SAAS,EAAC,4BAA4B;YACzC;gBACE,oCAAS,YAAY,CAAU;gBAE/B,6BAAK,SAAS,EAAC,8BAA8B;oBAE3C,8BAAM,SAAS,EAAC,4BAA4B,IAAE,WAAW,CAAQ;oBAEjE,oBAAC,4BAAY,IAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAI;oBAElE,8BAAM,SAAS,EAAC,4BAA4B,IAAE,gBAAgB,CAAQ;oBACtE,oBAAC,6CAAmB,IAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,IAAI,QAAC,YAAY,EAAE,4BAAY,CAAC,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB,EAAE,SAAS,EAAE,SAAS,GAAG;oBAE7L,8BAAM,SAAS,EAAC,4BAA4B,IAAE,iBAAiB,CAAQ;oBAEvE,oBAAC,sBAAM,IAAC,YAAY,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,2BAA2B,EAAE,IAAI,EAAC,OAAO,GAAG;oBAE3L,8BAAM,SAAS,EAAC,4BAA4B,IAAE,iBAAiB,CAAQ;oBACvE,oBAAC,wBAAW,IAAC,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,wBAAwB,EAAE,SAAS,EAAE,SAAS,GAAI,CACnH,CAEG,CACP,CACL,CACJ,CAAC;AACJ,CAAC;AAlND,gDAkNC","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\nimport * as React from \"react\";\r\nimport { NumberInput } from \"@itwin/core-react\";\r\nimport { QuantityType, ViewState3d } from \"@itwin/core-frontend\";\r\nimport { BackgroundMapProps, BackgroundMapSettings, PlanarClipMaskMode, PlanarClipMaskPriority, TerrainHeightOriginMode, TerrainProps } from \"@itwin/core-common\";\r\nimport { useSourceMapContext } from \"./MapLayerManager\";\r\nimport \"./MapManagerSettings.scss\";\r\nimport { Select, SelectOption, Slider, ToggleSwitch } from \"@itwin/itwinui-react\";\r\nimport { QuantityNumberInput } from \"@itwin/imodel-components-react\";\r\nimport { MapLayersUI } from \"../../mapLayers\";\r\n\r\n/* eslint-disable deprecation/deprecation */\r\n\r\nenum MapMaskingOption {\r\n None,\r\n AllModels\r\n}\r\n\r\nfunction getMapMaskingFromBackgroundMapSetting(backgroundMapSettings: BackgroundMapSettings): MapMaskingOption {\r\n if (backgroundMapSettings.planarClipMask.mode === PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {\r\n if (backgroundMapSettings.planarClipMask.priority >= PlanarClipMaskPriority.BackgroundMap) {\r\n return MapMaskingOption.AllModels;\r\n }\r\n\r\n }\r\n return MapMaskingOption.None;\r\n}\r\n\r\nfunction getHeightOriginModeKey(mode: TerrainHeightOriginMode): string {\r\n if (TerrainHeightOriginMode.Geodetic === mode)\r\n return \"geodetic\";\r\n if (TerrainHeightOriginMode.Geoid === mode)\r\n return \"geoid\";\r\n return \"ground\";\r\n}\r\n\r\nfunction getHeightOriginModeFromKey(mode: string): TerrainHeightOriginMode {\r\n if (\"geodetic\" === mode)\r\n return TerrainHeightOriginMode.Geodetic;\r\n if (\"geoid\" === mode)\r\n return TerrainHeightOriginMode.Geoid;\r\n return TerrainHeightOriginMode.Ground;\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function MapManagerSettings() {\r\n const { activeViewport} = useSourceMapContext();\r\n const backgroundMapSettings = (activeViewport!.view as ViewState3d).getDisplayStyle3d().settings.backgroundMap;\r\n\r\n const [transparency, setTransparency] = React.useState(() =>\r\n typeof backgroundMapSettings.transparency === \"boolean\"\r\n ? 0\r\n : Math.round((backgroundMapSettings.transparency) * 100) / 100);\r\n\r\n const terrainSettings = backgroundMapSettings.terrainSettings;\r\n const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);\r\n\r\n const terrainHeightOptions = React.useRef<SelectOption<string>[]>([\r\n { value: \"geodetic\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeodetic\") },\r\n { value: \"geoid\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeoid\") },\r\n { value: \"ground\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGround\") },\r\n ]);\r\n\r\n const updateTerrainSettings = React.useCallback((props: TerrainProps) => {\r\n activeViewport!.changeBackgroundMapProps({ terrainSettings: props });\r\n activeViewport!.invalidateRenderPlan();\r\n }, [activeViewport]);\r\n\r\n const updateBackgroundMap = React.useCallback((props: BackgroundMapProps) => {\r\n activeViewport!.changeBackgroundMapProps(props);\r\n activeViewport!.invalidateRenderPlan();\r\n }, [activeViewport]);\r\n\r\n const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));\r\n const handleElevationTypeSelected = React.useCallback((newValue: string): void => {\r\n if (newValue) {\r\n const newHeightOriginMode = getHeightOriginModeFromKey(newValue);\r\n updateTerrainSettings({ heightOriginMode: newHeightOriginMode });\r\n setHeightOriginMode(newValue);\r\n }\r\n }, [updateTerrainSettings]);\r\n\r\n const [maskTransparency, setMaskTransparency] = React.useState(() =>\r\n backgroundMapSettings.planarClipMask.transparency === undefined\r\n ? undefined\r\n : Math.round((backgroundMapSettings.planarClipMask.transparency) * 100) / 100);\r\n\r\n const getNormalizedMaskTransparency = React.useCallback(() => { return (maskTransparency === undefined ? 0 : maskTransparency); }, [maskTransparency]);\r\n\r\n const updateMaskingSettings = React.useCallback((option: MapMaskingOption) => {\r\n if (option === MapMaskingOption.AllModels) {\r\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency } });\r\n }\r\n if (option === MapMaskingOption.None) {\r\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None } });\r\n }\r\n\r\n activeViewport!.invalidateRenderPlan();\r\n }, [activeViewport, maskTransparency]);\r\n\r\n const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));\r\n\r\n const onMaskingToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const checked = e.target.checked;\r\n const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;\r\n updateMaskingSettings(maskingOption);\r\n setMasking(maskingOption);\r\n }, [updateMaskingSettings]);\r\n\r\n const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);\r\n\r\n const onOverrideMaskTransparencyToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const checked = e.target.checked;\r\n const trans = checked ? getNormalizedMaskTransparency() : undefined;\r\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: trans } });\r\n\r\n setOverrideMaskTransparency(checked);\r\n }, [activeViewport, getNormalizedMaskTransparency]);\r\n\r\n const handleElevationChange = React.useCallback((value: number) => {\r\n if (value !== undefined) {\r\n updateBackgroundMap({ groundBias: value });\r\n setGroundBias(value);\r\n }\r\n }, [updateBackgroundMap]);\r\n\r\n const handleAlphaChange = React.useCallback((values: readonly number[]) => {\r\n const newTransparency = values[0] / 100;\r\n activeViewport!.changeBackgroundMapProps({ transparency: newTransparency });\r\n activeViewport!.invalidateRenderPlan();\r\n setTransparency(newTransparency);\r\n }, [activeViewport]);\r\n\r\n const handleMaskTransparencyChange = React.useCallback((values: readonly number[]) => {\r\n const newTransparency = values[0] / 100;\r\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency } });\r\n activeViewport!.invalidateRenderPlan();\r\n setMaskTransparency(newTransparency);\r\n }, [activeViewport]);\r\n\r\n const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);\r\n\r\n const onToggleTerrain = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const checked = e.target.checked;\r\n updateBackgroundMap({ applyTerrain: checked });\r\n setApplyTerrain(checked);\r\n }, [updateBackgroundMap]);\r\n\r\n const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);\r\n\r\n const handleExaggerationChange = React.useCallback((value: number | undefined, _stringValue: string) => {\r\n if (undefined !== value) {\r\n updateTerrainSettings({ exaggeration: value });\r\n setExaggeration(value);\r\n }\r\n }, [updateTerrainSettings]);\r\n\r\n const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);\r\n\r\n const handleHeightOriginChange = React.useCallback((value: number) => {\r\n if (undefined !== value) {\r\n updateTerrainSettings({ heightOrigin: value });\r\n setTerrainOrigin(value);\r\n }\r\n }, [updateTerrainSettings]);\r\n\r\n const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);\r\n const onToggleUseDepthBuffer = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const checked = e.target.checked;\r\n updateBackgroundMap({ useDepthBuffer: checked });\r\n setUseDepthBuffer(checked);\r\n }, [updateBackgroundMap]);\r\n\r\n /** Disable commas and letters */\r\n const onKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (event.keyCode === 188 || (event.keyCode >= 65 && event.keyCode <= 90))\r\n event.preventDefault();\r\n }, []);\r\n\r\n const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);\r\n const onLocatableToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\r\n const checked = e.target.checked;\r\n updateBackgroundMap({ nonLocatable: !checked });\r\n setIsLocatable(checked);\r\n }, [updateBackgroundMap]);\r\n\r\n const [transparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Transparency\"));\r\n const [terrainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Terrain\"));\r\n const [enableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Enable\"));\r\n const [elevationOffsetLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationOffset\"));\r\n const [useDepthBufferLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.UseDepthBuffer\"));\r\n const [modelHeightLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ModelHeight\"));\r\n const [heightOriginLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.HeightOrigin\"));\r\n const [exaggerationLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Exaggeration\"));\r\n const [locatableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Locatable\"));\r\n const [maskingLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Mask\"));\r\n const [overrideMaskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.OverrideMaskTransparency\"));\r\n const [maskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.MaskTransparency\"));\r\n\r\n return (\r\n <>\r\n <div className=\"maplayers-settings-container\">\r\n\r\n <span className=\"map-manager-settings-label\">{transparencyLabel}</span>\r\n <Slider min={0} max={100} values={[transparency * 100]} onChange={handleAlphaChange} step={1} />\r\n\r\n <span className=\"map-manager-settings-label\">{locatableLabel}</span>\r\n {/* eslint-disable-next-line deprecation/deprecation */}\r\n <ToggleSwitch onChange={onLocatableToggle} checked={isLocatable} />\r\n\r\n <span className=\"map-manager-settings-label\">{maskingLabel}</span>\r\n {/* eslint-disable-next-line deprecation/deprecation */}\r\n <ToggleSwitch onChange={onMaskingToggle} checked={masking !== MapMaskingOption.None} />\r\n\r\n <span className=\"map-manager-settings-label\">{overrideMaskTransparencyLabel}</span>\r\n <ToggleSwitch disabled={masking === MapMaskingOption.None} onChange={onOverrideMaskTransparencyToggle} checked={overrideMaskTransparency} />\r\n\r\n <span className=\"map-manager-settings-label\">{maskTransparencyLabel}</span>\r\n <Slider disabled={masking === MapMaskingOption.None || !overrideMaskTransparency} min={0} max={100} values={[getNormalizedMaskTransparency() * 100]} onChange={handleMaskTransparencyChange} step={1} />\r\n\r\n <>\r\n <span className=\"map-manager-settings-label\">{elevationOffsetLabel}</span>\r\n <QuantityNumberInput disabled={applyTerrain} persistenceValue={groundBias} step={1} snap quantityType={QuantityType.LengthEngineering} onChange={handleElevationChange} onKeyDown={onKeyDown}/>\r\n\r\n <span className=\"map-manager-settings-label\">{useDepthBufferLabel}</span>\r\n {/* eslint-disable-next-line deprecation/deprecation */}\r\n <ToggleSwitch disabled={applyTerrain} onChange={onToggleUseDepthBuffer} checked={useDepthBuffer} />\r\n </>\r\n\r\n </div>\r\n <div className=\"map-manager-settings-group\">\r\n <fieldset>\r\n <legend>{terrainLabel}</legend>\r\n\r\n <div className=\"maplayers-settings-container\">\r\n\r\n <span className=\"map-manager-settings-label\">{enableLabel}</span>\r\n {/* eslint-disable-next-line deprecation/deprecation */}\r\n <ToggleSwitch onChange={onToggleTerrain} checked={applyTerrain} />\r\n\r\n <span className=\"map-manager-settings-label\">{modelHeightLabel}</span>\r\n <QuantityNumberInput disabled={!applyTerrain} persistenceValue={terrainOrigin} snap quantityType={QuantityType.LengthEngineering} onChange={handleHeightOriginChange} onKeyDown={onKeyDown}/>\r\n\r\n <span className=\"map-manager-settings-label\">{heightOriginLabel}</span>\r\n {/* elevation correction component: 'popoverProps' is needed here otherwise selecting an option closes the menu popup.*/}\r\n <Select popoverProps={{appendTo: \"parent\"}} options={terrainHeightOptions.current} disabled={!applyTerrain} value={heightOriginMode} onChange={handleElevationTypeSelected} size=\"small\" />\r\n\r\n <span className=\"map-manager-settings-label\">{exaggerationLabel}</span>\r\n <NumberInput value={exaggeration} disabled={!applyTerrain} onChange={handleExaggerationChange} onKeyDown={onKeyDown} />\r\n </div>\r\n\r\n </fieldset>\r\n </div>\r\n </>\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"MapManagerSettings.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapManagerSettings.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n// cSpell:ignore droppable Sublayer Basemap\n\nimport * as React from \"react\";\nimport { NumberInput } from \"@itwin/core-react\";\nimport { QuantityType, ViewState3d } from \"@itwin/core-frontend\";\nimport { BackgroundMapProps, BackgroundMapSettings, PlanarClipMaskMode, PlanarClipMaskPriority, TerrainHeightOriginMode, TerrainProps } from \"@itwin/core-common\";\nimport { useSourceMapContext } from \"./MapLayerManager\";\nimport \"./MapManagerSettings.scss\";\nimport { Select, SelectOption, Slider, ToggleSwitch } from \"@itwin/itwinui-react\";\nimport { QuantityNumberInput } from \"@itwin/imodel-components-react\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\n/* eslint-disable deprecation/deprecation */\n\nenum MapMaskingOption {\n None,\n AllModels\n}\n\nfunction getMapMaskingFromBackgroundMapSetting(backgroundMapSettings: BackgroundMapSettings): MapMaskingOption {\n if (backgroundMapSettings.planarClipMask.mode === PlanarClipMaskMode.Priority && backgroundMapSettings.planarClipMask.priority) {\n if (backgroundMapSettings.planarClipMask.priority >= PlanarClipMaskPriority.BackgroundMap) {\n return MapMaskingOption.AllModels;\n }\n\n }\n return MapMaskingOption.None;\n}\n\nfunction getHeightOriginModeKey(mode: TerrainHeightOriginMode): string {\n if (TerrainHeightOriginMode.Geodetic === mode)\n return \"geodetic\";\n if (TerrainHeightOriginMode.Geoid === mode)\n return \"geoid\";\n return \"ground\";\n}\n\nfunction getHeightOriginModeFromKey(mode: string): TerrainHeightOriginMode {\n if (\"geodetic\" === mode)\n return TerrainHeightOriginMode.Geodetic;\n if (\"geoid\" === mode)\n return TerrainHeightOriginMode.Geoid;\n return TerrainHeightOriginMode.Ground;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function MapManagerSettings() {\n const { activeViewport} = useSourceMapContext();\n const backgroundMapSettings = (activeViewport!.view as ViewState3d).getDisplayStyle3d().settings.backgroundMap;\n\n const [transparency, setTransparency] = React.useState(() =>\n typeof backgroundMapSettings.transparency === \"boolean\"\n ? 0\n : Math.round((backgroundMapSettings.transparency) * 100) / 100);\n\n const terrainSettings = backgroundMapSettings.terrainSettings;\n const [groundBias, setGroundBias] = React.useState(() => backgroundMapSettings.groundBias);\n\n const terrainHeightOptions = React.useRef<SelectOption<string>[]>([\n { value: \"geodetic\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeodetic\") },\n { value: \"geoid\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGeoid\") },\n { value: \"ground\", label: MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationTypeGround\") },\n ]);\n\n const updateTerrainSettings = React.useCallback((props: TerrainProps) => {\n activeViewport!.changeBackgroundMapProps({ terrainSettings: props });\n activeViewport!.invalidateRenderPlan();\n }, [activeViewport]);\n\n const updateBackgroundMap = React.useCallback((props: BackgroundMapProps) => {\n activeViewport!.changeBackgroundMapProps(props);\n activeViewport!.invalidateRenderPlan();\n }, [activeViewport]);\n\n const [heightOriginMode, setHeightOriginMode] = React.useState(() => getHeightOriginModeKey(terrainSettings.heightOriginMode));\n const handleElevationTypeSelected = React.useCallback((newValue: string): void => {\n if (newValue) {\n const newHeightOriginMode = getHeightOriginModeFromKey(newValue);\n updateTerrainSettings({ heightOriginMode: newHeightOriginMode });\n setHeightOriginMode(newValue);\n }\n }, [updateTerrainSettings]);\n\n const [maskTransparency, setMaskTransparency] = React.useState(() =>\n backgroundMapSettings.planarClipMask.transparency === undefined\n ? undefined\n : Math.round((backgroundMapSettings.planarClipMask.transparency) * 100) / 100);\n\n const getNormalizedMaskTransparency = React.useCallback(() => { return (maskTransparency === undefined ? 0 : maskTransparency); }, [maskTransparency]);\n\n const updateMaskingSettings = React.useCallback((option: MapMaskingOption) => {\n if (option === MapMaskingOption.AllModels) {\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: maskTransparency } });\n }\n if (option === MapMaskingOption.None) {\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.None } });\n }\n\n activeViewport!.invalidateRenderPlan();\n }, [activeViewport, maskTransparency]);\n\n const [masking, setMasking] = React.useState(() => getMapMaskingFromBackgroundMapSetting(backgroundMapSettings));\n\n const onMaskingToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const maskingOption = checked ? MapMaskingOption.AllModels : MapMaskingOption.None;\n updateMaskingSettings(maskingOption);\n setMasking(maskingOption);\n }, [updateMaskingSettings]);\n\n const [overrideMaskTransparency, setOverrideMaskTransparency] = React.useState(() => backgroundMapSettings.planarClipMask.transparency !== undefined);\n\n const onOverrideMaskTransparencyToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n const trans = checked ? getNormalizedMaskTransparency() : undefined;\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: trans } });\n\n setOverrideMaskTransparency(checked);\n }, [activeViewport, getNormalizedMaskTransparency]);\n\n const handleElevationChange = React.useCallback((value: number) => {\n if (value !== undefined) {\n updateBackgroundMap({ groundBias: value });\n setGroundBias(value);\n }\n }, [updateBackgroundMap]);\n\n const handleAlphaChange = React.useCallback((values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({ transparency: newTransparency });\n activeViewport!.invalidateRenderPlan();\n setTransparency(newTransparency);\n }, [activeViewport]);\n\n const handleMaskTransparencyChange = React.useCallback((values: readonly number[]) => {\n const newTransparency = values[0] / 100;\n activeViewport!.changeBackgroundMapProps({ planarClipMask: { mode: PlanarClipMaskMode.Priority, priority: PlanarClipMaskPriority.BackgroundMap, transparency: newTransparency } });\n activeViewport!.invalidateRenderPlan();\n setMaskTransparency(newTransparency);\n }, [activeViewport]);\n\n const [applyTerrain, setApplyTerrain] = React.useState(() => backgroundMapSettings.applyTerrain);\n\n const onToggleTerrain = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ applyTerrain: checked });\n setApplyTerrain(checked);\n }, [updateBackgroundMap]);\n\n const [exaggeration, setExaggeration] = React.useState(() => terrainSettings.exaggeration);\n\n const handleExaggerationChange = React.useCallback((value: number | undefined, _stringValue: string) => {\n if (undefined !== value) {\n updateTerrainSettings({ exaggeration: value });\n setExaggeration(value);\n }\n }, [updateTerrainSettings]);\n\n const [terrainOrigin, setTerrainOrigin] = React.useState(() => terrainSettings.heightOrigin);\n\n const handleHeightOriginChange = React.useCallback((value: number) => {\n if (undefined !== value) {\n updateTerrainSettings({ heightOrigin: value });\n setTerrainOrigin(value);\n }\n }, [updateTerrainSettings]);\n\n const [useDepthBuffer, setUseDepthBuffer] = React.useState(() => backgroundMapSettings.useDepthBuffer);\n const onToggleUseDepthBuffer = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ useDepthBuffer: checked });\n setUseDepthBuffer(checked);\n }, [updateBackgroundMap]);\n\n /** Disable commas and letters */\n const onKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.keyCode === 188 || (event.keyCode >= 65 && event.keyCode <= 90))\n event.preventDefault();\n }, []);\n\n const [isLocatable, setIsLocatable] = React.useState(() => backgroundMapSettings.locatable);\n const onLocatableToggle = React.useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const checked = e.target.checked;\n updateBackgroundMap({ nonLocatable: !checked });\n setIsLocatable(checked);\n }, [updateBackgroundMap]);\n\n const [transparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Transparency\"));\n const [terrainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Terrain\"));\n const [enableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Enable\"));\n const [elevationOffsetLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ElevationOffset\"));\n const [useDepthBufferLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.UseDepthBuffer\"));\n const [modelHeightLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.ModelHeight\"));\n const [heightOriginLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.HeightOrigin\"));\n const [exaggerationLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Exaggeration\"));\n const [locatableLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Locatable\"));\n const [maskingLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.Mask\"));\n const [overrideMaskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.OverrideMaskTransparency\"));\n const [maskTransparencyLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:Settings.MaskTransparency\"));\n\n return (\n <>\n <div className=\"maplayers-settings-container\">\n\n <span className=\"map-manager-settings-label\">{transparencyLabel}</span>\n <Slider min={0} max={100} values={[transparency * 100]} onChange={handleAlphaChange} step={1} />\n\n <span className=\"map-manager-settings-label\">{locatableLabel}</span>\n {/* eslint-disable-next-line deprecation/deprecation */}\n <ToggleSwitch onChange={onLocatableToggle} checked={isLocatable} />\n\n <span className=\"map-manager-settings-label\">{maskingLabel}</span>\n {/* eslint-disable-next-line deprecation/deprecation */}\n <ToggleSwitch onChange={onMaskingToggle} checked={masking !== MapMaskingOption.None} />\n\n <span className=\"map-manager-settings-label\">{overrideMaskTransparencyLabel}</span>\n <ToggleSwitch disabled={masking === MapMaskingOption.None} onChange={onOverrideMaskTransparencyToggle} checked={overrideMaskTransparency} />\n\n <span className=\"map-manager-settings-label\">{maskTransparencyLabel}</span>\n <Slider disabled={masking === MapMaskingOption.None || !overrideMaskTransparency} min={0} max={100} values={[getNormalizedMaskTransparency() * 100]} onChange={handleMaskTransparencyChange} step={1} />\n\n <>\n <span className=\"map-manager-settings-label\">{elevationOffsetLabel}</span>\n <QuantityNumberInput disabled={applyTerrain} persistenceValue={groundBias} step={1} snap quantityType={QuantityType.LengthEngineering} onChange={handleElevationChange} onKeyDown={onKeyDown}/>\n\n <span className=\"map-manager-settings-label\">{useDepthBufferLabel}</span>\n {/* eslint-disable-next-line deprecation/deprecation */}\n <ToggleSwitch disabled={applyTerrain} onChange={onToggleUseDepthBuffer} checked={useDepthBuffer} />\n </>\n\n </div>\n <div className=\"map-manager-settings-group\">\n <fieldset>\n <legend>{terrainLabel}</legend>\n\n <div className=\"maplayers-settings-container\">\n\n <span className=\"map-manager-settings-label\">{enableLabel}</span>\n {/* eslint-disable-next-line deprecation/deprecation */}\n <ToggleSwitch onChange={onToggleTerrain} checked={applyTerrain} />\n\n <span className=\"map-manager-settings-label\">{modelHeightLabel}</span>\n <QuantityNumberInput disabled={!applyTerrain} persistenceValue={terrainOrigin} snap quantityType={QuantityType.LengthEngineering} onChange={handleHeightOriginChange} onKeyDown={onKeyDown}/>\n\n <span className=\"map-manager-settings-label\">{heightOriginLabel}</span>\n {/* elevation correction component: 'popoverProps' is needed here otherwise selecting an option closes the menu popup.*/}\n <Select popoverProps={{appendTo: \"parent\"}} options={terrainHeightOptions.current} disabled={!applyTerrain} value={heightOriginMode} onChange={handleElevationTypeSelected} size=\"small\" />\n\n <span className=\"map-manager-settings-label\">{exaggerationLabel}</span>\n <NumberInput value={exaggeration} disabled={!applyTerrain} onChange={handleExaggerationChange} onKeyDown={onKeyDown} />\n </div>\n\n </fieldset>\n </div>\n </>\n );\n}\n"]}
@@ -1,30 +1,30 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- @import "~@itwin/core-react/lib/cjs/core-react/index";
6
-
7
- $divider-color: $buic-background-toolbutton-stroke;
8
- $hovered-icon-color: $buic-foreground-primary-tone;
9
-
10
- .maplayers-settings-container {
11
- display: grid;
12
- align-items: center;
13
- padding: 4px;
14
- grid-template-columns: 165px 1fr;
15
- column-gap: 8px;
16
- row-gap: 8px;
17
- overflow: hidden;
18
- }
19
-
20
- .map-manager-settings-label {
21
- text-align: right;
22
- }
23
-
24
- .map-manager-settings-group {
25
- margin-top: 1rem;
26
- }
27
-
28
- .map-manager-settings-terrain-container {
29
- margin-top: 1rem;
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ @import "~@itwin/core-react/lib/cjs/core-react/index";
6
+
7
+ $divider-color: $buic-background-toolbutton-stroke;
8
+ $hovered-icon-color: $buic-foreground-primary-tone;
9
+
10
+ .maplayers-settings-container {
11
+ display: grid;
12
+ align-items: center;
13
+ padding: 4px;
14
+ grid-template-columns: 165px 1fr;
15
+ column-gap: 8px;
16
+ row-gap: 8px;
17
+ overflow: hidden;
18
+ }
19
+
20
+ .map-manager-settings-label {
21
+ text-align: right;
22
+ }
23
+
24
+ .map-manager-settings-group {
25
+ margin-top: 1rem;
26
+ }
27
+
28
+ .map-manager-settings-terrain-container {
29
+ margin-top: 1rem;
30
30
  }