@macrostrat/column-views 2.4.4 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/dist/age-axis.cjs +123 -0
- package/dist/age-axis.cjs.map +1 -0
- package/dist/age-axis.d.ts +33 -0
- package/dist/age-axis.js +123 -0
- package/dist/age-axis.js.map +1 -0
- package/dist/age-axis.module.sass.cjs +18 -0
- package/dist/age-axis.module.sass.cjs.map +1 -0
- package/dist/age-axis.module.sass.js +18 -0
- package/dist/age-axis.module.sass.js.map +1 -0
- package/dist/age-model-overlay.cjs +48 -0
- package/dist/age-model-overlay.cjs.map +1 -0
- package/dist/age-model-overlay.d.ts +24 -0
- package/dist/age-model-overlay.js +48 -0
- package/dist/age-model-overlay.js.map +1 -0
- package/dist/age-model-overlay.module.sass.cjs +8 -0
- package/dist/age-model-overlay.module.sass.cjs.map +1 -0
- package/dist/age-model-overlay.module.sass.js +8 -0
- package/dist/age-model-overlay.module.sass.js.map +1 -0
- package/dist/column-views.css +685 -0
- package/dist/column.cjs +247 -0
- package/dist/column.cjs.map +1 -0
- package/dist/column.d.ts +44 -0
- package/dist/column.js +247 -0
- package/dist/column.js.map +1 -0
- package/dist/column.module.sass.cjs +33 -0
- package/dist/column.module.sass.cjs.map +1 -0
- package/dist/column.module.sass.js +33 -0
- package/dist/column.module.sass.js.map +1 -0
- package/dist/correlation-chart/hash-string.cjs +46 -0
- package/dist/correlation-chart/hash-string.cjs.map +1 -0
- package/dist/correlation-chart/hash-string.d.ts +3 -0
- package/dist/correlation-chart/hash-string.js +46 -0
- package/dist/correlation-chart/hash-string.js.map +1 -0
- package/dist/correlation-chart/index.d.ts +2 -0
- package/dist/correlation-chart/main.cjs +202 -0
- package/dist/correlation-chart/main.cjs.map +1 -0
- package/dist/correlation-chart/main.d.ts +15 -0
- package/dist/correlation-chart/main.js +202 -0
- package/dist/correlation-chart/main.js.map +1 -0
- package/dist/correlation-chart/main.module.sass.cjs +28 -0
- package/dist/correlation-chart/main.module.sass.cjs.map +1 -0
- package/dist/correlation-chart/main.module.sass.js +28 -0
- package/dist/correlation-chart/main.module.sass.js.map +1 -0
- package/dist/correlation-chart/prepare-data.cjs +62 -0
- package/dist/correlation-chart/prepare-data.cjs.map +1 -0
- package/dist/correlation-chart/prepare-data.d.ts +52 -0
- package/dist/correlation-chart/prepare-data.js +62 -0
- package/dist/correlation-chart/prepare-data.js.map +1 -0
- package/dist/correlation-chart/stories/utils.d.ts +6 -0
- package/dist/correlation-chart/unconformity-line.d.ts +3 -0
- package/dist/data-provider/base.cjs +349 -0
- package/dist/data-provider/base.cjs.map +1 -0
- package/dist/data-provider/base.d.ts +65 -0
- package/dist/data-provider/base.js +349 -0
- package/dist/data-provider/base.js.map +1 -0
- package/dist/data-provider/column-nav.cjs +36 -0
- package/dist/data-provider/column-nav.cjs.map +1 -0
- package/dist/data-provider/column-nav.d.ts +13 -0
- package/dist/data-provider/column-nav.js +36 -0
- package/dist/data-provider/column-nav.js.map +1 -0
- package/dist/data-provider/core.cjs +56 -0
- package/dist/data-provider/core.cjs.map +1 -0
- package/dist/data-provider/core.d.ts +31 -0
- package/dist/data-provider/core.js +56 -0
- package/dist/{esm/column-views.67804ce5.js.map → data-provider/core.js.map} +1 -1
- package/dist/data-provider/fetch.cjs +210 -0
- package/dist/data-provider/fetch.cjs.map +1 -0
- package/dist/data-provider/fetch.d.ts +27 -0
- package/dist/data-provider/fetch.js +210 -0
- package/dist/data-provider/fetch.js.map +1 -0
- package/dist/data-provider/index.d.ts +5 -0
- package/dist/data-provider/store.cjs +107 -0
- package/dist/data-provider/store.cjs.map +1 -0
- package/dist/data-provider/store.d.ts +34 -0
- package/dist/data-provider/store.js +107 -0
- package/dist/data-provider/store.js.map +1 -0
- package/dist/data-provider/unit-selection.cjs +225 -0
- package/dist/data-provider/unit-selection.cjs.map +1 -0
- package/dist/data-provider/unit-selection.d.ts +49 -0
- package/dist/data-provider/unit-selection.js +225 -0
- package/dist/data-provider/unit-selection.js.map +1 -0
- package/dist/facets/carbon-isotopes/data-area.cjs +64 -0
- package/dist/facets/carbon-isotopes/data-area.cjs.map +1 -0
- package/dist/facets/carbon-isotopes/data-area.d.ts +13 -0
- package/dist/facets/carbon-isotopes/data-area.js +64 -0
- package/dist/facets/carbon-isotopes/data-area.js.map +1 -0
- package/dist/facets/carbon-isotopes/data-provider.cjs +20 -0
- package/dist/facets/carbon-isotopes/data-provider.cjs.map +1 -0
- package/dist/facets/carbon-isotopes/data-provider.d.ts +4 -0
- package/dist/facets/carbon-isotopes/data-provider.js +20 -0
- package/dist/facets/carbon-isotopes/data-provider.js.map +1 -0
- package/dist/facets/carbon-isotopes/index.d.ts +2 -0
- package/dist/facets/carbon-isotopes/isotopes-column.cjs +174 -0
- package/dist/facets/carbon-isotopes/isotopes-column.cjs.map +1 -0
- package/dist/facets/carbon-isotopes/isotopes-column.d.ts +19 -0
- package/dist/facets/carbon-isotopes/isotopes-column.js +174 -0
- package/dist/facets/carbon-isotopes/isotopes-column.js.map +1 -0
- package/dist/facets/carbon-isotopes/isotopes-column.module.sass.cjs +15 -0
- package/dist/facets/carbon-isotopes/isotopes-column.module.sass.cjs.map +1 -0
- package/dist/facets/carbon-isotopes/isotopes-column.module.sass.js +15 -0
- package/dist/facets/carbon-isotopes/isotopes-column.module.sass.js.map +1 -0
- package/dist/facets/detrital-zircon/index.cjs +108 -0
- package/dist/facets/detrital-zircon/index.cjs.map +1 -0
- package/dist/facets/detrital-zircon/index.d.ts +24 -0
- package/dist/facets/detrital-zircon/index.js +108 -0
- package/dist/facets/detrital-zircon/index.js.map +1 -0
- package/dist/facets/detrital-zircon/index.module.sass.cjs +11 -0
- package/dist/facets/detrital-zircon/index.module.sass.cjs.map +1 -0
- package/dist/facets/detrital-zircon/index.module.sass.js +11 -0
- package/dist/facets/detrital-zircon/index.module.sass.js.map +1 -0
- package/dist/facets/detrital-zircon/provider.cjs +22 -0
- package/dist/facets/detrital-zircon/provider.cjs.map +1 -0
- package/dist/facets/detrital-zircon/provider.d.ts +31 -0
- package/dist/facets/detrital-zircon/provider.js +22 -0
- package/dist/facets/detrital-zircon/provider.js.map +1 -0
- package/dist/facets/fossils/index.cjs +120 -0
- package/dist/facets/fossils/index.cjs.map +1 -0
- package/dist/facets/fossils/index.d.ts +7 -0
- package/dist/facets/fossils/index.js +120 -0
- package/dist/facets/fossils/index.js.map +1 -0
- package/dist/facets/fossils/provider.cjs +99 -0
- package/dist/facets/fossils/provider.cjs.map +1 -0
- package/dist/facets/fossils/provider.d.ts +29 -0
- package/dist/facets/fossils/provider.js +99 -0
- package/dist/facets/fossils/provider.js.map +1 -0
- package/dist/facets/fossils/taxon-ranges.cjs +145 -0
- package/dist/facets/fossils/taxon-ranges.cjs.map +1 -0
- package/dist/facets/fossils/taxon-ranges.d.ts +3 -0
- package/dist/facets/fossils/taxon-ranges.js +145 -0
- package/dist/facets/fossils/taxon-ranges.js.map +1 -0
- package/dist/facets/fossils/taxon-ranges.module.sass.cjs +13 -0
- package/dist/facets/fossils/taxon-ranges.module.sass.cjs.map +1 -0
- package/dist/facets/fossils/taxon-ranges.module.sass.js +13 -0
- package/dist/facets/fossils/taxon-ranges.module.sass.js.map +1 -0
- package/dist/facets/index.d.ts +4 -0
- package/dist/facets/measurements/base.cjs +128 -0
- package/dist/facets/measurements/base.cjs.map +1 -0
- package/dist/facets/measurements/base.d.ts +46 -0
- package/dist/facets/measurements/base.js +128 -0
- package/dist/facets/measurements/base.js.map +1 -0
- package/dist/facets/measurements/base.module.sass.cjs +8 -0
- package/dist/facets/measurements/base.module.sass.cjs.map +1 -0
- package/dist/facets/measurements/base.module.sass.js +8 -0
- package/dist/facets/measurements/base.module.sass.js.map +1 -0
- package/dist/facets/measurements/index.d.ts +2 -0
- package/dist/facets/measurements/sgp.cjs +62 -0
- package/dist/facets/measurements/sgp.cjs.map +1 -0
- package/dist/facets/measurements/sgp.d.ts +3 -0
- package/dist/facets/measurements/sgp.js +62 -0
- package/dist/facets/measurements/sgp.js.map +1 -0
- package/dist/index.cjs +164 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +164 -0
- package/dist/index.js.map +1 -0
- package/dist/maps/_shared/index.d.ts +2 -0
- package/dist/maps/_shared/inset-map.cjs +69 -0
- package/dist/maps/_shared/inset-map.cjs.map +1 -0
- package/dist/maps/_shared/inset-map.d.ts +16 -0
- package/dist/maps/_shared/inset-map.js +69 -0
- package/dist/maps/_shared/inset-map.js.map +1 -0
- package/dist/maps/_shared/styles.cjs +68 -0
- package/dist/maps/_shared/styles.cjs.map +1 -0
- package/dist/maps/_shared/styles.d.ts +2 -0
- package/dist/maps/_shared/styles.js +68 -0
- package/dist/maps/_shared/styles.js.map +1 -0
- package/dist/maps/column-correlation/core.cjs +185 -0
- package/dist/maps/column-correlation/core.cjs.map +1 -0
- package/dist/maps/column-correlation/core.d.ts +9 -0
- package/dist/maps/column-correlation/core.js +185 -0
- package/dist/maps/column-correlation/core.js.map +1 -0
- package/dist/maps/column-correlation/index.d.ts +2 -0
- package/dist/maps/column-correlation/state.cjs +129 -0
- package/dist/maps/column-correlation/state.cjs.map +1 -0
- package/dist/maps/column-correlation/state.d.ts +31 -0
- package/dist/maps/column-correlation/state.js +129 -0
- package/dist/maps/column-correlation/state.js.map +1 -0
- package/dist/maps/column-navigation/index.d.ts +2 -0
- package/dist/maps/column-navigation/mapbox/index.cjs +175 -0
- package/dist/maps/column-navigation/mapbox/index.cjs.map +1 -0
- package/dist/maps/column-navigation/mapbox/index.d.ts +17 -0
- package/dist/maps/column-navigation/mapbox/index.js +175 -0
- package/dist/maps/column-navigation/mapbox/index.js.map +1 -0
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs +99 -0
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs.map +1 -0
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.d.ts +31 -0
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.js +99 -0
- package/dist/maps/column-navigation/mapbox/keyboard-navigation.js.map +1 -0
- package/dist/maps/column-navigation/mapbox/state.cjs +71 -0
- package/dist/maps/column-navigation/mapbox/state.cjs.map +1 -0
- package/dist/maps/column-navigation/mapbox/state.d.ts +23 -0
- package/dist/maps/column-navigation/mapbox/state.js +71 -0
- package/dist/maps/column-navigation/mapbox/state.js.map +1 -0
- package/dist/maps/column-navigation/svg/animated.d.ts +1 -0
- package/dist/maps/column-navigation/svg/index.cjs +92 -0
- package/dist/maps/column-navigation/svg/index.cjs.map +1 -0
- package/dist/maps/column-navigation/svg/index.d.ts +9 -0
- package/dist/maps/column-navigation/svg/index.js +93 -0
- package/dist/maps/column-navigation/svg/index.js.map +1 -0
- package/dist/maps/column-navigation/svg/layers.cjs +175 -0
- package/dist/maps/column-navigation/svg/layers.cjs.map +1 -0
- package/dist/maps/column-navigation/svg/layers.d.ts +54 -0
- package/dist/maps/column-navigation/svg/layers.js +175 -0
- package/dist/maps/column-navigation/svg/layers.js.map +1 -0
- package/dist/maps/column-navigation/utils/keyboard-navigation.cjs +50 -0
- package/dist/maps/column-navigation/utils/keyboard-navigation.cjs.map +1 -0
- package/dist/maps/column-navigation/utils/keyboard-navigation.d.ts +10 -0
- package/dist/maps/column-navigation/utils/keyboard-navigation.js +50 -0
- package/dist/maps/column-navigation/utils/keyboard-navigation.js.map +1 -0
- package/dist/maps/index.d.ts +3 -0
- package/dist/notes.cjs +41 -0
- package/dist/notes.cjs.map +1 -0
- package/dist/notes.d.ts +12 -0
- package/dist/notes.js +41 -0
- package/dist/notes.js.map +1 -0
- package/dist/prepare-units/composite-scale.cjs +284 -0
- package/dist/prepare-units/composite-scale.cjs.map +1 -0
- package/dist/prepare-units/composite-scale.d.ts +19 -0
- package/dist/prepare-units/composite-scale.js +284 -0
- package/dist/prepare-units/composite-scale.js.map +1 -0
- package/dist/prepare-units/dynamic-scales.cjs +190 -0
- package/dist/prepare-units/dynamic-scales.cjs.map +1 -0
- package/dist/prepare-units/dynamic-scales.d.ts +13 -0
- package/dist/prepare-units/dynamic-scales.js +190 -0
- package/dist/prepare-units/dynamic-scales.js.map +1 -0
- package/dist/prepare-units/helpers.cjs +198 -0
- package/dist/prepare-units/helpers.cjs.map +1 -0
- package/dist/prepare-units/helpers.d.ts +10 -0
- package/dist/prepare-units/helpers.js +198 -0
- package/dist/prepare-units/helpers.js.map +1 -0
- package/dist/prepare-units/index.cjs +130 -0
- package/dist/prepare-units/index.cjs.map +1 -0
- package/dist/prepare-units/index.d.ts +10 -0
- package/dist/prepare-units/index.js +131 -0
- package/dist/prepare-units/index.js.map +1 -0
- package/dist/prepare-units/types.cjs +16 -0
- package/dist/prepare-units/types.cjs.map +1 -0
- package/dist/prepare-units/types.d.ts +99 -0
- package/dist/prepare-units/types.js +16 -0
- package/dist/prepare-units/types.js.map +1 -0
- package/dist/prepare-units/utils.cjs +99 -0
- package/dist/prepare-units/utils.cjs.map +1 -0
- package/dist/prepare-units/utils.d.ts +39 -0
- package/dist/prepare-units/utils.js +99 -0
- package/dist/prepare-units/utils.js.map +1 -0
- package/dist/section.cjs +269 -0
- package/dist/section.cjs.map +1 -0
- package/dist/section.d.ts +45 -0
- package/dist/section.js +269 -0
- package/dist/section.js.map +1 -0
- package/dist/unit-details/index.d.ts +3 -0
- package/dist/unit-details/modal-panel.cjs +57 -0
- package/dist/unit-details/modal-panel.cjs.map +1 -0
- package/dist/unit-details/modal-panel.d.ts +1 -0
- package/dist/unit-details/modal-panel.js +57 -0
- package/dist/unit-details/modal-panel.js.map +1 -0
- package/dist/unit-details/panel.cjs +627 -0
- package/dist/unit-details/panel.cjs.map +1 -0
- package/dist/unit-details/panel.d.ts +87 -0
- package/dist/unit-details/panel.js +627 -0
- package/dist/unit-details/panel.js.map +1 -0
- package/dist/unit-details/panel.module.sass.cjs +42 -0
- package/dist/unit-details/panel.module.sass.cjs.map +1 -0
- package/dist/unit-details/panel.module.sass.js +42 -0
- package/dist/unit-details/panel.module.sass.js.map +1 -0
- package/dist/unit-details/popover.cjs +81 -0
- package/dist/unit-details/popover.cjs.map +1 -0
- package/dist/unit-details/popover.d.ts +9 -0
- package/dist/unit-details/popover.js +81 -0
- package/dist/unit-details/popover.js.map +1 -0
- package/dist/unit-details/popover.module.sass.cjs +10 -0
- package/dist/unit-details/popover.module.sass.cjs.map +1 -0
- package/dist/unit-details/popover.module.sass.js +10 -0
- package/dist/unit-details/popover.module.sass.js.map +1 -0
- package/dist/units/boxes.cjs +187 -0
- package/dist/units/boxes.cjs.map +1 -0
- package/dist/units/boxes.d.ts +54 -0
- package/dist/units/boxes.js +187 -0
- package/dist/units/boxes.js.map +1 -0
- package/dist/units/boxes.module.sass.cjs +11 -0
- package/dist/units/boxes.module.sass.cjs.map +1 -0
- package/dist/units/boxes.module.sass.js +11 -0
- package/dist/units/boxes.module.sass.js.map +1 -0
- package/dist/units/colors.cjs +52 -0
- package/dist/units/colors.cjs.map +1 -0
- package/dist/units/colors.d.ts +7 -0
- package/dist/units/colors.js +52 -0
- package/dist/units/colors.js.map +1 -0
- package/dist/units/composite.cjs +157 -0
- package/dist/units/composite.cjs.map +1 -0
- package/dist/units/composite.d.ts +39 -0
- package/dist/units/composite.js +157 -0
- package/dist/units/composite.js.map +1 -0
- package/dist/units/composite.module.sass.cjs +7 -0
- package/dist/units/composite.module.sass.cjs.map +1 -0
- package/dist/units/composite.module.sass.js +7 -0
- package/dist/units/composite.module.sass.js.map +1 -0
- package/dist/units/index.cjs +117 -0
- package/dist/units/index.cjs.map +1 -0
- package/dist/units/index.d.ts +40 -0
- package/dist/units/index.js +118 -0
- package/dist/units/index.js.map +1 -0
- package/dist/units/names.cjs +72 -0
- package/dist/units/names.cjs.map +1 -0
- package/dist/units/names.d.ts +33 -0
- package/dist/units/names.js +72 -0
- package/dist/units/names.js.map +1 -0
- package/dist/units/resolvers.cjs +114 -0
- package/dist/units/resolvers.cjs.map +1 -0
- package/dist/units/resolvers.d.ts +3 -0
- package/dist/units/resolvers.js +114 -0
- package/dist/units/resolvers.js.map +1 -0
- package/dist/units/types.d.ts +16 -0
- package/package.json +52 -55
- package/src/unit-details/popover.module.sass +3 -3
- package/dist/esm/column-views.006d5180.js +0 -97
- package/dist/esm/column-views.006d5180.js.map +0 -1
- package/dist/esm/column-views.052498a6.js +0 -93
- package/dist/esm/column-views.052498a6.js.map +0 -1
- package/dist/esm/column-views.079119f4.js +0 -17
- package/dist/esm/column-views.079119f4.js.map +0 -1
- package/dist/esm/column-views.0abf7e10.js +0 -67
- package/dist/esm/column-views.0abf7e10.js.map +0 -1
- package/dist/esm/column-views.0b3c0d18.js +0 -322
- package/dist/esm/column-views.0b3c0d18.js.map +0 -1
- package/dist/esm/column-views.0ed9da35.js +0 -141
- package/dist/esm/column-views.0ed9da35.js.map +0 -1
- package/dist/esm/column-views.0faf79a9.js +0 -142
- package/dist/esm/column-views.0faf79a9.js.map +0 -1
- package/dist/esm/column-views.16cc7a58.css +0 -37
- package/dist/esm/column-views.16cc7a58.css.map +0 -1
- package/dist/esm/column-views.17a70358.js +0 -16
- package/dist/esm/column-views.17a70358.js.map +0 -1
- package/dist/esm/column-views.19539293.js +0 -86
- package/dist/esm/column-views.19539293.js.map +0 -1
- package/dist/esm/column-views.1af3ec1f.js +0 -139
- package/dist/esm/column-views.1af3ec1f.js.map +0 -1
- package/dist/esm/column-views.1cd55918.js +0 -206
- package/dist/esm/column-views.1cd55918.js.map +0 -1
- package/dist/esm/column-views.22ec902b.js +0 -34
- package/dist/esm/column-views.22ec902b.js.map +0 -1
- package/dist/esm/column-views.2a0010a3.js +0 -15
- package/dist/esm/column-views.2a0010a3.js.map +0 -1
- package/dist/esm/column-views.2c45a7b5.js +0 -25
- package/dist/esm/column-views.2c45a7b5.js.map +0 -1
- package/dist/esm/column-views.321af3ae.css +0 -59
- package/dist/esm/column-views.321af3ae.css.map +0 -1
- package/dist/esm/column-views.334c3947.js +0 -75
- package/dist/esm/column-views.334c3947.js.map +0 -1
- package/dist/esm/column-views.33796541.js +0 -88
- package/dist/esm/column-views.33796541.js.map +0 -1
- package/dist/esm/column-views.337b40a2.js +0 -199
- package/dist/esm/column-views.337b40a2.js.map +0 -1
- package/dist/esm/column-views.338a7a83.css +0 -134
- package/dist/esm/column-views.338a7a83.css.map +0 -1
- package/dist/esm/column-views.33d35a44.js +0 -118
- package/dist/esm/column-views.33d35a44.js.map +0 -1
- package/dist/esm/column-views.3465c8ad.js +0 -16
- package/dist/esm/column-views.3465c8ad.js.map +0 -1
- package/dist/esm/column-views.362aae9a.js +0 -113
- package/dist/esm/column-views.362aae9a.js.map +0 -1
- package/dist/esm/column-views.3b972a9b.css +0 -4
- package/dist/esm/column-views.3b972a9b.css.map +0 -1
- package/dist/esm/column-views.3de4dc43.js +0 -66
- package/dist/esm/column-views.3de4dc43.js.map +0 -1
- package/dist/esm/column-views.40cd59b5.js +0 -13
- package/dist/esm/column-views.40cd59b5.js.map +0 -1
- package/dist/esm/column-views.4252a555.js +0 -248
- package/dist/esm/column-views.4252a555.js.map +0 -1
- package/dist/esm/column-views.45c70ba4.js +0 -38
- package/dist/esm/column-views.45c70ba4.js.map +0 -1
- package/dist/esm/column-views.47b7d9ca.js +0 -206
- package/dist/esm/column-views.47b7d9ca.js.map +0 -1
- package/dist/esm/column-views.47ca059d.js +0 -225
- package/dist/esm/column-views.47ca059d.js.map +0 -1
- package/dist/esm/column-views.4d374a35.js +0 -19
- package/dist/esm/column-views.4d374a35.js.map +0 -1
- package/dist/esm/column-views.54c1f382.css +0 -23
- package/dist/esm/column-views.54c1f382.css.map +0 -1
- package/dist/esm/column-views.562db43a.css +0 -148
- package/dist/esm/column-views.562db43a.css.map +0 -1
- package/dist/esm/column-views.5e1c216f.js +0 -180
- package/dist/esm/column-views.5e1c216f.js.map +0 -1
- package/dist/esm/column-views.60e97132.js +0 -20
- package/dist/esm/column-views.60e97132.js.map +0 -1
- package/dist/esm/column-views.636d6553.js +0 -343
- package/dist/esm/column-views.636d6553.js.map +0 -1
- package/dist/esm/column-views.64f6ddd3.js +0 -9
- package/dist/esm/column-views.64f6ddd3.js.map +0 -1
- package/dist/esm/column-views.6519a353.js +0 -9
- package/dist/esm/column-views.6519a353.js.map +0 -1
- package/dist/esm/column-views.67804ce5.js +0 -68
- package/dist/esm/column-views.6992ca88.js +0 -25
- package/dist/esm/column-views.6992ca88.js.map +0 -1
- package/dist/esm/column-views.6a954628.js +0 -70
- package/dist/esm/column-views.6a954628.js.map +0 -1
- package/dist/esm/column-views.6c670c13.css +0 -26
- package/dist/esm/column-views.6c670c13.css.map +0 -1
- package/dist/esm/column-views.6cff6659.js +0 -11
- package/dist/esm/column-views.6cff6659.js.map +0 -1
- package/dist/esm/column-views.6d6b73b4.js +0 -55
- package/dist/esm/column-views.6d6b73b4.js.map +0 -1
- package/dist/esm/column-views.6f9511d1.css +0 -25
- package/dist/esm/column-views.6f9511d1.css.map +0 -1
- package/dist/esm/column-views.6fff7602.js +0 -94
- package/dist/esm/column-views.6fff7602.js.map +0 -1
- package/dist/esm/column-views.70387120.js +0 -9
- package/dist/esm/column-views.70387120.js.map +0 -1
- package/dist/esm/column-views.708140ab.css +0 -36
- package/dist/esm/column-views.708140ab.css.map +0 -1
- package/dist/esm/column-views.74837922.js +0 -112
- package/dist/esm/column-views.74837922.js.map +0 -1
- package/dist/esm/column-views.76fb9948.js +0 -169
- package/dist/esm/column-views.76fb9948.js.map +0 -1
- package/dist/esm/column-views.7bfb4318.js +0 -161
- package/dist/esm/column-views.7bfb4318.js.map +0 -1
- package/dist/esm/column-views.7dc53f1b.js +0 -168
- package/dist/esm/column-views.7dc53f1b.js.map +0 -1
- package/dist/esm/column-views.85df21ec.js +0 -567
- package/dist/esm/column-views.85df21ec.js.map +0 -1
- package/dist/esm/column-views.87c589b7.js +0 -72
- package/dist/esm/column-views.87c589b7.js.map +0 -1
- package/dist/esm/column-views.8da2b857.js +0 -81
- package/dist/esm/column-views.8da2b857.js.map +0 -1
- package/dist/esm/column-views.8fb37de7.js +0 -9
- package/dist/esm/column-views.8fb37de7.js.map +0 -1
- package/dist/esm/column-views.9512c5d5.js +0 -240
- package/dist/esm/column-views.9512c5d5.js.map +0 -1
- package/dist/esm/column-views.9905b91c.js +0 -11
- package/dist/esm/column-views.9905b91c.js.map +0 -1
- package/dist/esm/column-views.9b77388d.js +0 -41
- package/dist/esm/column-views.9b77388d.js.map +0 -1
- package/dist/esm/column-views.a4f394fe.js +0 -127
- package/dist/esm/column-views.a4f394fe.js.map +0 -1
- package/dist/esm/column-views.a7c5ae16.js +0 -25
- package/dist/esm/column-views.a7c5ae16.js.map +0 -1
- package/dist/esm/column-views.aa9ede4d.js +0 -206
- package/dist/esm/column-views.aa9ede4d.js.map +0 -1
- package/dist/esm/column-views.b7cf0da2.js +0 -60
- package/dist/esm/column-views.b7cf0da2.js.map +0 -1
- package/dist/esm/column-views.beb54e95.js +0 -39
- package/dist/esm/column-views.beb54e95.js.map +0 -1
- package/dist/esm/column-views.c47dba5f.js +0 -9
- package/dist/esm/column-views.c47dba5f.js.map +0 -1
- package/dist/esm/column-views.c750a6df.js +0 -9
- package/dist/esm/column-views.c750a6df.js.map +0 -1
- package/dist/esm/column-views.cb1cc9f2.js +0 -134
- package/dist/esm/column-views.cb1cc9f2.js.map +0 -1
- package/dist/esm/column-views.cb6fc808.css +0 -54
- package/dist/esm/column-views.cb6fc808.css.map +0 -1
- package/dist/esm/column-views.cc733361.js +0 -55
- package/dist/esm/column-views.cc733361.js.map +0 -1
- package/dist/esm/column-views.ce000969.js +0 -187
- package/dist/esm/column-views.ce000969.js.map +0 -1
- package/dist/esm/column-views.d5e788e8.js +0 -31
- package/dist/esm/column-views.d5e788e8.js.map +0 -1
- package/dist/esm/column-views.d7740949.js +0 -152
- package/dist/esm/column-views.d7740949.js.map +0 -1
- package/dist/esm/column-views.d7e6bf67.js +0 -70
- package/dist/esm/column-views.d7e6bf67.js.map +0 -1
- package/dist/esm/column-views.dac0a3bb.js +0 -149
- package/dist/esm/column-views.dac0a3bb.js.map +0 -1
- package/dist/esm/column-views.dc42f5d0.js +0 -48
- package/dist/esm/column-views.dc42f5d0.js.map +0 -1
- package/dist/esm/column-views.e13a0a76.js +0 -138
- package/dist/esm/column-views.e13a0a76.js.map +0 -1
- package/dist/esm/column-views.e40b8bfb.css +0 -14
- package/dist/esm/column-views.e40b8bfb.css.map +0 -1
- package/dist/esm/column-views.e93478c3.css +0 -194
- package/dist/esm/column-views.e93478c3.css.map +0 -1
- package/dist/esm/column-views.ea08f667.js +0 -218
- package/dist/esm/column-views.ea08f667.js.map +0 -1
- package/dist/esm/column-views.ebb5f280.js +0 -13
- package/dist/esm/column-views.ebb5f280.js.map +0 -1
- package/dist/esm/column-views.edf77621.js +0 -22
- package/dist/esm/column-views.edf77621.js.map +0 -1
- package/dist/esm/column-views.f9dab157.js +0 -3
- package/dist/esm/column-views.f9dab157.js.map +0 -1
- package/dist/esm/column-views.fcf25ec6.js +0 -76
- package/dist/esm/column-views.fcf25ec6.js.map +0 -1
- package/dist/esm/column-views.fe42d2fc.js +0 -134
- package/dist/esm/column-views.fe42d2fc.js.map +0 -1
- package/dist/esm/index.d.ts +0 -1008
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -27
- package/dist/esm/index.js.map +0 -1
- package/dist/node/column-views.012fa10c.js +0 -2
- package/dist/node/column-views.012fa10c.js.map +0 -1
- package/dist/node/column-views.048fdcaf.js +0 -2
- package/dist/node/column-views.048fdcaf.js.map +0 -1
- package/dist/node/column-views.04a72b35.js +0 -2
- package/dist/node/column-views.04a72b35.js.map +0 -1
- package/dist/node/column-views.0840b115.css +0 -2
- package/dist/node/column-views.0840b115.css.map +0 -1
- package/dist/node/column-views.0af5912d.js +0 -2
- package/dist/node/column-views.0af5912d.js.map +0 -1
- package/dist/node/column-views.0bd15ee4.js +0 -2
- package/dist/node/column-views.0bd15ee4.js.map +0 -1
- package/dist/node/column-views.0d254fd3.js +0 -2
- package/dist/node/column-views.0d254fd3.js.map +0 -1
- package/dist/node/column-views.109cb0c8.js +0 -2
- package/dist/node/column-views.109cb0c8.js.map +0 -1
- package/dist/node/column-views.1261be59.js +0 -2
- package/dist/node/column-views.1261be59.js.map +0 -1
- package/dist/node/column-views.133855e6.js +0 -2
- package/dist/node/column-views.133855e6.js.map +0 -1
- package/dist/node/column-views.15b5cecc.js +0 -2
- package/dist/node/column-views.15b5cecc.js.map +0 -1
- package/dist/node/column-views.183745c0.js +0 -2
- package/dist/node/column-views.183745c0.js.map +0 -1
- package/dist/node/column-views.2e2158f5.js +0 -2
- package/dist/node/column-views.2e2158f5.js.map +0 -1
- package/dist/node/column-views.306acd3f.js +0 -2
- package/dist/node/column-views.306acd3f.js.map +0 -1
- package/dist/node/column-views.31153f29.js +0 -2
- package/dist/node/column-views.31153f29.js.map +0 -1
- package/dist/node/column-views.31da008b.js +0 -2
- package/dist/node/column-views.31da008b.js.map +0 -1
- package/dist/node/column-views.3a079e34.css +0 -2
- package/dist/node/column-views.3a079e34.css.map +0 -1
- package/dist/node/column-views.40e758b3.js +0 -2
- package/dist/node/column-views.40e758b3.js.map +0 -1
- package/dist/node/column-views.41876859.js +0 -2
- package/dist/node/column-views.41876859.js.map +0 -1
- package/dist/node/column-views.4a28d695.js +0 -2
- package/dist/node/column-views.4a28d695.js.map +0 -1
- package/dist/node/column-views.4ec769a6.js +0 -2
- package/dist/node/column-views.4ec769a6.js.map +0 -1
- package/dist/node/column-views.50a992d3.css +0 -2
- package/dist/node/column-views.50a992d3.css.map +0 -1
- package/dist/node/column-views.51fbed89.js +0 -2
- package/dist/node/column-views.51fbed89.js.map +0 -1
- package/dist/node/column-views.5950c8eb.js +0 -2
- package/dist/node/column-views.5950c8eb.js.map +0 -1
- package/dist/node/column-views.5987bc26.js +0 -2
- package/dist/node/column-views.5987bc26.js.map +0 -1
- package/dist/node/column-views.5a9331a9.js +0 -2
- package/dist/node/column-views.5a9331a9.js.map +0 -1
- package/dist/node/column-views.5bb858c9.js +0 -2
- package/dist/node/column-views.5bb858c9.js.map +0 -1
- package/dist/node/column-views.5c1b0eeb.css +0 -2
- package/dist/node/column-views.5c1b0eeb.css.map +0 -1
- package/dist/node/column-views.5cbada24.js +0 -2
- package/dist/node/column-views.5cbada24.js.map +0 -1
- package/dist/node/column-views.5fcd2be6.js +0 -2
- package/dist/node/column-views.5fcd2be6.js.map +0 -1
- package/dist/node/column-views.672b683c.js +0 -2
- package/dist/node/column-views.672b683c.js.map +0 -1
- package/dist/node/column-views.6a0a35e7.js +0 -2
- package/dist/node/column-views.6a0a35e7.js.map +0 -1
- package/dist/node/column-views.6a4c2100.css +0 -2
- package/dist/node/column-views.6a4c2100.css.map +0 -1
- package/dist/node/column-views.6a9da051.js +0 -2
- package/dist/node/column-views.6a9da051.js.map +0 -1
- package/dist/node/column-views.6bba8c57.js +0 -2
- package/dist/node/column-views.6bba8c57.js.map +0 -1
- package/dist/node/column-views.75ba0464.css +0 -2
- package/dist/node/column-views.75ba0464.css.map +0 -1
- package/dist/node/column-views.78b2d234.js +0 -2
- package/dist/node/column-views.78b2d234.js.map +0 -1
- package/dist/node/column-views.7b6e7d82.js +0 -2
- package/dist/node/column-views.7b6e7d82.js.map +0 -1
- package/dist/node/column-views.7b9bd06e.css +0 -2
- package/dist/node/column-views.7b9bd06e.css.map +0 -1
- package/dist/node/column-views.7d45bbeb.js +0 -2
- package/dist/node/column-views.7d45bbeb.js.map +0 -1
- package/dist/node/column-views.7f9c7448.js +0 -2
- package/dist/node/column-views.7f9c7448.js.map +0 -1
- package/dist/node/column-views.82cf7c0d.js +0 -2
- package/dist/node/column-views.82cf7c0d.js.map +0 -1
- package/dist/node/column-views.869c7199.js +0 -2
- package/dist/node/column-views.869c7199.js.map +0 -1
- package/dist/node/column-views.8bee789c.js +0 -2
- package/dist/node/column-views.8bee789c.js.map +0 -1
- package/dist/node/column-views.90c36c0b.js +0 -2
- package/dist/node/column-views.90c36c0b.js.map +0 -1
- package/dist/node/column-views.951e3e9a.js +0 -2
- package/dist/node/column-views.951e3e9a.js.map +0 -1
- package/dist/node/column-views.95411f1b.js +0 -2
- package/dist/node/column-views.95411f1b.js.map +0 -1
- package/dist/node/column-views.9cb13e51.css +0 -2
- package/dist/node/column-views.9cb13e51.css.map +0 -1
- package/dist/node/column-views.a0969fc8.js +0 -2
- package/dist/node/column-views.a0969fc8.js.map +0 -1
- package/dist/node/column-views.a2476e39.js +0 -2
- package/dist/node/column-views.a2476e39.js.map +0 -1
- package/dist/node/column-views.a8f5ee28.js +0 -2
- package/dist/node/column-views.a8f5ee28.js.map +0 -1
- package/dist/node/column-views.ad60c02f.js +0 -2
- package/dist/node/column-views.ad60c02f.js.map +0 -1
- package/dist/node/column-views.add5e42b.js +0 -2
- package/dist/node/column-views.add5e42b.js.map +0 -1
- package/dist/node/column-views.b169b4b5.css +0 -2
- package/dist/node/column-views.b169b4b5.css.map +0 -1
- package/dist/node/column-views.b2e5f823.js +0 -2
- package/dist/node/column-views.b2e5f823.js.map +0 -1
- package/dist/node/column-views.b57e5e6e.js +0 -2
- package/dist/node/column-views.b57e5e6e.js.map +0 -1
- package/dist/node/column-views.b762c9a8.js +0 -2
- package/dist/node/column-views.b762c9a8.js.map +0 -1
- package/dist/node/column-views.ba9108fe.js +0 -2
- package/dist/node/column-views.ba9108fe.js.map +0 -1
- package/dist/node/column-views.c16a19fb.js +0 -2
- package/dist/node/column-views.c16a19fb.js.map +0 -1
- package/dist/node/column-views.c3097d9a.js +0 -2
- package/dist/node/column-views.c3097d9a.js.map +0 -1
- package/dist/node/column-views.c4c15e2b.js +0 -2
- package/dist/node/column-views.c4c15e2b.js.map +0 -1
- package/dist/node/column-views.c651b684.js +0 -2
- package/dist/node/column-views.c651b684.js.map +0 -1
- package/dist/node/column-views.c968a185.css +0 -2
- package/dist/node/column-views.c968a185.css.map +0 -1
- package/dist/node/column-views.ccfb9afb.css +0 -2
- package/dist/node/column-views.ccfb9afb.css.map +0 -1
- package/dist/node/column-views.cdcce702.js +0 -2
- package/dist/node/column-views.cdcce702.js.map +0 -1
- package/dist/node/column-views.cf41a6d7.js +0 -2
- package/dist/node/column-views.cf41a6d7.js.map +0 -1
- package/dist/node/column-views.d22bf15c.js +0 -2
- package/dist/node/column-views.d22bf15c.js.map +0 -1
- package/dist/node/column-views.d737de1e.js +0 -2
- package/dist/node/column-views.d737de1e.js.map +0 -1
- package/dist/node/column-views.da902c44.js +0 -2
- package/dist/node/column-views.da902c44.js.map +0 -1
- package/dist/node/column-views.db3377d8.js +0 -2
- package/dist/node/column-views.db3377d8.js.map +0 -1
- package/dist/node/column-views.dbb4a46b.js +0 -2
- package/dist/node/column-views.dbb4a46b.js.map +0 -1
- package/dist/node/column-views.ddc6184e.css +0 -2
- package/dist/node/column-views.ddc6184e.css.map +0 -1
- package/dist/node/column-views.e0e20136.js +0 -2
- package/dist/node/column-views.e0e20136.js.map +0 -1
- package/dist/node/column-views.e2562224.js +0 -2
- package/dist/node/column-views.e2562224.js.map +0 -1
- package/dist/node/column-views.e6720522.js +0 -2
- package/dist/node/column-views.e6720522.js.map +0 -1
- package/dist/node/column-views.e7e26765.js +0 -2
- package/dist/node/column-views.e7e26765.js.map +0 -1
- package/dist/node/column-views.e93b3bdb.js +0 -2
- package/dist/node/column-views.e93b3bdb.js.map +0 -1
- package/dist/node/column-views.ebb44b7d.js +0 -2
- package/dist/node/column-views.ebb44b7d.js.map +0 -1
- package/dist/node/column-views.ec0087a2.js +0 -2
- package/dist/node/column-views.ec0087a2.js.map +0 -1
- package/dist/node/column-views.eea80478.js +0 -2
- package/dist/node/column-views.eea80478.js.map +0 -1
- package/dist/node/column-views.fb3ed7cc.js +0 -2
- package/dist/node/column-views.fb3ed7cc.js.map +0 -1
- package/dist/node/column-views.fc4c2c61.js +0 -2
- package/dist/node/column-views.fc4c2c61.js.map +0 -1
- package/dist/node/column-views.fcb243a2.js +0 -2
- package/dist/node/column-views.fcb243a2.js.map +0 -1
- package/dist/node/column-views.fea32686.js +0 -2
- package/dist/node/column-views.fea32686.js.map +0 -1
- package/dist/node/index.js +0 -2
- package/dist/node/index.js.map +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { preprocessSectionUnit, getSectionPosRange, getSectionAgeRange, groupUnitsIntoSectionsBySectionID, groupUnitsIntoSectionsByOverlap, mergeOverlappingSections, preprocessUnits } from "./helpers.js";
|
|
2
|
+
import { ColumnAxisType } from "@macrostrat/column-components";
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { computeSectionHeights, collapseUnconformitiesByPixelHeight, finalizeSectionHeights } from "./composite-scale.js";
|
|
5
|
+
import { MergeSectionsMode, agesOverlap, unitsOverlap } from "./utils.js";
|
|
6
|
+
import { createUnitSorter, ensureArray, ensureRealFloat, getPositionWithinUnit, getUnitHeightRange } from "./utils.js";
|
|
7
|
+
function usePreparedColumnUnits(data, options) {
|
|
8
|
+
return useMemo(() => {
|
|
9
|
+
return prepareColumnUnits(data, options);
|
|
10
|
+
}, [data, ...Object.values(options)]);
|
|
11
|
+
}
|
|
12
|
+
function prepareColumnUnits(units, options) {
|
|
13
|
+
let { t_age, b_age, t_pos, b_pos } = options;
|
|
14
|
+
const {
|
|
15
|
+
mergeSections = MergeSectionsMode.OVERLAPPING,
|
|
16
|
+
axisType,
|
|
17
|
+
unconformityHeight,
|
|
18
|
+
collapseSmallUnconformities = false,
|
|
19
|
+
hybridScale,
|
|
20
|
+
scale
|
|
21
|
+
} = options;
|
|
22
|
+
let _totalHeight = null;
|
|
23
|
+
if (scale != null) {
|
|
24
|
+
const domain = scale.domain();
|
|
25
|
+
if (axisType == ColumnAxisType.AGE) {
|
|
26
|
+
if (t_age == null) t_age = Math.min(...domain);
|
|
27
|
+
if (b_age == null) b_age = Math.max(...domain);
|
|
28
|
+
_totalHeight = Math.abs(scale(b_age) - scale(t_age));
|
|
29
|
+
} else {
|
|
30
|
+
if (t_pos == null) t_pos = Math.min(...domain);
|
|
31
|
+
if (b_pos == null) b_pos = Math.max(...domain);
|
|
32
|
+
_totalHeight = Math.abs(scale(b_pos) - scale(t_pos));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
let units1 = units.map(preprocessSectionUnit);
|
|
36
|
+
units1 = units1.filter((d) => {
|
|
37
|
+
if (axisType == ColumnAxisType.AGE) {
|
|
38
|
+
return agesOverlap(d, { t_age, b_age });
|
|
39
|
+
} else {
|
|
40
|
+
return unitsOverlap(d, { t_pos, b_pos }, axisType);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
let mergeMode = mergeSections;
|
|
44
|
+
let sections0;
|
|
45
|
+
if (mergeMode == MergeSectionsMode.ALL) {
|
|
46
|
+
const [b_unit_pos, t_unit_pos] = getSectionPosRange(units1, axisType);
|
|
47
|
+
const [b_unit_age, t_unit_age] = getSectionAgeRange(units1);
|
|
48
|
+
sections0 = [
|
|
49
|
+
{
|
|
50
|
+
section_id: 0,
|
|
51
|
+
/**
|
|
52
|
+
* If ages limits are directly specified, use them to define the section bounds.
|
|
53
|
+
* */
|
|
54
|
+
t_pos: t_unit_pos,
|
|
55
|
+
b_pos: b_unit_pos,
|
|
56
|
+
t_age: t_unit_age,
|
|
57
|
+
b_age: b_unit_age,
|
|
58
|
+
units: units1
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
} else if (axisType == ColumnAxisType.AGE) {
|
|
62
|
+
sections0 = groupUnitsIntoSectionsBySectionID(units1, axisType);
|
|
63
|
+
} else {
|
|
64
|
+
sections0 = groupUnitsIntoSectionsByOverlap(units1, axisType);
|
|
65
|
+
}
|
|
66
|
+
for (let section of sections0) {
|
|
67
|
+
if (axisType == ColumnAxisType.AGE) {
|
|
68
|
+
section.t_age = Math.max(section.t_age, t_age ?? -Infinity);
|
|
69
|
+
section.b_age = Math.min(section.b_age, b_age ?? Infinity);
|
|
70
|
+
} else if (axisType == ColumnAxisType.DEPTH) {
|
|
71
|
+
section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);
|
|
72
|
+
section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);
|
|
73
|
+
} else if (axisType == ColumnAxisType.HEIGHT) {
|
|
74
|
+
section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);
|
|
75
|
+
section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
let sections = sections0;
|
|
79
|
+
if (mergeSections == MergeSectionsMode.OVERLAPPING && axisType == ColumnAxisType.AGE) {
|
|
80
|
+
sections = mergeOverlappingSections(sections);
|
|
81
|
+
}
|
|
82
|
+
sections = sections.filter((d) => d != null);
|
|
83
|
+
let sectionsWithScales = computeSectionHeights(sections, options);
|
|
84
|
+
if (collapseSmallUnconformities && hybridScale == null) {
|
|
85
|
+
let threshold = unconformityHeight ?? 30;
|
|
86
|
+
if (typeof collapseSmallUnconformities == "number") {
|
|
87
|
+
threshold = collapseSmallUnconformities;
|
|
88
|
+
}
|
|
89
|
+
sectionsWithScales = collapseUnconformitiesByPixelHeight(
|
|
90
|
+
sectionsWithScales,
|
|
91
|
+
threshold,
|
|
92
|
+
options
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
let { totalHeight, sections: sections2 } = finalizeSectionHeights(
|
|
96
|
+
sectionsWithScales,
|
|
97
|
+
unconformityHeight
|
|
98
|
+
);
|
|
99
|
+
const sectionsOut = sections2.map((section) => {
|
|
100
|
+
return {
|
|
101
|
+
...section,
|
|
102
|
+
units: preprocessUnits(section, axisType)
|
|
103
|
+
};
|
|
104
|
+
});
|
|
105
|
+
const units2 = sectionsOut.reduce((acc, group) => {
|
|
106
|
+
const { units: units3 } = group;
|
|
107
|
+
for (const unit of units3) {
|
|
108
|
+
acc.push(unit);
|
|
109
|
+
}
|
|
110
|
+
return acc;
|
|
111
|
+
}, []);
|
|
112
|
+
return {
|
|
113
|
+
units: units2,
|
|
114
|
+
totalHeight: _totalHeight ?? totalHeight,
|
|
115
|
+
sections: sectionsOut
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
MergeSectionsMode,
|
|
120
|
+
agesOverlap,
|
|
121
|
+
createUnitSorter,
|
|
122
|
+
ensureArray,
|
|
123
|
+
ensureRealFloat,
|
|
124
|
+
getPositionWithinUnit,
|
|
125
|
+
getUnitHeightRange,
|
|
126
|
+
prepareColumnUnits,
|
|
127
|
+
preprocessUnits,
|
|
128
|
+
unitsOverlap,
|
|
129
|
+
usePreparedColumnUnits
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/prepare-units/index.ts"],"sourcesContent":["import {\n getSectionAgeRange,\n getSectionPosRange,\n groupUnitsIntoSectionsByOverlap,\n groupUnitsIntoSectionsBySectionID,\n mergeOverlappingSections,\n preprocessSectionUnit,\n preprocessUnits,\n} from \"./helpers\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { useMemo } from \"react\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport {\n collapseUnconformitiesByPixelHeight,\n computeSectionHeights,\n finalizeSectionHeights,\n type CompositeColumnScale,\n} from \"./composite-scale\";\nimport {\n agesOverlap,\n MergeSectionsMode,\n PrepareColumnOptions,\n PreparedColumnData,\n unitsOverlap,\n} from \"./utils\";\nimport { SectionInfo } from \"./types\";\n\nexport * from \"./utils\";\nexport * from \"./types\";\nexport { preprocessUnits };\nexport type { CompositeColumnScale };\n\nexport function usePreparedColumnUnits(\n data: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** This function wraps and memoizes all preparation steps for converting\n * an array of units from the /units route to a form ready for usage.\n */\n return useMemo(() => {\n return prepareColumnUnits(data, options);\n }, [data, ...Object.values(options)]);\n}\n\nexport function prepareColumnUnits(\n units: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** Prepare units for rendering into Macrostrat columns */\n\n let { t_age, b_age, t_pos, b_pos } = options;\n\n const {\n mergeSections = MergeSectionsMode.OVERLAPPING,\n axisType,\n unconformityHeight,\n collapseSmallUnconformities = false,\n hybridScale,\n scale,\n } = options;\n\n let _totalHeight = null;\n\n if (scale != null) {\n // Set t_age and b_age based on scale domain if not already set\n const domain = scale.domain();\n if (axisType == ColumnAxisType.AGE) {\n if (t_age == null) t_age = Math.min(...domain);\n if (b_age == null) b_age = Math.max(...domain);\n _totalHeight = Math.abs(scale(b_age) - scale(t_age));\n } else {\n if (t_pos == null) t_pos = Math.min(...domain);\n if (b_pos == null) b_pos = Math.max(...domain);\n _totalHeight = Math.abs(scale(b_pos) - scale(t_pos));\n }\n }\n\n // Start by ensuring that ages and positions are numbers\n // also set up some values for eODP-style columns\n let units1 = units.map(preprocessSectionUnit);\n\n /** Prototype filtering to age range */\n units1 = units1.filter((d) => {\n // Filter units by t_age and b_age, inclusive\n if (axisType == ColumnAxisType.AGE) {\n return agesOverlap(d, { t_age, b_age });\n } else {\n return unitsOverlap(d, { t_pos, b_pos } as any, axisType);\n }\n });\n\n let mergeMode = mergeSections;\n // if (axisType != ColumnAxisType.AGE) {\n // // For non-age columns, we always merge sections.\n // // This is because the \"groupUnitsIntoSections\" function is not well-defined\n // // for non-age columns.\n // mergeMode = MergeSectionsMode.ALL;\n // }\n\n let sections0: SectionInfo<UnitLong>[];\n if (mergeMode == MergeSectionsMode.ALL) {\n // For the \"merge sections\" mode, we need to create a single section\n const [b_unit_pos, t_unit_pos] = getSectionPosRange(units1, axisType);\n const [b_unit_age, t_unit_age] = getSectionAgeRange(units1);\n sections0 = [\n {\n section_id: 0,\n /**\n * If ages limits are directly specified, use them to define the section bounds.\n * */\n t_pos: t_unit_pos,\n b_pos: b_unit_pos,\n t_age: t_unit_age,\n b_age: b_unit_age,\n units: units1,\n },\n ];\n } else if (axisType == ColumnAxisType.AGE) {\n sections0 = groupUnitsIntoSectionsBySectionID(units1, axisType);\n } else {\n sections0 = groupUnitsIntoSectionsByOverlap(units1, axisType);\n }\n\n // Limit sections to the range specified by t_age/b_age or t_pos/b_pos global options\n for (let section of sections0) {\n if (axisType == ColumnAxisType.AGE) {\n section.t_age = Math.max(section.t_age, t_age ?? -Infinity);\n section.b_age = Math.min(section.b_age, b_age ?? Infinity);\n } else if (axisType == ColumnAxisType.DEPTH) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n } else if (axisType == ColumnAxisType.HEIGHT) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n }\n }\n\n /** Merging overlapping sections really only makes sense for age/height/depth\n * columns. Ordinal columns are numbered by section so merging them\n * results in collisions.\n */\n let sections = sections0;\n if (\n mergeSections == MergeSectionsMode.OVERLAPPING &&\n axisType == ColumnAxisType.AGE\n ) {\n sections = mergeOverlappingSections(sections);\n }\n // Filter out undefined sections just in case\n sections = sections.filter((d) => d != null);\n\n // SCALES\n\n /* Compute pixel scales etc. for sections\n * We need to do this now to determine which unconformities\n * are small enough to collapse.\n */\n let sectionsWithScales = computeSectionHeights(sections, options);\n\n if (collapseSmallUnconformities && hybridScale == null) {\n // Collapse small unconformities in pixel height space\n // TODO: this doesn't seem to work properly for non-age columns?\n let threshold = unconformityHeight ?? 30;\n if (typeof collapseSmallUnconformities == \"number\") {\n threshold = collapseSmallUnconformities;\n }\n\n sectionsWithScales = collapseUnconformitiesByPixelHeight(\n sectionsWithScales,\n threshold,\n options,\n );\n }\n\n /** Prepare section scale information using groups.\n * Total height is computed from section scales.\n * */\n let { totalHeight, sections: sections2 } = finalizeSectionHeights(\n sectionsWithScales,\n unconformityHeight,\n );\n\n /** For each section, find units that are overlapping.\n * We do this after merging sections so that we can\n * handle cases where there are overlapping units across sections\n * */\n const sectionsOut = sections2.map((section) => {\n return {\n ...section,\n units: preprocessUnits(section, axisType),\n };\n });\n\n /** Reconstitute the units so that they are sorted by section and properly enhanced.\n * This is mostly important so that unit keyboard navigation\n * predictably selects adjacent units.\n */\n const units2 = sectionsOut.reduce((acc, group) => {\n const { units } = group;\n for (const unit of units) {\n acc.push(unit);\n }\n return acc;\n }, []);\n\n return {\n units: units2,\n totalHeight: _totalHeight ?? totalHeight,\n sections: sectionsOut,\n };\n}\n"],"names":["units"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
var HybridScaleType = /* @__PURE__ */ ((HybridScaleType2) => {
|
|
4
|
+
HybridScaleType2["EquidistantSurfaces"] = "equidistant-surfaces";
|
|
5
|
+
HybridScaleType2["ApproximateHeight"] = "approximate-height";
|
|
6
|
+
return HybridScaleType2;
|
|
7
|
+
})(HybridScaleType || {});
|
|
8
|
+
var HeightMethod = /* @__PURE__ */ ((HeightMethod2) => {
|
|
9
|
+
HeightMethod2["Minimum"] = "minimum";
|
|
10
|
+
HeightMethod2["Average"] = "average";
|
|
11
|
+
HeightMethod2["Maximum"] = "maximum";
|
|
12
|
+
return HeightMethod2;
|
|
13
|
+
})(HeightMethod || {});
|
|
14
|
+
exports.HeightMethod = HeightMethod;
|
|
15
|
+
exports.HybridScaleType = HybridScaleType;
|
|
16
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","sources":["../../src/prepare-units/types.ts"],"sourcesContent":["import type { UnitLong } from \"@macrostrat/api-types\";\nimport type { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ScaleContinuousNumeric } from \"d3-scale\";\n\nexport interface ColumnHeightScaleOptions {\n /** A fixed pixel scale to use for the section (pixels per Myr) */\n pixelScale?: number;\n /** The target height of a constituent unit in pixels, for dynamic\n * scale generation */\n targetUnitHeight?: number;\n /** Min height of a section in pixels. Will override minPixelScale in some cases. */\n minSectionHeight?: number;\n /** The minimum pixel scale to use for the section (pixels per Myr). This is mostly\n * needed because small sections (<1-2 units) don't necessarily have space to comfortably\n * render two axis labels */\n minPixelScale?: number;\n // Axis scale type\n axisType?: ColumnAxisType;\n // Unconformity height in pixels\n unconformityHeight?: number;\n // Whether to collapse unconformities that are less than a height threshold\n collapseSmallUnconformities?: boolean | number;\n // A continuous scale to use instead of generating one\n // TODO: discontinuous scales are not yet supported\n scale?: ScaleContinuousNumeric<number, number>;\n // Hybrid scale type.\n // This overrides parameters such as the axis type\n hybridScale?: HybridScaleDefinition;\n}\n\nexport enum HybridScaleType {\n // An age-domain scale that puts equal vertical space between surfaces\n EquidistantSurfaces = \"equidistant-surfaces\",\n // A height-domain scale that is based on the average height of units between surfaces\n ApproximateHeight = \"approximate-height\",\n}\n\nexport enum HeightMethod {\n Minimum = \"minimum\",\n Average = \"average\",\n Maximum = \"maximum\",\n}\n\nexport interface HybridScaleOptions {\n pixelOffset?: number;\n pixelScale?: number;\n}\n\nexport type ApproxHeightScaleOptions = {\n minHeight?: number;\n defaultHeight?: number;\n heightMethod?: HeightMethod;\n};\n\nexport type HybridScaleDefinition =\n | ({\n type: HybridScaleType.ApproximateHeight;\n } & ApproxHeightScaleOptions)\n | {\n type: HybridScaleType.EquidistantSurfaces;\n };\n\nexport interface SectionScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n domain: [number, number];\n}\n\n/** Output of a section scale. For now, this assumes that the\n * mapping is linear, but it could be extended to support arbitrary\n * scale functions.\n */\nexport interface PackageScaleInfo {\n domain: [number, number];\n pixelHeight: number;\n // TODO: add a function\n scale: ScaleContinuousNumeric<number, number>;\n pixelScale?: number; // if it's a linear scale, this could be defined\n // Subsidiary scale for height mapping (for hybrid scales)\n heightScale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport type PackageScaleLayoutData = PackageScaleInfo & {\n // A unique key for the section to use in React\n key: string;\n offset: number;\n // How much to\n paddingTop: number;\n};\nexport interface StratigraphicPackage {\n /** A collection of stratigraphic information organized in time, corresponding\n * to single or multiple columns. */\n t_age: number;\n b_age: number;\n}\n\nexport interface SectionInfo<\n T extends UnitLong = ExtUnit,\n> extends StratigraphicPackage {\n /** A time-bounded part of a single stratigraphic column. */\n section_id: number | number[];\n units: T[];\n b_pos?: number;\n t_pos?: number;\n}\n\nexport interface ExtUnit extends UnitLong {\n bottomOverlap: boolean;\n overlappingUnits: number[];\n column?: number;\n /* Positions (ages or heights) where the unit is clipped to its containing section.\n * This is relevant if we are filtering by age/height/depth range.\n */\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {\n scaleInfo: PackageScaleLayoutData;\n // A unique key for the section to use in React\n key: string;\n};\n\nexport interface CompositeScaleData {\n totalHeight: number;\n sections: PackageScaleLayoutData[];\n}\n\nexport interface ColumnScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n unconformityHeight: number;\n}\n\nexport interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<\n CompositeScaleData,\n \"sections\"\n> {\n sections: PackageLayoutData<T>[];\n}\n"],"names":["HybridScaleType","HeightMethod"],"mappings":";;AA8BO,IAAK,oCAAAA,qBAAL;AAELA,mBAAA,qBAAA,IAAsB;AAEtBA,mBAAA,mBAAA,IAAoB;AAJV,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAOL,IAAK,iCAAAC,kBAAL;AACLA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AAHA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;;;"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { UnitLong } from '@macrostrat/api-types';
|
|
2
|
+
import { ColumnAxisType } from '@macrostrat/column-components';
|
|
3
|
+
import { ScaleContinuousNumeric } from 'd3-scale';
|
|
4
|
+
export interface ColumnHeightScaleOptions {
|
|
5
|
+
/** A fixed pixel scale to use for the section (pixels per Myr) */
|
|
6
|
+
pixelScale?: number;
|
|
7
|
+
/** The target height of a constituent unit in pixels, for dynamic
|
|
8
|
+
* scale generation */
|
|
9
|
+
targetUnitHeight?: number;
|
|
10
|
+
/** Min height of a section in pixels. Will override minPixelScale in some cases. */
|
|
11
|
+
minSectionHeight?: number;
|
|
12
|
+
/** The minimum pixel scale to use for the section (pixels per Myr). This is mostly
|
|
13
|
+
* needed because small sections (<1-2 units) don't necessarily have space to comfortably
|
|
14
|
+
* render two axis labels */
|
|
15
|
+
minPixelScale?: number;
|
|
16
|
+
axisType?: ColumnAxisType;
|
|
17
|
+
unconformityHeight?: number;
|
|
18
|
+
collapseSmallUnconformities?: boolean | number;
|
|
19
|
+
scale?: ScaleContinuousNumeric<number, number>;
|
|
20
|
+
hybridScale?: HybridScaleDefinition;
|
|
21
|
+
}
|
|
22
|
+
export declare enum HybridScaleType {
|
|
23
|
+
EquidistantSurfaces = "equidistant-surfaces",
|
|
24
|
+
ApproximateHeight = "approximate-height"
|
|
25
|
+
}
|
|
26
|
+
export declare enum HeightMethod {
|
|
27
|
+
Minimum = "minimum",
|
|
28
|
+
Average = "average",
|
|
29
|
+
Maximum = "maximum"
|
|
30
|
+
}
|
|
31
|
+
export interface HybridScaleOptions {
|
|
32
|
+
pixelOffset?: number;
|
|
33
|
+
pixelScale?: number;
|
|
34
|
+
}
|
|
35
|
+
export type ApproxHeightScaleOptions = {
|
|
36
|
+
minHeight?: number;
|
|
37
|
+
defaultHeight?: number;
|
|
38
|
+
heightMethod?: HeightMethod;
|
|
39
|
+
};
|
|
40
|
+
export type HybridScaleDefinition = ({
|
|
41
|
+
type: HybridScaleType.ApproximateHeight;
|
|
42
|
+
} & ApproxHeightScaleOptions) | {
|
|
43
|
+
type: HybridScaleType.EquidistantSurfaces;
|
|
44
|
+
};
|
|
45
|
+
export interface SectionScaleOptions extends ColumnHeightScaleOptions {
|
|
46
|
+
axisType: ColumnAxisType;
|
|
47
|
+
domain: [number, number];
|
|
48
|
+
}
|
|
49
|
+
/** Output of a section scale. For now, this assumes that the
|
|
50
|
+
* mapping is linear, but it could be extended to support arbitrary
|
|
51
|
+
* scale functions.
|
|
52
|
+
*/
|
|
53
|
+
export interface PackageScaleInfo {
|
|
54
|
+
domain: [number, number];
|
|
55
|
+
pixelHeight: number;
|
|
56
|
+
scale: ScaleContinuousNumeric<number, number>;
|
|
57
|
+
pixelScale?: number;
|
|
58
|
+
heightScale?: ScaleContinuousNumeric<number, number>;
|
|
59
|
+
}
|
|
60
|
+
export type PackageScaleLayoutData = PackageScaleInfo & {
|
|
61
|
+
key: string;
|
|
62
|
+
offset: number;
|
|
63
|
+
paddingTop: number;
|
|
64
|
+
};
|
|
65
|
+
export interface StratigraphicPackage {
|
|
66
|
+
/** A collection of stratigraphic information organized in time, corresponding
|
|
67
|
+
* to single or multiple columns. */
|
|
68
|
+
t_age: number;
|
|
69
|
+
b_age: number;
|
|
70
|
+
}
|
|
71
|
+
export interface SectionInfo<T extends UnitLong = ExtUnit> extends StratigraphicPackage {
|
|
72
|
+
/** A time-bounded part of a single stratigraphic column. */
|
|
73
|
+
section_id: number | number[];
|
|
74
|
+
units: T[];
|
|
75
|
+
b_pos?: number;
|
|
76
|
+
t_pos?: number;
|
|
77
|
+
}
|
|
78
|
+
export interface ExtUnit extends UnitLong {
|
|
79
|
+
bottomOverlap: boolean;
|
|
80
|
+
overlappingUnits: number[];
|
|
81
|
+
column?: number;
|
|
82
|
+
t_clip_pos?: number;
|
|
83
|
+
b_clip_pos?: number;
|
|
84
|
+
}
|
|
85
|
+
export type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {
|
|
86
|
+
scaleInfo: PackageScaleLayoutData;
|
|
87
|
+
key: string;
|
|
88
|
+
};
|
|
89
|
+
export interface CompositeScaleData {
|
|
90
|
+
totalHeight: number;
|
|
91
|
+
sections: PackageScaleLayoutData[];
|
|
92
|
+
}
|
|
93
|
+
export interface ColumnScaleOptions extends ColumnHeightScaleOptions {
|
|
94
|
+
axisType: ColumnAxisType;
|
|
95
|
+
unconformityHeight: number;
|
|
96
|
+
}
|
|
97
|
+
export interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<CompositeScaleData, "sections"> {
|
|
98
|
+
sections: PackageLayoutData<T>[];
|
|
99
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var HybridScaleType = /* @__PURE__ */ ((HybridScaleType2) => {
|
|
2
|
+
HybridScaleType2["EquidistantSurfaces"] = "equidistant-surfaces";
|
|
3
|
+
HybridScaleType2["ApproximateHeight"] = "approximate-height";
|
|
4
|
+
return HybridScaleType2;
|
|
5
|
+
})(HybridScaleType || {});
|
|
6
|
+
var HeightMethod = /* @__PURE__ */ ((HeightMethod2) => {
|
|
7
|
+
HeightMethod2["Minimum"] = "minimum";
|
|
8
|
+
HeightMethod2["Average"] = "average";
|
|
9
|
+
HeightMethod2["Maximum"] = "maximum";
|
|
10
|
+
return HeightMethod2;
|
|
11
|
+
})(HeightMethod || {});
|
|
12
|
+
export {
|
|
13
|
+
HeightMethod,
|
|
14
|
+
HybridScaleType
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../src/prepare-units/types.ts"],"sourcesContent":["import type { UnitLong } from \"@macrostrat/api-types\";\nimport type { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ScaleContinuousNumeric } from \"d3-scale\";\n\nexport interface ColumnHeightScaleOptions {\n /** A fixed pixel scale to use for the section (pixels per Myr) */\n pixelScale?: number;\n /** The target height of a constituent unit in pixels, for dynamic\n * scale generation */\n targetUnitHeight?: number;\n /** Min height of a section in pixels. Will override minPixelScale in some cases. */\n minSectionHeight?: number;\n /** The minimum pixel scale to use for the section (pixels per Myr). This is mostly\n * needed because small sections (<1-2 units) don't necessarily have space to comfortably\n * render two axis labels */\n minPixelScale?: number;\n // Axis scale type\n axisType?: ColumnAxisType;\n // Unconformity height in pixels\n unconformityHeight?: number;\n // Whether to collapse unconformities that are less than a height threshold\n collapseSmallUnconformities?: boolean | number;\n // A continuous scale to use instead of generating one\n // TODO: discontinuous scales are not yet supported\n scale?: ScaleContinuousNumeric<number, number>;\n // Hybrid scale type.\n // This overrides parameters such as the axis type\n hybridScale?: HybridScaleDefinition;\n}\n\nexport enum HybridScaleType {\n // An age-domain scale that puts equal vertical space between surfaces\n EquidistantSurfaces = \"equidistant-surfaces\",\n // A height-domain scale that is based on the average height of units between surfaces\n ApproximateHeight = \"approximate-height\",\n}\n\nexport enum HeightMethod {\n Minimum = \"minimum\",\n Average = \"average\",\n Maximum = \"maximum\",\n}\n\nexport interface HybridScaleOptions {\n pixelOffset?: number;\n pixelScale?: number;\n}\n\nexport type ApproxHeightScaleOptions = {\n minHeight?: number;\n defaultHeight?: number;\n heightMethod?: HeightMethod;\n};\n\nexport type HybridScaleDefinition =\n | ({\n type: HybridScaleType.ApproximateHeight;\n } & ApproxHeightScaleOptions)\n | {\n type: HybridScaleType.EquidistantSurfaces;\n };\n\nexport interface SectionScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n domain: [number, number];\n}\n\n/** Output of a section scale. For now, this assumes that the\n * mapping is linear, but it could be extended to support arbitrary\n * scale functions.\n */\nexport interface PackageScaleInfo {\n domain: [number, number];\n pixelHeight: number;\n // TODO: add a function\n scale: ScaleContinuousNumeric<number, number>;\n pixelScale?: number; // if it's a linear scale, this could be defined\n // Subsidiary scale for height mapping (for hybrid scales)\n heightScale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport type PackageScaleLayoutData = PackageScaleInfo & {\n // A unique key for the section to use in React\n key: string;\n offset: number;\n // How much to\n paddingTop: number;\n};\nexport interface StratigraphicPackage {\n /** A collection of stratigraphic information organized in time, corresponding\n * to single or multiple columns. */\n t_age: number;\n b_age: number;\n}\n\nexport interface SectionInfo<\n T extends UnitLong = ExtUnit,\n> extends StratigraphicPackage {\n /** A time-bounded part of a single stratigraphic column. */\n section_id: number | number[];\n units: T[];\n b_pos?: number;\n t_pos?: number;\n}\n\nexport interface ExtUnit extends UnitLong {\n bottomOverlap: boolean;\n overlappingUnits: number[];\n column?: number;\n /* Positions (ages or heights) where the unit is clipped to its containing section.\n * This is relevant if we are filtering by age/height/depth range.\n */\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {\n scaleInfo: PackageScaleLayoutData;\n // A unique key for the section to use in React\n key: string;\n};\n\nexport interface CompositeScaleData {\n totalHeight: number;\n sections: PackageScaleLayoutData[];\n}\n\nexport interface ColumnScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n unconformityHeight: number;\n}\n\nexport interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<\n CompositeScaleData,\n \"sections\"\n> {\n sections: PackageLayoutData<T>[];\n}\n"],"names":["HybridScaleType","HeightMethod"],"mappings":"AA8BO,IAAK,oCAAAA,qBAAL;AAELA,mBAAA,qBAAA,IAAsB;AAEtBA,mBAAA,mBAAA,IAAoB;AAJV,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAOL,IAAK,iCAAAC,kBAAL;AACLA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AAHA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const stratigraphyUtils = require("@macrostrat/stratigraphy-utils");
|
|
4
|
+
const columnComponents = require("@macrostrat/column-components");
|
|
5
|
+
const dt = 1e-3;
|
|
6
|
+
var MergeSectionsMode = /* @__PURE__ */ ((MergeSectionsMode2) => {
|
|
7
|
+
MergeSectionsMode2["ALL"] = "all";
|
|
8
|
+
MergeSectionsMode2["OVERLAPPING"] = "overlapping";
|
|
9
|
+
return MergeSectionsMode2;
|
|
10
|
+
})(MergeSectionsMode || {});
|
|
11
|
+
const unitsOverlap = function(a, b, axisType = columnComponents.ColumnAxisType.AGE, tolerance = 1e-3) {
|
|
12
|
+
const rel = stratigraphyUtils.compareAgeRanges(
|
|
13
|
+
getUnitHeightRange(a, axisType),
|
|
14
|
+
getUnitHeightRange(b, axisType),
|
|
15
|
+
tolerance
|
|
16
|
+
);
|
|
17
|
+
return rel != stratigraphyUtils.AgeRangeRelationship.Disjoint;
|
|
18
|
+
};
|
|
19
|
+
function agesOverlap(a, b, tolerance = dt) {
|
|
20
|
+
return unitsOverlap(a, b, columnComponents.ColumnAxisType.AGE, tolerance);
|
|
21
|
+
}
|
|
22
|
+
function getUnitHeightRange(unit, axisType, clipped = true) {
|
|
23
|
+
if (clipped) {
|
|
24
|
+
switch (axisType) {
|
|
25
|
+
case columnComponents.ColumnAxisType.AGE:
|
|
26
|
+
return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];
|
|
27
|
+
case columnComponents.ColumnAxisType.DEPTH:
|
|
28
|
+
case columnComponents.ColumnAxisType.ORDINAL:
|
|
29
|
+
case columnComponents.ColumnAxisType.HEIGHT:
|
|
30
|
+
return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];
|
|
31
|
+
default:
|
|
32
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
switch (axisType) {
|
|
36
|
+
case columnComponents.ColumnAxisType.AGE:
|
|
37
|
+
return [unit.b_age, unit.t_age];
|
|
38
|
+
case columnComponents.ColumnAxisType.DEPTH:
|
|
39
|
+
case columnComponents.ColumnAxisType.ORDINAL:
|
|
40
|
+
case columnComponents.ColumnAxisType.HEIGHT:
|
|
41
|
+
return [unit.b_pos, unit.t_pos];
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function getPositionWithinUnit(position, unit, axisType) {
|
|
48
|
+
if (position < 0 || position > 1) {
|
|
49
|
+
throw new Error(`Position must be between 0 and 1: ${position}`);
|
|
50
|
+
}
|
|
51
|
+
const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);
|
|
52
|
+
const abs_pos = pos_bottom + position * (pos_top - pos_bottom);
|
|
53
|
+
const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);
|
|
54
|
+
if (axisType === columnComponents.ColumnAxisType.AGE || axisType === columnComponents.ColumnAxisType.DEPTH) {
|
|
55
|
+
if (abs_pos > clip_bottom || abs_pos < clip_top) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
} else {
|
|
59
|
+
if (abs_pos < clip_bottom || abs_pos > clip_top) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return abs_pos;
|
|
64
|
+
}
|
|
65
|
+
const createUnitSorter = (axisType) => {
|
|
66
|
+
return (a, b) => {
|
|
67
|
+
const a_pos = getUnitHeightRange(a, axisType);
|
|
68
|
+
const b_pos = getUnitHeightRange(b, axisType);
|
|
69
|
+
const d_top = a_pos[1] - b_pos[1];
|
|
70
|
+
if (d_top != 0) {
|
|
71
|
+
return d_top;
|
|
72
|
+
}
|
|
73
|
+
return a_pos[0] - b_pos[0];
|
|
74
|
+
};
|
|
75
|
+
};
|
|
76
|
+
function ensureArray(x) {
|
|
77
|
+
if (Array.isArray(x)) {
|
|
78
|
+
return x;
|
|
79
|
+
}
|
|
80
|
+
return [x];
|
|
81
|
+
}
|
|
82
|
+
function ensureRealFloat(x) {
|
|
83
|
+
if (typeof x == "string") {
|
|
84
|
+
x = parseFloat(x);
|
|
85
|
+
}
|
|
86
|
+
if (isNaN(x)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return x;
|
|
90
|
+
}
|
|
91
|
+
exports.MergeSectionsMode = MergeSectionsMode;
|
|
92
|
+
exports.agesOverlap = agesOverlap;
|
|
93
|
+
exports.createUnitSorter = createUnitSorter;
|
|
94
|
+
exports.ensureArray = ensureArray;
|
|
95
|
+
exports.ensureRealFloat = ensureRealFloat;
|
|
96
|
+
exports.getPositionWithinUnit = getPositionWithinUnit;
|
|
97
|
+
exports.getUnitHeightRange = getUnitHeightRange;
|
|
98
|
+
exports.unitsOverlap = unitsOverlap;
|
|
99
|
+
//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../src/prepare-units/utils.ts"],"sourcesContent":["import type { BaseUnit } from \"@macrostrat/api-types\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n ExtUnit,\n PackageLayoutData,\n StratigraphicPackage,\n} from \"./types\";\n\nconst dt = 0.001;\n\nexport interface PrepareColumnOptions extends ColumnScaleOptions {\n axisType: ColumnAxisType;\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n collapseSmallUnconformities?: boolean | number;\n scale?: ScaleContinuousNumeric<any, any>;\n}\n\nexport enum MergeSectionsMode {\n ALL = \"all\",\n OVERLAPPING = \"overlapping\",\n}\n\nexport interface PreparedColumnData extends CompositeColumnData {\n sections: PackageLayoutData[];\n units: ExtUnit[];\n}\n\ninterface UnitsOverlap {\n (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n axisType?: ColumnAxisType.AGE,\n tolerance?: number,\n ): boolean;\n (\n a: BaseUnit,\n b: BaseUnit,\n axisType: ColumnAxisType,\n tolerance?: number,\n ): boolean;\n}\n\nexport const unitsOverlap: UnitsOverlap = function (\n a,\n b,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n tolerance: number = 0.001,\n): boolean {\n const rel = compareAgeRanges(\n getUnitHeightRange(a, axisType),\n getUnitHeightRange(b, axisType),\n tolerance,\n );\n return rel != AgeRangeRelationship.Disjoint;\n};\n\n/** A more permissive overlap function in the age space */\nexport function agesOverlap(\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n tolerance: number = dt,\n): boolean {\n return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);\n}\n\nexport interface PossiblyClippedUnit extends BaseUnit {\n // Internally created clipped positions\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function getUnitHeightRange(\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n clipped: boolean = true,\n): [number, number] {\n if (clipped) {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n } else {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_age, unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_pos, unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n }\n}\n\nexport function getPositionWithinUnit(\n position: number,\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n): number | null {\n /** Translate a relative position (0-1) within a unit to an absolute position\n * within the unit's height range. If the unit is clipped, null values will be\n * returned for positions outside the clip range\n */\n if (position < 0 || position > 1) {\n throw new Error(`Position must be between 0 and 1: ${position}`);\n }\n\n const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);\n const abs_pos = pos_bottom + position * (pos_top - pos_bottom);\n\n // If clipped, check if abs_pos is within the clipped range\n const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n // Invert for age/depth axes\n if (abs_pos > clip_bottom || abs_pos < clip_top) {\n return null;\n }\n } else {\n if (abs_pos < clip_bottom || abs_pos > clip_top) {\n return null;\n }\n }\n\n return abs_pos;\n}\n\nexport const createUnitSorter = (axisType: ColumnAxisType) => {\n return (a: BaseUnit, b: BaseUnit) => {\n const a_pos = getUnitHeightRange(a, axisType);\n const b_pos = getUnitHeightRange(b, axisType);\n const d_top = a_pos[1] - b_pos[1];\n if (d_top != 0) {\n return d_top;\n }\n return a_pos[0] - b_pos[0];\n };\n};\n\nexport function ensureArray<T>(x: T | T[]): T[] {\n if (Array.isArray(x)) {\n return x;\n }\n return [x];\n}\n\nexport function ensureRealFloat(x: number | string | null): number | null {\n if (typeof x == \"string\") {\n x = parseFloat(x);\n }\n if (isNaN(x)) {\n return null;\n }\n return x;\n}\n"],"names":["MergeSectionsMode","ColumnAxisType","compareAgeRanges","AgeRangeRelationship"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BaseUnit } from '@macrostrat/api-types';
|
|
2
|
+
import { ColumnAxisType } from '@macrostrat/column-components';
|
|
3
|
+
import { ScaleContinuousNumeric } from 'd3-scale';
|
|
4
|
+
import { ColumnScaleOptions, CompositeColumnData, ExtUnit, PackageLayoutData, StratigraphicPackage } from './types';
|
|
5
|
+
export interface PrepareColumnOptions extends ColumnScaleOptions {
|
|
6
|
+
axisType: ColumnAxisType;
|
|
7
|
+
t_age?: number;
|
|
8
|
+
b_age?: number;
|
|
9
|
+
t_pos?: number;
|
|
10
|
+
b_pos?: number;
|
|
11
|
+
mergeSections?: MergeSectionsMode;
|
|
12
|
+
collapseSmallUnconformities?: boolean | number;
|
|
13
|
+
scale?: ScaleContinuousNumeric<any, any>;
|
|
14
|
+
}
|
|
15
|
+
export declare enum MergeSectionsMode {
|
|
16
|
+
ALL = "all",
|
|
17
|
+
OVERLAPPING = "overlapping"
|
|
18
|
+
}
|
|
19
|
+
export interface PreparedColumnData extends CompositeColumnData {
|
|
20
|
+
sections: PackageLayoutData[];
|
|
21
|
+
units: ExtUnit[];
|
|
22
|
+
}
|
|
23
|
+
interface UnitsOverlap {
|
|
24
|
+
(a: StratigraphicPackage, b: StratigraphicPackage, axisType?: ColumnAxisType.AGE, tolerance?: number): boolean;
|
|
25
|
+
(a: BaseUnit, b: BaseUnit, axisType: ColumnAxisType, tolerance?: number): boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare const unitsOverlap: UnitsOverlap;
|
|
28
|
+
/** A more permissive overlap function in the age space */
|
|
29
|
+
export declare function agesOverlap(a: StratigraphicPackage, b: StratigraphicPackage, tolerance?: number): boolean;
|
|
30
|
+
export interface PossiblyClippedUnit extends BaseUnit {
|
|
31
|
+
t_clip_pos?: number;
|
|
32
|
+
b_clip_pos?: number;
|
|
33
|
+
}
|
|
34
|
+
export declare function getUnitHeightRange(unit: PossiblyClippedUnit, axisType: ColumnAxisType, clipped?: boolean): [number, number];
|
|
35
|
+
export declare function getPositionWithinUnit(position: number, unit: PossiblyClippedUnit, axisType: ColumnAxisType): number | null;
|
|
36
|
+
export declare const createUnitSorter: (axisType: ColumnAxisType) => (a: BaseUnit, b: BaseUnit) => number;
|
|
37
|
+
export declare function ensureArray<T>(x: T | T[]): T[];
|
|
38
|
+
export declare function ensureRealFloat(x: number | string | null): number | null;
|
|
39
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { compareAgeRanges, AgeRangeRelationship } from "@macrostrat/stratigraphy-utils";
|
|
2
|
+
import { ColumnAxisType } from "@macrostrat/column-components";
|
|
3
|
+
const dt = 1e-3;
|
|
4
|
+
var MergeSectionsMode = /* @__PURE__ */ ((MergeSectionsMode2) => {
|
|
5
|
+
MergeSectionsMode2["ALL"] = "all";
|
|
6
|
+
MergeSectionsMode2["OVERLAPPING"] = "overlapping";
|
|
7
|
+
return MergeSectionsMode2;
|
|
8
|
+
})(MergeSectionsMode || {});
|
|
9
|
+
const unitsOverlap = function(a, b, axisType = ColumnAxisType.AGE, tolerance = 1e-3) {
|
|
10
|
+
const rel = compareAgeRanges(
|
|
11
|
+
getUnitHeightRange(a, axisType),
|
|
12
|
+
getUnitHeightRange(b, axisType),
|
|
13
|
+
tolerance
|
|
14
|
+
);
|
|
15
|
+
return rel != AgeRangeRelationship.Disjoint;
|
|
16
|
+
};
|
|
17
|
+
function agesOverlap(a, b, tolerance = dt) {
|
|
18
|
+
return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);
|
|
19
|
+
}
|
|
20
|
+
function getUnitHeightRange(unit, axisType, clipped = true) {
|
|
21
|
+
if (clipped) {
|
|
22
|
+
switch (axisType) {
|
|
23
|
+
case ColumnAxisType.AGE:
|
|
24
|
+
return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];
|
|
25
|
+
case ColumnAxisType.DEPTH:
|
|
26
|
+
case ColumnAxisType.ORDINAL:
|
|
27
|
+
case ColumnAxisType.HEIGHT:
|
|
28
|
+
return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];
|
|
29
|
+
default:
|
|
30
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
31
|
+
}
|
|
32
|
+
} else {
|
|
33
|
+
switch (axisType) {
|
|
34
|
+
case ColumnAxisType.AGE:
|
|
35
|
+
return [unit.b_age, unit.t_age];
|
|
36
|
+
case ColumnAxisType.DEPTH:
|
|
37
|
+
case ColumnAxisType.ORDINAL:
|
|
38
|
+
case ColumnAxisType.HEIGHT:
|
|
39
|
+
return [unit.b_pos, unit.t_pos];
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function getPositionWithinUnit(position, unit, axisType) {
|
|
46
|
+
if (position < 0 || position > 1) {
|
|
47
|
+
throw new Error(`Position must be between 0 and 1: ${position}`);
|
|
48
|
+
}
|
|
49
|
+
const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);
|
|
50
|
+
const abs_pos = pos_bottom + position * (pos_top - pos_bottom);
|
|
51
|
+
const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);
|
|
52
|
+
if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {
|
|
53
|
+
if (abs_pos > clip_bottom || abs_pos < clip_top) {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
if (abs_pos < clip_bottom || abs_pos > clip_top) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return abs_pos;
|
|
62
|
+
}
|
|
63
|
+
const createUnitSorter = (axisType) => {
|
|
64
|
+
return (a, b) => {
|
|
65
|
+
const a_pos = getUnitHeightRange(a, axisType);
|
|
66
|
+
const b_pos = getUnitHeightRange(b, axisType);
|
|
67
|
+
const d_top = a_pos[1] - b_pos[1];
|
|
68
|
+
if (d_top != 0) {
|
|
69
|
+
return d_top;
|
|
70
|
+
}
|
|
71
|
+
return a_pos[0] - b_pos[0];
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
function ensureArray(x) {
|
|
75
|
+
if (Array.isArray(x)) {
|
|
76
|
+
return x;
|
|
77
|
+
}
|
|
78
|
+
return [x];
|
|
79
|
+
}
|
|
80
|
+
function ensureRealFloat(x) {
|
|
81
|
+
if (typeof x == "string") {
|
|
82
|
+
x = parseFloat(x);
|
|
83
|
+
}
|
|
84
|
+
if (isNaN(x)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return x;
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
MergeSectionsMode,
|
|
91
|
+
agesOverlap,
|
|
92
|
+
createUnitSorter,
|
|
93
|
+
ensureArray,
|
|
94
|
+
ensureRealFloat,
|
|
95
|
+
getPositionWithinUnit,
|
|
96
|
+
getUnitHeightRange,
|
|
97
|
+
unitsOverlap
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/prepare-units/utils.ts"],"sourcesContent":["import type { BaseUnit } from \"@macrostrat/api-types\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n ExtUnit,\n PackageLayoutData,\n StratigraphicPackage,\n} from \"./types\";\n\nconst dt = 0.001;\n\nexport interface PrepareColumnOptions extends ColumnScaleOptions {\n axisType: ColumnAxisType;\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n collapseSmallUnconformities?: boolean | number;\n scale?: ScaleContinuousNumeric<any, any>;\n}\n\nexport enum MergeSectionsMode {\n ALL = \"all\",\n OVERLAPPING = \"overlapping\",\n}\n\nexport interface PreparedColumnData extends CompositeColumnData {\n sections: PackageLayoutData[];\n units: ExtUnit[];\n}\n\ninterface UnitsOverlap {\n (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n axisType?: ColumnAxisType.AGE,\n tolerance?: number,\n ): boolean;\n (\n a: BaseUnit,\n b: BaseUnit,\n axisType: ColumnAxisType,\n tolerance?: number,\n ): boolean;\n}\n\nexport const unitsOverlap: UnitsOverlap = function (\n a,\n b,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n tolerance: number = 0.001,\n): boolean {\n const rel = compareAgeRanges(\n getUnitHeightRange(a, axisType),\n getUnitHeightRange(b, axisType),\n tolerance,\n );\n return rel != AgeRangeRelationship.Disjoint;\n};\n\n/** A more permissive overlap function in the age space */\nexport function agesOverlap(\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n tolerance: number = dt,\n): boolean {\n return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);\n}\n\nexport interface PossiblyClippedUnit extends BaseUnit {\n // Internally created clipped positions\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function getUnitHeightRange(\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n clipped: boolean = true,\n): [number, number] {\n if (clipped) {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n } else {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_age, unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_pos, unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n }\n}\n\nexport function getPositionWithinUnit(\n position: number,\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n): number | null {\n /** Translate a relative position (0-1) within a unit to an absolute position\n * within the unit's height range. If the unit is clipped, null values will be\n * returned for positions outside the clip range\n */\n if (position < 0 || position > 1) {\n throw new Error(`Position must be between 0 and 1: ${position}`);\n }\n\n const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);\n const abs_pos = pos_bottom + position * (pos_top - pos_bottom);\n\n // If clipped, check if abs_pos is within the clipped range\n const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n // Invert for age/depth axes\n if (abs_pos > clip_bottom || abs_pos < clip_top) {\n return null;\n }\n } else {\n if (abs_pos < clip_bottom || abs_pos > clip_top) {\n return null;\n }\n }\n\n return abs_pos;\n}\n\nexport const createUnitSorter = (axisType: ColumnAxisType) => {\n return (a: BaseUnit, b: BaseUnit) => {\n const a_pos = getUnitHeightRange(a, axisType);\n const b_pos = getUnitHeightRange(b, axisType);\n const d_top = a_pos[1] - b_pos[1];\n if (d_top != 0) {\n return d_top;\n }\n return a_pos[0] - b_pos[0];\n };\n};\n\nexport function ensureArray<T>(x: T | T[]): T[] {\n if (Array.isArray(x)) {\n return x;\n }\n return [x];\n}\n\nexport function ensureRealFloat(x: number | string | null): number | null {\n if (typeof x == \"string\") {\n x = parseFloat(x);\n }\n if (isNaN(x)) {\n return null;\n }\n return x;\n}\n"],"names":["MergeSectionsMode"],"mappings":";;AAeA,MAAM,KAAK;AAaJ,IAAK,sCAAAA,uBAAL;AACLA,qBAAA,KAAA,IAAM;AACNA,qBAAA,aAAA,IAAc;AAFJ,SAAAA;AAAA,GAAA,qBAAA,CAAA,CAAA;AAyBL,MAAM,eAA6B,SACxC,GACA,GACA,WAA2B,eAAe,KAC1C,YAAoB,MACX;AACT,QAAM,MAAM;AAAA,IACV,mBAAmB,GAAG,QAAQ;AAAA,IAC9B,mBAAmB,GAAG,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEF,SAAO,OAAO,qBAAqB;AACrC;AAGO,SAAS,YACd,GACA,GACA,YAAoB,IACX;AACT,SAAO,aAAa,GAAG,GAAG,eAAe,KAAK,SAAS;AACzD;AAQO,SAAS,mBACd,MACA,UACA,UAAmB,MACD;AAClB,MAAI,SAAS;AACX,YAAQ,UAAA;AAAA,MACN,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,cAAc,KAAK,OAAO,KAAK,cAAc,KAAK,KAAK;AAAA,MACtE,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,cAAc,KAAK,OAAO,KAAK,cAAc,KAAK,KAAK;AAAA,MACtE;AACE,cAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEtD,OAAO;AACL,YAAQ,UAAA;AAAA,MACN,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,OAAO,KAAK,KAAK;AAAA,MAChC,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,OAAO,KAAK,KAAK;AAAA,MAChC;AACE,cAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEtD;AACF;AAEO,SAAS,sBACd,UACA,MACA,UACe;AAKf,MAAI,WAAW,KAAK,WAAW,GAAG;AAChC,UAAM,IAAI,MAAM,qCAAqC,QAAQ,EAAE;AAAA,EACjE;AAEA,QAAM,CAAC,YAAY,OAAO,IAAI,mBAAmB,MAAM,UAAU,KAAK;AACtE,QAAM,UAAU,aAAa,YAAY,UAAU;AAGnD,QAAM,CAAC,aAAa,QAAQ,IAAI,mBAAmB,MAAM,UAAU,IAAI;AACvE,MAAI,aAAa,eAAe,OAAO,aAAa,eAAe,OAAO;AAExE,QAAI,UAAU,eAAe,UAAU,UAAU;AAC/C,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,QAAI,UAAU,eAAe,UAAU,UAAU;AAC/C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,mBAAmB,CAAC,aAA6B;AAC5D,SAAO,CAAC,GAAa,MAAgB;AACnC,UAAM,QAAQ,mBAAmB,GAAG,QAAQ;AAC5C,UAAM,QAAQ,mBAAmB,GAAG,QAAQ;AAC5C,UAAM,QAAQ,MAAM,CAAC,IAAI,MAAM,CAAC;AAChC,QAAI,SAAS,GAAG;AACd,aAAO;AAAA,IACT;AACA,WAAO,MAAM,CAAC,IAAI,MAAM,CAAC;AAAA,EAC3B;AACF;AAEO,SAAS,YAAe,GAAiB;AAC9C,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO,CAAC,CAAC;AACX;AAEO,SAAS,gBAAgB,GAA0C;AACxE,MAAI,OAAO,KAAK,UAAU;AACxB,QAAI,WAAW,CAAC;AAAA,EAClB;AACA,MAAI,MAAM,CAAC,GAAG;AACZ,WAAO;AAAA,EACT;AACA,SAAO;AACT;"}
|