@macrostrat/column-views 3.2.2 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/index.cjs +15 -9
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +11 -5
  5. package/dist/maps/column-correlation/core.cjs +10 -30
  6. package/dist/maps/column-correlation/core.cjs.map +1 -1
  7. package/dist/maps/column-correlation/core.d.ts +1 -1
  8. package/dist/maps/column-correlation/core.js +10 -30
  9. package/dist/maps/column-correlation/core.js.map +1 -1
  10. package/dist/maps/column-navigation/mapbox/index.cjs +156 -118
  11. package/dist/maps/column-navigation/mapbox/index.cjs.map +1 -1
  12. package/dist/maps/column-navigation/mapbox/index.d.ts +23 -2
  13. package/dist/maps/column-navigation/mapbox/index.js +158 -120
  14. package/dist/maps/column-navigation/mapbox/index.js.map +1 -1
  15. package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs +7 -1
  16. package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs.map +1 -1
  17. package/dist/maps/column-navigation/mapbox/keyboard-navigation.d.ts +3 -26
  18. package/dist/maps/column-navigation/mapbox/keyboard-navigation.js +9 -3
  19. package/dist/maps/column-navigation/mapbox/keyboard-navigation.js.map +1 -1
  20. package/dist/maps/index.d.ts +2 -2
  21. package/dist/maps/{_shared/inset-map.cjs → inset-map/index.cjs} +1 -1
  22. package/dist/maps/inset-map/index.cjs.map +1 -0
  23. package/dist/maps/{_shared/inset-map.js → inset-map/index.js} +1 -1
  24. package/dist/maps/inset-map/index.js.map +1 -0
  25. package/dist/maps/layers/columns.cjs +161 -0
  26. package/dist/maps/layers/columns.cjs.map +1 -0
  27. package/dist/maps/layers/columns.d.ts +28 -0
  28. package/dist/maps/layers/columns.js +161 -0
  29. package/dist/maps/layers/columns.js.map +1 -0
  30. package/dist/maps/layers/index.d.ts +2 -0
  31. package/dist/maps/{units-overlay/index.cjs → layers/units.cjs} +41 -88
  32. package/dist/maps/layers/units.cjs.map +1 -0
  33. package/dist/maps/{units-overlay/index.d.ts → layers/units.d.ts} +1 -1
  34. package/dist/maps/{units-overlay/index.js → layers/units.js} +34 -82
  35. package/dist/maps/layers/units.js.map +1 -0
  36. package/dist/unit-details/age-range.cjs +86 -44
  37. package/dist/unit-details/age-range.cjs.map +1 -1
  38. package/dist/unit-details/age-range.d.ts +32 -5
  39. package/dist/unit-details/age-range.js +84 -44
  40. package/dist/unit-details/age-range.js.map +1 -1
  41. package/package.json +4 -4
  42. package/src/maps/column-correlation/core.ts +9 -29
  43. package/src/maps/column-navigation/mapbox/index.ts +191 -138
  44. package/src/maps/column-navigation/mapbox/keyboard-navigation.ts +17 -3
  45. package/src/maps/index.ts +2 -2
  46. package/src/maps/layers/columns.ts +210 -0
  47. package/src/maps/layers/index.ts +2 -0
  48. package/src/maps/{units-overlay/index.ts → layers/units.ts} +34 -84
  49. package/src/maps/unit-map.stories.ts +27 -12
  50. package/src/unit-details/age-range.ts +124 -47
  51. package/dist/maps/_shared/index.d.ts +0 -2
  52. package/dist/maps/_shared/inset-map.cjs.map +0 -1
  53. package/dist/maps/_shared/inset-map.js.map +0 -1
  54. package/dist/maps/_shared/styles.cjs +0 -73
  55. package/dist/maps/_shared/styles.cjs.map +0 -1
  56. package/dist/maps/_shared/styles.d.ts +0 -2
  57. package/dist/maps/_shared/styles.js +0 -73
  58. package/dist/maps/_shared/styles.js.map +0 -1
  59. package/dist/maps/units-overlay/index.cjs.map +0 -1
  60. package/dist/maps/units-overlay/index.js.map +0 -1
  61. package/src/maps/_shared/index.ts +0 -2
  62. package/src/maps/_shared/styles.ts +0 -76
  63. /package/dist/maps/{_shared/inset-map.d.ts → inset-map/index.d.ts} +0 -0
  64. /package/src/maps/{_shared/inset-map.ts → inset-map/index.ts} +0 -0
  65. /package/src/maps/{_shared → inset-map}/inset-map.stories.ts +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format
4
4
  is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
5
5
  project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.3.1] - 2026-03-31
8
+
9
+ - Remove a stray `console.log`
10
+ - Improve GBDB integration stories
11
+
12
+ ## [3.3.0] - 2026-02-13
13
+
14
+ - Greatly streamline handling of `InsetMap`, column and unit overlay layers
15
+ - Improve design of age range tags
16
+
7
17
  ## [3.2.2] - 2026-02-09
8
18
 
9
19
  - Move `AgeField` and `AgeRange` to separate exports
package/dist/index.cjs CHANGED
@@ -8,22 +8,23 @@ const ageModelOverlay = require("./age-model-overlay.cjs");
8
8
  const notes = require("./notes.cjs");
9
9
  const ageRange = require("./unit-details/age-range.cjs");
10
10
  const composite = require("./units/composite.cjs");
11
+ const columns = require("./maps/layers/columns.cjs");
11
12
  const base = require("./facets/measurements/base.cjs");
12
13
  const panel = require("./unit-details/panel.cjs");
13
14
  const layers = require("./maps/column-navigation/svg/layers.cjs");
14
15
  const core = require("./maps/column-correlation/core.cjs");
15
16
  const state = require("./maps/column-correlation/state.cjs");
16
- const columnNav = require("./data-provider/column-nav.cjs");
17
17
  const index$1 = require("./maps/column-navigation/mapbox/index.cjs");
18
+ const columnNav = require("./data-provider/column-nav.cjs");
18
19
  const index$2 = require("./maps/column-navigation/svg/index.cjs");
19
20
  const main = require("./correlation-chart/main.cjs");
20
21
  const index$3 = require("./facets/detrital-zircon/index.cjs");
21
22
  const provider = require("./facets/fossils/provider.cjs");
22
23
  const types = require("./prepare-units/types.cjs");
23
- const insetMap = require("./maps/_shared/inset-map.cjs");
24
+ const index$4 = require("./maps/inset-map/index.cjs");
24
25
  const isotopesColumn = require("./facets/carbon-isotopes/isotopes-column.cjs");
25
26
  const store = require("./data-provider/store.cjs");
26
- const index$4 = require("./maps/units-overlay/index.cjs");
27
+ const units = require("./maps/layers/units.cjs");
27
28
  const dataProvider = require("./facets/carbon-isotopes/data-provider.cjs");
28
29
  const utils = require("./prepare-units/utils.cjs");
29
30
  const index$5 = require("./facets/fossils/index.cjs");
@@ -32,7 +33,6 @@ const sgp = require("./facets/measurements/sgp.cjs");
32
33
  const modalPanel = require("./unit-details/modal-panel.cjs");
33
34
  const popover = require("./unit-details/popover.cjs");
34
35
  const unitSelection = require("./data-provider/unit-selection.cjs");
35
- const styles = require("./maps/_shared/styles.cjs");
36
36
  const colors = require("./units/colors.cjs");
37
37
  const hashString = require("./correlation-chart/hash-string.cjs");
38
38
  const helpers = require("./prepare-units/helpers.cjs");
@@ -59,6 +59,7 @@ exports.ComputedSurfacesOverlay = ageModelOverlay.ComputedSurfacesOverlay;
59
59
  exports.ColumnNotes = notes.ColumnNotes;
60
60
  exports.AgeField = ageRange.AgeField;
61
61
  exports.AgeLabel = ageRange.AgeLabel;
62
+ exports.AgeRange = ageRange.AgeRange;
62
63
  exports.Duration = ageRange.Duration;
63
64
  exports.IntervalProportions = ageRange.IntervalProportions;
64
65
  exports.getAge = ageRange.getAge;
@@ -70,6 +71,9 @@ exports.CompositeUnitsColumn = composite.CompositeUnitsColumn;
70
71
  exports.LabelTrackerProvider = composite.LabelTrackerProvider;
71
72
  exports.SectionLabelsColumn = composite.SectionLabelsColumn;
72
73
  exports.TrackedLabeledUnit = composite.TrackedLabeledUnit;
74
+ exports.BaseColumnsLayer = columns.BaseColumnsLayer;
75
+ exports.SelectedColumnOverlay = columns.SelectedColumnOverlay;
76
+ exports.buildColumnsStyle = columns.buildColumnsStyle;
73
77
  exports.BaseMeasurementsColumn = base.BaseMeasurementsColumn;
74
78
  exports.TruncatedList = base.TruncatedList;
75
79
  exports.groupNotesByPixelDistance = base.groupNotesByPixelDistance;
@@ -91,9 +95,12 @@ exports.MeasurementsLayer = layers.MeasurementsLayer;
91
95
  exports.ColumnCorrelationMap = core.ColumnCorrelationMap;
92
96
  exports.ColumnCorrelationProvider = state.ColumnCorrelationProvider;
93
97
  exports.useCorrelationMapStore = state.useCorrelationMapStore;
98
+ exports.ColumnHoverInteraction = index$1.ColumnHoverInteraction;
99
+ exports.ColumnNavigationMap = index$1.ColumnNavigationMap;
100
+ exports.ColumnSelectionManager = index$1.ColumnSelectionManager;
101
+ exports.ColumnsNavigationLayer = index$1.ColumnsNavigationLayer;
94
102
  exports.ColumnNavProvider = columnNav.ColumnNavProvider;
95
103
  exports.useColumnNav = columnNav.useColumnNav;
96
- exports.ColumnNavigationMap = index$1.ColumnNavigationMap;
97
104
  exports.ColumnNavigationSVGMap = index$2.ColumnNavigationSVGMap;
98
105
  exports.ResizableMapFrame = index$2.ResizableMapFrame;
99
106
  exports.CorrelationChart = main.CorrelationChart;
@@ -103,7 +110,7 @@ exports.FossilDataType = provider.FossilDataType;
103
110
  exports.useFossilData = provider.useFossilData;
104
111
  exports.HeightMethod = types.HeightMethod;
105
112
  exports.HybridScaleType = types.HybridScaleType;
106
- exports.InsetMap = insetMap.InsetMap;
113
+ exports.InsetMap = index$4.InsetMap;
107
114
  exports.IsotopesColumn = isotopesColumn.IsotopesColumn;
108
115
  exports.IsotopesDataset = isotopesColumn.IsotopesDataset;
109
116
  exports.LithologiesProvider = store.LithologiesProvider;
@@ -118,8 +125,8 @@ exports.useColumnUnitsMap = store.useColumnUnitsMap;
118
125
  exports.useCompositeScale = store.useCompositeScale;
119
126
  exports.useMacrostratColumnData = store.useMacrostratColumnData;
120
127
  exports.useMacrostratUnits = store.useMacrostratUnits;
121
- exports.MacrostratUnitsOverlay = index$4.MacrostratUnitsOverlay;
122
- exports.buildUnitsStyle = index$4.buildUnitsStyle;
128
+ exports.MacrostratUnitsOverlay = units.MacrostratUnitsOverlay;
129
+ exports.buildUnitsStyle = units.buildUnitsStyle;
123
130
  exports.MeasurementDataContext = dataProvider.MeasurementDataContext;
124
131
  exports.MeasurementDataProvider = dataProvider.MeasurementDataProvider;
125
132
  exports.useMeasurementData = dataProvider.useMeasurementData;
@@ -146,7 +153,6 @@ exports.useColumnRef = unitSelection.useColumnRef;
146
153
  exports.useSelectedUnit = unitSelection.useSelectedUnit;
147
154
  exports.useUnitSelectionDispatch = unitSelection.useUnitSelectionDispatch;
148
155
  exports.useUnitSelectionTarget = unitSelection.useUnitSelectionTarget;
149
- exports.buildColumnsStyle = styles.buildColumnsStyle;
150
156
  exports.flattenLithologies = colors.flattenLithologies;
151
157
  exports.getMixedColorForData = colors.getMixedColorForData;
152
158
  exports.getMixedUnitColor = colors.getMixedUnitColor;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -4,24 +4,25 @@ import { prepareColumnUnits, usePreparedColumnUnits } from "./prepare-units/inde
4
4
  import { Column, ColumnBasicInfo, ColumnContainer } from "./column.js";
5
5
  import { BoundaryAgeModelOverlay, ComputedSurfacesOverlay } from "./age-model-overlay.js";
6
6
  import { ColumnNotes } from "./notes.js";
7
- import { AgeField, AgeLabel, Duration, IntervalProportions, getAge, getAgeRange } from "./unit-details/age-range.js";
7
+ import { AgeField, AgeLabel, AgeRange, Duration, IntervalProportions, getAge, getAgeRange } from "./unit-details/age-range.js";
8
8
  import { AnnotatedUnitsColumn, ColumnNotesProvider, CompositeUnitComponent, CompositeUnitsColumn, LabelTrackerProvider, SectionLabelsColumn, TrackedLabeledUnit } from "./units/composite.js";
9
+ import { BaseColumnsLayer, SelectedColumnOverlay, buildColumnsStyle } from "./maps/layers/columns.js";
9
10
  import { BaseMeasurementsColumn, TruncatedList, groupNotesByPixelDistance, mergeHeightRanges, standardizeMeasurementHeight } from "./facets/measurements/base.js";
10
11
  import { ClickableText, Identifier, LegendPanelHeader, ReferencesField, ThicknessField, UnitDetailsFeature, UnitDetailsPanel } from "./unit-details/panel.js";
11
12
  import { ColumnCenters, ColumnFeatures, ColumnKeyboardNavigation, Columns, CurrentColumn, MeasurementsLayer } from "./maps/column-navigation/svg/layers.js";
12
13
  import { ColumnCorrelationMap } from "./maps/column-correlation/core.js";
13
14
  import { ColumnCorrelationProvider, useCorrelationMapStore } from "./maps/column-correlation/state.js";
15
+ import { ColumnHoverInteraction, ColumnNavigationMap, ColumnSelectionManager, ColumnsNavigationLayer } from "./maps/column-navigation/mapbox/index.js";
14
16
  import { ColumnNavProvider, useColumnNav } from "./data-provider/column-nav.js";
15
- import { ColumnNavigationMap } from "./maps/column-navigation/mapbox/index.js";
16
17
  import { ColumnNavigationSVGMap, ResizableMapFrame } from "./maps/column-navigation/svg/index.js";
17
18
  import { CorrelationChart } from "./correlation-chart/main.js";
18
19
  import { DetritalColumn, DetritalGroup } from "./facets/detrital-zircon/index.js";
19
20
  import { FossilDataType, useFossilData } from "./facets/fossils/provider.js";
20
21
  import { HeightMethod, HybridScaleType } from "./prepare-units/types.js";
21
- import { InsetMap } from "./maps/_shared/inset-map.js";
22
+ import { InsetMap } from "./maps/inset-map/index.js";
22
23
  import { IsotopesColumn, IsotopesDataset } from "./facets/carbon-isotopes/isotopes-column.js";
23
24
  import { LithologiesProvider, MacrostratColumnDataProvider, MacrostratColumnProvider, MacrostratColumnStateProvider, UnitSelectionProvider, columnUnitsAtom, columnUnitsMapAtom, scope, useColumnUnitsMap, useCompositeScale, useMacrostratColumnData, useMacrostratUnits } from "./data-provider/store.js";
24
- import { MacrostratUnitsOverlay, buildUnitsStyle } from "./maps/units-overlay/index.js";
25
+ import { MacrostratUnitsOverlay, buildUnitsStyle } from "./maps/layers/units.js";
25
26
  import { MeasurementDataContext, MeasurementDataProvider, useMeasurementData } from "./facets/carbon-isotopes/data-provider.js";
26
27
  import { MergeSectionsMode, agesOverlap, createUnitSorter, ensureArray, ensureRealFloat, getPositionWithinUnit, getUnitHeightRange, unitsOverlap } from "./prepare-units/utils.js";
27
28
  import { PBDBFossilsColumn } from "./facets/fossils/index.js";
@@ -30,7 +31,6 @@ import { SGPMeasurementsColumn } from "./facets/measurements/sgp.js";
30
31
  import { UnitDetailsPanelWithNavigation } from "./unit-details/modal-panel.js";
31
32
  import { UnitDetailsPopover, UnitSelectionPopover } from "./unit-details/popover.js";
32
33
  import { UnitKeyboardNavigation, UnitSelectionCallbackManager, allowUnitSelectionAtom, selectedUnitIDAtom, useAtomOverlayPosition, useColumnRef, useSelectedUnit, useUnitSelectionDispatch, useUnitSelectionTarget } from "./data-provider/unit-selection.js";
33
- import { buildColumnsStyle } from "./maps/_shared/styles.js";
34
34
  import { flattenLithologies, getMixedColorForData, getMixedUnitColor } from "./units/colors.js";
35
35
  import { parseLineFromString, stringifyLine } from "./correlation-chart/hash-string.js";
36
36
  import { preprocessUnits } from "./prepare-units/helpers.js";
@@ -38,8 +38,10 @@ export {
38
38
  AgeCursor,
39
39
  AgeField,
40
40
  AgeLabel,
41
+ AgeRange,
41
42
  AnnotatedUnitsColumn,
42
43
  ApproximateHeightAxis,
44
+ BaseColumnsLayer,
43
45
  BaseMeasurementsColumn,
44
46
  BasicUnitComponent,
45
47
  BoundaryAgeModelOverlay,
@@ -52,13 +54,16 @@ export {
52
54
  ColumnCorrelationMap,
53
55
  ColumnCorrelationProvider,
54
56
  ColumnFeatures,
57
+ ColumnHoverInteraction,
55
58
  ColumnKeyboardNavigation,
56
59
  ColumnNavProvider,
57
60
  ColumnNavigationMap,
58
61
  ColumnNavigationSVGMap,
59
62
  ColumnNotes,
60
63
  ColumnNotesProvider,
64
+ ColumnSelectionManager,
61
65
  Columns,
66
+ ColumnsNavigationLayer,
62
67
  CompositeAgeAxis,
63
68
  CompositeAgeAxisCore,
64
69
  CompositeUnitComponent,
@@ -95,6 +100,7 @@ export {
95
100
  ResizableMapFrame,
96
101
  SGPMeasurementsColumn,
97
102
  SectionLabelsColumn,
103
+ SelectedColumnOverlay,
98
104
  SimpleUnitsColumn,
99
105
  ThicknessField,
100
106
  TrackedLabeledUnit,
@@ -6,30 +6,22 @@ const h = require("@macrostrat/hyper");
6
6
  const React = require("react");
7
7
  const mapboxUtils = require("@macrostrat/mapbox-utils");
8
8
  const state = require("./state.cjs");
9
+ const index = require("../inset-map/index.cjs");
9
10
  const mapStyles = require("@macrostrat/map-styles");
10
- const styles = require("../_shared/styles.cjs");
11
- const insetMap = require("../_shared/inset-map.cjs");
11
+ const columns = require("../layers/columns.cjs");
12
12
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
13
13
  const h__default = /* @__PURE__ */ _interopDefault(h);
14
14
  function ColumnCorrelationMap(props) {
15
15
  const { padding = 50, children, columnColor, projectID, ...rest } = props;
16
- const overlayStyles = React.useMemo(() => {
17
- return [
18
- styles.buildColumnsStyle(columnColor),
19
- selectedColumnsStyle,
20
- lineOfSectionStyle
21
- ];
22
- }, [columnColor]);
23
16
  return h__default.default(
24
- insetMap.InsetMap,
17
+ index.InsetMap,
25
18
  {
26
19
  ...rest,
27
20
  boxZoom: false,
28
- dragRotate: false,
29
- overlayStyles
21
+ dragRotate: false
30
22
  },
31
23
  [
32
- h__default.default(ColumnsLayer),
24
+ h__default.default(ColumnsLayer, { color: columnColor }),
33
25
  h__default.default(SelectedColumnsLayer),
34
26
  h__default.default(MapClickHandler),
35
27
  h__default.default(SectionLine, { padding }),
@@ -48,6 +40,7 @@ function MapClickHandler() {
48
40
  return null;
49
41
  }
50
42
  function SelectedColumnsLayer() {
43
+ mapboxReact.useOverlayStyle(() => selectedColumnsStyle, []);
51
44
  const focusedColumns = state.useCorrelationMapStore(
52
45
  (state2) => state2.focusedColumns
53
46
  );
@@ -78,23 +71,9 @@ function SelectedColumnsLayer() {
78
71
  );
79
72
  return null;
80
73
  }
81
- function ColumnsLayer({ enabled = true }) {
82
- const columns = state.useCorrelationMapStore((state2) => state2.columns);
83
- mapboxReact.useMapStyleOperator(
84
- (map) => {
85
- if (columns == null) {
86
- return;
87
- }
88
- const data = {
89
- type: "FeatureCollection",
90
- features: columns
91
- };
92
- console.log(" columns", data);
93
- mapboxUtils.setGeoJSON(map, "columns", data);
94
- },
95
- [columns, enabled]
96
- );
97
- return null;
74
+ function ColumnsLayer({ enabled = true, color }) {
75
+ const columns$1 = state.useCorrelationMapStore((state2) => state2.columns);
76
+ return h__default.default(columns.BaseColumnsLayer, { enabled, color, columns: columns$1 });
98
77
  }
99
78
  const selectedColumnsStyle = {
100
79
  version: 8,
@@ -142,6 +121,7 @@ const lineOfSectionStyle = {
142
121
  layers: mapStyles.buildCrossSectionLayers()
143
122
  };
144
123
  function SectionLine({ padding }) {
124
+ mapboxReact.useOverlayStyle(() => lineOfSectionStyle, []);
145
125
  const focusedLine = state.useCorrelationMapStore((state2) => state2.focusedLine);
146
126
  mapboxReact.useMapStyleOperator(
147
127
  (map) => {
@@ -1 +1 @@
1
- {"version":3,"file":"core.cjs","sources":["../../../src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { buildColumnsStyle, InsetMap, InsetMapProps } from \"../_shared\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, projectID, ...rest } = props;\n\n const overlayStyles: Partial<Style>[] = useMemo(() => {\n return [\n buildColumnsStyle(columnColor) as Style,\n selectedColumnsStyle as Style,\n lineOfSectionStyle as Style,\n ];\n }, [columnColor]);\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n overlayStyles,\n },\n [\n h(ColumnsLayer),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n\n useMapStyleOperator(\n (map) => {\n if (columns == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: columns,\n };\n\n console.log(\" columns\", data);\n setGeoJSON(map, \"columns\", data);\n },\n [columns, enabled],\n );\n return null;\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":["useMemo","buildColumnsStyle","h","InsetMap","useCorrelationMapStore","state","useMapClickHandler","useMapStyleOperator","setGeoJSON","buildGeoJSONSource","buildCrossSectionLayers","bounds","LngLatBounds","useMapEaseTo"],"mappings":"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"}
1
+ {"version":3,"file":"core.cjs","sources":["../../../src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n useOverlayStyle,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { InsetMap, type InsetMapProps } from \"../inset-map\";\nimport { BaseColumnsLayer } from \"../layers\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, projectID, ...rest } = props;\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n },\n [\n h(ColumnsLayer, { color: columnColor }),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n useOverlayStyle(() => selectedColumnsStyle, []);\n\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true, color }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n return h(BaseColumnsLayer, { enabled, color, columns });\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n useOverlayStyle(() => lineOfSectionStyle, []);\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":["h","InsetMap","useCorrelationMapStore","state","useMapClickHandler","useOverlayStyle","useMapStyleOperator","setGeoJSON","columns","BaseColumnsLayer","buildGeoJSONSource","buildCrossSectionLayers","useMemo","bounds","LngLatBounds","useMapEaseTo"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { InsetMapProps } from '../_shared';
2
+ import { InsetMapProps } from '../inset-map';
3
3
  export interface CorrelationMapProps extends InsetMapProps {
4
4
  padding?: number;
5
5
  children?: ReactNode;
@@ -1,31 +1,23 @@
1
- import { useMapStyleOperator, useMapClickHandler, useMapEaseTo } from "@macrostrat/mapbox-react";
1
+ import { useOverlayStyle, useMapStyleOperator, useMapClickHandler, useMapEaseTo } from "@macrostrat/mapbox-react";
2
2
  import { LngLatBounds } from "mapbox-gl";
3
3
  import h from "@macrostrat/hyper";
4
4
  import { useMemo } from "react";
5
- import { buildGeoJSONSource, setGeoJSON } from "@macrostrat/mapbox-utils";
5
+ import { setGeoJSON, buildGeoJSONSource } from "@macrostrat/mapbox-utils";
6
6
  import { useCorrelationMapStore } from "./state.js";
7
+ import { InsetMap } from "../inset-map/index.js";
7
8
  import { buildCrossSectionLayers } from "@macrostrat/map-styles";
8
- import { buildColumnsStyle } from "../_shared/styles.js";
9
- import { InsetMap } from "../_shared/inset-map.js";
9
+ import { BaseColumnsLayer } from "../layers/columns.js";
10
10
  function ColumnCorrelationMap(props) {
11
11
  const { padding = 50, children, columnColor, projectID, ...rest } = props;
12
- const overlayStyles = useMemo(() => {
13
- return [
14
- buildColumnsStyle(columnColor),
15
- selectedColumnsStyle,
16
- lineOfSectionStyle
17
- ];
18
- }, [columnColor]);
19
12
  return h(
20
13
  InsetMap,
21
14
  {
22
15
  ...rest,
23
16
  boxZoom: false,
24
- dragRotate: false,
25
- overlayStyles
17
+ dragRotate: false
26
18
  },
27
19
  [
28
- h(ColumnsLayer),
20
+ h(ColumnsLayer, { color: columnColor }),
29
21
  h(SelectedColumnsLayer),
30
22
  h(MapClickHandler),
31
23
  h(SectionLine, { padding }),
@@ -44,6 +36,7 @@ function MapClickHandler() {
44
36
  return null;
45
37
  }
46
38
  function SelectedColumnsLayer() {
39
+ useOverlayStyle(() => selectedColumnsStyle, []);
47
40
  const focusedColumns = useCorrelationMapStore(
48
41
  (state) => state.focusedColumns
49
42
  );
@@ -74,23 +67,9 @@ function SelectedColumnsLayer() {
74
67
  );
75
68
  return null;
76
69
  }
77
- function ColumnsLayer({ enabled = true }) {
70
+ function ColumnsLayer({ enabled = true, color }) {
78
71
  const columns = useCorrelationMapStore((state) => state.columns);
79
- useMapStyleOperator(
80
- (map) => {
81
- if (columns == null) {
82
- return;
83
- }
84
- const data = {
85
- type: "FeatureCollection",
86
- features: columns
87
- };
88
- console.log(" columns", data);
89
- setGeoJSON(map, "columns", data);
90
- },
91
- [columns, enabled]
92
- );
93
- return null;
72
+ return h(BaseColumnsLayer, { enabled, color, columns });
94
73
  }
95
74
  const selectedColumnsStyle = {
96
75
  version: 8,
@@ -138,6 +117,7 @@ const lineOfSectionStyle = {
138
117
  layers: buildCrossSectionLayers()
139
118
  };
140
119
  function SectionLine({ padding }) {
120
+ useOverlayStyle(() => lineOfSectionStyle, []);
141
121
  const focusedLine = useCorrelationMapStore((state) => state.focusedLine);
142
122
  useMapStyleOperator(
143
123
  (map) => {
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../../../src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { buildColumnsStyle, InsetMap, InsetMapProps } from \"../_shared\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, projectID, ...rest } = props;\n\n const overlayStyles: Partial<Style>[] = useMemo(() => {\n return [\n buildColumnsStyle(columnColor) as Style,\n selectedColumnsStyle as Style,\n lineOfSectionStyle as Style,\n ];\n }, [columnColor]);\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n overlayStyles,\n },\n [\n h(ColumnsLayer),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n\n useMapStyleOperator(\n (map) => {\n if (columns == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: columns,\n };\n\n console.log(\" columns\", data);\n setGeoJSON(map, \"columns\", data);\n },\n [columns, enabled],\n );\n return null;\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":["bounds"],"mappings":"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"}
1
+ {"version":3,"file":"core.js","sources":["../../../src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n useOverlayStyle,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { InsetMap, type InsetMapProps } from \"../inset-map\";\nimport { BaseColumnsLayer } from \"../layers\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, projectID, ...rest } = props;\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n },\n [\n h(ColumnsLayer, { color: columnColor }),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n useOverlayStyle(() => selectedColumnsStyle, []);\n\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true, color }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n return h(BaseColumnsLayer, { enabled, color, columns });\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n useOverlayStyle(() => lineOfSectionStyle, []);\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":["bounds"],"mappings":";;;;;;;;;AAwBO,SAAS,qBAAqB,OAA4B;AAC/D,QAAM,EAAE,UAAU,IAAI,UAAU,aAAa,WAAW,GAAG,SAAS;AAEpE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,SAAS;AAAA,MACT,YAAY;AAAA,IAAA;AAAA,IAEd;AAAA,MACE,EAAE,cAAc,EAAE,OAAO,aAAa;AAAA,MACtC,EAAE,oBAAoB;AAAA,MACtB,EAAE,eAAe;AAAA,MACjB,EAAE,aAAa,EAAE,SAAS;AAAA,MAC1B;AAAA,IAAA;AAAA,EACF;AAEJ;AAEA,SAAS,kBAAkB;AACzB,QAAM,aAAa,uBAAuB,CAAC,UAAU,MAAM,UAAU;AAErE;AAAA,IACE,CAAC,MAAM;AACL,iBAAW,GAAG,EAAE,MAAM,SAAS,aAAa,EAAE,OAAO,QAAA,GAAW;AAAA,IAClE;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAGb,SAAO;AACT;AAEA,SAAS,uBAAuB;AAC9B,kBAAgB,MAAM,sBAAsB,EAAE;AAE9C,QAAM,iBAAiB;AAAA,IACrB,CAAC,UAAU,MAAM;AAAA,EAAA;AAGnB;AAAA,IACE,CAAC,QAAQ;AACP,UAAI,WAAW;AAEf,YAAM,OAA0B;AAAA,QAC9B,MAAM;AAAA,QACN;AAAA,MAAA;AAGF,YAAM,qBAA8B;AAAA,QAClC,MAAM;AAAA,QACN,UAAU;AAAA,UACR,MAAM;AAAA,UACN,aAAa,SAAS;AAAA,YACpB,CAAC,QAAQ,IAAI,WAAW,SAAS,SAAS;AAAA,UAAA;AAAA,QAC5C;AAAA,QAEF,YAAY,CAAA;AAAA,MAAC;AAGf,iBAAW,KAAK,oBAAoB,IAAI;AACxC,iBAAW,KAAK,6BAA6B;AAAA,QAC3C,MAAM;AAAA,QACN,UAAU,CAAC,kBAAkB;AAAA,MAAA,CAC9B;AAAA,IACH;AAAA,IACA,CAAC,cAAc;AAAA,EAAA;AAEjB,SAAO;AACT;AAEA,SAAS,aAAa,EAAE,UAAU,MAAM,SAAS;AAC/C,QAAM,UAAU,uBAAuB,CAAC,UAAU,MAAM,OAAO;AAC/D,SAAO,EAAE,kBAAkB,EAAE,SAAS,OAAO,SAAS;AACxD;AAEA,MAAM,uBAA8B;AAAA,EAClC,SAAS;AAAA,EACT,SAAS;AAAA,IACP,oBAAoB,mBAAA;AAAA,IACpB,6BAA6B,mBAAA;AAAA,EAAmB;AAAA,EAElD,QAAQ;AAAA,IACN;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,QACL,cAAc;AAAA,MAAA;AAAA,IAChB;AAAA,IAEF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,QACL,cAAc;AAAA,QACd,cAAc;AAAA,QACd,kBAAkB,CAAC,GAAG,CAAC;AAAA,MAAA;AAAA,IACzB;AAAA,IAEF;AAAA,MACE,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,MAAA;AAAA,IAClB;AAAA,EACF;AAEJ;AAEA,MAAM,qBAA4B;AAAA,EAChC,SAAS;AAAA,EACT,SAAS;AAAA,IACP,iBAAiB,mBAAA;AAAA,IACjB,kBAAkB,mBAAA;AAAA,IAClB,uBAAuB,mBAAA;AAAA,EAAmB;AAAA,EAE5C,QAAQ,wBAAA;AACV;AAEA,SAAS,YAAY,EAAE,WAAgC;AACrD,kBAAgB,MAAM,oBAAoB,EAAE;AAC5C,QAAM,cAAc,uBAAuB,CAAC,UAAU,MAAM,WAAW;AAGvE;AAAA,IACE,CAAC,QAAQ;AACP,UAAI,eAAe,MAAM;AACvB;AAAA,MACF;AACA,YAAM,OAA0B;AAAA,QAC9B,MAAM;AAAA,QACN,UAAU;AAAA,UACR;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,YAAY,EAAE,IAAI,cAAA;AAAA,UAAc;AAAA,QAClC;AAAA,MACF;AAGF,iBAAW,KAAK,oBAAoB,IAAI;AACxC,iBAAW,KAAK,yBAAyB;AAAA,QACvC,MAAM;AAAA,QACN,UAAU,YAAY,YAAY,IAAI,CAAC,WAAW;AAAA,UAChD,MAAM;AAAA,UACN,UAAU,EAAE,MAAM,SAAS,aAAa,MAAA;AAAA,UACxC,YAAY,CAAA;AAAA,QAAC,EACb;AAAA,MAAA,CACH;AAAA,IACH;AAAA,IACA,CAAC,WAAW;AAAA,EAAA;AAGd,QAAM,SAAS,QAAQ,MAAM;AAC3B,QAAI,eAAe,QAAQ,aAAa,YAAY,SAAS,GAAG;AAC9D,aAAO;AAAA,IACT;AACA,QAAIA,UAAS,IAAI,aAAA;AACjB,aAAS,SAAS,YAAY,aAAa;AACzCA,cAAO,OAAO,KAAK;AAAA,IACrB;AACA,WAAOA;AAAAA,EACT,GAAG,CAAC,WAAW,CAAC;AAEhB,eAAa,EAAE,QAAQ,SAAS,aAAa,MAAM;AAEnD,SAAO;AACT;"}