@terraware/web-components 5.0.27-rc.0 → 5.0.27

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 (295) hide show
  1. package/components/AntSwitch/index.js +22 -19
  2. package/components/Autocomplete/Autocomplete.js +130 -106
  3. package/components/Badge/index.js +29 -28
  4. package/components/BusySpinner/index.js +45 -40
  5. package/components/Button/Button.js +47 -41
  6. package/components/Checkbox.js +63 -64
  7. package/components/Confirm/index.js +83 -74
  8. package/components/DatePicker/DatePicker.js +141 -138
  9. package/components/DialogBox/DialogBox.js +118 -111
  10. package/components/Divisor.js +18 -18
  11. package/components/Dropdown.js +94 -66
  12. package/components/EditableTable/index.js +271 -211
  13. package/components/ErrorBox/ErrorBox.js +49 -47
  14. package/components/FileChooser/index.js +135 -117
  15. package/components/FormBottomBar/index.js +84 -75
  16. package/components/Icon/Icon.js +20 -12
  17. package/components/Icon/icons/index.js +256 -256
  18. package/components/IconTooltip/index.js +60 -49
  19. package/components/Map/MapBox.js +452 -545
  20. package/components/Map/MapContainer.js +29 -25
  21. package/components/Map/MapDateSliderControl.js +64 -64
  22. package/components/Map/MapDrawer.js +47 -41
  23. package/components/Map/MapLegend.js +172 -176
  24. package/components/Map/MapViewStyleControl.js +63 -59
  25. package/components/Map/ReactMapboxWrapper.js +2 -3
  26. package/components/Map/index.js +180 -161
  27. package/components/Map/types.js +17 -12
  28. package/components/Map/useMaintainLayerOrder.js +26 -16
  29. package/components/Markdown/index.js +26 -25
  30. package/components/Message/Message.js +76 -73
  31. package/components/MultiSelect/index.js +124 -112
  32. package/components/Navbar/NavFooter.js +13 -9
  33. package/components/Navbar/NavItem.js +76 -70
  34. package/components/Navbar/NavSection.js +19 -17
  35. package/components/Navbar/Navbar.js +46 -39
  36. package/components/Navbar/SubNavbar.js +13 -9
  37. package/components/Note.js +22 -18
  38. package/components/OverlayModal/OverlayModal.js +63 -56
  39. package/components/PageForm/index.js +41 -33
  40. package/components/PhotoChooser/index.js +173 -165
  41. package/components/PhotosCarousel/PhotoSlide.js +35 -32
  42. package/components/PhotosCarousel/index.js +85 -80
  43. package/components/PhotosCarousel/usePhotosCarousel.js +76 -69
  44. package/components/Pill/index.js +45 -41
  45. package/components/PillList/index.js +24 -17
  46. package/components/PlacementWrapper/index.js +59 -38
  47. package/components/PopoverMenu/Popover.js +85 -68
  48. package/components/PopoverMenu/index.js +56 -51
  49. package/components/PopoverMultiSelect/index.js +59 -52
  50. package/components/ProgressCircle/ProgressCircle.js +32 -28
  51. package/components/RadioButton.js +19 -17
  52. package/components/Select/Select.js +15 -13
  53. package/components/Select/SelectT.js +250 -235
  54. package/components/Separator/index.js +17 -14
  55. package/components/Size.js +1 -0
  56. package/components/Slider/index.js +56 -43
  57. package/components/SummaryBox.js +72 -70
  58. package/components/Tabs/index.js +135 -133
  59. package/components/TextTruncated/index.js +130 -117
  60. package/components/Textfield/Textfield.js +190 -158
  61. package/components/Textfield/TruncatedTextArea.js +84 -70
  62. package/components/TimelineSlider/TimelineMarker.js +30 -25
  63. package/components/TimelineSlider/TimelineRail.js +11 -8
  64. package/components/TimelineSlider/index.js +66 -64
  65. package/components/TimelineSliderV2/ClusterBadge.js +29 -25
  66. package/components/TimelineSliderV2/TimelineDot.js +35 -31
  67. package/components/TimelineSliderV2/TimelineRail.js +11 -8
  68. package/components/TimelineSliderV2/index.js +103 -121
  69. package/components/TimelineSliderV2/layout.js +147 -124
  70. package/components/TimelineSliderV2/types.js +1 -0
  71. package/components/Tooltip/Tooltip.js +56 -47
  72. package/components/ViewPhotosDialog/index.js +35 -28
  73. package/components/VirtualWalkthrough/Annotation.js +207 -163
  74. package/components/VirtualWalkthrough/AnnotationEditPane.js +184 -198
  75. package/components/VirtualWalkthrough/AnnotationPanel.js +199 -187
  76. package/components/VirtualWalkthrough/Application.js +34 -31
  77. package/components/VirtualWalkthrough/AutoRotator.js +223 -85
  78. package/components/VirtualWalkthrough/BlockingSpinner.js +28 -26
  79. package/components/VirtualWalkthrough/BoundaryRing.js +34 -30
  80. package/components/VirtualWalkthrough/BoundaryWall.js +36 -32
  81. package/components/VirtualWalkthrough/CameraInfo.js +89 -100
  82. package/components/VirtualWalkthrough/ControlsInfoPane.js +195 -254
  83. package/components/VirtualWalkthrough/GradientSky.js +73 -72
  84. package/components/VirtualWalkthrough/SplatControls.js +221 -209
  85. package/components/VirtualWalkthrough/SplatCrop.js +20 -21
  86. package/components/VirtualWalkthrough/SplatFadeCrop.js +20 -21
  87. package/components/VirtualWalkthrough/SplatModel.js +85 -65
  88. package/components/VirtualWalkthrough/SplatRevealRain.js +46 -41
  89. package/components/VirtualWalkthrough/TfAnnotationManager.js +379 -197
  90. package/components/VirtualWalkthrough/TfXrNavigation.js +162 -73
  91. package/components/VirtualWalkthrough/VirtualWalkthroughViewer.js +431 -438
  92. package/components/VirtualWalkthrough/VrAnnotationPanel.js +22 -18
  93. package/components/VirtualWalkthrough/XrAnnotationInteraction.js +17 -14
  94. package/components/VirtualWalkthrough/XrExitButton.js +17 -14
  95. package/components/VirtualWalkthrough/XrGazeDwell.js +17 -14
  96. package/components/VirtualWalkthrough/XrPointerRay.js +17 -14
  97. package/components/VirtualWalkthrough/XrStartPose.js +121 -67
  98. package/components/VirtualWalkthrough/boundary-ring.js +117 -87
  99. package/components/VirtualWalkthrough/boundary-wall.js +258 -175
  100. package/components/VirtualWalkthrough/camera-adoption.js +64 -18
  101. package/components/VirtualWalkthrough/groundPlane.js +47 -32
  102. package/components/VirtualWalkthrough/gsplat-fade-crop-effect.js +35 -35
  103. package/components/VirtualWalkthrough/splatFormat.js +47 -13
  104. package/components/VirtualWalkthrough/useAdoptedCamera.js +44 -23
  105. package/components/VirtualWalkthrough/useRestartOnVr.js +37 -26
  106. package/components/VirtualWalkthrough/useXrRenderTuning.js +54 -33
  107. package/components/VirtualWalkthrough/vr-annotation-panel-layout.js +99 -67
  108. package/components/VirtualWalkthrough/vr-annotation-panel.js +433 -403
  109. package/components/VirtualWalkthrough/vr-annotation-scroll.js +28 -10
  110. package/components/VirtualWalkthrough/walkthrough-camera.js +329 -204
  111. package/components/VirtualWalkthrough/xr-annotation-candidate-buffer.js +80 -39
  112. package/components/VirtualWalkthrough/xr-annotation-candidates.js +18 -6
  113. package/components/VirtualWalkthrough/xr-annotation-interaction.js +56 -31
  114. package/components/VirtualWalkthrough/xr-annotation-targeting.js +38 -22
  115. package/components/VirtualWalkthrough/xr-button-arming.js +17 -7
  116. package/components/VirtualWalkthrough/xr-button-hold.js +36 -22
  117. package/components/VirtualWalkthrough/xr-exit-button-mask.js +36 -22
  118. package/components/VirtualWalkthrough/xr-exit-button.js +207 -148
  119. package/components/VirtualWalkthrough/xr-face-buttons.js +29 -19
  120. package/components/VirtualWalkthrough/xr-gaze-dwell-state.js +34 -23
  121. package/components/VirtualWalkthrough/xr-gaze-dwell.js +144 -107
  122. package/components/VirtualWalkthrough/xr-interactive-ui.js +24 -12
  123. package/components/VirtualWalkthrough/xr-pointer-ray.js +20 -13
  124. package/components/VirtualWalkthrough/xr-progress-pie-material.js +88 -117
  125. package/components/VirtualWalkthrough/xr-progress-pie.js +10 -1
  126. package/components/VirtualWalkthrough/xr-ray-quad.js +30 -16
  127. package/components/VirtualWalkthrough/xr-render-tuning.js +48 -17
  128. package/components/VirtualWalkthrough/xr-scene-bounds.js +37 -21
  129. package/components/VirtualWalkthrough/xr-start-pose.js +73 -27
  130. package/components/VirtualWalkthrough/xr-teleport-gesture.js +42 -16
  131. package/components/svg/BlobbyGrayIconImage.js +39 -41
  132. package/components/svg/BlobbyGrayIconImport.js +39 -41
  133. package/components/svg/BlobbyGrayIconUploadToTheCloud.js +39 -41
  134. package/components/svg/BlobbyIconCloudChecked.js +164 -202
  135. package/components/svg/BlobbyIconExportOrUploadPhoto.js +164 -202
  136. package/components/svg/BlobbyIconFolder.js +164 -202
  137. package/components/svg/BlobbyIconGraphReport.js +164 -202
  138. package/components/svg/BlobbyIconHappy.js +164 -202
  139. package/components/svg/BlobbyIconHeartMonitor.js +164 -202
  140. package/components/svg/BlobbyIconLeaf.js +164 -202
  141. package/components/svg/BlobbyIconLibrary.js +164 -202
  142. package/components/svg/BlobbyIconNursery.js +166 -204
  143. package/components/svg/BlobbyIconOrganization.js +164 -202
  144. package/components/svg/BlobbyIconParchment.js +164 -202
  145. package/components/svg/BlobbyIconPeople.js +164 -202
  146. package/components/svg/BlobbyIconSeedBank.js +164 -202
  147. package/components/svg/BlobbyIconSeedling.js +164 -202
  148. package/components/svg/BlobbyIconSeeds.js +164 -202
  149. package/components/svg/BlobbyIconSite.js +167 -206
  150. package/components/svg/BlobbyIconSparkles.js +164 -202
  151. package/components/svg/BlobbyIconWrench.js +164 -202
  152. package/components/svg/Bug.js +21 -19
  153. package/components/svg/Calendar.js +21 -19
  154. package/components/svg/CaretDown.js +21 -19
  155. package/components/svg/CaretLeft.js +21 -19
  156. package/components/svg/CaretRight.js +21 -19
  157. package/components/svg/CaretUp.js +21 -19
  158. package/components/svg/ChevronDown.js +21 -19
  159. package/components/svg/ChevronUp.js +21 -19
  160. package/components/svg/Close.js +21 -19
  161. package/components/svg/Critical.js +21 -19
  162. package/components/svg/Edit.js +164 -202
  163. package/components/svg/Error.js +21 -19
  164. package/components/svg/Filter.js +21 -19
  165. package/components/svg/Folder.js +21 -19
  166. package/components/svg/Help.js +21 -19
  167. package/components/svg/Home.js +21 -19
  168. package/components/svg/IconAdd.js +21 -19
  169. package/components/svg/IconArrowRight.js +23 -21
  170. package/components/svg/IconBusinessNetwork.js +21 -19
  171. package/components/svg/IconCalendar.js +21 -19
  172. package/components/svg/IconCancel.js +21 -19
  173. package/components/svg/IconChargingBattery.js +21 -19
  174. package/components/svg/IconChecklist.js +23 -21
  175. package/components/svg/IconCheckmark.js +21 -19
  176. package/components/svg/IconCoinInHand.js +21 -19
  177. package/components/svg/IconColumns.js +21 -19
  178. package/components/svg/IconComment.js +22 -20
  179. package/components/svg/IconDashboard.js +21 -19
  180. package/components/svg/IconDataMigration.js +21 -19
  181. package/components/svg/IconDocument.js +23 -21
  182. package/components/svg/IconDownloadFromTheCloud.js +23 -21
  183. package/components/svg/IconEdit.js +23 -21
  184. package/components/svg/IconExpand.js +23 -21
  185. package/components/svg/IconExport.js +21 -19
  186. package/components/svg/IconExternalLink.js +21 -19
  187. package/components/svg/IconEye.js +21 -19
  188. package/components/svg/IconEyeOff.js +21 -19
  189. package/components/svg/IconFile.js +21 -19
  190. package/components/svg/IconFolder.js +21 -19
  191. package/components/svg/IconFullScreen.js +22 -20
  192. package/components/svg/IconFutures.js +21 -19
  193. package/components/svg/IconGraphReport.js +21 -19
  194. package/components/svg/IconGrid.js +21 -19
  195. package/components/svg/IconHeartMonitor.js +21 -19
  196. package/components/svg/IconHelp.js +23 -21
  197. package/components/svg/IconHistory.js +21 -19
  198. package/components/svg/IconImport.js +21 -19
  199. package/components/svg/IconIndex.js +21 -19
  200. package/components/svg/IconLayers.js +21 -19
  201. package/components/svg/IconLibrary.js +22 -20
  202. package/components/svg/IconList.js +21 -19
  203. package/components/svg/IconLivePlant.js +21 -19
  204. package/components/svg/IconLocations.js +21 -19
  205. package/components/svg/IconMail.js +21 -19
  206. package/components/svg/IconManager.js +21 -19
  207. package/components/svg/IconMap.js +21 -19
  208. package/components/svg/IconMarker.js +21 -19
  209. package/components/svg/IconMenu.js +21 -19
  210. package/components/svg/IconMenuHorizontal.js +21 -19
  211. package/components/svg/IconModule.js +21 -19
  212. package/components/svg/IconMyLocation.js +21 -19
  213. package/components/svg/IconNote.js +23 -21
  214. package/components/svg/IconNursery.js +23 -21
  215. package/components/svg/IconOrg.js +21 -19
  216. package/components/svg/IconParchment.js +21 -19
  217. package/components/svg/IconPhoto.js +21 -19
  218. package/components/svg/IconPlantsFilled.js +21 -19
  219. package/components/svg/IconRedo.js +21 -19
  220. package/components/svg/IconRestorationSite.js +21 -19
  221. package/components/svg/IconSeedBank.js +21 -19
  222. package/components/svg/IconSeedling.js +21 -19
  223. package/components/svg/IconSettings.js +21 -19
  224. package/components/svg/IconSlice.js +21 -19
  225. package/components/svg/IconSubmit.js +21 -19
  226. package/components/svg/IconSubtract.js +23 -21
  227. package/components/svg/IconSynced.js +21 -19
  228. package/components/svg/IconTrashCan.js +21 -19
  229. package/components/svg/IconTreasureMap.js +21 -19
  230. package/components/svg/IconUnavailable.js +21 -19
  231. package/components/svg/IconUndo.js +21 -19
  232. package/components/svg/IconVariable.js +21 -19
  233. package/components/svg/IconVideo.js +31 -30
  234. package/components/svg/IconWifi.js +21 -19
  235. package/components/svg/Info.js +21 -19
  236. package/components/svg/Key.js +21 -19
  237. package/components/svg/Leaf.js +21 -19
  238. package/components/svg/Lock.js +21 -19
  239. package/components/svg/Logo.js +43 -48
  240. package/components/svg/MenuVertical.js +21 -19
  241. package/components/svg/Notification.js +21 -19
  242. package/components/svg/Person.js +21 -19
  243. package/components/svg/Plus.js +21 -19
  244. package/components/svg/RestorationSite.js +21 -19
  245. package/components/svg/Search.js +21 -19
  246. package/components/svg/Seeds.js +21 -19
  247. package/components/svg/Site.js +21 -19
  248. package/components/svg/Sparkles.js +21 -19
  249. package/components/svg/Species.js +21 -19
  250. package/components/svg/Species2.js +164 -202
  251. package/components/svg/Spinner.js +48 -54
  252. package/components/svg/Star.js +21 -19
  253. package/components/svg/Success.js +21 -19
  254. package/components/svg/SuccessFilled.js +21 -19
  255. package/components/svg/TerrawareLogoDesktop.js +49 -55
  256. package/components/svg/TerrawareLogoMobile.js +26 -25
  257. package/components/svg/Touchscreen.js +21 -19
  258. package/components/svg/UploadCloud.js +164 -202
  259. package/components/svg/Warning.js +21 -19
  260. package/components/svg/WelcomeClipboard.js +133 -156
  261. package/components/svg/index.js +129 -129
  262. package/components/table/EnhancedTableToolbar.js +74 -68
  263. package/components/table/EnhancedTableToolbarV2.js +41 -31
  264. package/components/table/TableCellRenderer.js +231 -196
  265. package/components/table/TableHeader.js +73 -71
  266. package/components/table/TableHeaderItem.js +102 -97
  267. package/components/table/density.js +19 -18
  268. package/components/table/index.js +369 -350
  269. package/components/table/sort.js +52 -27
  270. package/components/table/types.js +1 -0
  271. package/components/types/index.js +1 -0
  272. package/hooks/cameraEntityContext.js +13 -2
  273. package/hooks/useBoolean.js +13 -17
  274. package/hooks/useCameraPosition.js +56 -56
  275. package/hooks/useDevicePerformance.js +17 -17
  276. package/hooks/useXr.js +87 -85
  277. package/index.js +58 -58
  278. package/package.json +1 -1
  279. package/setupTests.js +4 -0
  280. package/strings/export.js +170 -111
  281. package/strings/index.js +54 -25
  282. package/strings/locales.js +41 -21
  283. package/strings/strings-en.js +51 -49
  284. package/strings/strings-es.js +51 -49
  285. package/strings/strings-fr.js +51 -49
  286. package/strings/strings-gx.js +51 -49
  287. package/style-dictionary-dist/TerrawareTheme.js +186 -186
  288. package/theme.js +76 -74
  289. package/utils/color.js +15 -8
  290. package/utils/date.js +108 -42
  291. package/utils/index.js +4 -4
  292. package/utils/preventDefaultEvent.js +3 -3
  293. package/utils/text.js +11 -11
  294. package/utils/useDeviceInfo.js +79 -42
  295. package/virtualWalkthrough.js +23 -23
@@ -1,62 +1,66 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useCallback, useMemo } from "react";
3
- import { Box, useTheme } from "@mui/material";
4
- import PopoverMenu from "../PopoverMenu/index.js";
5
- import { MapViewStyles } from "./types.js";
6
- const MapViewStyleControl = ({ containerId, mapViewStyle, mapViewStyleNames, setMapViewStyle })=>{
7
- const theme = useTheme();
8
- const viewOptions = useMemo(()=>MapViewStyles.map((style)=>({
9
- label: mapViewStyleNames?.(style) ?? style,
10
- value: style
11
- })), [
12
- mapViewStyleNames
13
- ]);
14
- const onSelectMapViewStyle = useCallback((item)=>{
15
- setMapViewStyle(item.value);
16
- }, []);
17
- const container = useMemo(()=>{
18
- if (containerId) return document.getElementById(containerId);
19
- }, [
20
- containerId
21
- ]);
22
- return /*#__PURE__*/ jsx(Box, {
1
+ import { useMemo, useCallback } from 'react';
2
+ import { useTheme, Box } from '@mui/material';
3
+ import PopoverMenu from '../PopoverMenu/index.js';
4
+ import { MapViewStyles } from './types.js';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ const MapViewStyleControl = ({
8
+ containerId,
9
+ mapViewStyle,
10
+ mapViewStyleNames,
11
+ setMapViewStyle
12
+ }) => {
13
+ const theme = useTheme();
14
+ const viewOptions = useMemo(() => {
15
+ return MapViewStyles.map(style => ({
16
+ label: mapViewStyleNames?.(style) ?? style,
17
+ value: style
18
+ }));
19
+ }, [mapViewStyleNames]);
20
+ const onSelectMapViewStyle = useCallback(item => {
21
+ setMapViewStyle(item.value);
22
+ }, []);
23
+ const container = useMemo(() => {
24
+ if (containerId) {
25
+ return document.getElementById(containerId);
26
+ }
27
+ }, [containerId]);
28
+ return /*#__PURE__*/jsx(Box, {
29
+ sx: {
30
+ position: 'absolute',
31
+ top: '10px',
32
+ left: '45px',
33
+ zIndex: 10,
34
+ height: 28,
35
+ backgroundColor: `${theme.palette.TwClrBaseWhite}`,
36
+ borderRadius: '4px',
37
+ display: 'flex',
38
+ alignItems: 'center',
39
+ '& .MuiButtonBase-root': {
40
+ padding: 0
41
+ },
42
+ '& .MuiButtonBase-root.MuiMenuItem-root': {
43
+ fontSize: '12px'
44
+ },
45
+ '& svg': {
46
+ marginLeft: 0
47
+ }
48
+ },
49
+ children: /*#__PURE__*/jsx(PopoverMenu, {
50
+ anchor: /*#__PURE__*/jsx(Box, {
51
+ component: "span",
23
52
  sx: {
24
- position: 'absolute',
25
- top: '10px',
26
- left: '45px',
27
- zIndex: 10,
28
- height: 28,
29
- backgroundColor: `${theme.palette.TwClrBaseWhite}`,
30
- borderRadius: '4px',
31
- display: 'flex',
32
- alignItems: 'center',
33
- '& .MuiButtonBase-root': {
34
- padding: 0
35
- },
36
- '& .MuiButtonBase-root.MuiMenuItem-root': {
37
- fontSize: '12px'
38
- },
39
- '& svg': {
40
- marginLeft: 0
41
- }
53
+ fontSize: '12px',
54
+ paddingLeft: theme.spacing(0.5),
55
+ color: theme.palette.TwClrTxt
42
56
  },
43
- children: /*#__PURE__*/ jsx(PopoverMenu, {
44
- anchor: /*#__PURE__*/ jsx(Box, {
45
- component: "span",
46
- sx: {
47
- fontSize: '12px',
48
- paddingLeft: theme.spacing(0.5),
49
- color: theme.palette.TwClrTxt
50
- },
51
- children: mapViewStyleNames?.(mapViewStyle) ?? mapViewStyle
52
- }),
53
- container: container,
54
- menuSections: [
55
- viewOptions
56
- ],
57
- onClick: onSelectMapViewStyle
58
- })
59
- });
57
+ children: mapViewStyleNames?.(mapViewStyle) ?? mapViewStyle
58
+ }),
59
+ container: container,
60
+ menuSections: [viewOptions],
61
+ onClick: onSelectMapViewStyle
62
+ })
63
+ });
60
64
  };
61
- const Map_MapViewStyleControl = MapViewStyleControl;
62
- export default Map_MapViewStyleControl;
65
+
66
+ export { MapViewStyleControl as default };
@@ -1,3 +1,2 @@
1
- import mapbox from "react-map-gl/mapbox";
2
- const ReactMapboxWrapper = mapbox;
3
- export default ReactMapboxWrapper;
1
+ import ReactMapbox from 'react-map-gl/mapbox';
2
+ export { default } from 'react-map-gl/mapbox';
@@ -1,163 +1,182 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useCallback, useMemo, useState } from "react";
3
- import MapBox from "./MapBox.js";
4
- import MapContainer from "./MapContainer.js";
5
- import MapDrawer from "./MapDrawer.js";
6
- import MapLegend from "./MapLegend.js";
7
- const MapComponent = (props)=>{
8
- const { clusterRadius, controlBottomLeft, controlTopRight, cursorInteract, cursorMap, disableDoubleClickZoom, disableZoom, drawerChildren, drawerOpen, drawerSize, drawerTitle, features, hideFullScreenControl, hideLegend, hideMapViewStyleControl, hideZoomControl, initialSelectedLayerId, initialMapViewStyle, initialViewState, mapContainerId, mapId, onClickCanvas, setDrawerOpen, token } = props;
9
- const [mapViewStyle, setMapViewStyle] = useState(initialMapViewStyle ?? 'Streets');
10
- const [visibleHighlights, setVisibleHighlights] = useState([]);
11
- const setHighlightVisible = useCallback((highlightId)=>(visible)=>{
12
- visible ? setVisibleHighlights((_visibleHighlights)=>[
13
- ..._visibleHighlights,
14
- highlightId
15
- ]) : setVisibleHighlights((_visibleHighlights)=>_visibleHighlights.filter((_highlightId)=>_highlightId !== highlightId));
16
- }, []);
17
- const [visibleMarkers, setVisibleMarkers] = useState([]);
18
- const setMarkerVisible = useCallback((markerGroupId)=>(visible)=>{
19
- visible ? setVisibleMarkers((_visibleMarkers)=>[
20
- ..._visibleMarkers,
21
- markerGroupId
22
- ]) : setVisibleMarkers((_visibleMarkers)=>_visibleMarkers.filter((_markerGroupId)=>_markerGroupId !== markerGroupId));
23
- }, []);
24
- const [selectedLayer, setSelectedLayer] = useState(initialSelectedLayerId);
25
- const legends = useMemo(()=>features?.map((feature)=>{
26
- const baseLegendGroup = {
27
- disabled: feature.sectionDisabled,
28
- title: feature.sectionTitle,
29
- tooltip: feature.sectionTooltip
30
- };
31
- switch(feature.type){
32
- case 'highlight':
33
- return {
34
- ...baseLegendGroup,
35
- items: feature.legendItems,
36
- type: 'highlight',
37
- visible: visibleHighlights.findIndex((highlightId)=>highlightId === feature.highlight.highlightId) >= 0,
38
- setVisible: setHighlightVisible(feature.highlight.highlightId)
39
- };
40
- case 'layer':
41
- return {
42
- ...baseLegendGroup,
43
- items: feature.layers.map((layer)=>({
44
- disabled: layer.disabled,
45
- id: layer.layerId,
46
- label: layer.label,
47
- style: layer.style
48
- })),
49
- selectedLayer,
50
- setSelectedLayer,
51
- type: 'layer'
52
- };
53
- case 'marker':
54
- return {
55
- ...baseLegendGroup,
56
- items: feature.groups.map((group)=>({
57
- disabled: group.disabled,
58
- id: group.markerGroupId,
59
- label: group.label,
60
- style: group.style,
61
- setVisible: setMarkerVisible(group.markerGroupId),
62
- visible: visibleMarkers.findIndex((markerId)=>markerId === group.markerGroupId) >= 0
63
- })),
64
- type: 'marker'
65
- };
66
- }
67
- }), [
68
- features,
69
- selectedLayer,
70
- visibleHighlights,
71
- visibleMarkers
72
- ]);
73
- const layers = useMemo(()=>features?.filter((feature)=>'layer' === feature.type)?.flatMap((feature)=>feature.layers)?.filter((layer)=>layer.layerId === selectedLayer), [
74
- features,
75
- selectedLayer
76
- ]);
77
- const highlightGroups = useMemo(()=>features?.filter((feature)=>'highlight' === feature.type)?.map((feature)=>feature.highlight)?.filter((highlight)=>visibleHighlights.findIndex((_highlightId)=>_highlightId === highlight.highlightId) >= 0), [
78
- features,
79
- visibleHighlights
80
- ]);
81
- const markerGroups = useMemo(()=>features?.filter((feature)=>'marker' === feature.type)?.flatMap((feature)=>feature.groups).filter((group)=>visibleMarkers.findIndex((_markerId)=>_markerId === group.markerGroupId) >= 0), [
82
- features,
83
- visibleMarkers
84
- ]);
85
- const mapViewState = useMemo(()=>{
86
- if (initialViewState) return initialViewState;
87
- else if (features) {
88
- const coordinates = features.filter((feature)=>'layer' === feature.type).flatMap((feature)=>feature.layers).flatMap((layer)=>layer.features).map((geoFeature)=>geoFeature.geometry.coordinates).flat().flat().flat();
89
- if (coordinates.length > 0) {
90
- let minLat = 1 / 0;
91
- let maxLat = -1 / 0;
92
- let minLng = 1 / 0;
93
- let maxLng = -1 / 0;
94
- for (const [lng, lat] of coordinates){
95
- minLat = Math.min(minLat, lat);
96
- maxLat = Math.max(maxLat, lat);
97
- minLng = Math.min(minLng, lng);
98
- maxLng = Math.max(maxLng, lng);
99
- }
100
- const centerLng = (minLng + maxLng) / 2;
101
- const centerLat = (minLat + maxLat) / 2;
102
- return {
103
- latitude: centerLat,
104
- longitude: centerLng,
105
- zoom: 12
106
- };
107
- }
108
- }
109
- }, [
110
- initialViewState
111
- ]);
112
- const mapImageUrls = useMemo(()=>{
113
- const layerFeatures = features?.filter((feature)=>'layer' === feature.type) ?? [];
114
- const highlightFeatures = features?.filter((feature)=>'highlight' === feature.type) ?? [];
115
- const layerImageUrls = layerFeatures.flatMap((feature)=>feature.layers).map((layer)=>layer.style.fillPatternUrl).filter((url)=>void 0 !== url);
116
- const highlightImageUrls = highlightFeatures.flatMap((feature)=>feature.highlight.highlights).map((highlight)=>highlight.style.fillPatternUrl).filter((url)=>void 0 !== url);
117
- const imageUrls = new Set(layerImageUrls);
118
- highlightImageUrls.forEach((url)=>imageUrls.add(url));
119
- return Array.from(imageUrls);
120
- }, [
121
- features
122
- ]);
123
- return /*#__PURE__*/ jsx(MapContainer, {
124
- containerId: mapContainerId ?? 'map-container',
125
- map: /*#__PURE__*/ jsx(MapBox, {
126
- clusterRadius: clusterRadius,
127
- containerId: mapContainerId ?? 'map-container',
128
- controlBottomLeft: controlBottomLeft,
129
- controlTopRight: controlTopRight,
130
- cursorInteract: cursorInteract,
131
- cursorMap: cursorMap,
132
- disableDoubleClickZoom: disableDoubleClickZoom,
133
- disableZoom: disableZoom,
134
- drawerOpen: drawerOpen,
135
- hideFullScreenControl: hideFullScreenControl,
136
- hideMapViewStyleControl: hideMapViewStyleControl,
137
- hideZoomControl: hideZoomControl,
138
- highlightGroups: highlightGroups,
139
- initialViewState: mapViewState,
140
- layers: layers,
141
- mapId: mapId ?? 'mapId',
142
- mapImageUrls: mapImageUrls,
143
- mapViewStyle: mapViewStyle,
144
- markerGroups: markerGroups,
145
- onClickCanvas: onClickCanvas,
146
- setMapViewStyle: setMapViewStyle,
147
- token: token
148
- }),
149
- drawer: /*#__PURE__*/ jsx(MapDrawer, {
150
- open: drawerOpen ?? false,
151
- onClose: ()=>setDrawerOpen?.(false),
152
- size: drawerSize ?? 'small',
153
- title: drawerTitle ?? '',
154
- children: drawerChildren
155
- }),
156
- drawerOpen: drawerOpen,
157
- legend: !hideLegend && legends && /*#__PURE__*/ jsx(MapLegend, {
158
- legends: legends
159
- })
1
+ import { useState, useCallback, useMemo } from 'react';
2
+ import MapBox from './MapBox.js';
3
+ import MapContainer from './MapContainer.js';
4
+ import MapDrawer from './MapDrawer.js';
5
+ import MapLegend from './MapLegend.js';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ const MapComponent = props => {
9
+ const {
10
+ clusterRadius,
11
+ controlBottomLeft,
12
+ controlTopRight,
13
+ cursorInteract,
14
+ cursorMap,
15
+ disableDoubleClickZoom,
16
+ disableZoom,
17
+ drawerChildren,
18
+ drawerOpen,
19
+ drawerSize,
20
+ drawerTitle,
21
+ features,
22
+ hideFullScreenControl,
23
+ hideLegend,
24
+ hideMapViewStyleControl,
25
+ hideZoomControl,
26
+ initialSelectedLayerId,
27
+ initialMapViewStyle,
28
+ initialViewState,
29
+ mapContainerId,
30
+ mapId,
31
+ onClickCanvas,
32
+ setDrawerOpen,
33
+ token
34
+ } = props;
35
+ const [mapViewStyle, setMapViewStyle] = useState(initialMapViewStyle ?? 'Streets');
36
+ const [visibleHighlights, setVisibleHighlights] = useState([]);
37
+ const setHighlightVisible = useCallback(highlightId => visible => {
38
+ if (visible) {
39
+ setVisibleHighlights(_visibleHighlights => [..._visibleHighlights, highlightId]);
40
+ } else {
41
+ setVisibleHighlights(_visibleHighlights => _visibleHighlights.filter(_highlightId => _highlightId !== highlightId));
42
+ }
43
+ }, []);
44
+ const [visibleMarkers, setVisibleMarkers] = useState([]);
45
+ const setMarkerVisible = useCallback(markerGroupId => visible => {
46
+ if (visible) {
47
+ setVisibleMarkers(_visibleMarkers => [..._visibleMarkers, markerGroupId]);
48
+ } else {
49
+ setVisibleMarkers(_visibleMarkers => _visibleMarkers.filter(_markerGroupId => _markerGroupId !== markerGroupId));
50
+ }
51
+ }, []);
52
+ const [selectedLayer, setSelectedLayer] = useState(initialSelectedLayerId);
53
+ const legends = useMemo(() => {
54
+ return features?.map(feature => {
55
+ const baseLegendGroup = {
56
+ disabled: feature.sectionDisabled,
57
+ title: feature.sectionTitle,
58
+ tooltip: feature.sectionTooltip
59
+ };
60
+ switch (feature.type) {
61
+ case 'highlight':
62
+ return {
63
+ ...baseLegendGroup,
64
+ items: feature.legendItems,
65
+ type: 'highlight',
66
+ visible: visibleHighlights.findIndex(highlightId => highlightId === feature.highlight.highlightId) >= 0,
67
+ setVisible: setHighlightVisible(feature.highlight.highlightId)
68
+ };
69
+ case 'layer':
70
+ return {
71
+ ...baseLegendGroup,
72
+ items: feature.layers.map(layer => ({
73
+ disabled: layer.disabled,
74
+ id: layer.layerId,
75
+ label: layer.label,
76
+ style: layer.style
77
+ })),
78
+ selectedLayer,
79
+ setSelectedLayer,
80
+ type: 'layer'
81
+ };
82
+ case 'marker':
83
+ return {
84
+ ...baseLegendGroup,
85
+ items: feature.groups.map(group => ({
86
+ disabled: group.disabled,
87
+ id: group.markerGroupId,
88
+ label: group.label,
89
+ style: group.style,
90
+ setVisible: setMarkerVisible(group.markerGroupId),
91
+ visible: visibleMarkers.findIndex(markerId => markerId === group.markerGroupId) >= 0
92
+ })),
93
+ type: 'marker'
94
+ };
95
+ }
160
96
  });
97
+ }, [features, selectedLayer, visibleHighlights, visibleMarkers]);
98
+ const layers = useMemo(() => {
99
+ return features?.filter(feature => feature.type === 'layer')?.flatMap(feature => feature.layers)?.filter(layer => layer.layerId === selectedLayer);
100
+ }, [features, selectedLayer]);
101
+ const highlightGroups = useMemo(() => {
102
+ return features?.filter(feature => feature.type === 'highlight')?.map(feature => feature.highlight)?.filter(highlight => visibleHighlights.findIndex(_highlightId => _highlightId === highlight.highlightId) >= 0);
103
+ }, [features, visibleHighlights]);
104
+ const markerGroups = useMemo(() => {
105
+ return features?.filter(feature => feature.type === 'marker')?.flatMap(feature => feature.groups).filter(group => visibleMarkers.findIndex(_markerId => _markerId === group.markerGroupId) >= 0);
106
+ }, [features, visibleMarkers]);
107
+ const mapViewState = useMemo(() => {
108
+ if (initialViewState) {
109
+ return initialViewState;
110
+ } else if (features) {
111
+ const coordinates = features.filter(feature => feature.type === 'layer').flatMap(feature => feature.layers).flatMap(layer => layer.features).map(geoFeature => geoFeature.geometry.coordinates).flat().flat().flat();
112
+ if (coordinates.length > 0) {
113
+ let minLat = Infinity;
114
+ let maxLat = -Infinity;
115
+ let minLng = Infinity;
116
+ let maxLng = -Infinity;
117
+ for (const [lng, lat] of coordinates) {
118
+ minLat = Math.min(minLat, lat);
119
+ maxLat = Math.max(maxLat, lat);
120
+ minLng = Math.min(minLng, lng);
121
+ maxLng = Math.max(maxLng, lng);
122
+ }
123
+ const centerLng = (minLng + maxLng) / 2;
124
+ const centerLat = (minLat + maxLat) / 2;
125
+ return {
126
+ latitude: centerLat,
127
+ longitude: centerLng,
128
+ zoom: 12
129
+ };
130
+ }
131
+ }
132
+ }, [initialViewState]);
133
+ const mapImageUrls = useMemo(() => {
134
+ const layerFeatures = features?.filter(feature => feature.type === 'layer') ?? [];
135
+ const highlightFeatures = features?.filter(feature => feature.type === 'highlight') ?? [];
136
+ const layerImageUrls = layerFeatures.flatMap(feature => feature.layers).map(layer => layer.style.fillPatternUrl).filter(url => url !== undefined);
137
+ const highlightImageUrls = highlightFeatures.flatMap(feature => feature.highlight.highlights).map(highlight => highlight.style.fillPatternUrl).filter(url => url !== undefined);
138
+ const imageUrls = new Set(layerImageUrls);
139
+ highlightImageUrls.forEach(url => imageUrls.add(url));
140
+ return Array.from(imageUrls);
141
+ }, [features]);
142
+ return /*#__PURE__*/jsx(MapContainer, {
143
+ containerId: mapContainerId ?? 'map-container',
144
+ map: /*#__PURE__*/jsx(MapBox, {
145
+ clusterRadius: clusterRadius,
146
+ containerId: mapContainerId ?? 'map-container',
147
+ controlBottomLeft: controlBottomLeft,
148
+ controlTopRight: controlTopRight,
149
+ cursorInteract: cursorInteract,
150
+ cursorMap: cursorMap,
151
+ disableDoubleClickZoom: disableDoubleClickZoom,
152
+ disableZoom: disableZoom,
153
+ drawerOpen: drawerOpen,
154
+ hideFullScreenControl: hideFullScreenControl,
155
+ hideMapViewStyleControl: hideMapViewStyleControl,
156
+ hideZoomControl: hideZoomControl,
157
+ highlightGroups: highlightGroups,
158
+ initialViewState: mapViewState,
159
+ layers: layers,
160
+ mapId: mapId ?? 'mapId',
161
+ mapImageUrls: mapImageUrls,
162
+ mapViewStyle: mapViewStyle,
163
+ markerGroups: markerGroups,
164
+ onClickCanvas: onClickCanvas,
165
+ setMapViewStyle: setMapViewStyle,
166
+ token: token
167
+ }),
168
+ drawer: /*#__PURE__*/jsx(MapDrawer, {
169
+ open: drawerOpen ?? false,
170
+ onClose: () => setDrawerOpen?.(false),
171
+ size: drawerSize ?? 'small',
172
+ title: drawerTitle ?? '',
173
+ children: drawerChildren
174
+ }),
175
+ drawerOpen: drawerOpen,
176
+ legend: !hideLegend && legends && /*#__PURE__*/jsx(MapLegend, {
177
+ legends: legends
178
+ })
179
+ });
161
180
  };
162
- const Map = MapComponent;
163
- export default Map;
181
+
182
+ export { MapComponent as default };
@@ -1,15 +1,20 @@
1
- const MapViewStyles = [
2
- 'Outdoors',
3
- 'Satellite',
4
- 'Light',
5
- 'Dark',
6
- 'Streets'
7
- ];
1
+ /**
2
+ * Properties class for GeoJson, with a few reserved object defined.
3
+ */
4
+
5
+ // Each layer item will become a feature, with a property of id.
6
+
7
+ // Each layer will become a set of features that have the same type.
8
+
9
+ // Additional shading/annotations for map entities
10
+
11
+ const MapViewStyles = ['Outdoors', 'Satellite', 'Light', 'Dark', 'Streets'];
8
12
  const stylesUrl = {
9
- Outdoors: 'mapbox://styles/mapbox/outdoors-v12?optimize=true',
10
- Satellite: 'mapbox://styles/mapbox/satellite-streets-v12?optimize=true',
11
- Streets: 'mapbox://styles/mapbox/streets-v12?optimize=true',
12
- Light: 'mapbox://styles/mapbox/light-v11?optimize=true',
13
- Dark: 'mapbox://styles/mapbox/dark-v11?optimize=true'
13
+ Outdoors: 'mapbox://styles/mapbox/outdoors-v12?optimize=true',
14
+ Satellite: 'mapbox://styles/mapbox/satellite-streets-v12?optimize=true',
15
+ Streets: 'mapbox://styles/mapbox/streets-v12?optimize=true',
16
+ Light: 'mapbox://styles/mapbox/light-v11?optimize=true',
17
+ Dark: 'mapbox://styles/mapbox/dark-v11?optimize=true'
14
18
  };
19
+
15
20
  export { MapViewStyles, stylesUrl };
@@ -1,18 +1,28 @@
1
- import { useEffect } from "react";
2
- const useMaintainLayerOrder = (mapRef, orderedLayerIds)=>{
3
- useEffect(()=>{
4
- const map = mapRef.current;
5
- if (!map) return;
6
- const existingLayerIds = orderedLayerIds.filter((id)=>map.getLayer(id));
7
- for(let i = existingLayerIds.length - 1; i >= 0; i--){
8
- const layerId = existingLayerIds[i];
9
- try {
10
- map.moveLayer(layerId, i < existingLayerIds.length - 1 ? existingLayerIds[i + 1] : void 0);
11
- } catch (e) {}
12
- }
13
- }, [
14
- mapRef,
15
- orderedLayerIds
16
- ]);
1
+ import { useEffect } from 'react';
2
+
3
+ /**
4
+ * Ensures that all given layers maintain strict order in the Mapbox layer stack.
5
+ */
6
+ const useMaintainLayerOrder = (mapRef, orderedLayerIds) => {
7
+ useEffect(() => {
8
+ const map = mapRef.current;
9
+ if (!map) {
10
+ return;
11
+ }
12
+
13
+ // Only move layers that exist
14
+ const existingLayerIds = orderedLayerIds.filter(id => map.getLayer(id));
15
+
16
+ // Reverse iterate so first in array ends up lowest
17
+ for (let i = existingLayerIds.length - 1; i >= 0; i--) {
18
+ const layerId = existingLayerIds[i];
19
+ try {
20
+ map.moveLayer(layerId, i < existingLayerIds.length - 1 ? existingLayerIds[i + 1] : undefined);
21
+ } catch (e) {
22
+ // moveLayer will throw if layer doesn't exist in current style
23
+ }
24
+ }
25
+ }, [mapRef, orderedLayerIds]);
17
26
  };
27
+
18
28
  export { useMaintainLayerOrder };
@@ -1,26 +1,27 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useState } from "react";
3
- import { marked } from "marked";
4
- import "./styles.scss";
5
- const Markdown = ({ value, style })=>{
6
- const [html, setHtml] = useState();
7
- const parseValue = useCallback(async (_value)=>{
8
- const _html = await marked.parse(_value);
9
- setHtml(_html);
10
- }, []);
11
- useEffect(()=>{
12
- parseValue(value);
13
- }, [
14
- parseValue,
15
- value
16
- ]);
17
- return /*#__PURE__*/ jsx("div", {
18
- className: "markdown",
19
- style: style,
20
- dangerouslySetInnerHTML: {
21
- __html: html ?? ''
22
- }
23
- });
1
+ import { useState, useCallback, useEffect } from 'react';
2
+ import { marked } from 'marked';
3
+ import './styles.scss';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ const Markdown = ({
7
+ value,
8
+ style
9
+ }) => {
10
+ const [html, setHtml] = useState();
11
+ const parseValue = useCallback(async _value => {
12
+ const _html = await marked.parse(_value);
13
+ setHtml(_html);
14
+ }, []);
15
+ useEffect(() => {
16
+ void parseValue(value);
17
+ }, [parseValue, value]);
18
+ return /*#__PURE__*/jsx("div", {
19
+ className: "markdown",
20
+ style: style,
21
+ dangerouslySetInnerHTML: {
22
+ __html: html ?? ''
23
+ }
24
+ });
24
25
  };
25
- const components_Markdown = Markdown;
26
- export default components_Markdown;
26
+
27
+ export { Markdown as default };