@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.
Files changed (84) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/dev/vector-tile-features.cjs +3 -3
  3. package/dist/dev/vector-tile-features.cjs.map +1 -1
  4. package/dist/dev/vector-tile-features.js +1 -1
  5. package/dist/dev/vector-tile-features.js.map +1 -1
  6. package/dist/index.cjs +6 -18
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +0 -1
  9. package/dist/index.js +1 -13
  10. package/dist/index.js.map +1 -1
  11. package/dist/location-details/index.d.ts +0 -1
  12. package/dist/location-details/info-blocks.cjs +0 -22
  13. package/dist/location-details/info-blocks.cjs.map +1 -1
  14. package/dist/location-details/info-blocks.js +0 -22
  15. package/dist/location-details/info-blocks.js.map +1 -1
  16. package/dist/location-details/macrostrat-linked.cjs +82 -129
  17. package/dist/location-details/macrostrat-linked.cjs.map +1 -1
  18. package/dist/location-details/macrostrat-linked.js +29 -75
  19. package/dist/location-details/macrostrat-linked.js.map +1 -1
  20. package/dist/location-details/physiography.cjs +2 -2
  21. package/dist/location-details/physiography.cjs.map +1 -1
  22. package/dist/location-details/physiography.js +1 -1
  23. package/dist/location-details/physiography.js.map +1 -1
  24. package/dist/location-details/reg-strat.cjs +2 -2
  25. package/dist/location-details/reg-strat.cjs.map +1 -1
  26. package/dist/location-details/reg-strat.js +1 -1
  27. package/dist/location-details/reg-strat.js.map +1 -1
  28. package/dist/map-interface.css +43 -215
  29. package/dist/map-view.cjs +6 -9
  30. package/dist/map-view.cjs.map +1 -1
  31. package/dist/map-view.d.ts +1 -1
  32. package/dist/map-view.js +7 -10
  33. package/dist/map-view.js.map +1 -1
  34. package/package.json +3 -4
  35. package/src/dev/vector-tile-features.ts +1 -1
  36. package/src/index.ts +0 -1
  37. package/src/location-details/index.ts +0 -1
  38. package/src/location-details/macrostrat-linked.ts +29 -81
  39. package/src/location-details/main.module.sass +0 -1
  40. package/src/location-details/physiography.ts +1 -1
  41. package/src/location-details/reg-strat.ts +1 -1
  42. package/src/map-view.ts +11 -8
  43. package/dist/expansion-panel/headers.cjs +0 -22
  44. package/dist/expansion-panel/headers.cjs.map +0 -1
  45. package/dist/expansion-panel/headers.d.ts +0 -1
  46. package/dist/expansion-panel/headers.js +0 -20
  47. package/dist/expansion-panel/headers.js.map +0 -1
  48. package/dist/expansion-panel/index.cjs +0 -128
  49. package/dist/expansion-panel/index.cjs.map +0 -1
  50. package/dist/expansion-panel/index.d.ts +0 -18
  51. package/dist/expansion-panel/index.js +0 -125
  52. package/dist/expansion-panel/index.js.map +0 -1
  53. package/dist/expansion-panel/main.module.sass.cjs +0 -32
  54. package/dist/expansion-panel/main.module.sass.cjs.map +0 -1
  55. package/dist/expansion-panel/main.module.sass.js +0 -30
  56. package/dist/expansion-panel/main.module.sass.js.map +0 -1
  57. package/dist/location-details/fetch.d.ts +0 -4
  58. package/dist/location-details/utils/index.cjs +0 -15
  59. package/dist/location-details/utils/index.cjs.map +0 -1
  60. package/dist/location-details/utils/index.js +0 -15
  61. package/dist/location-details/utils/index.js.map +0 -1
  62. package/dist/location-details/xdd-panel/article.cjs +0 -64
  63. package/dist/location-details/xdd-panel/article.cjs.map +0 -1
  64. package/dist/location-details/xdd-panel/article.d.ts +0 -1
  65. package/dist/location-details/xdd-panel/article.js +0 -62
  66. package/dist/location-details/xdd-panel/article.js.map +0 -1
  67. package/dist/location-details/xdd-panel/index.cjs +0 -71
  68. package/dist/location-details/xdd-panel/index.cjs.map +0 -1
  69. package/dist/location-details/xdd-panel/index.d.ts +0 -18
  70. package/dist/location-details/xdd-panel/index.js +0 -69
  71. package/dist/location-details/xdd-panel/index.js.map +0 -1
  72. package/dist/location-details/xdd-panel/journal.cjs +0 -27
  73. package/dist/location-details/xdd-panel/journal.cjs.map +0 -1
  74. package/dist/location-details/xdd-panel/journal.d.ts +0 -20
  75. package/dist/location-details/xdd-panel/journal.js +0 -25
  76. package/dist/location-details/xdd-panel/journal.js.map +0 -1
  77. package/src/expansion-panel/headers.ts +0 -18
  78. package/src/expansion-panel/index.ts +0 -135
  79. package/src/expansion-panel/main.module.sass +0 -157
  80. package/src/location-details/fetch.ts +0 -57
  81. package/src/location-details/location-details.stories.ts +0 -92
  82. package/src/location-details/xdd-panel/article.ts +0 -67
  83. package/src/location-details/xdd-panel/index.ts +0 -70
  84. 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 index = require("../expansion-panel/index.cjs");
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
- index.ExpansionPanel,
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
- index.ExpansionPanel,
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 "../expansion-panel/index.js";
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$2 = require("./context-panel/index.cjs");
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$3 = require("./location-details/fossil-collections/index.cjs");
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$2.FloatingNavbar;
23
- exports.LoadingButton = index$2.LoadingButton;
24
- exports.MapLoadingButton = index$2.MapLoadingButton;
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$3.FossilCollections;
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
@@ -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
@@ -6,6 +6,5 @@ export * from './map-view';
6
6
  export * from './controls';
7
7
  export * from './helpers';
8
8
  export * from './utils';
9
- export * from './expansion-panel';
10
9
  export * from './location-details';
11
10
  export * from './hash-string';
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,5 +1,4 @@
1
1
  export * from './fossil-collections';
2
- export * from './xdd-panel';
3
2
  export * from './reg-strat';
4
3
  export * from './physiography';
5
4
  export * from './macrostrat-linked';
@@ -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","hexToRgb"],"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;AAEA,SAAS,SAAS,OAAO;AACvB,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EAAA,IACE;AAMJ,SAAO,EAAE,iBAAiB,EAAE,OAAO,aAAa;AAAA,IAC9C;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO,EAAE,iBAAiBC,MAAAA,SAAS,OAAO,GAAG,EAAA;AAAA,QAC7C,WAAW,aAAa,eAAe;AAAA,MAAA;AAAA,MAEzC,CAAC,IAAI;AAAA,IAAA;AAAA,EACP,CACD;AACH;;;;"}
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":";;;;;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;AAEA,SAAS,SAAS,OAAO;AACvB,QAAM;AAAA,IACJ,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,EAAA,IACE;AAMJ,SAAO,EAAE,iBAAiB,EAAE,OAAO,aAAa;AAAA,IAC9C;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO,EAAE,iBAAiB,SAAS,OAAO,GAAG,EAAA;AAAA,QAC7C,WAAW,aAAa,eAAe;AAAA,MAAA;AAAA,MAEzC,CAAC,IAAI;AAAA,IAAA;AAAA,EACP,CACD;AACH;"}
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;"}