@macrostrat/map-interface 2.0.2 → 2.2.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 +12 -0
- package/dist/dev/vector-tile-features.cjs +3 -3
- package/dist/dev/vector-tile-features.cjs.map +1 -1
- package/dist/dev/vector-tile-features.js +1 -1
- package/dist/dev/vector-tile-features.js.map +1 -1
- package/dist/index.cjs +6 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -13
- package/dist/index.js.map +1 -1
- package/dist/location-details/index.d.ts +0 -1
- package/dist/location-details/info-blocks.cjs +0 -22
- package/dist/location-details/info-blocks.cjs.map +1 -1
- package/dist/location-details/info-blocks.js +0 -22
- package/dist/location-details/info-blocks.js.map +1 -1
- package/dist/location-details/macrostrat-linked.cjs +82 -129
- package/dist/location-details/macrostrat-linked.cjs.map +1 -1
- package/dist/location-details/macrostrat-linked.js +29 -75
- package/dist/location-details/macrostrat-linked.js.map +1 -1
- package/dist/location-details/physiography.cjs +2 -2
- package/dist/location-details/physiography.cjs.map +1 -1
- package/dist/location-details/physiography.js +1 -1
- package/dist/location-details/physiography.js.map +1 -1
- package/dist/location-details/reg-strat.cjs +2 -2
- package/dist/location-details/reg-strat.cjs.map +1 -1
- package/dist/location-details/reg-strat.js +1 -1
- package/dist/location-details/reg-strat.js.map +1 -1
- package/dist/map-interface.css +43 -215
- package/dist/map-view.cjs +6 -9
- package/dist/map-view.cjs.map +1 -1
- package/dist/map-view.d.ts +1 -1
- package/dist/map-view.js +7 -10
- package/dist/map-view.js.map +1 -1
- package/package.json +3 -4
- package/src/dev/vector-tile-features.ts +1 -1
- package/src/index.ts +0 -1
- package/src/location-details/index.ts +0 -1
- package/src/location-details/macrostrat-linked.ts +29 -81
- package/src/location-details/main.module.sass +0 -1
- package/src/location-details/physiography.ts +1 -1
- package/src/location-details/reg-strat.ts +1 -1
- package/src/map-view.ts +11 -8
- package/dist/expansion-panel/headers.cjs +0 -22
- package/dist/expansion-panel/headers.cjs.map +0 -1
- package/dist/expansion-panel/headers.d.ts +0 -1
- package/dist/expansion-panel/headers.js +0 -20
- package/dist/expansion-panel/headers.js.map +0 -1
- package/dist/expansion-panel/index.cjs +0 -128
- package/dist/expansion-panel/index.cjs.map +0 -1
- package/dist/expansion-panel/index.d.ts +0 -18
- package/dist/expansion-panel/index.js +0 -125
- package/dist/expansion-panel/index.js.map +0 -1
- package/dist/expansion-panel/main.module.sass.cjs +0 -32
- package/dist/expansion-panel/main.module.sass.cjs.map +0 -1
- package/dist/expansion-panel/main.module.sass.js +0 -30
- package/dist/expansion-panel/main.module.sass.js.map +0 -1
- package/dist/location-details/fetch.d.ts +0 -4
- package/dist/location-details/utils/index.cjs +0 -15
- package/dist/location-details/utils/index.cjs.map +0 -1
- package/dist/location-details/utils/index.js +0 -15
- package/dist/location-details/utils/index.js.map +0 -1
- package/dist/location-details/xdd-panel/article.cjs +0 -64
- package/dist/location-details/xdd-panel/article.cjs.map +0 -1
- package/dist/location-details/xdd-panel/article.d.ts +0 -1
- package/dist/location-details/xdd-panel/article.js +0 -62
- package/dist/location-details/xdd-panel/article.js.map +0 -1
- package/dist/location-details/xdd-panel/index.cjs +0 -71
- package/dist/location-details/xdd-panel/index.cjs.map +0 -1
- package/dist/location-details/xdd-panel/index.d.ts +0 -18
- package/dist/location-details/xdd-panel/index.js +0 -69
- package/dist/location-details/xdd-panel/index.js.map +0 -1
- package/dist/location-details/xdd-panel/journal.cjs +0 -27
- package/dist/location-details/xdd-panel/journal.cjs.map +0 -1
- package/dist/location-details/xdd-panel/journal.d.ts +0 -20
- package/dist/location-details/xdd-panel/journal.js +0 -25
- package/dist/location-details/xdd-panel/journal.js.map +0 -1
- package/src/expansion-panel/headers.ts +0 -18
- package/src/expansion-panel/index.ts +0 -135
- package/src/expansion-panel/main.module.sass +0 -157
- package/src/location-details/fetch.ts +0 -57
- package/src/location-details/location-details.stories.ts +0 -92
- package/src/location-details/xdd-panel/article.ts +0 -67
- package/src/location-details/xdd-panel/index.ts +0 -70
- package/src/location-details/xdd-panel/journal.ts +0 -60
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ 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
|
+
## [2.2.0] - 2026-02-13
|
|
8
|
+
|
|
9
|
+
- Add internal logic to `MapView` to manage the addition of custom style
|
|
10
|
+
fragments, based on updates to the `@macrostrat/mapbox-react` package
|
|
11
|
+
- Add new stories
|
|
12
|
+
|
|
13
|
+
## [2.1.0] - 2026-02-09
|
|
14
|
+
|
|
15
|
+
- Remove xDD info panel components
|
|
16
|
+
- Move `ExpansionPanel` and `ExpandableDetails` components to
|
|
17
|
+
`@macrostrat/data-components`
|
|
18
|
+
|
|
7
19
|
## [2.0.2] - 2026-02-06
|
|
8
20
|
|
|
9
21
|
Remove typings that repeat Vite defaults
|
|
@@ -7,7 +7,7 @@ const main_module = require("./main.module.sass.cjs");
|
|
|
7
7
|
const React = require("react");
|
|
8
8
|
const uiComponents = require("@macrostrat/ui-components");
|
|
9
9
|
const d3Array = require("d3-array");
|
|
10
|
-
const
|
|
10
|
+
const dataComponents = require("@macrostrat/data-components");
|
|
11
11
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
12
12
|
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
13
13
|
const h = h__default.default.styled(main_module.default);
|
|
@@ -158,7 +158,7 @@ function FeaturePanel({
|
|
|
158
158
|
if (focusedSource != null) {
|
|
159
159
|
title = "Basemap features";
|
|
160
160
|
focusedSourcePanel = h(
|
|
161
|
-
|
|
161
|
+
dataComponents.ExpansionPanel,
|
|
162
162
|
{
|
|
163
163
|
title: focusedSourceTitle ?? "Macrostrat features",
|
|
164
164
|
className: "macrostrat-features",
|
|
@@ -176,7 +176,7 @@ function FeaturePanel({
|
|
|
176
176
|
return h("div.feature-panel", [
|
|
177
177
|
focusedSourcePanel,
|
|
178
178
|
h(
|
|
179
|
-
|
|
179
|
+
dataComponents.ExpansionPanel,
|
|
180
180
|
{ title, className: "basemap-features", expanded: focusedSource == null },
|
|
181
181
|
[
|
|
182
182
|
h(FeatureGroups, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-tile-features.cjs","sources":["../../src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"../expansion-panel\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({\n features,\n focusedSource = null,\n focusedSourceTitle = null,\n}) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: focusedSourceTitle ?? \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ],\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ],\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d: any) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n }),\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature })),\n );\n}\n"],"names":["hyper","styles","useState","useCallback","JSONView","Button","Intent","useMapRef","useMapStatus","useRef","useEffect","isLoaded","Spinner","Switch","ExpansionPanel","group","features"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vector-tile-features.cjs","sources":["../../src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"@macrostrat/data-components\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({\n features,\n focusedSource = null,\n focusedSourceTitle = null,\n}) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: focusedSourceTitle ?? \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ],\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ],\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d: any) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n }),\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature })),\n );\n}\n"],"names":["hyper","styles","useState","useCallback","JSONView","Button","Intent","useMapRef","useMapStatus","useRef","useEffect","isLoaded","Spinner","Switch","ExpansionPanel","group","features"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import h$2 from "./main.module.sass.js";
|
|
|
5
5
|
import { useState, useCallback, useRef, useEffect } from "react";
|
|
6
6
|
import { JSONView } from "@macrostrat/ui-components";
|
|
7
7
|
import { group } from "d3-array";
|
|
8
|
-
import { ExpansionPanel } from "
|
|
8
|
+
import { ExpansionPanel } from "@macrostrat/data-components";
|
|
9
9
|
const h = h$1.styled(h$2);
|
|
10
10
|
function FeatureProperties({ data, ...rest }) {
|
|
11
11
|
const [showControls, setShowControls] = useState(false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector-tile-features.js","sources":["../../src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"../expansion-panel\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({\n features,\n focusedSource = null,\n focusedSourceTitle = null,\n}) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: focusedSourceTitle ?? \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ],\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ],\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d: any) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n }),\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature })),\n );\n}\n"],"names":["hyper","styles","isLoaded","features"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vector-tile-features.js","sources":["../../src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"@macrostrat/data-components\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({\n features,\n focusedSource = null,\n focusedSourceTitle = null,\n}) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: focusedSourceTitle ?? \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ],\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ],\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d: any) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n }),\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature })),\n );\n}\n"],"names":["hyper","styles","isLoaded","features"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const index$
|
|
3
|
+
const index$1 = require("./context-panel/index.cjs");
|
|
4
4
|
const index = require("./location-panel/index.cjs");
|
|
5
5
|
const container = require("./container.cjs");
|
|
6
6
|
const mapView = require("./map-view.cjs");
|
|
7
7
|
const controls = require("./controls.cjs");
|
|
8
8
|
const helpers = require("./helpers.cjs");
|
|
9
9
|
const utils = require("./utils.cjs");
|
|
10
|
-
const index$1 = require("./expansion-panel/index.cjs");
|
|
11
10
|
const hashString = require("./hash-string.cjs");
|
|
12
11
|
const mapPage = require("./dev/map-page.cjs");
|
|
13
12
|
const vectorTileFeatures = require("./dev/vector-tile-features.cjs");
|
|
14
|
-
const index$
|
|
13
|
+
const index$2 = require("./location-details/fossil-collections/index.cjs");
|
|
15
14
|
const macrostratLinked = require("./location-details/macrostrat-linked.cjs");
|
|
16
|
-
const headers = require("./expansion-panel/headers.cjs");
|
|
17
15
|
const physiography = require("./location-details/physiography.cjs");
|
|
18
16
|
const regStrat = require("./location-details/reg-strat.cjs");
|
|
19
17
|
const tileExtent = require("./dev/tile-extent.cjs");
|
|
20
|
-
const index$4 = require("./location-details/xdd-panel/index.cjs");
|
|
21
18
|
const xray = require("./dev/xray.cjs");
|
|
22
|
-
exports.FloatingNavbar = index$
|
|
23
|
-
exports.LoadingButton = index$
|
|
24
|
-
exports.MapLoadingButton = index$
|
|
19
|
+
exports.FloatingNavbar = index$1.FloatingNavbar;
|
|
20
|
+
exports.LoadingButton = index$1.LoadingButton;
|
|
21
|
+
exports.MapLoadingButton = index$1.MapLoadingButton;
|
|
25
22
|
exports.BaseInfoDrawer = index.BaseInfoDrawer;
|
|
26
23
|
exports.DetailsPanel = index.DetailsPanel;
|
|
27
24
|
exports.InfoDrawerContainer = index.InfoDrawerContainer;
|
|
@@ -43,12 +40,6 @@ exports.useBasicMapStyle = helpers.useBasicMapStyle;
|
|
|
43
40
|
exports.useBasicStylePair = helpers.useBasicStylePair;
|
|
44
41
|
exports.getMapPadding = utils.getMapPadding;
|
|
45
42
|
exports.useMapMarker = utils.useMapMarker;
|
|
46
|
-
exports.ExpandableDetailsPanel = index$1.ExpandableDetailsPanel;
|
|
47
|
-
exports.ExpansionBody = index$1.ExpansionBody;
|
|
48
|
-
exports.ExpansionPanel = index$1.ExpansionPanel;
|
|
49
|
-
exports.ExpansionPanelSummary = index$1.ExpansionPanelSummary;
|
|
50
|
-
exports.InfoPanelSection = index$1.InfoPanelSection;
|
|
51
|
-
exports.SubExpansionPanel = index$1.SubExpansionPanel;
|
|
52
43
|
exports.applyMapPositionToHash = hashString.applyMapPositionToHash;
|
|
53
44
|
exports.getMapPositionForHash = hashString.getMapPositionForHash;
|
|
54
45
|
exports.DevMapPage = mapPage.DevMapPage;
|
|
@@ -60,14 +51,11 @@ exports.FeatureRecord = vectorTileFeatures.FeatureRecord;
|
|
|
60
51
|
exports.FeatureSelectionHandler = vectorTileFeatures.FeatureSelectionHandler;
|
|
61
52
|
exports.Features = vectorTileFeatures.Features;
|
|
62
53
|
exports.TileInfo = vectorTileFeatures.TileInfo;
|
|
63
|
-
exports.FossilCollections = index$
|
|
54
|
+
exports.FossilCollections = index$2.FossilCollections;
|
|
64
55
|
exports.MacrostratLinkedData = macrostratLinked.MacrostratLinkedData;
|
|
65
|
-
exports.PanelSubhead = headers.PanelSubhead;
|
|
66
56
|
exports.Physiography = physiography.Physiography;
|
|
67
57
|
exports.RegionalStratigraphy = regStrat.RegionalStratigraphy;
|
|
68
58
|
exports.TileExtentLayer = tileExtent.TileExtentLayer;
|
|
69
|
-
exports.XddExpansion = index$4.XddExpansion;
|
|
70
|
-
exports.xDDPanelCore = index$4.xDDPanelCore;
|
|
71
59
|
exports.buildInspectorStyle = xray.buildInspectorStyle;
|
|
72
60
|
exports.buildXRayStyle = xray.buildXRayStyle;
|
|
73
61
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -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.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -5,27 +5,20 @@ import { MapTerrainManager, MapView } from "./map-view.js";
|
|
|
5
5
|
import { MapBottomControls } from "./controls.js";
|
|
6
6
|
import { MapLoadingReporter, MapMarker, MapMovedReporter, MapPaddingManager, MapResizeManager, getBasicMapStyle, useBasicMapStyle, useBasicStylePair } from "./helpers.js";
|
|
7
7
|
import { getMapPadding, useMapMarker } from "./utils.js";
|
|
8
|
-
import { ExpandableDetailsPanel, ExpansionBody, ExpansionPanel, ExpansionPanelSummary, InfoPanelSection, SubExpansionPanel } from "./expansion-panel/index.js";
|
|
9
8
|
import { applyMapPositionToHash, getMapPositionForHash } from "./hash-string.js";
|
|
10
9
|
import { DevMapPage, MapInspectorV2, h } from "./dev/map-page.js";
|
|
11
10
|
import { FeaturePanel, FeatureProperties, FeatureRecord, FeatureSelectionHandler, Features, TileInfo } from "./dev/vector-tile-features.js";
|
|
12
11
|
import { FossilCollections } from "./location-details/fossil-collections/index.js";
|
|
13
12
|
import { MacrostratLinkedData } from "./location-details/macrostrat-linked.js";
|
|
14
|
-
import { PanelSubhead } from "./expansion-panel/headers.js";
|
|
15
13
|
import { Physiography } from "./location-details/physiography.js";
|
|
16
14
|
import { RegionalStratigraphy } from "./location-details/reg-strat.js";
|
|
17
15
|
import { TileExtentLayer } from "./dev/tile-extent.js";
|
|
18
|
-
import { XddExpansion, xDDPanelCore } from "./location-details/xdd-panel/index.js";
|
|
19
16
|
import { buildInspectorStyle, buildXRayStyle } from "./dev/xray.js";
|
|
20
17
|
export {
|
|
21
18
|
BaseInfoDrawer,
|
|
22
19
|
DetailPanelStyle,
|
|
23
20
|
DetailsPanel,
|
|
24
21
|
DevMapPage,
|
|
25
|
-
ExpandableDetailsPanel,
|
|
26
|
-
ExpansionBody,
|
|
27
|
-
ExpansionPanel,
|
|
28
|
-
ExpansionPanelSummary,
|
|
29
22
|
FeaturePanel,
|
|
30
23
|
FeatureProperties,
|
|
31
24
|
FeatureRecord,
|
|
@@ -34,7 +27,6 @@ export {
|
|
|
34
27
|
FloatingNavbar,
|
|
35
28
|
FossilCollections,
|
|
36
29
|
InfoDrawerContainer,
|
|
37
|
-
InfoPanelSection,
|
|
38
30
|
LoadingButton,
|
|
39
31
|
LocationPanel,
|
|
40
32
|
MacrostratLinkedData,
|
|
@@ -51,13 +43,10 @@ export {
|
|
|
51
43
|
MapTerrainManager,
|
|
52
44
|
MapView,
|
|
53
45
|
PanelCard,
|
|
54
|
-
PanelSubhead,
|
|
55
46
|
Physiography,
|
|
56
47
|
RegionalStratigraphy,
|
|
57
|
-
SubExpansionPanel,
|
|
58
48
|
TileExtentLayer,
|
|
59
49
|
TileInfo,
|
|
60
|
-
XddExpansion,
|
|
61
50
|
applyMapPositionToHash,
|
|
62
51
|
buildInspectorStyle,
|
|
63
52
|
buildXRayStyle,
|
|
@@ -67,7 +56,6 @@ export {
|
|
|
67
56
|
h,
|
|
68
57
|
useBasicMapStyle,
|
|
69
58
|
useBasicStylePair,
|
|
70
|
-
useMapMarker
|
|
71
|
-
xDDPanelCore
|
|
59
|
+
useMapMarker
|
|
72
60
|
};
|
|
73
61
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const h$1 = require("@macrostrat/hyper");
|
|
4
|
-
const index = require("./utils/index.cjs");
|
|
5
4
|
const infoBlocks_module = require("./info-blocks.module.sass.cjs");
|
|
6
5
|
const uiComponents = require("@macrostrat/ui-components");
|
|
7
6
|
const chroma = require("chroma-js");
|
|
@@ -58,27 +57,6 @@ function AgeChip(props) {
|
|
|
58
57
|
})
|
|
59
58
|
]);
|
|
60
59
|
}
|
|
61
|
-
function AttrChip(props) {
|
|
62
|
-
const {
|
|
63
|
-
fill = null,
|
|
64
|
-
color,
|
|
65
|
-
name,
|
|
66
|
-
className,
|
|
67
|
-
emphasized = true,
|
|
68
|
-
style
|
|
69
|
-
} = props;
|
|
70
|
-
return h("div.lith-chip", { style, className }, [
|
|
71
|
-
h(
|
|
72
|
-
"div.lith-chip-inner.chip",
|
|
73
|
-
{
|
|
74
|
-
style: { backgroundColor: index.hexToRgb(color, 0.6) },
|
|
75
|
-
className: emphasized ? "emphasized" : null
|
|
76
|
-
},
|
|
77
|
-
[name]
|
|
78
|
-
)
|
|
79
|
-
]);
|
|
80
|
-
}
|
|
81
60
|
exports.AgeChip = AgeChip;
|
|
82
|
-
exports.AttrChip = AttrChip;
|
|
83
61
|
exports.IntervalChip = IntervalChip;
|
|
84
62
|
//# sourceMappingURL=info-blocks.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info-blocks.cjs","sources":["../../src/location-details/info-blocks.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { hexToRgb } from \"./utils\";\nimport styles from \"./info-blocks.module.sass\";\nimport { useDarkMode } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\n\nconst h = hyper.styled(styles);\n\nfunction getColor(color, darkenAmount) {\n try {\n return chroma(color).darken(darkenAmount).hex();\n } catch (err) {\n return color;\n }\n}\n\nfunction IntervalChip(props) {\n const { interval, className, intervalURL } = props;\n const darkMode = useDarkMode();\n const darkenAmount = darkMode.isEnabled ? 2 : 0;\n\n return h(\n \"a.chip-link\",\n {\n href: `${intervalURL}/${interval.int_id}`,\n },\n h(\n \"div.chip.age-chip\",\n {\n className,\n style: {\n backgroundColor: getColor(interval.color, darkenAmount),\n },\n },\n [\n h(\"div.age-chip-interval\", interval.int_name),\n h(\"div.age-chip-age\", [\n h(Age, { age: interval.b_age }),\n \" - \",\n h(Age, { age: interval.t_age }),\n ]),\n ],\n ),\n );\n}\n\nfunction Age({ age }) {\n return h(\"span.age\", [age, h(\"span.age-chip-ma\", [\"Ma\"])]);\n}\n\nfunction AgeChip(props) {\n const { t_int, b_int, intervalURL } = props;\n\n return h(\"div.age-chip-container\", [\n h(IntervalChip, { interval: b_int, intervalURL }),\n h.if(b_int.int_id != props.t_int.int_id)(IntervalChip, {\n interval: t_int,\n className: \"age-chip-t-int\",\n intervalURL,\n }),\n ]);\n}\n\nfunction AttrChip(props) {\n const {\n fill = null,\n color,\n name,\n className,\n emphasized = true,\n style,\n } = props;\n\n // Deactivated for now\n // if (fill) {\n // styles[\"backgroundImage\"] = `url('dist/img/geologic-patterns/${fill}.png')`;\n // }\n return h(\"div.lith-chip\", { style, className }, [\n h(\n \"div.lith-chip-inner.chip\",\n {\n style: { backgroundColor: hexToRgb(color, 0.6) },\n className: emphasized ? \"emphasized\" : null,\n },\n [name],\n ),\n ]);\n}\n\nexport { AgeChip, AttrChip, IntervalChip };\n"],"names":["hyper","styles","chroma","useDarkMode"
|
|
1
|
+
{"version":3,"file":"info-blocks.cjs","sources":["../../src/location-details/info-blocks.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { hexToRgb } from \"./utils\";\nimport styles from \"./info-blocks.module.sass\";\nimport { useDarkMode } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\n\nconst h = hyper.styled(styles);\n\nfunction getColor(color, darkenAmount) {\n try {\n return chroma(color).darken(darkenAmount).hex();\n } catch (err) {\n return color;\n }\n}\n\nfunction IntervalChip(props) {\n const { interval, className, intervalURL } = props;\n const darkMode = useDarkMode();\n const darkenAmount = darkMode.isEnabled ? 2 : 0;\n\n return h(\n \"a.chip-link\",\n {\n href: `${intervalURL}/${interval.int_id}`,\n },\n h(\n \"div.chip.age-chip\",\n {\n className,\n style: {\n backgroundColor: getColor(interval.color, darkenAmount),\n },\n },\n [\n h(\"div.age-chip-interval\", interval.int_name),\n h(\"div.age-chip-age\", [\n h(Age, { age: interval.b_age }),\n \" - \",\n h(Age, { age: interval.t_age }),\n ]),\n ],\n ),\n );\n}\n\nfunction Age({ age }) {\n return h(\"span.age\", [age, h(\"span.age-chip-ma\", [\"Ma\"])]);\n}\n\nfunction AgeChip(props) {\n const { t_int, b_int, intervalURL } = props;\n\n return h(\"div.age-chip-container\", [\n h(IntervalChip, { interval: b_int, intervalURL }),\n h.if(b_int.int_id != props.t_int.int_id)(IntervalChip, {\n interval: t_int,\n className: \"age-chip-t-int\",\n intervalURL,\n }),\n ]);\n}\n\nfunction AttrChip(props) {\n const {\n fill = null,\n color,\n name,\n className,\n emphasized = true,\n style,\n } = props;\n\n // Deactivated for now\n // if (fill) {\n // styles[\"backgroundImage\"] = `url('dist/img/geologic-patterns/${fill}.png')`;\n // }\n return h(\"div.lith-chip\", { style, className }, [\n h(\n \"div.lith-chip-inner.chip\",\n {\n style: { backgroundColor: hexToRgb(color, 0.6) },\n className: emphasized ? \"emphasized\" : null,\n },\n [name],\n ),\n ]);\n}\n\nexport { AgeChip, AttrChip, IntervalChip };\n"],"names":["hyper","styles","chroma","useDarkMode"],"mappings":";;;;;;;;;AAMA,MAAM,IAAIA,WAAAA,QAAM,OAAOC,yBAAM;AAE7B,SAAS,SAAS,OAAO,cAAc;AACrC,MAAI;AACF,WAAOC,gBAAAA,QAAO,KAAK,EAAE,OAAO,YAAY,EAAE,IAAA;AAAA,EAC5C,SAAS,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAO;AAC3B,QAAM,EAAE,UAAU,WAAW,YAAA,IAAgB;AAC7C,QAAM,WAAWC,aAAAA,YAAA;AACjB,QAAM,eAAe,SAAS,YAAY,IAAI;AAE9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM,GAAG,WAAW,IAAI,SAAS,MAAM;AAAA,IAAA;AAAA,IAEzC;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA,OAAO;AAAA,UACL,iBAAiB,SAAS,SAAS,OAAO,YAAY;AAAA,QAAA;AAAA,MACxD;AAAA,MAEF;AAAA,QACE,EAAE,yBAAyB,SAAS,QAAQ;AAAA,QAC5C,EAAE,oBAAoB;AAAA,UACpB,EAAE,KAAK,EAAE,KAAK,SAAS,OAAO;AAAA,UAC9B;AAAA,UACA,EAAE,KAAK,EAAE,KAAK,SAAS,OAAO;AAAA,QAAA,CAC/B;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ;AAEA,SAAS,IAAI,EAAE,OAAO;AACpB,SAAO,EAAE,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D;AAEA,SAAS,QAAQ,OAAO;AACtB,QAAM,EAAE,OAAO,OAAO,YAAA,IAAgB;AAEtC,SAAO,EAAE,0BAA0B;AAAA,IACjC,EAAE,cAAc,EAAE,UAAU,OAAO,aAAa;AAAA,IAChD,EAAE,GAAG,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,cAAc;AAAA,MACrD,UAAU;AAAA,MACV,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACH;;;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import h$1 from "@macrostrat/hyper";
|
|
2
|
-
import { hexToRgb } from "./utils/index.js";
|
|
3
2
|
import h$2 from "./info-blocks.module.sass.js";
|
|
4
3
|
import { useDarkMode } from "@macrostrat/ui-components";
|
|
5
4
|
import chroma from "chroma-js";
|
|
@@ -53,29 +52,8 @@ function AgeChip(props) {
|
|
|
53
52
|
})
|
|
54
53
|
]);
|
|
55
54
|
}
|
|
56
|
-
function AttrChip(props) {
|
|
57
|
-
const {
|
|
58
|
-
fill = null,
|
|
59
|
-
color,
|
|
60
|
-
name,
|
|
61
|
-
className,
|
|
62
|
-
emphasized = true,
|
|
63
|
-
style
|
|
64
|
-
} = props;
|
|
65
|
-
return h("div.lith-chip", { style, className }, [
|
|
66
|
-
h(
|
|
67
|
-
"div.lith-chip-inner.chip",
|
|
68
|
-
{
|
|
69
|
-
style: { backgroundColor: hexToRgb(color, 0.6) },
|
|
70
|
-
className: emphasized ? "emphasized" : null
|
|
71
|
-
},
|
|
72
|
-
[name]
|
|
73
|
-
)
|
|
74
|
-
]);
|
|
75
|
-
}
|
|
76
55
|
export {
|
|
77
56
|
AgeChip,
|
|
78
|
-
AttrChip,
|
|
79
57
|
IntervalChip
|
|
80
58
|
};
|
|
81
59
|
//# sourceMappingURL=info-blocks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info-blocks.js","sources":["../../src/location-details/info-blocks.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { hexToRgb } from \"./utils\";\nimport styles from \"./info-blocks.module.sass\";\nimport { useDarkMode } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\n\nconst h = hyper.styled(styles);\n\nfunction getColor(color, darkenAmount) {\n try {\n return chroma(color).darken(darkenAmount).hex();\n } catch (err) {\n return color;\n }\n}\n\nfunction IntervalChip(props) {\n const { interval, className, intervalURL } = props;\n const darkMode = useDarkMode();\n const darkenAmount = darkMode.isEnabled ? 2 : 0;\n\n return h(\n \"a.chip-link\",\n {\n href: `${intervalURL}/${interval.int_id}`,\n },\n h(\n \"div.chip.age-chip\",\n {\n className,\n style: {\n backgroundColor: getColor(interval.color, darkenAmount),\n },\n },\n [\n h(\"div.age-chip-interval\", interval.int_name),\n h(\"div.age-chip-age\", [\n h(Age, { age: interval.b_age }),\n \" - \",\n h(Age, { age: interval.t_age }),\n ]),\n ],\n ),\n );\n}\n\nfunction Age({ age }) {\n return h(\"span.age\", [age, h(\"span.age-chip-ma\", [\"Ma\"])]);\n}\n\nfunction AgeChip(props) {\n const { t_int, b_int, intervalURL } = props;\n\n return h(\"div.age-chip-container\", [\n h(IntervalChip, { interval: b_int, intervalURL }),\n h.if(b_int.int_id != props.t_int.int_id)(IntervalChip, {\n interval: t_int,\n className: \"age-chip-t-int\",\n intervalURL,\n }),\n ]);\n}\n\nfunction AttrChip(props) {\n const {\n fill = null,\n color,\n name,\n className,\n emphasized = true,\n style,\n } = props;\n\n // Deactivated for now\n // if (fill) {\n // styles[\"backgroundImage\"] = `url('dist/img/geologic-patterns/${fill}.png')`;\n // }\n return h(\"div.lith-chip\", { style, className }, [\n h(\n \"div.lith-chip-inner.chip\",\n {\n style: { backgroundColor: hexToRgb(color, 0.6) },\n className: emphasized ? \"emphasized\" : null,\n },\n [name],\n ),\n ]);\n}\n\nexport { AgeChip, AttrChip, IntervalChip };\n"],"names":["hyper","styles"],"mappings":"
|
|
1
|
+
{"version":3,"file":"info-blocks.js","sources":["../../src/location-details/info-blocks.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { hexToRgb } from \"./utils\";\nimport styles from \"./info-blocks.module.sass\";\nimport { useDarkMode } from \"@macrostrat/ui-components\";\nimport chroma from \"chroma-js\";\n\nconst h = hyper.styled(styles);\n\nfunction getColor(color, darkenAmount) {\n try {\n return chroma(color).darken(darkenAmount).hex();\n } catch (err) {\n return color;\n }\n}\n\nfunction IntervalChip(props) {\n const { interval, className, intervalURL } = props;\n const darkMode = useDarkMode();\n const darkenAmount = darkMode.isEnabled ? 2 : 0;\n\n return h(\n \"a.chip-link\",\n {\n href: `${intervalURL}/${interval.int_id}`,\n },\n h(\n \"div.chip.age-chip\",\n {\n className,\n style: {\n backgroundColor: getColor(interval.color, darkenAmount),\n },\n },\n [\n h(\"div.age-chip-interval\", interval.int_name),\n h(\"div.age-chip-age\", [\n h(Age, { age: interval.b_age }),\n \" - \",\n h(Age, { age: interval.t_age }),\n ]),\n ],\n ),\n );\n}\n\nfunction Age({ age }) {\n return h(\"span.age\", [age, h(\"span.age-chip-ma\", [\"Ma\"])]);\n}\n\nfunction AgeChip(props) {\n const { t_int, b_int, intervalURL } = props;\n\n return h(\"div.age-chip-container\", [\n h(IntervalChip, { interval: b_int, intervalURL }),\n h.if(b_int.int_id != props.t_int.int_id)(IntervalChip, {\n interval: t_int,\n className: \"age-chip-t-int\",\n intervalURL,\n }),\n ]);\n}\n\nfunction AttrChip(props) {\n const {\n fill = null,\n color,\n name,\n className,\n emphasized = true,\n style,\n } = props;\n\n // Deactivated for now\n // if (fill) {\n // styles[\"backgroundImage\"] = `url('dist/img/geologic-patterns/${fill}.png')`;\n // }\n return h(\"div.lith-chip\", { style, className }, [\n h(\n \"div.lith-chip-inner.chip\",\n {\n style: { backgroundColor: hexToRgb(color, 0.6) },\n className: emphasized ? \"emphasized\" : null,\n },\n [name],\n ),\n ]);\n}\n\nexport { AgeChip, AttrChip, IntervalChip };\n"],"names":["hyper","styles"],"mappings":";;;;AAMA,MAAM,IAAIA,IAAM,OAAOC,GAAM;AAE7B,SAAS,SAAS,OAAO,cAAc;AACrC,MAAI;AACF,WAAO,OAAO,KAAK,EAAE,OAAO,YAAY,EAAE,IAAA;AAAA,EAC5C,SAAS,KAAK;AACZ,WAAO;AAAA,EACT;AACF;AAEA,SAAS,aAAa,OAAO;AAC3B,QAAM,EAAE,UAAU,WAAW,YAAA,IAAgB;AAC7C,QAAM,WAAW,YAAA;AACjB,QAAM,eAAe,SAAS,YAAY,IAAI;AAE9C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,MAAM,GAAG,WAAW,IAAI,SAAS,MAAM;AAAA,IAAA;AAAA,IAEzC;AAAA,MACE;AAAA,MACA;AAAA,QACE;AAAA,QACA,OAAO;AAAA,UACL,iBAAiB,SAAS,SAAS,OAAO,YAAY;AAAA,QAAA;AAAA,MACxD;AAAA,MAEF;AAAA,QACE,EAAE,yBAAyB,SAAS,QAAQ;AAAA,QAC5C,EAAE,oBAAoB;AAAA,UACpB,EAAE,KAAK,EAAE,KAAK,SAAS,OAAO;AAAA,UAC9B;AAAA,UACA,EAAE,KAAK,EAAE,KAAK,SAAS,OAAO;AAAA,QAAA,CAC/B;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ;AAEA,SAAS,IAAI,EAAE,OAAO;AACpB,SAAO,EAAE,YAAY,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3D;AAEA,SAAS,QAAQ,OAAO;AACtB,QAAM,EAAE,OAAO,OAAO,YAAA,IAAgB;AAEtC,SAAO,EAAE,0BAA0B;AAAA,IACjC,EAAE,cAAc,EAAE,UAAU,OAAO,aAAa;AAAA,IAChD,EAAE,GAAG,MAAM,UAAU,MAAM,MAAM,MAAM,EAAE,cAAc;AAAA,MACrD,UAAU;AAAA,MACV,WAAW;AAAA,MACX;AAAA,IAAA,CACD;AAAA,EAAA,CACF;AACH;"}
|