@xyo-network/react-map 7.5.6 → 7.5.7

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.
@@ -9,7 +9,7 @@ import React8, { useState as useState5 } from "react";
9
9
 
10
10
  // src/Contexts/HeatMapInitializer/Provider.tsx
11
11
  import { forget as forget2 } from "@xylabs/sdk-js";
12
- import React3, { useEffect as useEffect4, useMemo as useMemo6 } from "react";
12
+ import React3, { useEffect as useEffect5, useMemo as useMemo5 } from "react";
13
13
 
14
14
  // src/hooks/useDynamicMapResize.tsx
15
15
  import { useEffect, useMemo } from "react";
@@ -102,7 +102,7 @@ var useDynamicPositioning = /* @__PURE__ */ __name(() => {
102
102
  // src/hooks/useQuadKeyPayloadsToFeatures.tsx
103
103
  import { GeoJson } from "@xylabs/geo";
104
104
  import { exists } from "@xylabs/sdk-js";
105
- import { useMemo as useMemo3, useState } from "react";
105
+ import { useEffect as useEffect2, useState } from "react";
106
106
  var quadKeyToFeature = /* @__PURE__ */ __name(({ density, quadkey }) => {
107
107
  const polygonFeature = new GeoJson(quadkey).polygonFeature();
108
108
  polygonFeature.properties = {
@@ -123,7 +123,7 @@ var useQuadKeyPayloadsToFeatures = /* @__PURE__ */ __name((payloads) => {
123
123
  ]);
124
124
  const [features, setFeatures] = useState([]);
125
125
  const [error, setError] = useState();
126
- useMemo3(() => {
126
+ useEffect2(() => {
127
127
  if (Array.isArray(payloads)) {
128
128
  if (payloads?.filter(exists).length > 0) {
129
129
  const mappedFeatures = payloads?.map((payload) => payload?.result.map(quadKeyToFeature));
@@ -477,7 +477,7 @@ var MapSettings = class _MapSettings {
477
477
  };
478
478
 
479
479
  // src/Contexts/MapBoxInstance/Provider.tsx
480
- import React, { useEffect as useEffect2, useMemo as useMemo4, useState as useState2 } from "react";
480
+ import React, { useEffect as useEffect3, useMemo as useMemo3, useState as useState2 } from "react";
481
481
 
482
482
  // src/Contexts/MapBoxInstance/Context.ts
483
483
  import { createContext } from "react";
@@ -487,7 +487,7 @@ var MapBoxInstanceContext = createContext({});
487
487
  var MapBoxInstanceProvider = /* @__PURE__ */ __name(({ children }) => {
488
488
  const [map, setMapBoxInstance] = useState2();
489
489
  const [mapInitialized, setMapInitialized] = useState2(false);
490
- const value = useMemo4(() => ({
490
+ const value = useMemo3(() => ({
491
491
  map,
492
492
  mapInitialized,
493
493
  setMapBoxInstance
@@ -496,7 +496,7 @@ var MapBoxInstanceProvider = /* @__PURE__ */ __name(({ children }) => {
496
496
  mapInitialized,
497
497
  setMapBoxInstance
498
498
  ]);
499
- useEffect2(() => {
499
+ useEffect3(() => {
500
500
  if (!mapInitialized && map) {
501
501
  map?.on("load", () => {
502
502
  setMapInitialized(true);
@@ -522,7 +522,7 @@ var useMapBoxInstance = /* @__PURE__ */ __name(() => {
522
522
  }, "useMapBoxInstance");
523
523
 
524
524
  // src/Contexts/MapSettings/Provider.tsx
525
- import React2, { useEffect as useEffect3, useMemo as useMemo5, useState as useState3 } from "react";
525
+ import React2, { useEffect as useEffect4, useMemo as useMemo4, useState as useState3 } from "react";
526
526
 
527
527
  // src/Contexts/MapSettings/Context.ts
528
528
  import { createContext as createContext2 } from "react";
@@ -532,14 +532,14 @@ var MapSettingsContext = createContext2({});
532
532
  var MapSettingsProvider = /* @__PURE__ */ __name(({ children, debugLayerName, defaultMapSettings, requestLocation, zoom = 1 }) => {
533
533
  const [mapSettings, setMapSettings] = useState3(defaultMapSettings || {});
534
534
  const { map, mapInitialized } = useMapBoxInstance();
535
- const value = useMemo5(() => ({
535
+ const value = useMemo4(() => ({
536
536
  mapSettings,
537
537
  setMapSettings
538
538
  }), [
539
539
  mapSettings,
540
540
  setMapSettings
541
541
  ]);
542
- useEffect3(() => {
542
+ useEffect4(() => {
543
543
  if (mapSettings && map && mapInitialized) {
544
544
  MapSettings.updateSettings({
545
545
  debugLayerName,
@@ -578,7 +578,7 @@ var HeatMapInitializerProvider = /* @__PURE__ */ __name(({ children, featureSets
578
578
  const { options } = useDynamicPositioning();
579
579
  const { mapSettings } = useMapSettings();
580
580
  const { map, mapInitialized } = useMapBoxInstance();
581
- const mapHeat = useMemo6(() => {
581
+ const mapHeat = useMemo5(() => {
582
582
  return map && features?.length ? new MapHeat({
583
583
  features,
584
584
  map,
@@ -589,14 +589,14 @@ var HeatMapInitializerProvider = /* @__PURE__ */ __name(({ children, featureSets
589
589
  features,
590
590
  zoom
591
591
  ]);
592
- const value = useMemo6(() => ({
592
+ const value = useMemo5(() => ({
593
593
  MapHeat: mapHeat,
594
594
  heatMapColorProps
595
595
  }), [
596
596
  mapHeat,
597
597
  heatMapColorProps
598
598
  ]);
599
- useEffect4(() => {
599
+ useEffect5(() => {
600
600
  if (mapInitialized && featureSets?.length && featureSets[0].length > 0 && map && featureSetsLayers?.length) {
601
601
  const { lowUsageColor, highUsageColor } = heatMapColorProps;
602
602
  forget2(MapHeat.initializeAnimatedHeatMapSource(featureSetsLayers, featureSets, map, lowUsageColor, highUsageColor));
@@ -611,7 +611,7 @@ var HeatMapInitializerProvider = /* @__PURE__ */ __name(({ children, featureSets
611
611
  map,
612
612
  heatMapColorProps
613
613
  ]);
614
- useEffect4(() => {
614
+ useEffect5(() => {
615
615
  if (mapHeat && mapInitialized && features?.length && layers?.length) {
616
616
  mapHeat.initializeHeatMapSource(layers);
617
617
  }
@@ -621,7 +621,7 @@ var HeatMapInitializerProvider = /* @__PURE__ */ __name(({ children, featureSets
621
621
  layers,
622
622
  mapInitialized
623
623
  ]);
624
- useEffect4(() => {
624
+ useEffect5(() => {
625
625
  if (mapInitialized) {
626
626
  const { fitToPoints: fitToPoints2 } = mapSettings || {};
627
627
  if (map) {
@@ -972,7 +972,7 @@ import React7 from "react";
972
972
  import "mapbox-gl/dist/mapbox-gl.css";
973
973
  import { MapStyle } from "@xyo-network/react-map-model";
974
974
  import { Map } from "mapbox-gl";
975
- import React4, { useEffect as useEffect5, useRef, useState as useState4 } from "react";
975
+ import React4, { useEffect as useEffect6, useRef, useState as useState4 } from "react";
976
976
  var MapBox = /* @__PURE__ */ __name(({ accessToken, darkMode = false, options, zoom = 2, ...props }) => {
977
977
  const [map, setMap] = useState4();
978
978
  const mapContainerRef = useRef(null);
@@ -981,7 +981,7 @@ var MapBox = /* @__PURE__ */ __name(({ accessToken, darkMode = false, options, z
981
981
  const { mapSettings } = useMapSettings();
982
982
  const activeResize = mapSettings?.dynamicMapResize.value;
983
983
  useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize);
984
- useEffect5(() => {
984
+ useEffect6(() => {
985
985
  if (mapSettings?.preferDark?.value === true) {
986
986
  map?.setStyle(`mapbox://styles/${MapStyle.Dark}`);
987
987
  } else {
@@ -992,7 +992,7 @@ var MapBox = /* @__PURE__ */ __name(({ accessToken, darkMode = false, options, z
992
992
  darkMode,
993
993
  mapSettings
994
994
  ]);
995
- useEffect5(() => {
995
+ useEffect6(() => {
996
996
  const map2 = new Map({
997
997
  accessToken,
998
998
  center: [
@@ -1243,12 +1243,12 @@ fitToPoints.value = true;
1243
1243
 
1244
1244
  // src/Components/LayerAnimator.tsx
1245
1245
  import { useInterval } from "@xylabs/react-shared";
1246
- import React12, { useCallback, useEffect as useEffect6, useMemo as useMemo7, useRef as useRef2 } from "react";
1246
+ import React12, { useCallback, useEffect as useEffect7, useMemo as useMemo6, useRef as useRef2 } from "react";
1247
1247
  var timeIncrement = 2e3;
1248
1248
  var animatedLayerCount = 3;
1249
1249
  var LayerAnimator = /* @__PURE__ */ __name(({ animateLayers, children, layers, layersInitialized, map }) => {
1250
1250
  const layerIndexQueue = useRef2([]);
1251
- const fillLayers = useMemo7(() => {
1251
+ const fillLayers = useMemo6(() => {
1252
1252
  if (layers?.length && map && layersInitialized) {
1253
1253
  return layers.filter((layer) => {
1254
1254
  const fillLayer = layer.id.startsWith("location-fill");
@@ -1332,7 +1332,7 @@ var LayerAnimator = /* @__PURE__ */ __name(({ animateLayers, children, layers, l
1332
1332
  getNextLayer,
1333
1333
  layerAnimateWorker
1334
1334
  ]);
1335
- useEffect6(() => {
1335
+ useEffect7(() => {
1336
1336
  if (animateLayers && layersInitialized && map && fillLayers.length > 0) {
1337
1337
  queueLayerAnimation();
1338
1338
  }
@@ -1354,7 +1354,7 @@ var LayerAnimator = /* @__PURE__ */ __name(({ animateLayers, children, layers, l
1354
1354
  // src/Components/MapBoxPoints.tsx
1355
1355
  import { Alert as Alert2 } from "@mui/material";
1356
1356
  import { FlexCol as FlexCol6 } from "@xylabs/react-flexbox";
1357
- import React13, { useCallback as useCallback2, useEffect as useEffect7, useMemo as useMemo8 } from "react";
1357
+ import React13, { useCallback as useCallback2, useEffect as useEffect8, useMemo as useMemo7 } from "react";
1358
1358
  var MapboxPointsFlexBox = /* @__PURE__ */ __name(({ accessToken, features, fitToPointsPadding = 20, layers, zoom, ...props }) => {
1359
1359
  const { mapSettings } = useMapSettings();
1360
1360
  const { map, mapInitialized } = useMapBoxInstance();
@@ -1366,7 +1366,7 @@ var MapboxPointsFlexBox = /* @__PURE__ */ __name(({ accessToken, features, fitTo
1366
1366
  }
1367
1367
  return {};
1368
1368
  }, "customFitToBoundsOptions");
1369
- const mapPoints = useMemo8(() => {
1369
+ const mapPoints = useMemo7(() => {
1370
1370
  return map && features?.length ? new MapPoints({
1371
1371
  features,
1372
1372
  map,
@@ -1423,7 +1423,7 @@ var MapboxPointsFlexBox = /* @__PURE__ */ __name(({ accessToken, features, fitTo
1423
1423
  updateFeatures,
1424
1424
  zoom
1425
1425
  ]);
1426
- useEffect7(() => {
1426
+ useEffect8(() => {
1427
1427
  if (mapInitialized) {
1428
1428
  updateMapSetup();
1429
1429
  reInitializeMap();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Components/AnimatedHeatMap.tsx","../../src/Contexts/HeatMapInitializer/Provider.tsx","../../src/hooks/useDynamicMapResize.tsx","../../src/hooks/useDynamicPositioning.tsx","../../src/hooks/useQuadKeyPayloadsToFeatures.tsx","../../src/MapBoxClasses/MapBase.ts","../../src/MapBoxClasses/MapHeat.ts","../../src/MapBoxClasses/MapPoints.ts","../../src/MapBoxClasses/MapSettings.ts","../../src/Contexts/MapBoxInstance/Provider.tsx","../../src/Contexts/MapBoxInstance/Context.ts","../../src/Contexts/MapBoxInstance/useMapBoxInstance.tsx","../../src/Contexts/MapSettings/Provider.tsx","../../src/Contexts/MapSettings/Context.ts","../../src/Contexts/MapSettings/useMapSettings.tsx","../../src/Contexts/HeatMapInitializer/Context.ts","../../src/Contexts/HeatMapInitializer/useHeatMapInitializer.tsx","../../src/Layers/Configs/HeatMapFillLayerConfig.ts","../../src/Layers/Configs/HeatMapLineLayerConfig.ts","../../src/Layers/Configs/HeatMapSymbolLayerConfig.ts","../../src/Layers/Configs/LocationPointLayerConfig.ts","../../src/Layers/FillLayer.ts","../../src/Layers/LineLayer.ts","../../src/Layers/SymbolLayer.ts","../../src/Layers/Builders/LocationHeatMapLayerBuilder.ts","../../src/Layers/Builders/LocationHeatMapLayerBuilderAnimated.ts","../../src/Layers/CircleLayer.ts","../../src/Layers/Builders/LocationPointsMapLayerBuilder.ts","../../src/Components/MapBoxHeat.tsx","../../src/Components/MapBox.tsx","../../src/Components/MapSettingsComponents/Setting.tsx","../../src/Components/MapSettingsComponents/SettingsBox.tsx","../../src/Components/AnimatedHeatMapLoaded.tsx","../../src/Components/Legend.tsx","../../src/Components/Legends/ColorGradient.tsx","../../src/Components/HeatMapSettings.ts","../../src/Components/LayerAnimator.tsx","../../src/Components/MapBoxPoints.tsx"],"sourcesContent":["import { useTheme } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { darkenCss } from '@xylabs/react-theme'\nimport type { AnimatedHeatMapColorProps, MapSetting } from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport type { PropsWithChildren } from 'react'\nimport React, { useState } from 'react'\n\nimport {\n HeatMapInitializerProvider, MapBoxInstanceProvider, MapSettingsProvider,\n} from '../Contexts/index.ts'\nimport type { MapLayer } from '../Layers/index.ts'\nimport { LocationHeatMapLayerBuilderAnimated, MapHeatConstants } from '../Layers/index.ts'\nimport { MapboxHeatFlexBox } from './MapBoxHeat.tsx'\n\nexport interface AnimatedHeatMapProps {\n accessToken: string\n animatedFeatureSets: Feature<Polygon>[][]\n defaultMapSettings?: MapSetting\n heatMapColorProps: AnimatedHeatMapColorProps\n staticFeatureSet: Feature<Polygon>[]\n}\n\nexport const AnimatedHeatMap: React.FC<PropsWithChildren<AnimatedHeatMapProps>> = ({\n accessToken,\n animatedFeatureSets,\n defaultMapSettings,\n heatMapColorProps,\n staticFeatureSet,\n ...props\n}) => {\n const theme = useTheme()\n const {\n staticMapColor, lowUsageColor, highUsageColor,\n } = heatMapColorProps || {}\n const localStaticMapColor = staticMapColor ?? theme.vars.palette.primary.light\n\n const [layers] = useState<MapLayer[]>(() => [\n LocationHeatMapLayerBuilderAnimated(localStaticMapColor, 0, 'static'),\n LocationHeatMapLayerBuilderAnimated(lowUsageColor || localStaticMapColor, 0, 'animated'),\n LocationHeatMapLayerBuilderAnimated(highUsageColor || darkenCss(localStaticMapColor, 0.9), 1, 'animated'),\n ])\n\n return animatedFeatureSets?.length\n ? (\n <MapBoxInstanceProvider>\n <MapSettingsProvider defaultMapSettings={defaultMapSettings} debugLayerName={MapHeatConstants.LocationDebugLayerId}>\n <HeatMapInitializerProvider\n features={staticFeatureSet}\n layers={[layers[0]]}\n featureSets={animatedFeatureSets}\n featureSetsLayers={layers.slice(1, 3)}\n heatMapColorProps={heatMapColorProps}\n >\n <MapboxHeatFlexBox accessToken={accessToken} {...props}></MapboxHeatFlexBox>\n </HeatMapInitializerProvider>\n </MapSettingsProvider>\n </MapBoxInstanceProvider>\n )\n : <FlexCol minHeight={160} minWidth={160} busy />\n}\n","import { forget } from '@xylabs/sdk-js'\nimport type { AnimatedHeatMapColorProps, HeatMapColorProps } from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport type { PropsWithChildren } from 'react'\nimport React, { useEffect, useMemo } from 'react'\n\nimport { useDynamicPositioning } from '../../hooks/index.ts'\nimport type { MapLayer } from '../../Layers/index.ts'\nimport { MapHeat } from '../../MapBoxClasses/index.ts'\nimport { useMapBoxInstance } from '../MapBoxInstance/index.ts'\nimport { useMapSettings } from '../MapSettings/index.ts'\nimport { HeatMapInitializerContext } from './Context.ts'\nimport type { HeatMapInitializerState } from './State.ts'\n\nexport interface MapInitializerProviderProps {\n featureSets?: Feature<Polygon>[][]\n featureSetsLayers?: MapLayer[]\n features?: Feature<Polygon>[]\n fitToPadding?: number\n heatMapColorProps: HeatMapColorProps | AnimatedHeatMapColorProps\n layers?: MapLayer[]\n zoom?: number\n}\n\nexport const HeatMapInitializerProvider: React.FC<PropsWithChildren<MapInitializerProviderProps>> = ({\n children,\n featureSets,\n featureSetsLayers,\n features,\n fitToPadding,\n heatMapColorProps,\n layers,\n zoom,\n}) => {\n const { options } = useDynamicPositioning()\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n const mapHeat = useMemo(() => {\n return (map && features?.length)\n ? new MapHeat({\n features, map, zoom,\n })\n : undefined\n }, [map, features, zoom])\n\n const value: HeatMapInitializerState = useMemo(() => ({\n MapHeat: mapHeat,\n heatMapColorProps,\n }), [mapHeat, heatMapColorProps])\n\n useEffect(() => {\n if (mapInitialized && featureSets?.length && featureSets[0].length > 0 && map && featureSetsLayers?.length) {\n const { lowUsageColor, highUsageColor } = heatMapColorProps as AnimatedHeatMapColorProps\n forget(MapHeat.initializeAnimatedHeatMapSource(featureSetsLayers, featureSets, map, lowUsageColor, highUsageColor))\n }\n\n return () => {\n MapHeat.animationStarted = false\n }\n }, [featureSets, featureSetsLayers, mapInitialized, map, heatMapColorProps])\n\n useEffect(() => {\n if (mapHeat && mapInitialized && features?.length && layers?.length) {\n mapHeat.initializeHeatMapSource(layers)\n }\n }, [mapHeat, features?.length, layers, mapInitialized])\n\n useEffect(() => {\n if (mapInitialized) {\n const { fitToPoints } = mapSettings || {}\n\n if (map) {\n if (fitToPoints?.value === true) {\n MapHeat.initialMapPositioning(\n {\n padding: {\n bottom: fitToPadding, left: fitToPadding, right: fitToPadding, top: fitToPadding,\n },\n },\n map,\n features,\n )\n } else if (options?.zoom && options.center) {\n map.setZoom(options.zoom)\n map.setCenter(options.center)\n }\n }\n }\n }, [mapHeat, map, mapSettings, fitToPadding, options, mapInitialized, features])\n\n return <HeatMapInitializerContext value={value}>{children}</HeatMapInitializerContext>\n}\n","import type { Map } from 'mapbox-gl'\nimport type { RefObject } from 'react'\nimport { useEffect, useMemo } from 'react'\n\n/**\n * Inspired by - https://bl.ocks.org/danswick/fc56f37c10d40be62e4feac5984250d2\n */\nexport const useDynamicMapResize = (\n mapContainerRef: RefObject<HTMLDivElement | null>,\n mapCanvasRef: RefObject<HTMLCanvasElement | null>,\n mapInstance?: Map,\n active = true,\n) => {\n const resizer = useMemo(\n () =>\n new ResizeObserver(() => {\n const width = mapContainerRef.current?.getBoundingClientRect().width\n if (width && mapCanvasRef.current) {\n mapCanvasRef.current.style.width = `${width}px`\n // setTimeout allows for the smoothest animation (vs requestAnimationFrame, debouce, etc)\n // likely because it lets mapbox resize once when the event loop is ready?\n setTimeout(() => mapInstance?.resize())\n }\n }),\n [mapCanvasRef, mapContainerRef, mapInstance],\n )\n\n const dependenciesReady = useMemo(() => {\n return !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current)\n }, [active, mapCanvasRef, mapContainerRef, mapInstance])\n\n useEffect(() => {\n if (dependenciesReady) {\n if (mapContainerRef.current) {\n resizer.observe(mapContainerRef.current)\n }\n\n return () => {\n resizer.disconnect()\n }\n }\n }, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer])\n}\n","import { useWindowSize } from '@xylabs/react-shared'\nimport type { MapOptions } from 'mapbox-gl'\nimport { useMemo } from 'react'\n\n/**\n * Zoom level for the map\n *\n * Note: Changing zoom will require changes to Lat/Lng Ranges\n */\nconst defaultZoom = 1.6\n\n/**\n * Range of aspect ratio values (width / height = aspect ratio) to scale against degrees\n * On lower aspect ratios, the width is larger than the height and vice-versa for higher\n */\nconst defaultAspectRatioRange = [0.5, 2]\n\n/**\n * Lat/Lng ranges, the first index is the minimum and the second is the maximum\n * Index 0 is for portrait screens and centers on the Eastern Hemisphere\n * Index 1 is for wider screens near the Prime Meridian and north of the Equator\n *\n * Note: Values are based off the zoom level\n */\nconst latRange = [0.912_164_420_526_366_4, 1.717_850_315_594_39]\nconst lngRange = [-81.474_201_485_195_9, 12.788_958_675_506_933]\n\n/**\n * Function to interpolate an aspect ratio value across a range of degrees and aspect ratios\n *\n * Inspired by - https://stackoverflow.com/questions/14224535/scaling-between-two-number-ranges\n *\n * @param aspectRatio aspect ratio to scale\n * @param degreeRange A latitude or longitude range (i.e. [minLat, maxLat])\n * @param aspectRatioRange A range of aspect ratios to scale against degreeRange parameter\n * @returns number\n */\nconst linearInterpolate = (aspectRatio: number, degreeRange: number[], aspectRatioRange?: number[]): number => {\n const [degreeMin, degreeMax] = degreeRange\n const [aspectRatioMin, aspectRatioMax] = aspectRatioRange || defaultAspectRatioRange\n\n const aspectRatioRangeSpan = aspectRatioMax - aspectRatioMin\n const degreeRangeSpan = degreeMax - degreeMin\n\n const percent = (aspectRatio - aspectRatioMin) / aspectRatioRangeSpan\n const scaledDegree = percent * degreeRangeSpan + degreeMin\n\n return scaledDegree\n}\n\nconst useDynamicPositioning = () => {\n const { width, height } = useWindowSize()\n\n const options = useMemo(() => {\n if (width && height) {\n const aspectRatio = width / height\n\n return {\n center: [linearInterpolate(aspectRatio, lngRange), linearInterpolate(aspectRatio, latRange)],\n zoom: defaultZoom,\n } as Partial<MapOptions>\n }\n }, [height, width])\n\n return { options }\n}\n\nexport { useDynamicPositioning }\n","import { GeoJson } from '@xylabs/geo'\nimport { exists } from '@xylabs/sdk-js'\nimport type { NetworkLocationHeatmapQuadkeyAnswerPayload } from '@xyo-network/react-map-model'\nimport type { Feature, Geometry } from 'geojson'\nimport { useMemo, useState } from 'react'\n\nconst quadKeyToFeature = ({ density, quadkey }: { density: number; quadkey: string }) => {\n const polygonFeature = new GeoJson(quadkey).polygonFeature()\n polygonFeature.properties = {\n count: density,\n density,\n }\n return polygonFeature\n}\n\nconst setDensity = (feature: Feature) => {\n if (feature.properties) {\n feature.properties.value = feature.properties.density / 5\n }\n return feature\n}\n\nconst useQuadKeyPayloadsToFeatures = (payloads?: NetworkLocationHeatmapQuadkeyAnswerPayload[] | NetworkLocationHeatmapQuadkeyAnswerPayload) => {\n const [multipleFeatureSets, setMultipleFeatureSets] = useState<Feature<Geometry>[][]>([[]])\n const [features, setFeatures] = useState<Feature<Geometry>[]>([])\n const [error, setError] = useState<Error>()\n\n useMemo(() => {\n // Convert Multiple Payloads from Quadkey to GeoJson\n if (Array.isArray(payloads)) {\n if ((payloads)?.filter(exists).length > 0) {\n const mappedFeatures = payloads?.map(payload => payload?.result.map(quadKeyToFeature))\n\n setMultipleFeatureSets(mappedFeatures.map(features => features?.map(setDensity) ?? []))\n } else {\n setError(new Error('Cannot find payloads for provided hashes'))\n }\n }\n\n // Convert Single Payload from Quadkey to GeoJson\n if (payloads && (payloads as NetworkLocationHeatmapQuadkeyAnswerPayload).result) {\n const singlePayload = payloads as NetworkLocationHeatmapQuadkeyAnswerPayload\n const mappedFeatures = singlePayload.result.map(quadKeyToFeature)\n\n setFeatures(mappedFeatures.map(setDensity))\n }\n }, [payloads])\n\n return {\n error, features, multipleFeatureSets,\n }\n}\n\nexport { useQuadKeyPayloadsToFeatures }\n","import { GeoJson } from '@xylabs/geo'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Feature, Geometry } from 'geojson'\nimport type { GeoJSONSource, Map } from 'mapbox-gl'\n\nimport type { MapLayer } from '../Layers/index.ts'\n\nexport interface MapBaseConfig<T extends Geometry> {\n features: Feature<T>[]\n map: Map\n requestLocation?: boolean\n zoom?: number\n}\n\nexport abstract class MapBase<T extends Geometry> {\n private _config: MapBaseConfig<T>\n\n constructor(config: MapBaseConfig<T>) {\n this._config = {\n requestLocation: true, zoom: 2, ...config,\n }\n }\n\n get isMapReady() {\n return !!this._config.map\n }\n\n initializeMapSource(layer: MapLayer) {\n const getSource = () => {\n const featuresCollection = GeoJson.featureCollection(this._config.features)\n return GeoJson.featuresSource(featuresCollection)\n }\n\n const existingSource = this._config.map.getSource(layer.source as string) as GeoJSONSource\n const source = getSource()\n if (existingSource) {\n existingSource.setData(assertEx(source.data as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>))\n } else {\n this._config.map.addSource(layer.source as string, source)\n }\n layer.update(this._config.map, true)\n\n return this\n }\n}\n","import { GeoJson } from '@xylabs/geo'\nimport {\n assertEx, delay, forget,\n} from '@xylabs/sdk-js'\nimport type { Feature, Polygon } from 'geojson'\nimport type {\n DataDrivenPropertyValueSpecification,\n GeoJSONSource, GeoJSONSourceSpecification, Map, MapOptions,\n} from 'mapbox-gl'\nimport { LngLatBounds } from 'mapbox-gl'\n\nimport type { MapLayer } from '../Layers/index.ts'\nimport type { MapBaseConfig } from './MapBase.ts'\nimport { MapBase } from './MapBase.ts'\n\nexport class MapHeat extends MapBase<Polygon> {\n // eslint-disable-next-line sonarjs/public-static-readonly\n static animationStarted = false\n\n config: MapBaseConfig<Polygon>\n constructor(config: MapBaseConfig<Polygon>) {\n super(config)\n this.config = config\n }\n\n static initialMapPositioning(options: MapOptions['fitBoundsOptions'], map: Map, features?: Feature<Polygon>[], initialBounds?: LngLatBounds) {\n if (!features) {\n return\n }\n\n let bounds: LngLatBounds\n\n if (initialBounds) {\n bounds = initialBounds\n } else {\n bounds = new LngLatBounds()\n\n // eslint-disable-next-line unicorn/no-array-for-each\n features.forEach((feature: Feature<Polygon>) => {\n for (const coordinates of feature.geometry.coordinates) {\n for (const position of coordinates) {\n bounds.extend(position as [number, number])\n }\n }\n })\n }\n\n map.setCenter(bounds.getCenter())\n map.fitBounds(bounds, options)\n return this\n }\n\n static async initializeAnimatedHeatMapSource(\n layers: MapLayer[],\n featureSet: Feature<Polygon>[][],\n map: Map,\n startColor?: string,\n endColor?: string,\n ) {\n this.animationStarted = true\n let layerTick = 0\n let sourceTick = 0\n\n const sources = featureSet.map((feature) => {\n const featuresCollection = GeoJson.featureCollection(feature)\n return GeoJson.featuresSource(featuresCollection)\n })\n this.updateLayer(map, layers[0], sources[0])\n this.updateLayer(map, layers[1], sources[1])\n\n for (const layer of layers) {\n map.setPaintProperty(layer.id, 'fill-opacity', 0)\n }\n\n const frameLength = 3000\n const initialPad = 0.5\n const factor = 10\n const steps = 30\n const stepLength = frameLength / steps\n const lowUsageColor = startColor ?? '#FFB3B3'\n const highUsageColor = endColor ?? '#FF0000'\n\n // Max density at i=0, min density at i=steps\n const dynamicFillColor = (factor: number, initialPad: number, i: number): DataDrivenPropertyValueSpecification<string> => {\n const sinFade = Math.sin(((i / steps) * Math.PI) / 2)\n const cosFade = Math.cos(((i / steps) * Math.PI) / 2)\n // we want the divisor to always be at least 1x the desired factor but will go up to\n // 2x factor to account for combinative effect of the overlay of two layers at once\n const divisor = factor + factor * sinFade\n const offset = initialPad * cosFade\n return [\n 'let',\n 'density',\n ['+', ['/', ['number', ['get', 'value']], divisor], offset],\n ['interpolate', ['linear'], ['var', 'density'], 0, lowUsageColor, 0.5, highUsageColor],\n ]\n }\n\n const fadedIn: boolean[] = layers.map(_ => false)\n\n const fadeIn = async (id: string, index: number) => {\n for (let i = steps; i >= 1; i--) {\n map.setPaintProperty(id, 'fill-color', dynamicFillColor(factor, initialPad, i * (180 / stepLength)))\n await delay(stepLength)\n }\n fadedIn[index] = true\n }\n\n const fadeOut = async (id: string, index: number) => {\n for (let i = 1; i <= steps; i++) {\n map.setPaintProperty(id, 'fill-color', dynamicFillColor(factor, initialPad, i * (180 / stepLength)))\n await delay(stepLength)\n }\n fadedIn[index] = false\n }\n\n let started = false\n const startAnimation = async () => {\n assertEx(!started, () => 'Animation Already Started')\n started = true\n while (this.animationStarted) {\n const upLayer = layerTick % layers.length\n const downLayer = (layerTick + 1) % layers.length\n\n const incomingSource = sourceTick % featureSet.length\n const outgoingSource = (sourceTick + 1) % featureSet.length\n\n // console.log('incoming / outgoing source', incomingSource, outgoingSource)\n\n // console.log(`animate: [${upLayer}, ${downLayer}]`)\n if (fadedIn[upLayer]) {\n this.updateLayer(map, layers[upLayer], sources[incomingSource])\n forget(fadeOut(layers[upLayer].id, upLayer))\n }\n if (!fadedIn[downLayer]) {\n this.updateLayer(map, layers[downLayer], sources[outgoingSource])\n forget(fadeIn(layers[downLayer].id, downLayer))\n }\n while ((fadedIn[upLayer] || !fadedIn[downLayer]) && this.animationStarted) {\n // console.log(`checking: [${fadedIn[upLayer]}, ${!fadedIn[downLayer]}]`)\n await delay(1000)\n }\n layerTick++\n sourceTick++\n\n // console.log(`this.layerTick: ${layerTick}`)\n // console.log(`this.sourceTick: ${sourceTick}`)\n }\n }\n\n await startAnimation()\n }\n\n private static updateLayer(map: Map, layer: MapLayer, source: GeoJSONSourceSpecification) {\n const existingSource = map.getSource(layer.source as string) as GeoJSONSource\n if (existingSource && source.data) {\n existingSource.setData(source.data as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>)\n } else if (source) {\n map.addSource(layer.source as string, source)\n }\n layer.update(map, true)\n }\n\n // Build layers each with the same features\n initializeHeatMapSource(layers: MapLayer[]) {\n const getSource = (_: number) => {\n const featuresCollection = GeoJson.featureCollection(this.config.features)\n return GeoJson.featuresSource(featuresCollection)\n }\n\n for (const [index, layer] of layers.entries()) {\n const existingSource = this.config.map.getSource(layer.source as string) as GeoJSONSource\n const source = getSource(index)\n if (existingSource) {\n existingSource.setData(assertEx(source.data) as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>)\n } else {\n this.config.map.addSource(layer.source as string, source)\n }\n layer.update(this.config.map, true)\n }\n\n return this\n }\n}\n","import type { Feature, Point } from 'geojson'\nimport type { MapOptions } from 'mapbox-gl'\nimport { LngLatBounds } from 'mapbox-gl'\n\nimport type { MapBaseConfig } from './MapBase.ts'\nimport { MapBase } from './MapBase.ts'\n\nexport interface MapPointsConfig extends MapBaseConfig<Point> {\n features: Feature<Point>[]\n}\n\nexport class MapPoints extends MapBase<Point> {\n private config: MapPointsConfig\n\n constructor(config: MapPointsConfig) {\n super(config)\n this.config = config\n }\n\n initialMapPositioning(options: MapOptions['fitBoundsOptions'], initialBounds?: LngLatBounds) {\n let bounds: LngLatBounds\n\n if (initialBounds) {\n bounds = initialBounds\n } else {\n bounds = new LngLatBounds()\n\n // eslint-disable-next-line unicorn/no-array-for-each\n this.config.features.forEach((feature: Feature<Point>) => {\n bounds.extend(feature.geometry.coordinates as [number, number])\n })\n }\n\n this.config.map.setCenter(bounds.getCenter())\n this.config.map.fitBounds(bounds, options)\n\n return this.config.map\n }\n}\n","import type { MapSetting } from '@xyo-network/react-map-model'\nimport type {\n Map, MapEventOf, MapEventType,\n} from 'mapbox-gl'\nimport { GeolocateControl, NavigationControl } from 'mapbox-gl'\n\nexport interface MapSettingsConfig {\n debugLayerName?: string\n map: Map\n requestLocation?: boolean\n settings: MapSetting\n zoom?: number\n}\n\n/**\n * Utility class to handle changes in settings\n *\n * Methods are pure functions dedicated to map manipulation\n */\nexport class MapSettings {\n // eslint-disable-next-line sonarjs/public-static-readonly\n static geoLocateControl: GeolocateControl | undefined\n // eslint-disable-next-line sonarjs/public-static-readonly\n static mapListeners = {\n logData: (ev?: MapEventOf<MapEventType>, map?: Map) => {\n const target = map || ev?.target\n if (target) {\n console.log('zoom', target.getZoom())\n console.log('center', target.getCenter())\n }\n },\n }\n\n // eslint-disable-next-line sonarjs/public-static-readonly\n static navControl: NavigationControl | undefined\n // eslint-disable-next-line sonarjs/public-static-readonly\n static requestLocation: boolean | undefined\n\n static toggleControls(value: boolean | undefined, map: Map, zoom?: number, requestLocation?: boolean) {\n if (value) {\n MapSettings.addControls(map, zoom, requestLocation)\n } else {\n MapSettings.removeControls(map)\n }\n\n return this\n }\n\n static toggleDebugLayer(value: boolean | undefined, map: Map, layerName: string) {\n const debugLayer = map.getLayer(layerName)\n if (debugLayer) {\n if (value) {\n map.setLayoutProperty(layerName, 'visibility', 'visible')\n } else {\n map.setLayoutProperty(layerName, 'visibility', 'none')\n }\n }\n\n return this\n }\n\n static toggleDebugLogging(value: boolean | undefined, map: Map) {\n const debugEvents: MapEventType[] = ['resize', 'zoomend', 'dragend']\n if (value) {\n // initial values\n this.mapListeners.logData(undefined, map)\n for (const event of debugEvents) map.on(event, this.mapListeners.logData)\n } else {\n for (const event of debugEvents) map.off(event, this.mapListeners.logData)\n }\n }\n\n static toggleScrollToZoom(value: boolean | undefined, map: Map) {\n if (value) {\n map.scrollZoom.enable()\n } else {\n map.scrollZoom.disable()\n }\n\n return this\n }\n\n static updateSettings(config: MapSettingsConfig) {\n const {\n settings, map, zoom, requestLocation, debugLayerName = '',\n } = config\n const {\n scrollToZoom, enableControls, debugLayer, debugLogging,\n } = settings\n\n MapSettings.toggleControls(enableControls?.value, map, zoom, requestLocation)\n .toggleScrollToZoom(scrollToZoom?.value, map)\n .toggleDebugLayer(debugLayer?.value, map, debugLayerName)\n .toggleDebugLogging(debugLogging.value, map)\n }\n\n // Needs to be static so we ensure controls are only instantiated once\n private static addControls(map: Map, zoom?: number, requestLocation?: boolean) {\n const geolocateControl = new GeolocateControl({\n fitBoundsOptions: { zoom: zoom || 2 },\n positionOptions: { enableHighAccuracy: true },\n trackUserLocation: true,\n })\n\n const navControl = new NavigationControl({ showCompass: false })\n\n this.geoLocateControl = this.geoLocateControl || geolocateControl\n this.navControl = this.navControl || navControl\n\n if (!map.hasControl(this.geoLocateControl) && requestLocation) {\n map.addControl(this.geoLocateControl)\n }\n\n if (!map.hasControl(this.navControl)) {\n map.addControl(this.navControl, 'top-left')\n }\n\n return this\n }\n\n private static removeControls(map: Map) {\n if (this.geoLocateControl && map.hasControl(this.geoLocateControl) && this.requestLocation) {\n map.removeControl(this.geoLocateControl)\n }\n\n if (this.navControl && map.hasControl(this.navControl)) {\n map.removeControl(this.navControl)\n }\n\n return this\n }\n}\n","import type { Map } from 'mapbox-gl'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { MapBoxInstanceContext } from './Context.ts'\n\nexport const MapBoxInstanceProvider: React.FC<PropsWithChildren> = ({ children }) => {\n const [map, setMapBoxInstance] = useState<Map>()\n const [mapInitialized, setMapInitialized] = useState(false)\n\n const value = useMemo(() => ({\n map, mapInitialized, setMapBoxInstance,\n }), [map, mapInitialized, setMapBoxInstance])\n\n useEffect(() => {\n if (!mapInitialized && map) {\n map?.on('load', () => {\n setMapInitialized(true)\n })\n }\n }, [map, mapInitialized, setMapInitialized])\n\n return <MapBoxInstanceContext value={value}>{children}</MapBoxInstanceContext>\n}\n","import { createContext } from 'react'\n\nimport type { MapBoxInstanceState } from './State.ts'\n\nconst MapBoxInstanceContext = createContext<MapBoxInstanceState>({})\n\nexport { MapBoxInstanceContext }\n","import { assertEx } from '@xylabs/sdk-js'\nimport { use } from 'react'\n\nimport { MapBoxInstanceContext } from './Context.ts'\n\nconst useMapBoxInstance = () => {\n const context = use(MapBoxInstanceContext)\n assertEx('map' in context, () => 'useMapBoxInstance must be used within a MapBoxInstanceContext')\n\n return context\n}\n\nexport { useMapBoxInstance }\n","import type { MapSetting } from '@xyo-network/react-map-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { MapSettings } from '../../MapBoxClasses/index.ts'\nimport { useMapBoxInstance } from '../MapBoxInstance/index.ts'\nimport { MapSettingsContext } from './Context.ts'\nimport type { MapSettingsState } from './State.ts'\n\nexport interface MapSettingsProviderProps {\n debugLayerName?: string\n defaultMapSettings?: MapSetting\n requestLocation?: boolean\n zoom?: number\n}\n\nexport const MapSettingsProvider: React.FC<PropsWithChildren<MapSettingsProviderProps>> = ({\n children,\n debugLayerName,\n defaultMapSettings,\n requestLocation,\n zoom = 1,\n}) => {\n const [mapSettings, setMapSettings] = useState<MapSetting>(defaultMapSettings || {})\n const { map, mapInitialized } = useMapBoxInstance()\n\n const value: MapSettingsState = useMemo(() => ({\n mapSettings,\n setMapSettings,\n }), [mapSettings, setMapSettings])\n\n useEffect(() => {\n if (mapSettings && map && mapInitialized) {\n MapSettings.updateSettings({\n debugLayerName, map, requestLocation, settings: mapSettings, zoom,\n })\n }\n }, [debugLayerName, map, mapInitialized, mapSettings, requestLocation, zoom])\n\n return <MapSettingsContext value={value}>{children}</MapSettingsContext>\n}\n","import { createContext } from 'react'\n\nimport type { MapSettingsState } from './State.ts'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { use } from 'react'\n\nimport { MapSettingsContext } from './Context.ts'\n\nconst useMapSettings = () => {\n const context = use(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n","import { createContext } from 'react'\n\nimport type { HeatMapInitializerState } from './State.ts'\n\nconst HeatMapInitializerContext = createContext<HeatMapInitializerState>({})\n\nexport { HeatMapInitializerContext }\n","import { assertEx } from '@xylabs/sdk-js'\nimport { use } from 'react'\n\nimport { HeatMapInitializerContext } from './Context.ts'\n\nconst useHeatMapInitializer = () => {\n const context = use(HeatMapInitializerContext)\n assertEx('heatMapInitialized' in context, () => 'useHeatMapInitializer must be used within a HeatMapInitializerContext')\n\n return context\n}\n\nexport { useHeatMapInitializer }\n","import type { FillLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapFillLayerConfig: (color: string) => Partial<FillLayerSpecification> = color => ({\n paint: {\n 'fill-color': color,\n 'fill-opacity': [\n 'let',\n 'density',\n ['+', ['/', ['number', ['get', 'value']], 4], 0.125],\n ['interpolate', ['linear'], ['var', 'density'], 0.8, ['var', 'density'], 1, 0.85],\n ],\n },\n})\n","import type { LineLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapLineLayerConfig: (color: string) => Partial<LineLayerSpecification> = color => ({\n layout: {\n // Enable for debugging\n visibility: 'none',\n },\n paint: {\n 'line-color': color,\n 'line-opacity': ['let', 'density', 0, ['interpolate', ['linear'], ['var', 'density'], 0.8, ['var', 'density'], 1, 0.85]],\n 'line-width': 0.5,\n },\n})\n","import type { SymbolLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapSymbolLayerConfig: (color: string) => Partial<SymbolLayerSpecification> = color => ({\n layout: {\n 'text-anchor': 'center',\n 'text-field': [\n 'concat',\n 'value: ',\n ['to-string', ['+', ['/', ['number', ['get', 'value']], 2], 0.25]],\n '\\n',\n 'count: ',\n ['to-string', ['get', 'count']],\n ],\n 'text-size': 10,\n 'visibility': 'none',\n },\n paint: { 'text-color': color },\n})\n","import type { CircleLayerSpecification } from 'mapbox-gl'\n\nexport const LocationPointLayerConfig: (color: string, circleRadius: number, circleOpacity: number) => Partial<CircleLayerSpecification> = (\n color,\n circleRadius,\n circleOpacity,\n) => {\n return {\n paint: {\n 'circle-color': color,\n 'circle-opacity': circleOpacity,\n 'circle-radius': circleRadius,\n },\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { FillLayerSpecification } from 'mapbox-gl'\n\nexport class FillLayerBuilder extends LayerBase<FillLayerSpecification> {\n FillLayerOptions: Partial<FillLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'fill' = 'fill' as const\n\n constructor(id: string, source: string, FillLayerOptions?: Partial<FillLayerSpecification>) {\n super(id, source)\n this.FillLayerOptions = FillLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): FillLayerSpecification {\n return {\n ...this.FillLayerOptions,\n id: this.id,\n source: this.source,\n type: this.type,\n }\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { LineLayerSpecification } from 'mapbox-gl'\n\nexport class LineLayerBuilder extends LayerBase<LineLayerSpecification> {\n LineLayerOptions: Partial<LineLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'line' = 'line' as const\n\n constructor(id: string, source: string, LineLayerOptions?: Partial<LineLayerSpecification>) {\n super(id, source)\n this.LineLayerOptions = LineLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): LineLayerSpecification {\n return {\n ...this.LineLayerOptions,\n id: this.id,\n layout: {},\n source: this.source,\n type: this.type,\n }\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { SymbolLayerSpecification } from 'mapbox-gl'\n\nexport class SymbolLayerBuilder extends LayerBase<SymbolLayerSpecification> {\n SymbolLayerOptions: Partial<SymbolLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'symbol' = 'symbol' as const\n\n constructor(id: string, source: string, SymbolLayerOptions?: Partial<SymbolLayerSpecification>) {\n super(id, source)\n this.SymbolLayerOptions = SymbolLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): SymbolLayerSpecification {\n return {\n ...this.SymbolLayerOptions,\n id: this.id,\n source: this.source,\n type: this.type,\n }\n }\n}\n","import {\n HeatMapFillLayerConfig, HeatMapLineLayerConfig, HeatMapSymbolLayerConfig,\n} from '../Configs/index.ts'\nimport { FillLayerBuilder } from '../FillLayer.ts'\nimport { LineLayerBuilder } from '../LineLayer.ts'\nimport { SymbolLayerBuilder } from '../SymbolLayer.ts'\n\nexport const MapHeatConstants = {\n LocationDebugLayerId: 'location-debug-id',\n LocationDebugLayerSource: 'location-debug-source',\n LocationFillLayerId: 'location-fill-id',\n LocationFillLayerSource: 'location-fill-source',\n LocationLineLayerId: 'location-line-id',\n LocationLineLayerSource: 'location-line-source',\n}\n\nexport const LocationHeatMapLayerBuilder = (color: string, alternateColor = '#000') => {\n const {\n LocationFillLayerId,\n LocationFillLayerSource,\n LocationLineLayerId,\n LocationLineLayerSource,\n LocationDebugLayerId,\n LocationDebugLayerSource,\n } = MapHeatConstants\n\n const fillLayerConfig = HeatMapFillLayerConfig(color)\n const lineLayerConfig = HeatMapLineLayerConfig(color)\n const debugLayerConfig = HeatMapSymbolLayerConfig(alternateColor)\n\n const fillLayer = new FillLayerBuilder(LocationFillLayerId, LocationFillLayerSource, fillLayerConfig)\n const lineLayer = new LineLayerBuilder(LocationLineLayerId, LocationLineLayerSource, lineLayerConfig)\n const debugLayer = new SymbolLayerBuilder(LocationDebugLayerId, LocationDebugLayerSource, debugLayerConfig)\n\n return [fillLayer, lineLayer, debugLayer]\n}\n","import { HeatMapFillLayerConfig } from '../Configs/index.ts'\nimport { FillLayerBuilder } from '../FillLayer.ts'\n\nconst MapHeatConstants = (index: number, type: string) => ({\n LocationDebugLayerId: `location-${type}-debug-id-${index}`,\n LocationDebugLayerSource: `location-${type}-debug-source-${index}`,\n LocationFillLayerId: `location-${type}-fill-id-${index}`,\n LocationFillLayerSource: `location-${type}-fill-source-${index}`,\n LocationLineLayerId: `location-${type}-line-id-${index}`,\n LocationLineLayerSource: `location-${type}-line-source-${index}`,\n})\n\nexport const LocationHeatMapLayerBuilderAnimated = (color: string, index: number, type = '') => {\n const { LocationFillLayerId, LocationFillLayerSource } = MapHeatConstants(index, type)\n\n const fillLayerConfig = HeatMapFillLayerConfig(color)\n\n const fillLayer = new FillLayerBuilder(LocationFillLayerId, LocationFillLayerSource, fillLayerConfig)\n\n return fillLayer\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { CircleLayerSpecification } from 'mapbox-gl'\n\nexport class CircleLayerBuilder extends LayerBase<CircleLayerSpecification> {\n CircleLayerOptions: Partial<CircleLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'circle' = 'circle' as const\n\n constructor(id: string, source: string, CircleLayerOptions?: Partial<CircleLayerSpecification>) {\n super(id, source)\n this.CircleLayerOptions = CircleLayerOptions || {\n id: this.id, source: this.source, type: 'circle',\n }\n }\n\n buildLayer(): CircleLayerSpecification {\n return {\n filter: ['==', '$type', 'Point'],\n layout: {},\n paint: {\n 'circle-color': '#ff0000',\n 'circle-radius': 6,\n },\n type: this.type,\n ...this.CircleLayerOptions,\n id: this.id,\n source: this.source,\n }\n }\n}\n","import { CircleLayerBuilder } from '../CircleLayer.ts'\nimport { LocationPointLayerConfig } from '../Configs/index.ts'\n\nexport const MapPointsConstants = {\n LocationDotsLayerId: 'location-dots',\n LocationDotsLayerSource: 'location-dots-source',\n}\n\nexport const LocationPointsMapLayerBuilder = (color: string, circleRadius = 6, circleOpacity = 0.8) => {\n const { LocationDotsLayerId, LocationDotsLayerSource } = MapPointsConstants\n\n const dotLayerConfig = LocationPointLayerConfig(color, circleRadius, circleOpacity)\n\n const dotLayer = new CircleLayerBuilder(LocationDotsLayerId, LocationDotsLayerSource, dotLayerConfig)\n\n return [dotLayer]\n}\n","import { FlexCol } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\nimport { MapBox } from './MapBox.tsx'\nimport { MapSettingsBox } from './MapSettingsComponents/index.ts'\n\nexport const MapboxHeatFlexBox: React.FC<MapboxFlexBoxProps> = ({\n accessToken, children, mapBoxOptions, zoom, legend, developerMode, ...props\n}) => {\n return (\n <FlexCol {...props}>\n <MapBox accessToken={accessToken} options={mapBoxOptions} zoom={zoom} />\n <MapSettingsBox developerMode={developerMode} />\n {legend}\n {children}\n </FlexCol>\n )\n}\n","// eslint-disable-next-line import-x/no-internal-modules\nimport 'mapbox-gl/dist/mapbox-gl.css'\n\nimport { MapStyle } from '@xyo-network/react-map-model'\nimport type { MapOptions } from 'mapbox-gl'\nimport { Map } from 'mapbox-gl'\nimport React, {\n useEffect, useRef, useState,\n} from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts/index.ts'\nimport { useDynamicMapResize } from '../hooks/index.ts'\n\nexport interface MapBoxProps {\n accessToken: string\n darkMode?: boolean\n options?: Partial<MapOptions>\n zoom?: number\n}\n\nexport const MapBox: React.FC<MapBoxProps> = ({\n accessToken, darkMode = false, options, zoom = 2, ...props\n}) => {\n const [map, setMap] = useState<Map>()\n const mapContainerRef = useRef<HTMLDivElement>(null)\n const mapCanvasRef = useRef<HTMLCanvasElement>(null)\n const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance()\n const { mapSettings } = useMapSettings()\n\n const activeResize = mapSettings?.dynamicMapResize.value\n useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize)\n\n useEffect(() => {\n if (mapSettings?.preferDark?.value === true) {\n map?.setStyle(`mapbox://styles/${MapStyle.Dark}`)\n } else {\n map?.setStyle(`mapbox://styles/${darkMode ? MapStyle.Dark : MapStyle.Light}`)\n }\n }, [map, darkMode, mapSettings])\n\n useEffect(() => {\n const map = new Map({\n accessToken,\n center: [0, 0],\n container: mapContainerRef.current ?? '',\n style: `mapbox://styles/${MapStyle.Light}`,\n zoom,\n ...options,\n })\n\n // Allow external components to control the map\n setMapBoxInstance?.(map)\n setMap(map)\n\n // save the map canvas ref to help with resizing\n mapCanvasRef.current = document.querySelector('.mapboxgl-canvas') as HTMLCanvasElement | null\n\n console.log('Created Map')\n\n return () => {\n console.log('Removing Map')\n map.remove()\n }\n }, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken])\n\n return (\n <div\n ref={(el) => { mapContainerRef.current = el }}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n ...props,\n }}\n />\n )\n}\n","import type { SwitchProps } from '@mui/material'\nimport { FormControlLabel, Switch } from '@mui/material'\nimport React from 'react'\n\nimport { useMapSettings } from '../../Contexts/index.ts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({\n developerMode, field, ...props\n}) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden\n ? null\n : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n","import { Paper, Stack } from '@mui/material'\nimport { useAppSettings } from '@xylabs/react-app-settings'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useMapSettings } from '../../Contexts/index.ts'\nimport { MapSettingSwitch } from './Setting.tsx'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode\n ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n )\n : null\n}\n","import { Alert, AlertTitle } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { useWeakArchivistFromNode, useWeakArchivistGet } from '@xyo-network/react-archivist'\nimport type { NetworkLocationHeatmapQuadkeyAnswerPayload } from '@xyo-network/react-map-model'\nimport {\n AnimatedHeatMapSettings,\n useFindHashes, useHeatMapColors,\n} from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport React from 'react'\n\nimport { useQuadKeyPayloadsToFeatures } from '../hooks/index.ts'\nimport { AnimatedHeatMap } from './AnimatedHeatMap.tsx'\nimport { AnimatedHeatMapLegend } from './Legend.tsx'\n\nexport interface AnimatedHeatMapLoadedProps extends FlexBoxProps {\n accessToken: string\n archivistNameOrAddress: string\n}\n\nexport const AnimatedHeatMapLoaded: React.FC<AnimatedHeatMapLoadedProps> = ({\n accessToken, archivistNameOrAddress, ...props\n}) => {\n const hashes = useFindHashes()\n const [archivist] = useWeakArchivistFromNode(archivistNameOrAddress)\n const [payloads, xyoError] = useWeakArchivistGet<NetworkLocationHeatmapQuadkeyAnswerPayload>(archivist, hashes)\n const { multipleFeatureSets } = useQuadKeyPayloadsToFeatures(payloads)\n const { heatMapColorProps, legendProps } = useHeatMapColors()\n\n const MapBoxHeatProps = {\n flexGrow: 1,\n legend: legendProps ? <AnimatedHeatMapLegend {...legendProps} /> : null,\n }\n\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n {xyoError\n ? (\n <Alert sx={{ mt: 2 }}>\n <AlertTitle>Error Loading Map</AlertTitle>\n {xyoError.message ? `Error: ${xyoError.message}` : null}\n You might try authenticating again.\n </Alert>\n )\n : null}\n {hashes === undefined\n ? <Alert>Missing answer hash for heat map query</Alert>\n : (\n <AnimatedHeatMap\n accessToken={accessToken}\n defaultMapSettings={AnimatedHeatMapSettings}\n animatedFeatureSets={multipleFeatureSets.slice(1) as Feature<Polygon>[][]}\n staticFeatureSet={multipleFeatureSets[0] as Feature<Polygon>[]}\n heatMapColorProps={heatMapColorProps}\n {...MapBoxHeatProps}\n />\n )}\n </FlexCol>\n )\n}\n","import { useMediaQuery, useTheme } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { ColorGradientLegendProps } from '@xyo-network/react-map-model'\nimport React from 'react'\n\nimport { ColorGradientLegend } from './Legends/index.ts'\n\nconst AnimatedHeatMapLegend: React.FC<ColorGradientLegendProps> = ({ ...legendProps }) => {\n const {\n startColor, endColor, startLabel, endLabel, heading, textColor,\n } = legendProps\n const theme = useTheme()\n const isSmall = useMediaQuery(theme.breakpoints.down('sm'))\n\n return (\n <FlexCol position=\"absolute\" bottom={0} right={0}>\n <ColorGradientLegend\n startColor={startColor}\n endColor={endColor}\n startLabel={startLabel}\n endLabel={endLabel}\n heading={heading}\n textColor={textColor}\n {...{\n alignItems: 'stretch',\n marginBottom: theme.spacing(4),\n marginLeft: isSmall ? theme.spacing(3) : 0,\n marginRight: isSmall ? theme.spacing(2) : theme.spacing(3),\n width: isSmall ? '40vw' : theme.spacing(18),\n }}\n />\n </FlexCol>\n )\n}\n\nexport { AnimatedHeatMapLegend }\n","import { Typography, useTheme } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport type { ColorGradientLegendProps } from '@xyo-network/react-map-model'\nimport React from 'react'\n\nconst ColorGradientLegend: React.FC<ColorGradientLegendProps> = ({\n startColor, endColor, startLabel, endLabel, heading, textColor, ...props\n}) => {\n const theme = useTheme()\n\n return (\n <FlexCol {...props}>\n <Typography mb={theme.spacing(0.25)} color={textColor} variant=\"caption\" textAlign=\"center\">\n {heading}\n </Typography>\n <FlexCol flexGrow={1} alignItems=\"stretch\" paddingX={theme.spacing(1)} mb={theme.spacing(0.25)}>\n <FlexCol\n height={theme.spacing(0.75)}\n border={`1px solid ${textColor}`}\n sx={{ backgroundImage: `linear-gradient(to right, ${startColor},${endColor})` }}\n />\n </FlexCol>\n <FlexRow flexGrow={1} justifyContent=\"space-between\">\n <Typography color={textColor} variant=\"caption\">\n {startLabel}\n </Typography>\n <Typography color={textColor} variant=\"caption\">\n {endLabel}\n </Typography>\n </FlexRow>\n </FlexCol>\n )\n}\n\nexport { ColorGradientLegend }\n","import { DefaultMapSettings } from '@xyo-network/react-map-model'\n\nconst HeatMapSettings = DefaultMapSettings()\nconst {\n debugLayer, scrollToZoom, fitToPoints,\n} = HeatMapSettings\ndebugLayer.hidden = false\nscrollToZoom.value = true\nfitToPoints.value = true\n\nexport { HeatMapSettings }\n","import { useInterval } from '@xylabs/react-shared'\nimport type { Map } from 'mapbox-gl'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useEffect, useMemo, useRef,\n} from 'react'\n\nimport type { MapLayer } from '../Layers/index.ts'\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\n\nexport interface LayerAnimatorProps {\n animateLayers?: boolean\n layers: MapboxFlexBoxProps['layers']\n layersInitialized: boolean\n map: Map | undefined\n}\n\nconst timeIncrement = 2000\nconst animatedLayerCount = 3\n\nexport const LayerAnimator: React.FC<PropsWithChildren<LayerAnimatorProps>> = ({\n animateLayers, children, layers, layersInitialized, map,\n}) => {\n const layerIndexQueue = useRef<number[]>([])\n\n const fillLayers: MapLayer[] = useMemo(() => {\n if (layers?.length && map && layersInitialized) {\n return layers.filter((layer) => {\n const fillLayer = layer.id.startsWith('location-fill')\n if (fillLayer) {\n map.setPaintProperty(layer.id, 'fill-opacity-transition', { delay: 0, duration: 4000 })\n }\n return fillLayer\n })\n }\n return []\n }, [layers, layersInitialized, map])\n\n const incrementQueue = useCallback(\n (index: number) => {\n if (fillLayers[index]) {\n layerIndexQueue.current.push(index)\n } else {\n layerIndexQueue.current.push(0)\n }\n return layerIndexQueue.current.at(-1)\n },\n [fillLayers],\n )\n\n const lastQueuedIndex = useCallback(() => {\n const last = layerIndexQueue.current.at(-1)\n if (last === undefined) {\n incrementQueue(0)\n return 0\n } else {\n return last\n }\n }, [incrementQueue])\n\n const unshiftQueue = useCallback(() => {\n layerIndexQueue.current.shift()\n }, [])\n\n const getNextLayer = useCallback(() => {\n const nextLayer = fillLayers[lastQueuedIndex()]\n incrementQueue(lastQueuedIndex() + 1)\n return nextLayer\n }, [fillLayers, incrementQueue, lastQueuedIndex])\n\n const layerAnimateWorker = useCallback(\n (layer: MapLayer) => {\n if (layer) {\n map?.setPaintProperty(layer.id, 'fill-opacity', 0.85)\n setTimeout(() => {\n map?.setPaintProperty(layer.id, 'fill-opacity', 0)\n unshiftQueue()\n }, timeIncrement * 2)\n } else {\n console.warn('tried to queue an empty layer')\n }\n },\n [map, unshiftQueue],\n )\n\n //\n const queueLayerAnimation = useCallback(() => {\n const animatedLayers: MapLayer[] = []\n\n for (let i = 0; i < animatedLayerCount; i++) {\n animatedLayers.push(getNextLayer())\n }\n\n for (const [index, layer] of animatedLayers.entries()) {\n if (index === 0) {\n layerAnimateWorker(layer)\n } else {\n setTimeout(() => {\n layerAnimateWorker(layer)\n }, timeIncrement * index)\n }\n }\n }, [getNextLayer, layerAnimateWorker])\n\n // Run a single layer animation before the interval kicks in\n useEffect(() => {\n if (animateLayers && layersInitialized && map && fillLayers.length > 0) {\n queueLayerAnimation()\n }\n }, [animateLayers, fillLayers.length, layersInitialized, map, queueLayerAnimation])\n\n useInterval(() => {\n if (animateLayers && layersInitialized && map && fillLayers.length > 0) {\n queueLayerAnimation()\n }\n }, timeIncrement * animatedLayerCount)\n\n return <>{children}</>\n}\n","import { Alert } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { Feature, Point } from 'geojson'\nimport type { MapOptions } from 'mapbox-gl'\nimport React, {\n useCallback, useEffect, useMemo,\n} from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts/index.ts'\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\nimport { MapPoints } from '../MapBoxClasses/index.ts'\nimport { MapBox } from './MapBox.tsx'\nimport { MapSettingsBox } from './MapSettingsComponents/index.ts'\n\nexport interface MapboxPointsFlexBoxProps extends MapboxFlexBoxProps {\n accessToken: string\n features?: Feature<Point>[]\n}\n\nexport const MapboxPointsFlexBox: React.FC<MapboxPointsFlexBoxProps> = ({\n accessToken,\n features,\n fitToPointsPadding = 20,\n layers,\n zoom,\n ...props\n}) => {\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n /**\n * Needed because of a bug in mapbox taking undefined values for the config options of fitToBounds\n * see - https://github.com/mapbox/mapbox-gl-js/issues/10013\n */\n const customFitToBoundsOptions = (zoom?: number): MapOptions['fitBoundsOptions'] => {\n if (zoom !== undefined) {\n return { maxZoom: zoom }\n }\n return {}\n }\n\n const mapPoints = useMemo(() => {\n return (map && features?.length)\n ? new MapPoints({\n features, map, zoom,\n })\n : undefined\n }, [map, features, zoom])\n\n const updateFeatures = useCallback(() => {\n if (mapPoints?.isMapReady && features?.length && layers)\n for (const layer of layers) {\n mapPoints.initializeMapSource(layer)\n }\n }, [mapPoints, features, layers])\n\n const updateMapSetup = useCallback(() => {\n const { fitToPoints } = mapSettings || {}\n\n if (mapPoints && map && fitToPoints?.value === true) {\n mapPoints.initialMapPositioning({\n padding: {\n bottom: fitToPointsPadding, left: fitToPointsPadding, right: fitToPointsPadding, top: fitToPointsPadding,\n },\n ...customFitToBoundsOptions(zoom),\n })\n }\n }, [mapSettings, mapPoints, map, fitToPointsPadding, zoom])\n\n const reInitializeMap = useCallback(() => {\n mapPoints?.initialMapPositioning({\n padding: {\n bottom: fitToPointsPadding, left: fitToPointsPadding, right: fitToPointsPadding, top: fitToPointsPadding,\n },\n ...customFitToBoundsOptions(zoom),\n })\n updateFeatures()\n }, [mapPoints, fitToPointsPadding, updateFeatures, zoom])\n\n useEffect(() => {\n if (mapInitialized) {\n updateMapSetup()\n reInitializeMap()\n }\n }, [mapInitialized, reInitializeMap, updateMapSetup])\n\n return (\n <FlexCol alignItems=\"stretch\" id=\"xyo-mapbox-wrap\" {...props}>\n {features\n ? (\n <>\n <MapBox accessToken={accessToken} zoom={zoom} />\n <MapSettingsBox />\n </>\n )\n : <Alert severity=\"error\">No data to show</Alert>}\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["useTheme","FlexCol","darkenCss","React","useState","forget","React","useEffect","useMemo","useEffect","useMemo","useDynamicMapResize","mapContainerRef","mapCanvasRef","mapInstance","active","resizer","useMemo","ResizeObserver","width","current","getBoundingClientRect","style","setTimeout","resize","dependenciesReady","useEffect","observe","disconnect","useWindowSize","useMemo","defaultZoom","defaultAspectRatioRange","latRange","lngRange","linearInterpolate","aspectRatio","degreeRange","aspectRatioRange","degreeMin","degreeMax","aspectRatioMin","aspectRatioMax","aspectRatioRangeSpan","degreeRangeSpan","percent","scaledDegree","useDynamicPositioning","width","height","useWindowSize","options","useMemo","center","zoom","GeoJson","exists","useMemo","useState","quadKeyToFeature","density","quadkey","polygonFeature","GeoJson","properties","count","setDensity","feature","value","useQuadKeyPayloadsToFeatures","payloads","multipleFeatureSets","setMultipleFeatureSets","useState","features","setFeatures","error","setError","useMemo","Array","isArray","filter","exists","length","mappedFeatures","map","payload","result","Error","singlePayload","GeoJson","assertEx","MapBase","_config","config","requestLocation","zoom","isMapReady","map","initializeMapSource","layer","getSource","featuresCollection","GeoJson","featureCollection","features","featuresSource","existingSource","source","setData","assertEx","data","addSource","update","GeoJson","assertEx","delay","forget","LngLatBounds","MapHeat","MapBase","animationStarted","config","initialMapPositioning","options","map","features","initialBounds","bounds","LngLatBounds","forEach","feature","coordinates","geometry","position","extend","setCenter","getCenter","fitBounds","initializeAnimatedHeatMapSource","layers","featureSet","startColor","endColor","layerTick","sourceTick","sources","featuresCollection","GeoJson","featureCollection","featuresSource","updateLayer","layer","setPaintProperty","id","frameLength","initialPad","factor","steps","stepLength","lowUsageColor","highUsageColor","dynamicFillColor","i","sinFade","Math","sin","PI","cosFade","cos","divisor","offset","fadedIn","_","fadeIn","index","delay","fadeOut","started","startAnimation","assertEx","upLayer","length","downLayer","incomingSource","outgoingSource","forget","source","existingSource","getSource","data","setData","addSource","update","initializeHeatMapSource","entries","LngLatBounds","MapPoints","MapBase","config","initialMapPositioning","options","initialBounds","bounds","LngLatBounds","features","forEach","feature","extend","geometry","coordinates","map","setCenter","getCenter","fitBounds","GeolocateControl","NavigationControl","MapSettings","geoLocateControl","mapListeners","logData","ev","map","target","console","log","getZoom","getCenter","navControl","requestLocation","toggleControls","value","zoom","addControls","removeControls","toggleDebugLayer","layerName","debugLayer","getLayer","setLayoutProperty","toggleDebugLogging","debugEvents","undefined","event","on","off","toggleScrollToZoom","scrollZoom","enable","disable","updateSettings","config","settings","debugLayerName","scrollToZoom","enableControls","debugLogging","geolocateControl","GeolocateControl","fitBoundsOptions","positionOptions","enableHighAccuracy","trackUserLocation","NavigationControl","showCompass","hasControl","addControl","removeControl","React","useEffect","useMemo","useState","createContext","MapBoxInstanceContext","MapBoxInstanceProvider","children","map","setMapBoxInstance","useState","mapInitialized","setMapInitialized","value","useMemo","useEffect","on","MapBoxInstanceContext","assertEx","use","useMapBoxInstance","context","use","MapBoxInstanceContext","assertEx","React","useEffect","useMemo","useState","createContext","MapSettingsContext","MapSettingsProvider","children","debugLayerName","defaultMapSettings","requestLocation","zoom","mapSettings","setMapSettings","useState","map","mapInitialized","useMapBoxInstance","value","useMemo","useEffect","MapSettings","updateSettings","settings","React","MapSettingsContext","use","useMapSettings","context","use","MapSettingsContext","createContext","HeatMapInitializerContext","HeatMapInitializerProvider","children","featureSets","featureSetsLayers","features","fitToPadding","heatMapColorProps","layers","zoom","options","useDynamicPositioning","mapSettings","useMapSettings","map","mapInitialized","useMapBoxInstance","mapHeat","useMemo","length","MapHeat","undefined","value","useEffect","lowUsageColor","highUsageColor","forget","initializeAnimatedHeatMapSource","animationStarted","initializeHeatMapSource","fitToPoints","initialMapPositioning","padding","bottom","left","right","top","center","setZoom","setCenter","React","HeatMapInitializerContext","assertEx","use","useHeatMapInitializer","context","use","HeatMapInitializerContext","assertEx","HeatMapFillLayerConfig","color","paint","HeatMapLineLayerConfig","color","layout","visibility","paint","HeatMapSymbolLayerConfig","color","layout","paint","LocationPointLayerConfig","color","circleRadius","circleOpacity","paint","LayerBase","FillLayerBuilder","LayerBase","FillLayerOptions","type","id","source","buildLayer","LayerBase","LineLayerBuilder","LayerBase","LineLayerOptions","type","id","source","buildLayer","layout","LayerBase","SymbolLayerBuilder","LayerBase","SymbolLayerOptions","type","id","source","buildLayer","MapHeatConstants","LocationDebugLayerId","LocationDebugLayerSource","LocationFillLayerId","LocationFillLayerSource","LocationLineLayerId","LocationLineLayerSource","LocationHeatMapLayerBuilder","color","alternateColor","fillLayerConfig","HeatMapFillLayerConfig","lineLayerConfig","HeatMapLineLayerConfig","debugLayerConfig","HeatMapSymbolLayerConfig","fillLayer","FillLayerBuilder","lineLayer","LineLayerBuilder","debugLayer","SymbolLayerBuilder","MapHeatConstants","index","type","LocationDebugLayerId","LocationDebugLayerSource","LocationFillLayerId","LocationFillLayerSource","LocationLineLayerId","LocationLineLayerSource","LocationHeatMapLayerBuilderAnimated","color","fillLayerConfig","HeatMapFillLayerConfig","fillLayer","FillLayerBuilder","LayerBase","CircleLayerBuilder","LayerBase","CircleLayerOptions","type","id","source","buildLayer","filter","layout","paint","MapPointsConstants","LocationDotsLayerId","LocationDotsLayerSource","LocationPointsMapLayerBuilder","color","circleRadius","circleOpacity","dotLayerConfig","LocationPointLayerConfig","dotLayer","CircleLayerBuilder","FlexCol","React","MapStyle","Map","React","useEffect","useRef","useState","MapBox","accessToken","darkMode","options","zoom","props","map","setMap","useState","mapContainerRef","useRef","mapCanvasRef","setMapBoxInstance","mapInstance","useMapBoxInstance","mapSettings","useMapSettings","activeResize","dynamicMapResize","value","useDynamicMapResize","useEffect","preferDark","setStyle","MapStyle","Dark","Light","Map","center","container","current","style","document","querySelector","console","log","remove","React","div","ref","el","bottom","left","position","right","top","FormControlLabel","Switch","React","MapSettingSwitch","developerMode","field","props","mapSettings","setMapSettings","useMapSettings","setting","onLocalChange","event","previous","value","target","checked","devMode","hidden","React","FormControlLabel","label","control","Switch","onChange","Paper","Stack","useAppSettings","FlexGrowRow","FlexRow","React","MapSettingsBox","developerMode","props","mapSettings","useMapSettings","devModeFromContext","useAppSettings","resolveDeveloperMode","React","FlexGrowRow","bottom","left","position","FlexRow","paddingX","Paper","Stack","direction","spacing","marginX","Object","keys","map","key","index","MapSettingSwitch","field","MapboxHeatFlexBox","accessToken","children","mapBoxOptions","zoom","legend","developerMode","props","React","FlexCol","MapBox","options","MapSettingsBox","AnimatedHeatMap","accessToken","animatedFeatureSets","defaultMapSettings","heatMapColorProps","staticFeatureSet","props","theme","useTheme","staticMapColor","lowUsageColor","highUsageColor","localStaticMapColor","vars","palette","primary","light","layers","useState","LocationHeatMapLayerBuilderAnimated","darkenCss","length","React","MapBoxInstanceProvider","MapSettingsProvider","debugLayerName","MapHeatConstants","LocationDebugLayerId","HeatMapInitializerProvider","features","featureSets","featureSetsLayers","slice","MapboxHeatFlexBox","FlexCol","minHeight","minWidth","busy","Alert","AlertTitle","FlexCol","useWeakArchivistFromNode","useWeakArchivistGet","AnimatedHeatMapSettings","useFindHashes","useHeatMapColors","React","useMediaQuery","useTheme","FlexCol","React","Typography","useTheme","FlexCol","FlexRow","React","ColorGradientLegend","startColor","endColor","startLabel","endLabel","heading","textColor","props","theme","useTheme","React","FlexCol","Typography","mb","spacing","color","variant","textAlign","flexGrow","alignItems","paddingX","height","border","sx","backgroundImage","FlexRow","justifyContent","AnimatedHeatMapLegend","legendProps","startColor","endColor","startLabel","endLabel","heading","textColor","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","React","FlexCol","position","bottom","right","ColorGradientLegend","alignItems","marginBottom","spacing","marginLeft","marginRight","width","AnimatedHeatMapLoaded","accessToken","archivistNameOrAddress","props","hashes","useFindHashes","archivist","useWeakArchivistFromNode","payloads","xyoError","useWeakArchivistGet","multipleFeatureSets","useQuadKeyPayloadsToFeatures","heatMapColorProps","legendProps","useHeatMapColors","MapBoxHeatProps","flexGrow","legend","React","AnimatedHeatMapLegend","FlexCol","alignItems","Alert","sx","mt","AlertTitle","message","undefined","AnimatedHeatMap","defaultMapSettings","AnimatedHeatMapSettings","animatedFeatureSets","slice","staticFeatureSet","DefaultMapSettings","HeatMapSettings","debugLayer","scrollToZoom","fitToPoints","hidden","value","useInterval","React","useCallback","useEffect","useMemo","useRef","timeIncrement","animatedLayerCount","LayerAnimator","animateLayers","children","layers","layersInitialized","map","layerIndexQueue","useRef","fillLayers","useMemo","length","filter","layer","fillLayer","id","startsWith","setPaintProperty","delay","duration","incrementQueue","useCallback","index","current","push","at","lastQueuedIndex","last","undefined","unshiftQueue","shift","getNextLayer","nextLayer","layerAnimateWorker","setTimeout","console","warn","queueLayerAnimation","animatedLayers","i","entries","useEffect","useInterval","React","Alert","FlexCol","React","useCallback","useEffect","useMemo","MapboxPointsFlexBox","accessToken","features","fitToPointsPadding","layers","zoom","props","mapSettings","useMapSettings","map","mapInitialized","useMapBoxInstance","customFitToBoundsOptions","undefined","maxZoom","mapPoints","useMemo","length","MapPoints","updateFeatures","useCallback","isMapReady","layer","initializeMapSource","updateMapSetup","fitToPoints","value","initialMapPositioning","padding","bottom","left","right","top","reInitializeMap","useEffect","React","FlexCol","alignItems","id","MapBox","MapSettingsBox","Alert","severity"]}
1
+ {"version":3,"sources":["../../src/Components/AnimatedHeatMap.tsx","../../src/Contexts/HeatMapInitializer/Provider.tsx","../../src/hooks/useDynamicMapResize.tsx","../../src/hooks/useDynamicPositioning.tsx","../../src/hooks/useQuadKeyPayloadsToFeatures.tsx","../../src/MapBoxClasses/MapBase.ts","../../src/MapBoxClasses/MapHeat.ts","../../src/MapBoxClasses/MapPoints.ts","../../src/MapBoxClasses/MapSettings.ts","../../src/Contexts/MapBoxInstance/Provider.tsx","../../src/Contexts/MapBoxInstance/Context.ts","../../src/Contexts/MapBoxInstance/useMapBoxInstance.tsx","../../src/Contexts/MapSettings/Provider.tsx","../../src/Contexts/MapSettings/Context.ts","../../src/Contexts/MapSettings/useMapSettings.tsx","../../src/Contexts/HeatMapInitializer/Context.ts","../../src/Contexts/HeatMapInitializer/useHeatMapInitializer.tsx","../../src/Layers/Configs/HeatMapFillLayerConfig.ts","../../src/Layers/Configs/HeatMapLineLayerConfig.ts","../../src/Layers/Configs/HeatMapSymbolLayerConfig.ts","../../src/Layers/Configs/LocationPointLayerConfig.ts","../../src/Layers/FillLayer.ts","../../src/Layers/LineLayer.ts","../../src/Layers/SymbolLayer.ts","../../src/Layers/Builders/LocationHeatMapLayerBuilder.ts","../../src/Layers/Builders/LocationHeatMapLayerBuilderAnimated.ts","../../src/Layers/CircleLayer.ts","../../src/Layers/Builders/LocationPointsMapLayerBuilder.ts","../../src/Components/MapBoxHeat.tsx","../../src/Components/MapBox.tsx","../../src/Components/MapSettingsComponents/Setting.tsx","../../src/Components/MapSettingsComponents/SettingsBox.tsx","../../src/Components/AnimatedHeatMapLoaded.tsx","../../src/Components/Legend.tsx","../../src/Components/Legends/ColorGradient.tsx","../../src/Components/HeatMapSettings.ts","../../src/Components/LayerAnimator.tsx","../../src/Components/MapBoxPoints.tsx"],"sourcesContent":["import { useTheme } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { darkenCss } from '@xylabs/react-theme'\nimport type { AnimatedHeatMapColorProps, MapSetting } from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport type { PropsWithChildren } from 'react'\nimport React, { useState } from 'react'\n\nimport {\n HeatMapInitializerProvider, MapBoxInstanceProvider, MapSettingsProvider,\n} from '../Contexts/index.ts'\nimport type { MapLayer } from '../Layers/index.ts'\nimport { LocationHeatMapLayerBuilderAnimated, MapHeatConstants } from '../Layers/index.ts'\nimport { MapboxHeatFlexBox } from './MapBoxHeat.tsx'\n\nexport interface AnimatedHeatMapProps {\n accessToken: string\n animatedFeatureSets: Feature<Polygon>[][]\n defaultMapSettings?: MapSetting\n heatMapColorProps: AnimatedHeatMapColorProps\n staticFeatureSet: Feature<Polygon>[]\n}\n\nexport const AnimatedHeatMap: React.FC<PropsWithChildren<AnimatedHeatMapProps>> = ({\n accessToken,\n animatedFeatureSets,\n defaultMapSettings,\n heatMapColorProps,\n staticFeatureSet,\n ...props\n}) => {\n const theme = useTheme()\n const {\n staticMapColor, lowUsageColor, highUsageColor,\n } = heatMapColorProps || {}\n const localStaticMapColor = staticMapColor ?? theme.vars.palette.primary.light\n\n const [layers] = useState<MapLayer[]>(() => [\n LocationHeatMapLayerBuilderAnimated(localStaticMapColor, 0, 'static'),\n LocationHeatMapLayerBuilderAnimated(lowUsageColor || localStaticMapColor, 0, 'animated'),\n LocationHeatMapLayerBuilderAnimated(highUsageColor || darkenCss(localStaticMapColor, 0.9), 1, 'animated'),\n ])\n\n return animatedFeatureSets?.length\n ? (\n <MapBoxInstanceProvider>\n <MapSettingsProvider defaultMapSettings={defaultMapSettings} debugLayerName={MapHeatConstants.LocationDebugLayerId}>\n <HeatMapInitializerProvider\n features={staticFeatureSet}\n layers={[layers[0]]}\n featureSets={animatedFeatureSets}\n featureSetsLayers={layers.slice(1, 3)}\n heatMapColorProps={heatMapColorProps}\n >\n <MapboxHeatFlexBox accessToken={accessToken} {...props}></MapboxHeatFlexBox>\n </HeatMapInitializerProvider>\n </MapSettingsProvider>\n </MapBoxInstanceProvider>\n )\n : <FlexCol minHeight={160} minWidth={160} busy />\n}\n","import { forget } from '@xylabs/sdk-js'\nimport type { AnimatedHeatMapColorProps, HeatMapColorProps } from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport type { PropsWithChildren } from 'react'\nimport React, { useEffect, useMemo } from 'react'\n\nimport { useDynamicPositioning } from '../../hooks/index.ts'\nimport type { MapLayer } from '../../Layers/index.ts'\nimport { MapHeat } from '../../MapBoxClasses/index.ts'\nimport { useMapBoxInstance } from '../MapBoxInstance/index.ts'\nimport { useMapSettings } from '../MapSettings/index.ts'\nimport { HeatMapInitializerContext } from './Context.ts'\nimport type { HeatMapInitializerState } from './State.ts'\n\nexport interface MapInitializerProviderProps {\n featureSets?: Feature<Polygon>[][]\n featureSetsLayers?: MapLayer[]\n features?: Feature<Polygon>[]\n fitToPadding?: number\n heatMapColorProps: HeatMapColorProps | AnimatedHeatMapColorProps\n layers?: MapLayer[]\n zoom?: number\n}\n\nexport const HeatMapInitializerProvider: React.FC<PropsWithChildren<MapInitializerProviderProps>> = ({\n children,\n featureSets,\n featureSetsLayers,\n features,\n fitToPadding,\n heatMapColorProps,\n layers,\n zoom,\n}) => {\n const { options } = useDynamicPositioning()\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n const mapHeat = useMemo(() => {\n return (map && features?.length)\n ? new MapHeat({\n features, map, zoom,\n })\n : undefined\n }, [map, features, zoom])\n\n const value: HeatMapInitializerState = useMemo(() => ({\n MapHeat: mapHeat,\n heatMapColorProps,\n }), [mapHeat, heatMapColorProps])\n\n useEffect(() => {\n if (mapInitialized && featureSets?.length && featureSets[0].length > 0 && map && featureSetsLayers?.length) {\n const { lowUsageColor, highUsageColor } = heatMapColorProps as AnimatedHeatMapColorProps\n forget(MapHeat.initializeAnimatedHeatMapSource(featureSetsLayers, featureSets, map, lowUsageColor, highUsageColor))\n }\n\n return () => {\n MapHeat.animationStarted = false\n }\n }, [featureSets, featureSetsLayers, mapInitialized, map, heatMapColorProps])\n\n useEffect(() => {\n if (mapHeat && mapInitialized && features?.length && layers?.length) {\n mapHeat.initializeHeatMapSource(layers)\n }\n }, [mapHeat, features?.length, layers, mapInitialized])\n\n useEffect(() => {\n if (mapInitialized) {\n const { fitToPoints } = mapSettings || {}\n\n if (map) {\n if (fitToPoints?.value === true) {\n MapHeat.initialMapPositioning(\n {\n padding: {\n bottom: fitToPadding, left: fitToPadding, right: fitToPadding, top: fitToPadding,\n },\n },\n map,\n features,\n )\n } else if (options?.zoom && options.center) {\n map.setZoom(options.zoom)\n map.setCenter(options.center)\n }\n }\n }\n }, [mapHeat, map, mapSettings, fitToPadding, options, mapInitialized, features])\n\n return <HeatMapInitializerContext value={value}>{children}</HeatMapInitializerContext>\n}\n","import type { Map } from 'mapbox-gl'\nimport type { RefObject } from 'react'\nimport { useEffect, useMemo } from 'react'\n\n/**\n * Inspired by - https://bl.ocks.org/danswick/fc56f37c10d40be62e4feac5984250d2\n */\nexport const useDynamicMapResize = (\n mapContainerRef: RefObject<HTMLDivElement | null>,\n mapCanvasRef: RefObject<HTMLCanvasElement | null>,\n mapInstance?: Map,\n active = true,\n) => {\n const resizer = useMemo(\n () =>\n new ResizeObserver(() => {\n const width = mapContainerRef.current?.getBoundingClientRect().width\n if (width && mapCanvasRef.current) {\n mapCanvasRef.current.style.width = `${width}px`\n // setTimeout allows for the smoothest animation (vs requestAnimationFrame, debouce, etc)\n // likely because it lets mapbox resize once when the event loop is ready?\n setTimeout(() => mapInstance?.resize())\n }\n }),\n [mapCanvasRef, mapContainerRef, mapInstance],\n )\n\n const dependenciesReady = useMemo(() => {\n return !!(active && mapInstance && mapContainerRef?.current && mapCanvasRef.current)\n }, [active, mapCanvasRef, mapContainerRef, mapInstance])\n\n useEffect(() => {\n if (dependenciesReady) {\n if (mapContainerRef.current) {\n resizer.observe(mapContainerRef.current)\n }\n\n return () => {\n resizer.disconnect()\n }\n }\n }, [active, dependenciesReady, mapCanvasRef, mapContainerRef, mapInstance, resizer])\n}\n","import { useWindowSize } from '@xylabs/react-shared'\nimport type { MapOptions } from 'mapbox-gl'\nimport { useMemo } from 'react'\n\n/**\n * Zoom level for the map\n *\n * Note: Changing zoom will require changes to Lat/Lng Ranges\n */\nconst defaultZoom = 1.6\n\n/**\n * Range of aspect ratio values (width / height = aspect ratio) to scale against degrees\n * On lower aspect ratios, the width is larger than the height and vice-versa for higher\n */\nconst defaultAspectRatioRange = [0.5, 2]\n\n/**\n * Lat/Lng ranges, the first index is the minimum and the second is the maximum\n * Index 0 is for portrait screens and centers on the Eastern Hemisphere\n * Index 1 is for wider screens near the Prime Meridian and north of the Equator\n *\n * Note: Values are based off the zoom level\n */\nconst latRange = [0.912_164_420_526_366_4, 1.717_850_315_594_39]\nconst lngRange = [-81.474_201_485_195_9, 12.788_958_675_506_933]\n\n/**\n * Function to interpolate an aspect ratio value across a range of degrees and aspect ratios\n *\n * Inspired by - https://stackoverflow.com/questions/14224535/scaling-between-two-number-ranges\n *\n * @param aspectRatio aspect ratio to scale\n * @param degreeRange A latitude or longitude range (i.e. [minLat, maxLat])\n * @param aspectRatioRange A range of aspect ratios to scale against degreeRange parameter\n * @returns number\n */\nconst linearInterpolate = (aspectRatio: number, degreeRange: number[], aspectRatioRange?: number[]): number => {\n const [degreeMin, degreeMax] = degreeRange\n const [aspectRatioMin, aspectRatioMax] = aspectRatioRange || defaultAspectRatioRange\n\n const aspectRatioRangeSpan = aspectRatioMax - aspectRatioMin\n const degreeRangeSpan = degreeMax - degreeMin\n\n const percent = (aspectRatio - aspectRatioMin) / aspectRatioRangeSpan\n const scaledDegree = percent * degreeRangeSpan + degreeMin\n\n return scaledDegree\n}\n\nconst useDynamicPositioning = () => {\n const { width, height } = useWindowSize()\n\n const options = useMemo(() => {\n if (width && height) {\n const aspectRatio = width / height\n\n return {\n center: [linearInterpolate(aspectRatio, lngRange), linearInterpolate(aspectRatio, latRange)],\n zoom: defaultZoom,\n } as Partial<MapOptions>\n }\n }, [height, width])\n\n return { options }\n}\n\nexport { useDynamicPositioning }\n","import { GeoJson } from '@xylabs/geo'\nimport { exists } from '@xylabs/sdk-js'\nimport type { NetworkLocationHeatmapQuadkeyAnswerPayload } from '@xyo-network/react-map-model'\nimport type { Feature, Geometry } from 'geojson'\nimport { useEffect, useState } from 'react'\n\nconst quadKeyToFeature = ({ density, quadkey }: { density: number; quadkey: string }) => {\n const polygonFeature = new GeoJson(quadkey).polygonFeature()\n polygonFeature.properties = {\n count: density,\n density,\n }\n return polygonFeature\n}\n\nconst setDensity = (feature: Feature) => {\n if (feature.properties) {\n feature.properties.value = feature.properties.density / 5\n }\n return feature\n}\n\nconst useQuadKeyPayloadsToFeatures = (payloads?: NetworkLocationHeatmapQuadkeyAnswerPayload[] | NetworkLocationHeatmapQuadkeyAnswerPayload) => {\n const [multipleFeatureSets, setMultipleFeatureSets] = useState<Feature<Geometry>[][]>([[]])\n const [features, setFeatures] = useState<Feature<Geometry>[]>([])\n const [error, setError] = useState<Error>()\n\n useEffect(() => {\n // Convert Multiple Payloads from Quadkey to GeoJson\n if (Array.isArray(payloads)) {\n if ((payloads)?.filter(exists).length > 0) {\n const mappedFeatures = payloads?.map(payload => payload?.result.map(quadKeyToFeature))\n\n setMultipleFeatureSets(mappedFeatures.map(features => features?.map(setDensity) ?? []))\n } else {\n setError(new Error('Cannot find payloads for provided hashes'))\n }\n }\n\n // Convert Single Payload from Quadkey to GeoJson\n if (payloads && (payloads as NetworkLocationHeatmapQuadkeyAnswerPayload).result) {\n const singlePayload = payloads as NetworkLocationHeatmapQuadkeyAnswerPayload\n const mappedFeatures = singlePayload.result.map(quadKeyToFeature)\n\n setFeatures(mappedFeatures.map(setDensity))\n }\n }, [payloads])\n\n return {\n error, features, multipleFeatureSets,\n }\n}\n\nexport { useQuadKeyPayloadsToFeatures }\n","import { GeoJson } from '@xylabs/geo'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Feature, Geometry } from 'geojson'\nimport type { GeoJSONSource, Map } from 'mapbox-gl'\n\nimport type { MapLayer } from '../Layers/index.ts'\n\nexport interface MapBaseConfig<T extends Geometry> {\n features: Feature<T>[]\n map: Map\n requestLocation?: boolean\n zoom?: number\n}\n\nexport abstract class MapBase<T extends Geometry> {\n private _config: MapBaseConfig<T>\n\n constructor(config: MapBaseConfig<T>) {\n this._config = {\n requestLocation: true, zoom: 2, ...config,\n }\n }\n\n get isMapReady() {\n return !!this._config.map\n }\n\n initializeMapSource(layer: MapLayer) {\n const getSource = () => {\n const featuresCollection = GeoJson.featureCollection(this._config.features)\n return GeoJson.featuresSource(featuresCollection)\n }\n\n const existingSource = this._config.map.getSource(layer.source as string) as GeoJSONSource\n const source = getSource()\n if (existingSource) {\n existingSource.setData(assertEx(source.data as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>))\n } else {\n this._config.map.addSource(layer.source as string, source)\n }\n layer.update(this._config.map, true)\n\n return this\n }\n}\n","import { GeoJson } from '@xylabs/geo'\nimport {\n assertEx, delay, forget,\n} from '@xylabs/sdk-js'\nimport type { Feature, Polygon } from 'geojson'\nimport type {\n DataDrivenPropertyValueSpecification,\n GeoJSONSource, GeoJSONSourceSpecification, Map, MapOptions,\n} from 'mapbox-gl'\nimport { LngLatBounds } from 'mapbox-gl'\n\nimport type { MapLayer } from '../Layers/index.ts'\nimport type { MapBaseConfig } from './MapBase.ts'\nimport { MapBase } from './MapBase.ts'\n\nexport class MapHeat extends MapBase<Polygon> {\n // eslint-disable-next-line sonarjs/public-static-readonly\n static animationStarted = false\n\n config: MapBaseConfig<Polygon>\n constructor(config: MapBaseConfig<Polygon>) {\n super(config)\n this.config = config\n }\n\n static initialMapPositioning(options: MapOptions['fitBoundsOptions'], map: Map, features?: Feature<Polygon>[], initialBounds?: LngLatBounds) {\n if (!features) {\n return\n }\n\n let bounds: LngLatBounds\n\n if (initialBounds) {\n bounds = initialBounds\n } else {\n bounds = new LngLatBounds()\n\n // eslint-disable-next-line unicorn/no-array-for-each\n features.forEach((feature: Feature<Polygon>) => {\n for (const coordinates of feature.geometry.coordinates) {\n for (const position of coordinates) {\n bounds.extend(position as [number, number])\n }\n }\n })\n }\n\n map.setCenter(bounds.getCenter())\n map.fitBounds(bounds, options)\n return this\n }\n\n static async initializeAnimatedHeatMapSource(\n layers: MapLayer[],\n featureSet: Feature<Polygon>[][],\n map: Map,\n startColor?: string,\n endColor?: string,\n ) {\n this.animationStarted = true\n let layerTick = 0\n let sourceTick = 0\n\n const sources = featureSet.map((feature) => {\n const featuresCollection = GeoJson.featureCollection(feature)\n return GeoJson.featuresSource(featuresCollection)\n })\n this.updateLayer(map, layers[0], sources[0])\n this.updateLayer(map, layers[1], sources[1])\n\n for (const layer of layers) {\n map.setPaintProperty(layer.id, 'fill-opacity', 0)\n }\n\n const frameLength = 3000\n const initialPad = 0.5\n const factor = 10\n const steps = 30\n const stepLength = frameLength / steps\n const lowUsageColor = startColor ?? '#FFB3B3'\n const highUsageColor = endColor ?? '#FF0000'\n\n // Max density at i=0, min density at i=steps\n const dynamicFillColor = (factor: number, initialPad: number, i: number): DataDrivenPropertyValueSpecification<string> => {\n const sinFade = Math.sin(((i / steps) * Math.PI) / 2)\n const cosFade = Math.cos(((i / steps) * Math.PI) / 2)\n // we want the divisor to always be at least 1x the desired factor but will go up to\n // 2x factor to account for combinative effect of the overlay of two layers at once\n const divisor = factor + factor * sinFade\n const offset = initialPad * cosFade\n return [\n 'let',\n 'density',\n ['+', ['/', ['number', ['get', 'value']], divisor], offset],\n ['interpolate', ['linear'], ['var', 'density'], 0, lowUsageColor, 0.5, highUsageColor],\n ]\n }\n\n const fadedIn: boolean[] = layers.map(_ => false)\n\n const fadeIn = async (id: string, index: number) => {\n for (let i = steps; i >= 1; i--) {\n map.setPaintProperty(id, 'fill-color', dynamicFillColor(factor, initialPad, i * (180 / stepLength)))\n await delay(stepLength)\n }\n fadedIn[index] = true\n }\n\n const fadeOut = async (id: string, index: number) => {\n for (let i = 1; i <= steps; i++) {\n map.setPaintProperty(id, 'fill-color', dynamicFillColor(factor, initialPad, i * (180 / stepLength)))\n await delay(stepLength)\n }\n fadedIn[index] = false\n }\n\n let started = false\n const startAnimation = async () => {\n assertEx(!started, () => 'Animation Already Started')\n started = true\n while (this.animationStarted) {\n const upLayer = layerTick % layers.length\n const downLayer = (layerTick + 1) % layers.length\n\n const incomingSource = sourceTick % featureSet.length\n const outgoingSource = (sourceTick + 1) % featureSet.length\n\n // console.log('incoming / outgoing source', incomingSource, outgoingSource)\n\n // console.log(`animate: [${upLayer}, ${downLayer}]`)\n if (fadedIn[upLayer]) {\n this.updateLayer(map, layers[upLayer], sources[incomingSource])\n forget(fadeOut(layers[upLayer].id, upLayer))\n }\n if (!fadedIn[downLayer]) {\n this.updateLayer(map, layers[downLayer], sources[outgoingSource])\n forget(fadeIn(layers[downLayer].id, downLayer))\n }\n while ((fadedIn[upLayer] || !fadedIn[downLayer]) && this.animationStarted) {\n // console.log(`checking: [${fadedIn[upLayer]}, ${!fadedIn[downLayer]}]`)\n await delay(1000)\n }\n layerTick++\n sourceTick++\n\n // console.log(`this.layerTick: ${layerTick}`)\n // console.log(`this.sourceTick: ${sourceTick}`)\n }\n }\n\n await startAnimation()\n }\n\n private static updateLayer(map: Map, layer: MapLayer, source: GeoJSONSourceSpecification) {\n const existingSource = map.getSource(layer.source as string) as GeoJSONSource\n if (existingSource && source.data) {\n existingSource.setData(source.data as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>)\n } else if (source) {\n map.addSource(layer.source as string, source)\n }\n layer.update(map, true)\n }\n\n // Build layers each with the same features\n initializeHeatMapSource(layers: MapLayer[]) {\n const getSource = (_: number) => {\n const featuresCollection = GeoJson.featureCollection(this.config.features)\n return GeoJson.featuresSource(featuresCollection)\n }\n\n for (const [index, layer] of layers.entries()) {\n const existingSource = this.config.map.getSource(layer.source as string) as GeoJSONSource\n const source = getSource(index)\n if (existingSource) {\n existingSource.setData(assertEx(source.data) as GeoJSON.Feature<GeoJSON.Geometry> | GeoJSON.FeatureCollection<GeoJSON.Geometry>)\n } else {\n this.config.map.addSource(layer.source as string, source)\n }\n layer.update(this.config.map, true)\n }\n\n return this\n }\n}\n","import type { Feature, Point } from 'geojson'\nimport type { MapOptions } from 'mapbox-gl'\nimport { LngLatBounds } from 'mapbox-gl'\n\nimport type { MapBaseConfig } from './MapBase.ts'\nimport { MapBase } from './MapBase.ts'\n\nexport interface MapPointsConfig extends MapBaseConfig<Point> {\n features: Feature<Point>[]\n}\n\nexport class MapPoints extends MapBase<Point> {\n private config: MapPointsConfig\n\n constructor(config: MapPointsConfig) {\n super(config)\n this.config = config\n }\n\n initialMapPositioning(options: MapOptions['fitBoundsOptions'], initialBounds?: LngLatBounds) {\n let bounds: LngLatBounds\n\n if (initialBounds) {\n bounds = initialBounds\n } else {\n bounds = new LngLatBounds()\n\n // eslint-disable-next-line unicorn/no-array-for-each\n this.config.features.forEach((feature: Feature<Point>) => {\n bounds.extend(feature.geometry.coordinates as [number, number])\n })\n }\n\n this.config.map.setCenter(bounds.getCenter())\n this.config.map.fitBounds(bounds, options)\n\n return this.config.map\n }\n}\n","import type { MapSetting } from '@xyo-network/react-map-model'\nimport type {\n Map, MapEventOf, MapEventType,\n} from 'mapbox-gl'\nimport { GeolocateControl, NavigationControl } from 'mapbox-gl'\n\nexport interface MapSettingsConfig {\n debugLayerName?: string\n map: Map\n requestLocation?: boolean\n settings: MapSetting\n zoom?: number\n}\n\n/**\n * Utility class to handle changes in settings\n *\n * Methods are pure functions dedicated to map manipulation\n */\nexport class MapSettings {\n // eslint-disable-next-line sonarjs/public-static-readonly\n static geoLocateControl: GeolocateControl | undefined\n // eslint-disable-next-line sonarjs/public-static-readonly\n static mapListeners = {\n logData: (ev?: MapEventOf<MapEventType>, map?: Map) => {\n const target = map || ev?.target\n if (target) {\n console.log('zoom', target.getZoom())\n console.log('center', target.getCenter())\n }\n },\n }\n\n // eslint-disable-next-line sonarjs/public-static-readonly\n static navControl: NavigationControl | undefined\n // eslint-disable-next-line sonarjs/public-static-readonly\n static requestLocation: boolean | undefined\n\n static toggleControls(value: boolean | undefined, map: Map, zoom?: number, requestLocation?: boolean) {\n if (value) {\n MapSettings.addControls(map, zoom, requestLocation)\n } else {\n MapSettings.removeControls(map)\n }\n\n return this\n }\n\n static toggleDebugLayer(value: boolean | undefined, map: Map, layerName: string) {\n const debugLayer = map.getLayer(layerName)\n if (debugLayer) {\n if (value) {\n map.setLayoutProperty(layerName, 'visibility', 'visible')\n } else {\n map.setLayoutProperty(layerName, 'visibility', 'none')\n }\n }\n\n return this\n }\n\n static toggleDebugLogging(value: boolean | undefined, map: Map) {\n const debugEvents: MapEventType[] = ['resize', 'zoomend', 'dragend']\n if (value) {\n // initial values\n this.mapListeners.logData(undefined, map)\n for (const event of debugEvents) map.on(event, this.mapListeners.logData)\n } else {\n for (const event of debugEvents) map.off(event, this.mapListeners.logData)\n }\n }\n\n static toggleScrollToZoom(value: boolean | undefined, map: Map) {\n if (value) {\n map.scrollZoom.enable()\n } else {\n map.scrollZoom.disable()\n }\n\n return this\n }\n\n static updateSettings(config: MapSettingsConfig) {\n const {\n settings, map, zoom, requestLocation, debugLayerName = '',\n } = config\n const {\n scrollToZoom, enableControls, debugLayer, debugLogging,\n } = settings\n\n MapSettings.toggleControls(enableControls?.value, map, zoom, requestLocation)\n .toggleScrollToZoom(scrollToZoom?.value, map)\n .toggleDebugLayer(debugLayer?.value, map, debugLayerName)\n .toggleDebugLogging(debugLogging.value, map)\n }\n\n // Needs to be static so we ensure controls are only instantiated once\n private static addControls(map: Map, zoom?: number, requestLocation?: boolean) {\n const geolocateControl = new GeolocateControl({\n fitBoundsOptions: { zoom: zoom || 2 },\n positionOptions: { enableHighAccuracy: true },\n trackUserLocation: true,\n })\n\n const navControl = new NavigationControl({ showCompass: false })\n\n this.geoLocateControl = this.geoLocateControl || geolocateControl\n this.navControl = this.navControl || navControl\n\n if (!map.hasControl(this.geoLocateControl) && requestLocation) {\n map.addControl(this.geoLocateControl)\n }\n\n if (!map.hasControl(this.navControl)) {\n map.addControl(this.navControl, 'top-left')\n }\n\n return this\n }\n\n private static removeControls(map: Map) {\n if (this.geoLocateControl && map.hasControl(this.geoLocateControl) && this.requestLocation) {\n map.removeControl(this.geoLocateControl)\n }\n\n if (this.navControl && map.hasControl(this.navControl)) {\n map.removeControl(this.navControl)\n }\n\n return this\n }\n}\n","import type { Map } from 'mapbox-gl'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { MapBoxInstanceContext } from './Context.ts'\n\nexport const MapBoxInstanceProvider: React.FC<PropsWithChildren> = ({ children }) => {\n const [map, setMapBoxInstance] = useState<Map>()\n const [mapInitialized, setMapInitialized] = useState(false)\n\n const value = useMemo(() => ({\n map, mapInitialized, setMapBoxInstance,\n }), [map, mapInitialized, setMapBoxInstance])\n\n useEffect(() => {\n if (!mapInitialized && map) {\n map?.on('load', () => {\n setMapInitialized(true)\n })\n }\n }, [map, mapInitialized, setMapInitialized])\n\n return <MapBoxInstanceContext value={value}>{children}</MapBoxInstanceContext>\n}\n","import { createContext } from 'react'\n\nimport type { MapBoxInstanceState } from './State.ts'\n\nconst MapBoxInstanceContext = createContext<MapBoxInstanceState>({})\n\nexport { MapBoxInstanceContext }\n","import { assertEx } from '@xylabs/sdk-js'\nimport { use } from 'react'\n\nimport { MapBoxInstanceContext } from './Context.ts'\n\nconst useMapBoxInstance = () => {\n const context = use(MapBoxInstanceContext)\n assertEx('map' in context, () => 'useMapBoxInstance must be used within a MapBoxInstanceContext')\n\n return context\n}\n\nexport { useMapBoxInstance }\n","import type { MapSetting } from '@xyo-network/react-map-model'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useEffect, useMemo, useState,\n} from 'react'\n\nimport { MapSettings } from '../../MapBoxClasses/index.ts'\nimport { useMapBoxInstance } from '../MapBoxInstance/index.ts'\nimport { MapSettingsContext } from './Context.ts'\nimport type { MapSettingsState } from './State.ts'\n\nexport interface MapSettingsProviderProps {\n debugLayerName?: string\n defaultMapSettings?: MapSetting\n requestLocation?: boolean\n zoom?: number\n}\n\nexport const MapSettingsProvider: React.FC<PropsWithChildren<MapSettingsProviderProps>> = ({\n children,\n debugLayerName,\n defaultMapSettings,\n requestLocation,\n zoom = 1,\n}) => {\n const [mapSettings, setMapSettings] = useState<MapSetting>(defaultMapSettings || {})\n const { map, mapInitialized } = useMapBoxInstance()\n\n const value: MapSettingsState = useMemo(() => ({\n mapSettings,\n setMapSettings,\n }), [mapSettings, setMapSettings])\n\n useEffect(() => {\n if (mapSettings && map && mapInitialized) {\n MapSettings.updateSettings({\n debugLayerName, map, requestLocation, settings: mapSettings, zoom,\n })\n }\n }, [debugLayerName, map, mapInitialized, mapSettings, requestLocation, zoom])\n\n return <MapSettingsContext value={value}>{children}</MapSettingsContext>\n}\n","import { createContext } from 'react'\n\nimport type { MapSettingsState } from './State.ts'\n\nconst MapSettingsContext = createContext<MapSettingsState>({})\n\nexport { MapSettingsContext }\n","import { use } from 'react'\n\nimport { MapSettingsContext } from './Context.ts'\n\nconst useMapSettings = () => {\n const context = use(MapSettingsContext)\n\n return context\n}\n\nexport { useMapSettings }\n","import { createContext } from 'react'\n\nimport type { HeatMapInitializerState } from './State.ts'\n\nconst HeatMapInitializerContext = createContext<HeatMapInitializerState>({})\n\nexport { HeatMapInitializerContext }\n","import { assertEx } from '@xylabs/sdk-js'\nimport { use } from 'react'\n\nimport { HeatMapInitializerContext } from './Context.ts'\n\nconst useHeatMapInitializer = () => {\n const context = use(HeatMapInitializerContext)\n assertEx('heatMapInitialized' in context, () => 'useHeatMapInitializer must be used within a HeatMapInitializerContext')\n\n return context\n}\n\nexport { useHeatMapInitializer }\n","import type { FillLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapFillLayerConfig: (color: string) => Partial<FillLayerSpecification> = color => ({\n paint: {\n 'fill-color': color,\n 'fill-opacity': [\n 'let',\n 'density',\n ['+', ['/', ['number', ['get', 'value']], 4], 0.125],\n ['interpolate', ['linear'], ['var', 'density'], 0.8, ['var', 'density'], 1, 0.85],\n ],\n },\n})\n","import type { LineLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapLineLayerConfig: (color: string) => Partial<LineLayerSpecification> = color => ({\n layout: {\n // Enable for debugging\n visibility: 'none',\n },\n paint: {\n 'line-color': color,\n 'line-opacity': ['let', 'density', 0, ['interpolate', ['linear'], ['var', 'density'], 0.8, ['var', 'density'], 1, 0.85]],\n 'line-width': 0.5,\n },\n})\n","import type { SymbolLayerSpecification } from 'mapbox-gl'\n\nexport const HeatMapSymbolLayerConfig: (color: string) => Partial<SymbolLayerSpecification> = color => ({\n layout: {\n 'text-anchor': 'center',\n 'text-field': [\n 'concat',\n 'value: ',\n ['to-string', ['+', ['/', ['number', ['get', 'value']], 2], 0.25]],\n '\\n',\n 'count: ',\n ['to-string', ['get', 'count']],\n ],\n 'text-size': 10,\n 'visibility': 'none',\n },\n paint: { 'text-color': color },\n})\n","import type { CircleLayerSpecification } from 'mapbox-gl'\n\nexport const LocationPointLayerConfig: (color: string, circleRadius: number, circleOpacity: number) => Partial<CircleLayerSpecification> = (\n color,\n circleRadius,\n circleOpacity,\n) => {\n return {\n paint: {\n 'circle-color': color,\n 'circle-opacity': circleOpacity,\n 'circle-radius': circleRadius,\n },\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { FillLayerSpecification } from 'mapbox-gl'\n\nexport class FillLayerBuilder extends LayerBase<FillLayerSpecification> {\n FillLayerOptions: Partial<FillLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'fill' = 'fill' as const\n\n constructor(id: string, source: string, FillLayerOptions?: Partial<FillLayerSpecification>) {\n super(id, source)\n this.FillLayerOptions = FillLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): FillLayerSpecification {\n return {\n ...this.FillLayerOptions,\n id: this.id,\n source: this.source,\n type: this.type,\n }\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { LineLayerSpecification } from 'mapbox-gl'\n\nexport class LineLayerBuilder extends LayerBase<LineLayerSpecification> {\n LineLayerOptions: Partial<LineLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'line' = 'line' as const\n\n constructor(id: string, source: string, LineLayerOptions?: Partial<LineLayerSpecification>) {\n super(id, source)\n this.LineLayerOptions = LineLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): LineLayerSpecification {\n return {\n ...this.LineLayerOptions,\n id: this.id,\n layout: {},\n source: this.source,\n type: this.type,\n }\n }\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { SymbolLayerSpecification } from 'mapbox-gl'\n\nexport class SymbolLayerBuilder extends LayerBase<SymbolLayerSpecification> {\n SymbolLayerOptions: Partial<SymbolLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'symbol' = 'symbol' as const\n\n constructor(id: string, source: string, SymbolLayerOptions?: Partial<SymbolLayerSpecification>) {\n super(id, source)\n this.SymbolLayerOptions = SymbolLayerOptions || { id: this.id, source: this.source }\n }\n\n buildLayer(): SymbolLayerSpecification {\n return {\n ...this.SymbolLayerOptions,\n id: this.id,\n source: this.source,\n type: this.type,\n }\n }\n}\n","import {\n HeatMapFillLayerConfig, HeatMapLineLayerConfig, HeatMapSymbolLayerConfig,\n} from '../Configs/index.ts'\nimport { FillLayerBuilder } from '../FillLayer.ts'\nimport { LineLayerBuilder } from '../LineLayer.ts'\nimport { SymbolLayerBuilder } from '../SymbolLayer.ts'\n\nexport const MapHeatConstants = {\n LocationDebugLayerId: 'location-debug-id',\n LocationDebugLayerSource: 'location-debug-source',\n LocationFillLayerId: 'location-fill-id',\n LocationFillLayerSource: 'location-fill-source',\n LocationLineLayerId: 'location-line-id',\n LocationLineLayerSource: 'location-line-source',\n}\n\nexport const LocationHeatMapLayerBuilder = (color: string, alternateColor = '#000') => {\n const {\n LocationFillLayerId,\n LocationFillLayerSource,\n LocationLineLayerId,\n LocationLineLayerSource,\n LocationDebugLayerId,\n LocationDebugLayerSource,\n } = MapHeatConstants\n\n const fillLayerConfig = HeatMapFillLayerConfig(color)\n const lineLayerConfig = HeatMapLineLayerConfig(color)\n const debugLayerConfig = HeatMapSymbolLayerConfig(alternateColor)\n\n const fillLayer = new FillLayerBuilder(LocationFillLayerId, LocationFillLayerSource, fillLayerConfig)\n const lineLayer = new LineLayerBuilder(LocationLineLayerId, LocationLineLayerSource, lineLayerConfig)\n const debugLayer = new SymbolLayerBuilder(LocationDebugLayerId, LocationDebugLayerSource, debugLayerConfig)\n\n return [fillLayer, lineLayer, debugLayer]\n}\n","import { HeatMapFillLayerConfig } from '../Configs/index.ts'\nimport { FillLayerBuilder } from '../FillLayer.ts'\n\nconst MapHeatConstants = (index: number, type: string) => ({\n LocationDebugLayerId: `location-${type}-debug-id-${index}`,\n LocationDebugLayerSource: `location-${type}-debug-source-${index}`,\n LocationFillLayerId: `location-${type}-fill-id-${index}`,\n LocationFillLayerSource: `location-${type}-fill-source-${index}`,\n LocationLineLayerId: `location-${type}-line-id-${index}`,\n LocationLineLayerSource: `location-${type}-line-source-${index}`,\n})\n\nexport const LocationHeatMapLayerBuilderAnimated = (color: string, index: number, type = '') => {\n const { LocationFillLayerId, LocationFillLayerSource } = MapHeatConstants(index, type)\n\n const fillLayerConfig = HeatMapFillLayerConfig(color)\n\n const fillLayer = new FillLayerBuilder(LocationFillLayerId, LocationFillLayerSource, fillLayerConfig)\n\n return fillLayer\n}\n","import { LayerBase } from '@xylabs/geo'\nimport type { CircleLayerSpecification } from 'mapbox-gl'\n\nexport class CircleLayerBuilder extends LayerBase<CircleLayerSpecification> {\n CircleLayerOptions: Partial<CircleLayerSpecification>\n\n // ensures this class passes for `AnyLayer` type in MapBox\n type: 'circle' = 'circle' as const\n\n constructor(id: string, source: string, CircleLayerOptions?: Partial<CircleLayerSpecification>) {\n super(id, source)\n this.CircleLayerOptions = CircleLayerOptions || {\n id: this.id, source: this.source, type: 'circle',\n }\n }\n\n buildLayer(): CircleLayerSpecification {\n return {\n filter: ['==', '$type', 'Point'],\n layout: {},\n paint: {\n 'circle-color': '#ff0000',\n 'circle-radius': 6,\n },\n type: this.type,\n ...this.CircleLayerOptions,\n id: this.id,\n source: this.source,\n }\n }\n}\n","import { CircleLayerBuilder } from '../CircleLayer.ts'\nimport { LocationPointLayerConfig } from '../Configs/index.ts'\n\nexport const MapPointsConstants = {\n LocationDotsLayerId: 'location-dots',\n LocationDotsLayerSource: 'location-dots-source',\n}\n\nexport const LocationPointsMapLayerBuilder = (color: string, circleRadius = 6, circleOpacity = 0.8) => {\n const { LocationDotsLayerId, LocationDotsLayerSource } = MapPointsConstants\n\n const dotLayerConfig = LocationPointLayerConfig(color, circleRadius, circleOpacity)\n\n const dotLayer = new CircleLayerBuilder(LocationDotsLayerId, LocationDotsLayerSource, dotLayerConfig)\n\n return [dotLayer]\n}\n","import { FlexCol } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\nimport { MapBox } from './MapBox.tsx'\nimport { MapSettingsBox } from './MapSettingsComponents/index.ts'\n\nexport const MapboxHeatFlexBox: React.FC<MapboxFlexBoxProps> = ({\n accessToken, children, mapBoxOptions, zoom, legend, developerMode, ...props\n}) => {\n return (\n <FlexCol {...props}>\n <MapBox accessToken={accessToken} options={mapBoxOptions} zoom={zoom} />\n <MapSettingsBox developerMode={developerMode} />\n {legend}\n {children}\n </FlexCol>\n )\n}\n","// eslint-disable-next-line import-x/no-internal-modules\nimport 'mapbox-gl/dist/mapbox-gl.css'\n\nimport { MapStyle } from '@xyo-network/react-map-model'\nimport type { MapOptions } from 'mapbox-gl'\nimport { Map } from 'mapbox-gl'\nimport React, {\n useEffect, useRef, useState,\n} from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts/index.ts'\nimport { useDynamicMapResize } from '../hooks/index.ts'\n\nexport interface MapBoxProps {\n accessToken: string\n darkMode?: boolean\n options?: Partial<MapOptions>\n zoom?: number\n}\n\nexport const MapBox: React.FC<MapBoxProps> = ({\n accessToken, darkMode = false, options, zoom = 2, ...props\n}) => {\n const [map, setMap] = useState<Map>()\n const mapContainerRef = useRef<HTMLDivElement>(null)\n const mapCanvasRef = useRef<HTMLCanvasElement>(null)\n const { setMapBoxInstance, map: mapInstance } = useMapBoxInstance()\n const { mapSettings } = useMapSettings()\n\n const activeResize = mapSettings?.dynamicMapResize.value\n useDynamicMapResize(mapContainerRef, mapCanvasRef, mapInstance, activeResize)\n\n useEffect(() => {\n if (mapSettings?.preferDark?.value === true) {\n map?.setStyle(`mapbox://styles/${MapStyle.Dark}`)\n } else {\n map?.setStyle(`mapbox://styles/${darkMode ? MapStyle.Dark : MapStyle.Light}`)\n }\n }, [map, darkMode, mapSettings])\n\n useEffect(() => {\n const map = new Map({\n accessToken,\n center: [0, 0],\n container: mapContainerRef.current ?? '',\n style: `mapbox://styles/${MapStyle.Light}`,\n zoom,\n ...options,\n })\n\n // Allow external components to control the map\n setMapBoxInstance?.(map)\n setMap(map)\n\n // save the map canvas ref to help with resizing\n mapCanvasRef.current = document.querySelector('.mapboxgl-canvas') as HTMLCanvasElement | null\n\n console.log('Created Map')\n\n return () => {\n console.log('Removing Map')\n map.remove()\n }\n }, [mapContainerRef, setMap, options, zoom, setMapBoxInstance, accessToken])\n\n return (\n <div\n ref={(el) => { mapContainerRef.current = el }}\n style={{\n bottom: 0,\n left: 0,\n position: 'absolute',\n right: 0,\n top: 0,\n ...props,\n }}\n />\n )\n}\n","import type { SwitchProps } from '@mui/material'\nimport { FormControlLabel, Switch } from '@mui/material'\nimport React from 'react'\n\nimport { useMapSettings } from '../../Contexts/index.ts'\n\nexport interface MapSettingSwitchProps extends SwitchProps {\n developerMode?: boolean\n field: string\n}\n\nexport const MapSettingSwitch: React.FC<MapSettingSwitchProps> = ({\n developerMode, field, ...props\n}) => {\n const { mapSettings, setMapSettings } = useMapSettings()\n const setting = mapSettings?.[field]\n\n const onLocalChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (setting) {\n setMapSettings?.((previous) => {\n previous[setting.field].value = event.target.checked\n return { ...previous }\n })\n }\n }\n\n if (setting?.devMode && developerMode === false) {\n return null\n }\n\n return setting?.hidden\n ? null\n : (\n <FormControlLabel label={setting?.label} control={<Switch checked={setting?.value} onChange={onLocalChange} {...props} />} />\n )\n}\n","import { Paper, Stack } from '@mui/material'\nimport { useAppSettings } from '@xylabs/react-app-settings'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexGrowRow, FlexRow } from '@xylabs/react-flexbox'\nimport React from 'react'\n\nimport { useMapSettings } from '../../Contexts/index.ts'\nimport { MapSettingSwitch } from './Setting.tsx'\n\nexport interface MapSettingsBoxProps extends FlexBoxProps {\n developerMode?: boolean\n}\n\nexport const MapSettingsBox: React.FC<MapSettingsBoxProps> = ({ developerMode, ...props }) => {\n const { mapSettings } = useMapSettings()\n const { developerMode: devModeFromContext } = useAppSettings()\n const resolveDeveloperMode = developerMode ?? devModeFromContext\n\n return mapSettings && resolveDeveloperMode\n ? (\n <FlexGrowRow bottom={36} left={10} position=\"absolute\" {...props}>\n <FlexRow paddingX={2}>\n <Paper>\n <Stack direction=\"row\" spacing={1} marginX={1}>\n {Object.keys(mapSettings).map((key, index) => {\n return <MapSettingSwitch key={index} field={mapSettings[key].field} developerMode={developerMode} />\n })}\n </Stack>\n </Paper>\n </FlexRow>\n </FlexGrowRow>\n )\n : null\n}\n","import { Alert, AlertTitle } from '@mui/material'\nimport type { FlexBoxProps } from '@xylabs/react-flexbox'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport { useWeakArchivistFromNode, useWeakArchivistGet } from '@xyo-network/react-archivist'\nimport type { NetworkLocationHeatmapQuadkeyAnswerPayload } from '@xyo-network/react-map-model'\nimport {\n AnimatedHeatMapSettings,\n useFindHashes, useHeatMapColors,\n} from '@xyo-network/react-map-model'\nimport type { Feature, Polygon } from 'geojson'\nimport React from 'react'\n\nimport { useQuadKeyPayloadsToFeatures } from '../hooks/index.ts'\nimport { AnimatedHeatMap } from './AnimatedHeatMap.tsx'\nimport { AnimatedHeatMapLegend } from './Legend.tsx'\n\nexport interface AnimatedHeatMapLoadedProps extends FlexBoxProps {\n accessToken: string\n archivistNameOrAddress: string\n}\n\nexport const AnimatedHeatMapLoaded: React.FC<AnimatedHeatMapLoadedProps> = ({\n accessToken, archivistNameOrAddress, ...props\n}) => {\n const hashes = useFindHashes()\n const [archivist] = useWeakArchivistFromNode(archivistNameOrAddress)\n const [payloads, xyoError] = useWeakArchivistGet<NetworkLocationHeatmapQuadkeyAnswerPayload>(archivist, hashes)\n const { multipleFeatureSets } = useQuadKeyPayloadsToFeatures(payloads)\n const { heatMapColorProps, legendProps } = useHeatMapColors()\n\n const MapBoxHeatProps = {\n flexGrow: 1,\n legend: legendProps ? <AnimatedHeatMapLegend {...legendProps} /> : null,\n }\n\n return (\n <FlexCol alignItems=\"stretch\" {...props}>\n {xyoError\n ? (\n <Alert sx={{ mt: 2 }}>\n <AlertTitle>Error Loading Map</AlertTitle>\n {xyoError.message ? `Error: ${xyoError.message}` : null}\n You might try authenticating again.\n </Alert>\n )\n : null}\n {hashes === undefined\n ? <Alert>Missing answer hash for heat map query</Alert>\n : (\n <AnimatedHeatMap\n accessToken={accessToken}\n defaultMapSettings={AnimatedHeatMapSettings}\n animatedFeatureSets={multipleFeatureSets.slice(1) as Feature<Polygon>[][]}\n staticFeatureSet={multipleFeatureSets[0] as Feature<Polygon>[]}\n heatMapColorProps={heatMapColorProps}\n {...MapBoxHeatProps}\n />\n )}\n </FlexCol>\n )\n}\n","import { useMediaQuery, useTheme } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { ColorGradientLegendProps } from '@xyo-network/react-map-model'\nimport React from 'react'\n\nimport { ColorGradientLegend } from './Legends/index.ts'\n\nconst AnimatedHeatMapLegend: React.FC<ColorGradientLegendProps> = ({ ...legendProps }) => {\n const {\n startColor, endColor, startLabel, endLabel, heading, textColor,\n } = legendProps\n const theme = useTheme()\n const isSmall = useMediaQuery(theme.breakpoints.down('sm'))\n\n return (\n <FlexCol position=\"absolute\" bottom={0} right={0}>\n <ColorGradientLegend\n startColor={startColor}\n endColor={endColor}\n startLabel={startLabel}\n endLabel={endLabel}\n heading={heading}\n textColor={textColor}\n {...{\n alignItems: 'stretch',\n marginBottom: theme.spacing(4),\n marginLeft: isSmall ? theme.spacing(3) : 0,\n marginRight: isSmall ? theme.spacing(2) : theme.spacing(3),\n width: isSmall ? '40vw' : theme.spacing(18),\n }}\n />\n </FlexCol>\n )\n}\n\nexport { AnimatedHeatMapLegend }\n","import { Typography, useTheme } from '@mui/material'\nimport { FlexCol, FlexRow } from '@xylabs/react-flexbox'\nimport type { ColorGradientLegendProps } from '@xyo-network/react-map-model'\nimport React from 'react'\n\nconst ColorGradientLegend: React.FC<ColorGradientLegendProps> = ({\n startColor, endColor, startLabel, endLabel, heading, textColor, ...props\n}) => {\n const theme = useTheme()\n\n return (\n <FlexCol {...props}>\n <Typography mb={theme.spacing(0.25)} color={textColor} variant=\"caption\" textAlign=\"center\">\n {heading}\n </Typography>\n <FlexCol flexGrow={1} alignItems=\"stretch\" paddingX={theme.spacing(1)} mb={theme.spacing(0.25)}>\n <FlexCol\n height={theme.spacing(0.75)}\n border={`1px solid ${textColor}`}\n sx={{ backgroundImage: `linear-gradient(to right, ${startColor},${endColor})` }}\n />\n </FlexCol>\n <FlexRow flexGrow={1} justifyContent=\"space-between\">\n <Typography color={textColor} variant=\"caption\">\n {startLabel}\n </Typography>\n <Typography color={textColor} variant=\"caption\">\n {endLabel}\n </Typography>\n </FlexRow>\n </FlexCol>\n )\n}\n\nexport { ColorGradientLegend }\n","import { DefaultMapSettings } from '@xyo-network/react-map-model'\n\nconst HeatMapSettings = DefaultMapSettings()\nconst {\n debugLayer, scrollToZoom, fitToPoints,\n} = HeatMapSettings\ndebugLayer.hidden = false\nscrollToZoom.value = true\nfitToPoints.value = true\n\nexport { HeatMapSettings }\n","import { useInterval } from '@xylabs/react-shared'\nimport type { Map } from 'mapbox-gl'\nimport type { PropsWithChildren } from 'react'\nimport React, {\n useCallback, useEffect, useMemo, useRef,\n} from 'react'\n\nimport type { MapLayer } from '../Layers/index.ts'\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\n\nexport interface LayerAnimatorProps {\n animateLayers?: boolean\n layers: MapboxFlexBoxProps['layers']\n layersInitialized: boolean\n map: Map | undefined\n}\n\nconst timeIncrement = 2000\nconst animatedLayerCount = 3\n\nexport const LayerAnimator: React.FC<PropsWithChildren<LayerAnimatorProps>> = ({\n animateLayers, children, layers, layersInitialized, map,\n}) => {\n const layerIndexQueue = useRef<number[]>([])\n\n const fillLayers: MapLayer[] = useMemo(() => {\n if (layers?.length && map && layersInitialized) {\n return layers.filter((layer) => {\n const fillLayer = layer.id.startsWith('location-fill')\n if (fillLayer) {\n map.setPaintProperty(layer.id, 'fill-opacity-transition', { delay: 0, duration: 4000 })\n }\n return fillLayer\n })\n }\n return []\n }, [layers, layersInitialized, map])\n\n const incrementQueue = useCallback(\n (index: number) => {\n if (fillLayers[index]) {\n layerIndexQueue.current.push(index)\n } else {\n layerIndexQueue.current.push(0)\n }\n return layerIndexQueue.current.at(-1)\n },\n [fillLayers],\n )\n\n const lastQueuedIndex = useCallback(() => {\n const last = layerIndexQueue.current.at(-1)\n if (last === undefined) {\n incrementQueue(0)\n return 0\n } else {\n return last\n }\n }, [incrementQueue])\n\n const unshiftQueue = useCallback(() => {\n layerIndexQueue.current.shift()\n }, [])\n\n const getNextLayer = useCallback(() => {\n const nextLayer = fillLayers[lastQueuedIndex()]\n incrementQueue(lastQueuedIndex() + 1)\n return nextLayer\n }, [fillLayers, incrementQueue, lastQueuedIndex])\n\n const layerAnimateWorker = useCallback(\n (layer: MapLayer) => {\n if (layer) {\n map?.setPaintProperty(layer.id, 'fill-opacity', 0.85)\n setTimeout(() => {\n map?.setPaintProperty(layer.id, 'fill-opacity', 0)\n unshiftQueue()\n }, timeIncrement * 2)\n } else {\n console.warn('tried to queue an empty layer')\n }\n },\n [map, unshiftQueue],\n )\n\n //\n const queueLayerAnimation = useCallback(() => {\n const animatedLayers: MapLayer[] = []\n\n for (let i = 0; i < animatedLayerCount; i++) {\n animatedLayers.push(getNextLayer())\n }\n\n for (const [index, layer] of animatedLayers.entries()) {\n if (index === 0) {\n layerAnimateWorker(layer)\n } else {\n setTimeout(() => {\n layerAnimateWorker(layer)\n }, timeIncrement * index)\n }\n }\n }, [getNextLayer, layerAnimateWorker])\n\n // Run a single layer animation before the interval kicks in\n useEffect(() => {\n if (animateLayers && layersInitialized && map && fillLayers.length > 0) {\n queueLayerAnimation()\n }\n }, [animateLayers, fillLayers.length, layersInitialized, map, queueLayerAnimation])\n\n useInterval(() => {\n if (animateLayers && layersInitialized && map && fillLayers.length > 0) {\n queueLayerAnimation()\n }\n }, timeIncrement * animatedLayerCount)\n\n return <>{children}</>\n}\n","import { Alert } from '@mui/material'\nimport { FlexCol } from '@xylabs/react-flexbox'\nimport type { Feature, Point } from 'geojson'\nimport type { MapOptions } from 'mapbox-gl'\nimport React, {\n useCallback, useEffect, useMemo,\n} from 'react'\n\nimport { useMapBoxInstance, useMapSettings } from '../Contexts/index.ts'\nimport type { MapboxFlexBoxProps } from '../lib/index.ts'\nimport { MapPoints } from '../MapBoxClasses/index.ts'\nimport { MapBox } from './MapBox.tsx'\nimport { MapSettingsBox } from './MapSettingsComponents/index.ts'\n\nexport interface MapboxPointsFlexBoxProps extends MapboxFlexBoxProps {\n accessToken: string\n features?: Feature<Point>[]\n}\n\nexport const MapboxPointsFlexBox: React.FC<MapboxPointsFlexBoxProps> = ({\n accessToken,\n features,\n fitToPointsPadding = 20,\n layers,\n zoom,\n ...props\n}) => {\n const { mapSettings } = useMapSettings()\n const { map, mapInitialized } = useMapBoxInstance()\n\n /**\n * Needed because of a bug in mapbox taking undefined values for the config options of fitToBounds\n * see - https://github.com/mapbox/mapbox-gl-js/issues/10013\n */\n const customFitToBoundsOptions = (zoom?: number): MapOptions['fitBoundsOptions'] => {\n if (zoom !== undefined) {\n return { maxZoom: zoom }\n }\n return {}\n }\n\n const mapPoints = useMemo(() => {\n return (map && features?.length)\n ? new MapPoints({\n features, map, zoom,\n })\n : undefined\n }, [map, features, zoom])\n\n const updateFeatures = useCallback(() => {\n if (mapPoints?.isMapReady && features?.length && layers)\n for (const layer of layers) {\n mapPoints.initializeMapSource(layer)\n }\n }, [mapPoints, features, layers])\n\n const updateMapSetup = useCallback(() => {\n const { fitToPoints } = mapSettings || {}\n\n if (mapPoints && map && fitToPoints?.value === true) {\n mapPoints.initialMapPositioning({\n padding: {\n bottom: fitToPointsPadding, left: fitToPointsPadding, right: fitToPointsPadding, top: fitToPointsPadding,\n },\n ...customFitToBoundsOptions(zoom),\n })\n }\n }, [mapSettings, mapPoints, map, fitToPointsPadding, zoom])\n\n const reInitializeMap = useCallback(() => {\n mapPoints?.initialMapPositioning({\n padding: {\n bottom: fitToPointsPadding, left: fitToPointsPadding, right: fitToPointsPadding, top: fitToPointsPadding,\n },\n ...customFitToBoundsOptions(zoom),\n })\n updateFeatures()\n }, [mapPoints, fitToPointsPadding, updateFeatures, zoom])\n\n useEffect(() => {\n if (mapInitialized) {\n updateMapSetup()\n reInitializeMap()\n }\n }, [mapInitialized, reInitializeMap, updateMapSetup])\n\n return (\n <FlexCol alignItems=\"stretch\" id=\"xyo-mapbox-wrap\" {...props}>\n {features\n ? (\n <>\n <MapBox accessToken={accessToken} zoom={zoom} />\n <MapSettingsBox />\n </>\n )\n : <Alert severity=\"error\">No data to show</Alert>}\n </FlexCol>\n )\n}\n"],"mappings":"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","names":["useTheme","FlexCol","darkenCss","React","useState","forget","React","useEffect","useMemo","useEffect","useMemo","useDynamicMapResize","mapContainerRef","mapCanvasRef","mapInstance","active","resizer","useMemo","ResizeObserver","width","current","getBoundingClientRect","style","setTimeout","resize","dependenciesReady","useEffect","observe","disconnect","useWindowSize","useMemo","defaultZoom","defaultAspectRatioRange","latRange","lngRange","linearInterpolate","aspectRatio","degreeRange","aspectRatioRange","degreeMin","degreeMax","aspectRatioMin","aspectRatioMax","aspectRatioRangeSpan","degreeRangeSpan","percent","scaledDegree","useDynamicPositioning","width","height","useWindowSize","options","useMemo","center","zoom","GeoJson","exists","useEffect","useState","quadKeyToFeature","density","quadkey","polygonFeature","GeoJson","properties","count","setDensity","feature","value","useQuadKeyPayloadsToFeatures","payloads","multipleFeatureSets","setMultipleFeatureSets","useState","features","setFeatures","error","setError","useEffect","Array","isArray","filter","exists","length","mappedFeatures","map","payload","result","Error","singlePayload","GeoJson","assertEx","MapBase","_config","config","requestLocation","zoom","isMapReady","map","initializeMapSource","layer","getSource","featuresCollection","GeoJson","featureCollection","features","featuresSource","existingSource","source","setData","assertEx","data","addSource","update","GeoJson","assertEx","delay","forget","LngLatBounds","MapHeat","MapBase","animationStarted","config","initialMapPositioning","options","map","features","initialBounds","bounds","LngLatBounds","forEach","feature","coordinates","geometry","position","extend","setCenter","getCenter","fitBounds","initializeAnimatedHeatMapSource","layers","featureSet","startColor","endColor","layerTick","sourceTick","sources","featuresCollection","GeoJson","featureCollection","featuresSource","updateLayer","layer","setPaintProperty","id","frameLength","initialPad","factor","steps","stepLength","lowUsageColor","highUsageColor","dynamicFillColor","i","sinFade","Math","sin","PI","cosFade","cos","divisor","offset","fadedIn","_","fadeIn","index","delay","fadeOut","started","startAnimation","assertEx","upLayer","length","downLayer","incomingSource","outgoingSource","forget","source","existingSource","getSource","data","setData","addSource","update","initializeHeatMapSource","entries","LngLatBounds","MapPoints","MapBase","config","initialMapPositioning","options","initialBounds","bounds","LngLatBounds","features","forEach","feature","extend","geometry","coordinates","map","setCenter","getCenter","fitBounds","GeolocateControl","NavigationControl","MapSettings","geoLocateControl","mapListeners","logData","ev","map","target","console","log","getZoom","getCenter","navControl","requestLocation","toggleControls","value","zoom","addControls","removeControls","toggleDebugLayer","layerName","debugLayer","getLayer","setLayoutProperty","toggleDebugLogging","debugEvents","undefined","event","on","off","toggleScrollToZoom","scrollZoom","enable","disable","updateSettings","config","settings","debugLayerName","scrollToZoom","enableControls","debugLogging","geolocateControl","GeolocateControl","fitBoundsOptions","positionOptions","enableHighAccuracy","trackUserLocation","NavigationControl","showCompass","hasControl","addControl","removeControl","React","useEffect","useMemo","useState","createContext","MapBoxInstanceContext","MapBoxInstanceProvider","children","map","setMapBoxInstance","useState","mapInitialized","setMapInitialized","value","useMemo","useEffect","on","MapBoxInstanceContext","assertEx","use","useMapBoxInstance","context","use","MapBoxInstanceContext","assertEx","React","useEffect","useMemo","useState","createContext","MapSettingsContext","MapSettingsProvider","children","debugLayerName","defaultMapSettings","requestLocation","zoom","mapSettings","setMapSettings","useState","map","mapInitialized","useMapBoxInstance","value","useMemo","useEffect","MapSettings","updateSettings","settings","React","MapSettingsContext","use","useMapSettings","context","use","MapSettingsContext","createContext","HeatMapInitializerContext","HeatMapInitializerProvider","children","featureSets","featureSetsLayers","features","fitToPadding","heatMapColorProps","layers","zoom","options","useDynamicPositioning","mapSettings","useMapSettings","map","mapInitialized","useMapBoxInstance","mapHeat","useMemo","length","MapHeat","undefined","value","useEffect","lowUsageColor","highUsageColor","forget","initializeAnimatedHeatMapSource","animationStarted","initializeHeatMapSource","fitToPoints","initialMapPositioning","padding","bottom","left","right","top","center","setZoom","setCenter","React","HeatMapInitializerContext","assertEx","use","useHeatMapInitializer","context","use","HeatMapInitializerContext","assertEx","HeatMapFillLayerConfig","color","paint","HeatMapLineLayerConfig","color","layout","visibility","paint","HeatMapSymbolLayerConfig","color","layout","paint","LocationPointLayerConfig","color","circleRadius","circleOpacity","paint","LayerBase","FillLayerBuilder","LayerBase","FillLayerOptions","type","id","source","buildLayer","LayerBase","LineLayerBuilder","LayerBase","LineLayerOptions","type","id","source","buildLayer","layout","LayerBase","SymbolLayerBuilder","LayerBase","SymbolLayerOptions","type","id","source","buildLayer","MapHeatConstants","LocationDebugLayerId","LocationDebugLayerSource","LocationFillLayerId","LocationFillLayerSource","LocationLineLayerId","LocationLineLayerSource","LocationHeatMapLayerBuilder","color","alternateColor","fillLayerConfig","HeatMapFillLayerConfig","lineLayerConfig","HeatMapLineLayerConfig","debugLayerConfig","HeatMapSymbolLayerConfig","fillLayer","FillLayerBuilder","lineLayer","LineLayerBuilder","debugLayer","SymbolLayerBuilder","MapHeatConstants","index","type","LocationDebugLayerId","LocationDebugLayerSource","LocationFillLayerId","LocationFillLayerSource","LocationLineLayerId","LocationLineLayerSource","LocationHeatMapLayerBuilderAnimated","color","fillLayerConfig","HeatMapFillLayerConfig","fillLayer","FillLayerBuilder","LayerBase","CircleLayerBuilder","LayerBase","CircleLayerOptions","type","id","source","buildLayer","filter","layout","paint","MapPointsConstants","LocationDotsLayerId","LocationDotsLayerSource","LocationPointsMapLayerBuilder","color","circleRadius","circleOpacity","dotLayerConfig","LocationPointLayerConfig","dotLayer","CircleLayerBuilder","FlexCol","React","MapStyle","Map","React","useEffect","useRef","useState","MapBox","accessToken","darkMode","options","zoom","props","map","setMap","useState","mapContainerRef","useRef","mapCanvasRef","setMapBoxInstance","mapInstance","useMapBoxInstance","mapSettings","useMapSettings","activeResize","dynamicMapResize","value","useDynamicMapResize","useEffect","preferDark","setStyle","MapStyle","Dark","Light","Map","center","container","current","style","document","querySelector","console","log","remove","React","div","ref","el","bottom","left","position","right","top","FormControlLabel","Switch","React","MapSettingSwitch","developerMode","field","props","mapSettings","setMapSettings","useMapSettings","setting","onLocalChange","event","previous","value","target","checked","devMode","hidden","React","FormControlLabel","label","control","Switch","onChange","Paper","Stack","useAppSettings","FlexGrowRow","FlexRow","React","MapSettingsBox","developerMode","props","mapSettings","useMapSettings","devModeFromContext","useAppSettings","resolveDeveloperMode","React","FlexGrowRow","bottom","left","position","FlexRow","paddingX","Paper","Stack","direction","spacing","marginX","Object","keys","map","key","index","MapSettingSwitch","field","MapboxHeatFlexBox","accessToken","children","mapBoxOptions","zoom","legend","developerMode","props","React","FlexCol","MapBox","options","MapSettingsBox","AnimatedHeatMap","accessToken","animatedFeatureSets","defaultMapSettings","heatMapColorProps","staticFeatureSet","props","theme","useTheme","staticMapColor","lowUsageColor","highUsageColor","localStaticMapColor","vars","palette","primary","light","layers","useState","LocationHeatMapLayerBuilderAnimated","darkenCss","length","React","MapBoxInstanceProvider","MapSettingsProvider","debugLayerName","MapHeatConstants","LocationDebugLayerId","HeatMapInitializerProvider","features","featureSets","featureSetsLayers","slice","MapboxHeatFlexBox","FlexCol","minHeight","minWidth","busy","Alert","AlertTitle","FlexCol","useWeakArchivistFromNode","useWeakArchivistGet","AnimatedHeatMapSettings","useFindHashes","useHeatMapColors","React","useMediaQuery","useTheme","FlexCol","React","Typography","useTheme","FlexCol","FlexRow","React","ColorGradientLegend","startColor","endColor","startLabel","endLabel","heading","textColor","props","theme","useTheme","React","FlexCol","Typography","mb","spacing","color","variant","textAlign","flexGrow","alignItems","paddingX","height","border","sx","backgroundImage","FlexRow","justifyContent","AnimatedHeatMapLegend","legendProps","startColor","endColor","startLabel","endLabel","heading","textColor","theme","useTheme","isSmall","useMediaQuery","breakpoints","down","React","FlexCol","position","bottom","right","ColorGradientLegend","alignItems","marginBottom","spacing","marginLeft","marginRight","width","AnimatedHeatMapLoaded","accessToken","archivistNameOrAddress","props","hashes","useFindHashes","archivist","useWeakArchivistFromNode","payloads","xyoError","useWeakArchivistGet","multipleFeatureSets","useQuadKeyPayloadsToFeatures","heatMapColorProps","legendProps","useHeatMapColors","MapBoxHeatProps","flexGrow","legend","React","AnimatedHeatMapLegend","FlexCol","alignItems","Alert","sx","mt","AlertTitle","message","undefined","AnimatedHeatMap","defaultMapSettings","AnimatedHeatMapSettings","animatedFeatureSets","slice","staticFeatureSet","DefaultMapSettings","HeatMapSettings","debugLayer","scrollToZoom","fitToPoints","hidden","value","useInterval","React","useCallback","useEffect","useMemo","useRef","timeIncrement","animatedLayerCount","LayerAnimator","animateLayers","children","layers","layersInitialized","map","layerIndexQueue","useRef","fillLayers","useMemo","length","filter","layer","fillLayer","id","startsWith","setPaintProperty","delay","duration","incrementQueue","useCallback","index","current","push","at","lastQueuedIndex","last","undefined","unshiftQueue","shift","getNextLayer","nextLayer","layerAnimateWorker","setTimeout","console","warn","queueLayerAnimation","animatedLayers","i","entries","useEffect","useInterval","React","Alert","FlexCol","React","useCallback","useEffect","useMemo","MapboxPointsFlexBox","accessToken","features","fitToPointsPadding","layers","zoom","props","mapSettings","useMapSettings","map","mapInitialized","useMapBoxInstance","customFitToBoundsOptions","undefined","maxZoom","mapPoints","useMemo","length","MapPoints","updateFeatures","useCallback","isMapReady","layer","initializeMapSource","updateMapSetup","fitToPoints","value","initialMapPositioning","padding","bottom","left","right","top","reInitializeMap","useEffect","React","FlexCol","alignItems","id","MapBox","MapSettingsBox","Alert","severity"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/react-map",
3
- "version": "7.5.6",
3
+ "version": "7.5.7",
4
4
  "description": "Common React library for all XYO projects that use React",
5
5
  "keywords": [
6
6
  "xyo",
@@ -49,8 +49,8 @@
49
49
  "@xylabs/react-shared": "~7.1.17",
50
50
  "@xylabs/react-theme": "~7.1.17",
51
51
  "@xylabs/sdk-js": "~5.0.90",
52
- "@xyo-network/react-archivist": "7.5.6",
53
- "@xyo-network/react-map-model": "7.5.6",
52
+ "@xyo-network/react-archivist": "7.5.7",
53
+ "@xyo-network/react-map-model": "7.5.7",
54
54
  "@xyo-network/sdk-geo": "~3.0.3",
55
55
  "geojson": "~0.5.0",
56
56
  "mapbox-gl": "~3.20.0"
@@ -61,6 +61,7 @@
61
61
  "@storybook/react-vite": "~10.3.3",
62
62
  "@types/geojson": "7946.0.16",
63
63
  "@types/react": "^19.2.14",
64
+ "@xylabs/ts-scripts-common": "~7.5.6",
64
65
  "@xylabs/ts-scripts-yarn3": "~7.5.6",
65
66
  "@xylabs/tsconfig": "~7.5.6",
66
67
  "@xylabs/tsconfig-dom": "~7.5.6",
@@ -1,8 +0,0 @@
1
- import type { Meta } from '@storybook/react-vite';
2
- declare const _default: Meta;
3
- export default _default;
4
- declare const Default: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./MapBox.tsx").MapBoxProps>;
5
- declare const WithContainerResize: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./MapBox.tsx").MapBoxProps>;
6
- declare const WithMapSettings: import("storybook/internal/csf").AnnotatedStoryFn<import("@storybook/react").ReactRenderer, import("./MapBox.tsx").MapBoxProps>;
7
- export { Default, WithContainerResize, WithMapSettings, };
8
- //# sourceMappingURL=MapBox.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MapBox.stories.d.ts","sourceRoot":"","sources":["../../../src/Components/MapBox.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACC,IAAI,EAChB,MAAM,uBAAuB,CAAA;wBAsCzB,IAAI;AANT,wBAMS;AAuCT,QAAA,MAAM,OAAO,iIAAoB,CAAA;AAGjC,QAAA,MAAM,mBAAmB,iIAAmC,CAAA;AAE5D,QAAA,MAAM,eAAe,iIAAoB,CAAA;AAGzC,OAAO,EACL,OAAO,EAAE,mBAAmB,EAAE,eAAe,GAC9C,CAAA"}