@terraware/web-components 3.5.8 → 3.5.10

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.
@@ -1,15 +1,56 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
+ import { MultiPolygon } from 'geojson';
3
+ import { MapMouseEvent } from 'mapbox-gl';
2
4
  import 'mapbox-gl/dist/mapbox-gl.css';
3
- export type MapViewStyle = 'Outdoors' | 'Satellite' | 'Light' | 'Dark' | 'Streets';
4
- export declare const MapViewStyles: MapViewStyle[];
5
- export declare const stylesUrl: Record<MapViewStyle, string>;
5
+ import { MapCursor, MapFillComponentStyle, MapIconComponentStyle, MapViewStyle } from './types';
6
+ export type MapFeature = {
7
+ featureId: string;
8
+ geometry: MultiPolygon;
9
+ label?: string;
10
+ onClick?: () => void;
11
+ priority?: number;
12
+ selected?: boolean;
13
+ };
14
+ export type MapFeatureGroup = {
15
+ groupId: string;
16
+ hidden?: boolean;
17
+ features: MapFeature[];
18
+ style: MapFillComponentStyle;
19
+ };
20
+ export type MapMarker = {
21
+ id: string;
22
+ longitude: number;
23
+ latitude: number;
24
+ onClick?: () => void;
25
+ selected?: boolean;
26
+ };
27
+ export type MapMarkerGroup = {
28
+ style: MapIconComponentStyle;
29
+ markers: MapMarker[];
30
+ };
6
31
  export type MapBoxProps = {
32
+ children?: React.ReactNode;
33
+ clusterRadius?: number;
7
34
  containerId?: string;
35
+ controlBottomLeft?: React.ReactNode;
36
+ controlTopRight?: React.ReactNode;
37
+ cursorInteract?: MapCursor;
38
+ cursorMap?: MapCursor;
8
39
  disableZoom?: boolean;
9
40
  hideFullScreenControl?: boolean;
41
+ hideMapViewStyleControl?: boolean;
10
42
  hideZoomControl?: boolean;
43
+ initialViewState?: {
44
+ latttude?: number;
45
+ longitude?: number;
46
+ zoom?: number;
47
+ };
48
+ featureGroups?: MapFeatureGroup[];
11
49
  mapId: string;
50
+ mapImageUrls?: string[];
12
51
  mapViewStyle: MapViewStyle;
52
+ markerGroups?: MapMarkerGroup[];
53
+ onClickCanvas?: (event: MapMouseEvent) => void;
13
54
  setMapViewStyle: (style: MapViewStyle) => void;
14
55
  token: string;
15
56
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MapBox.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapBox.tsx"],"names":[],"mappings":";AAIA,OAAO,8BAA8B,CAAC;AAKtC,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACnF,eAAO,MAAM,aAAa,EAAE,YAAY,EAA0D,CAAC;AAEnG,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAMlD,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,WAAW,KAAG,WAmDpC,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"MapBox.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAYtE,OAAO,EAA8B,YAAY,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAuB,aAAa,EAAS,MAAM,WAAW,CAAC;AACtE,OAAO,8BAA8B,CAAC;AAKtC,OAAO,EACL,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EAErB,YAAY,EAEb,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAGF,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,EAAE,qBAAqB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAClC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,cAAc,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,WAAW,KAAG,WA4fpC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -5,29 +5,39 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.stylesUrl = exports.default = exports.MapViewStyles = void 0;
8
+ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _mapbox = _interopRequireWildcard(require("react-map-gl/mapbox"));
11
11
  var _material = require("@mui/material");
12
12
  require("mapbox-gl/dist/mapbox-gl.css");
13
13
  var _utils = require("../../utils");
14
+ var _Icon = _interopRequireDefault(require("../Icon/Icon"));
14
15
  var _MapViewStyleControl = _interopRequireDefault(require("./MapViewStyleControl"));
15
- const MapViewStyles = exports.MapViewStyles = ['Outdoors', 'Satellite', 'Light', 'Dark', 'Streets'];
16
- const stylesUrl = exports.stylesUrl = {
17
- Outdoors: 'mapbox://styles/mapbox/outdoors-v12?optimize=true',
18
- Satellite: 'mapbox://styles/mapbox/satellite-streets-v12?optimize=true',
19
- Streets: 'mapbox://styles/mapbox/streets-v12?optimize=true',
20
- Light: 'mapbox://styles/mapbox/light-v11?optimize=true',
21
- Dark: 'mapbox://styles/mapbox/dark-v11?optimize=true'
22
- };
16
+ var _types = require("./types");
17
+ // Each layer item will become a feature, with a property of id.
18
+
19
+ // Each layer will become a set of features that have the same type.
20
+
23
21
  const MapBox = props => {
24
22
  const {
23
+ children,
24
+ clusterRadius,
25
25
  containerId,
26
+ controlBottomLeft,
27
+ controlTopRight,
28
+ cursorInteract,
29
+ cursorMap,
26
30
  disableZoom,
31
+ featureGroups,
27
32
  hideFullScreenControl,
33
+ hideMapViewStyleControl,
28
34
  hideZoomControl,
35
+ initialViewState,
29
36
  mapId,
37
+ mapImageUrls,
30
38
  mapViewStyle,
39
+ markerGroups,
40
+ onClickCanvas,
31
41
  setMapViewStyle,
32
42
  token
33
43
  } = props;
@@ -36,29 +46,348 @@ const MapBox = props => {
36
46
  const {
37
47
  isDesktop
38
48
  } = (0, _utils.useDeviceInfo)();
49
+ const [cursor, setCursor] = (0, _react.useState)('auto');
50
+ const [hoverFeatureId, setHoverFeatureId] = (0, _react.useState)();
51
+ const [zoom, setZoom] = (0, _react.useState)();
52
+ const loadImages = (0, _react.useCallback)(map => {
53
+ mapImageUrls === null || mapImageUrls === void 0 ? void 0 : mapImageUrls.forEach(url => {
54
+ if (!map.hasImage(url)) {
55
+ map.loadImage(url, (error, image) => {
56
+ if (image) {
57
+ map.addImage(url, image, {
58
+ sdf: true
59
+ });
60
+ }
61
+ });
62
+ }
63
+ });
64
+ }, [mapImageUrls]);
39
65
  const mapRefCallback = (0, _react.useCallback)(map => {
40
66
  if (map !== null) {
41
67
  mapRef.current = map;
68
+ setZoom(map.getZoom());
69
+ loadImages(map);
70
+ }
71
+ }, []);
72
+ const onMove = (0, _react.useCallback)(view => {
73
+ setZoom(view.viewState.zoom);
74
+ }, []);
75
+ const clusterMarkers = (0, _react.useCallback)((map, markers) => {
76
+ if (!map || map.getZoom() > 15) {
77
+ // Too zoomed in. Return all marker as is
78
+ return markers.map(marker => [marker]);
79
+ }
80
+ const visited = new Set();
81
+ const markerPixels = {};
82
+ markers.forEach(marker => {
83
+ markerPixels[marker.id] = map.project({
84
+ lat: marker.latitude,
85
+ lon: marker.longitude
86
+ });
87
+ });
88
+ const clusters = [];
89
+ markers.forEach((marker, idx) => {
90
+ if (!visited.has(marker.id)) {
91
+ const cluster = [marker];
92
+ markers.slice(idx + 1).forEach(otherMarker => {
93
+ if (!visited.has(otherMarker.id)) {
94
+ const dx = markerPixels[marker.id].x - markerPixels[otherMarker.id].x;
95
+ const dy = markerPixels[marker.id].y - markerPixels[otherMarker.id].y;
96
+ const dist = Math.sqrt(dx * dx + dy * dy);
97
+ if (dist <= (clusterRadius !== null && clusterRadius !== void 0 ? clusterRadius : 40)) {
98
+ cluster.push(otherMarker);
99
+ visited.add(otherMarker.id);
100
+ }
101
+ }
102
+ });
103
+ clusters.push(cluster);
104
+ }
105
+ });
106
+ return clusters;
107
+ }, [clusterRadius]);
108
+
109
+ // Find all layers with at least some clickable elements
110
+ const interactiveLayerIds = (0, _react.useMemo)(() => {
111
+ var _featureGroups$filter;
112
+ return featureGroups === null || featureGroups === void 0 ? void 0 : (_featureGroups$filter = featureGroups.filter(group => group.features.some(feature => feature.onClick !== undefined))) === null || _featureGroups$filter === void 0 ? void 0 : _featureGroups$filter.map(group => group.groupId);
113
+ }, [featureGroups]);
114
+ const geojson = (0, _react.useMemo)(() => {
115
+ const features = featureGroups === null || featureGroups === void 0 ? void 0 : featureGroups.flatMap(group => {
116
+ return group.features.map(feature => {
117
+ var _feature$priority, _feature$selected;
118
+ const properties = {
119
+ id: feature.featureId,
120
+ clickable: feature.onClick !== undefined,
121
+ label: feature.label,
122
+ layerId: group.groupId,
123
+ priority: (_feature$priority = feature.priority) !== null && _feature$priority !== void 0 ? _feature$priority : 0,
124
+ selected: (_feature$selected = feature.selected) !== null && _feature$selected !== void 0 ? _feature$selected : false
125
+ };
126
+ return {
127
+ type: 'Feature',
128
+ geometry: feature.geometry,
129
+ properties
130
+ };
131
+ });
132
+ });
133
+ return features ? {
134
+ type: 'FeatureCollection',
135
+ features
136
+ } : undefined;
137
+ }, [featureGroups]);
138
+ const mapLayers = (0, _react.useMemo)(() => {
139
+ var _visibleGroups$map, _visibleGroups$map2, _visibleGroups$map3;
140
+ const visibleGroups = featureGroups === null || featureGroups === void 0 ? void 0 : featureGroups.filter(group => !group.hidden);
141
+ const borderLayers = (_visibleGroups$map = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
142
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
143
+ key: "".concat(group.groupId, "-border"),
144
+ id: "".concat(group.groupId, "-border"),
145
+ source: 'mapData',
146
+ type: "line",
147
+ paint: {
148
+ 'line-color': group.style.borderColor,
149
+ 'line-width': 2
150
+ },
151
+ filter: ['==', ['get', 'layerId'], group.groupId]
152
+ });
153
+ })) !== null && _visibleGroups$map !== void 0 ? _visibleGroups$map : [];
154
+ const fillLayers = (_visibleGroups$map2 = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
155
+ var _group$style$opacity;
156
+ const opacity = Math.min(0.4, (_group$style$opacity = group.style.opacity) !== null && _group$style$opacity !== void 0 ? _group$style$opacity : 0.2);
157
+ const selectedOpacity = opacity * 2;
158
+ const hoverOpacity = opacity * 1.5;
159
+ const hoverAndSelectedOpacity = opacity * 2.5;
160
+ const groupFilter = ['==', ['get', 'layerId'], group.groupId];
161
+ const selectedFilter = ['==', ['get', 'selected'], true];
162
+ const notSelectedFilter = ['==', ['get', 'selected'], false];
163
+ const hoverFilter = ['==', ['get', 'id'], hoverFeatureId !== null && hoverFeatureId !== void 0 ? hoverFeatureId : null];
164
+ const notHoverFilter = ['!=', ['get', 'id'], hoverFeatureId !== null && hoverFeatureId !== void 0 ? hoverFeatureId : null];
165
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
166
+ key: group.groupId,
167
+ id: group.groupId,
168
+ source: 'mapData',
169
+ type: 'fill',
170
+ paint: {
171
+ 'fill-opacity': 0
172
+ },
173
+ filter: groupFilter
174
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
175
+ key: "".concat(group.groupId, "-unselected"),
176
+ id: "".concat(group.groupId, "-unselected"),
177
+ source: 'mapData',
178
+ type: 'fill',
179
+ paint: group.style.fillPatternUrl ? {
180
+ 'fill-pattern': group.style.fillPatternUrl,
181
+ 'fill-opacity': opacity
182
+ } : {
183
+ 'fill-color': group.style.fillColor,
184
+ 'fill-opacity': opacity
185
+ },
186
+ filter: ['all', groupFilter, notSelectedFilter, notHoverFilter]
187
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
188
+ key: "".concat(group.groupId, "-selected"),
189
+ id: "".concat(group.groupId, "-selected"),
190
+ source: 'mapData',
191
+ type: 'fill',
192
+ paint: group.style.fillPatternUrl ? {
193
+ 'fill-pattern': group.style.fillPatternUrl,
194
+ 'fill-opacity': selectedOpacity
195
+ } : {
196
+ 'fill-color': group.style.fillColor,
197
+ 'fill-opacity': selectedOpacity
198
+ },
199
+ filter: ['all', groupFilter, selectedFilter, notHoverFilter]
200
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
201
+ key: "".concat(group.groupId, "-hover"),
202
+ id: "".concat(group.groupId, "-hover"),
203
+ source: 'mapData',
204
+ type: 'fill',
205
+ paint: group.style.fillPatternUrl ? {
206
+ 'fill-pattern': group.style.fillPatternUrl,
207
+ 'fill-opacity': hoverOpacity
208
+ } : {
209
+ 'fill-color': group.style.fillColor,
210
+ 'fill-opacity': hoverOpacity
211
+ },
212
+ filter: ['all', groupFilter, hoverFilter, notSelectedFilter]
213
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
214
+ key: "".concat(group.groupId, "-selected-hover"),
215
+ id: "".concat(group.groupId, "-selected-hover"),
216
+ source: 'mapData',
217
+ type: 'fill',
218
+ paint: group.style.fillPatternUrl ? {
219
+ 'fill-pattern': group.style.fillPatternUrl,
220
+ 'fill-opacity': hoverAndSelectedOpacity
221
+ } : {
222
+ 'fill-color': group.style.fillColor,
223
+ 'fill-opacity': hoverAndSelectedOpacity
224
+ },
225
+ filter: ['all', groupFilter, hoverFilter, selectedFilter]
226
+ }));
227
+ })) !== null && _visibleGroups$map2 !== void 0 ? _visibleGroups$map2 : [];
228
+ const textLayers = (_visibleGroups$map3 = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
229
+ const groupFilter = ['==', ['get', 'layerId'], group.groupId];
230
+ const labelFilter = ['has', 'label'];
231
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
232
+ key: "".concat(group.groupId, "-label"),
233
+ id: "".concat(group.groupId, "-label"),
234
+ source: 'mapData',
235
+ type: 'symbol',
236
+ layout: {
237
+ 'text-field': ['get', 'label'],
238
+ 'text-size': 14,
239
+ 'text-line-height': 20,
240
+ 'text-font': ['Open Sans Bold', 'Arial Unicode MS Regular'],
241
+ 'text-anchor': 'center',
242
+ 'text-justify': 'center'
243
+ },
244
+ paint: {
245
+ 'text-color': '#ffffff'
246
+ },
247
+ filter: ['all', groupFilter, labelFilter]
248
+ });
249
+ })) !== null && _visibleGroups$map3 !== void 0 ? _visibleGroups$map3 : [];
250
+ return [...borderLayers, ...fillLayers, ...textLayers];
251
+ }, [featureGroups, hoverFeatureId]);
252
+ const markersComponents = (0, _react.useMemo)(() => {
253
+ return markerGroups === null || markerGroups === void 0 ? void 0 : markerGroups.flatMap(markerGroup => {
254
+ // cluster markers here
255
+ const clusteredMarkers = clusterMarkers(mapRef.current, markerGroup.markers);
256
+ return clusteredMarkers.map((markers, i) => {
257
+ if (markers.length === 1) {
258
+ const marker = markers[0];
259
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Marker, {
260
+ className: "map-marker",
261
+ key: "marker-".concat(i),
262
+ longitude: marker.longitude,
263
+ latitude: marker.latitude,
264
+ anchor: "center",
265
+ onClick: event => {
266
+ var _marker$onClick;
267
+ (_marker$onClick = marker.onClick) === null || _marker$onClick === void 0 ? void 0 : _marker$onClick.call(marker);
268
+ event.originalEvent.stopPropagation();
269
+ },
270
+ style: {
271
+ backgroundColor: marker.selected ? markerGroup.style.iconColor : theme.palette.TwClrBg
272
+ }
273
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
274
+ fillColor: marker.selected ? theme.palette.TwClrBg : markerGroup.style.iconColor,
275
+ name: markerGroup.style.iconName,
276
+ size: 'small'
277
+ }));
278
+ } else if (markers.length > 1) {
279
+ const latSum = markers.reduce((sum, marker) => sum + marker.latitude, 0);
280
+ const lngSum = markers.reduce((sum, marker) => sum + marker.longitude, 0);
281
+ const latAvg = latSum / markers.length;
282
+ const lngAvg = lngSum / markers.length;
283
+ const selected = markers.some(marker => marker.selected);
284
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Marker, {
285
+ className: "map-marker map-marker--cluster",
286
+ key: "marker-".concat(i),
287
+ longitude: lngAvg,
288
+ latitude: latAvg,
289
+ anchor: "center",
290
+ onClick: event => {
291
+ var _mapRef$current;
292
+ (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.easeTo({
293
+ center: {
294
+ lat: latAvg,
295
+ lon: lngAvg
296
+ },
297
+ zoom: (zoom !== null && zoom !== void 0 ? zoom : 10) + 1,
298
+ duration: 500
299
+ });
300
+ event.originalEvent.stopPropagation();
301
+ },
302
+ style: {
303
+ backgroundColor: selected ? markerGroup.style.iconColor : theme.palette.TwClrBg
304
+ }
305
+ }, /*#__PURE__*/_react.default.createElement("p", {
306
+ className: "title"
307
+ }, markers.length), /*#__PURE__*/_react.default.createElement(_Icon.default, {
308
+ fillColor: selected ? theme.palette.TwClrBg : markerGroup.style.iconColor,
309
+ name: markerGroup.style.iconName,
310
+ size: 'small'
311
+ }));
312
+ }
313
+ });
314
+ });
315
+ }, [markerGroups, theme, zoom]);
316
+ const onMouseMove = (0, _react.useCallback)(event => {
317
+ if (event.features && event.features.length) {
318
+ const properties = event.features.map(feature => feature.properties).filter(featureProperties => featureProperties && featureProperties.id !== undefined && featureProperties.priority !== undefined && featureProperties.clickable);
319
+ if (properties.length) {
320
+ const topPriorityFeature = properties.reduce((top, current) => {
321
+ return current.priority > top.priority ? current : top;
322
+ }, properties[0]);
323
+ setHoverFeatureId(topPriorityFeature.id);
324
+ return;
325
+ }
42
326
  }
327
+ setHoverFeatureId(undefined);
43
328
  }, []);
329
+
330
+ // Hovering interactive layers
331
+ const onMouseEnter = (0, _react.useCallback)(event => {
332
+ if (event.features && event.features.some(feature => {
333
+ var _feature$properties;
334
+ return (_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.clickable;
335
+ })) {
336
+ setCursor(cursorInteract !== null && cursorInteract !== void 0 ? cursorInteract : 'auto');
337
+ } else {
338
+ setCursor('auto');
339
+ }
340
+ }, [cursorInteract]);
341
+ const onMouseLeave = (0, _react.useCallback)(() => setCursor('auto'), []);
342
+
343
+ // Entering and exiting canvases
344
+ const onMouseOver = (0, _react.useCallback)(() => setCursor(cursorMap !== null && cursorMap !== void 0 ? cursorMap : 'auto'), [cursorMap]);
345
+ const onMouseOut = (0, _react.useCallback)(() => setCursor('auto'), []);
346
+
347
+ // On layer click
348
+ const onMapClick = (0, _react.useCallback)(event => {
349
+ var _event$features;
350
+ if (featureGroups && (_event$features = event.features) !== null && _event$features !== void 0 && _event$features.length) {
351
+ const properties = event.features.map(feature => feature.properties).filter(featureProperties => featureProperties && featureProperties.id !== undefined && featureProperties.priority !== undefined && featureProperties.clickable);
352
+ if (properties.length) {
353
+ const topPriorityFeature = properties.reduce((top, current) => {
354
+ return current.priority > top.priority ? current : top;
355
+ }, properties[0]);
356
+ const clickedItem = featureGroups.flatMap(group => group.features).find(feature => feature.featureId === topPriorityFeature.id);
357
+ if (clickedItem && clickedItem.onClick) {
358
+ clickedItem.onClick();
359
+ return;
360
+ }
361
+ }
362
+ // If feature not clickable or not handled, fall through to canvas
363
+ }
364
+ if (onClickCanvas !== undefined) {
365
+ onClickCanvas(event);
366
+ }
367
+ }, [featureGroups, onClickCanvas]);
44
368
  return /*#__PURE__*/_react.default.createElement(_mapbox.default, {
45
369
  key: mapId,
46
370
  attributionControl: false,
371
+ cursor: cursor,
372
+ doubleClickZoom: !disableZoom,
373
+ interactiveLayerIds: interactiveLayerIds,
374
+ initialViewState: initialViewState,
47
375
  mapboxAccessToken: token,
376
+ mapStyle: _types.stylesUrl[mapViewStyle],
48
377
  ref: mapRefCallback,
49
- mapStyle: stylesUrl[mapViewStyle],
50
- initialViewState: {
51
- longitude: -122.4,
52
- latitude: 37.8,
53
- zoom: 14
54
- },
378
+ scrollZoom: !disableZoom,
55
379
  style: {
56
380
  width: 'fill',
57
381
  height: isDesktop ? 'fill' : '80vh',
58
382
  flexGrow: isDesktop ? 1 : undefined
59
383
  },
60
- scrollZoom: !disableZoom,
61
- doubleClickZoom: !disableZoom
384
+ onClick: onMapClick,
385
+ onMove: onMove,
386
+ onMouseEnter: onMouseEnter,
387
+ onMouseLeave: onMouseLeave,
388
+ onMouseOver: onMouseOver,
389
+ onMouseOut: onMouseOut,
390
+ onMouseMove: onMouseMove
62
391
  }, isDesktop && !hideFullScreenControl && /*#__PURE__*/_react.default.createElement(_mapbox.FullscreenControl, {
63
392
  position: "top-left",
64
393
  containerId: containerId
@@ -69,10 +398,32 @@ const MapBox = props => {
69
398
  marginBottom: theme.spacing(2)
70
399
  },
71
400
  position: "bottom-right"
72
- }), /*#__PURE__*/_react.default.createElement(_MapViewStyleControl.default, {
401
+ }), !hideMapViewStyleControl && /*#__PURE__*/_react.default.createElement(_MapViewStyleControl.default, {
73
402
  containerId: containerId,
74
403
  mapViewStyle: mapViewStyle,
75
404
  setMapViewStyle: setMapViewStyle
76
- }));
405
+ }), controlTopRight && /*#__PURE__*/_react.default.createElement(_material.Box, {
406
+ sx: {
407
+ height: 'max-content',
408
+ position: 'absolute',
409
+ right: theme.spacing(2),
410
+ top: theme.spacing(2),
411
+ width: 'max-content',
412
+ zIndex: 1000
413
+ }
414
+ }, controlTopRight), controlBottomLeft && /*#__PURE__*/_react.default.createElement(_material.Box, {
415
+ style: {
416
+ height: 'max-content',
417
+ position: 'absolute',
418
+ left: theme.spacing(2),
419
+ bottom: theme.spacing(4),
420
+ width: 'max-content',
421
+ zIndex: 1000
422
+ }
423
+ }, controlBottomLeft), geojson && /*#__PURE__*/_react.default.createElement(_mapbox.Source, {
424
+ id: "mapData",
425
+ type: "geojson",
426
+ data: geojson
427
+ }, mapLayers), markersComponents, children);
77
428
  };
78
429
  var _default = exports.default = MapBox;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { DateTime } from 'luxon';
3
+ export type MapDateSliderControlProps = {
4
+ dates: DateTime[];
5
+ selectedDate: DateTime;
6
+ onChange: (newDate: DateTime) => void;
7
+ };
8
+ declare const MapDateSliderControl: ({ dates, selectedDate, onChange }: MapDateSliderControlProps) => JSX.Element;
9
+ export default MapDateSliderControl;
10
+ //# sourceMappingURL=MapDateSliderControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapDateSliderControl.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapDateSliderControl.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAKjC,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,YAAY,EAAE,QAAQ,CAAC;IACvB,QAAQ,EAAE,CAAC,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvC,CAAC;AAEF,QAAA,MAAM,oBAAoB,sCAAuC,yBAAyB,KAAG,WA0D5F,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _material = require("@mui/material");
11
+ var _luxon = require("luxon");
12
+ var _date = require("../../utils/date");
13
+ var _Slider = _interopRequireDefault(require("../Slider"));
14
+ const MapDateSliderControl = _ref => {
15
+ let {
16
+ dates,
17
+ selectedDate,
18
+ onChange
19
+ } = _ref;
20
+ const theme = (0, _material.useTheme)();
21
+ const earliestDate = (0, _react.useMemo)(() => {
22
+ return dates.reduce((earliest, current) => {
23
+ return current < earliest ? current : earliest;
24
+ });
25
+ }, [dates]);
26
+ const latestDate = (0, _react.useMemo)(() => {
27
+ return dates.reduce((latest, current) => {
28
+ return current > latest ? current : latest;
29
+ });
30
+ }, [dates]);
31
+ const marks = (0, _react.useMemo)(() => {
32
+ return dates.map(date => ({
33
+ value: date.valueOf()
34
+ }));
35
+ }, [dates]);
36
+ const getDateString = date => (0, _date.getShortDate)(date);
37
+ const getDateLabel = date => /*#__PURE__*/_react.default.createElement(_material.Typography, {
38
+ fontSize: "12px"
39
+ }, getDateString(date));
40
+ return /*#__PURE__*/_react.default.createElement(_material.Card, {
41
+ style: {
42
+ border: "1px solid ".concat(theme.palette.TwClrBrdrTertiary),
43
+ borderRadius: '8px',
44
+ display: 'flex',
45
+ flexDirection: 'column',
46
+ padding: theme.spacing(2),
47
+ maxWidth: '270px',
48
+ width: dates.length > 1 ? '270px' : undefined
49
+ }
50
+ }, selectedDate && /*#__PURE__*/_react.default.createElement(_material.Typography, {
51
+ fontSize: "14px",
52
+ fontWeight: 600,
53
+ textAlign: "right"
54
+ }, getDateString(selectedDate)), dates.length > 1 && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Slider.default, {
55
+ value: selectedDate.valueOf(),
56
+ min: earliestDate.valueOf(),
57
+ max: latestDate.valueOf(),
58
+ marks: marks,
59
+ valueLabelDisplay: "off",
60
+ onChange: value => onChange(_luxon.DateTime.fromMillis(value))
61
+ }), /*#__PURE__*/_react.default.createElement(_material.Box, {
62
+ display: "flex",
63
+ justifyContent: "space-between"
64
+ }, getDateLabel(earliestDate), getDateLabel(latestDate))));
65
+ };
66
+ var _default = exports.default = MapDateSliderControl;
@@ -1,48 +1,36 @@
1
1
  /// <reference types="react" />
2
- import { IconName } from '../Icon/icons';
3
- export type MapLayerItem = {
2
+ import { MapFillComponentStyle, MapIconComponentStyle } from './types';
3
+ export type MapLayerLegendItem = {
4
4
  disabled?: boolean;
5
5
  id: string;
6
6
  label: string;
7
- style: {
8
- borderColor: string;
9
- fillColor?: string;
10
- fillPatternUrl?: string;
11
- opacity?: number;
12
- };
7
+ style: MapIconComponentStyle | MapFillComponentStyle;
13
8
  };
14
- export type MapLayerGroup = {
9
+ export type MapLayerLegendGroup = {
15
10
  type: 'layer';
16
- items: MapLayerItem[];
11
+ items: MapLayerLegendItem[];
17
12
  setSelectedLayer: (id: string) => void;
18
13
  selectedLayer: string;
19
14
  };
20
- export type MapFeatureItem = {
15
+ export type MapMarkerLegendItem = {
21
16
  disabled?: boolean;
22
- icon: IconName;
23
- iconColor: string;
24
- iconOpacity?: number;
25
17
  id: string;
26
18
  label: string;
19
+ style: MapIconComponentStyle;
27
20
  setVisible?: (visible: boolean) => void;
28
21
  visible: boolean;
29
22
  };
30
- export type MapFeatureGroup = {
31
- type: 'feature';
32
- items: MapFeatureItem[];
23
+ export type MapMarkerLegendGroup = {
24
+ type: 'marker';
25
+ items: MapMarkerLegendItem[];
33
26
  };
34
- export type MapHighlightItem = {
27
+ export type MapHighlightLegendItem = {
35
28
  label: string;
36
- style: {
37
- borderColor: string;
38
- fillColor?: string;
39
- fillPatternUrl?: string;
40
- opacity?: number;
41
- };
29
+ style: MapIconComponentStyle | MapFillComponentStyle;
42
30
  };
43
- export type MapHighlightGroup = {
31
+ export type MapHighlightLegendGroup = {
44
32
  type: 'highlight';
45
- items: MapHighlightItem[];
33
+ items: MapHighlightLegendItem[];
46
34
  setVisible?: (visible: boolean) => void;
47
35
  visible: boolean;
48
36
  };
@@ -50,7 +38,7 @@ export type MapLegendGroup = {
50
38
  disabled?: boolean;
51
39
  tooltip?: string;
52
40
  title: string;
53
- } & (MapFeatureGroup | MapLayerGroup | MapHighlightGroup);
41
+ } & (MapMarkerLegendGroup | MapLayerLegendGroup | MapHighlightLegendGroup);
54
42
  export type MapLegendProps = {
55
43
  legends: MapLegendGroup[];
56
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapLegend.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,CAAC,eAAe,GAAG,aAAa,GAAG,iBAAiB,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,SAAS,gBAAiB,cAAc,KAAG,WA4LhD,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"MapLegend.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapLegend.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,CAAC;IAC7B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,mBAAmB,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,CAAC,oBAAoB,GAAG,mBAAmB,GAAG,uBAAuB,CAAC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B,CAAC;AAEF,QAAA,MAAM,SAAS,gBAAiB,cAAc,KAAG,WAqLhD,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -48,48 +48,43 @@ const MapLegend = _ref => {
48
48
  size: "small"
49
49
  }))));
50
50
  const itemComponents = legend.items.map((item, itemIndex) => {
51
- const onClick = legend.disabled ? undefined : legend.type === 'layer' ? item.disabled ? undefined : () => legend.setSelectedLayer(item.id) : legend.type === 'feature' ? item.disabled ? undefined : () => {
51
+ const onClick = legend.disabled ? undefined : legend.type === 'layer' ? item.disabled ? undefined : () => legend.setSelectedLayer(item.id) : legend.type === 'marker' ? item.disabled ? undefined : () => {
52
52
  var _setVisible, _ref2;
53
53
  return (_setVisible = (_ref2 = item).setVisible) === null || _setVisible === void 0 ? void 0 : _setVisible.call(_ref2, !item.visible);
54
54
  } : undefined;
55
- const disabled = legend.disabled || (legend.type === 'layer' ? item.disabled : legend.type === 'feature' ? item.disabled : false) || false;
56
- const selected = legend.type === 'layer' ? item.id === legend.selectedLayer : legend.type === 'feature' ? item.visible : false;
55
+ const disabled = legend.disabled || (legend.type === 'layer' ? item.disabled : legend.type === 'marker' ? item.disabled : false) || false;
56
+ const selected = legend.type === 'layer' ? item.id === legend.selectedLayer : legend.type === 'marker' ? item.visible : false;
57
57
  const logoComponent = () => {
58
- var _layerItem$style$opac;
59
- switch (legend.type) {
60
- case 'feature':
61
- const featureItem = item;
62
- return /*#__PURE__*/_react.default.createElement(_Icon.default, {
63
- name: featureItem.icon,
64
- fillColor: featureItem.iconColor,
65
- style: {
66
- marginRight: theme.spacing(1),
67
- opacity: featureItem.iconOpacity
68
- },
69
- size: 'small'
70
- });
71
- case 'layer':
72
- case 'highlight':
73
- const layerItem = item;
74
- const opacity = (_layerItem$style$opac = layerItem.style.opacity) !== null && _layerItem$style$opac !== void 0 ? _layerItem$style$opac : 1.0;
75
- return /*#__PURE__*/_react.default.createElement(_material.Box, {
76
- sx: {
77
- border: "2px solid ".concat(layerItem.style.borderColor),
78
- backgroundColor: layerItem.style.fillColor,
79
- backgroundImage: layerItem.style.fillPatternUrl ? "url('".concat(layerItem.style.fillPatternUrl, "')") : undefined,
80
- backgroundRepeat: 'repeat',
81
- opacity: disabled ? 0.7 * opacity : opacity,
82
- height: '16px',
83
- width: '24px',
84
- minWidth: '24px',
85
- marginRight: theme.spacing(1)
86
- }
87
- });
58
+ if (item.style.type === 'icon') {
59
+ return /*#__PURE__*/_react.default.createElement(_Icon.default, {
60
+ name: item.style.iconName,
61
+ fillColor: item.style.iconColor,
62
+ style: {
63
+ marginRight: theme.spacing(1)
64
+ },
65
+ size: 'small'
66
+ });
67
+ } else {
68
+ var _item$style$opacity, _item$style$borderCol;
69
+ const opacity = (_item$style$opacity = item.style.opacity) !== null && _item$style$opacity !== void 0 ? _item$style$opacity : 0.2;
70
+ return /*#__PURE__*/_react.default.createElement(_material.Box, {
71
+ sx: {
72
+ border: "2px solid ".concat((_item$style$borderCol = item.style.borderColor) !== null && _item$style$borderCol !== void 0 ? _item$style$borderCol : theme.palette.TwClrBrdr),
73
+ backgroundColor: item.style.fillColor,
74
+ backgroundImage: item.style.fillPatternUrl ? "url('".concat(item.style.fillPatternUrl, "')") : undefined,
75
+ backgroundRepeat: 'repeat',
76
+ opacity: disabled ? 0.7 * opacity : opacity,
77
+ height: '16px',
78
+ width: '24px',
79
+ minWidth: '24px',
80
+ marginRight: theme.spacing(1)
81
+ }
82
+ });
88
83
  }
89
84
  };
90
85
  const visibleComponent = () => {
91
86
  switch (legend.type) {
92
- case 'feature':
87
+ case 'marker':
93
88
  const featureItem = item;
94
89
  const visibleIcon = featureItem.visible ? /*#__PURE__*/_react.default.createElement(_Icon.default, {
95
90
  name: "iconEye"
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { MapViewStyle } from './MapBox';
2
+ import { MapViewStyle } from './types';
3
3
  type MapViewStyleControlProps = {
4
4
  containerId?: string;
5
5
  mapViewStyle: MapViewStyle;
@@ -1 +1 @@
1
- {"version":3,"file":"MapViewStyleControl.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapViewStyleControl.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAiB,MAAM,UAAU,CAAC;AAEvD,KAAK,wBAAwB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,QAAA,MAAM,mBAAmB,uEAKtB,wBAAwB,KAAG,WAAW,GAAG,SA8D3C,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"MapViewStyleControl.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapViewStyleControl.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,YAAY,EAAiB,MAAM,SAAS,CAAC;AAEtD,KAAK,wBAAwB,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,YAAY,CAAC;IAC3B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC;IACpD,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAChD,CAAC;AAEF,QAAA,MAAM,mBAAmB,uEAKtB,wBAAwB,KAAG,WAAW,GAAG,SA8D3C,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -9,7 +9,7 @@ exports.default = void 0;
9
9
  var _react = _interopRequireWildcard(require("react"));
10
10
  var _material = require("@mui/material");
11
11
  var _PopoverMenu = _interopRequireDefault(require("../PopoverMenu"));
12
- var _MapBox = require("./MapBox");
12
+ var _types = require("./types");
13
13
  const MapViewStyleControl = _ref => {
14
14
  var _mapViewStyleNames2;
15
15
  let {
@@ -20,7 +20,7 @@ const MapViewStyleControl = _ref => {
20
20
  } = _ref;
21
21
  const theme = (0, _material.useTheme)();
22
22
  const viewOptions = (0, _react.useMemo)(() => {
23
- return _MapBox.MapViewStyles.map(style => {
23
+ return _types.MapViewStyles.map(style => {
24
24
  var _mapViewStyleNames;
25
25
  return {
26
26
  label: (_mapViewStyleNames = mapViewStyleNames === null || mapViewStyleNames === void 0 ? void 0 : mapViewStyleNames(style)) !== null && _mapViewStyleNames !== void 0 ? _mapViewStyleNames : style,
@@ -87,3 +87,32 @@
87
87
  text-align: start;
88
88
  }
89
89
  }
90
+
91
+ .map-marker {
92
+ width: 24px;
93
+ height: 24px;
94
+ align-items: center;
95
+ background-color: white;
96
+ border: 1px solid black;
97
+ border-radius: 50%;
98
+ cursor: pointer;
99
+ display: flex;
100
+ flex-direction: column;
101
+ justify-content: center;
102
+
103
+ &--cluster {
104
+ width: 42px;
105
+ height: 42px;
106
+
107
+ .count {
108
+ font-family: 'Inter', sans-serif;
109
+ font-size: 10px;
110
+ font-weight: 600;
111
+ line-height: 16px;
112
+ color: $tw-clr-txt;
113
+ text-align: center;
114
+ margin: 0;
115
+ width: 100%;
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,28 @@
1
+ import { IconName } from '../Icon/icons';
2
+ /**
3
+ * Properties class for GeoJson, with a few reserved object defined.
4
+ */
5
+ export type MapProperties = {
6
+ id: string;
7
+ clickable: boolean;
8
+ layerId: string;
9
+ priority: number;
10
+ [name: string]: any;
11
+ };
12
+ export type MapCursor = 'auto' | 'crosshair' | 'default' | 'pointer' | 'grab';
13
+ export type MapIconComponentStyle = {
14
+ iconColor: string;
15
+ iconName: IconName;
16
+ type: 'icon';
17
+ };
18
+ export type MapFillComponentStyle = {
19
+ borderColor?: string;
20
+ fillColor?: string;
21
+ fillPatternUrl?: string;
22
+ opacity?: number;
23
+ type: 'fill';
24
+ };
25
+ export type MapViewStyle = 'Outdoors' | 'Satellite' | 'Light' | 'Dark' | 'Streets';
26
+ export declare const MapViewStyles: MapViewStyle[];
27
+ export declare const stylesUrl: Record<MapViewStyle, string>;
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Map/types.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACnF,eAAO,MAAM,aAAa,EAAE,YAAY,EAA0D,CAAC;AAEnG,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAMlD,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.stylesUrl = exports.MapViewStyles = void 0;
7
+ /**
8
+ * Properties class for GeoJson, with a few reserved object defined.
9
+ */
10
+
11
+ const MapViewStyles = exports.MapViewStyles = ['Outdoors', 'Satellite', 'Light', 'Dark', 'Streets'];
12
+ const stylesUrl = exports.stylesUrl = {
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'
18
+ };
@@ -45,6 +45,6 @@ th, td {
45
45
  padding: 15px;
46
46
  }
47
47
  </style>
48
- <table><thead><tr><th class="string">department</th><th class="string">related to</th><th class="string">name</th><th class="string">license period</th><th class="string">material / not material</th><th class="string">license type</th><th class="string">link</th><th class="string">remote version</th><th class="string">installed version</th><th class="string">defined version</th><th class="string">author</th></tr></thead><tbody><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/core</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">6.3.1</td><td class="string">6.1.0</td><td class="string">^6.0.7</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/sortable</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">7.0.2</td><td class="string">7.0.2</td><td class="string">^7.0.2</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.0</td><td class="string">11.11.4</td><td class="string">^11.11.3</td><td class="string">Emotion Contributors</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/styled</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.1</td><td class="string">11.11.5</td><td class="string">^11.11.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/icons-material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/lab</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.0.1-beta.36</td><td class="string">6.0.1-beta.36</td><td class="string">^6.0.1-beta.36</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/x-date-pickers</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/mui-x.git</td><td class="string">7.29.4</td><td class="string">7.22.0</td><td class="string">^7.22.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">classnames</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/JedWatson/classnames.git</td><td class="string">2.5.1</td><td class="string">2.5.1</td><td class="string">^2.3.2</td><td class="string">Jed Watson</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">luxon</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/moment/luxon.git</td><td class="string">3.7.1</td><td class="string">3.4.4</td><td class="string">^3.3.0</td><td class="string">Isaac Cambron</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">mapbox-gl</td><td class="string">perpetual</td><td class="string">material</td><td class="string">SEE LICENSE IN LICENSE.txt</td><td class="string">git://github.com/mapbox/mapbox-gl-js.git</td><td class="string">3.14.0</td><td class="string">3.13.0</td><td class="string">^3.13.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/facebook/react.git</td><td class="string">18.3.1</td><td class="string">18.3.1</td><td class="string">^18.2.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-dom</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/facebook/react.git</td><td class="string">18.3.1</td><td class="string">18.3.1</td><td class="string">^18.2.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-intersection-observer</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/thebuilder/react-intersection-observer.git</td><td class="string">9.16.0</td><td class="string">9.10.2</td><td class="string">^9.5.2</td><td class="string">Daniel Schmidt</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-map-gl</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">https://github.com/visgl/react-map-gl.git</td><td class="string">8.0.4</td><td class="string">8.0.4</td><td class="string">^8.0.4</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-multi-carousel</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/YIZHUANG/react-multi-carousel.git</td><td class="string">2.8.6</td><td class="string">2.8.5</td><td class="string">^2.8.2</td><td class="string">YI ZHUANG https://github.com/YIZHUANG</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-responsive</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/contra/react-responsive.git</td><td class="string">9.0.2</td><td class="string">9.0.2</td><td class="string">^9.0.2</td><td class="string">Contra <yo@contra.io> (https://contra.io)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-sortable-hoc</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/react-sortable-hoc.git</td><td class="string">2.0.0</td><td class="string">2.0.0</td><td class="string">^2.0.0</td><td class="string">Clauderic Demers me@ced.io</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">sass</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/sass/dart-sass.git</td><td class="string">1.89.2</td><td class="string">1.77.2</td><td class="string">^1.75.0</td><td class="string">Natalie Weizenbaum nweiz@google.com https://github.com/nex3</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">tinycolor2</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/bgrins/TinyColor.git</td><td class="string">1.6.0</td><td class="string">1.6.0</td><td class="string">^1.6.0</td><td class="string">Brian Grinstead <briangrinstead@gmail.com> (http://briangrinstead.com)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">tslint</td><td class="string">perpetual</td><td class="string">material</td><td class="string">Apache-2.0</td><td class="string">https://github.com/palantir/tslint.git</td><td class="string">6.1.3</td><td class="string">6.1.3</td><td class="string">^6.1.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">web-vitals</td><td class="string">perpetual</td><td class="string">material</td><td class="string">Apache-2.0</td><td class="string">git+https://github.com/GoogleChrome/web-vitals.git</td><td class="string">3.5.2</td><td class="string">3.5.2</td><td class="string">^3.5.2</td><td class="string">Philip Walton philip@philipwalton.com http://philipwalton.com</td></tr></tbody></table>
48
+ <table><thead><tr><th class="string">department</th><th class="string">related to</th><th class="string">name</th><th class="string">license period</th><th class="string">material / not material</th><th class="string">license type</th><th class="string">link</th><th class="string">remote version</th><th class="string">installed version</th><th class="string">defined version</th><th class="string">author</th></tr></thead><tbody><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/core</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">6.3.1</td><td class="string">6.1.0</td><td class="string">^6.0.7</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@dnd-kit/sortable</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/dnd-kit.git</td><td class="string">7.0.2</td><td class="string">7.0.2</td><td class="string">^7.0.2</td><td class="string">Claudéric Demers</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.0</td><td class="string">11.11.4</td><td class="string">^11.11.3</td><td class="string">Emotion Contributors</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@emotion/styled</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/emotion-js/emotion.git#main</td><td class="string">11.14.1</td><td class="string">11.11.5</td><td class="string">^11.11.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/icons-material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/lab</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.0.1-beta.36</td><td class="string">6.0.1-beta.36</td><td class="string">^6.0.1-beta.36</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/material</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/material-ui.git</td><td class="string">6.5.0</td><td class="string">6.5.0</td><td class="string">^6.0.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@mui/x-date-pickers</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/mui/mui-x.git</td><td class="string">7.29.4</td><td class="string">7.22.0</td><td class="string">^7.22.0</td><td class="string">MUI Team</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">@turf/bbox</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/Turfjs/turf.git</td><td class="string">7.2.0</td><td class="string">7.2.0</td><td class="string">^7.2.0</td><td class="string">Turf Authors</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">classnames</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/JedWatson/classnames.git</td><td class="string">2.5.1</td><td class="string">2.5.1</td><td class="string">^2.3.2</td><td class="string">Jed Watson</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">geojson</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">http://github.com/caseycesari/geojson.js.git</td><td class="string">0.5.0</td><td class="string">0.5.0</td><td class="string">^0.5.0</td><td class="string">Casey Cesari</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">luxon</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/moment/luxon.git</td><td class="string">3.7.1</td><td class="string">3.4.4</td><td class="string">^3.3.0</td><td class="string">Isaac Cambron</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">mapbox-gl</td><td class="string">perpetual</td><td class="string">material</td><td class="string">SEE LICENSE IN LICENSE.txt</td><td class="string">git://github.com/mapbox/mapbox-gl-js.git</td><td class="string">3.14.0</td><td class="string">3.13.0</td><td class="string">^3.13.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/facebook/react.git</td><td class="string">18.3.1</td><td class="string">18.3.1</td><td class="string">^18.2.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-dom</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/facebook/react.git</td><td class="string">18.3.1</td><td class="string">18.3.1</td><td class="string">^18.2.0</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-intersection-observer</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/thebuilder/react-intersection-observer.git</td><td class="string">9.16.0</td><td class="string">9.10.2</td><td class="string">^9.5.2</td><td class="string">Daniel Schmidt</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-map-gl</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">https://github.com/visgl/react-map-gl.git</td><td class="string">8.0.4</td><td class="string">8.0.4</td><td class="string">^8.0.4</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-multi-carousel</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/YIZHUANG/react-multi-carousel.git</td><td class="string">2.8.6</td><td class="string">2.8.5</td><td class="string">^2.8.2</td><td class="string">YI ZHUANG https://github.com/YIZHUANG</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-responsive</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git://github.com/contra/react-responsive.git</td><td class="string">9.0.2</td><td class="string">9.0.2</td><td class="string">^9.0.2</td><td class="string">Contra <yo@contra.io> (https://contra.io)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">react-sortable-hoc</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/clauderic/react-sortable-hoc.git</td><td class="string">2.0.0</td><td class="string">2.0.0</td><td class="string">^2.0.0</td><td class="string">Clauderic Demers me@ced.io</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">sass</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/sass/dart-sass.git</td><td class="string">1.90.0</td><td class="string">1.77.2</td><td class="string">^1.75.0</td><td class="string">Natalie Weizenbaum nweiz@google.com https://github.com/nex3</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">tinycolor2</td><td class="string">perpetual</td><td class="string">material</td><td class="string">MIT</td><td class="string">git+https://github.com/bgrins/TinyColor.git</td><td class="string">1.6.0</td><td class="string">1.6.0</td><td class="string">^1.6.0</td><td class="string">Brian Grinstead <briangrinstead@gmail.com> (http://briangrinstead.com)</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">tslint</td><td class="string">perpetual</td><td class="string">material</td><td class="string">Apache-2.0</td><td class="string">https://github.com/palantir/tslint.git</td><td class="string">6.1.3</td><td class="string">6.1.3</td><td class="string">^6.1.3</td><td class="string">n/a</td></tr><tr><td class="string">terraware</td><td class="string">web-components</td><td class="string">web-vitals</td><td class="string">perpetual</td><td class="string">material</td><td class="string">Apache-2.0</td><td class="string">git+https://github.com/GoogleChrome/web-vitals.git</td><td class="string">3.5.2</td><td class="string">3.5.2</td><td class="string">^3.5.2</td><td class="string">Philip Walton philip@philipwalton.com http://philipwalton.com</td></tr></tbody></table>
49
49
  </body>
50
50
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terraware/web-components",
3
- "version": "3.5.8",
3
+ "version": "3.5.10",
4
4
  "author": "Terraformation Inc.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -22,7 +22,9 @@
22
22
  "@mui/lab": "^6.0.1-beta.36",
23
23
  "@mui/material": "^6.0.0",
24
24
  "@mui/x-date-pickers": "^7.22.0",
25
+ "@turf/bbox": "^7.2.0",
25
26
  "classnames": "^2.3.2",
27
+ "geojson": "^0.5.0",
26
28
  "luxon": "^3.3.0",
27
29
  "mapbox-gl": "^3.13.0",
28
30
  "react": "^18.2.0",
@@ -1 +1 @@
1
- {"version":3,"file":"MapBox.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapBox.stories.tsx"],"names":[],"mappings":";AAKA,OAAe,EAAE,WAAW,EAAgB,MAAM,0BAA0B,CAAC;;;;;AAI7E,wBAGE;AA+BF,eAAO,MAAM,OAAO,oGAAoB,CAAC"}
1
+ {"version":3,"file":"MapBox.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapBox.stories.tsx"],"names":[],"mappings":";AAMA,OAAe,EAAE,WAAW,EAAmB,MAAM,0BAA0B,CAAC;;;;;AAMhF,wBAGE;AAiLF,eAAO,MAAM,OAAO,oGAAoB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import { MapBoxProps } from '../components/Map/MapBox';
3
+ declare const _default: {
4
+ title: string;
5
+ component: (props: MapBoxProps) => JSX.Element;
6
+ };
7
+ export default _default;
8
+ export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, MapBoxProps>;
9
+ //# sourceMappingURL=MapDateSlider.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapDateSlider.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapDateSlider.stories.tsx"],"names":[],"mappings":";AAOA,OAAe,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;;;;;AAM/D,wBAGE;AAuDF,eAAO,MAAM,OAAO,oGAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MapLegend.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapLegend.stories.tsx"],"names":[],"mappings":";AAMA,OAAkB,EAAkB,cAAc,EAAE,MAAM,6BAA6B,CAAC;;;;;AAExF,wBAGE;AA2KF,eAAO,MAAM,OAAO,uGAAoB,CAAC"}
1
+ {"version":3,"file":"MapLegend.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapLegend.stories.tsx"],"names":[],"mappings":";AAMA,OAAkB,EAAkB,cAAc,EAAE,MAAM,6BAA6B,CAAC;;;;;AAExF,wBAGE;AA0LF,eAAO,MAAM,OAAO,uGAAoB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ declare const _default: {
3
+ title: string;
4
+ component: (props: import("../components/Map/MapBox").MapBoxProps) => JSX.Element;
5
+ };
6
+ export default _default;
7
+ export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, {
8
+ clusterRadius: number;
9
+ token: string;
10
+ }>;
11
+ //# sourceMappingURL=MapMarker.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapMarker.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapMarker.stories.tsx"],"names":[],"mappings":";;;;;AAcA,wBAGE;AAmHF,eAAO,MAAM,OAAO;mBAjHmB,MAAM;WAAS,MAAM;EAiHpB,CAAC"}
package/utils/date.d.ts CHANGED
@@ -11,6 +11,10 @@ export type DateType = string | number | Date | DateTime;
11
11
  * Helper util that returns default time zone as a fallback.
12
12
  */
13
13
  export declare const tz: (timeZoneId?: string) => string;
14
+ /**
15
+ * Returns <Month> <Year> (eg. July 2023).
16
+ */
17
+ export declare const getShortDate: (date: DateTime) => string;
14
18
  /**
15
19
  * Utility that constructs a valid DateTime object from
16
20
  * any DateType value passed in (ISO string or epoch milliseconds or DateTime object).
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,EAAE,gBAAiB,MAAM,WAA4B,CAAC;AA8BnE;;;;GAIG;AACH,eAAO,MAAM,OAAO,SAAU,QAAQ,eAAe,MAAM,qCAoB1D,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,mBAAmB,SAAU,QAAQ,eAAe,MAAM,WAS/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,gBAAiB,MAAM,WAEzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,SAAU,QAAQ,eAAe,MAAM,YAOhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,EAAE,gBAAiB,MAAM,WAA4B,CAAC;AA8BnE;;GAEG;AACH,eAAO,MAAM,YAAY,SAAU,QAAQ,WAM1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,SAAU,QAAQ,eAAe,MAAM,qCAoB1D,CAAC;AAEF;;;GAGG;AACH,QAAA,MAAM,mBAAmB,SAAU,QAAQ,eAAe,MAAM,WAS/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,gBAAiB,MAAM,WAEzD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,SAAU,QAAQ,eAAe,MAAM,YAOhE,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
package/utils/date.js CHANGED
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.tz = exports.isInTheFuture = exports.getTodaysDateFormatted = exports.getDate = exports.default = void 0;
7
+ exports.tz = exports.isInTheFuture = exports.getTodaysDateFormatted = exports.getShortDate = exports.getDate = exports.default = void 0;
8
8
  var _lodash = _interopRequireDefault(require("lodash"));
9
9
  var _luxon = require("luxon");
10
10
  /**
@@ -51,11 +51,22 @@ const getDisplayValue = date => {
51
51
  return date.toString();
52
52
  };
53
53
 
54
+ /**
55
+ * Returns <Month> <Year> (eg. July 2023).
56
+ */
57
+ const getShortDate = date => {
58
+ if (date.isValid) {
59
+ return date.toFormat('LLLL yyyy');
60
+ }
61
+ return date.toString();
62
+ };
63
+
54
64
  /**
55
65
  * Utility that constructs a valid DateTime object from
56
66
  * any DateType value passed in (ISO string or epoch milliseconds or DateTime object).
57
67
  * Note: the DateTime object input support is mostly for ease of use and will essentially be a pass-through.
58
68
  */
69
+ exports.getShortDate = getShortDate;
59
70
  const getDate = (date, timeZoneId) => {
60
71
  if (typeof date === 'string') {
61
72
  const fromString = getDateFromISOString(date, timeZoneId);