@macrostrat/column-views 3.2.1 → 3.3.0
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.
- package/CHANGELOG.md +10 -0
- package/dist/age-axis.cjs +2 -2
- package/dist/age-axis.cjs.map +1 -1
- package/dist/age-axis.js +1 -1
- package/dist/column-views.css +130 -125
- package/dist/index.cjs +30 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +16 -5
- package/dist/index.js.map +1 -1
- package/dist/maps/column-correlation/core.cjs +10 -30
- package/dist/maps/column-correlation/core.cjs.map +1 -1
- package/dist/maps/column-correlation/core.d.ts +1 -1
- package/dist/maps/column-correlation/core.js +10 -30
- package/dist/maps/column-correlation/core.js.map +1 -1
- package/dist/maps/column-navigation/mapbox/index.cjs +156 -118
- package/dist/maps/column-navigation/mapbox/index.cjs.map +1 -1
- package/dist/maps/column-navigation/mapbox/index.d.ts +23 -2
- package/dist/maps/column-navigation/mapbox/index.js +158 -120
- package/dist/maps/column-navigation/mapbox/index.js.map +1 -1
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs +7 -1
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs.map +1 -1
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.d.ts +3 -26
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.js +9 -3
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.js.map +1 -1
- package/dist/maps/index.d.ts +2 -2
- package/dist/maps/{_shared/inset-map.cjs → inset-map/index.cjs} +1 -1
- package/dist/maps/inset-map/index.cjs.map +1 -0
- package/dist/maps/{_shared/inset-map.js → inset-map/index.js} +1 -1
- package/dist/maps/inset-map/index.js.map +1 -0
- package/dist/maps/layers/columns.cjs +161 -0
- package/dist/maps/layers/columns.cjs.map +1 -0
- package/dist/maps/layers/columns.d.ts +28 -0
- package/dist/maps/layers/columns.js +161 -0
- package/dist/maps/layers/columns.js.map +1 -0
- package/dist/maps/layers/index.d.ts +2 -0
- package/dist/maps/{units-overlay/index.cjs → layers/units.cjs} +41 -88
- package/dist/maps/layers/units.cjs.map +1 -0
- package/dist/maps/{units-overlay/index.d.ts → layers/units.d.ts} +1 -1
- package/dist/maps/{units-overlay/index.js → layers/units.js} +34 -82
- package/dist/maps/layers/units.js.map +1 -0
- package/dist/section.cjs +2 -2
- package/dist/section.cjs.map +1 -1
- package/dist/section.js +1 -1
- package/dist/unit-details/age-range.cjs +196 -0
- package/dist/unit-details/age-range.cjs.map +1 -0
- package/dist/unit-details/age-range.d.ts +70 -0
- package/dist/unit-details/age-range.js +194 -0
- package/dist/unit-details/age-range.js.map +1 -0
- package/dist/unit-details/age-range.module.sass.cjs +16 -0
- package/dist/unit-details/age-range.module.sass.cjs.map +1 -0
- package/dist/unit-details/age-range.module.sass.js +14 -0
- package/dist/unit-details/age-range.module.sass.js.map +1 -0
- package/dist/unit-details/index.d.ts +1 -0
- package/dist/unit-details/panel.cjs +8 -173
- package/dist/unit-details/panel.cjs.map +1 -1
- package/dist/unit-details/panel.js +3 -168
- package/dist/unit-details/panel.js.map +1 -1
- package/dist/unit-details/panel.module.sass.cjs +20 -22
- package/dist/unit-details/panel.module.sass.cjs.map +1 -1
- package/dist/unit-details/panel.module.sass.js +20 -22
- package/dist/unit-details/panel.module.sass.js.map +1 -1
- package/dist/unit-details/utils.cjs +31 -0
- package/dist/unit-details/utils.cjs.map +1 -0
- package/dist/unit-details/utils.d.ts +3 -0
- package/dist/unit-details/utils.js +31 -0
- package/dist/unit-details/utils.js.map +1 -0
- package/package.json +4 -4
- package/src/maps/column-correlation/core.ts +9 -29
- package/src/maps/column-navigation/mapbox/index.ts +191 -138
- package/src/maps/column-navigation/mapbox/keyboard-navigation.ts +17 -3
- package/src/maps/index.ts +2 -2
- package/src/maps/layers/columns.ts +210 -0
- package/src/maps/layers/index.ts +2 -0
- package/src/maps/{units-overlay/index.ts → layers/units.ts} +34 -84
- package/src/maps/unit-map.stories.ts +27 -12
- package/src/unit-details/age-range.module.sass +15 -0
- package/src/unit-details/age-range.ts +269 -0
- package/src/unit-details/index.ts +1 -0
- package/src/unit-details/panel.module.sass +0 -9
- package/src/unit-details/panel.ts +12 -226
- package/src/unit-details/utils.ts +33 -0
- package/dist/maps/_shared/index.d.ts +0 -2
- package/dist/maps/_shared/inset-map.cjs.map +0 -1
- package/dist/maps/_shared/inset-map.js.map +0 -1
- package/dist/maps/_shared/styles.cjs +0 -73
- package/dist/maps/_shared/styles.cjs.map +0 -1
- package/dist/maps/_shared/styles.d.ts +0 -2
- package/dist/maps/_shared/styles.js +0 -73
- package/dist/maps/_shared/styles.js.map +0 -1
- package/dist/maps/units-overlay/index.cjs.map +0 -1
- package/dist/maps/units-overlay/index.js.map +0 -1
- package/src/maps/_shared/index.ts +0 -2
- package/src/maps/_shared/styles.ts +0 -76
- /package/dist/maps/{_shared/inset-map.d.ts → inset-map/index.d.ts} +0 -0
- /package/src/maps/{_shared/inset-map.ts → inset-map/index.ts} +0 -0
- /package/src/maps/{_shared → inset-map}/inset-map.stories.ts +0 -0
|
@@ -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 {
|
|
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,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 {
|
|
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 {
|
|
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
|
-
|
|
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 {
|
|
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":"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"}
|
|
@@ -3,175 +3,213 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const mapboxReact = require("@macrostrat/mapbox-react");
|
|
4
4
|
const h = require("@macrostrat/hyper");
|
|
5
5
|
const React = require("react");
|
|
6
|
-
const mapboxUtils = require("@macrostrat/mapbox-utils");
|
|
7
6
|
const state = require("./state.cjs");
|
|
7
|
+
const index = require("../../inset-map/index.cjs");
|
|
8
8
|
const d3Geo = require("d3-geo");
|
|
9
9
|
const keyboardNavigation = require("./keyboard-navigation.cjs");
|
|
10
|
-
const
|
|
11
|
-
const insetMap = require("../../_shared/inset-map.cjs");
|
|
10
|
+
const columns = require("../../layers/columns.cjs");
|
|
12
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
13
12
|
const h__default = /* @__PURE__ */ _interopDefault(h);
|
|
14
13
|
function ColumnNavigationMap(props) {
|
|
15
14
|
const {
|
|
16
|
-
|
|
15
|
+
padding = 50,
|
|
16
|
+
children,
|
|
17
|
+
columnColor,
|
|
18
|
+
showTriangulation,
|
|
19
|
+
triangulationColor,
|
|
20
|
+
keyboardNavigation: keyboardNavigation2 = true,
|
|
21
|
+
columns: columns2,
|
|
17
22
|
columnIDs,
|
|
18
23
|
onSelectColumn,
|
|
19
24
|
onHoverColumn,
|
|
20
25
|
selectedColumn,
|
|
21
26
|
hoveredColumn,
|
|
22
27
|
projectID,
|
|
23
|
-
children,
|
|
24
28
|
inProcess,
|
|
25
29
|
...rest
|
|
26
30
|
} = props;
|
|
27
31
|
return h__default.default(
|
|
28
|
-
|
|
32
|
+
index.InsetMap,
|
|
29
33
|
{
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
onHoverColumn,
|
|
34
|
-
selectedColumn,
|
|
35
|
-
hoveredColumn,
|
|
36
|
-
projectID,
|
|
37
|
-
inProcess
|
|
34
|
+
...rest,
|
|
35
|
+
boxZoom: false,
|
|
36
|
+
dragRotate: false
|
|
38
37
|
},
|
|
39
|
-
|
|
38
|
+
[
|
|
39
|
+
h__default.default(ColumnsNavigationLayer, {
|
|
40
|
+
color: columnColor,
|
|
41
|
+
columns: columns2,
|
|
42
|
+
columnIDs,
|
|
43
|
+
onSelectColumn,
|
|
44
|
+
onHoverColumn,
|
|
45
|
+
selectedColumn,
|
|
46
|
+
hoveredColumn,
|
|
47
|
+
projectID,
|
|
48
|
+
inProcess,
|
|
49
|
+
keyboardNavigation: keyboardNavigation2,
|
|
50
|
+
showTriangulation,
|
|
51
|
+
triangulationColor
|
|
52
|
+
}),
|
|
53
|
+
children
|
|
54
|
+
]
|
|
40
55
|
);
|
|
41
56
|
}
|
|
42
|
-
function
|
|
57
|
+
function ColumnsNavigationLayer(props) {
|
|
43
58
|
const {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
59
|
+
enabled,
|
|
60
|
+
color,
|
|
61
|
+
keyboardNavigation: keyboardNavigation$1,
|
|
47
62
|
showTriangulation,
|
|
48
63
|
triangulationColor,
|
|
49
|
-
|
|
50
|
-
...rest
|
|
64
|
+
...providerProps
|
|
51
65
|
} = props;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
if
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return h__default.default(
|
|
60
|
-
insetMap.InsetMap,
|
|
61
|
-
{
|
|
62
|
-
...rest,
|
|
63
|
-
boxZoom: false,
|
|
64
|
-
dragRotate: false,
|
|
65
|
-
overlayStyles
|
|
66
|
-
},
|
|
67
|
-
[
|
|
68
|
-
h__default.default(ColumnsLayer),
|
|
69
|
-
children,
|
|
70
|
-
h__default.default.if(keyboardNavigation$1)(keyboardNavigation.ColumnKeyboardNavigation, { showTriangulation })
|
|
71
|
-
]
|
|
72
|
-
);
|
|
66
|
+
return h__default.default(state.ColumnNavigationProvider, providerProps, [
|
|
67
|
+
h__default.default(_ColumnsNavigationLayer, { enabled, color }),
|
|
68
|
+
h__default.default.if(keyboardNavigation$1)(keyboardNavigation.ColumnKeyboardNavigation, {
|
|
69
|
+
showTriangulation,
|
|
70
|
+
triangulationColor
|
|
71
|
+
})
|
|
72
|
+
]);
|
|
73
73
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const
|
|
74
|
+
const columnLayers = ["columns-points", "columns-fill"];
|
|
75
|
+
function _ColumnsNavigationLayer({ enabled = true, color }) {
|
|
76
|
+
const columns$1 = state.useColumnNavigationStore((state2) => state2.columns);
|
|
77
|
+
const selectedColumnID = state.useColumnNavigationStore(
|
|
77
78
|
(state2) => state2.selectedColumn
|
|
78
79
|
);
|
|
79
|
-
const hoveredColumn = state.useColumnNavigationStore(
|
|
80
|
-
(state2) => state2.hoveredColumn
|
|
81
|
-
);
|
|
82
80
|
const selectColumn = state.useColumnNavigationStore((state2) => state2.selectColumn);
|
|
83
81
|
const setHoveredColumn = state.useColumnNavigationStore(
|
|
84
82
|
(state2) => state2.setHoveredColumn
|
|
85
83
|
);
|
|
84
|
+
const onHover = React.useCallback(
|
|
85
|
+
(event) => setHoveredColumn(event.features?.[0]?.id),
|
|
86
|
+
[setHoveredColumn]
|
|
87
|
+
);
|
|
88
|
+
const onSelectColumn = React.useCallback(
|
|
89
|
+
(column) => selectColumn(column.id),
|
|
90
|
+
[selectColumn]
|
|
91
|
+
);
|
|
92
|
+
const selectedColumnFeature = React.useMemo(() => {
|
|
93
|
+
if (columns$1 == null || selectedColumnID == null) return null;
|
|
94
|
+
return columns$1.find((d) => d.id == selectedColumnID);
|
|
95
|
+
}, [selectedColumnID, columns$1]);
|
|
96
|
+
return h__default.default([
|
|
97
|
+
h__default.default(columns.BaseColumnsLayer, { enabled, color, columns: columns$1 }),
|
|
98
|
+
h__default.default(ColumnSelectionManager, {
|
|
99
|
+
selectedColumn: selectedColumnFeature,
|
|
100
|
+
onSelectColumn
|
|
101
|
+
}),
|
|
102
|
+
h__default.default(ColumnHoverInteraction, { onHover })
|
|
103
|
+
]);
|
|
104
|
+
}
|
|
105
|
+
function ColumnSelectionManager({
|
|
106
|
+
selectedColumn,
|
|
107
|
+
onSelectColumn,
|
|
108
|
+
centerOnSelect = true
|
|
109
|
+
}) {
|
|
110
|
+
const onClick = React.useCallback(
|
|
111
|
+
(event) => {
|
|
112
|
+
if (event.features.length == 0) return;
|
|
113
|
+
const selectedColumn2 = event.features[0];
|
|
114
|
+
onSelectColumn(selectedColumn2);
|
|
115
|
+
},
|
|
116
|
+
[onSelectColumn]
|
|
117
|
+
);
|
|
118
|
+
return h__default.default([
|
|
119
|
+
h__default.default.if(centerOnSelect)(SelectedColumnCenterer, {
|
|
120
|
+
selectedColumn
|
|
121
|
+
}),
|
|
122
|
+
h__default.default(columns.SelectedColumnOverlay, { selectedColumn }),
|
|
123
|
+
h__default.default(ClickInteraction, {
|
|
124
|
+
onClick,
|
|
125
|
+
layers: columnLayers
|
|
126
|
+
})
|
|
127
|
+
]);
|
|
128
|
+
}
|
|
129
|
+
function ColumnHoverInteraction({ onHover }) {
|
|
130
|
+
return h__default.default(HoverInteraction, { onHover, layers: columnLayers });
|
|
131
|
+
}
|
|
132
|
+
function ClickInteraction({ onClick, layers }) {
|
|
86
133
|
mapboxReact.useMapStyleOperator(
|
|
87
134
|
(map) => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const data = {
|
|
92
|
-
type: "FeatureCollection",
|
|
93
|
-
features: columns
|
|
135
|
+
map.on("click", layers, onClick);
|
|
136
|
+
return () => {
|
|
137
|
+
map.off("click", layers, onClick);
|
|
94
138
|
};
|
|
95
|
-
|
|
139
|
+
},
|
|
140
|
+
[layers, onClick]
|
|
141
|
+
);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
function HoverInteraction({ onHover, layers }) {
|
|
145
|
+
const hoveredFeaturesRef = React.useRef([]);
|
|
146
|
+
const updateFeatureState = React.useCallback((map, features) => {
|
|
147
|
+
for (const f of hoveredFeaturesRef.current) {
|
|
148
|
+
map.setFeatureState(
|
|
149
|
+
{ source: f.source, id: f.id, sourceLayer: f.sourceLayer },
|
|
150
|
+
{ hover: false }
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
for (const f of features) {
|
|
154
|
+
map.setFeatureState(
|
|
155
|
+
{ source: f.source, id: f.id, sourceLayer: f.sourceLayer },
|
|
156
|
+
{ hover: true }
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
hoveredFeaturesRef.current = features;
|
|
160
|
+
}, []);
|
|
161
|
+
mapboxReact.useMapStyleOperator(
|
|
162
|
+
(map) => {
|
|
96
163
|
const mouseMove = (event) => {
|
|
97
164
|
if (event.features.length == 0) return;
|
|
98
|
-
|
|
99
|
-
|
|
165
|
+
onHover?.(event);
|
|
166
|
+
updateFeatureState(map, event.features);
|
|
100
167
|
map.getCanvas().style.cursor = "pointer";
|
|
101
168
|
};
|
|
102
|
-
const mouseLeave = () => {
|
|
103
|
-
|
|
169
|
+
const mouseLeave = (event) => {
|
|
170
|
+
onHover?.(event);
|
|
171
|
+
updateFeatureState(map, event.features ?? []);
|
|
104
172
|
map.getCanvas().style.cursor = "";
|
|
105
173
|
};
|
|
106
|
-
const clickHandler = (event) => {
|
|
107
|
-
if (event.features.length == 0) return;
|
|
108
|
-
const selectedColumn2 = event.features[0];
|
|
109
|
-
const id = selectedColumn2.id;
|
|
110
|
-
selectColumn(id);
|
|
111
|
-
};
|
|
112
|
-
const layers = ["columns-points", "columns-fill"];
|
|
113
174
|
map.on("mousemove", layers, mouseMove);
|
|
114
175
|
map.on("mouseleave", layers, mouseLeave);
|
|
115
|
-
map.on("click", layers, clickHandler);
|
|
116
176
|
return () => {
|
|
117
177
|
map.off("mouseenter", layers, mouseMove);
|
|
118
178
|
map.off("mouseleave", layers, mouseLeave);
|
|
119
|
-
map.off("click", layers, clickHandler);
|
|
120
179
|
};
|
|
121
180
|
},
|
|
122
|
-
[
|
|
181
|
+
[layers, onHover]
|
|
123
182
|
);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
{ source: "columns", id: hoveredColumn },
|
|
138
|
-
{ hover: true }
|
|
139
|
-
);
|
|
140
|
-
},
|
|
141
|
-
[hoveredColumn, columns]
|
|
142
|
-
);
|
|
143
|
-
const selectedColumnRef = React.useRef(null);
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
function SelectedColumnCenterer({
|
|
186
|
+
selectedColumn,
|
|
187
|
+
easeDuration = 500
|
|
188
|
+
}) {
|
|
189
|
+
const columnCenter = React.useMemo(() => {
|
|
190
|
+
const columnGeometry = selectedColumn?.geometry;
|
|
191
|
+
if (columnGeometry == null) return null;
|
|
192
|
+
return d3Geo.geoCentroid(columnGeometry);
|
|
193
|
+
}, [selectedColumn]);
|
|
194
|
+
const mapRef = mapboxReact.useMapRef();
|
|
195
|
+
const map = mapRef.current;
|
|
144
196
|
const initialRenderRef = React.useRef(true);
|
|
145
|
-
|
|
146
|
-
(map)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
map.setFeatureState(
|
|
158
|
-
{ source: "columns", id: selectedColumn },
|
|
159
|
-
{ selected: true }
|
|
160
|
-
);
|
|
161
|
-
const columnGeometry = columns.find(
|
|
162
|
-
(d) => d.id == selectedColumn
|
|
163
|
-
)?.geometry;
|
|
164
|
-
if (columnGeometry == null) return;
|
|
165
|
-
const center = d3Geo.geoCentroid(columnGeometry);
|
|
166
|
-
const isInitialRender = initialRenderRef.current;
|
|
167
|
-
map.easeTo({ center }, { duration: isInitialRender ? 0 : 500 });
|
|
168
|
-
if (isInitialRender) {
|
|
169
|
-
initialRenderRef.current = false;
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
[selectedColumn, columns]
|
|
173
|
-
);
|
|
197
|
+
React.useEffect(() => {
|
|
198
|
+
if (map == null) return;
|
|
199
|
+
const isInitialRender = initialRenderRef.current;
|
|
200
|
+
if (isInitialRender) initialRenderRef.current = false;
|
|
201
|
+
if (columnCenter == null) return;
|
|
202
|
+
if (isInitialRender) {
|
|
203
|
+
map.setCenter(columnCenter);
|
|
204
|
+
initialRenderRef.current = false;
|
|
205
|
+
} else {
|
|
206
|
+
map.easeTo({ center: columnCenter }, { duration: easeDuration });
|
|
207
|
+
}
|
|
208
|
+
}, [mapRef.current, columnCenter]);
|
|
174
209
|
return null;
|
|
175
210
|
}
|
|
211
|
+
exports.ColumnHoverInteraction = ColumnHoverInteraction;
|
|
176
212
|
exports.ColumnNavigationMap = ColumnNavigationMap;
|
|
213
|
+
exports.ColumnSelectionManager = ColumnSelectionManager;
|
|
214
|
+
exports.ColumnsNavigationLayer = ColumnsNavigationLayer;
|
|
177
215
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/maps/column-navigation/mapbox/index.ts"],"sourcesContent":["import { useMapStyleOperator } from \"@macrostrat/mapbox-react\";\nimport h from \"@macrostrat/hyper\";\nimport { FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo, useRef } from \"react\";\nimport { buildColumnsStyle, InsetMapProps } from \"../../_shared\";\nimport { setGeoJSON } from \"@macrostrat/mapbox-utils\";\n\nimport {\n ColumnNavigationProvider,\n NavigationProviderProps,\n useColumnNavigationStore,\n} from \"./state\";\nimport { InsetMap } from \"../../_shared\";\nimport { geoCentroid } from \"d3-geo\";\nimport {\n ColumnKeyboardNavigation,\n buildKeyboardNavigationStyle,\n} from \"./keyboard-navigation\";\n\nexport interface ColumnNavigationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n selectedColumn?: number;\n hoveredColumn?: number;\n onSelectColumn?: (colID: number | null) => void;\n onHoverColumn?: (colID: number | null) => void;\n showTriangulation?: boolean;\n columnColor?: string;\n triangulationColor?: string;\n keyboardNavigation?: boolean;\n}\n\nexport function ColumnNavigationMap(\n props: ColumnNavigationMapProps & NavigationProviderProps,\n) {\n const {\n columns,\n columnIDs,\n onSelectColumn,\n onHoverColumn,\n selectedColumn,\n hoveredColumn,\n projectID,\n children,\n inProcess,\n ...rest\n } = props;\n\n return h(\n ColumnNavigationProvider,\n {\n columns,\n columnIDs,\n onSelectColumn,\n onHoverColumn,\n selectedColumn,\n hoveredColumn,\n projectID,\n inProcess,\n },\n h(_ColumnNavigationMap, props),\n );\n}\n\nfunction _ColumnNavigationMap(props: ColumnNavigationMapProps) {\n const {\n padding = 50,\n children,\n columnColor,\n showTriangulation,\n triangulationColor,\n keyboardNavigation = true,\n ...rest\n } = props;\n\n const overlayStyles = useMemo(() => {\n let styles: any[] = [buildColumnsStyle(columnColor)];\n if (showTriangulation) {\n styles.push(buildKeyboardNavigationStyle(triangulationColor));\n }\n return styles;\n }, [columnColor, showTriangulation, triangulationColor]);\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n overlayStyles,\n },\n [\n h(ColumnsLayer),\n children,\n h.if(keyboardNavigation)(ColumnKeyboardNavigation, { showTriangulation }),\n ],\n );\n}\n\nfunction ColumnsLayer({ enabled = true }) {\n const columns = useColumnNavigationStore((state) => state.columns);\n const selectedColumn = useColumnNavigationStore(\n (state) => state.selectedColumn,\n );\n const hoveredColumn = useColumnNavigationStore(\n (state) => state.hoveredColumn,\n );\n const selectColumn = useColumnNavigationStore((state) => state.selectColumn);\n const setHoveredColumn = useColumnNavigationStore(\n (state) => state.setHoveredColumn,\n );\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 setGeoJSON(map, \"columns\", data);\n\n const mouseMove = (event) => {\n if (event.features.length == 0) return;\n const hoveredFeature = event.features[0];\n setHoveredColumn(hoveredFeature.id);\n map.getCanvas().style.cursor = \"pointer\";\n };\n const mouseLeave = () => {\n setHoveredColumn(null);\n map.getCanvas().style.cursor = \"\";\n };\n\n const clickHandler = (event) => {\n if (event.features.length == 0) return;\n const selectedColumn = event.features[0];\n const id = selectedColumn.id;\n selectColumn(id);\n };\n\n // Setup hover styles on map\n const layers = [\"columns-points\", \"columns-fill\"];\n map.on(\"mousemove\", layers, mouseMove);\n map.on(\"mouseleave\", layers, mouseLeave);\n map.on(\"click\", layers, clickHandler);\n\n return () => {\n map.off(\"mouseenter\", layers, mouseMove);\n map.off(\"mouseleave\", layers, mouseLeave);\n map.off(\"click\", layers, clickHandler);\n };\n },\n [columns, enabled],\n );\n\n const hoveredColumnRef = useRef(null);\n useMapStyleOperator(\n (map) => {\n const prevHoveredColumn = hoveredColumnRef.current;\n if (hoveredColumn == prevHoveredColumn) return;\n if (prevHoveredColumn != null) {\n // Deselect previous column\n map.setFeatureState(\n { source: \"columns\", id: prevHoveredColumn },\n { hover: false },\n );\n }\n hoveredColumnRef.current = hoveredColumn;\n // Select the current column\n map.setFeatureState(\n { source: \"columns\", id: hoveredColumn },\n { hover: true },\n );\n },\n [hoveredColumn, columns],\n );\n\n /** Set feature state for selected columns */\n const selectedColumnRef = useRef(null);\n const initialRenderRef = useRef(true);\n useMapStyleOperator(\n (map) => {\n if (columns == null) return;\n const prevSelectedColumn = selectedColumnRef.current;\n if (selectedColumn == prevSelectedColumn) return;\n if (prevSelectedColumn != null) {\n // Deselect previous column\n map.setFeatureState(\n { source: \"columns\", id: prevSelectedColumn },\n { selected: false },\n );\n }\n\n selectedColumnRef.current = selectedColumn;\n\n // Select the current column\n map.setFeatureState(\n { source: \"columns\", id: selectedColumn },\n { selected: true },\n );\n\n // Center the selected column\n const columnGeometry = columns.find(\n (d) => d.id == selectedColumn,\n )?.geometry;\n if (columnGeometry == null) return;\n const center = geoCentroid(columnGeometry);\n\n const isInitialRender = initialRenderRef.current;\n\n map.easeTo({ center }, { duration: isInitialRender ? 0 : 500 });\n if (isInitialRender) {\n initialRenderRef.current = false;\n }\n },\n [selectedColumn, columns],\n );\n\n return null;\n}\n"],"names":["h","ColumnNavigationProvider","keyboardNavigation","useMemo","styles","buildColumnsStyle","buildKeyboardNavigationStyle","InsetMap","ColumnKeyboardNavigation","useColumnNavigationStore","state","useMapStyleOperator","setGeoJSON","selectedColumn","useRef","geoCentroid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/maps/column-navigation/mapbox/index.ts"],"sourcesContent":["import { useMapRef, useMapStyleOperator } from \"@macrostrat/mapbox-react\";\nimport h from \"@macrostrat/hyper\";\nimport { ReactNode, useCallback, useEffect, useMemo, useRef } from \"react\";\n\nimport {\n ColumnNavigationProvider,\n NavigationProviderProps,\n useColumnNavigationStore,\n} from \"./state\";\nimport { InsetMap, type InsetMapProps } from \"../../inset-map\";\nimport { geoCentroid } from \"d3-geo\";\nimport { BaseColumnsLayer, SelectedColumnOverlay } from \"../../layers\";\nimport { ColumnKeyboardNavigation } from \"./keyboard-navigation\";\nimport type { ColumnFeature } from \"../../layers\";\n\nexport interface ColumnNavigationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n selectedColumn?: number;\n hoveredColumn?: number;\n onSelectColumn?: (colID: number | null) => void;\n onHoverColumn?: (colID: number | null) => void;\n showTriangulation?: boolean;\n columnColor?: string;\n}\n\nexport function ColumnNavigationMap(\n props: ColumnNavigationMapProps & NavigationProviderProps,\n) {\n const {\n padding = 50,\n children,\n columnColor,\n showTriangulation,\n triangulationColor,\n keyboardNavigation = true,\n columns,\n columnIDs,\n onSelectColumn,\n onHoverColumn,\n selectedColumn,\n hoveredColumn,\n projectID,\n inProcess,\n ...rest\n } = props;\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n },\n [\n h(ColumnsNavigationLayer, {\n color: columnColor,\n columns,\n columnIDs,\n onSelectColumn,\n onHoverColumn,\n selectedColumn,\n hoveredColumn,\n projectID,\n inProcess,\n keyboardNavigation,\n showTriangulation,\n triangulationColor,\n }),\n children,\n ],\n );\n}\n\ninterface ColumnLayerProps {\n enabled?: boolean;\n color?: string;\n}\n\ninterface ColumnKeyboardNavigationProps {\n triangulationColor?: string;\n keyboardNavigation?: boolean;\n showTriangulation?: boolean;\n}\n\nexport function ColumnsNavigationLayer(\n props: NavigationProviderProps &\n ColumnLayerProps &\n ColumnKeyboardNavigationProps,\n) {\n const {\n enabled,\n color,\n keyboardNavigation,\n showTriangulation,\n triangulationColor,\n ...providerProps\n } = props;\n\n return h(ColumnNavigationProvider, providerProps, [\n h(_ColumnsNavigationLayer, { enabled, color }),\n h.if(keyboardNavigation)(ColumnKeyboardNavigation, {\n showTriangulation,\n triangulationColor,\n }),\n ]);\n}\n\nconst columnLayers = [\"columns-points\", \"columns-fill\"];\n\nfunction _ColumnsNavigationLayer({ enabled = true, color }) {\n const columns = useColumnNavigationStore((state) => state.columns);\n const selectedColumnID = useColumnNavigationStore(\n (state) => state.selectedColumn,\n );\n const selectColumn = useColumnNavigationStore((state) => state.selectColumn);\n const setHoveredColumn = useColumnNavigationStore(\n (state) => state.setHoveredColumn,\n );\n\n const onHover = useCallback(\n (event) => setHoveredColumn(event.features?.[0]?.id),\n [setHoveredColumn],\n );\n\n /** Convert features into column IDs to pass to the selection manager */\n const onSelectColumn = useCallback(\n (column) => selectColumn(column.id),\n [selectColumn],\n );\n\n const selectedColumnFeature = useMemo(() => {\n if (columns == null || selectedColumnID == null) return null;\n return columns.find((d) => d.id == selectedColumnID);\n }, [selectedColumnID, columns]);\n\n return h([\n h(BaseColumnsLayer, { enabled, color, columns }),\n h(ColumnSelectionManager, {\n selectedColumn: selectedColumnFeature,\n onSelectColumn,\n }),\n h(ColumnHoverInteraction, { onHover }),\n ]);\n}\n\nexport function ColumnSelectionManager({\n selectedColumn,\n onSelectColumn,\n centerOnSelect = true,\n}: {\n selectedColumn: ColumnFeature;\n onSelectColumn: (column: ColumnFeature) => void;\n centerOnSelect?: boolean;\n}) {\n const onClick = useCallback(\n (event) => {\n if (event.features.length == 0) return;\n const selectedColumn = event.features[0];\n onSelectColumn(selectedColumn);\n },\n [onSelectColumn],\n );\n\n return h([\n h.if(centerOnSelect)(SelectedColumnCenterer, {\n selectedColumn,\n }),\n h(SelectedColumnOverlay, { selectedColumn }),\n h(ClickInteraction, {\n onClick,\n layers: columnLayers,\n }),\n ]);\n}\n\nexport function ColumnHoverInteraction({ onHover }) {\n return h(HoverInteraction, { onHover, layers: columnLayers });\n}\n\nfunction ClickInteraction({ onClick, layers }) {\n useMapStyleOperator(\n (map) => {\n // Setup hover styles on map\n map.on(\"click\", layers, onClick);\n return () => {\n map.off(\"click\", layers, onClick);\n };\n },\n [layers, onClick],\n );\n return null;\n}\n\nfunction HoverInteraction({ onHover, layers }) {\n const hoveredFeaturesRef = useRef([]);\n const updateFeatureState = useCallback((map, features) => {\n // Reset hover state for previously hovered features\n for (const f of hoveredFeaturesRef.current) {\n map.setFeatureState(\n { source: f.source, id: f.id, sourceLayer: f.sourceLayer },\n { hover: false },\n );\n }\n // Set hover state for new features\n for (const f of features) {\n map.setFeatureState(\n { source: f.source, id: f.id, sourceLayer: f.sourceLayer },\n { hover: true },\n );\n }\n hoveredFeaturesRef.current = features;\n }, []);\n\n useMapStyleOperator(\n (map) => {\n const mouseMove = (event) => {\n if (event.features.length == 0) return;\n onHover?.(event);\n updateFeatureState(map, event.features);\n map.getCanvas().style.cursor = \"pointer\";\n };\n const mouseLeave = (event) => {\n onHover?.(event);\n updateFeatureState(map, event.features ?? []);\n map.getCanvas().style.cursor = \"\";\n };\n\n // Setup hover styles on map\n map.on(\"mousemove\", layers, mouseMove);\n map.on(\"mouseleave\", layers, mouseLeave);\n\n return () => {\n map.off(\"mouseenter\", layers, mouseMove);\n map.off(\"mouseleave\", layers, mouseLeave);\n };\n },\n [layers, onHover],\n );\n return null;\n}\n\nfunction SelectedColumnCenterer({\n selectedColumn,\n easeDuration = 500,\n}: {\n selectedColumn: ColumnFeature;\n easeDuration?: number;\n}) {\n const columnCenter = useMemo(() => {\n const columnGeometry = selectedColumn?.geometry;\n if (columnGeometry == null) return null;\n return geoCentroid(columnGeometry);\n }, [selectedColumn]);\n\n const mapRef = useMapRef();\n const map = mapRef.current;\n const initialRenderRef = useRef(true);\n // Center the map on the selected column when it changes\n useEffect(() => {\n if (map == null) return;\n const isInitialRender = initialRenderRef.current;\n if (isInitialRender) initialRenderRef.current = false;\n // If this is the first render of the map, jump to the location. Otherwise, ease to it.\n if (columnCenter == null) return;\n if (isInitialRender) {\n map.setCenter(columnCenter);\n initialRenderRef.current = false;\n } else {\n map.easeTo({ center: columnCenter }, { duration: easeDuration });\n }\n }, [mapRef.current, columnCenter]);\n\n return null;\n}\n"],"names":["keyboardNavigation","columns","h","InsetMap","ColumnNavigationProvider","ColumnKeyboardNavigation","useColumnNavigationStore","state","useCallback","useMemo","BaseColumnsLayer","selectedColumn","SelectedColumnOverlay","useMapStyleOperator","useRef","geoCentroid","useMapRef","useEffect"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
|
-
import { InsetMapProps } from '../../_shared';
|
|
3
2
|
import { NavigationProviderProps } from './state';
|
|
3
|
+
import { InsetMapProps } from '../../inset-map';
|
|
4
|
+
import { ColumnFeature } from '../../layers';
|
|
4
5
|
export interface ColumnNavigationMapProps extends InsetMapProps {
|
|
5
6
|
padding?: number;
|
|
6
7
|
children?: ReactNode;
|
|
@@ -11,7 +12,27 @@ export interface ColumnNavigationMapProps extends InsetMapProps {
|
|
|
11
12
|
onHoverColumn?: (colID: number | null) => void;
|
|
12
13
|
showTriangulation?: boolean;
|
|
13
14
|
columnColor?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function ColumnNavigationMap(props: ColumnNavigationMapProps & NavigationProviderProps): import('react').FunctionComponentElement<InsetMapProps>;
|
|
17
|
+
interface ColumnLayerProps {
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
color?: string;
|
|
20
|
+
}
|
|
21
|
+
interface ColumnKeyboardNavigationProps {
|
|
14
22
|
triangulationColor?: string;
|
|
15
23
|
keyboardNavigation?: boolean;
|
|
24
|
+
showTriangulation?: boolean;
|
|
16
25
|
}
|
|
17
|
-
export declare function
|
|
26
|
+
export declare function ColumnsNavigationLayer(props: NavigationProviderProps & ColumnLayerProps & ColumnKeyboardNavigationProps): import('react').FunctionComponentElement<NavigationProviderProps>;
|
|
27
|
+
export declare function ColumnSelectionManager({ selectedColumn, onSelectColumn, centerOnSelect, }: {
|
|
28
|
+
selectedColumn: ColumnFeature;
|
|
29
|
+
onSelectColumn: (column: ColumnFeature) => void;
|
|
30
|
+
centerOnSelect?: boolean;
|
|
31
|
+
}): import('react').ReactElement<unknown, string | import('react').JSXElementConstructor<any>>;
|
|
32
|
+
export declare function ColumnHoverInteraction({ onHover }: {
|
|
33
|
+
onHover: any;
|
|
34
|
+
}): import('react').FunctionComponentElement<{
|
|
35
|
+
onHover: any;
|
|
36
|
+
layers: any;
|
|
37
|
+
}>;
|
|
38
|
+
export {};
|