@map-colonies/react-components 3.12.2 → 3.12.3

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 (375) hide show
  1. package/.eslintignore +1 -1
  2. package/.storybook/main.js +13 -13
  3. package/.storybook/manager.js +6 -6
  4. package/.storybook/preview-head.html +21 -21
  5. package/.storybook/preview.js +18 -18
  6. package/.storybook/theme.js +9 -9
  7. package/CHANGELOG.md +828 -819
  8. package/README.md +53 -53
  9. package/dist/autocomplete/autocomplete.css +25 -25
  10. package/dist/autocomplete/autocomplete.d.ts +33 -33
  11. package/dist/autocomplete/autocomplete.js +478 -478
  12. package/dist/autocomplete/index.d.ts +1 -1
  13. package/dist/autocomplete/index.js +5 -5
  14. package/dist/box/box.d.ts +3 -3
  15. package/dist/box/box.js +35 -35
  16. package/dist/box/index.d.ts +1 -1
  17. package/dist/box/index.js +5 -5
  18. package/dist/cesium-map/data-sources/custom.data-source.d.ts +5 -5
  19. package/dist/cesium-map/data-sources/custom.data-source.js +23 -23
  20. package/dist/cesium-map/data-sources/drawings.data-source.d.ts +34 -34
  21. package/dist/cesium-map/data-sources/drawings.data-source.js +187 -187
  22. package/dist/cesium-map/data-sources/index.d.ts +2 -2
  23. package/dist/cesium-map/data-sources/index.js +14 -14
  24. package/dist/cesium-map/entities/entity.d.ts +5 -5
  25. package/dist/cesium-map/entities/entity.description.d.ts +6 -6
  26. package/dist/cesium-map/entities/entity.description.js +27 -27
  27. package/dist/cesium-map/entities/entity.js +23 -23
  28. package/dist/cesium-map/entities/graphics/polygon.graphics.d.ts +5 -5
  29. package/dist/cesium-map/entities/graphics/polygon.graphics.js +23 -23
  30. package/dist/cesium-map/entities/graphics/polyline.graphics.d.ts +5 -5
  31. package/dist/cesium-map/entities/graphics/polyline.graphics.js +23 -23
  32. package/dist/cesium-map/entities/graphics/rectangle.graphics.d.ts +5 -5
  33. package/dist/cesium-map/entities/graphics/rectangle.graphics.js +23 -23
  34. package/dist/cesium-map/entities/index.d.ts +4 -4
  35. package/dist/cesium-map/entities/index.js +16 -16
  36. package/dist/cesium-map/index.d.ts +8 -8
  37. package/dist/cesium-map/index.js +20 -20
  38. package/dist/cesium-map/layers/3d.tileset.d.ts +7 -7
  39. package/dist/cesium-map/layers/3d.tileset.js +43 -43
  40. package/dist/cesium-map/layers/3d.tileset.with.update.d.ts +6 -6
  41. package/dist/cesium-map/layers/3d.tileset.with.update.js +115 -115
  42. package/dist/cesium-map/layers/geojson.layer.d.ts +5 -5
  43. package/dist/cesium-map/layers/geojson.layer.js +23 -23
  44. package/dist/cesium-map/layers/imagery.layer.d.ts +6 -6
  45. package/dist/cesium-map/layers/imagery.layer.js +68 -68
  46. package/dist/cesium-map/layers/index.d.ts +7 -7
  47. package/dist/cesium-map/layers/index.js +19 -19
  48. package/dist/cesium-map/layers/osm.layer.d.ts +9 -9
  49. package/dist/cesium-map/layers/osm.layer.js +36 -36
  50. package/dist/cesium-map/layers/wms.layer.d.ts +9 -9
  51. package/dist/cesium-map/layers/wms.layer.js +36 -36
  52. package/dist/cesium-map/layers/wmts.layer.d.ts +9 -9
  53. package/dist/cesium-map/layers/wmts.layer.js +36 -36
  54. package/dist/cesium-map/layers/xyz.layer.d.ts +9 -9
  55. package/dist/cesium-map/layers/xyz.layer.js +36 -36
  56. package/dist/cesium-map/layers-manager.d.ts +55 -55
  57. package/dist/cesium-map/layers-manager.js +246 -246
  58. package/dist/cesium-map/map-legend/MapLegend.css +135 -135
  59. package/dist/cesium-map/map-legend/MapLegend.d.ts +15 -15
  60. package/dist/cesium-map/map-legend/MapLegend.js +57 -57
  61. package/dist/cesium-map/map-legend/MapLegendList.d.ts +13 -13
  62. package/dist/cesium-map/map-legend/MapLegendList.js +43 -43
  63. package/dist/cesium-map/map-legend/MapLegendSidebar.d.ts +16 -16
  64. package/dist/cesium-map/map-legend/MapLegendSidebar.js +20 -20
  65. package/dist/cesium-map/map-legend/MapLegendToggle.d.ts +7 -7
  66. package/dist/cesium-map/map-legend/MapLegendToggle.js +20 -20
  67. package/dist/cesium-map/map-legend/index.d.ts +3 -3
  68. package/dist/cesium-map/map-legend/index.js +14 -14
  69. package/dist/cesium-map/map.css +59 -59
  70. package/dist/cesium-map/map.d.ts +59 -59
  71. package/dist/cesium-map/map.js +305 -305
  72. package/dist/cesium-map/map.types.d.ts +8 -8
  73. package/dist/cesium-map/map.types.js +12 -12
  74. package/dist/cesium-map/proxied.types.d.ts +30 -30
  75. package/dist/cesium-map/proxied.types.js +132 -132
  76. package/dist/cesium-map/settings/base-maps.css +37 -37
  77. package/dist/cesium-map/settings/base-maps.d.ts +7 -7
  78. package/dist/cesium-map/settings/base-maps.js +78 -78
  79. package/dist/cesium-map/settings/scene-modes.css +19 -19
  80. package/dist/cesium-map/settings/scene-modes.d.ts +7 -7
  81. package/dist/cesium-map/settings/scene-modes.js +65 -65
  82. package/dist/cesium-map/settings/settings.css +52 -52
  83. package/dist/cesium-map/settings/settings.d.ts +23 -23
  84. package/dist/cesium-map/settings/settings.js +79 -79
  85. package/dist/cesium-map/terrain-providers/custom/dummy-quantized-mesh-tile.d.ts +3 -3
  86. package/dist/cesium-map/terrain-providers/custom/dummy-quantized-mesh-tile.js +245 -245
  87. package/dist/cesium-map/terrain-providers/custom/quantized-mesh-decoder.d.ts +9 -9
  88. package/dist/cesium-map/terrain-providers/custom/quantized-mesh-decoder.js +202 -202
  89. package/dist/cesium-map/terrain-providers/custom/quantized-mesh-terrain-provider.d.ts +50 -50
  90. package/dist/cesium-map/terrain-providers/custom/quantized-mesh-terrain-provider.js +136 -136
  91. package/dist/cesium-map/tools/cesium/primitives-conversions.cesium.d.ts +2 -2
  92. package/dist/cesium-map/tools/cesium/primitives-conversions.cesium.js +38 -38
  93. package/dist/cesium-map/tools/coordinates-tracker.tool.css +11 -11
  94. package/dist/cesium-map/tools/coordinates-tracker.tool.d.ts +7 -7
  95. package/dist/cesium-map/tools/coordinates-tracker.tool.js +78 -78
  96. package/dist/cesium-map/tools/draw/drawHelper.css +101 -101
  97. package/dist/cesium-map/tools/draw/drawHelper.d.ts +28 -28
  98. package/dist/cesium-map/tools/draw/drawHelper.js +1694 -1694
  99. package/dist/cesium-map/tools/geojson/geojson-to-primitive.d.ts +4 -4
  100. package/dist/cesium-map/tools/geojson/geojson-to-primitive.js +41 -41
  101. package/dist/cesium-map/tools/geojson/index.d.ts +2 -2
  102. package/dist/cesium-map/tools/geojson/index.js +14 -14
  103. package/dist/cesium-map/tools/geojson/point.geojson.d.ts +3 -3
  104. package/dist/cesium-map/tools/geojson/point.geojson.js +21 -21
  105. package/dist/cesium-map/tools/geojson/polygon.geojson.d.ts +3 -3
  106. package/dist/cesium-map/tools/geojson/polygon.geojson.js +24 -24
  107. package/dist/cesium-map/tools/geojson/rectangle.geojson.d.ts +3 -3
  108. package/dist/cesium-map/tools/geojson/rectangle.geojson.js +44 -44
  109. package/dist/cesium-map/tools/inspector.tool.d.ts +4 -4
  110. package/dist/cesium-map/tools/inspector.tool.js +33 -33
  111. package/dist/cesium-map/tools/scale-tracker.tool.css +16 -16
  112. package/dist/cesium-map/tools/scale-tracker.tool.d.ts +8 -8
  113. package/dist/cesium-map/tools/scale-tracker.tool.js +158 -158
  114. package/dist/cesium-map/tools/terranian-height.tool.d.ts +4 -4
  115. package/dist/cesium-map/tools/terranian-height.tool.js +114 -114
  116. package/dist/cssbaseline/cssbaseline.d.ts +5 -5
  117. package/dist/cssbaseline/cssbaseline.js +41 -41
  118. package/dist/cssbaseline/index.d.ts +1 -1
  119. package/dist/cssbaseline/index.js +6 -6
  120. package/dist/date-picker/date-picker.css +9 -9
  121. package/dist/date-picker/date-picker.d.ts +14 -14
  122. package/dist/date-picker/date-picker.js +78 -78
  123. package/dist/date-picker/index.d.ts +1 -1
  124. package/dist/date-picker/index.js +13 -13
  125. package/dist/date-range-picker/date-range-picker.css +9 -9
  126. package/dist/date-range-picker/date-range-picker.d.ts +26 -26
  127. package/dist/date-range-picker/date-range-picker.form-control.css +3 -3
  128. package/dist/date-range-picker/date-range-picker.form-control.d.ts +28 -28
  129. package/dist/date-range-picker/date-range-picker.form-control.js +95 -95
  130. package/dist/date-range-picker/date-range-picker.js +104 -104
  131. package/dist/date-range-picker/index.d.ts +2 -2
  132. package/dist/date-range-picker/index.js +14 -14
  133. package/dist/file-picker/file-picker.css +63 -63
  134. package/dist/file-picker/file-picker.d.ts +276 -276
  135. package/dist/file-picker/file-picker.js +151 -151
  136. package/dist/file-picker/fs-map.json +1556 -1556
  137. package/dist/file-picker/index.d.ts +2 -2
  138. package/dist/file-picker/index.js +14 -14
  139. package/dist/file-picker/localization.d.ts +11 -11
  140. package/dist/file-picker/localization.js +124 -124
  141. package/dist/index.d.ts +13 -13
  142. package/dist/index.js +25 -25
  143. package/dist/map-filter-container/container-map.css +5 -5
  144. package/dist/map-filter-container/container-map.d.ts +11 -11
  145. package/dist/map-filter-container/container-map.js +31 -31
  146. package/dist/map-filter-container/index.d.ts +1 -1
  147. package/dist/map-filter-container/index.js +13 -13
  148. package/dist/map-filter-container/map-filter-container.d.ts +9 -9
  149. package/dist/map-filter-container/map-filter-container.js +78 -78
  150. package/dist/map-filter-container/polygon-selection-ui.d.ts +12 -12
  151. package/dist/map-filter-container/polygon-selection-ui.js +62 -62
  152. package/dist/models/defaults.d.ts +28 -28
  153. package/dist/models/defaults.js +32 -32
  154. package/dist/models/enums.d.ts +14 -14
  155. package/dist/models/enums.js +20 -20
  156. package/dist/models/index.d.ts +1 -1
  157. package/dist/models/index.js +13 -13
  158. package/dist/ol-map/feature.d.ts +6 -6
  159. package/dist/ol-map/feature.js +20 -20
  160. package/dist/ol-map/index.d.ts +6 -6
  161. package/dist/ol-map/index.js +18 -18
  162. package/dist/ol-map/interactions/draw.d.ts +8 -8
  163. package/dist/ol-map/interactions/draw.js +44 -44
  164. package/dist/ol-map/interactions/index.d.ts +1 -1
  165. package/dist/ol-map/interactions/index.js +13 -13
  166. package/dist/ol-map/layers/index.d.ts +3 -3
  167. package/dist/ol-map/layers/index.js +15 -15
  168. package/dist/ol-map/layers/tile-layer.d.ts +9 -9
  169. package/dist/ol-map/layers/tile-layer.js +48 -48
  170. package/dist/ol-map/layers/vector-layer.d.ts +4 -4
  171. package/dist/ol-map/layers/vector-layer.js +48 -48
  172. package/dist/ol-map/layers/vector-tile-layer.d.ts +10 -10
  173. package/dist/ol-map/layers/vector-tile-layer.js +66 -66
  174. package/dist/ol-map/map.css +17 -17
  175. package/dist/ol-map/map.d.ts +14 -14
  176. package/dist/ol-map/map.js +117 -117
  177. package/dist/ol-map/source/index.d.ts +6 -6
  178. package/dist/ol-map/source/index.js +18 -18
  179. package/dist/ol-map/source/mvt.d.ts +11 -11
  180. package/dist/ol-map/source/mvt.js +37 -37
  181. package/dist/ol-map/source/osm.d.ts +2 -2
  182. package/dist/ol-map/source/osm.js +14 -14
  183. package/dist/ol-map/source/vector-source.d.ts +4 -4
  184. package/dist/ol-map/source/vector-source.js +45 -45
  185. package/dist/ol-map/source/wms.d.ts +17 -17
  186. package/dist/ol-map/source/wms.js +30 -30
  187. package/dist/ol-map/source/wmts.d.ts +21 -21
  188. package/dist/ol-map/source/wmts.js +59 -59
  189. package/dist/ol-map/source/xyz.d.ts +12 -12
  190. package/dist/ol-map/source/xyz.js +27 -27
  191. package/dist/ol-map/style.d.ts +4 -4
  192. package/dist/ol-map/style.js +22 -22
  193. package/dist/popover/index.d.ts +1 -1
  194. package/dist/popover/index.js +5 -5
  195. package/dist/popover/popover.d.ts +3 -3
  196. package/dist/popover/popover.js +35 -35
  197. package/dist/smart-table/__mock-data__/smartTableMocks.d.ts +7 -7
  198. package/dist/smart-table/__mock-data__/smartTableMocks.js +17 -17
  199. package/dist/smart-table/index.d.ts +2 -2
  200. package/dist/smart-table/index.js +14 -14
  201. package/dist/smart-table/smart-table-head.d.ts +11 -11
  202. package/dist/smart-table/smart-table-head.js +22 -22
  203. package/dist/smart-table/smart-table-row.d.ts +12 -12
  204. package/dist/smart-table/smart-table-row.js +46 -46
  205. package/dist/smart-table/smart-table-types.d.ts +9 -9
  206. package/dist/smart-table/smart-table-types.js +2 -2
  207. package/dist/smart-table/smart-table.d.ts +17 -17
  208. package/dist/smart-table/smart-table.js +51 -51
  209. package/dist/theme/index.d.ts +1 -1
  210. package/dist/theme/index.js +13 -13
  211. package/dist/theme/theme.d.ts +8 -8
  212. package/dist/theme/theme.js +124 -124
  213. package/dist/utils/map.d.ts +3 -3
  214. package/dist/utils/map.js +21 -21
  215. package/dist/utils/projections.d.ts +6 -6
  216. package/dist/utils/projections.js +10 -10
  217. package/dist/utils/story.d.ts +12 -12
  218. package/dist/utils/story.js +2 -2
  219. package/package.json +3 -3
  220. package/public/index.html +43 -43
  221. package/public/manifest.json +25 -25
  222. package/public/robots.txt +3 -3
  223. package/src/index.tsx +9 -9
  224. package/src/lib/autocomplete/autocomplete.css +25 -25
  225. package/src/lib/autocomplete/autocomplete.stories.tsx +101 -101
  226. package/src/lib/autocomplete/autocomplete.tsx +681 -681
  227. package/src/lib/autocomplete/index.ts +1 -1
  228. package/src/lib/box/box.tsx +7 -7
  229. package/src/lib/box/index.ts +1 -1
  230. package/src/lib/cesium-map/context-menu.stories.tsx +444 -444
  231. package/src/lib/cesium-map/data-sources/custom.data-source.tsx +12 -12
  232. package/src/lib/cesium-map/data-sources/drawings.data-source.stories.tsx +161 -161
  233. package/src/lib/cesium-map/data-sources/drawings.data-source.tsx +204 -204
  234. package/src/lib/cesium-map/data-sources/index.ts +2 -2
  235. package/src/lib/cesium-map/entities/entity.description.tsx +19 -19
  236. package/src/lib/cesium-map/entities/entity.graphics.stories.tsx +48 -48
  237. package/src/lib/cesium-map/entities/entity.stories.tsx +146 -146
  238. package/src/lib/cesium-map/entities/entity.tsx +10 -10
  239. package/src/lib/cesium-map/entities/graphics/polygon.graphics.tsx +12 -12
  240. package/src/lib/cesium-map/entities/graphics/polyline.graphics.tsx +12 -12
  241. package/src/lib/cesium-map/entities/graphics/rectangle.graphics.tsx +12 -12
  242. package/src/lib/cesium-map/entities/index.ts +4 -4
  243. package/src/lib/cesium-map/index.ts +8 -8
  244. package/src/lib/cesium-map/layers/3d.tileset.stories.tsx +164 -164
  245. package/src/lib/cesium-map/layers/3d.tileset.tsx +51 -51
  246. package/src/lib/cesium-map/layers/3d.tileset.with.update.tsx +120 -120
  247. package/src/lib/cesium-map/layers/geojson.layer.stories.tsx +119 -119
  248. package/src/lib/cesium-map/layers/geojson.layer.tsx +12 -12
  249. package/src/lib/cesium-map/layers/imagery.layer.stories.tsx +39 -39
  250. package/src/lib/cesium-map/layers/imagery.layer.tsx +37 -37
  251. package/src/lib/cesium-map/layers/index.ts +7 -7
  252. package/src/lib/cesium-map/layers/layers.rect.stories.tsx +171 -171
  253. package/src/lib/cesium-map/layers/osm.layer.stories.tsx +40 -40
  254. package/src/lib/cesium-map/layers/osm.layer.tsx +22 -22
  255. package/src/lib/cesium-map/layers/wms.layer.stories.tsx +38 -38
  256. package/src/lib/cesium-map/layers/wms.layer.tsx +22 -22
  257. package/src/lib/cesium-map/layers/wmts.layer.stories.tsx +53 -53
  258. package/src/lib/cesium-map/layers/wmts.layer.tsx +22 -22
  259. package/src/lib/cesium-map/layers/xyz.layer.stories.tsx +37 -37
  260. package/src/lib/cesium-map/layers/xyz.layer.tsx +22 -22
  261. package/src/lib/cesium-map/layers-manager.stories.tsx +286 -286
  262. package/src/lib/cesium-map/layers-manager.ts +354 -354
  263. package/src/lib/cesium-map/map-legend/MapLegend.css +135 -135
  264. package/src/lib/cesium-map/map-legend/MapLegend.tsx +92 -92
  265. package/src/lib/cesium-map/map-legend/MapLegendList.tsx +47 -47
  266. package/src/lib/cesium-map/map-legend/MapLegendSidebar.tsx +55 -55
  267. package/src/lib/cesium-map/map-legend/MapLegendToggle.tsx +31 -31
  268. package/src/lib/cesium-map/map-legend/index.tsx +3 -3
  269. package/src/lib/cesium-map/map-legend/legends-sidebar.stories.tsx +201 -201
  270. package/src/lib/cesium-map/map.css +59 -59
  271. package/src/lib/cesium-map/map.stories.tsx +143 -143
  272. package/src/lib/cesium-map/map.tsx +446 -446
  273. package/src/lib/cesium-map/map.types.ts +11 -11
  274. package/src/lib/cesium-map/proxied.types.ts +54 -54
  275. package/src/lib/cesium-map/settings/base-maps.css +37 -37
  276. package/src/lib/cesium-map/settings/base-maps.tsx +94 -94
  277. package/src/lib/cesium-map/settings/scene-modes.css +19 -19
  278. package/src/lib/cesium-map/settings/scene-modes.tsx +100 -100
  279. package/src/lib/cesium-map/settings/settings.css +52 -52
  280. package/src/lib/cesium-map/settings/settings.stories.tsx +182 -182
  281. package/src/lib/cesium-map/settings/settings.tsx +141 -141
  282. package/src/lib/cesium-map/terrain-providers/custom/dummy-quantized-mesh-tile.ts +243 -243
  283. package/src/lib/cesium-map/terrain-providers/custom/quantized-mesh-decoder.ts +321 -321
  284. package/src/lib/cesium-map/terrain-providers/custom/quantized-mesh-terrain-provider.ts +237 -237
  285. package/src/lib/cesium-map/terrain-providers/terrain-provider-heights-tool.stories.tsx +170 -170
  286. package/src/lib/cesium-map/terrain-providers/terrain-provider.stories.tsx +187 -187
  287. package/src/lib/cesium-map/tools/cesium/primitives-conversions.cesium.ts +15 -15
  288. package/src/lib/cesium-map/tools/coordinates-tracker.tool.css +11 -11
  289. package/src/lib/cesium-map/tools/coordinates-tracker.tool.tsx +79 -79
  290. package/src/lib/cesium-map/tools/draw/drawHelper.css +101 -101
  291. package/src/lib/cesium-map/tools/draw/drawHelper.ts +2116 -2116
  292. package/src/lib/cesium-map/tools/geojson/geojson-to-primitive.ts +54 -54
  293. package/src/lib/cesium-map/tools/geojson/index.ts +2 -2
  294. package/src/lib/cesium-map/tools/geojson/point.geojson.ts +29 -29
  295. package/src/lib/cesium-map/tools/geojson/polygon.geojson.ts +24 -24
  296. package/src/lib/cesium-map/tools/geojson/rectangle.geojson.ts +21 -21
  297. package/src/lib/cesium-map/tools/inspector.tool.tsx +15 -15
  298. package/src/lib/cesium-map/tools/scale-tracker.tool.css +16 -16
  299. package/src/lib/cesium-map/tools/scale-tracker.tool.tsx +192 -192
  300. package/src/lib/cesium-map/tools/terranian-height.tool.tsx +171 -171
  301. package/src/lib/cssbaseline/cssbaseline.tsx +19 -19
  302. package/src/lib/cssbaseline/index.ts +4 -4
  303. package/src/lib/date-picker/date-picker.css +9 -9
  304. package/src/lib/date-picker/date-picker.stories.tsx +130 -130
  305. package/src/lib/date-picker/date-picker.tsx +90 -90
  306. package/src/lib/date-picker/index.ts +1 -1
  307. package/src/lib/date-range-picker/date-range-picker.css +9 -9
  308. package/src/lib/date-range-picker/date-range-picker.form-control.css +3 -3
  309. package/src/lib/date-range-picker/date-range-picker.form-control.spec.tsx +58 -58
  310. package/src/lib/date-range-picker/date-range-picker.form-control.tsx +150 -150
  311. package/src/lib/date-range-picker/date-range-picker.stories.tsx +207 -207
  312. package/src/lib/date-range-picker/date-range-picker.tsx +156 -156
  313. package/src/lib/date-range-picker/index.ts +2 -2
  314. package/src/lib/file-picker/file-picker.css +63 -63
  315. package/src/lib/file-picker/file-picker.stories.tsx +447 -447
  316. package/src/lib/file-picker/file-picker.tsx +180 -180
  317. package/src/lib/file-picker/fs-map.json +1556 -1556
  318. package/src/lib/file-picker/index.ts +2 -2
  319. package/src/lib/file-picker/localization.ts +164 -164
  320. package/src/lib/index.ts +13 -13
  321. package/src/lib/map-filter-container/container-map.css +5 -5
  322. package/src/lib/map-filter-container/container-map.tsx +48 -48
  323. package/src/lib/map-filter-container/index.ts +1 -1
  324. package/src/lib/map-filter-container/map-filter-container.tsx +91 -91
  325. package/src/lib/map-filter-container/polygon-selection-ui.spec.tsx +119 -119
  326. package/src/lib/map-filter-container/polygon-selection-ui.tsx +111 -111
  327. package/src/lib/map-filter-container/stories/Map.stories.tsx +76 -76
  328. package/src/lib/models/defaults.ts +32 -32
  329. package/src/lib/models/enums.ts +16 -16
  330. package/src/lib/models/index.ts +1 -1
  331. package/src/lib/ol-map/feature.tsx +23 -23
  332. package/src/lib/ol-map/index.ts +6 -6
  333. package/src/lib/ol-map/interactions/draw.tsx +56 -56
  334. package/src/lib/ol-map/interactions/index.ts +1 -1
  335. package/src/lib/ol-map/layers/index.ts +3 -3
  336. package/src/lib/ol-map/layers/tile-layer.tsx +36 -36
  337. package/src/lib/ol-map/layers/vector-layer.tsx +32 -32
  338. package/src/lib/ol-map/layers/vector-tile-layer.tsx +56 -56
  339. package/src/lib/ol-map/map.css +17 -17
  340. package/src/lib/ol-map/map.tsx +137 -137
  341. package/src/lib/ol-map/source/index.ts +6 -6
  342. package/src/lib/ol-map/source/mvt.tsx +46 -46
  343. package/src/lib/ol-map/source/osm.tsx +13 -13
  344. package/src/lib/ol-map/source/stories/mvt.stories.tsx +68 -68
  345. package/src/lib/ol-map/source/stories/vector-source.stories.tsx +78 -78
  346. package/src/lib/ol-map/source/stories/wms.stories.tsx +51 -51
  347. package/src/lib/ol-map/source/stories/wmts.stories.tsx +72 -72
  348. package/src/lib/ol-map/source/stories/xyz.stories.tsx +53 -53
  349. package/src/lib/ol-map/source/vector-source.tsx +30 -30
  350. package/src/lib/ol-map/source/wms.tsx +40 -40
  351. package/src/lib/ol-map/source/wmts.tsx +82 -82
  352. package/src/lib/ol-map/source/xyz.tsx +33 -33
  353. package/src/lib/ol-map/stories/map.stories.tsx +60 -60
  354. package/src/lib/ol-map/style.ts +24 -24
  355. package/src/lib/popover/index.ts +1 -1
  356. package/src/lib/popover/popover.tsx +7 -7
  357. package/src/lib/smart-table/__mock-data__/smartTableMocks.ts +22 -22
  358. package/src/lib/smart-table/index.ts +2 -2
  359. package/src/lib/smart-table/smart-table-head.spec.tsx +116 -116
  360. package/src/lib/smart-table/smart-table-head.tsx +47 -47
  361. package/src/lib/smart-table/smart-table-row.spec.tsx +109 -109
  362. package/src/lib/smart-table/smart-table-row.tsx +78 -78
  363. package/src/lib/smart-table/smart-table-types.ts +10 -10
  364. package/src/lib/smart-table/smart-table.spec.tsx +116 -116
  365. package/src/lib/smart-table/smart-table.tsx +115 -115
  366. package/src/lib/smart-table/stories/SmartTable.stories.tsx +114 -114
  367. package/src/lib/theme/index.ts +1 -1
  368. package/src/lib/theme/theme.ts +123 -123
  369. package/src/lib/utils/map.ts +19 -19
  370. package/src/lib/utils/projections.ts +7 -7
  371. package/src/lib/utils/story.ts +11 -11
  372. package/src/react-app-env.d.ts +1 -1
  373. package/src/setupTests.ts +14 -14
  374. package/tsbuildconfig.json +37 -37
  375. package/tsconfig.json +26 -26
@@ -1,446 +1,446 @@
1
- import React, {
2
- createContext,
3
- useContext,
4
- useEffect,
5
- useState,
6
- useRef,
7
- useCallback,
8
- } from 'react';
9
- import { createPortal } from 'react-dom';
10
- import { Viewer, CesiumComponentRef } from 'resium';
11
- import { ViewerProps } from 'resium/dist/types/src/Viewer/Viewer';
12
- import {
13
- Viewer as CesiumViewerCls,
14
- Cartesian3,
15
- SceneMode,
16
- Cartesian2,
17
- Matrix4,
18
- PerspectiveFrustum,
19
- PerspectiveOffCenterFrustum,
20
- OrthographicFrustum,
21
- ScreenSpaceEventType,
22
- TerrainProvider,
23
- } from 'cesium';
24
- import { isNumber, isArray } from 'lodash';
25
- import { getAltitude, toDegrees } from '../utils/map';
26
- import { Box } from '../box';
27
- import { Proj } from '../utils/projections';
28
- import { CoordinatesTrackerTool } from './tools/coordinates-tracker.tool';
29
- import { ScaleTrackerTool } from './tools/scale-tracker.tool';
30
- import { CesiumSettings, IBaseMap, IBaseMaps } from './settings/settings';
31
- import { IMapLegend, MapLegendSidebar, MapLegendToggle } from './map-legend';
32
- import LayerManager, { LegendExtractor } from './layers-manager';
33
- import { CesiumSceneMode, CesiumSceneModeEnum } from './map.types';
34
-
35
- import './map.css';
36
-
37
- const DEFAULT_HEIGHT = 212;
38
- const DEFAULT_WIDTH = 260;
39
- const DEFAULT_DYNAMIC_HEIGHT_INCREMENT = 0;
40
-
41
- interface ICameraPosition {
42
- longitude: number;
43
- latitude: number;
44
- height: number | undefined;
45
- }
46
-
47
- interface ICameraState {
48
- position: ICameraPosition;
49
- direction?: Cartesian3;
50
- up?: Cartesian3;
51
- right?: Cartesian3;
52
- transform?: Matrix4;
53
- frustum?:
54
- | PerspectiveFrustum
55
- | PerspectiveOffCenterFrustum
56
- | OrthographicFrustum;
57
- }
58
- export class CesiumViewer extends CesiumViewerCls {
59
- public layersManager?: LayerManager;
60
-
61
- public constructor(
62
- container: string | Element,
63
- options?: CesiumViewerCls.ConstructorOptions
64
- ) {
65
- super(container, options);
66
- }
67
- }
68
-
69
- const mapContext = createContext<CesiumViewer | null>(null);
70
- const MapViewProvider = mapContext.Provider;
71
- const cameraPositionRefreshRate = 10000;
72
-
73
- export interface IContextMenuData {
74
- data: Record<string, unknown>[];
75
- position: {
76
- x: number;
77
- y: number;
78
- };
79
- style?: Record<string, string>;
80
- size?: {
81
- height: number;
82
- width: number;
83
- };
84
- handleClose: () => void;
85
- }
86
-
87
- interface ILegends {
88
- legendsList?: IMapLegend[];
89
- emptyText?: string;
90
- title?: string;
91
- actionsTexts?: { docText: string; imgText: string };
92
- mapLegendsExtractor?: LegendExtractor;
93
- }
94
-
95
- export interface CesiumMapProps extends ViewerProps {
96
- showMousePosition?: boolean;
97
- showScale?: boolean;
98
- projection?: Proj;
99
- center?: [number, number];
100
- zoom?: number;
101
- locale?: { [key: string]: string };
102
- sceneModes?: CesiumSceneModeEnum[];
103
- baseMaps?: IBaseMaps;
104
- terrainProvider?: TerrainProvider;
105
- imageryContextMenu?: React.ReactElement<IContextMenuData>;
106
- imageryContextMenuSize?: {
107
- height: number;
108
- width: number;
109
- dynamicHeightIncrement?: number;
110
- };
111
- legends?: ILegends;
112
- }
113
-
114
- export const useCesiumMap = (): CesiumViewer => {
115
- const mapViewer = useContext(mapContext);
116
-
117
- if (mapViewer === null) {
118
- throw new Error('map context is null, please check the provider');
119
- }
120
-
121
- return mapViewer;
122
- };
123
-
124
- export const CesiumMap: React.FC<CesiumMapProps> = (props) => {
125
- const ref = useRef<CesiumComponentRef<CesiumViewer>>(null);
126
- const [mapViewRef, setMapViewRef] = useState<CesiumViewer>();
127
- const [projection, setProjection] = useState<Proj>();
128
- const [showMousePosition, setShowMousePosition] = useState<boolean>();
129
- const [showScale, setShowScale] = useState<boolean>();
130
- const [locale, setLocale] = useState<{ [key: string]: string }>();
131
- const [cameraState, setCameraState] = useState<ICameraState | undefined>();
132
- const [sceneModes, setSceneModes] = useState<
133
- CesiumSceneModeEnum[] | undefined
134
- >();
135
- const [legendsList, setLegendsList] = useState<IMapLegend[]>([]);
136
- const [baseMaps, setBaseMaps] = useState<IBaseMaps | undefined>();
137
- const [showImageryMenu, setShowImageryMenu] = useState<boolean>(false);
138
- const [imageryMenuPosition, setImageryMenuPosition] = useState<
139
- Record<string, unknown> | undefined
140
- >(undefined);
141
- const [isLegendsSidebarOpen, setIsLegendsSidebarOpen] = useState<boolean>(
142
- false
143
- );
144
-
145
- const viewerProps = {
146
- fullscreenButton: true,
147
- timeline: false,
148
- animation: false,
149
- baseLayerPicker: false,
150
- geocoder: false,
151
- navigationHelpButton: false,
152
- homeButton: false,
153
- sceneModePicker: false,
154
- ...(props as ViewerProps),
155
- };
156
-
157
- const getImageryMenuStyle = (
158
- x: number,
159
- y: number,
160
- menuWidth: number,
161
- menuHeight: number,
162
- menuDynamicHeightIncrement: number
163
- ): Record<string, string> => {
164
- const container = (mapViewRef as CesiumViewer).container;
165
- const mapWidth = container.clientWidth;
166
- const mapHeight = container.clientHeight;
167
- const calculatedHeight = menuHeight + menuDynamicHeightIncrement;
168
- return {
169
- left: `${
170
- mapWidth - x < menuWidth ? x - (menuWidth - (mapWidth - x)) : x
171
- }px`,
172
- top: `${
173
- mapHeight - y < calculatedHeight
174
- ? y - (calculatedHeight - (mapHeight - y))
175
- : y
176
- }px`,
177
- };
178
- };
179
-
180
- useEffect(() => {
181
- if (ref.current) {
182
- const viewer = ref.current.cesiumElement as CesiumViewer;
183
-
184
- if (props.imageryContextMenu) {
185
- viewer.screenSpaceEventHandler.setInputAction(
186
- (evt: Record<string, unknown>) => {
187
- // console.log('RIGHT click', evt.position);
188
- setShowImageryMenu(false);
189
- setImageryMenuPosition(evt.position as Record<string, unknown>);
190
- setShowImageryMenu(true);
191
- },
192
- ScreenSpaceEventType.RIGHT_CLICK
193
- );
194
- }
195
- }
196
- setMapViewRef(ref.current?.cesiumElement);
197
- }, [ref, props.imageryContextMenu]);
198
-
199
- useEffect(() => {
200
- if (mapViewRef) {
201
- mapViewRef.layersManager = new LayerManager(
202
- mapViewRef,
203
- props.legends?.mapLegendsExtractor,
204
- () => {
205
- setLegendsList(
206
- mapViewRef?.layersManager?.legendsList as IMapLegend[]
207
- );
208
- }
209
- );
210
- }
211
- }, [mapViewRef]);
212
-
213
- useEffect(() => {
214
- setSceneModes(
215
- props.sceneModes ?? [
216
- CesiumSceneMode.SCENE2D,
217
- CesiumSceneMode.SCENE3D,
218
- CesiumSceneMode.COLUMBUS_VIEW,
219
- ]
220
- );
221
- }, [props.sceneModes]);
222
-
223
- useEffect(() => {
224
- setBaseMaps(props.baseMaps);
225
-
226
- const currentMap = props.baseMaps?.maps.find(
227
- (map: IBaseMap) => map.isCurrent
228
- );
229
- if (currentMap && mapViewRef) {
230
- mapViewRef.layersManager?.setBaseMapLayers(currentMap);
231
- }
232
- }, [props.baseMaps, mapViewRef]);
233
-
234
- useEffect(() => {
235
- setProjection(props.projection ?? Proj.WGS84);
236
- }, [props.projection]);
237
-
238
- useEffect(() => {
239
- setLocale(props.locale);
240
- }, [props.locale]);
241
-
242
- useEffect(() => {
243
- setShowMousePosition(props.showMousePosition ?? true);
244
- }, [props.showMousePosition]);
245
-
246
- useEffect(() => {
247
- setShowScale(props.showScale ?? true);
248
- }, [props.showScale]);
249
-
250
- useEffect(() => {
251
- const getCameraPosition = (): ICameraPosition => {
252
- if (mapViewRef === undefined) {
253
- return {
254
- longitude: 0,
255
- latitude: 0,
256
- height: 0,
257
- };
258
- }
259
-
260
- const getCameraPositionCartographic = (): ICameraPosition => {
261
- const camPos = mapViewRef.camera.positionCartographic;
262
- return {
263
- longitude: toDegrees(camPos.longitude),
264
- latitude: toDegrees(camPos.latitude),
265
- height: camPos.height,
266
- };
267
- };
268
-
269
- // https://stackoverflow.com/questions/33348761/get-center-in-cesium-map
270
- if (mapViewRef.scene.mode === SceneMode.SCENE3D) {
271
- const windowPosition = new Cartesian2(
272
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers
273
- mapViewRef.container.clientWidth / 2,
274
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers
275
- mapViewRef.container.clientHeight / 2
276
- );
277
- const pickRay = mapViewRef.scene.camera.getPickRay(windowPosition);
278
- const pickPosition = mapViewRef.scene.globe.pick(
279
- pickRay,
280
- mapViewRef.scene
281
- );
282
- const pickPositionCartographic = mapViewRef.scene.globe.ellipsoid.cartesianToCartographic(
283
- pickPosition as Cartesian3
284
- );
285
-
286
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
287
- return pickPositionCartographic !== undefined
288
- ? {
289
- longitude: toDegrees(pickPositionCartographic.longitude),
290
- latitude: toDegrees(pickPositionCartographic.latitude),
291
- height: mapViewRef.scene.camera.positionCartographic.height,
292
- }
293
- : getCameraPositionCartographic();
294
- } else {
295
- return getCameraPositionCartographic();
296
- }
297
- };
298
-
299
- const intervalHandle = setInterval(() => {
300
- if (mapViewRef && mapViewRef.scene.mode !== SceneMode.MORPHING) {
301
- const camera = mapViewRef.camera;
302
-
303
- const store: ICameraState = {
304
- position: getCameraPosition(),
305
- direction: camera.direction.clone(),
306
- up: camera.up.clone(),
307
- right: camera.right.clone(),
308
- transform: camera.transform.clone(),
309
- frustum: camera.frustum.clone(),
310
- };
311
- setCameraState(store);
312
- }
313
- }, cameraPositionRefreshRate);
314
-
315
- return (): void => {
316
- clearInterval(intervalHandle);
317
- };
318
- }, [mapViewRef]);
319
-
320
- useEffect(() => {
321
- const morphCompleteHandler = (): void => {
322
- if (mapViewRef && cameraState) {
323
- void mapViewRef.camera.flyTo({
324
- destination: Cartesian3.fromDegrees(
325
- cameraState.position.longitude,
326
- cameraState.position.latitude,
327
- cameraState.position.height
328
- ),
329
- duration: 0,
330
- });
331
- }
332
- };
333
- if (mapViewRef) {
334
- mapViewRef.scene.morphComplete.addEventListener(morphCompleteHandler);
335
- }
336
- return (): void => {
337
- if (mapViewRef) {
338
- mapViewRef.scene.morphComplete.removeEventListener(
339
- morphCompleteHandler
340
- );
341
- }
342
- };
343
- }, [mapViewRef, cameraState]);
344
-
345
- useEffect(() => {
346
- const zoom = props.zoom;
347
- const center = props.center;
348
- if (mapViewRef && isNumber(zoom) && isArray(center)) {
349
- void mapViewRef.camera.flyTo({
350
- destination: Cartesian3.fromDegrees(
351
- center[0],
352
- center[1],
353
- getAltitude(zoom)
354
- ),
355
- duration: 0,
356
- });
357
- }
358
- }, [props.zoom, props.center, mapViewRef]);
359
-
360
- const bindCustomToolsToViewer = useCallback((): JSX.Element | undefined => {
361
- return (
362
- mapViewRef &&
363
- createPortal(
364
- <>
365
- <Box className="sideToolsContainer">
366
- <CesiumSettings
367
- sceneModes={sceneModes as CesiumSceneModeEnum[]}
368
- baseMaps={baseMaps}
369
- locale={locale}
370
- />
371
- <MapLegendToggle
372
- onClick={(): void =>
373
- setIsLegendsSidebarOpen(!isLegendsSidebarOpen)
374
- }
375
- />
376
- </Box>
377
- <Box className="toolsContainer">
378
- {showMousePosition === true ? (
379
- <CoordinatesTrackerTool projection={projection} />
380
- ) : (
381
- <></>
382
- )}
383
- {showScale === true ? <ScaleTrackerTool locale={locale} /> : <></>}
384
- </Box>
385
- </>,
386
- document.querySelector('.cesium-viewer') as Element
387
- )
388
- );
389
- }, [
390
- baseMaps,
391
- locale,
392
- mapViewRef,
393
- projection,
394
- sceneModes,
395
- showMousePosition,
396
- showScale,
397
- isLegendsSidebarOpen,
398
- ]);
399
-
400
- return (
401
- <Viewer className="viewer" full ref={ref} {...viewerProps}>
402
- <MapViewProvider value={mapViewRef as CesiumViewer}>
403
- <MapLegendSidebar
404
- title={props.legends?.title}
405
- isOpen={isLegendsSidebarOpen}
406
- toggleSidebar={(): void =>
407
- setIsLegendsSidebarOpen(!isLegendsSidebarOpen)
408
- }
409
- noLegendsText={props.legends?.emptyText}
410
- legends={props.legends?.legendsList ?? legendsList}
411
- actionsTexts={props.legends?.actionsTexts}
412
- />
413
- {props.children}
414
- {bindCustomToolsToViewer()}
415
- {props.imageryContextMenu &&
416
- showImageryMenu &&
417
- imageryMenuPosition &&
418
- React.cloneElement(props.imageryContextMenu, {
419
- data: (mapViewRef?.layersManager?.findLayerByPOI(
420
- imageryMenuPosition.x as number,
421
- imageryMenuPosition.y as number
422
- ) as unknown) as Record<string, unknown>[],
423
- position: {
424
- x: imageryMenuPosition.x as number,
425
- y: imageryMenuPosition.y as number,
426
- },
427
- style: getImageryMenuStyle(
428
- imageryMenuPosition.x as number,
429
- imageryMenuPosition.y as number,
430
- props.imageryContextMenuSize?.width ?? DEFAULT_WIDTH,
431
- props.imageryContextMenuSize?.height ?? DEFAULT_HEIGHT,
432
- props.imageryContextMenuSize?.dynamicHeightIncrement ??
433
- DEFAULT_DYNAMIC_HEIGHT_INCREMENT
434
- ),
435
- size: props.imageryContextMenuSize ?? {
436
- height: DEFAULT_HEIGHT,
437
- width: DEFAULT_WIDTH,
438
- },
439
- handleClose: () => {
440
- setShowImageryMenu(!showImageryMenu);
441
- },
442
- })}
443
- </MapViewProvider>
444
- </Viewer>
445
- );
446
- };
1
+ import React, {
2
+ createContext,
3
+ useContext,
4
+ useEffect,
5
+ useState,
6
+ useRef,
7
+ useCallback,
8
+ } from 'react';
9
+ import { createPortal } from 'react-dom';
10
+ import { Viewer, CesiumComponentRef } from 'resium';
11
+ import { ViewerProps } from 'resium/dist/types/src/Viewer/Viewer';
12
+ import {
13
+ Viewer as CesiumViewerCls,
14
+ Cartesian3,
15
+ SceneMode,
16
+ Cartesian2,
17
+ Matrix4,
18
+ PerspectiveFrustum,
19
+ PerspectiveOffCenterFrustum,
20
+ OrthographicFrustum,
21
+ ScreenSpaceEventType,
22
+ TerrainProvider,
23
+ } from 'cesium';
24
+ import { isNumber, isArray } from 'lodash';
25
+ import { getAltitude, toDegrees } from '../utils/map';
26
+ import { Box } from '../box';
27
+ import { Proj } from '../utils/projections';
28
+ import { CoordinatesTrackerTool } from './tools/coordinates-tracker.tool';
29
+ import { ScaleTrackerTool } from './tools/scale-tracker.tool';
30
+ import { CesiumSettings, IBaseMap, IBaseMaps } from './settings/settings';
31
+ import { IMapLegend, MapLegendSidebar, MapLegendToggle } from './map-legend';
32
+ import LayerManager, { LegendExtractor } from './layers-manager';
33
+ import { CesiumSceneMode, CesiumSceneModeEnum } from './map.types';
34
+
35
+ import './map.css';
36
+
37
+ const DEFAULT_HEIGHT = 212;
38
+ const DEFAULT_WIDTH = 260;
39
+ const DEFAULT_DYNAMIC_HEIGHT_INCREMENT = 0;
40
+
41
+ interface ICameraPosition {
42
+ longitude: number;
43
+ latitude: number;
44
+ height: number | undefined;
45
+ }
46
+
47
+ interface ICameraState {
48
+ position: ICameraPosition;
49
+ direction?: Cartesian3;
50
+ up?: Cartesian3;
51
+ right?: Cartesian3;
52
+ transform?: Matrix4;
53
+ frustum?:
54
+ | PerspectiveFrustum
55
+ | PerspectiveOffCenterFrustum
56
+ | OrthographicFrustum;
57
+ }
58
+ export class CesiumViewer extends CesiumViewerCls {
59
+ public layersManager?: LayerManager;
60
+
61
+ public constructor(
62
+ container: string | Element,
63
+ options?: CesiumViewerCls.ConstructorOptions
64
+ ) {
65
+ super(container, options);
66
+ }
67
+ }
68
+
69
+ const mapContext = createContext<CesiumViewer | null>(null);
70
+ const MapViewProvider = mapContext.Provider;
71
+ const cameraPositionRefreshRate = 10000;
72
+
73
+ export interface IContextMenuData {
74
+ data: Record<string, unknown>[];
75
+ position: {
76
+ x: number;
77
+ y: number;
78
+ };
79
+ style?: Record<string, string>;
80
+ size?: {
81
+ height: number;
82
+ width: number;
83
+ };
84
+ handleClose: () => void;
85
+ }
86
+
87
+ interface ILegends {
88
+ legendsList?: IMapLegend[];
89
+ emptyText?: string;
90
+ title?: string;
91
+ actionsTexts?: { docText: string; imgText: string };
92
+ mapLegendsExtractor?: LegendExtractor;
93
+ }
94
+
95
+ export interface CesiumMapProps extends ViewerProps {
96
+ showMousePosition?: boolean;
97
+ showScale?: boolean;
98
+ projection?: Proj;
99
+ center?: [number, number];
100
+ zoom?: number;
101
+ locale?: { [key: string]: string };
102
+ sceneModes?: CesiumSceneModeEnum[];
103
+ baseMaps?: IBaseMaps;
104
+ terrainProvider?: TerrainProvider;
105
+ imageryContextMenu?: React.ReactElement<IContextMenuData>;
106
+ imageryContextMenuSize?: {
107
+ height: number;
108
+ width: number;
109
+ dynamicHeightIncrement?: number;
110
+ };
111
+ legends?: ILegends;
112
+ }
113
+
114
+ export const useCesiumMap = (): CesiumViewer => {
115
+ const mapViewer = useContext(mapContext);
116
+
117
+ if (mapViewer === null) {
118
+ throw new Error('map context is null, please check the provider');
119
+ }
120
+
121
+ return mapViewer;
122
+ };
123
+
124
+ export const CesiumMap: React.FC<CesiumMapProps> = (props) => {
125
+ const ref = useRef<CesiumComponentRef<CesiumViewer>>(null);
126
+ const [mapViewRef, setMapViewRef] = useState<CesiumViewer>();
127
+ const [projection, setProjection] = useState<Proj>();
128
+ const [showMousePosition, setShowMousePosition] = useState<boolean>();
129
+ const [showScale, setShowScale] = useState<boolean>();
130
+ const [locale, setLocale] = useState<{ [key: string]: string }>();
131
+ const [cameraState, setCameraState] = useState<ICameraState | undefined>();
132
+ const [sceneModes, setSceneModes] = useState<
133
+ CesiumSceneModeEnum[] | undefined
134
+ >();
135
+ const [legendsList, setLegendsList] = useState<IMapLegend[]>([]);
136
+ const [baseMaps, setBaseMaps] = useState<IBaseMaps | undefined>();
137
+ const [showImageryMenu, setShowImageryMenu] = useState<boolean>(false);
138
+ const [imageryMenuPosition, setImageryMenuPosition] = useState<
139
+ Record<string, unknown> | undefined
140
+ >(undefined);
141
+ const [isLegendsSidebarOpen, setIsLegendsSidebarOpen] = useState<boolean>(
142
+ false
143
+ );
144
+
145
+ const viewerProps = {
146
+ fullscreenButton: true,
147
+ timeline: false,
148
+ animation: false,
149
+ baseLayerPicker: false,
150
+ geocoder: false,
151
+ navigationHelpButton: false,
152
+ homeButton: false,
153
+ sceneModePicker: false,
154
+ ...(props as ViewerProps),
155
+ };
156
+
157
+ const getImageryMenuStyle = (
158
+ x: number,
159
+ y: number,
160
+ menuWidth: number,
161
+ menuHeight: number,
162
+ menuDynamicHeightIncrement: number
163
+ ): Record<string, string> => {
164
+ const container = (mapViewRef as CesiumViewer).container;
165
+ const mapWidth = container.clientWidth;
166
+ const mapHeight = container.clientHeight;
167
+ const calculatedHeight = menuHeight + menuDynamicHeightIncrement;
168
+ return {
169
+ left: `${
170
+ mapWidth - x < menuWidth ? x - (menuWidth - (mapWidth - x)) : x
171
+ }px`,
172
+ top: `${
173
+ mapHeight - y < calculatedHeight
174
+ ? y - (calculatedHeight - (mapHeight - y))
175
+ : y
176
+ }px`,
177
+ };
178
+ };
179
+
180
+ useEffect(() => {
181
+ if (ref.current) {
182
+ const viewer = ref.current.cesiumElement as CesiumViewer;
183
+
184
+ if (props.imageryContextMenu) {
185
+ viewer.screenSpaceEventHandler.setInputAction(
186
+ (evt: Record<string, unknown>) => {
187
+ // console.log('RIGHT click', evt.position);
188
+ setShowImageryMenu(false);
189
+ setImageryMenuPosition(evt.position as Record<string, unknown>);
190
+ setShowImageryMenu(true);
191
+ },
192
+ ScreenSpaceEventType.RIGHT_CLICK
193
+ );
194
+ }
195
+ }
196
+ setMapViewRef(ref.current?.cesiumElement);
197
+ }, [ref, props.imageryContextMenu]);
198
+
199
+ useEffect(() => {
200
+ if (mapViewRef) {
201
+ mapViewRef.layersManager = new LayerManager(
202
+ mapViewRef,
203
+ props.legends?.mapLegendsExtractor,
204
+ () => {
205
+ setLegendsList(
206
+ mapViewRef?.layersManager?.legendsList as IMapLegend[]
207
+ );
208
+ }
209
+ );
210
+ }
211
+ }, [mapViewRef]);
212
+
213
+ useEffect(() => {
214
+ setSceneModes(
215
+ props.sceneModes ?? [
216
+ CesiumSceneMode.SCENE2D,
217
+ CesiumSceneMode.SCENE3D,
218
+ CesiumSceneMode.COLUMBUS_VIEW,
219
+ ]
220
+ );
221
+ }, [props.sceneModes]);
222
+
223
+ useEffect(() => {
224
+ setBaseMaps(props.baseMaps);
225
+
226
+ const currentMap = props.baseMaps?.maps.find(
227
+ (map: IBaseMap) => map.isCurrent
228
+ );
229
+ if (currentMap && mapViewRef) {
230
+ mapViewRef.layersManager?.setBaseMapLayers(currentMap);
231
+ }
232
+ }, [props.baseMaps, mapViewRef]);
233
+
234
+ useEffect(() => {
235
+ setProjection(props.projection ?? Proj.WGS84);
236
+ }, [props.projection]);
237
+
238
+ useEffect(() => {
239
+ setLocale(props.locale);
240
+ }, [props.locale]);
241
+
242
+ useEffect(() => {
243
+ setShowMousePosition(props.showMousePosition ?? true);
244
+ }, [props.showMousePosition]);
245
+
246
+ useEffect(() => {
247
+ setShowScale(props.showScale ?? true);
248
+ }, [props.showScale]);
249
+
250
+ useEffect(() => {
251
+ const getCameraPosition = (): ICameraPosition => {
252
+ if (mapViewRef === undefined) {
253
+ return {
254
+ longitude: 0,
255
+ latitude: 0,
256
+ height: 0,
257
+ };
258
+ }
259
+
260
+ const getCameraPositionCartographic = (): ICameraPosition => {
261
+ const camPos = mapViewRef.camera.positionCartographic;
262
+ return {
263
+ longitude: toDegrees(camPos.longitude),
264
+ latitude: toDegrees(camPos.latitude),
265
+ height: camPos.height,
266
+ };
267
+ };
268
+
269
+ // https://stackoverflow.com/questions/33348761/get-center-in-cesium-map
270
+ if (mapViewRef.scene.mode === SceneMode.SCENE3D) {
271
+ const windowPosition = new Cartesian2(
272
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
273
+ mapViewRef.container.clientWidth / 2,
274
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
275
+ mapViewRef.container.clientHeight / 2
276
+ );
277
+ const pickRay = mapViewRef.scene.camera.getPickRay(windowPosition);
278
+ const pickPosition = mapViewRef.scene.globe.pick(
279
+ pickRay,
280
+ mapViewRef.scene
281
+ );
282
+ const pickPositionCartographic = mapViewRef.scene.globe.ellipsoid.cartesianToCartographic(
283
+ pickPosition as Cartesian3
284
+ );
285
+
286
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
287
+ return pickPositionCartographic !== undefined
288
+ ? {
289
+ longitude: toDegrees(pickPositionCartographic.longitude),
290
+ latitude: toDegrees(pickPositionCartographic.latitude),
291
+ height: mapViewRef.scene.camera.positionCartographic.height,
292
+ }
293
+ : getCameraPositionCartographic();
294
+ } else {
295
+ return getCameraPositionCartographic();
296
+ }
297
+ };
298
+
299
+ const intervalHandle = setInterval(() => {
300
+ if (mapViewRef && mapViewRef.scene.mode !== SceneMode.MORPHING) {
301
+ const camera = mapViewRef.camera;
302
+
303
+ const store: ICameraState = {
304
+ position: getCameraPosition(),
305
+ direction: camera.direction.clone(),
306
+ up: camera.up.clone(),
307
+ right: camera.right.clone(),
308
+ transform: camera.transform.clone(),
309
+ frustum: camera.frustum.clone(),
310
+ };
311
+ setCameraState(store);
312
+ }
313
+ }, cameraPositionRefreshRate);
314
+
315
+ return (): void => {
316
+ clearInterval(intervalHandle);
317
+ };
318
+ }, [mapViewRef]);
319
+
320
+ useEffect(() => {
321
+ const morphCompleteHandler = (): void => {
322
+ if (mapViewRef && cameraState) {
323
+ void mapViewRef.camera.flyTo({
324
+ destination: Cartesian3.fromDegrees(
325
+ cameraState.position.longitude,
326
+ cameraState.position.latitude,
327
+ cameraState.position.height
328
+ ),
329
+ duration: 0,
330
+ });
331
+ }
332
+ };
333
+ if (mapViewRef) {
334
+ mapViewRef.scene.morphComplete.addEventListener(morphCompleteHandler);
335
+ }
336
+ return (): void => {
337
+ if (mapViewRef) {
338
+ mapViewRef.scene.morphComplete.removeEventListener(
339
+ morphCompleteHandler
340
+ );
341
+ }
342
+ };
343
+ }, [mapViewRef, cameraState]);
344
+
345
+ useEffect(() => {
346
+ const zoom = props.zoom;
347
+ const center = props.center;
348
+ if (mapViewRef && isNumber(zoom) && isArray(center)) {
349
+ void mapViewRef.camera.flyTo({
350
+ destination: Cartesian3.fromDegrees(
351
+ center[0],
352
+ center[1],
353
+ getAltitude(zoom)
354
+ ),
355
+ duration: 0,
356
+ });
357
+ }
358
+ }, [props.zoom, props.center, mapViewRef]);
359
+
360
+ const bindCustomToolsToViewer = useCallback((): JSX.Element | undefined => {
361
+ return (
362
+ mapViewRef &&
363
+ createPortal(
364
+ <>
365
+ <Box className="sideToolsContainer">
366
+ <CesiumSettings
367
+ sceneModes={sceneModes as CesiumSceneModeEnum[]}
368
+ baseMaps={baseMaps}
369
+ locale={locale}
370
+ />
371
+ <MapLegendToggle
372
+ onClick={(): void =>
373
+ setIsLegendsSidebarOpen(!isLegendsSidebarOpen)
374
+ }
375
+ />
376
+ </Box>
377
+ <Box className="toolsContainer">
378
+ {showMousePosition === true ? (
379
+ <CoordinatesTrackerTool projection={projection} />
380
+ ) : (
381
+ <></>
382
+ )}
383
+ {showScale === true ? <ScaleTrackerTool locale={locale} /> : <></>}
384
+ </Box>
385
+ </>,
386
+ document.querySelector('.cesium-viewer') as Element
387
+ )
388
+ );
389
+ }, [
390
+ baseMaps,
391
+ locale,
392
+ mapViewRef,
393
+ projection,
394
+ sceneModes,
395
+ showMousePosition,
396
+ showScale,
397
+ isLegendsSidebarOpen,
398
+ ]);
399
+
400
+ return (
401
+ <Viewer className="viewer" full ref={ref} {...viewerProps}>
402
+ <MapViewProvider value={mapViewRef as CesiumViewer}>
403
+ <MapLegendSidebar
404
+ title={props.legends?.title}
405
+ isOpen={isLegendsSidebarOpen}
406
+ toggleSidebar={(): void =>
407
+ setIsLegendsSidebarOpen(!isLegendsSidebarOpen)
408
+ }
409
+ noLegendsText={props.legends?.emptyText}
410
+ legends={props.legends?.legendsList ?? legendsList}
411
+ actionsTexts={props.legends?.actionsTexts}
412
+ />
413
+ {props.children}
414
+ {bindCustomToolsToViewer()}
415
+ {props.imageryContextMenu &&
416
+ showImageryMenu &&
417
+ imageryMenuPosition &&
418
+ React.cloneElement(props.imageryContextMenu, {
419
+ data: (mapViewRef?.layersManager?.findLayerByPOI(
420
+ imageryMenuPosition.x as number,
421
+ imageryMenuPosition.y as number
422
+ ) as unknown) as Record<string, unknown>[],
423
+ position: {
424
+ x: imageryMenuPosition.x as number,
425
+ y: imageryMenuPosition.y as number,
426
+ },
427
+ style: getImageryMenuStyle(
428
+ imageryMenuPosition.x as number,
429
+ imageryMenuPosition.y as number,
430
+ props.imageryContextMenuSize?.width ?? DEFAULT_WIDTH,
431
+ props.imageryContextMenuSize?.height ?? DEFAULT_HEIGHT,
432
+ props.imageryContextMenuSize?.dynamicHeightIncrement ??
433
+ DEFAULT_DYNAMIC_HEIGHT_INCREMENT
434
+ ),
435
+ size: props.imageryContextMenuSize ?? {
436
+ height: DEFAULT_HEIGHT,
437
+ width: DEFAULT_WIDTH,
438
+ },
439
+ handleClose: () => {
440
+ setShowImageryMenu(!showImageryMenu);
441
+ },
442
+ })}
443
+ </MapViewProvider>
444
+ </Viewer>
445
+ );
446
+ };