@terraware/web-components 3.5.9 → 3.5.11

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,29 +1,71 @@
1
- /// <reference types="react" />
1
+ import React from 'react';
2
+ import { MultiPolygon } from 'geojson';
2
3
  import { MapMouseEvent } from 'mapbox-gl';
3
4
  import 'mapbox-gl/dist/mapbox-gl.css';
4
- import { MapFillComponentStyle, MapIconComponentStyle } from './types';
5
- export type MapViewStyle = 'Outdoors' | 'Satellite' | 'Light' | 'Dark' | 'Streets';
6
- export declare const MapViewStyles: MapViewStyle[];
7
- 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 MapHighlight = {
21
+ featureIds: {
22
+ featureGroupId: string;
23
+ featureId: string;
24
+ }[];
25
+ highlightId: string;
26
+ style: MapFillComponentStyle;
27
+ };
28
+ export type MapHighlightGroup = {
29
+ hidden?: boolean;
30
+ highlights: MapHighlight[];
31
+ };
8
32
  export type MapMarker = {
9
- featureId?: string;
10
33
  id: string;
11
34
  longitude: number;
12
35
  latitude: number;
13
- style: MapIconComponentStyle | MapFillComponentStyle;
14
36
  onClick?: () => void;
15
37
  selected?: boolean;
16
38
  };
39
+ export type MapMarkerGroup = {
40
+ hidden?: boolean;
41
+ markers: MapMarker[];
42
+ style: MapIconComponentStyle;
43
+ };
17
44
  export type MapBoxProps = {
45
+ children?: React.ReactNode;
46
+ clusterRadius?: number;
18
47
  containerId?: string;
48
+ controlBottomLeft?: React.ReactNode;
49
+ controlTopRight?: React.ReactNode;
50
+ cursorInteract?: MapCursor;
51
+ cursorMap?: MapCursor;
52
+ disableDoubleClickZoom?: boolean;
19
53
  disableZoom?: boolean;
54
+ featureGroups?: MapFeatureGroup[];
20
55
  hideFullScreenControl?: boolean;
21
56
  hideMapViewStyleControl?: boolean;
22
57
  hideZoomControl?: boolean;
58
+ highlightGroups?: MapHighlightGroup[];
59
+ initialViewState?: {
60
+ latitude?: number;
61
+ longitude?: number;
62
+ zoom?: number;
63
+ };
23
64
  mapId: string;
65
+ mapImageUrls?: string[];
24
66
  mapViewStyle: MapViewStyle;
25
- markers?: MapMarker[];
26
- onClick?: (event: MapMouseEvent) => void;
67
+ markerGroups?: MapMarkerGroup[];
68
+ onClickCanvas?: (event: MapMouseEvent) => void;
27
69
  setMapViewStyle: (style: MapViewStyle) => void;
28
70
  token: string;
29
71
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MapBox.d.ts","sourceRoot":"","sources":["../../../src/components/Map/MapBox.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,8BAA8B,CAAC;AAKtC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEvE,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,SAAS,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,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,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,eAAe,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,MAAM,UAAW,WAAW,KAAG,WA+FpC,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,YAAY,GAAG;IACzB,UAAU,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,qBAAqB,CAAC;CAC9B,CAAC;AAGF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,YAAY,EAAE,CAAC;CAC5B,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,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,EAAE,qBAAqB,CAAC;CAC9B,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,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACtC,gBAAgB,CAAC,EAAE;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,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,WA4iBpC,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -5,7 +5,7 @@ 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");
@@ -13,25 +13,35 @@ require("mapbox-gl/dist/mapbox-gl.css");
13
13
  var _utils = require("../../utils");
14
14
  var _Icon = _interopRequireDefault(require("../Icon/Icon"));
15
15
  var _MapViewStyleControl = _interopRequireDefault(require("./MapViewStyleControl"));
16
- const MapViewStyles = exports.MapViewStyles = ['Outdoors', 'Satellite', 'Light', 'Dark', 'Streets'];
17
- const stylesUrl = exports.stylesUrl = {
18
- Outdoors: 'mapbox://styles/mapbox/outdoors-v12?optimize=true',
19
- Satellite: 'mapbox://styles/mapbox/satellite-streets-v12?optimize=true',
20
- Streets: 'mapbox://styles/mapbox/streets-v12?optimize=true',
21
- Light: 'mapbox://styles/mapbox/light-v11?optimize=true',
22
- Dark: 'mapbox://styles/mapbox/dark-v11?optimize=true'
23
- };
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
+
21
+ // Additional shading/annotations for map entities
22
+
24
23
  const MapBox = props => {
25
24
  const {
25
+ children,
26
+ clusterRadius,
26
27
  containerId,
28
+ controlBottomLeft,
29
+ controlTopRight,
30
+ cursorInteract,
31
+ cursorMap,
32
+ disableDoubleClickZoom,
27
33
  disableZoom,
34
+ featureGroups,
28
35
  hideFullScreenControl,
29
36
  hideMapViewStyleControl,
30
37
  hideZoomControl,
38
+ highlightGroups,
39
+ initialViewState,
31
40
  mapId,
41
+ mapImageUrls,
32
42
  mapViewStyle,
33
- markers,
34
- onClick,
43
+ markerGroups,
44
+ onClickCanvas,
35
45
  setMapViewStyle,
36
46
  token
37
47
  } = props;
@@ -40,58 +50,387 @@ const MapBox = props => {
40
50
  const {
41
51
  isDesktop
42
52
  } = (0, _utils.useDeviceInfo)();
53
+ const [cursor, setCursor] = (0, _react.useState)('auto');
54
+ const [hoverFeatureId, setHoverFeatureId] = (0, _react.useState)();
55
+ const [zoom, setZoom] = (0, _react.useState)();
56
+ const loadImages = (0, _react.useCallback)(map => {
57
+ mapImageUrls === null || mapImageUrls === void 0 ? void 0 : mapImageUrls.forEach(url => {
58
+ if (!map.hasImage(url)) {
59
+ map.loadImage(url, (error, image) => {
60
+ if (image) {
61
+ map.addImage(url, image, {
62
+ sdf: true
63
+ });
64
+ }
65
+ });
66
+ }
67
+ });
68
+ }, [mapImageUrls]);
43
69
  const mapRefCallback = (0, _react.useCallback)(map => {
44
70
  if (map !== null) {
45
71
  mapRef.current = map;
72
+ setZoom(map.getZoom());
73
+ loadImages(map);
46
74
  }
47
75
  }, []);
76
+ const onMove = (0, _react.useCallback)(view => {
77
+ setZoom(view.viewState.zoom);
78
+ }, []);
79
+ const clusterMarkers = (0, _react.useCallback)((map, markers) => {
80
+ if (!map || map.getZoom() > 15) {
81
+ // Too zoomed in. Return all marker as is
82
+ return markers.map(marker => [marker]);
83
+ }
84
+ const visited = new Set();
85
+ const markerPixels = {};
86
+ markers.forEach(marker => {
87
+ markerPixels[marker.id] = map.project({
88
+ lat: marker.latitude,
89
+ lon: marker.longitude
90
+ });
91
+ });
92
+ const clusters = [];
93
+ markers.forEach((marker, idx) => {
94
+ if (!visited.has(marker.id)) {
95
+ const cluster = [marker];
96
+ markers.slice(idx + 1).forEach(otherMarker => {
97
+ if (!visited.has(otherMarker.id)) {
98
+ const dx = markerPixels[marker.id].x - markerPixels[otherMarker.id].x;
99
+ const dy = markerPixels[marker.id].y - markerPixels[otherMarker.id].y;
100
+ const dist = Math.sqrt(dx * dx + dy * dy);
101
+ if (dist <= (clusterRadius !== null && clusterRadius !== void 0 ? clusterRadius : 40)) {
102
+ cluster.push(otherMarker);
103
+ visited.add(otherMarker.id);
104
+ }
105
+ }
106
+ });
107
+ clusters.push(cluster);
108
+ }
109
+ });
110
+ return clusters;
111
+ }, [clusterRadius]);
112
+
113
+ // Find all layers with at least some clickable elements
114
+ const interactiveLayerIds = (0, _react.useMemo)(() => {
115
+ var _featureGroups$filter;
116
+ 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);
117
+ }, [featureGroups]);
118
+ const geojson = (0, _react.useMemo)(() => {
119
+ const features = featureGroups === null || featureGroups === void 0 ? void 0 : featureGroups.flatMap(group => {
120
+ return group.features.map(feature => {
121
+ var _feature$priority, _feature$selected;
122
+ const properties = {
123
+ id: feature.featureId,
124
+ clickable: feature.onClick !== undefined,
125
+ label: feature.label,
126
+ layerFeatureId: "".concat(group.groupId, "/").concat(feature.featureId),
127
+ layerId: group.groupId,
128
+ priority: (_feature$priority = feature.priority) !== null && _feature$priority !== void 0 ? _feature$priority : 0,
129
+ selected: (_feature$selected = feature.selected) !== null && _feature$selected !== void 0 ? _feature$selected : false
130
+ };
131
+ return {
132
+ type: 'Feature',
133
+ geometry: feature.geometry,
134
+ properties
135
+ };
136
+ });
137
+ });
138
+ return features ? {
139
+ type: 'FeatureCollection',
140
+ features
141
+ } : undefined;
142
+ }, [featureGroups]);
143
+ const {
144
+ borderLayers,
145
+ fillLayers,
146
+ textLayers
147
+ } = (0, _react.useMemo)(() => {
148
+ const visibleGroups = featureGroups === null || featureGroups === void 0 ? void 0 : featureGroups.filter(group => !group.hidden);
149
+ const _borderLayers = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
150
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
151
+ key: "".concat(group.groupId, "-border"),
152
+ id: "".concat(group.groupId, "-border"),
153
+ source: 'mapData',
154
+ type: "line",
155
+ paint: {
156
+ 'line-color': group.style.borderColor,
157
+ 'line-width': 2
158
+ },
159
+ filter: ['==', ['get', 'layerId'], group.groupId]
160
+ });
161
+ });
162
+ const _fillLayers = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
163
+ var _group$style$opacity;
164
+ const opacity = Math.min(0.4, (_group$style$opacity = group.style.opacity) !== null && _group$style$opacity !== void 0 ? _group$style$opacity : 0.2);
165
+ const selectedOpacity = opacity * 2;
166
+ const hoverOpacity = opacity * 1.5;
167
+ const hoverAndSelectedOpacity = opacity * 2.5;
168
+ const groupFilter = ['==', ['get', 'layerId'], group.groupId];
169
+ const selectedFilter = ['==', ['get', 'selected'], true];
170
+ const notSelectedFilter = ['==', ['get', 'selected'], false];
171
+ const hoverFilter = ['==', ['get', 'id'], hoverFeatureId !== null && hoverFeatureId !== void 0 ? hoverFeatureId : null];
172
+ const notHoverFilter = ['!=', ['get', 'id'], hoverFeatureId !== null && hoverFeatureId !== void 0 ? hoverFeatureId : null];
173
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
174
+ key: group.groupId,
175
+ id: group.groupId,
176
+ source: 'mapData',
177
+ type: 'fill',
178
+ paint: {
179
+ 'fill-opacity': 0
180
+ },
181
+ filter: groupFilter
182
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
183
+ key: "".concat(group.groupId, "-unselected"),
184
+ id: "".concat(group.groupId, "-unselected"),
185
+ source: 'mapData',
186
+ type: 'fill',
187
+ paint: group.style.fillPatternUrl ? {
188
+ 'fill-pattern': group.style.fillPatternUrl,
189
+ 'fill-opacity': opacity
190
+ } : {
191
+ 'fill-color': group.style.fillColor,
192
+ 'fill-opacity': opacity
193
+ },
194
+ filter: ['all', groupFilter, notSelectedFilter, notHoverFilter]
195
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
196
+ key: "".concat(group.groupId, "-selected"),
197
+ id: "".concat(group.groupId, "-selected"),
198
+ source: 'mapData',
199
+ type: 'fill',
200
+ paint: group.style.fillPatternUrl ? {
201
+ 'fill-pattern': group.style.fillPatternUrl,
202
+ 'fill-opacity': selectedOpacity
203
+ } : {
204
+ 'fill-color': group.style.fillColor,
205
+ 'fill-opacity': selectedOpacity
206
+ },
207
+ filter: ['all', groupFilter, selectedFilter, notHoverFilter]
208
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
209
+ key: "".concat(group.groupId, "-hover"),
210
+ id: "".concat(group.groupId, "-hover"),
211
+ source: 'mapData',
212
+ type: 'fill',
213
+ paint: group.style.fillPatternUrl ? {
214
+ 'fill-pattern': group.style.fillPatternUrl,
215
+ 'fill-opacity': hoverOpacity
216
+ } : {
217
+ 'fill-color': group.style.fillColor,
218
+ 'fill-opacity': hoverOpacity
219
+ },
220
+ filter: ['all', groupFilter, hoverFilter, notSelectedFilter]
221
+ }), /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
222
+ key: "".concat(group.groupId, "-selected-hover"),
223
+ id: "".concat(group.groupId, "-selected-hover"),
224
+ source: 'mapData',
225
+ type: 'fill',
226
+ paint: group.style.fillPatternUrl ? {
227
+ 'fill-pattern': group.style.fillPatternUrl,
228
+ 'fill-opacity': hoverAndSelectedOpacity
229
+ } : {
230
+ 'fill-color': group.style.fillColor,
231
+ 'fill-opacity': hoverAndSelectedOpacity
232
+ },
233
+ filter: ['all', groupFilter, hoverFilter, selectedFilter]
234
+ }));
235
+ });
236
+ const _textLayers = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.map(group => {
237
+ const groupFilter = ['==', ['get', 'layerId'], group.groupId];
238
+ const labelFilter = ['has', 'label'];
239
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
240
+ key: "".concat(group.groupId, "-label"),
241
+ id: "".concat(group.groupId, "-label"),
242
+ source: 'mapData',
243
+ type: 'symbol',
244
+ layout: {
245
+ 'text-field': ['get', 'label'],
246
+ 'text-size': 14,
247
+ 'text-line-height': 20,
248
+ 'text-font': ['Open Sans Bold', 'Arial Unicode MS Regular'],
249
+ 'text-anchor': 'center',
250
+ 'text-justify': 'center'
251
+ },
252
+ paint: {
253
+ 'text-color': '#ffffff'
254
+ },
255
+ filter: ['all', groupFilter, labelFilter]
256
+ });
257
+ });
258
+ return {
259
+ borderLayers: _borderLayers,
260
+ fillLayers: _fillLayers,
261
+ textLayers: _textLayers
262
+ };
263
+ }, [featureGroups, hoverFeatureId]);
264
+ const highlightLayers = (0, _react.useMemo)(() => {
265
+ var _visibleGroups$flatMa;
266
+ const visibleGroups = highlightGroups === null || highlightGroups === void 0 ? void 0 : highlightGroups.filter(group => !group.hidden);
267
+ return (_visibleGroups$flatMa = visibleGroups === null || visibleGroups === void 0 ? void 0 : visibleGroups.flatMap(group => {
268
+ return group.highlights.map(highlight => {
269
+ var _highlight$style$opac, _highlight$style$opac2;
270
+ const highlightFeatureIds = highlight.featureIds.map(_ref => {
271
+ let {
272
+ featureGroupId,
273
+ featureId
274
+ } = _ref;
275
+ return "".concat(featureGroupId, "/").concat(featureId);
276
+ });
277
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Layer, {
278
+ key: "highlight-".concat(highlight.highlightId),
279
+ id: "highlight-".concat(highlight.highlightId),
280
+ source: 'mapData',
281
+ type: 'fill',
282
+ paint: highlight.style.fillPatternUrl ? {
283
+ 'fill-pattern': highlight.style.fillPatternUrl,
284
+ 'fill-opacity': (_highlight$style$opac = highlight.style.opacity) !== null && _highlight$style$opac !== void 0 ? _highlight$style$opac : 0.5
285
+ } : {
286
+ 'fill-color': highlight.style.fillColor,
287
+ 'fill-opacity': (_highlight$style$opac2 = highlight.style.opacity) !== null && _highlight$style$opac2 !== void 0 ? _highlight$style$opac2 : 0.5
288
+ },
289
+ filter: ['all', ['has', 'layerFeatureId'], ['match', ['get', 'layerFeatureId'], highlightFeatureIds, true, false]]
290
+ });
291
+ });
292
+ })) !== null && _visibleGroups$flatMa !== void 0 ? _visibleGroups$flatMa : [];
293
+ }, [highlightGroups]);
48
294
  const markersComponents = (0, _react.useMemo)(() => {
49
- return markers === null || markers === void 0 ? void 0 : markers.map(marker => {
50
- // TODO: implement clustering
51
- const fillStyle = marker.style.type === 'fill' ? {
52
- border: "2px solid ".concat(marker.style.borderColor),
53
- backgroundColor: marker.style.fillColor,
54
- backgroundImage: marker.style.fillPatternUrl ? "url('".concat(marker.style.fillPatternUrl, "')") : undefined,
55
- backgroundRepeat: 'repeat',
56
- opacity: marker.style.opacity
57
- } : undefined;
58
- return /*#__PURE__*/_react.default.createElement(_mapbox.Marker, {
59
- className: "map-marker",
60
- key: marker.id,
61
- longitude: marker.longitude,
62
- latitude: marker.latitude,
63
- anchor: "center",
64
- onClick: marker.onClick,
65
- style: fillStyle
66
- }, marker.style.type === 'icon' && /*#__PURE__*/_react.default.createElement(_Icon.default, {
67
- fillColor: marker.style.iconColor,
68
- name: marker.style.iconName,
69
- size: 'small',
70
- style: {
71
- opacity: marker.style.iconOpacity
295
+ var _markerGroups$filter;
296
+ return markerGroups === null || markerGroups === void 0 ? void 0 : (_markerGroups$filter = markerGroups.filter(markerGroup => !markerGroup.hidden)) === null || _markerGroups$filter === void 0 ? void 0 : _markerGroups$filter.flatMap(markerGroup => {
297
+ // cluster markers here
298
+ const clusteredMarkers = clusterMarkers(mapRef.current, markerGroup.markers);
299
+ return clusteredMarkers.map((markers, i) => {
300
+ if (markers.length === 1) {
301
+ const marker = markers[0];
302
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Marker, {
303
+ className: "map-marker",
304
+ key: "marker-".concat(i),
305
+ longitude: marker.longitude,
306
+ latitude: marker.latitude,
307
+ anchor: "center",
308
+ onClick: event => {
309
+ var _marker$onClick;
310
+ (_marker$onClick = marker.onClick) === null || _marker$onClick === void 0 ? void 0 : _marker$onClick.call(marker);
311
+ event.originalEvent.stopPropagation();
312
+ },
313
+ style: {
314
+ backgroundColor: marker.selected ? markerGroup.style.iconColor : theme.palette.TwClrBg
315
+ }
316
+ }, /*#__PURE__*/_react.default.createElement(_Icon.default, {
317
+ fillColor: marker.selected ? theme.palette.TwClrBg : markerGroup.style.iconColor,
318
+ name: markerGroup.style.iconName,
319
+ size: 'small'
320
+ }));
321
+ } else if (markers.length > 1) {
322
+ const latSum = markers.reduce((sum, marker) => sum + marker.latitude, 0);
323
+ const lngSum = markers.reduce((sum, marker) => sum + marker.longitude, 0);
324
+ const latAvg = latSum / markers.length;
325
+ const lngAvg = lngSum / markers.length;
326
+ const selected = markers.some(marker => marker.selected);
327
+ return /*#__PURE__*/_react.default.createElement(_mapbox.Marker, {
328
+ className: "map-marker map-marker--cluster",
329
+ key: "marker-".concat(i),
330
+ longitude: lngAvg,
331
+ latitude: latAvg,
332
+ anchor: "center",
333
+ onClick: event => {
334
+ var _mapRef$current;
335
+ (_mapRef$current = mapRef.current) === null || _mapRef$current === void 0 ? void 0 : _mapRef$current.easeTo({
336
+ center: {
337
+ lat: latAvg,
338
+ lon: lngAvg
339
+ },
340
+ zoom: (zoom !== null && zoom !== void 0 ? zoom : 10) + 1,
341
+ duration: 500
342
+ });
343
+ event.originalEvent.stopPropagation();
344
+ },
345
+ style: {
346
+ backgroundColor: selected ? markerGroup.style.iconColor : theme.palette.TwClrBg
347
+ }
348
+ }, /*#__PURE__*/_react.default.createElement("p", {
349
+ className: "title"
350
+ }, markers.length), /*#__PURE__*/_react.default.createElement(_Icon.default, {
351
+ fillColor: selected ? theme.palette.TwClrBg : markerGroup.style.iconColor,
352
+ name: markerGroup.style.iconName,
353
+ size: 'small'
354
+ }));
72
355
  }
73
- }));
356
+ });
74
357
  });
75
- }, [markers]);
358
+ }, [markerGroups, theme, zoom]);
359
+ const onMouseMove = (0, _react.useCallback)(event => {
360
+ if (event.features && event.features.length) {
361
+ const properties = event.features.map(feature => feature.properties).filter(featureProperties => featureProperties && featureProperties.id !== undefined && featureProperties.priority !== undefined && featureProperties.clickable);
362
+ if (properties.length) {
363
+ const topPriorityFeature = properties.reduce((top, current) => {
364
+ return current.priority > top.priority ? current : top;
365
+ }, properties[0]);
366
+ setHoverFeatureId(topPriorityFeature.id);
367
+ return;
368
+ }
369
+ }
370
+ setHoverFeatureId(undefined);
371
+ }, []);
372
+
373
+ // Hovering interactive layers
374
+ const onMouseEnter = (0, _react.useCallback)(event => {
375
+ if (event.features && event.features.some(feature => {
376
+ var _feature$properties;
377
+ return (_feature$properties = feature.properties) === null || _feature$properties === void 0 ? void 0 : _feature$properties.clickable;
378
+ })) {
379
+ setCursor(cursorInteract !== null && cursorInteract !== void 0 ? cursorInteract : 'auto');
380
+ } else {
381
+ setCursor('auto');
382
+ }
383
+ }, [cursorInteract]);
384
+ const onMouseLeave = (0, _react.useCallback)(() => setCursor('auto'), []);
385
+
386
+ // Entering and exiting canvases
387
+ const onMouseOver = (0, _react.useCallback)(() => setCursor(cursorMap !== null && cursorMap !== void 0 ? cursorMap : 'auto'), [cursorMap]);
388
+ const onMouseOut = (0, _react.useCallback)(() => setCursor('auto'), []);
389
+
390
+ // On layer click
391
+ const onMapClick = (0, _react.useCallback)(event => {
392
+ var _event$features;
393
+ if (featureGroups && (_event$features = event.features) !== null && _event$features !== void 0 && _event$features.length) {
394
+ const properties = event.features.map(feature => feature.properties).filter(featureProperties => featureProperties && featureProperties.id !== undefined && featureProperties.priority !== undefined && featureProperties.clickable);
395
+ if (properties.length) {
396
+ const topPriorityFeature = properties.reduce((top, current) => {
397
+ return current.priority > top.priority ? current : top;
398
+ }, properties[0]);
399
+ const clickedItem = featureGroups.flatMap(group => group.features).find(feature => feature.featureId === topPriorityFeature.id);
400
+ if (clickedItem && clickedItem.onClick) {
401
+ clickedItem.onClick();
402
+ return;
403
+ }
404
+ }
405
+ // If feature not clickable or not handled, fall through to canvas
406
+ }
407
+ if (onClickCanvas !== undefined) {
408
+ onClickCanvas(event);
409
+ }
410
+ }, [featureGroups, onClickCanvas]);
76
411
  return /*#__PURE__*/_react.default.createElement(_mapbox.default, {
77
412
  key: mapId,
78
413
  attributionControl: false,
414
+ cursor: cursor,
415
+ doubleClickZoom: !disableZoom && !disableDoubleClickZoom,
416
+ interactiveLayerIds: interactiveLayerIds,
417
+ initialViewState: initialViewState,
79
418
  mapboxAccessToken: token,
419
+ mapStyle: _types.stylesUrl[mapViewStyle],
80
420
  ref: mapRefCallback,
81
- mapStyle: stylesUrl[mapViewStyle],
82
- initialViewState: {
83
- longitude: -122.4,
84
- latitude: 37.8,
85
- zoom: 14
86
- },
421
+ scrollZoom: !disableZoom,
87
422
  style: {
88
423
  width: 'fill',
89
424
  height: isDesktop ? 'fill' : '80vh',
90
425
  flexGrow: isDesktop ? 1 : undefined
91
426
  },
92
- scrollZoom: !disableZoom,
93
- doubleClickZoom: !disableZoom,
94
- onClick: onClick
427
+ onClick: onMapClick,
428
+ onMove: onMove,
429
+ onMouseEnter: onMouseEnter,
430
+ onMouseLeave: onMouseLeave,
431
+ onMouseOver: onMouseOver,
432
+ onMouseOut: onMouseOut,
433
+ onMouseMove: onMouseMove
95
434
  }, isDesktop && !hideFullScreenControl && /*#__PURE__*/_react.default.createElement(_mapbox.FullscreenControl, {
96
435
  position: "top-left",
97
436
  containerId: containerId
@@ -106,6 +445,28 @@ const MapBox = props => {
106
445
  containerId: containerId,
107
446
  mapViewStyle: mapViewStyle,
108
447
  setMapViewStyle: setMapViewStyle
109
- }), markersComponents);
448
+ }), controlTopRight && /*#__PURE__*/_react.default.createElement(_material.Box, {
449
+ sx: {
450
+ height: 'max-content',
451
+ position: 'absolute',
452
+ right: theme.spacing(2),
453
+ top: theme.spacing(2),
454
+ width: 'max-content',
455
+ zIndex: 1000
456
+ }
457
+ }, controlTopRight), controlBottomLeft && /*#__PURE__*/_react.default.createElement(_material.Box, {
458
+ style: {
459
+ height: 'max-content',
460
+ position: 'absolute',
461
+ left: theme.spacing(2),
462
+ bottom: theme.spacing(4),
463
+ width: 'max-content',
464
+ zIndex: 1000
465
+ }
466
+ }, controlBottomLeft), geojson && /*#__PURE__*/_react.default.createElement(_mapbox.Source, {
467
+ id: "mapData",
468
+ type: "geojson",
469
+ data: geojson
470
+ }, borderLayers, fillLayers, highlightLayers, textLayers), markersComponents, children);
110
471
  };
111
472
  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,36 +1,36 @@
1
1
  /// <reference types="react" />
2
2
  import { MapFillComponentStyle, MapIconComponentStyle } from './types';
3
- export type MapLayerItem = {
3
+ export type MapLayerLegendItem = {
4
4
  disabled?: boolean;
5
5
  id: string;
6
6
  label: string;
7
7
  style: MapIconComponentStyle | MapFillComponentStyle;
8
8
  };
9
- export type MapLayerGroup = {
9
+ export type MapLayerLegendGroup = {
10
10
  type: 'layer';
11
- items: MapLayerItem[];
11
+ items: MapLayerLegendItem[];
12
12
  setSelectedLayer: (id: string) => void;
13
13
  selectedLayer: string;
14
14
  };
15
- export type MapMarkerItem = {
15
+ export type MapMarkerLegendItem = {
16
16
  disabled?: boolean;
17
17
  id: string;
18
18
  label: string;
19
- style: MapIconComponentStyle | MapFillComponentStyle;
19
+ style: MapIconComponentStyle;
20
20
  setVisible?: (visible: boolean) => void;
21
21
  visible: boolean;
22
22
  };
23
- export type MapMarkerGroup = {
23
+ export type MapMarkerLegendGroup = {
24
24
  type: 'marker';
25
- items: MapMarkerItem[];
25
+ items: MapMarkerLegendItem[];
26
26
  };
27
- export type MapHighlightItem = {
27
+ export type MapHighlightLegendItem = {
28
28
  label: string;
29
29
  style: MapIconComponentStyle | MapFillComponentStyle;
30
30
  };
31
- export type MapHighlightGroup = {
31
+ export type MapHighlightLegendGroup = {
32
32
  type: 'highlight';
33
- items: MapHighlightItem[];
33
+ items: MapHighlightLegendItem[];
34
34
  setVisible?: (visible: boolean) => void;
35
35
  visible: boolean;
36
36
  };
@@ -38,7 +38,7 @@ export type MapLegendGroup = {
38
38
  disabled?: boolean;
39
39
  tooltip?: string;
40
40
  title: string;
41
- } & (MapMarkerGroup | MapLayerGroup | MapHighlightGroup);
41
+ } & (MapMarkerLegendGroup | MapLayerLegendGroup | MapHighlightLegendGroup);
42
42
  export type MapLegendProps = {
43
43
  legends: MapLegendGroup[];
44
44
  };
@@ -1 +1 @@
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,YAAY,GAAG;IACzB,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,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,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC;CACtD,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,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC,CAAC;AAEzD,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"}
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"}
@@ -60,14 +60,13 @@ const MapLegend = _ref => {
60
60
  name: item.style.iconName,
61
61
  fillColor: item.style.iconColor,
62
62
  style: {
63
- marginRight: theme.spacing(1),
64
- opacity: item.style.iconOpacity
63
+ marginRight: theme.spacing(1)
65
64
  },
66
65
  size: 'small'
67
66
  });
68
67
  } else {
69
68
  var _item$style$opacity, _item$style$borderCol;
70
- const opacity = (_item$style$opacity = item.style.opacity) !== null && _item$style$opacity !== void 0 ? _item$style$opacity : 1.0;
69
+ const opacity = (_item$style$opacity = item.style.opacity) !== null && _item$style$opacity !== void 0 ? _item$style$opacity : 0.2;
71
70
  return /*#__PURE__*/_react.default.createElement(_material.Box, {
72
71
  sx: {
73
72
  border: "2px solid ".concat((_item$style$borderCol = item.style.borderColor) !== null && _item$style$borderCol !== void 0 ? _item$style$borderCol : theme.palette.TwClrBrdr),
@@ -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,
@@ -97,5 +97,22 @@
97
97
  border-radius: 50%;
98
98
  cursor: pointer;
99
99
  display: flex;
100
+ flex-direction: column;
100
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
+ }
101
118
  }
@@ -1,8 +1,19 @@
1
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
+ layerFeatureId: string;
9
+ layerId: string;
10
+ priority: number;
11
+ [name: string]: any;
12
+ };
13
+ export type MapCursor = 'auto' | 'crosshair' | 'default' | 'pointer' | 'grab';
2
14
  export type MapIconComponentStyle = {
3
15
  iconColor: string;
4
16
  iconName: IconName;
5
- iconOpacity?: number;
6
17
  type: 'icon';
7
18
  };
8
19
  export type MapFillComponentStyle = {
@@ -12,4 +23,7 @@ export type MapFillComponentStyle = {
12
23
  opacity?: number;
13
24
  type: 'fill';
14
25
  };
26
+ export type MapViewStyle = 'Outdoors' | 'Satellite' | 'Light' | 'Dark' | 'Streets';
27
+ export declare const MapViewStyles: MapViewStyle[];
28
+ export declare const stylesUrl: Record<MapViewStyle, string>;
15
29
  //# sourceMappingURL=types.d.ts.map
@@ -1 +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,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,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"}
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,cAAc,EAAE,MAAM,CAAC;IACvB,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"}
@@ -2,4 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
- });
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.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>
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">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.9",
3
+ "version": "3.5.11",
4
4
  "author": "Terraformation Inc.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -23,6 +23,7 @@
23
23
  "@mui/material": "^6.0.0",
24
24
  "@mui/x-date-pickers": "^7.22.0",
25
25
  "classnames": "^2.3.2",
26
+ "geojson": "^0.5.0",
26
27
  "luxon": "^3.3.0",
27
28
  "mapbox-gl": "^3.13.0",
28
29
  "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,EAAsC,MAAM,0BAA0B,CAAC;;;;;AAMnG,wBAGE;AA0MF,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;AA8LF,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"}
@@ -5,6 +5,7 @@ declare const _default: {
5
5
  };
6
6
  export default _default;
7
7
  export declare const Default: import("@storybook/types").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, {
8
+ clusterRadius: number;
8
9
  token: string;
9
10
  }>;
10
11
  //# sourceMappingURL=MapMarker.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapMarker.stories.d.ts","sourceRoot":"","sources":["../../src/stories/MapMarker.stories.tsx"],"names":[],"mappings":";;;;;AAgBA,wBAGE;AAoIF,eAAO,MAAM,OAAO;WAlIW,MAAM;EAkIG,CAAC"}
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);