@macrostrat/column-views 3.0.1 → 3.0.2
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 +4 -0
- package/dist/age-axis.cjs +3 -1
- package/dist/age-axis.cjs.map +1 -1
- package/dist/age-model-overlay.cjs +3 -1
- package/dist/age-model-overlay.cjs.map +1 -1
- package/dist/age-model-overlay.module.sass.cjs +1 -2
- package/dist/age-model-overlay.module.sass.cjs.map +1 -1
- package/dist/column.cjs +3 -1
- package/dist/column.cjs.map +1 -1
- package/dist/correlation-chart/main.cjs +5 -2
- package/dist/correlation-chart/main.cjs.map +1 -1
- package/dist/data-provider/base.cjs +8 -5
- package/dist/data-provider/base.cjs.map +1 -1
- package/dist/data-provider/column-nav.cjs +3 -1
- package/dist/data-provider/column-nav.cjs.map +1 -1
- package/dist/data-provider/core.cjs +4 -2
- package/dist/data-provider/core.cjs.map +1 -1
- package/dist/data-provider/fetch.cjs +4 -2
- package/dist/data-provider/fetch.cjs.map +1 -1
- package/dist/data-provider/store.cjs +7 -5
- package/dist/data-provider/store.cjs.map +1 -1
- package/dist/facets/carbon-isotopes/data-area.cjs +4 -2
- package/dist/facets/carbon-isotopes/data-area.cjs.map +1 -1
- package/dist/facets/carbon-isotopes/data-provider.cjs +3 -1
- package/dist/facets/carbon-isotopes/data-provider.cjs.map +1 -1
- package/dist/facets/carbon-isotopes/isotopes-column.cjs +5 -2
- package/dist/facets/carbon-isotopes/isotopes-column.cjs.map +1 -1
- package/dist/facets/detrital-zircon/index.cjs +5 -2
- package/dist/facets/detrital-zircon/index.cjs.map +1 -1
- package/dist/facets/detrital-zircon/index.module.sass.cjs +1 -2
- package/dist/facets/detrital-zircon/index.module.sass.cjs.map +1 -1
- package/dist/facets/fossils/index.cjs +3 -1
- package/dist/facets/fossils/index.cjs.map +1 -1
- package/dist/facets/fossils/taxon-ranges.cjs +3 -1
- package/dist/facets/fossils/taxon-ranges.cjs.map +1 -1
- package/dist/facets/fossils/taxon-ranges.module.sass.cjs +1 -2
- package/dist/facets/fossils/taxon-ranges.module.sass.cjs.map +1 -1
- package/dist/facets/measurements/base.cjs +3 -1
- package/dist/facets/measurements/base.cjs.map +1 -1
- package/dist/facets/measurements/base.module.sass.cjs +1 -2
- package/dist/facets/measurements/base.module.sass.cjs.map +1 -1
- package/dist/facets/measurements/sgp.cjs +5 -3
- package/dist/facets/measurements/sgp.cjs.map +1 -1
- package/dist/maps/_shared/inset-map.cjs +5 -3
- package/dist/maps/_shared/inset-map.cjs.map +1 -1
- package/dist/maps/column-correlation/core.cjs +7 -5
- package/dist/maps/column-correlation/core.cjs.map +1 -1
- package/dist/maps/column-correlation/state.cjs +5 -2
- package/dist/maps/column-correlation/state.cjs.map +1 -1
- package/dist/maps/column-navigation/mapbox/index.cjs +7 -5
- package/dist/maps/column-navigation/mapbox/index.cjs.map +1 -1
- package/dist/maps/column-navigation/mapbox/state.cjs +3 -1
- package/dist/maps/column-navigation/mapbox/state.cjs.map +1 -1
- package/dist/maps/column-navigation/svg/index.cjs +9 -7
- package/dist/maps/column-navigation/svg/index.cjs.map +1 -1
- package/dist/maps/column-navigation/svg/layers.cjs +16 -13
- package/dist/maps/column-navigation/svg/layers.cjs.map +1 -1
- package/dist/notes.cjs +5 -3
- package/dist/notes.cjs.map +1 -1
- package/dist/section.cjs +3 -1
- package/dist/section.cjs.map +1 -1
- package/dist/unit-details/modal-panel.cjs +6 -4
- package/dist/unit-details/modal-panel.cjs.map +1 -1
- package/dist/unit-details/panel.cjs +8 -5
- package/dist/unit-details/panel.cjs.map +1 -1
- package/dist/unit-details/popover.cjs +5 -2
- package/dist/unit-details/popover.cjs.map +1 -1
- package/dist/unit-details/popover.module.sass.cjs +1 -2
- package/dist/unit-details/popover.module.sass.cjs.map +1 -1
- package/dist/units/boxes.cjs +5 -2
- package/dist/units/boxes.cjs.map +1 -1
- package/dist/units/colors.cjs +3 -1
- package/dist/units/colors.cjs.map +1 -1
- package/dist/units/composite.cjs +1 -1
- package/dist/units/composite.cjs.map +1 -1
- package/dist/units/composite.module.sass.cjs +1 -2
- package/dist/units/composite.module.sass.cjs.map +1 -1
- package/dist/units/index.cjs +10 -8
- package/dist/units/index.cjs.map +1 -1
- package/dist/units/names.cjs +7 -4
- package/dist/units/names.cjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format
|
|
|
4
4
|
is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this
|
|
5
5
|
project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [3.0.2] - 2026-01-28
|
|
8
|
+
|
|
9
|
+
Add rollup interop to fix CommonJS dependency linking issues
|
|
10
|
+
|
|
7
11
|
## [3.0.1] - 2026-01-28
|
|
8
12
|
|
|
9
13
|
- Fix CommonJS dependency linking issues
|
package/dist/age-axis.cjs
CHANGED
|
@@ -7,7 +7,9 @@ const ageAxis_module = require("./age-axis.module.sass.cjs");
|
|
|
7
7
|
const dataComponents = require("@macrostrat/data-components");
|
|
8
8
|
const panel = require("./unit-details/panel.cjs");
|
|
9
9
|
const store = require("./data-provider/store.cjs");
|
|
10
|
-
const
|
|
10
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
11
|
+
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
12
|
+
const h = h__default.default.styled(ageAxis_module.default);
|
|
11
13
|
function VerticalAxisLabel(props) {
|
|
12
14
|
const { label = "Age", unit = "Ma", className, height } = props;
|
|
13
15
|
return h(
|
package/dist/age-axis.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age-axis.cjs","sources":["../src/age-axis.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n SVG,\n ColumnAxis,\n ColumnContext,\n ColumnAxisType,\n AgeAxis,\n} from \"@macrostrat/column-components\";\nimport { useContext } from \"react\";\nimport styles from \"./age-axis.module.sass\";\nimport { useCompositeScale, useMacrostratColumnData } from \"./data-provider\";\nimport { Parenthetical } from \"@macrostrat/data-components\";\nimport { AgeLabel } from \"./unit-details\";\nimport { PackageScaleLayoutData } from \"./prepare-units\";\n\nconst h = hyper.styled(styles);\n\nconst AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {\n const { pixelHeight } = useContext(ColumnContext);\n // A tick roughly every 40 pixels\n let v = Math.max(Math.round(pixelHeight / tickSpacing), 1);\n\n return h(\"g.axis\", { transform: \"translate(20 0)\" }, [\n h(ColumnAxis, {\n ticks: v,\n showDomain,\n }),\n ]);\n};\n\nexport function VerticalAxisLabel(props) {\n const { label = \"Age\", unit = \"Ma\", className, height } = props;\n return h(\n \"div.column-axis-label.age-axis-label\",\n { className, style: { height } },\n [\n label,\n \" \",\n h.if(unit)(Parenthetical, { className: \"age-axis-unit\" }, unit),\n ],\n );\n}\n\ninterface CompositeAgeAxisProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CompositeAgeAxis(rest: CompositeAgeAxisProps) {\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n return {\n key: `section-${section.section_id}`,\n ...section.scaleInfo,\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport function ApproximateHeightAxis(rest: CompositeAgeAxisProps) {\n /** Axis to show approximate height based on dynamic column scales */\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n const { scaleInfo } = section;\n if (scaleInfo.heightScale == null) {\n throw new Error(\"No height scale available for section\");\n }\n return {\n key: `section-${section.section_id}`,\n ...scaleInfo,\n scale: scaleInfo.heightScale, // Use height scale instead of age scale\n // This only works with dynamic columns\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n axisLabel: \"Approx. height\",\n axisUnit: \"m\",\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport interface CompositeStratigraphicScaleInfo extends CompositeAgeAxisProps {\n axisType: ColumnAxisType;\n axisLabel?: string;\n axisUnit?: string;\n totalHeight: number;\n packages: PackageScaleLayoutData[];\n}\n\nexport function CompositeAgeAxisCore(props: CompositeStratigraphicScaleInfo) {\n const { axisType, axisLabel, axisUnit, totalHeight, packages, ...rest } =\n props;\n\n if (axisType == ColumnAxisType.ORDINAL) {\n return null;\n }\n\n let _axisLabel: string = axisLabel ?? \"Age\";\n let _axisUnit = axisUnit ?? \"Ma\";\n if (axisType == ColumnAxisType.DEPTH) {\n _axisLabel = \"Depth\";\n _axisUnit = \"m\";\n } else if (axisType == ColumnAxisType.HEIGHT) {\n _axisLabel = \"Height\";\n _axisUnit = \"m\";\n }\n\n return h(\"div.composite-age-axis\", rest, [\n h(VerticalAxisLabel, {\n label: _axisLabel,\n unit: _axisUnit,\n height: totalHeight,\n }),\n h(\n SVG,\n {\n className: \"age-axis-column\",\n style: { width: `22px`, height: `${totalHeight}px` },\n width: 22,\n height: totalHeight,\n },\n packages.map((group, i) => {\n const { key, scale } = group;\n\n return h(AgeAxis, {\n key,\n className: \"age-axis\",\n scale,\n tickSizeOuter: 3,\n });\n }),\n ),\n ]);\n}\n\nexport function AgeCursor({ age }) {\n /** A cursor that shows the age at a specific point on the age axis. */\n const scale = useCompositeScale();\n const heightPx = scale(age);\n\n if (age == null || heightPx == null) {\n return null;\n }\n\n return h(\n \"div.age-cursor\",\n {\n style: {\n top: heightPx,\n },\n },\n [h(\"div.line\"), h(AgeLabel, { age, className: \"label\" })],\n );\n}\n"],"names":["hyper","styles","Parenthetical","useMacrostratColumnData","ColumnAxisType","SVG","AgeAxis","useCompositeScale","AgeLabel"],"mappings":"
|
|
1
|
+
{"version":3,"file":"age-axis.cjs","sources":["../src/age-axis.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n SVG,\n ColumnAxis,\n ColumnContext,\n ColumnAxisType,\n AgeAxis,\n} from \"@macrostrat/column-components\";\nimport { useContext } from \"react\";\nimport styles from \"./age-axis.module.sass\";\nimport { useCompositeScale, useMacrostratColumnData } from \"./data-provider\";\nimport { Parenthetical } from \"@macrostrat/data-components\";\nimport { AgeLabel } from \"./unit-details\";\nimport { PackageScaleLayoutData } from \"./prepare-units\";\n\nconst h = hyper.styled(styles);\n\nconst AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {\n const { pixelHeight } = useContext(ColumnContext);\n // A tick roughly every 40 pixels\n let v = Math.max(Math.round(pixelHeight / tickSpacing), 1);\n\n return h(\"g.axis\", { transform: \"translate(20 0)\" }, [\n h(ColumnAxis, {\n ticks: v,\n showDomain,\n }),\n ]);\n};\n\nexport function VerticalAxisLabel(props) {\n const { label = \"Age\", unit = \"Ma\", className, height } = props;\n return h(\n \"div.column-axis-label.age-axis-label\",\n { className, style: { height } },\n [\n label,\n \" \",\n h.if(unit)(Parenthetical, { className: \"age-axis-unit\" }, unit),\n ],\n );\n}\n\ninterface CompositeAgeAxisProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CompositeAgeAxis(rest: CompositeAgeAxisProps) {\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n return {\n key: `section-${section.section_id}`,\n ...section.scaleInfo,\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport function ApproximateHeightAxis(rest: CompositeAgeAxisProps) {\n /** Axis to show approximate height based on dynamic column scales */\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n const { scaleInfo } = section;\n if (scaleInfo.heightScale == null) {\n throw new Error(\"No height scale available for section\");\n }\n return {\n key: `section-${section.section_id}`,\n ...scaleInfo,\n scale: scaleInfo.heightScale, // Use height scale instead of age scale\n // This only works with dynamic columns\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n axisLabel: \"Approx. height\",\n axisUnit: \"m\",\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport interface CompositeStratigraphicScaleInfo extends CompositeAgeAxisProps {\n axisType: ColumnAxisType;\n axisLabel?: string;\n axisUnit?: string;\n totalHeight: number;\n packages: PackageScaleLayoutData[];\n}\n\nexport function CompositeAgeAxisCore(props: CompositeStratigraphicScaleInfo) {\n const { axisType, axisLabel, axisUnit, totalHeight, packages, ...rest } =\n props;\n\n if (axisType == ColumnAxisType.ORDINAL) {\n return null;\n }\n\n let _axisLabel: string = axisLabel ?? \"Age\";\n let _axisUnit = axisUnit ?? \"Ma\";\n if (axisType == ColumnAxisType.DEPTH) {\n _axisLabel = \"Depth\";\n _axisUnit = \"m\";\n } else if (axisType == ColumnAxisType.HEIGHT) {\n _axisLabel = \"Height\";\n _axisUnit = \"m\";\n }\n\n return h(\"div.composite-age-axis\", rest, [\n h(VerticalAxisLabel, {\n label: _axisLabel,\n unit: _axisUnit,\n height: totalHeight,\n }),\n h(\n SVG,\n {\n className: \"age-axis-column\",\n style: { width: `22px`, height: `${totalHeight}px` },\n width: 22,\n height: totalHeight,\n },\n packages.map((group, i) => {\n const { key, scale } = group;\n\n return h(AgeAxis, {\n key,\n className: \"age-axis\",\n scale,\n tickSizeOuter: 3,\n });\n }),\n ),\n ]);\n}\n\nexport function AgeCursor({ age }) {\n /** A cursor that shows the age at a specific point on the age axis. */\n const scale = useCompositeScale();\n const heightPx = scale(age);\n\n if (age == null || heightPx == null) {\n return null;\n }\n\n return h(\n \"div.age-cursor\",\n {\n style: {\n top: heightPx,\n },\n },\n [h(\"div.line\"), h(AgeLabel, { age, className: \"label\" })],\n );\n}\n"],"names":["hyper","styles","Parenthetical","useMacrostratColumnData","ColumnAxisType","SVG","AgeAxis","useCompositeScale","AgeLabel"],"mappings":"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"}
|
|
@@ -5,7 +5,9 @@ const ageModelOverlay_module = require("./age-model-overlay.module.sass.cjs");
|
|
|
5
5
|
const uiComponents = require("@macrostrat/ui-components");
|
|
6
6
|
const dynamicScales = require("./prepare-units/dynamic-scales.cjs");
|
|
7
7
|
const store = require("./data-provider/store.cjs");
|
|
8
|
-
const
|
|
8
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
9
|
+
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
10
|
+
const h = h__default.default.styled(ageModelOverlay_module);
|
|
9
11
|
function BoundaryAgeModelOverlay() {
|
|
10
12
|
const col_id = store.useMacrostratUnits()?.[0]?.col_id;
|
|
11
13
|
const scale = store.useCompositeScale();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age-model-overlay.cjs","sources":["../src/age-model-overlay.ts"],"sourcesContent":["/** An in-development overlay for a column's age model.\n *\n * Age model info:\n * {\n * \"boundary_id\": 8049,\n * \"col_id\": 432,\n * \"section_id\": 3104,\n * \"interval_id\": 268,\n * \"interval_name\": \"Calymmian\",\n * \"age_bottom\": 1600,\n * \"age_top\": 1400,\n * \"rel_position\": 0.85,\n * \"model_age\": 1430,\n * \"boundary_status\": \"absolute\",\n * \"boundary_type\": \"\",\n * \"boundary_position\": null,\n * \"unit_below\": 11541,\n * \"unit_above\": 0,\n * \"ref_id\": 217\n * },\n *\n * */\n\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./age-model-overlay.module.sass\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport { useCompositeScale, useMacrostratUnits } from \"./data-provider\";\nimport { buildColumnSurfaces } from \"./prepare-units/dynamic-scales\";\nimport { ExtUnit } from \"./prepare-units\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nconst h = hyper.styled(styles);\n\ninterface AgeModelSurface {\n boundary_id: number;\n col_id: number;\n section_id: number;\n interval_id: number;\n interval_name: string;\n age_bottom: number;\n age_top: number;\n rel_position: number;\n model_age: number;\n boundary_status: \"absolute\" | \"relative\" | \"modeled\";\n boundary_type: string;\n boundary_position: null | number;\n unit_below: number;\n unit_above: number;\n ref_id: number;\n}\n\nexport function BoundaryAgeModelOverlay() {\n const col_id = (useMacrostratUnits() as ExtUnit[])?.[0]?.col_id;\n const scale = useCompositeScale();\n\n const ageModel = useAPIResult(\n \"https://dev.macrostrat.org/api/v2/age_model\",\n { col_id },\n (res) => res.success.data,\n );\n\n if (ageModel == null) {\n return null;\n }\n\n return h(\n \"div.boundary-age-model\",\n ageModel.map((surface) => {\n const height = scale(surface.model_age);\n\n return h(\"div.boundary-age-model-surface\", {\n key: surface.boundary_id,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n\nexport function ComputedSurfacesOverlay() {\n /** Overlay showing age surfaces. This is like the boundary age model overlay but\n * it is computed on the fly from unit tops and bottoms.\n */\n const units = useMacrostratUnits() as UnitLong[];\n const surfaces = buildColumnSurfaces(units);\n const scale = useCompositeScale();\n\n return h(\n \"div.boundary-age-model\",\n surfaces.map((surface) => {\n const height = scale(surface.age);\n return h(\"div.boundary-age-model-surface\", {\n key: surface.index,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n"],"names":["hyper","styles","useMacrostratUnits","useCompositeScale","useAPIResult","buildColumnSurfaces"],"mappings":"
|
|
1
|
+
{"version":3,"file":"age-model-overlay.cjs","sources":["../src/age-model-overlay.ts"],"sourcesContent":["/** An in-development overlay for a column's age model.\n *\n * Age model info:\n * {\n * \"boundary_id\": 8049,\n * \"col_id\": 432,\n * \"section_id\": 3104,\n * \"interval_id\": 268,\n * \"interval_name\": \"Calymmian\",\n * \"age_bottom\": 1600,\n * \"age_top\": 1400,\n * \"rel_position\": 0.85,\n * \"model_age\": 1430,\n * \"boundary_status\": \"absolute\",\n * \"boundary_type\": \"\",\n * \"boundary_position\": null,\n * \"unit_below\": 11541,\n * \"unit_above\": 0,\n * \"ref_id\": 217\n * },\n *\n * */\n\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./age-model-overlay.module.sass\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport { useCompositeScale, useMacrostratUnits } from \"./data-provider\";\nimport { buildColumnSurfaces } from \"./prepare-units/dynamic-scales\";\nimport { ExtUnit } from \"./prepare-units\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nconst h = hyper.styled(styles);\n\ninterface AgeModelSurface {\n boundary_id: number;\n col_id: number;\n section_id: number;\n interval_id: number;\n interval_name: string;\n age_bottom: number;\n age_top: number;\n rel_position: number;\n model_age: number;\n boundary_status: \"absolute\" | \"relative\" | \"modeled\";\n boundary_type: string;\n boundary_position: null | number;\n unit_below: number;\n unit_above: number;\n ref_id: number;\n}\n\nexport function BoundaryAgeModelOverlay() {\n const col_id = (useMacrostratUnits() as ExtUnit[])?.[0]?.col_id;\n const scale = useCompositeScale();\n\n const ageModel = useAPIResult(\n \"https://dev.macrostrat.org/api/v2/age_model\",\n { col_id },\n (res) => res.success.data,\n );\n\n if (ageModel == null) {\n return null;\n }\n\n return h(\n \"div.boundary-age-model\",\n ageModel.map((surface) => {\n const height = scale(surface.model_age);\n\n return h(\"div.boundary-age-model-surface\", {\n key: surface.boundary_id,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n\nexport function ComputedSurfacesOverlay() {\n /** Overlay showing age surfaces. This is like the boundary age model overlay but\n * it is computed on the fly from unit tops and bottoms.\n */\n const units = useMacrostratUnits() as UnitLong[];\n const surfaces = buildColumnSurfaces(units);\n const scale = useCompositeScale();\n\n return h(\n \"div.boundary-age-model\",\n surfaces.map((surface) => {\n const height = scale(surface.age);\n return h(\"div.boundary-age-model-surface\", {\n key: surface.index,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n"],"names":["hyper","styles","useMacrostratUnits","useCompositeScale","useAPIResult","buildColumnSurfaces"],"mappings":";;;;;;;;;AA8BA,MAAM,IAAIA,WAAAA,QAAM,OAAOC,sBAAM;AAoBtB,SAAS,0BAA0B;AACxC,QAAM,SAAUC,MAAAA,uBAAqC,CAAC,GAAG;AACzD,QAAM,QAAQC,MAAAA,kBAAA;AAEd,QAAM,WAAWC,aAAAA;AAAAA,IACf;AAAA,IACA,EAAE,OAAA;AAAA,IACF,CAAC,QAAQ,IAAI,QAAQ;AAAA,EAAA;AAGvB,MAAI,YAAY,MAAM;AACpB,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA,SAAS,IAAI,CAAC,YAAY;AACxB,YAAM,SAAS,MAAM,QAAQ,SAAS;AAEtC,aAAO,EAAE,kCAAkC;AAAA,QACzC,KAAK,QAAQ;AAAA,QACb,OAAO,EAAE,KAAK,GAAG,MAAM,KAAA;AAAA,MAAK,CAC7B;AAAA,IACH,CAAC;AAAA,EAAA;AAEL;AAEO,SAAS,0BAA0B;AAIxC,QAAM,QAAQF,MAAAA,mBAAA;AACd,QAAM,WAAWG,cAAAA,oBAAoB,KAAK;AAC1C,QAAM,QAAQF,MAAAA,kBAAA;AAEd,SAAO;AAAA,IACL;AAAA,IACA,SAAS,IAAI,CAAC,YAAY;AACxB,YAAM,SAAS,MAAM,QAAQ,GAAG;AAChC,aAAO,EAAE,kCAAkC;AAAA,QACzC,KAAK,QAAQ;AAAA,QACb,OAAO,EAAE,KAAK,GAAG,MAAM,KAAA;AAAA,MAAK,CAC7B;AAAA,IACH,CAAC;AAAA,EAAA;AAEL;;;"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
2
|
const styles = {
|
|
4
3
|
"boundary-age-model": "_boundary-age-model_16scl_1",
|
|
5
4
|
"boundary-age-model-surface": "_boundary-age-model-surface_16scl_8"
|
|
6
5
|
};
|
|
7
|
-
exports
|
|
6
|
+
module.exports = styles;
|
|
8
7
|
//# sourceMappingURL=age-model-overlay.module.sass.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"age-model-overlay.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"age-model-overlay.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/dist/column.cjs
CHANGED
|
@@ -17,6 +17,8 @@ const store = require("./data-provider/store.cjs");
|
|
|
17
17
|
const popover = require("./unit-details/popover.cjs");
|
|
18
18
|
const unitSelection = require("./data-provider/unit-selection.cjs");
|
|
19
19
|
const panel = require("./unit-details/panel.cjs");
|
|
20
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
21
|
+
const classNames__default = /* @__PURE__ */ _interopDefault(classNames);
|
|
20
22
|
const h = h$1.hyperStyled(column_module.default);
|
|
21
23
|
function Column(props) {
|
|
22
24
|
const {
|
|
@@ -211,7 +213,7 @@ function ColumnContainer(props) {
|
|
|
211
213
|
const { className, ...rest } = props;
|
|
212
214
|
const darkMode = uiComponents.useDarkMode();
|
|
213
215
|
return h(uiComponents.Box, {
|
|
214
|
-
className:
|
|
216
|
+
className: classNames__default.default(
|
|
215
217
|
className,
|
|
216
218
|
{
|
|
217
219
|
"dark-mode": darkMode?.isEnabled ?? false
|
package/dist/column.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.cjs","sources":["../src/column.ts"],"sourcesContent":["import { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { hyperStyled } from \"@macrostrat/hyper\";\nimport {\n Box,\n extractPadding,\n Padding,\n useDarkMode,\n} from \"@macrostrat/ui-components\";\nimport classNames from \"classnames\";\nimport {\n HTMLAttributes,\n useCallback,\n CSSProperties,\n ComponentType,\n} from \"react\";\nimport styles from \"./column.module.sass\";\nimport { UnitComponent } from \"./units\";\nimport {\n UnitKeyboardNavigation,\n useColumnRef,\n useUnitSelectionDispatch,\n} from \"./data-provider\";\n\nimport {\n Identifier,\n ReferencesField,\n UnitSelectionPopover,\n} from \"./unit-details\";\nimport {\n MacrostratColumnDataProvider,\n useCompositeScale,\n useMacrostratColumnData,\n} from \"./data-provider\";\nimport {\n SectionSharedProps,\n CompositeTimescale,\n SectionsColumn,\n} from \"./section\";\nimport { ApproximateHeightAxis, CompositeAgeAxis } from \"./age-axis\";\nimport {\n MergeSectionsMode,\n usePreparedColumnUnits,\n HybridScaleType,\n ColumnHeightScaleOptions,\n} from \"./prepare-units\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { NonIdealState } from \"@blueprintjs/core\";\nimport { DataField } from \"@macrostrat/data-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\n\nconst h = hyperStyled(styles);\n\ninterface BaseColumnProps extends Omit<\n SectionSharedProps,\n \"unconformityLabels\"\n> {\n className?: string;\n showLabelColumn?: boolean;\n keyboardNavigation?: boolean;\n showLabels?: boolean;\n maxInternalColumns?: number;\n // Timescale properties\n showTimescale?: boolean;\n timescaleLevels?: number | [number, number];\n unconformityLabels?: boolean | UnconformityLabelPlacement;\n onMouseOver?: (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n ) => void;\n}\n\nexport type UnconformityLabelPlacement = \"minimal\" | \"prominent\" | \"none\";\n\nexport interface ColumnProps\n extends Padding, BaseColumnProps, ColumnHeightScaleOptions {\n // Macrostrat units\n units: UnitLong[];\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n showUnitPopover?: boolean;\n allowUnitSelection?: boolean;\n selectedUnit?: number | null;\n onUnitSelected?: (unitID: number | null, unit: any) => void;\n // Unconformity height in pixels\n unconformityHeight?: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport function Column(props: ColumnProps) {\n const {\n showUnitPopover = false,\n keyboardNavigation = false,\n mergeSections,\n onUnitSelected,\n selectedUnit,\n children,\n units: rawUnits,\n t_age,\n b_age,\n t_pos,\n b_pos,\n unconformityHeight = 30,\n targetUnitHeight = 20,\n pixelScale,\n minPixelScale = 0.2,\n minSectionHeight = 50,\n collapseSmallUnconformities = true,\n allowUnitSelection = false,\n hybridScale,\n scale,\n axisType,\n ...rest\n } = props;\n\n /* Make pixelScale and targetUnitHeight mutually exclusive. PixelScale implies\n * standardization of scales in all sections */\n let _targetUnitHeight = targetUnitHeight;\n let _minSectionHeight = minSectionHeight;\n let _minPixelScale = minPixelScale;\n if (pixelScale != null) {\n _targetUnitHeight = null;\n _minSectionHeight = 0;\n _minPixelScale = pixelScale;\n }\n\n // Handle special cases for hybrid scales (WIP, we need to regularize this)\n let _axisType = axisType ?? ColumnAxisType.AGE;\n let ageAxisComponent = CompositeAgeAxis;\n if (\n hybridScale?.type === HybridScaleType.ApproximateHeight &&\n _axisType != ColumnAxisType.AGE\n ) {\n // Use approximate height axis for non-age columns if a non-age axis type is requested\n ageAxisComponent = ApproximateHeightAxis;\n _axisType = ColumnAxisType.AGE;\n }\n\n const { sections, units, totalHeight } = usePreparedColumnUnits(rawUnits, {\n axisType: _axisType,\n t_age,\n b_age,\n t_pos,\n b_pos,\n mergeSections,\n targetUnitHeight: _targetUnitHeight,\n unconformityHeight,\n pixelScale,\n minPixelScale: _minPixelScale,\n minSectionHeight: _minSectionHeight,\n collapseSmallUnconformities,\n // TODO: consider unifying scale and hybridScale options\n scale,\n hybridScale,\n });\n\n if (sections.length === 0) {\n return h(\n \"div.column-container.empty\",\n h(NonIdealState, {\n title: \"Empty column\",\n description: \"No sections found in this column.\",\n icon: \"warning-sign\",\n }),\n );\n }\n\n return h(\n MacrostratColumnDataProvider,\n {\n units,\n sections,\n totalHeight,\n axisType: _axisType,\n allowUnitSelection: showUnitPopover || allowUnitSelection,\n onUnitSelected,\n selectedUnit,\n },\n h(ColumnInner, { ageAxisComponent, ...rest }, [\n children,\n h.if(showUnitPopover)(UnitSelectionPopover),\n h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),\n ]),\n );\n}\n\ninterface ColumnInnerProps extends BaseColumnProps {\n ageAxisComponent?: ComponentType;\n}\n\nfunction ColumnInner(props: ColumnInnerProps) {\n const padding = extractPadding(props);\n\n // TODO: integrate padding vars more closely with the rest of the spacing (right now padding is a bit ad-hoc)\n const paddingVars: any = {\n \"--column-padding-top\": `${padding.paddingTop}px`,\n \"--column-padding-bottom\": `${padding.paddingBottom}px`,\n \"--column-padding-left\": `${padding.paddingLeft}px`,\n \"--column-padding-right\": `${padding.paddingRight}px`,\n };\n\n const {\n unitComponent = UnitComponent,\n unconformityLabels = \"minimal\",\n showLabels = true,\n width: _width = 300,\n columnWidth: _columnWidth = 150,\n showLabelColumn: _showLabelColumn = true,\n className,\n clipUnits = false,\n children,\n showTimescale,\n timescaleLevels,\n maxInternalColumns,\n onMouseOver,\n ageAxisComponent = CompositeAgeAxis,\n } = props;\n\n const { axisType } = useMacrostratColumnData();\n\n const columnRef = useColumnRef();\n\n // Coalesce unconformity label setting to a boolean\n let _timescaleUnconformityLabels = false;\n let _sectionUnconformityLabels = false;\n if (unconformityLabels === true || unconformityLabels === \"prominent\") {\n _sectionUnconformityLabels = true;\n } else if (unconformityLabels === \"minimal\") {\n _timescaleUnconformityLabels = true;\n }\n\n let width = _width;\n let columnWidth = _columnWidth;\n if (columnWidth > width) {\n columnWidth = width;\n }\n let showLabelColumn = _showLabelColumn;\n if (columnWidth > width - 10) {\n showLabelColumn = false;\n }\n\n let _showTimescale = showTimescale ?? true;\n if (timescaleLevels != null) {\n _showTimescale = true;\n }\n _showTimescale = axisType == ColumnAxisType.AGE && _showTimescale;\n\n return h(\n ColumnContainer,\n {\n ...useMouseEventHandlers(onMouseOver),\n style: paddingVars,\n className,\n },\n h(\"div.column\", { ref: columnRef }, [\n h(ageAxisComponent),\n h.if(_showTimescale)(CompositeTimescale, {\n levels: timescaleLevels,\n unconformityLabels: _timescaleUnconformityLabels,\n }),\n h(SectionsColumn, {\n unitComponent,\n showLabels,\n width,\n columnWidth,\n showLabelColumn,\n clipUnits,\n unconformityLabels: _sectionUnconformityLabels,\n maxInternalColumns,\n }),\n children,\n ]),\n );\n}\n\ntype ColumnMouseOverHandler = (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n) => void;\n\nfunction useMouseEventHandlers(\n _onMouseOver: ColumnMouseOverHandler | null = null,\n) {\n /** Click event handler */\n\n // Click handler for unit selection\n const dispatch = useUnitSelectionDispatch();\n const onClick = useCallback(\n (evt) => {\n dispatch?.(null, null);\n },\n [dispatch],\n );\n\n /** Hover event handlers */\n const scale = useCompositeScale();\n\n const onMouseOver = useCallback(\n (evt) => {\n const height = scale.invert(\n evt.clientY - evt.currentTarget.getBoundingClientRect().top,\n );\n _onMouseOver?.(null, height, evt);\n },\n [scale, _onMouseOver],\n );\n\n const onMouseOut = useCallback(() => {\n _onMouseOver?.(null, null, null);\n }, [_onMouseOver]);\n\n if (_onMouseOver == null) {\n return {\n onClick,\n onMouseOver: undefined,\n onMouseMove: undefined,\n onMouseOut: undefined,\n };\n }\n\n return { onMouseOver, onMouseMove: onMouseOver, onMouseOut, onClick };\n}\n\nexport interface ColumnContainerProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ColumnContainer(props: ColumnContainerProps) {\n const { className, ...rest } = props;\n const darkMode = useDarkMode();\n\n return h(Box, {\n className: classNames(\n className,\n {\n \"dark-mode\": darkMode?.isEnabled ?? false,\n },\n \"column-container\",\n ),\n ...rest,\n });\n}\n\nexport function ColumnBasicInfo({\n data,\n showColumnID = true,\n showReferences = true,\n}) {\n if (data == null) return null;\n return h(\"div.column-info\", [\n h(\"div.column-title-row\", [\n h(\"h2\", data.col_name),\n h.if(showColumnID)(\"h4\", h(Identifier, { id: data.col_id })),\n ]),\n h(DataField, { row: true, label: \"Group\", value: data.col_group }),\n h.if(showReferences)(ReferencesField, {\n refs: data.refs,\n inline: false,\n row: false,\n className: \"column-refs\",\n }),\n ]);\n}\n"],"names":["hyperStyled","styles","ColumnAxisType","CompositeAgeAxis","HybridScaleType","ApproximateHeightAxis","usePreparedColumnUnits","NonIdealState","MacrostratColumnDataProvider","UnitSelectionPopover","UnitKeyboardNavigation","extractPadding","UnitComponent","useMacrostratColumnData","useColumnRef","CompositeTimescale","SectionsColumn","useUnitSelectionDispatch","useCallback","useCompositeScale","useDarkMode","Box","Identifier","DataField","ReferencesField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"column.cjs","sources":["../src/column.ts"],"sourcesContent":["import { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { hyperStyled } from \"@macrostrat/hyper\";\nimport {\n Box,\n extractPadding,\n Padding,\n useDarkMode,\n} from \"@macrostrat/ui-components\";\nimport classNames from \"classnames\";\nimport {\n HTMLAttributes,\n useCallback,\n CSSProperties,\n ComponentType,\n} from \"react\";\nimport styles from \"./column.module.sass\";\nimport { UnitComponent } from \"./units\";\nimport {\n UnitKeyboardNavigation,\n useColumnRef,\n useUnitSelectionDispatch,\n} from \"./data-provider\";\n\nimport {\n Identifier,\n ReferencesField,\n UnitSelectionPopover,\n} from \"./unit-details\";\nimport {\n MacrostratColumnDataProvider,\n useCompositeScale,\n useMacrostratColumnData,\n} from \"./data-provider\";\nimport {\n SectionSharedProps,\n CompositeTimescale,\n SectionsColumn,\n} from \"./section\";\nimport { ApproximateHeightAxis, CompositeAgeAxis } from \"./age-axis\";\nimport {\n MergeSectionsMode,\n usePreparedColumnUnits,\n HybridScaleType,\n ColumnHeightScaleOptions,\n} from \"./prepare-units\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { NonIdealState } from \"@blueprintjs/core\";\nimport { DataField } from \"@macrostrat/data-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\n\nconst h = hyperStyled(styles);\n\ninterface BaseColumnProps extends Omit<\n SectionSharedProps,\n \"unconformityLabels\"\n> {\n className?: string;\n showLabelColumn?: boolean;\n keyboardNavigation?: boolean;\n showLabels?: boolean;\n maxInternalColumns?: number;\n // Timescale properties\n showTimescale?: boolean;\n timescaleLevels?: number | [number, number];\n unconformityLabels?: boolean | UnconformityLabelPlacement;\n onMouseOver?: (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n ) => void;\n}\n\nexport type UnconformityLabelPlacement = \"minimal\" | \"prominent\" | \"none\";\n\nexport interface ColumnProps\n extends Padding, BaseColumnProps, ColumnHeightScaleOptions {\n // Macrostrat units\n units: UnitLong[];\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n showUnitPopover?: boolean;\n allowUnitSelection?: boolean;\n selectedUnit?: number | null;\n onUnitSelected?: (unitID: number | null, unit: any) => void;\n // Unconformity height in pixels\n unconformityHeight?: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport function Column(props: ColumnProps) {\n const {\n showUnitPopover = false,\n keyboardNavigation = false,\n mergeSections,\n onUnitSelected,\n selectedUnit,\n children,\n units: rawUnits,\n t_age,\n b_age,\n t_pos,\n b_pos,\n unconformityHeight = 30,\n targetUnitHeight = 20,\n pixelScale,\n minPixelScale = 0.2,\n minSectionHeight = 50,\n collapseSmallUnconformities = true,\n allowUnitSelection = false,\n hybridScale,\n scale,\n axisType,\n ...rest\n } = props;\n\n /* Make pixelScale and targetUnitHeight mutually exclusive. PixelScale implies\n * standardization of scales in all sections */\n let _targetUnitHeight = targetUnitHeight;\n let _minSectionHeight = minSectionHeight;\n let _minPixelScale = minPixelScale;\n if (pixelScale != null) {\n _targetUnitHeight = null;\n _minSectionHeight = 0;\n _minPixelScale = pixelScale;\n }\n\n // Handle special cases for hybrid scales (WIP, we need to regularize this)\n let _axisType = axisType ?? ColumnAxisType.AGE;\n let ageAxisComponent = CompositeAgeAxis;\n if (\n hybridScale?.type === HybridScaleType.ApproximateHeight &&\n _axisType != ColumnAxisType.AGE\n ) {\n // Use approximate height axis for non-age columns if a non-age axis type is requested\n ageAxisComponent = ApproximateHeightAxis;\n _axisType = ColumnAxisType.AGE;\n }\n\n const { sections, units, totalHeight } = usePreparedColumnUnits(rawUnits, {\n axisType: _axisType,\n t_age,\n b_age,\n t_pos,\n b_pos,\n mergeSections,\n targetUnitHeight: _targetUnitHeight,\n unconformityHeight,\n pixelScale,\n minPixelScale: _minPixelScale,\n minSectionHeight: _minSectionHeight,\n collapseSmallUnconformities,\n // TODO: consider unifying scale and hybridScale options\n scale,\n hybridScale,\n });\n\n if (sections.length === 0) {\n return h(\n \"div.column-container.empty\",\n h(NonIdealState, {\n title: \"Empty column\",\n description: \"No sections found in this column.\",\n icon: \"warning-sign\",\n }),\n );\n }\n\n return h(\n MacrostratColumnDataProvider,\n {\n units,\n sections,\n totalHeight,\n axisType: _axisType,\n allowUnitSelection: showUnitPopover || allowUnitSelection,\n onUnitSelected,\n selectedUnit,\n },\n h(ColumnInner, { ageAxisComponent, ...rest }, [\n children,\n h.if(showUnitPopover)(UnitSelectionPopover),\n h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),\n ]),\n );\n}\n\ninterface ColumnInnerProps extends BaseColumnProps {\n ageAxisComponent?: ComponentType;\n}\n\nfunction ColumnInner(props: ColumnInnerProps) {\n const padding = extractPadding(props);\n\n // TODO: integrate padding vars more closely with the rest of the spacing (right now padding is a bit ad-hoc)\n const paddingVars: any = {\n \"--column-padding-top\": `${padding.paddingTop}px`,\n \"--column-padding-bottom\": `${padding.paddingBottom}px`,\n \"--column-padding-left\": `${padding.paddingLeft}px`,\n \"--column-padding-right\": `${padding.paddingRight}px`,\n };\n\n const {\n unitComponent = UnitComponent,\n unconformityLabels = \"minimal\",\n showLabels = true,\n width: _width = 300,\n columnWidth: _columnWidth = 150,\n showLabelColumn: _showLabelColumn = true,\n className,\n clipUnits = false,\n children,\n showTimescale,\n timescaleLevels,\n maxInternalColumns,\n onMouseOver,\n ageAxisComponent = CompositeAgeAxis,\n } = props;\n\n const { axisType } = useMacrostratColumnData();\n\n const columnRef = useColumnRef();\n\n // Coalesce unconformity label setting to a boolean\n let _timescaleUnconformityLabels = false;\n let _sectionUnconformityLabels = false;\n if (unconformityLabels === true || unconformityLabels === \"prominent\") {\n _sectionUnconformityLabels = true;\n } else if (unconformityLabels === \"minimal\") {\n _timescaleUnconformityLabels = true;\n }\n\n let width = _width;\n let columnWidth = _columnWidth;\n if (columnWidth > width) {\n columnWidth = width;\n }\n let showLabelColumn = _showLabelColumn;\n if (columnWidth > width - 10) {\n showLabelColumn = false;\n }\n\n let _showTimescale = showTimescale ?? true;\n if (timescaleLevels != null) {\n _showTimescale = true;\n }\n _showTimescale = axisType == ColumnAxisType.AGE && _showTimescale;\n\n return h(\n ColumnContainer,\n {\n ...useMouseEventHandlers(onMouseOver),\n style: paddingVars,\n className,\n },\n h(\"div.column\", { ref: columnRef }, [\n h(ageAxisComponent),\n h.if(_showTimescale)(CompositeTimescale, {\n levels: timescaleLevels,\n unconformityLabels: _timescaleUnconformityLabels,\n }),\n h(SectionsColumn, {\n unitComponent,\n showLabels,\n width,\n columnWidth,\n showLabelColumn,\n clipUnits,\n unconformityLabels: _sectionUnconformityLabels,\n maxInternalColumns,\n }),\n children,\n ]),\n );\n}\n\ntype ColumnMouseOverHandler = (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n) => void;\n\nfunction useMouseEventHandlers(\n _onMouseOver: ColumnMouseOverHandler | null = null,\n) {\n /** Click event handler */\n\n // Click handler for unit selection\n const dispatch = useUnitSelectionDispatch();\n const onClick = useCallback(\n (evt) => {\n dispatch?.(null, null);\n },\n [dispatch],\n );\n\n /** Hover event handlers */\n const scale = useCompositeScale();\n\n const onMouseOver = useCallback(\n (evt) => {\n const height = scale.invert(\n evt.clientY - evt.currentTarget.getBoundingClientRect().top,\n );\n _onMouseOver?.(null, height, evt);\n },\n [scale, _onMouseOver],\n );\n\n const onMouseOut = useCallback(() => {\n _onMouseOver?.(null, null, null);\n }, [_onMouseOver]);\n\n if (_onMouseOver == null) {\n return {\n onClick,\n onMouseOver: undefined,\n onMouseMove: undefined,\n onMouseOut: undefined,\n };\n }\n\n return { onMouseOver, onMouseMove: onMouseOver, onMouseOut, onClick };\n}\n\nexport interface ColumnContainerProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ColumnContainer(props: ColumnContainerProps) {\n const { className, ...rest } = props;\n const darkMode = useDarkMode();\n\n return h(Box, {\n className: classNames(\n className,\n {\n \"dark-mode\": darkMode?.isEnabled ?? false,\n },\n \"column-container\",\n ),\n ...rest,\n });\n}\n\nexport function ColumnBasicInfo({\n data,\n showColumnID = true,\n showReferences = true,\n}) {\n if (data == null) return null;\n return h(\"div.column-info\", [\n h(\"div.column-title-row\", [\n h(\"h2\", data.col_name),\n h.if(showColumnID)(\"h4\", h(Identifier, { id: data.col_id })),\n ]),\n h(DataField, { row: true, label: \"Group\", value: data.col_group }),\n h.if(showReferences)(ReferencesField, {\n refs: data.refs,\n inline: false,\n row: false,\n className: \"column-refs\",\n }),\n ]);\n}\n"],"names":["hyperStyled","styles","ColumnAxisType","CompositeAgeAxis","HybridScaleType","ApproximateHeightAxis","usePreparedColumnUnits","NonIdealState","MacrostratColumnDataProvider","UnitSelectionPopover","UnitKeyboardNavigation","extractPadding","UnitComponent","useMacrostratColumnData","useColumnRef","CompositeTimescale","SectionsColumn","useUnitSelectionDispatch","useCallback","useCompositeScale","useDarkMode","Box","classNames","Identifier","DataField","ReferencesField"],"mappings":"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"}
|
|
@@ -16,7 +16,10 @@ const store = require("../data-provider/store.cjs");
|
|
|
16
16
|
const panel = require("../unit-details/panel.cjs");
|
|
17
17
|
const popover = require("../unit-details/popover.cjs");
|
|
18
18
|
const unitSelection = require("../data-provider/unit-selection.cjs");
|
|
19
|
-
const
|
|
19
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
20
|
+
const h__default = /* @__PURE__ */ _interopDefault(h$1);
|
|
21
|
+
const classNames__default = /* @__PURE__ */ _interopDefault(classNames);
|
|
22
|
+
const h = h__default.default.styled(main_module.default);
|
|
20
23
|
function MainChartArea({ children }) {
|
|
21
24
|
const columnRef = unitSelection.useColumnRef();
|
|
22
25
|
return h("div.main-chart", { ref: columnRef }, children);
|
|
@@ -55,7 +58,7 @@ function CorrelationChart({
|
|
|
55
58
|
return data?.map((d0) => d0.units).flat() ?? [];
|
|
56
59
|
}, [data]);
|
|
57
60
|
const inDarkMode = uiComponents.useInDarkMode();
|
|
58
|
-
const className =
|
|
61
|
+
const className = classNames__default.default({
|
|
59
62
|
"dark-mode": inDarkMode
|
|
60
63
|
});
|
|
61
64
|
if (chartData == null) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.cjs","sources":["../../src/correlation-chart/main.ts"],"sourcesContent":["/** Correlation chart */\nimport {\n UnitSelectionProvider,\n UnitKeyboardNavigation,\n useUnitSelectionDispatch,\n useColumnRef,\n} from \"../data-provider\";\nimport { UnitDetailsFeature, UnitSelectionPopover } from \"../unit-details\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMemo } from \"react\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { CompositeTimescaleCore } from \"../section\";\nimport classNames from \"classnames\";\nimport {\n findLaterallyExtensiveUnits,\n splitStratIntoBoxes,\n UnitGroupBox,\n CorrelationChartSettings,\n buildCorrelationChartData,\n} from \"./prepare-data\";\nimport {\n CompositeAgeAxisCore,\n CompositeStratigraphicScaleInfo,\n} from \"../age-axis\";\nimport {\n ColumnAxisType,\n ColumnProvider,\n SVG,\n} from \"@macrostrat/column-components\";\nimport { ColoredUnitComponent } from \"../units\";\nimport { UnitBoxes } from \"../units/boxes\";\nimport { ColumnContainer } from \"../column\";\nimport { ColumnData } from \"../data-provider\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport { ExtUnit } from \"../prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface CorrelationChartProps extends CorrelationChartSettings {\n data: ColumnData[];\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n unconformityLabels?: boolean;\n selectedUnit?: number | null;\n showUnitPopover?: boolean;\n unitComponent?: any;\n onUnitSelected?: (unitID: number | null, unit: BaseUnit | null) => void;\n}\n\nfunction MainChartArea({ children }) {\n const columnRef = useColumnRef();\n return h(\"div.main-chart\", { ref: columnRef }, children);\n}\n\nconst unitPopoverFeatures = new Set([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n UnitDetailsFeature.DepthRange,\n UnitDetailsFeature.ColumnName,\n]);\n\nexport function CorrelationChart({\n data,\n columnSpacing = 0,\n columnWidth = 130,\n unconformityLabels = true,\n showUnitPopover = true,\n selectedUnit,\n onUnitSelected,\n unitComponent,\n ...scaleProps\n}: CorrelationChartProps) {\n const defaultScaleProps = {\n targetUnitHeight: 10,\n unconformityHeight: 60,\n minSectionHeight: 60,\n collapseSmallUnconformities: true,\n };\n\n const chartData = useMemo(() => {\n if (!data) return null;\n return buildCorrelationChartData(data, {\n ...defaultScaleProps,\n ...scaleProps,\n });\n }, [data, ...Object.values(scaleProps)]);\n\n // A flattened units array is used to support keyboard navigation\n const units = useMemo(() => {\n return data?.map((d0) => d0.units).flat() ?? [];\n }, [data]);\n\n const inDarkMode = useInDarkMode();\n\n const className = classNames({\n \"dark-mode\": inDarkMode,\n });\n\n if (chartData == null) {\n return null;\n }\n\n const { packages, scaleInfo, nColumns } = chartData;\n\n const mainWidth = (columnWidth + columnSpacing) * nColumns;\n\n return h(\n ColumnContainer,\n { className: \"correlation-diagram\" },\n h(\n UnitSelectionProvider,\n { selectedUnit, onUnitSelected, units },\n h(ChartArea, [\n h(TimescaleColumn, {\n key: \"timescale\",\n scaleInfo,\n unconformityLabels,\n }),\n h(MainChartArea, [\n h(\n SVG,\n {\n className,\n innerWidth: mainWidth,\n height: scaleInfo.totalHeight,\n paddingH: 4,\n },\n packages.map((pkg, i) => {\n const { offset, domain, pixelScale, scale, key } =\n scaleInfo.packages[i];\n return h(Package, {\n columnData: pkg.columnData,\n key,\n columnWidth,\n columnSpacing,\n offset,\n domain,\n pixelScale,\n scale,\n unitComponent,\n });\n }),\n ),\n h.if(showUnitPopover)(UnitSelectionPopover, {\n features: unitPopoverFeatures,\n }),\n // Navigation only works within a column for now...\n h(UnitKeyboardNavigation, { columnData: data }),\n ]),\n ]),\n ),\n );\n}\n\nfunction Package({\n columnData,\n columnSpacing,\n columnWidth,\n unitComponent,\n offset,\n domain,\n pixelScale,\n scale,\n}) {\n return h(\"g.package\", { transform: `translate(0 ${offset})` }, [\n // Disable the SVG overlay for now\n //h(PackageSVGOverlay, { data, columnSpacing }),\n h(\"g.column-units\", [\n columnData.map((data, i) => {\n return h(Column, {\n units: data.units,\n unitComponent,\n width: columnWidth,\n key: i,\n domain,\n pixelScale,\n scale,\n offsetLeft: i * (columnWidth + columnSpacing),\n });\n }),\n ]),\n ]);\n}\n\ninterface ColumnProps {\n units: ExtUnit[];\n unitComponent?: React.FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n offsetLeft?: number;\n domain: [number, number];\n pixelScale: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nfunction Column(props: ColumnProps) {\n const {\n units,\n width = 150,\n offsetLeft,\n domain,\n pixelScale,\n scale,\n unitComponent = ColoredUnitComponent,\n } = props;\n\n const columnWidth = width;\n\n if (units.length == 0) {\n return null;\n }\n\n return h(\n \"g.section\",\n {\n transform: `translate(${offsetLeft} 0)`,\n },\n h(\n ColumnProvider,\n {\n // Need to tighten up types here...\n divisions: units as any[],\n range: domain,\n scale,\n pixelsPerMeter: pixelScale, // Actually pixels per myr\n axisType: ColumnAxisType.AGE,\n },\n h(UnitBoxes, {\n unitComponent,\n unitComponentProps: {\n nColumns: 2,\n width: columnWidth,\n showLabel: false,\n },\n }),\n ),\n );\n}\n\nfunction PackageSVGOverlay({ data, columnWidth = 100, columnSpacing = 0 }) {\n const { b_age, t_age, bestPixelScale, columnData } = data;\n\n const width = (columnWidth + columnSpacing) * columnData.length;\n const height = Math.ceil((b_age - t_age) * bestPixelScale) + 2;\n\n const extensiveUnits = findLaterallyExtensiveUnits(data);\n\n const scale = (val: number) => {\n return (val - t_age) * bestPixelScale;\n };\n\n return h(\n \"div.package-overlay\",\n { style: { width, height } },\n extensiveUnits.map((d) => {\n return h(LaterallyExtensiveUnit, {\n data: d,\n scale,\n pixelScale: bestPixelScale,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction LaterallyExtensiveUnit({ data, scale, pixelScale, columnSpacing }) {\n const { b_age, t_age, strat_name_long, units } = data;\n // Build boxes by column groups\n const boxes: UnitGroupBox[] = splitStratIntoBoxes(data);\n\n return h(\n \"div.laterally-extensive-unit\",\n boxes.map((d, i) => {\n return h(StratColSpan, {\n scale,\n data: d,\n pixelScale,\n key: i,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction StratColSpan({\n data,\n scale,\n columnWidth = 100,\n columnSpacing = 0,\n pixelScale = 1,\n}) {\n const { startCol, endCol, strat_name_long, t_age, b_age } = data;\n const top = scale(t_age);\n const left = startCol * (columnWidth + columnSpacing);\n const width = (endCol - startCol + 1) * (columnWidth + columnSpacing);\n const height = (b_age - t_age) * pixelScale;\n return h(\n \"div.strat-col-span\",\n { style: { top, height, width, left } },\n strat_name_long,\n );\n}\n\nfunction ChartArea({ children }) {\n const setSelectedUnit = useUnitSelectionDispatch();\n\n return h(\n \"div.correlation-chart-inner\",\n {\n onClick() {\n setSelectedUnit(null, null);\n },\n },\n children,\n );\n}\n\ninterface TimescaleColumnProps {\n scaleInfo: CompositeStratigraphicScaleInfo;\n showLabels?: boolean;\n unconformityLabels?: boolean;\n}\n\nfunction TimescaleColumn(props: TimescaleColumnProps) {\n const { scaleInfo, unconformityLabels = true } = props;\n return h(\"div.column-container.age-axis-container\", [\n h(CompositeAgeAxisCore, { ...scaleInfo }),\n h(CompositeTimescaleCore, { ...scaleInfo, unconformityLabels }),\n ]);\n}\n"],"names":["hyper","styles","useColumnRef","UnitDetailsFeature","useMemo","buildCorrelationChartData","useInDarkMode","ColumnContainer","UnitSelectionProvider","SVG","UnitSelectionPopover","UnitKeyboardNavigation","ColoredUnitComponent","ColumnProvider","ColumnAxisType","UnitBoxes","useUnitSelectionDispatch","CompositeAgeAxisCore","CompositeTimescaleCore"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"main.cjs","sources":["../../src/correlation-chart/main.ts"],"sourcesContent":["/** Correlation chart */\nimport {\n UnitSelectionProvider,\n UnitKeyboardNavigation,\n useUnitSelectionDispatch,\n useColumnRef,\n} from \"../data-provider\";\nimport { UnitDetailsFeature, UnitSelectionPopover } from \"../unit-details\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMemo } from \"react\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { CompositeTimescaleCore } from \"../section\";\nimport classNames from \"classnames\";\nimport {\n findLaterallyExtensiveUnits,\n splitStratIntoBoxes,\n UnitGroupBox,\n CorrelationChartSettings,\n buildCorrelationChartData,\n} from \"./prepare-data\";\nimport {\n CompositeAgeAxisCore,\n CompositeStratigraphicScaleInfo,\n} from \"../age-axis\";\nimport {\n ColumnAxisType,\n ColumnProvider,\n SVG,\n} from \"@macrostrat/column-components\";\nimport { ColoredUnitComponent } from \"../units\";\nimport { UnitBoxes } from \"../units/boxes\";\nimport { ColumnContainer } from \"../column\";\nimport { ColumnData } from \"../data-provider\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport { ExtUnit } from \"../prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface CorrelationChartProps extends CorrelationChartSettings {\n data: ColumnData[];\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n unconformityLabels?: boolean;\n selectedUnit?: number | null;\n showUnitPopover?: boolean;\n unitComponent?: any;\n onUnitSelected?: (unitID: number | null, unit: BaseUnit | null) => void;\n}\n\nfunction MainChartArea({ children }) {\n const columnRef = useColumnRef();\n return h(\"div.main-chart\", { ref: columnRef }, children);\n}\n\nconst unitPopoverFeatures = new Set([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n UnitDetailsFeature.DepthRange,\n UnitDetailsFeature.ColumnName,\n]);\n\nexport function CorrelationChart({\n data,\n columnSpacing = 0,\n columnWidth = 130,\n unconformityLabels = true,\n showUnitPopover = true,\n selectedUnit,\n onUnitSelected,\n unitComponent,\n ...scaleProps\n}: CorrelationChartProps) {\n const defaultScaleProps = {\n targetUnitHeight: 10,\n unconformityHeight: 60,\n minSectionHeight: 60,\n collapseSmallUnconformities: true,\n };\n\n const chartData = useMemo(() => {\n if (!data) return null;\n return buildCorrelationChartData(data, {\n ...defaultScaleProps,\n ...scaleProps,\n });\n }, [data, ...Object.values(scaleProps)]);\n\n // A flattened units array is used to support keyboard navigation\n const units = useMemo(() => {\n return data?.map((d0) => d0.units).flat() ?? [];\n }, [data]);\n\n const inDarkMode = useInDarkMode();\n\n const className = classNames({\n \"dark-mode\": inDarkMode,\n });\n\n if (chartData == null) {\n return null;\n }\n\n const { packages, scaleInfo, nColumns } = chartData;\n\n const mainWidth = (columnWidth + columnSpacing) * nColumns;\n\n return h(\n ColumnContainer,\n { className: \"correlation-diagram\" },\n h(\n UnitSelectionProvider,\n { selectedUnit, onUnitSelected, units },\n h(ChartArea, [\n h(TimescaleColumn, {\n key: \"timescale\",\n scaleInfo,\n unconformityLabels,\n }),\n h(MainChartArea, [\n h(\n SVG,\n {\n className,\n innerWidth: mainWidth,\n height: scaleInfo.totalHeight,\n paddingH: 4,\n },\n packages.map((pkg, i) => {\n const { offset, domain, pixelScale, scale, key } =\n scaleInfo.packages[i];\n return h(Package, {\n columnData: pkg.columnData,\n key,\n columnWidth,\n columnSpacing,\n offset,\n domain,\n pixelScale,\n scale,\n unitComponent,\n });\n }),\n ),\n h.if(showUnitPopover)(UnitSelectionPopover, {\n features: unitPopoverFeatures,\n }),\n // Navigation only works within a column for now...\n h(UnitKeyboardNavigation, { columnData: data }),\n ]),\n ]),\n ),\n );\n}\n\nfunction Package({\n columnData,\n columnSpacing,\n columnWidth,\n unitComponent,\n offset,\n domain,\n pixelScale,\n scale,\n}) {\n return h(\"g.package\", { transform: `translate(0 ${offset})` }, [\n // Disable the SVG overlay for now\n //h(PackageSVGOverlay, { data, columnSpacing }),\n h(\"g.column-units\", [\n columnData.map((data, i) => {\n return h(Column, {\n units: data.units,\n unitComponent,\n width: columnWidth,\n key: i,\n domain,\n pixelScale,\n scale,\n offsetLeft: i * (columnWidth + columnSpacing),\n });\n }),\n ]),\n ]);\n}\n\ninterface ColumnProps {\n units: ExtUnit[];\n unitComponent?: React.FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n offsetLeft?: number;\n domain: [number, number];\n pixelScale: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nfunction Column(props: ColumnProps) {\n const {\n units,\n width = 150,\n offsetLeft,\n domain,\n pixelScale,\n scale,\n unitComponent = ColoredUnitComponent,\n } = props;\n\n const columnWidth = width;\n\n if (units.length == 0) {\n return null;\n }\n\n return h(\n \"g.section\",\n {\n transform: `translate(${offsetLeft} 0)`,\n },\n h(\n ColumnProvider,\n {\n // Need to tighten up types here...\n divisions: units as any[],\n range: domain,\n scale,\n pixelsPerMeter: pixelScale, // Actually pixels per myr\n axisType: ColumnAxisType.AGE,\n },\n h(UnitBoxes, {\n unitComponent,\n unitComponentProps: {\n nColumns: 2,\n width: columnWidth,\n showLabel: false,\n },\n }),\n ),\n );\n}\n\nfunction PackageSVGOverlay({ data, columnWidth = 100, columnSpacing = 0 }) {\n const { b_age, t_age, bestPixelScale, columnData } = data;\n\n const width = (columnWidth + columnSpacing) * columnData.length;\n const height = Math.ceil((b_age - t_age) * bestPixelScale) + 2;\n\n const extensiveUnits = findLaterallyExtensiveUnits(data);\n\n const scale = (val: number) => {\n return (val - t_age) * bestPixelScale;\n };\n\n return h(\n \"div.package-overlay\",\n { style: { width, height } },\n extensiveUnits.map((d) => {\n return h(LaterallyExtensiveUnit, {\n data: d,\n scale,\n pixelScale: bestPixelScale,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction LaterallyExtensiveUnit({ data, scale, pixelScale, columnSpacing }) {\n const { b_age, t_age, strat_name_long, units } = data;\n // Build boxes by column groups\n const boxes: UnitGroupBox[] = splitStratIntoBoxes(data);\n\n return h(\n \"div.laterally-extensive-unit\",\n boxes.map((d, i) => {\n return h(StratColSpan, {\n scale,\n data: d,\n pixelScale,\n key: i,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction StratColSpan({\n data,\n scale,\n columnWidth = 100,\n columnSpacing = 0,\n pixelScale = 1,\n}) {\n const { startCol, endCol, strat_name_long, t_age, b_age } = data;\n const top = scale(t_age);\n const left = startCol * (columnWidth + columnSpacing);\n const width = (endCol - startCol + 1) * (columnWidth + columnSpacing);\n const height = (b_age - t_age) * pixelScale;\n return h(\n \"div.strat-col-span\",\n { style: { top, height, width, left } },\n strat_name_long,\n );\n}\n\nfunction ChartArea({ children }) {\n const setSelectedUnit = useUnitSelectionDispatch();\n\n return h(\n \"div.correlation-chart-inner\",\n {\n onClick() {\n setSelectedUnit(null, null);\n },\n },\n children,\n );\n}\n\ninterface TimescaleColumnProps {\n scaleInfo: CompositeStratigraphicScaleInfo;\n showLabels?: boolean;\n unconformityLabels?: boolean;\n}\n\nfunction TimescaleColumn(props: TimescaleColumnProps) {\n const { scaleInfo, unconformityLabels = true } = props;\n return h(\"div.column-container.age-axis-container\", [\n h(CompositeAgeAxisCore, { ...scaleInfo }),\n h(CompositeTimescaleCore, { ...scaleInfo, unconformityLabels }),\n ]);\n}\n"],"names":["hyper","styles","useColumnRef","UnitDetailsFeature","useMemo","buildCorrelationChartData","useInDarkMode","classNames","ColumnContainer","UnitSelectionProvider","SVG","UnitSelectionPopover","UnitKeyboardNavigation","ColoredUnitComponent","ColumnProvider","ColumnAxisType","UnitBoxes","useUnitSelectionDispatch","CompositeAgeAxisCore","CompositeTimescaleCore"],"mappings":"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"}
|
|
@@ -8,6 +8,9 @@ const fetch = require("./fetch.cjs");
|
|
|
8
8
|
const uiComponents = require("@macrostrat/ui-components");
|
|
9
9
|
const columnComponents = require("@macrostrat/column-components");
|
|
10
10
|
const store = require("./store.cjs");
|
|
11
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
12
|
+
const crossFetch__default = /* @__PURE__ */ _interopDefault(crossFetch);
|
|
13
|
+
const h__default = /* @__PURE__ */ _interopDefault(h);
|
|
11
14
|
function createMacrostratStore(baseURL = "https://macrostrat.org/api/v2") {
|
|
12
15
|
return zustand.create((set, get) => {
|
|
13
16
|
return {
|
|
@@ -20,7 +23,7 @@ function createMacrostratStore(baseURL = "https://macrostrat.org/api/v2") {
|
|
|
20
23
|
return null;
|
|
21
24
|
}
|
|
22
25
|
inFlightRequests.add(url1);
|
|
23
|
-
const res = await
|
|
26
|
+
const res = await crossFetch__default.default(url1, options);
|
|
24
27
|
inFlightRequests.delete(url1);
|
|
25
28
|
return res;
|
|
26
29
|
},
|
|
@@ -273,10 +276,10 @@ const MacrostratDataProviderContext = React.createContext(createMacrostratStore(
|
|
|
273
276
|
function MacrostratDataProvider(props) {
|
|
274
277
|
const { baseURL = "https://dev.macrostrat.org/api/v2", children } = props;
|
|
275
278
|
const [store2] = React.useState(() => createMacrostratStore(baseURL));
|
|
276
|
-
return
|
|
279
|
+
return h__default.default(
|
|
277
280
|
MacrostratAPIProvider,
|
|
278
281
|
{ baseURL },
|
|
279
|
-
|
|
282
|
+
h__default.default(MacrostratDataProviderContext.Provider, { value: store2 }, children)
|
|
280
283
|
);
|
|
281
284
|
}
|
|
282
285
|
function MacrostratAPIProvider({
|
|
@@ -285,7 +288,7 @@ function MacrostratAPIProvider({
|
|
|
285
288
|
baseURL
|
|
286
289
|
}) {
|
|
287
290
|
baseURL ??= useDev ? "https://dev.macrostrat.org/api/v2" : "https://macrostrat.org/api/v2";
|
|
288
|
-
return
|
|
291
|
+
return h__default.default(
|
|
289
292
|
uiComponents.APIProvider,
|
|
290
293
|
{
|
|
291
294
|
baseURL,
|
|
@@ -297,7 +300,7 @@ function MacrostratAPIProvider({
|
|
|
297
300
|
function MacrostratColumnProvider(props) {
|
|
298
301
|
const { axisType } = store.useMacrostratColumnData();
|
|
299
302
|
const { units, domain, pixelScale, scale, children } = props;
|
|
300
|
-
return
|
|
303
|
+
return h__default.default(
|
|
301
304
|
columnComponents.ColumnProvider,
|
|
302
305
|
{
|
|
303
306
|
axisType,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.cjs","sources":["../../src/data-provider/base.ts"],"sourcesContent":["/** Data provider for information that needs to be loaded in bulk for frontend views */\nimport baseFetch from \"cross-fetch\";\nimport { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { create, useStore } from \"zustand\";\nimport {\n ColumnGeoJSONRecord,\n ColumnGeoJSONRecordWithID,\n Environment,\n MacrostratRef,\n StratName,\n Interval,\n} from \"@macrostrat/api-types\";\nimport {\n fetchAllColumns,\n fetchEnvironments,\n fetchIntervals,\n fetchLithologies,\n fetchRefs,\n fetchStratNames,\n type ColumnStatusCode,\n} from \"./fetch\";\nimport { APIProvider } from \"@macrostrat/ui-components\";\nimport { ColumnProvider } from \"@macrostrat/column-components\";\n\nimport { ReactNode } from \"react\";\nimport { useMacrostratColumnData } from \"./store\";\n\nexport interface MacrostratDataProviderProps {\n baseURL: string;\n children: React.ReactNode;\n}\n\ninterface ColumnFootprintsStorage {\n project_id: number;\n // Whether the \"in process\" flag was used\n inProcess: boolean;\n // The column footprints\n columns: ColumnGeoJSONRecordWithID[];\n}\n\ninterface RefsSlice {\n refs: Map<number, MacrostratRef>;\n inFlightRequests: Set<string>; // Track requests to avoid duplicates\n getRefs(ids: number[]): Promise<MacrostratRef[]>;\n}\n\ninterface MacrostratStore extends RefsSlice {\n baseURL: string;\n fetch: any;\n lithologies: Map<number, any> | null;\n getLithologies(ids: number[] | null): Promise<any>;\n intervals: Map<number, any> | null;\n getIntervals(\n ids: number[] | null,\n timescaleID: number | null,\n ): Promise<Interval[]>;\n environments: Map<number, Environment> | null;\n getEnvironments(ids: number[] | null): Promise<Environment[]>;\n columnFootprints: Map<number, ColumnFootprintsStorage>;\n getColumns(\n projectID: number | null,\n inProcess: boolean,\n ): Promise<ColumnGeoJSONRecord[]>;\n // Strat names unify both \"strat names\" and \"concepts\"\n stratNames: Map<number, StratName> | null;\n getStratNames(ids: number[] | null): Promise<StratName[]>;\n}\n\nfunction createMacrostratStore(\n baseURL: string = \"https://macrostrat.org/api/v2\",\n) {\n return create<MacrostratStore>((set, get): MacrostratStore => {\n return {\n baseURL,\n inFlightRequests: new Set(),\n async fetch(url: string, options?: RequestInit) {\n const url1 = baseURL + url;\n // Avoid duplicate requests\n const { inFlightRequests } = get();\n if (inFlightRequests.has(url1)) {\n return null; // Return null if already in flight\n }\n inFlightRequests.add(url1);\n //set({ inFlightRequests });\n const res = await baseFetch(url1, options);\n inFlightRequests.delete(url1);\n //set({in})\n return res;\n },\n ...createLithologiesSlice(set, get),\n ...createIntervalsSlice(set, get),\n ...createEnvironmentsSlice(set, get),\n ...createColumnsSlice(set, get),\n ...createRefsSlice(set, get),\n ...createStratNamesSlice(set, get),\n };\n });\n}\n\nfunction createRefsSlice(set, get) {\n return {\n refs: new Map(),\n async getRefs(ids: number[]): Promise<MacrostratRef[]> {\n const { refs, fetch } = get();\n const missing = ids.filter((id) => !refs.has(id));\n if (missing.length == 0) {\n return ids.map((id) => refs.get(id));\n }\n const data = await fetchRefs(missing, fetch);\n if (data == null) return [];\n for (const d of data) {\n refs.set(d.ref_id, d);\n }\n set({ refs });\n return ids.map((id) => refs.get(id));\n },\n };\n}\n\nfunction createColumnsSlice(set, get) {\n // Column footprints separated by project\n return {\n columnFootprints: new Map(),\n async getColumns(projectID: number | null, inProcess: boolean) {\n const { columnFootprints, baseURL, fetch } = get();\n const key = projectID ?? -1;\n let _inProcess = inProcess;\n\n let footprints = columnFootprints.get(key);\n if (footprints == null || footprints.inProcess != _inProcess) {\n // Fetch the columns\n const statusCode: ColumnStatusCode[] = [\"active\"];\n if (_inProcess) {\n statusCode.push(\"in process\");\n }\n const columns = await fetchAllColumns({\n projectID,\n statusCode,\n fetch,\n });\n if (columns == null) {\n return;\n }\n footprints = {\n project_id: projectID,\n inProcess,\n columns,\n };\n // We could break multi-project result sets into separate caches here...\n // Copy the original map\n const columnFootprints2 = new Map(columnFootprints);\n columnFootprints2.set(key, footprints);\n set({ columnFootprints: columnFootprints2 });\n }\n return footprints.columns;\n },\n };\n}\n\nfunction createLithologiesSlice(set, get) {\n return {\n lithologies: null,\n async getLithologies(ids: number[] | null) {\n const { lithologies, fetch } = get();\n let lithMap = lithologies;\n if (lithMap == null) {\n const data = await fetchLithologies(fetch);\n if (data == null) return;\n lithMap = new Map(data.map((d) => [d.lith_id, d]));\n set({ lithologies: lithMap });\n }\n // Now get the lithologies\n if (ids == null) return lithMap.values();\n return ids.map((id) => lithMap.get(id));\n },\n };\n}\n\nfunction createEnvironmentsSlice(set, get) {\n return {\n environments: null,\n async getEnvironments(ids: number[] | null): Promise<Environment[]> {\n const { environments, fetch } = get();\n let envMap = environments;\n if (envMap == null) {\n const data = await fetchEnvironments(fetch);\n if (data == null) return [];\n envMap = new Map(data.map((d) => [d.environ_id, d]));\n set({ environments: envMap });\n }\n // Now get the environments\n if (ids == null) return envMap.values();\n return ids.map((id) => envMap.get(id));\n },\n };\n}\n\nfunction createIntervalsSlice(set, get) {\n return {\n intervals: null,\n async getIntervals(ids: number[] | null, timescaleID: number | null) {\n const { intervals, fetch } = get();\n let _intervals = intervals;\n if (intervals == null || !includesTimescale(intervals, timescaleID)) {\n // Fetch the intervals\n const data = await fetchIntervals(timescaleID, fetch);\n if (data == null) {\n return [];\n }\n const intervalMap = intervals ?? new Map();\n for (const d of data) {\n intervalMap.set(d.int_id, d);\n }\n _intervals = intervalMap;\n set({ intervals: _intervals });\n }\n if (ids == null && timescaleID == null)\n return Array.from(_intervals.values());\n if (timescaleID != null) {\n return Array.from(_intervals.values() as any[]).filter(\n (d) => d.timescale_id == timescaleID,\n );\n }\n return ids.map((id) => intervals.get(id));\n },\n };\n}\n\nfunction createStratNamesSlice(set, get) {\n return {\n stratNames: null,\n async getStratNames(ids: number[] | null): Promise<StratName[]> {\n const { stratNames, fetch } = get();\n let nameMap = stratNames ?? new Map();\n let stratNamesAlreadyLoaded = [];\n let stratNamesToLoad = [];\n for (const id of ids) {\n if (nameMap.has(id)) {\n stratNamesAlreadyLoaded.push(nameMap.get(id));\n } else {\n stratNamesToLoad.push(id);\n }\n }\n if (stratNamesToLoad.length > 0) {\n const data = await fetchStratNames(stratNamesToLoad, fetch);\n if (data == null) return stratNamesAlreadyLoaded;\n for (const d of data) {\n nameMap.set(d.strat_name_id, d);\n }\n set({ stratNames: nameMap });\n }\n return ids.map((id) => nameMap.get(id));\n },\n };\n}\n\nfunction includesTimescale(intervals: Map<number, any>, timescaleID: number) {\n if (intervals == null) return false;\n if (timescaleID == null) return true;\n return Array.from(intervals.values()).some(\n (d) => d.timescale_id == timescaleID,\n );\n}\n\ntype MacrostratSelector = (store: MacrostratStore) => any;\n\nexport function useMacrostratStore(selector: MacrostratSelector | \"api\") {\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n throw new Error(\"Missing MacrostratDataProvider\");\n }\n if (selector === \"api\") {\n return ctx;\n }\n return useStore(ctx, selector);\n}\n\nexport function useMacrostratBaseURL(\n defaultURL = \"https://macrostrat.org/api/v2\",\n): string {\n /** Get the Macrostrat base URL from the store if set, otherwise return a default value */\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n // Return default URL if no provider is present\n return defaultURL;\n }\n return ctx.getState().baseURL;\n}\n\nexport function useMacrostratFetch() {\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n throw new Error(\"Missing MacrostratDataProvider\");\n }\n return ctx.getState().fetch;\n}\n\ntype DataTypeKey =\n | \"lithologies\"\n | \"intervals\"\n | \"columns\"\n | \"environments\"\n | \"refs\"\n | \"strat_names\";\n\nconst dataTypeMapping = {\n lithologies: (store) => store.getLithologies,\n intervals: (store) => store.getIntervals,\n columns: (store) => store.getColumns,\n environments: (store) => store.getEnvironments,\n refs: (store) => store.getRefs,\n strat_names: (store) => store.getStratNames,\n};\n\nexport function useMacrostratDefs(dataType: string): Map<number, any> | null {\n if (dataType == \"columns\") {\n throw new Error(\"Columns are not provided as a map\");\n }\n const operator = useMacrostratStore(dataTypeMapping[dataType]);\n useEffect(() => {\n operator();\n }, []);\n return useMacrostratStore((state) => state[dataType]);\n}\n\nexport function useMacrostratColumns(\n projectID: number | null,\n inProcess: boolean,\n) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n const columnsMap = useMacrostratStore((s) => s.columnFootprints);\n const key = projectID ?? -1;\n const colData = columnsMap?.get(key);\n useEffect(() => {\n // Refetch if the columns are not available, or if we have requested inProcess columns where we didn't before\n if (colData == null || (inProcess && !colData.inProcess)) {\n getColumns(projectID, inProcess);\n }\n // If we've already fetched the columns there's nothing to do...\n }, [colData, inProcess, getColumns]);\n\n return useMemo(() => {\n if (colData == null) return null;\n let columns = colData.columns;\n if (!inProcess && colData.inProcess) {\n // Our available set of columns includes 'in process' columns, but we don't want them\n columns.features = columns.features?.filter(\n (d) => d.properties.status != \"in process\",\n );\n }\n return columns;\n }, [colData, inProcess]);\n}\n\nexport function useMacrostratColumnInfo(\n columnID: number,\n): ColumnGeoJSONRecord[\"properties\"] | null {\n /** Get basic info for a column, without automatically fetching it (assumes the overall set of relevant columns has already been fetched) */\n const columnsMap = useMacrostratStore((s) => s.columnFootprints);\n return useMemo(() => {\n for (const colData of columnsMap.values()) {\n const col = colData.columns.find((d) => d.properties.col_id === columnID);\n if (col != null) return col.properties;\n }\n return null;\n }, [columnsMap, columnID]);\n}\n\nexport function useMacrostratData(dataType: DataTypeKey, ...args: any[]) {\n const selector = dataTypeMapping[dataType];\n const operator = useMacrostratStore(selector);\n\n const [value, setValue] = useState(null);\n\n useEffect(() => {\n try {\n operator(...args).then(setValue);\n } catch (e) {\n console.error(e);\n }\n }, [operator, ...args]);\n\n return value;\n}\n\n/** By default, we provide a store linked to the production API */\nconst MacrostratDataProviderContext = createContext(createMacrostratStore());\n\nexport function MacrostratDataProvider(props: MacrostratDataProviderProps) {\n const { baseURL = \"https://dev.macrostrat.org/api/v2\", children } = props;\n\n const [store] = useState(() => createMacrostratStore(baseURL));\n\n return h(\n MacrostratAPIProvider,\n { baseURL },\n h(MacrostratDataProviderContext.Provider, { value: store }, children),\n );\n}\n\n/** Legacy API provider so useAPIResult can work */\n\ntype APIProviderProps = {\n children: ReactNode;\n useDev?: boolean;\n baseURL?: string;\n};\n\nexport function MacrostratAPIProvider({\n children,\n useDev = false,\n baseURL,\n}: APIProviderProps) {\n baseURL ??= useDev\n ? \"https://dev.macrostrat.org/api/v2\"\n : \"https://macrostrat.org/api/v2\";\n\n return h(\n APIProvider,\n {\n baseURL,\n unwrapResponse: (res) => res.success.data,\n },\n children,\n );\n}\n\nexport function MacrostratColumnProvider(props) {\n /** A column provider specialized the Macrostrat API. Maps more\n * generic concepts to Macrostrat-specific ones.\n */\n\n const { axisType } = useMacrostratColumnData();\n const { units, domain, pixelScale, scale, children } = props;\n return h(\n ColumnProvider,\n {\n axisType,\n divisions: units,\n range: domain,\n pixelsPerMeter: pixelScale,\n scale,\n },\n children,\n );\n}\n\n/** This is now a legacy provider */\nexport function LithologiesProvider({ children }) {\n useEffect(() => {\n console.warn(\n \"LithologiesProvider is deprecated. Replace with MacrostratDataProvider\",\n );\n }, []);\n return children;\n}\n\nexport function useLithologies() {\n const getLithologies = useMacrostratStore((s) => s.getLithologies);\n const lithologies = useMacrostratStore((s) => s.lithologies);\n useEffect(() => {\n if (lithologies == null) getLithologies();\n }, [lithologies, getLithologies]);\n return lithologies;\n}\n\nexport function useEnvironments() {\n const getEnvironments = useMacrostratStore((s) => s.getEnvironments);\n const environments = useMacrostratStore((s) => s.environments);\n useEffect(() => {\n if (environments == null) getEnvironments();\n }, [environments, getEnvironments]);\n return environments;\n}\n"],"names":["create","baseFetch","fetch","fetchRefs","fetchAllColumns","fetchLithologies","fetchEnvironments","fetchIntervals","fetchStratNames","useContext","useStore","store","useEffect","useMemo","useState","createContext","APIProvider","useMacrostratColumnData","ColumnProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.cjs","sources":["../../src/data-provider/base.ts"],"sourcesContent":["/** Data provider for information that needs to be loaded in bulk for frontend views */\nimport baseFetch from \"cross-fetch\";\nimport { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { create, useStore } from \"zustand\";\nimport {\n ColumnGeoJSONRecord,\n ColumnGeoJSONRecordWithID,\n Environment,\n MacrostratRef,\n StratName,\n Interval,\n} from \"@macrostrat/api-types\";\nimport {\n fetchAllColumns,\n fetchEnvironments,\n fetchIntervals,\n fetchLithologies,\n fetchRefs,\n fetchStratNames,\n type ColumnStatusCode,\n} from \"./fetch\";\nimport { APIProvider } from \"@macrostrat/ui-components\";\nimport { ColumnProvider } from \"@macrostrat/column-components\";\n\nimport { ReactNode } from \"react\";\nimport { useMacrostratColumnData } from \"./store\";\n\nexport interface MacrostratDataProviderProps {\n baseURL: string;\n children: React.ReactNode;\n}\n\ninterface ColumnFootprintsStorage {\n project_id: number;\n // Whether the \"in process\" flag was used\n inProcess: boolean;\n // The column footprints\n columns: ColumnGeoJSONRecordWithID[];\n}\n\ninterface RefsSlice {\n refs: Map<number, MacrostratRef>;\n inFlightRequests: Set<string>; // Track requests to avoid duplicates\n getRefs(ids: number[]): Promise<MacrostratRef[]>;\n}\n\ninterface MacrostratStore extends RefsSlice {\n baseURL: string;\n fetch: any;\n lithologies: Map<number, any> | null;\n getLithologies(ids: number[] | null): Promise<any>;\n intervals: Map<number, any> | null;\n getIntervals(\n ids: number[] | null,\n timescaleID: number | null,\n ): Promise<Interval[]>;\n environments: Map<number, Environment> | null;\n getEnvironments(ids: number[] | null): Promise<Environment[]>;\n columnFootprints: Map<number, ColumnFootprintsStorage>;\n getColumns(\n projectID: number | null,\n inProcess: boolean,\n ): Promise<ColumnGeoJSONRecord[]>;\n // Strat names unify both \"strat names\" and \"concepts\"\n stratNames: Map<number, StratName> | null;\n getStratNames(ids: number[] | null): Promise<StratName[]>;\n}\n\nfunction createMacrostratStore(\n baseURL: string = \"https://macrostrat.org/api/v2\",\n) {\n return create<MacrostratStore>((set, get): MacrostratStore => {\n return {\n baseURL,\n inFlightRequests: new Set(),\n async fetch(url: string, options?: RequestInit) {\n const url1 = baseURL + url;\n // Avoid duplicate requests\n const { inFlightRequests } = get();\n if (inFlightRequests.has(url1)) {\n return null; // Return null if already in flight\n }\n inFlightRequests.add(url1);\n //set({ inFlightRequests });\n const res = await baseFetch(url1, options);\n inFlightRequests.delete(url1);\n //set({in})\n return res;\n },\n ...createLithologiesSlice(set, get),\n ...createIntervalsSlice(set, get),\n ...createEnvironmentsSlice(set, get),\n ...createColumnsSlice(set, get),\n ...createRefsSlice(set, get),\n ...createStratNamesSlice(set, get),\n };\n });\n}\n\nfunction createRefsSlice(set, get) {\n return {\n refs: new Map(),\n async getRefs(ids: number[]): Promise<MacrostratRef[]> {\n const { refs, fetch } = get();\n const missing = ids.filter((id) => !refs.has(id));\n if (missing.length == 0) {\n return ids.map((id) => refs.get(id));\n }\n const data = await fetchRefs(missing, fetch);\n if (data == null) return [];\n for (const d of data) {\n refs.set(d.ref_id, d);\n }\n set({ refs });\n return ids.map((id) => refs.get(id));\n },\n };\n}\n\nfunction createColumnsSlice(set, get) {\n // Column footprints separated by project\n return {\n columnFootprints: new Map(),\n async getColumns(projectID: number | null, inProcess: boolean) {\n const { columnFootprints, baseURL, fetch } = get();\n const key = projectID ?? -1;\n let _inProcess = inProcess;\n\n let footprints = columnFootprints.get(key);\n if (footprints == null || footprints.inProcess != _inProcess) {\n // Fetch the columns\n const statusCode: ColumnStatusCode[] = [\"active\"];\n if (_inProcess) {\n statusCode.push(\"in process\");\n }\n const columns = await fetchAllColumns({\n projectID,\n statusCode,\n fetch,\n });\n if (columns == null) {\n return;\n }\n footprints = {\n project_id: projectID,\n inProcess,\n columns,\n };\n // We could break multi-project result sets into separate caches here...\n // Copy the original map\n const columnFootprints2 = new Map(columnFootprints);\n columnFootprints2.set(key, footprints);\n set({ columnFootprints: columnFootprints2 });\n }\n return footprints.columns;\n },\n };\n}\n\nfunction createLithologiesSlice(set, get) {\n return {\n lithologies: null,\n async getLithologies(ids: number[] | null) {\n const { lithologies, fetch } = get();\n let lithMap = lithologies;\n if (lithMap == null) {\n const data = await fetchLithologies(fetch);\n if (data == null) return;\n lithMap = new Map(data.map((d) => [d.lith_id, d]));\n set({ lithologies: lithMap });\n }\n // Now get the lithologies\n if (ids == null) return lithMap.values();\n return ids.map((id) => lithMap.get(id));\n },\n };\n}\n\nfunction createEnvironmentsSlice(set, get) {\n return {\n environments: null,\n async getEnvironments(ids: number[] | null): Promise<Environment[]> {\n const { environments, fetch } = get();\n let envMap = environments;\n if (envMap == null) {\n const data = await fetchEnvironments(fetch);\n if (data == null) return [];\n envMap = new Map(data.map((d) => [d.environ_id, d]));\n set({ environments: envMap });\n }\n // Now get the environments\n if (ids == null) return envMap.values();\n return ids.map((id) => envMap.get(id));\n },\n };\n}\n\nfunction createIntervalsSlice(set, get) {\n return {\n intervals: null,\n async getIntervals(ids: number[] | null, timescaleID: number | null) {\n const { intervals, fetch } = get();\n let _intervals = intervals;\n if (intervals == null || !includesTimescale(intervals, timescaleID)) {\n // Fetch the intervals\n const data = await fetchIntervals(timescaleID, fetch);\n if (data == null) {\n return [];\n }\n const intervalMap = intervals ?? new Map();\n for (const d of data) {\n intervalMap.set(d.int_id, d);\n }\n _intervals = intervalMap;\n set({ intervals: _intervals });\n }\n if (ids == null && timescaleID == null)\n return Array.from(_intervals.values());\n if (timescaleID != null) {\n return Array.from(_intervals.values() as any[]).filter(\n (d) => d.timescale_id == timescaleID,\n );\n }\n return ids.map((id) => intervals.get(id));\n },\n };\n}\n\nfunction createStratNamesSlice(set, get) {\n return {\n stratNames: null,\n async getStratNames(ids: number[] | null): Promise<StratName[]> {\n const { stratNames, fetch } = get();\n let nameMap = stratNames ?? new Map();\n let stratNamesAlreadyLoaded = [];\n let stratNamesToLoad = [];\n for (const id of ids) {\n if (nameMap.has(id)) {\n stratNamesAlreadyLoaded.push(nameMap.get(id));\n } else {\n stratNamesToLoad.push(id);\n }\n }\n if (stratNamesToLoad.length > 0) {\n const data = await fetchStratNames(stratNamesToLoad, fetch);\n if (data == null) return stratNamesAlreadyLoaded;\n for (const d of data) {\n nameMap.set(d.strat_name_id, d);\n }\n set({ stratNames: nameMap });\n }\n return ids.map((id) => nameMap.get(id));\n },\n };\n}\n\nfunction includesTimescale(intervals: Map<number, any>, timescaleID: number) {\n if (intervals == null) return false;\n if (timescaleID == null) return true;\n return Array.from(intervals.values()).some(\n (d) => d.timescale_id == timescaleID,\n );\n}\n\ntype MacrostratSelector = (store: MacrostratStore) => any;\n\nexport function useMacrostratStore(selector: MacrostratSelector | \"api\") {\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n throw new Error(\"Missing MacrostratDataProvider\");\n }\n if (selector === \"api\") {\n return ctx;\n }\n return useStore(ctx, selector);\n}\n\nexport function useMacrostratBaseURL(\n defaultURL = \"https://macrostrat.org/api/v2\",\n): string {\n /** Get the Macrostrat base URL from the store if set, otherwise return a default value */\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n // Return default URL if no provider is present\n return defaultURL;\n }\n return ctx.getState().baseURL;\n}\n\nexport function useMacrostratFetch() {\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n throw new Error(\"Missing MacrostratDataProvider\");\n }\n return ctx.getState().fetch;\n}\n\ntype DataTypeKey =\n | \"lithologies\"\n | \"intervals\"\n | \"columns\"\n | \"environments\"\n | \"refs\"\n | \"strat_names\";\n\nconst dataTypeMapping = {\n lithologies: (store) => store.getLithologies,\n intervals: (store) => store.getIntervals,\n columns: (store) => store.getColumns,\n environments: (store) => store.getEnvironments,\n refs: (store) => store.getRefs,\n strat_names: (store) => store.getStratNames,\n};\n\nexport function useMacrostratDefs(dataType: string): Map<number, any> | null {\n if (dataType == \"columns\") {\n throw new Error(\"Columns are not provided as a map\");\n }\n const operator = useMacrostratStore(dataTypeMapping[dataType]);\n useEffect(() => {\n operator();\n }, []);\n return useMacrostratStore((state) => state[dataType]);\n}\n\nexport function useMacrostratColumns(\n projectID: number | null,\n inProcess: boolean,\n) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n const columnsMap = useMacrostratStore((s) => s.columnFootprints);\n const key = projectID ?? -1;\n const colData = columnsMap?.get(key);\n useEffect(() => {\n // Refetch if the columns are not available, or if we have requested inProcess columns where we didn't before\n if (colData == null || (inProcess && !colData.inProcess)) {\n getColumns(projectID, inProcess);\n }\n // If we've already fetched the columns there's nothing to do...\n }, [colData, inProcess, getColumns]);\n\n return useMemo(() => {\n if (colData == null) return null;\n let columns = colData.columns;\n if (!inProcess && colData.inProcess) {\n // Our available set of columns includes 'in process' columns, but we don't want them\n columns.features = columns.features?.filter(\n (d) => d.properties.status != \"in process\",\n );\n }\n return columns;\n }, [colData, inProcess]);\n}\n\nexport function useMacrostratColumnInfo(\n columnID: number,\n): ColumnGeoJSONRecord[\"properties\"] | null {\n /** Get basic info for a column, without automatically fetching it (assumes the overall set of relevant columns has already been fetched) */\n const columnsMap = useMacrostratStore((s) => s.columnFootprints);\n return useMemo(() => {\n for (const colData of columnsMap.values()) {\n const col = colData.columns.find((d) => d.properties.col_id === columnID);\n if (col != null) return col.properties;\n }\n return null;\n }, [columnsMap, columnID]);\n}\n\nexport function useMacrostratData(dataType: DataTypeKey, ...args: any[]) {\n const selector = dataTypeMapping[dataType];\n const operator = useMacrostratStore(selector);\n\n const [value, setValue] = useState(null);\n\n useEffect(() => {\n try {\n operator(...args).then(setValue);\n } catch (e) {\n console.error(e);\n }\n }, [operator, ...args]);\n\n return value;\n}\n\n/** By default, we provide a store linked to the production API */\nconst MacrostratDataProviderContext = createContext(createMacrostratStore());\n\nexport function MacrostratDataProvider(props: MacrostratDataProviderProps) {\n const { baseURL = \"https://dev.macrostrat.org/api/v2\", children } = props;\n\n const [store] = useState(() => createMacrostratStore(baseURL));\n\n return h(\n MacrostratAPIProvider,\n { baseURL },\n h(MacrostratDataProviderContext.Provider, { value: store }, children),\n );\n}\n\n/** Legacy API provider so useAPIResult can work */\n\ntype APIProviderProps = {\n children: ReactNode;\n useDev?: boolean;\n baseURL?: string;\n};\n\nexport function MacrostratAPIProvider({\n children,\n useDev = false,\n baseURL,\n}: APIProviderProps) {\n baseURL ??= useDev\n ? \"https://dev.macrostrat.org/api/v2\"\n : \"https://macrostrat.org/api/v2\";\n\n return h(\n APIProvider,\n {\n baseURL,\n unwrapResponse: (res) => res.success.data,\n },\n children,\n );\n}\n\nexport function MacrostratColumnProvider(props) {\n /** A column provider specialized the Macrostrat API. Maps more\n * generic concepts to Macrostrat-specific ones.\n */\n\n const { axisType } = useMacrostratColumnData();\n const { units, domain, pixelScale, scale, children } = props;\n return h(\n ColumnProvider,\n {\n axisType,\n divisions: units,\n range: domain,\n pixelsPerMeter: pixelScale,\n scale,\n },\n children,\n );\n}\n\n/** This is now a legacy provider */\nexport function LithologiesProvider({ children }) {\n useEffect(() => {\n console.warn(\n \"LithologiesProvider is deprecated. Replace with MacrostratDataProvider\",\n );\n }, []);\n return children;\n}\n\nexport function useLithologies() {\n const getLithologies = useMacrostratStore((s) => s.getLithologies);\n const lithologies = useMacrostratStore((s) => s.lithologies);\n useEffect(() => {\n if (lithologies == null) getLithologies();\n }, [lithologies, getLithologies]);\n return lithologies;\n}\n\nexport function useEnvironments() {\n const getEnvironments = useMacrostratStore((s) => s.getEnvironments);\n const environments = useMacrostratStore((s) => s.environments);\n useEffect(() => {\n if (environments == null) getEnvironments();\n }, [environments, getEnvironments]);\n return environments;\n}\n"],"names":["create","baseFetch","fetch","fetchRefs","fetchAllColumns","fetchLithologies","fetchEnvironments","fetchIntervals","fetchStratNames","useContext","useStore","store","useEffect","useMemo","useState","createContext","h","APIProvider","useMacrostratColumnData","ColumnProvider"],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const h = require("@macrostrat/hyper");
|
|
4
4
|
const uiComponents = require("@macrostrat/ui-components");
|
|
5
5
|
const React = require("react");
|
|
6
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
7
|
+
const h__default = /* @__PURE__ */ _interopDefault(h);
|
|
6
8
|
const ColumnNavCtx = React.createContext(null);
|
|
7
9
|
function useColumnNav(defaultArgs = { col_id: 495, unit_id: null }) {
|
|
8
10
|
const ctx = React.useContext(ColumnNavCtx);
|
|
@@ -29,7 +31,7 @@ function extractColumnArgs(search) {
|
|
|
29
31
|
}
|
|
30
32
|
function ColumnNavProvider({ children, ...defaultArgs }) {
|
|
31
33
|
const value = useColumnNav(defaultArgs);
|
|
32
|
-
return
|
|
34
|
+
return h__default.default(ColumnNavCtx.Provider, { value }, children);
|
|
33
35
|
}
|
|
34
36
|
exports.ColumnNavProvider = ColumnNavProvider;
|
|
35
37
|
exports.useColumnNav = useColumnNav;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column-nav.cjs","sources":["../../src/data-provider/column-nav.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { getQueryString, setQueryString } from \"@macrostrat/ui-components\";\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ColumnArgs {\n col_id?: number;\n unit_id?: number;\n project_id?: number;\n status_code?: \"in process\";\n}\n\ntype ColumnManagerData = [ColumnArgs, (c: ColumnArgs) => void];\n\nconst ColumnNavCtx = createContext<ColumnManagerData | null>(null);\n\nexport function useColumnNav(\n defaultArgs: ColumnArgs = { col_id: 495, unit_id: null },\n): ColumnManagerData {\n const ctx = useContext(ColumnNavCtx);\n if (ctx != null) return ctx;\n\n const [columnArgs, setColumnArgs] = useState<ColumnArgs>(\n extractColumnArgs(getQueryString(window.location.search)) ?? defaultArgs,\n );\n\n useEffect(() => setQueryString(columnArgs), [columnArgs]);\n\n const { col_id, project_id, status_code } = columnArgs;\n\n const setCurrentColumn = (obj) => {\n let args = obj;\n if (\"properties\" in obj) {\n args = { col_id: obj.properties.col_id, project_id, status_code };\n }\n // Set query string\n setQueryString(args);\n setColumnArgs(args);\n };\n\n return [columnArgs, setCurrentColumn];\n}\n\nfunction extractColumnArgs(search: any): ColumnArgs | null {\n const { col_id, unit_id, project_id, status_code } = search ?? {};\n if (col_id == null) return null;\n return { col_id, unit_id, project_id, status_code };\n}\n\nexport function ColumnNavProvider({ children, ...defaultArgs }) {\n /** Column navigation provider that manages the query string for selected columns */\n const value = useColumnNav(defaultArgs as any);\n return h(ColumnNavCtx.Provider, { value }, children);\n}\n"],"names":["createContext","useContext","useState","getQueryString","useEffect","setQueryString"],"mappings":"
|
|
1
|
+
{"version":3,"file":"column-nav.cjs","sources":["../../src/data-provider/column-nav.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { getQueryString, setQueryString } from \"@macrostrat/ui-components\";\nimport { createContext, useContext, useEffect, useState } from \"react\";\n\nexport interface ColumnArgs {\n col_id?: number;\n unit_id?: number;\n project_id?: number;\n status_code?: \"in process\";\n}\n\ntype ColumnManagerData = [ColumnArgs, (c: ColumnArgs) => void];\n\nconst ColumnNavCtx = createContext<ColumnManagerData | null>(null);\n\nexport function useColumnNav(\n defaultArgs: ColumnArgs = { col_id: 495, unit_id: null },\n): ColumnManagerData {\n const ctx = useContext(ColumnNavCtx);\n if (ctx != null) return ctx;\n\n const [columnArgs, setColumnArgs] = useState<ColumnArgs>(\n extractColumnArgs(getQueryString(window.location.search)) ?? defaultArgs,\n );\n\n useEffect(() => setQueryString(columnArgs), [columnArgs]);\n\n const { col_id, project_id, status_code } = columnArgs;\n\n const setCurrentColumn = (obj) => {\n let args = obj;\n if (\"properties\" in obj) {\n args = { col_id: obj.properties.col_id, project_id, status_code };\n }\n // Set query string\n setQueryString(args);\n setColumnArgs(args);\n };\n\n return [columnArgs, setCurrentColumn];\n}\n\nfunction extractColumnArgs(search: any): ColumnArgs | null {\n const { col_id, unit_id, project_id, status_code } = search ?? {};\n if (col_id == null) return null;\n return { col_id, unit_id, project_id, status_code };\n}\n\nexport function ColumnNavProvider({ children, ...defaultArgs }) {\n /** Column navigation provider that manages the query string for selected columns */\n const value = useColumnNav(defaultArgs as any);\n return h(ColumnNavCtx.Provider, { value }, children);\n}\n"],"names":["createContext","useContext","useState","getQueryString","useEffect","setQueryString","h"],"mappings":";;;;;;;AAaA,MAAM,eAAeA,MAAAA,cAAwC,IAAI;AAE1D,SAAS,aACd,cAA0B,EAAE,QAAQ,KAAK,SAAS,QAC/B;AACnB,QAAM,MAAMC,MAAAA,WAAW,YAAY;AACnC,MAAI,OAAO,KAAM,QAAO;AAExB,QAAM,CAAC,YAAY,aAAa,IAAIC,MAAAA;AAAAA,IAClC,kBAAkBC,aAAAA,eAAe,OAAO,SAAS,MAAM,CAAC,KAAK;AAAA,EAAA;AAG/DC,QAAAA,UAAU,MAAMC,aAAAA,eAAe,UAAU,GAAG,CAAC,UAAU,CAAC;AAExD,QAAM,EAAE,QAAQ,YAAY,YAAA,IAAgB;AAE5C,QAAM,mBAAmB,CAAC,QAAQ;AAChC,QAAI,OAAO;AACX,QAAI,gBAAgB,KAAK;AACvB,aAAO,EAAE,QAAQ,IAAI,WAAW,QAAQ,YAAY,YAAA;AAAA,IACtD;AAEAA,iBAAAA,eAAe,IAAI;AACnB,kBAAc,IAAI;AAAA,EACpB;AAEA,SAAO,CAAC,YAAY,gBAAgB;AACtC;AAEA,SAAS,kBAAkB,QAAgC;AACzD,QAAM,EAAE,QAAQ,SAAS,YAAY,YAAA,IAAgB,UAAU,CAAA;AAC/D,MAAI,UAAU,KAAM,QAAO;AAC3B,SAAO,EAAE,QAAQ,SAAS,YAAY,YAAA;AACxC;AAEO,SAAS,kBAAkB,EAAE,UAAU,GAAG,eAAe;AAE9D,QAAM,QAAQ,aAAa,WAAkB;AAC7C,SAAOC,WAAAA,QAAE,aAAa,UAAU,EAAE,MAAA,GAAS,QAAQ;AACrD;;;"}
|
|
@@ -4,6 +4,8 @@ const jotai = require("jotai");
|
|
|
4
4
|
const jotaiScope = require("jotai-scope");
|
|
5
5
|
const React = require("react");
|
|
6
6
|
const h = require("@macrostrat/hyper");
|
|
7
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
|
+
const h__default = /* @__PURE__ */ _interopDefault(h);
|
|
7
9
|
const scope = jotaiScope.createIsolation();
|
|
8
10
|
function ScopedProvider({
|
|
9
11
|
children,
|
|
@@ -15,8 +17,8 @@ function ScopedProvider({
|
|
|
15
17
|
val = scope.useStore();
|
|
16
18
|
return children;
|
|
17
19
|
} catch {
|
|
18
|
-
return
|
|
19
|
-
|
|
20
|
+
return h__default.default(scope.Provider, { store: null, initialValues: atoms }, [
|
|
21
|
+
h__default.default.if(shouldUpdateAtoms)(AtomUpdater, { atoms }),
|
|
20
22
|
children
|
|
21
23
|
]);
|
|
22
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.cjs","sources":["../../src/data-provider/core.ts"],"sourcesContent":["import { atom, type WritableAtom } from \"jotai\";\nimport { createIsolation } from \"jotai-scope\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\nimport { ReactNode, useEffect, useRef } from \"react\";\nimport h from \"@macrostrat/hyper\";\n\ninterface StateIsolation {\n Provider: (props: {\n store?: any;\n initialValues?: AtomMap;\n children: ReactNode;\n }) => ReactNode;\n useStore: () => any;\n useAtom: any;\n useAtomValue: any;\n useSetAtom: any;\n}\n\nexport const scope: StateIsolation = createIsolation();\n\nexport type AtomMap = [WritableAtom<any, any, any>, any][];\n\ntype ProviderProps = {\n children: ReactNode;\n atoms?: AtomMap;\n shouldUpdateAtoms?: boolean;\n};\n\nexport function ScopedProvider({\n children,\n atoms,\n shouldUpdateAtoms = true,\n}: ProviderProps) {\n // Always use the same store instance in this tree\n let val = null;\n try {\n val = scope.useStore();\n // This store has already been provided\n return children;\n } catch {\n return h(scope.Provider, { store: null, initialValues: atoms }, [\n h.if(shouldUpdateAtoms)(AtomUpdater, { atoms }),\n children,\n ]);\n }\n}\n\nfunction AtomUpdater({\n atoms,\n}: {\n atoms: [WritableAtom<any, any, any>, any][];\n}) {\n /**\n * A generic updater to sync Jotai atoms with state passed as props.\n * Useful for scoped providers where state needs to be synced outside\n * the current context.\n */\n /** TODO: this is an awkward way to keep atoms updated */\n // The scoped store\n const store = scope.useStore();\n\n // Warn on atoms changing length\n const prevLengthRef = useRef(atoms.length);\n useEffect(() => {\n if (prevLengthRef.current !== atoms.length) {\n console.error(\"Error: number of atoms in ScopedAtomUpdater has changed.\");\n prevLengthRef.current = atoms.length;\n }\n }, [atoms.length]);\n\n for (const [atom, value] of atoms) {\n useEffect(() => {\n store.set(atom, value);\n }, [store, value]);\n }\n return null;\n}\n\nexport const columnUnitsAtom = atom<BaseUnit[]>();\n\nexport const columnUnitsMapAtom = atom<Map<number, BaseUnit> | null>((get) => {\n const units = get(columnUnitsAtom);\n if (!units) return null;\n const unitMap = new Map<number, BaseUnit>();\n units.forEach((unit) => {\n unitMap.set(unit.unit_id, unit);\n });\n return unitMap;\n});\n"],"names":["createIsolation","useRef","useEffect","atom"],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.cjs","sources":["../../src/data-provider/core.ts"],"sourcesContent":["import { atom, type WritableAtom } from \"jotai\";\nimport { createIsolation } from \"jotai-scope\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\nimport { ReactNode, useEffect, useRef } from \"react\";\nimport h from \"@macrostrat/hyper\";\n\ninterface StateIsolation {\n Provider: (props: {\n store?: any;\n initialValues?: AtomMap;\n children: ReactNode;\n }) => ReactNode;\n useStore: () => any;\n useAtom: any;\n useAtomValue: any;\n useSetAtom: any;\n}\n\nexport const scope: StateIsolation = createIsolation();\n\nexport type AtomMap = [WritableAtom<any, any, any>, any][];\n\ntype ProviderProps = {\n children: ReactNode;\n atoms?: AtomMap;\n shouldUpdateAtoms?: boolean;\n};\n\nexport function ScopedProvider({\n children,\n atoms,\n shouldUpdateAtoms = true,\n}: ProviderProps) {\n // Always use the same store instance in this tree\n let val = null;\n try {\n val = scope.useStore();\n // This store has already been provided\n return children;\n } catch {\n return h(scope.Provider, { store: null, initialValues: atoms }, [\n h.if(shouldUpdateAtoms)(AtomUpdater, { atoms }),\n children,\n ]);\n }\n}\n\nfunction AtomUpdater({\n atoms,\n}: {\n atoms: [WritableAtom<any, any, any>, any][];\n}) {\n /**\n * A generic updater to sync Jotai atoms with state passed as props.\n * Useful for scoped providers where state needs to be synced outside\n * the current context.\n */\n /** TODO: this is an awkward way to keep atoms updated */\n // The scoped store\n const store = scope.useStore();\n\n // Warn on atoms changing length\n const prevLengthRef = useRef(atoms.length);\n useEffect(() => {\n if (prevLengthRef.current !== atoms.length) {\n console.error(\"Error: number of atoms in ScopedAtomUpdater has changed.\");\n prevLengthRef.current = atoms.length;\n }\n }, [atoms.length]);\n\n for (const [atom, value] of atoms) {\n useEffect(() => {\n store.set(atom, value);\n }, [store, value]);\n }\n return null;\n}\n\nexport const columnUnitsAtom = atom<BaseUnit[]>();\n\nexport const columnUnitsMapAtom = atom<Map<number, BaseUnit> | null>((get) => {\n const units = get(columnUnitsAtom);\n if (!units) return null;\n const unitMap = new Map<number, BaseUnit>();\n units.forEach((unit) => {\n unitMap.set(unit.unit_id, unit);\n });\n return unitMap;\n});\n"],"names":["createIsolation","h","useRef","useEffect","atom"],"mappings":";;;;;;;;AAkBO,MAAM,QAAwBA,WAAAA,gBAAA;AAU9B,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA,oBAAoB;AACtB,GAAkB;AAEhB,MAAI,MAAM;AACV,MAAI;AACF,UAAM,MAAM,SAAA;AAEZ,WAAO;AAAA,EACT,QAAQ;AACN,WAAOC,WAAAA,QAAE,MAAM,UAAU,EAAE,OAAO,MAAM,eAAe,SAAS;AAAA,MAC9DA,WAAAA,QAAE,GAAG,iBAAiB,EAAE,aAAa,EAAE,OAAO;AAAA,MAC9C;AAAA,IAAA,CACD;AAAA,EACH;AACF;AAEA,SAAS,YAAY;AAAA,EACnB;AACF,GAEG;AAQD,QAAM,QAAQ,MAAM,SAAA;AAGpB,QAAM,gBAAgBC,MAAAA,OAAO,MAAM,MAAM;AACzCC,QAAAA,UAAU,MAAM;AACd,QAAI,cAAc,YAAY,MAAM,QAAQ;AAC1C,cAAQ,MAAM,0DAA0D;AACxE,oBAAc,UAAU,MAAM;AAAA,IAChC;AAAA,EACF,GAAG,CAAC,MAAM,MAAM,CAAC;AAEjB,aAAW,CAACC,OAAM,KAAK,KAAK,OAAO;AACjCD,UAAAA,UAAU,MAAM;AACd,YAAM,IAAIC,OAAM,KAAK;AAAA,IACvB,GAAG,CAAC,OAAO,KAAK,CAAC;AAAA,EACnB;AACA,SAAO;AACT;AAEO,MAAM,kBAAkBA,MAAAA,KAAA;AAExB,MAAM,qBAAqBA,MAAAA,KAAmC,CAAC,QAAQ;AAC5E,QAAM,QAAQ,IAAI,eAAe;AACjC,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,8BAAc,IAAA;AACpB,QAAM,QAAQ,CAAC,SAAS;AACtB,YAAQ,IAAI,KAAK,SAAS,IAAI;AAAA,EAChC,CAAC;AACD,SAAO;AACT,CAAC;;;;;"}
|
|
@@ -4,9 +4,11 @@ const uiComponents = require("@macrostrat/ui-components");
|
|
|
4
4
|
const crossFetch = require("cross-fetch");
|
|
5
5
|
const topojsonClient = require("topojson-client");
|
|
6
6
|
const d3Geo = require("d3-geo");
|
|
7
|
+
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
8
|
+
const crossFetch__default = /* @__PURE__ */ _interopDefault(crossFetch);
|
|
7
9
|
function createScopedFetch(baseURL) {
|
|
8
10
|
return function(url, options = void 0) {
|
|
9
|
-
return
|
|
11
|
+
return crossFetch__default.default(baseURL + url, options);
|
|
10
12
|
};
|
|
11
13
|
}
|
|
12
14
|
const defaultFetch = createScopedFetch("https://macrostrat.org/api/v2");
|
|
@@ -16,7 +18,7 @@ async function fetchAllColumns(options = {}) {
|
|
|
16
18
|
projectID,
|
|
17
19
|
format = "topojson",
|
|
18
20
|
statusCode,
|
|
19
|
-
fetch =
|
|
21
|
+
fetch = crossFetch__default.default
|
|
20
22
|
} = options;
|
|
21
23
|
let args = { format };
|
|
22
24
|
if (projectID != null) {
|