@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,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const h$1 = require("@macrostrat/hyper");
|
|
4
|
+
const provider = require("./provider.cjs");
|
|
5
|
+
const uiComponents = require("@macrostrat/ui-components");
|
|
6
|
+
const d3Array = require("d3-array");
|
|
7
|
+
const columnComponents = require("@macrostrat/column-components");
|
|
8
|
+
const taxonRanges_module = require("./taxon-ranges.module.sass.cjs");
|
|
9
|
+
const React = require("react");
|
|
10
|
+
const store = require("../../data-provider/store.cjs");
|
|
11
|
+
const h = h$1.styled(taxonRanges_module.default);
|
|
12
|
+
function PBDBOccurrencesMatrix({ columnID }) {
|
|
13
|
+
const data = provider.useFossilData(columnID, provider.FossilDataType.Occurrences);
|
|
14
|
+
const col = store.useMacrostratColumnData();
|
|
15
|
+
const scale = store.useCompositeScale();
|
|
16
|
+
if (data == null) return null;
|
|
17
|
+
const occurrenceMap = new Map(d3Array.group(data, (d) => d.unit_id));
|
|
18
|
+
const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);
|
|
19
|
+
const { taxonRanges } = matrix;
|
|
20
|
+
const padding = 16;
|
|
21
|
+
const spacing = 16;
|
|
22
|
+
const taxonEntries = Array.from(taxonRanges.entries());
|
|
23
|
+
const width = padding * 2 + spacing * taxonEntries.length;
|
|
24
|
+
return h(uiComponents.Box, { className: "taxon-ranges", width, height: col.totalHeight }, [
|
|
25
|
+
h(TaxonOccurrenceLabels, {
|
|
26
|
+
taxonEntries,
|
|
27
|
+
padding,
|
|
28
|
+
spacing,
|
|
29
|
+
scale
|
|
30
|
+
}),
|
|
31
|
+
h(
|
|
32
|
+
columnComponents.ColumnSVG,
|
|
33
|
+
{
|
|
34
|
+
width: padding * 2 + spacing * taxonEntries.length
|
|
35
|
+
},
|
|
36
|
+
h(
|
|
37
|
+
"g.taxa-occurrences-matrix",
|
|
38
|
+
taxonEntries.map(([taxonName, ranges], rowIndex) => {
|
|
39
|
+
const xPosition = padding + rowIndex * spacing;
|
|
40
|
+
return h("g", { transform: `translate(${xPosition})` }, [
|
|
41
|
+
ranges.map(([top, bottom]) => {
|
|
42
|
+
return h("line", {
|
|
43
|
+
y1: scale(top),
|
|
44
|
+
y2: scale(bottom)
|
|
45
|
+
});
|
|
46
|
+
})
|
|
47
|
+
]);
|
|
48
|
+
})
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
function TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {
|
|
54
|
+
return h("div.taxon-labels", [
|
|
55
|
+
taxonEntries.map(([taxonName, ranges], rowIndex) => {
|
|
56
|
+
const top = ranges[0]?.[0] ?? 0;
|
|
57
|
+
let topPx = scale(top) - 20;
|
|
58
|
+
if (topPx < 200) topPx = 0;
|
|
59
|
+
return h(TaxonLabel, {
|
|
60
|
+
top: topPx,
|
|
61
|
+
left: padding + rowIndex * spacing,
|
|
62
|
+
taxonName
|
|
63
|
+
});
|
|
64
|
+
})
|
|
65
|
+
]);
|
|
66
|
+
}
|
|
67
|
+
function TaxonLabel({ top, left, taxonName }) {
|
|
68
|
+
const ref = React.useRef();
|
|
69
|
+
const textSize = uiComponents.useElementSize(ref);
|
|
70
|
+
const labelWidth = textSize?.height ?? 200;
|
|
71
|
+
return h(
|
|
72
|
+
"div.taxon-label",
|
|
73
|
+
{
|
|
74
|
+
style: {
|
|
75
|
+
top: `${top}px`,
|
|
76
|
+
marginLeft: `${left}px`,
|
|
77
|
+
"--label-width": `${labelWidth}px`
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
h("div.taxon-label-inner", h("div.taxon-label-text", { ref }, taxonName))
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
function createOccurrenceMatrix(units, data, axisType = columnComponents.ColumnAxisType.AGE) {
|
|
84
|
+
const taxonUnitMap = /* @__PURE__ */ new Map();
|
|
85
|
+
const taxonOccurrenceMap = /* @__PURE__ */ new Map();
|
|
86
|
+
for (const [unit_id, occurrences] of data.entries()) {
|
|
87
|
+
for (const occ of occurrences) {
|
|
88
|
+
const taxonName = occ.best_name ?? occ.taxon_name;
|
|
89
|
+
if (!taxonUnitMap.has(taxonName)) {
|
|
90
|
+
taxonUnitMap.set(taxonName, /* @__PURE__ */ new Set());
|
|
91
|
+
taxonOccurrenceMap.set(taxonName, []);
|
|
92
|
+
}
|
|
93
|
+
taxonUnitMap.get(taxonName).add(unit_id);
|
|
94
|
+
taxonOccurrenceMap.get(taxonName).push(occ);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {
|
|
98
|
+
return b[0].localeCompare(a[0]);
|
|
99
|
+
});
|
|
100
|
+
const taxonRanges = /* @__PURE__ */ new Map();
|
|
101
|
+
for (const [taxonName, unitSet] of taxonUnitMap.entries()) {
|
|
102
|
+
taxonRanges.set(
|
|
103
|
+
taxonName,
|
|
104
|
+
accumulatePresenceDomains(units, unitSet, axisType)
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
occurrenceMap: data,
|
|
109
|
+
taxonUnitMap: new Map(sortedTaxa),
|
|
110
|
+
taxonOccurrenceMap,
|
|
111
|
+
taxonRanges
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function accumulatePresenceDomains(unit, presenceUnits, axisType) {
|
|
115
|
+
const domains = [];
|
|
116
|
+
let currentDomain = null;
|
|
117
|
+
for (const u of unit) {
|
|
118
|
+
if (presenceUnits.has(u.unit_id)) {
|
|
119
|
+
if (currentDomain == null) {
|
|
120
|
+
if (axisType == columnComponents.ColumnAxisType.DEPTH || axisType == columnComponents.ColumnAxisType.HEIGHT) {
|
|
121
|
+
currentDomain = [u.t_pos, u.b_pos];
|
|
122
|
+
} else {
|
|
123
|
+
currentDomain = [u.t_age, u.b_age];
|
|
124
|
+
}
|
|
125
|
+
} else {
|
|
126
|
+
if (axisType == columnComponents.ColumnAxisType.DEPTH || axisType == columnComponents.ColumnAxisType.HEIGHT) {
|
|
127
|
+
currentDomain[1] = u.b_pos;
|
|
128
|
+
} else {
|
|
129
|
+
currentDomain[1] = u.b_age;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
} else {
|
|
133
|
+
if (currentDomain != null) {
|
|
134
|
+
domains.push(currentDomain);
|
|
135
|
+
currentDomain = null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (currentDomain != null) {
|
|
140
|
+
domains.push(currentDomain);
|
|
141
|
+
}
|
|
142
|
+
return domains;
|
|
143
|
+
}
|
|
144
|
+
exports.PBDBOccurrencesMatrix = PBDBOccurrencesMatrix;
|
|
145
|
+
//# sourceMappingURL=taxon-ranges.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxon-ranges.cjs","sources":["../../../src/facets/fossils/taxon-ranges.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBEntity,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport { Box, useElementSize } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType, ColumnSVG } from \"@macrostrat/column-components\";\nimport {\n useMacrostratColumnData,\n useCompositeScale,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./taxon-ranges.module.sass\";\nimport { useRef } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport function PBDBOccurrencesMatrix({ columnID }) {\n /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will\n eventually be extended with first/last occurrence markers and range bars.\n */\n const data = useFossilData(columnID, FossilDataType.Occurrences);\n const col = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null) return null;\n\n // convert the data to a map\n const occurrenceMap = new Map(group(data, (d) => d.unit_id)) as Map<\n number,\n PBDBOccurrence[]\n >;\n\n const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);\n\n const { taxonRanges } = matrix;\n\n const padding = 16;\n const spacing = 16;\n\n const taxonEntries = Array.from(taxonRanges.entries());\n //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa\n\n const width = padding * 2 + spacing * taxonEntries.length;\n\n return h(Box, { className: \"taxon-ranges\", width, height: col.totalHeight }, [\n h(TaxonOccurrenceLabels, {\n taxonEntries,\n padding,\n spacing,\n scale,\n }),\n h(\n ColumnSVG,\n {\n width: padding * 2 + spacing * taxonEntries.length,\n },\n h(\n \"g.taxa-occurrences-matrix\",\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const xPosition = padding + rowIndex * spacing;\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n }),\n ),\n ),\n ]);\n}\n\nfunction TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {\n return h(\"div.taxon-labels\", [\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const top = ranges[0]?.[0] ?? 0;\n let topPx = scale(top) - 20;\n if (topPx < 200) topPx = 0;\n\n return h(TaxonLabel, {\n top: topPx,\n left: padding + rowIndex * spacing,\n taxonName,\n });\n }),\n ]);\n}\n\nfunction TaxonLabel({ top, left, taxonName }) {\n const ref = useRef();\n const textSize = useElementSize(ref);\n const labelWidth = textSize?.height ?? 200;\n return h(\n \"div.taxon-label\",\n {\n style: {\n top: `${top}px`,\n marginLeft: `${left}px`,\n \"--label-width\": `${labelWidth}px`,\n },\n },\n h(\"div.taxon-label-inner\", h(\"div.taxon-label-text\", { ref }, taxonName)),\n );\n}\n\ntype TaxonUnitMap = Map<string, Set<number>>;\n\ninterface OccurrenceMatrixData {\n occurrenceMap: Map<number, PBDBEntity[]>; // Map of unit IDs to occurrences (original data)\n taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs\n taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences\n taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges\n}\n\nfunction TaxonOccurrenceEntry({\n xPosition,\n ranges,\n scale,\n name,\n}: {\n xPosition: number;\n units: Set<number>;\n ranges: any;\n scale: any;\n name: string;\n}) {\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n}\n\nfunction createOccurrenceMatrix(\n units: UnitLong[],\n data: Map<number, PBDBOccurrence[]>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): OccurrenceMatrixData {\n const taxonUnitMap = new Map<string, Set<number>>();\n const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();\n\n for (const [unit_id, occurrences] of data.entries()) {\n for (const occ of occurrences) {\n const taxonName = occ.best_name ?? occ.taxon_name;\n if (!taxonUnitMap.has(taxonName)) {\n taxonUnitMap.set(taxonName, new Set());\n taxonOccurrenceMap.set(taxonName, []);\n }\n taxonUnitMap.get(taxonName).add(unit_id);\n taxonOccurrenceMap.get(taxonName).push(occ);\n }\n }\n\n // sort the taxon occurrence map by number of occurrences\n const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {\n // Sort alphabetically by taxon name\n return b[0].localeCompare(a[0]);\n });\n\n const taxonRanges = new Map<string, [number, number][]>();\n for (const [taxonName, unitSet] of taxonUnitMap.entries()) {\n taxonRanges.set(\n taxonName,\n accumulatePresenceDomains(units, unitSet, axisType),\n );\n }\n\n return {\n occurrenceMap: data,\n taxonUnitMap: new Map(sortedTaxa),\n taxonOccurrenceMap: taxonOccurrenceMap,\n taxonRanges,\n };\n}\n\nfunction accumulatePresenceDomains(\n unit: UnitLong[],\n presenceUnits: Set<number>,\n axisType: ColumnAxisType,\n): Array<[number, number]> {\n const domains: Array<[number, number]> = [];\n let currentDomain: [number, number] | null = null;\n\n for (const u of unit) {\n if (presenceUnits.has(u.unit_id)) {\n if (currentDomain == null) {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain = [u.t_pos, u.b_pos];\n } else {\n currentDomain = [u.t_age, u.b_age];\n }\n } else {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain[1] = u.b_pos;\n } else {\n currentDomain[1] = u.b_age;\n }\n }\n } else {\n if (currentDomain != null) {\n domains.push(currentDomain);\n currentDomain = null;\n }\n }\n }\n\n if (currentDomain != null) {\n domains.push(currentDomain);\n }\n\n return domains;\n}\n"],"names":["hyper","styles","useFossilData","FossilDataType","useMacrostratColumnData","useCompositeScale","group","Box","ColumnSVG","useRef","useElementSize","ColumnAxisType"],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import h$1 from "@macrostrat/hyper";
|
|
2
|
+
import { useFossilData, FossilDataType } from "./provider.js";
|
|
3
|
+
import { Box, useElementSize } from "@macrostrat/ui-components";
|
|
4
|
+
import { group } from "d3-array";
|
|
5
|
+
import { ColumnAxisType, ColumnSVG } from "@macrostrat/column-components";
|
|
6
|
+
import styles from "./taxon-ranges.module.sass.js";
|
|
7
|
+
import { useRef } from "react";
|
|
8
|
+
import { useMacrostratColumnData, useCompositeScale } from "../../data-provider/store.js";
|
|
9
|
+
const h = h$1.styled(styles);
|
|
10
|
+
function PBDBOccurrencesMatrix({ columnID }) {
|
|
11
|
+
const data = useFossilData(columnID, FossilDataType.Occurrences);
|
|
12
|
+
const col = useMacrostratColumnData();
|
|
13
|
+
const scale = useCompositeScale();
|
|
14
|
+
if (data == null) return null;
|
|
15
|
+
const occurrenceMap = new Map(group(data, (d) => d.unit_id));
|
|
16
|
+
const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);
|
|
17
|
+
const { taxonRanges } = matrix;
|
|
18
|
+
const padding = 16;
|
|
19
|
+
const spacing = 16;
|
|
20
|
+
const taxonEntries = Array.from(taxonRanges.entries());
|
|
21
|
+
const width = padding * 2 + spacing * taxonEntries.length;
|
|
22
|
+
return h(Box, { className: "taxon-ranges", width, height: col.totalHeight }, [
|
|
23
|
+
h(TaxonOccurrenceLabels, {
|
|
24
|
+
taxonEntries,
|
|
25
|
+
padding,
|
|
26
|
+
spacing,
|
|
27
|
+
scale
|
|
28
|
+
}),
|
|
29
|
+
h(
|
|
30
|
+
ColumnSVG,
|
|
31
|
+
{
|
|
32
|
+
width: padding * 2 + spacing * taxonEntries.length
|
|
33
|
+
},
|
|
34
|
+
h(
|
|
35
|
+
"g.taxa-occurrences-matrix",
|
|
36
|
+
taxonEntries.map(([taxonName, ranges], rowIndex) => {
|
|
37
|
+
const xPosition = padding + rowIndex * spacing;
|
|
38
|
+
return h("g", { transform: `translate(${xPosition})` }, [
|
|
39
|
+
ranges.map(([top, bottom]) => {
|
|
40
|
+
return h("line", {
|
|
41
|
+
y1: scale(top),
|
|
42
|
+
y2: scale(bottom)
|
|
43
|
+
});
|
|
44
|
+
})
|
|
45
|
+
]);
|
|
46
|
+
})
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
]);
|
|
50
|
+
}
|
|
51
|
+
function TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {
|
|
52
|
+
return h("div.taxon-labels", [
|
|
53
|
+
taxonEntries.map(([taxonName, ranges], rowIndex) => {
|
|
54
|
+
const top = ranges[0]?.[0] ?? 0;
|
|
55
|
+
let topPx = scale(top) - 20;
|
|
56
|
+
if (topPx < 200) topPx = 0;
|
|
57
|
+
return h(TaxonLabel, {
|
|
58
|
+
top: topPx,
|
|
59
|
+
left: padding + rowIndex * spacing,
|
|
60
|
+
taxonName
|
|
61
|
+
});
|
|
62
|
+
})
|
|
63
|
+
]);
|
|
64
|
+
}
|
|
65
|
+
function TaxonLabel({ top, left, taxonName }) {
|
|
66
|
+
const ref = useRef();
|
|
67
|
+
const textSize = useElementSize(ref);
|
|
68
|
+
const labelWidth = textSize?.height ?? 200;
|
|
69
|
+
return h(
|
|
70
|
+
"div.taxon-label",
|
|
71
|
+
{
|
|
72
|
+
style: {
|
|
73
|
+
top: `${top}px`,
|
|
74
|
+
marginLeft: `${left}px`,
|
|
75
|
+
"--label-width": `${labelWidth}px`
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
h("div.taxon-label-inner", h("div.taxon-label-text", { ref }, taxonName))
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function createOccurrenceMatrix(units, data, axisType = ColumnAxisType.AGE) {
|
|
82
|
+
const taxonUnitMap = /* @__PURE__ */ new Map();
|
|
83
|
+
const taxonOccurrenceMap = /* @__PURE__ */ new Map();
|
|
84
|
+
for (const [unit_id, occurrences] of data.entries()) {
|
|
85
|
+
for (const occ of occurrences) {
|
|
86
|
+
const taxonName = occ.best_name ?? occ.taxon_name;
|
|
87
|
+
if (!taxonUnitMap.has(taxonName)) {
|
|
88
|
+
taxonUnitMap.set(taxonName, /* @__PURE__ */ new Set());
|
|
89
|
+
taxonOccurrenceMap.set(taxonName, []);
|
|
90
|
+
}
|
|
91
|
+
taxonUnitMap.get(taxonName).add(unit_id);
|
|
92
|
+
taxonOccurrenceMap.get(taxonName).push(occ);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {
|
|
96
|
+
return b[0].localeCompare(a[0]);
|
|
97
|
+
});
|
|
98
|
+
const taxonRanges = /* @__PURE__ */ new Map();
|
|
99
|
+
for (const [taxonName, unitSet] of taxonUnitMap.entries()) {
|
|
100
|
+
taxonRanges.set(
|
|
101
|
+
taxonName,
|
|
102
|
+
accumulatePresenceDomains(units, unitSet, axisType)
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
occurrenceMap: data,
|
|
107
|
+
taxonUnitMap: new Map(sortedTaxa),
|
|
108
|
+
taxonOccurrenceMap,
|
|
109
|
+
taxonRanges
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function accumulatePresenceDomains(unit, presenceUnits, axisType) {
|
|
113
|
+
const domains = [];
|
|
114
|
+
let currentDomain = null;
|
|
115
|
+
for (const u of unit) {
|
|
116
|
+
if (presenceUnits.has(u.unit_id)) {
|
|
117
|
+
if (currentDomain == null) {
|
|
118
|
+
if (axisType == ColumnAxisType.DEPTH || axisType == ColumnAxisType.HEIGHT) {
|
|
119
|
+
currentDomain = [u.t_pos, u.b_pos];
|
|
120
|
+
} else {
|
|
121
|
+
currentDomain = [u.t_age, u.b_age];
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
if (axisType == ColumnAxisType.DEPTH || axisType == ColumnAxisType.HEIGHT) {
|
|
125
|
+
currentDomain[1] = u.b_pos;
|
|
126
|
+
} else {
|
|
127
|
+
currentDomain[1] = u.b_age;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
if (currentDomain != null) {
|
|
132
|
+
domains.push(currentDomain);
|
|
133
|
+
currentDomain = null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (currentDomain != null) {
|
|
138
|
+
domains.push(currentDomain);
|
|
139
|
+
}
|
|
140
|
+
return domains;
|
|
141
|
+
}
|
|
142
|
+
export {
|
|
143
|
+
PBDBOccurrencesMatrix
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=taxon-ranges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxon-ranges.js","sources":["../../../src/facets/fossils/taxon-ranges.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBEntity,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport { Box, useElementSize } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType, ColumnSVG } from \"@macrostrat/column-components\";\nimport {\n useMacrostratColumnData,\n useCompositeScale,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./taxon-ranges.module.sass\";\nimport { useRef } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport function PBDBOccurrencesMatrix({ columnID }) {\n /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will\n eventually be extended with first/last occurrence markers and range bars.\n */\n const data = useFossilData(columnID, FossilDataType.Occurrences);\n const col = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null) return null;\n\n // convert the data to a map\n const occurrenceMap = new Map(group(data, (d) => d.unit_id)) as Map<\n number,\n PBDBOccurrence[]\n >;\n\n const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);\n\n const { taxonRanges } = matrix;\n\n const padding = 16;\n const spacing = 16;\n\n const taxonEntries = Array.from(taxonRanges.entries());\n //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa\n\n const width = padding * 2 + spacing * taxonEntries.length;\n\n return h(Box, { className: \"taxon-ranges\", width, height: col.totalHeight }, [\n h(TaxonOccurrenceLabels, {\n taxonEntries,\n padding,\n spacing,\n scale,\n }),\n h(\n ColumnSVG,\n {\n width: padding * 2 + spacing * taxonEntries.length,\n },\n h(\n \"g.taxa-occurrences-matrix\",\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const xPosition = padding + rowIndex * spacing;\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n }),\n ),\n ),\n ]);\n}\n\nfunction TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {\n return h(\"div.taxon-labels\", [\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const top = ranges[0]?.[0] ?? 0;\n let topPx = scale(top) - 20;\n if (topPx < 200) topPx = 0;\n\n return h(TaxonLabel, {\n top: topPx,\n left: padding + rowIndex * spacing,\n taxonName,\n });\n }),\n ]);\n}\n\nfunction TaxonLabel({ top, left, taxonName }) {\n const ref = useRef();\n const textSize = useElementSize(ref);\n const labelWidth = textSize?.height ?? 200;\n return h(\n \"div.taxon-label\",\n {\n style: {\n top: `${top}px`,\n marginLeft: `${left}px`,\n \"--label-width\": `${labelWidth}px`,\n },\n },\n h(\"div.taxon-label-inner\", h(\"div.taxon-label-text\", { ref }, taxonName)),\n );\n}\n\ntype TaxonUnitMap = Map<string, Set<number>>;\n\ninterface OccurrenceMatrixData {\n occurrenceMap: Map<number, PBDBEntity[]>; // Map of unit IDs to occurrences (original data)\n taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs\n taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences\n taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges\n}\n\nfunction TaxonOccurrenceEntry({\n xPosition,\n ranges,\n scale,\n name,\n}: {\n xPosition: number;\n units: Set<number>;\n ranges: any;\n scale: any;\n name: string;\n}) {\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n}\n\nfunction createOccurrenceMatrix(\n units: UnitLong[],\n data: Map<number, PBDBOccurrence[]>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): OccurrenceMatrixData {\n const taxonUnitMap = new Map<string, Set<number>>();\n const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();\n\n for (const [unit_id, occurrences] of data.entries()) {\n for (const occ of occurrences) {\n const taxonName = occ.best_name ?? occ.taxon_name;\n if (!taxonUnitMap.has(taxonName)) {\n taxonUnitMap.set(taxonName, new Set());\n taxonOccurrenceMap.set(taxonName, []);\n }\n taxonUnitMap.get(taxonName).add(unit_id);\n taxonOccurrenceMap.get(taxonName).push(occ);\n }\n }\n\n // sort the taxon occurrence map by number of occurrences\n const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {\n // Sort alphabetically by taxon name\n return b[0].localeCompare(a[0]);\n });\n\n const taxonRanges = new Map<string, [number, number][]>();\n for (const [taxonName, unitSet] of taxonUnitMap.entries()) {\n taxonRanges.set(\n taxonName,\n accumulatePresenceDomains(units, unitSet, axisType),\n );\n }\n\n return {\n occurrenceMap: data,\n taxonUnitMap: new Map(sortedTaxa),\n taxonOccurrenceMap: taxonOccurrenceMap,\n taxonRanges,\n };\n}\n\nfunction accumulatePresenceDomains(\n unit: UnitLong[],\n presenceUnits: Set<number>,\n axisType: ColumnAxisType,\n): Array<[number, number]> {\n const domains: Array<[number, number]> = [];\n let currentDomain: [number, number] | null = null;\n\n for (const u of unit) {\n if (presenceUnits.has(u.unit_id)) {\n if (currentDomain == null) {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain = [u.t_pos, u.b_pos];\n } else {\n currentDomain = [u.t_age, u.b_age];\n }\n } else {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain[1] = u.b_pos;\n } else {\n currentDomain[1] = u.b_age;\n }\n }\n } else {\n if (currentDomain != null) {\n domains.push(currentDomain);\n currentDomain = null;\n }\n }\n }\n\n if (currentDomain != null) {\n domains.push(currentDomain);\n }\n\n return domains;\n}\n"],"names":["hyper"],"mappings":";;;;;;;;AAkBA,MAAM,IAAIA,IAAM,OAAO,MAAM;AAEtB,SAAS,sBAAsB,EAAE,YAAY;AAIlD,QAAM,OAAO,cAAc,UAAU,eAAe,WAAW;AAC/D,QAAM,MAAM,wBAAA;AACZ,QAAM,QAAQ,kBAAA;AAEd,MAAI,QAAQ,KAAM,QAAO;AAGzB,QAAM,gBAAgB,IAAI,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;AAK3D,QAAM,SAAS,uBAAuB,IAAI,OAAO,eAAe,IAAI,QAAQ;AAE5E,QAAM,EAAE,gBAAgB;AAExB,QAAM,UAAU;AAChB,QAAM,UAAU;AAEhB,QAAM,eAAe,MAAM,KAAK,YAAY,SAAS;AAGrD,QAAM,QAAQ,UAAU,IAAI,UAAU,aAAa;AAEnD,SAAO,EAAE,KAAK,EAAE,WAAW,gBAAgB,OAAO,QAAQ,IAAI,eAAe;AAAA,IAC3E,EAAE,uBAAuB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAAA,IACD;AAAA,MACE;AAAA,MACA;AAAA,QACE,OAAO,UAAU,IAAI,UAAU,aAAa;AAAA,MAAA;AAAA,MAE9C;AAAA,QACE;AAAA,QACA,aAAa,IAAI,CAAC,CAAC,WAAW,MAAM,GAAG,aAAa;AAClD,gBAAM,YAAY,UAAU,WAAW;AACvC,iBAAO,EAAE,KAAK,EAAE,WAAW,aAAa,SAAS,OAAO;AAAA,YACtD,OAAO,IAAI,CAAC,CAAC,KAAK,MAAM,MAAM;AAC5B,qBAAO,EAAE,QAAQ;AAAA,gBACf,IAAI,MAAM,GAAG;AAAA,gBACb,IAAI,MAAM,MAAM;AAAA,cAAA,CACjB;AAAA,YACH,CAAC;AAAA,UAAA,CACF;AAAA,QACH,CAAC;AAAA,MAAA;AAAA,IACH;AAAA,EACF,CACD;AACH;AAEA,SAAS,sBAAsB,EAAE,cAAc,SAAS,SAAS,SAAS;AACxE,SAAO,EAAE,oBAAoB;AAAA,IAC3B,aAAa,IAAI,CAAC,CAAC,WAAW,MAAM,GAAG,aAAa;AAClD,YAAM,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK;AAC9B,UAAI,QAAQ,MAAM,GAAG,IAAI;AACzB,UAAI,QAAQ,IAAK,SAAQ;AAEzB,aAAO,EAAE,YAAY;AAAA,QACnB,KAAK;AAAA,QACL,MAAM,UAAU,WAAW;AAAA,QAC3B;AAAA,MAAA,CACD;AAAA,IACH,CAAC;AAAA,EAAA,CACF;AACH;AAEA,SAAS,WAAW,EAAE,KAAK,MAAM,aAAa;AAC5C,QAAM,MAAM,OAAA;AACZ,QAAM,WAAW,eAAe,GAAG;AACnC,QAAM,aAAa,UAAU,UAAU;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,MACE,OAAO;AAAA,QACL,KAAK,GAAG,GAAG;AAAA,QACX,YAAY,GAAG,IAAI;AAAA,QACnB,iBAAiB,GAAG,UAAU;AAAA,MAAA;AAAA,IAChC;AAAA,IAEF,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,IAAA,GAAO,SAAS,CAAC;AAAA,EAAA;AAE5E;AAiCA,SAAS,uBACP,OACA,MACA,WAA2B,eAAe,KACpB;AACtB,QAAM,mCAAmB,IAAA;AACzB,QAAM,yCAAyB,IAAA;AAE/B,aAAW,CAAC,SAAS,WAAW,KAAK,KAAK,WAAW;AACnD,eAAW,OAAO,aAAa;AAC7B,YAAM,YAAY,IAAI,aAAa,IAAI;AACvC,UAAI,CAAC,aAAa,IAAI,SAAS,GAAG;AAChC,qBAAa,IAAI,WAAW,oBAAI,IAAA,CAAK;AACrC,2BAAmB,IAAI,WAAW,EAAE;AAAA,MACtC;AACA,mBAAa,IAAI,SAAS,EAAE,IAAI,OAAO;AACvC,yBAAmB,IAAI,SAAS,EAAE,KAAK,GAAG;AAAA,IAC5C;AAAA,EACF;AAGA,QAAM,aAAa,MAAM,KAAK,aAAa,QAAA,CAAS,EAAE,KAAK,CAAC,GAAG,MAAM;AAEnE,WAAO,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;AAAA,EAChC,CAAC;AAED,QAAM,kCAAkB,IAAA;AACxB,aAAW,CAAC,WAAW,OAAO,KAAK,aAAa,WAAW;AACzD,gBAAY;AAAA,MACV;AAAA,MACA,0BAA0B,OAAO,SAAS,QAAQ;AAAA,IAAA;AAAA,EAEtD;AAEA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,cAAc,IAAI,IAAI,UAAU;AAAA,IAChC;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,SAAS,0BACP,MACA,eACA,UACyB;AACzB,QAAM,UAAmC,CAAA;AACzC,MAAI,gBAAyC;AAE7C,aAAW,KAAK,MAAM;AACpB,QAAI,cAAc,IAAI,EAAE,OAAO,GAAG;AAChC,UAAI,iBAAiB,MAAM;AACzB,YACE,YAAY,eAAe,SAC3B,YAAY,eAAe,QAC3B;AACA,0BAAgB,CAAC,EAAE,OAAO,EAAE,KAAK;AAAA,QACnC,OAAO;AACL,0BAAgB,CAAC,EAAE,OAAO,EAAE,KAAK;AAAA,QACnC;AAAA,MACF,OAAO;AACL,YACE,YAAY,eAAe,SAC3B,YAAY,eAAe,QAC3B;AACA,wBAAc,CAAC,IAAI,EAAE;AAAA,QACvB,OAAO;AACL,wBAAc,CAAC,IAAI,EAAE;AAAA,QACvB;AAAA,MACF;AAAA,IACF,OAAO;AACL,UAAI,iBAAiB,MAAM;AACzB,gBAAQ,KAAK,aAAa;AAC1B,wBAAgB;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,MAAI,iBAAiB,MAAM;AACzB,YAAQ,KAAK,aAAa;AAAA,EAC5B;AAEA,SAAO;AACT;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const styles = {
|
|
4
|
+
"taxa-occurrences-matrix": "_taxa-occurrences-matrix_14h8h_1",
|
|
5
|
+
"taxon-name": "_taxon-name_14h8h_8",
|
|
6
|
+
"taxon-ranges": "_taxon-ranges_14h8h_16",
|
|
7
|
+
"taxon-labels": "_taxon-labels_14h8h_24",
|
|
8
|
+
"taxon-label": "_taxon-label_14h8h_24",
|
|
9
|
+
"taxon-label-inner": "_taxon-label-inner_14h8h_35",
|
|
10
|
+
"taxon-label-text": "_taxon-label-text_14h8h_42"
|
|
11
|
+
};
|
|
12
|
+
exports.default = styles;
|
|
13
|
+
//# sourceMappingURL=taxon-ranges.module.sass.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxon-ranges.module.sass.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const styles = {
|
|
2
|
+
"taxa-occurrences-matrix": "_taxa-occurrences-matrix_14h8h_1",
|
|
3
|
+
"taxon-name": "_taxon-name_14h8h_8",
|
|
4
|
+
"taxon-ranges": "_taxon-ranges_14h8h_16",
|
|
5
|
+
"taxon-labels": "_taxon-labels_14h8h_24",
|
|
6
|
+
"taxon-label": "_taxon-label_14h8h_24",
|
|
7
|
+
"taxon-label-inner": "_taxon-label-inner_14h8h_35",
|
|
8
|
+
"taxon-label-text": "_taxon-label-text_14h8h_42"
|
|
9
|
+
};
|
|
10
|
+
export {
|
|
11
|
+
styles as default
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=taxon-ranges.module.sass.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxon-ranges.module.sass.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const h$1 = require("@macrostrat/hyper");
|
|
4
|
+
const base_module = require("./base.module.sass.cjs");
|
|
5
|
+
const notes = require("../../notes.cjs");
|
|
6
|
+
const columnComponents = require("@macrostrat/column-components");
|
|
7
|
+
const utils = require("../../prepare-units/utils.cjs");
|
|
8
|
+
const h = h$1.styled(base_module.default);
|
|
9
|
+
function standardizeMeasurementHeight(pos, units, axisType) {
|
|
10
|
+
if ("height" in pos) {
|
|
11
|
+
return pos;
|
|
12
|
+
}
|
|
13
|
+
const unit = units.find((u) => u.unit_id === pos.unit_id);
|
|
14
|
+
if (unit == null) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
if (pos.unit_rel_pos != null) {
|
|
18
|
+
const res = utils.getPositionWithinUnit(pos.unit_rel_pos, unit, axisType);
|
|
19
|
+
if (res == null) return null;
|
|
20
|
+
return { height: res };
|
|
21
|
+
} else {
|
|
22
|
+
const [height, top_height] = utils.getUnitHeightRange(unit, axisType);
|
|
23
|
+
return { height, top_height };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function mergeHeightRanges(data, axisType) {
|
|
27
|
+
const heights = [];
|
|
28
|
+
for (const d of data) {
|
|
29
|
+
heights.push(d.height);
|
|
30
|
+
if (d.top_height != null) {
|
|
31
|
+
heights.push(d.top_height);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
let height;
|
|
35
|
+
let top_height;
|
|
36
|
+
if (axisType === columnComponents.ColumnAxisType.AGE || axisType === columnComponents.ColumnAxisType.DEPTH) {
|
|
37
|
+
height = Math.max(...heights);
|
|
38
|
+
top_height = Math.min(...heights);
|
|
39
|
+
} else {
|
|
40
|
+
height = Math.min(...heights);
|
|
41
|
+
top_height = Math.max(...heights);
|
|
42
|
+
}
|
|
43
|
+
if (top_height === height) {
|
|
44
|
+
return { height };
|
|
45
|
+
}
|
|
46
|
+
return { height, top_height };
|
|
47
|
+
}
|
|
48
|
+
function BaseMeasurementsColumn({
|
|
49
|
+
data,
|
|
50
|
+
noteComponent,
|
|
51
|
+
width = 500,
|
|
52
|
+
paddingLeft = 40,
|
|
53
|
+
className,
|
|
54
|
+
deltaConnectorAttachment,
|
|
55
|
+
focusedNoteComponent
|
|
56
|
+
}) {
|
|
57
|
+
if (data == null) return null;
|
|
58
|
+
return h(
|
|
59
|
+
"div.measurements-column",
|
|
60
|
+
{ className },
|
|
61
|
+
h(notes.ColumnNotes, {
|
|
62
|
+
width,
|
|
63
|
+
paddingLeft,
|
|
64
|
+
notes: data,
|
|
65
|
+
noteComponent,
|
|
66
|
+
deltaConnectorAttachment,
|
|
67
|
+
focusedNoteComponent
|
|
68
|
+
})
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
function TruncatedList({
|
|
72
|
+
data,
|
|
73
|
+
className,
|
|
74
|
+
maxItems = 5,
|
|
75
|
+
itemRenderer = (p) => h("span", p.data)
|
|
76
|
+
}) {
|
|
77
|
+
let tooMany = null;
|
|
78
|
+
let d1 = data;
|
|
79
|
+
if (data.length > maxItems) {
|
|
80
|
+
const n = data.length - maxItems;
|
|
81
|
+
d1 = data.slice(0, maxItems);
|
|
82
|
+
tooMany = h("li.too-many", `and ${n} more`);
|
|
83
|
+
}
|
|
84
|
+
return h("ul.truncated-list", { className }, [
|
|
85
|
+
d1.map((d, i) => {
|
|
86
|
+
return h("li.element", { key: i }, h(itemRenderer, { data: d }));
|
|
87
|
+
}),
|
|
88
|
+
tooMany
|
|
89
|
+
]);
|
|
90
|
+
}
|
|
91
|
+
function groupNotesByPixelDistance(data, scale, axisType, groupDistance) {
|
|
92
|
+
if (data.length === 0 || groupDistance <= 0) return data;
|
|
93
|
+
if (axisType === columnComponents.ColumnAxisType.AGE || axisType === columnComponents.ColumnAxisType.DEPTH) {
|
|
94
|
+
data.sort((a, b) => b.height - a.height);
|
|
95
|
+
} else {
|
|
96
|
+
data.sort((a, b) => a.height - b.height);
|
|
97
|
+
}
|
|
98
|
+
const groupedData = [];
|
|
99
|
+
let currentGroup = null;
|
|
100
|
+
let currentGroupPosition = Infinity;
|
|
101
|
+
for (const d of data) {
|
|
102
|
+
const distance = currentGroupPosition - scale(d.top_height ?? d.height);
|
|
103
|
+
if (distance <= groupDistance) {
|
|
104
|
+
if (currentGroup == null) {
|
|
105
|
+
throw new Error("Current group is null when it shouldn't be");
|
|
106
|
+
}
|
|
107
|
+
currentGroup.data.push(...d.data);
|
|
108
|
+
const top_height = d.top_height ?? d.height;
|
|
109
|
+
if (axisType === columnComponents.ColumnAxisType.AGE || axisType === columnComponents.ColumnAxisType.DEPTH) {
|
|
110
|
+
currentGroup.top_height = Math.min(currentGroup.top_height, top_height);
|
|
111
|
+
} else {
|
|
112
|
+
currentGroup.top_height = Math.max(currentGroup.top_height, top_height);
|
|
113
|
+
}
|
|
114
|
+
currentGroup.id = `${currentGroup.height}-${currentGroup.top_height}`;
|
|
115
|
+
} else {
|
|
116
|
+
currentGroup = { ...d, data: [...d.data] };
|
|
117
|
+
currentGroupPosition = scale(currentGroup.height) ?? scale(currentGroup.top_height) ?? Infinity;
|
|
118
|
+
groupedData.push(currentGroup);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return groupedData;
|
|
122
|
+
}
|
|
123
|
+
exports.BaseMeasurementsColumn = BaseMeasurementsColumn;
|
|
124
|
+
exports.TruncatedList = TruncatedList;
|
|
125
|
+
exports.groupNotesByPixelDistance = groupNotesByPixelDistance;
|
|
126
|
+
exports.mergeHeightRanges = mergeHeightRanges;
|
|
127
|
+
exports.standardizeMeasurementHeight = standardizeMeasurementHeight;
|
|
128
|
+
//# sourceMappingURL=base.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.cjs","sources":["../../../src/facets/measurements/base.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport styles from \"./base.module.sass\";\nimport {\n type CompositeColumnScale,\n getPositionWithinUnit,\n getUnitHeightRange,\n} from \"../../prepare-units\";\nimport { ColumnNotes } from \"../../notes\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nconst h = hyper.styled(styles);\n\ntype GetHeightRangeFn<T> = (\n data: T,\n unit: UnitLong | null,\n axisType: ColumnAxisType,\n) => MeasurementHeightData;\n\nexport interface BaseMeasurementsColumnProps<T> {\n data: T[];\n noteComponent?: any;\n width?: number;\n paddingLeft?: number;\n className?: string;\n // TODO: these props are confusing\n getUnitID?: (d: T) => number | string;\n isMatchingUnit?: (d: T, unit: UnitLong) => boolean;\n getHeightRange?: GetHeightRangeFn<T>;\n deltaConnectorAttachment?: number;\n focusedNoteComponent?: any;\n}\n\nexport interface ColumnMeasurementData<T = any> extends MeasurementHeightData {\n data: T;\n id: string | number;\n}\n\ntype MeasurementPositionInformation =\n | MeasurementHeightData\n | {\n unit_id: number;\n unit_rel_pos?: number;\n };\n\nexport function standardizeMeasurementHeight(\n pos: MeasurementPositionInformation,\n units: UnitLong[],\n axisType: ColumnAxisType,\n): MeasurementHeightData | null {\n /** Get a standardized height representation from position information for\n * a measurement\n */\n if (\"height\" in pos) {\n return pos;\n }\n const unit = units.find((u) => u.unit_id === pos.unit_id);\n if (unit == null) {\n return null;\n }\n if (pos.unit_rel_pos != null) {\n const res = getPositionWithinUnit(pos.unit_rel_pos, unit, axisType);\n if (res == null) return null;\n return { height: res };\n } else {\n const [height, top_height] = getUnitHeightRange(unit, axisType);\n return { height, top_height };\n }\n}\n\nexport function mergeHeightRanges(\n data: MeasurementHeightData[],\n axisType: ColumnAxisType,\n): MeasurementHeightData {\n /** Merge multiple height ranges into a single range */\n const heights = [];\n\n for (const d of data) {\n heights.push(d.height);\n if (d.top_height != null) {\n heights.push(d.top_height);\n }\n }\n\n let height: number;\n let top_height: number;\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n height = Math.max(...heights);\n top_height = Math.min(...heights);\n } else {\n height = Math.min(...heights);\n top_height = Math.max(...heights);\n }\n\n if (top_height === height) {\n return { height };\n }\n return { height, top_height };\n}\n\nexport type MeasurementHeightData = {\n height: number;\n top_height?: number | null;\n};\n\nexport function BaseMeasurementsColumn({\n data,\n noteComponent,\n width = 500,\n paddingLeft = 40,\n className,\n deltaConnectorAttachment,\n focusedNoteComponent,\n}: BaseMeasurementsColumnProps<any>) {\n if (data == null) return null;\n\n return h(\n \"div.measurements-column\",\n { className },\n h(ColumnNotes, {\n width,\n paddingLeft,\n notes: data,\n noteComponent,\n deltaConnectorAttachment,\n focusedNoteComponent,\n }),\n );\n}\n\ninterface TruncatedListProps {\n data: any[];\n className?: string;\n maxItems?: number;\n itemRenderer?: (props: { data: any }) => any;\n}\n\nexport function TruncatedList({\n data,\n className,\n maxItems = 5,\n itemRenderer = (p) => h(\"span\", p.data),\n}: TruncatedListProps) {\n let tooMany = null;\n let d1 = data;\n if (data.length > maxItems) {\n const n = data.length - maxItems;\n d1 = data.slice(0, maxItems);\n tooMany = h(\"li.too-many\", `and ${n} more`);\n }\n\n return h(\"ul.truncated-list\", { className }, [\n d1.map((d, i) => {\n return h(\"li.element\", { key: i }, h(itemRenderer, { data: d }));\n }),\n tooMany,\n ]);\n}\n\nexport function groupNotesByPixelDistance<T = any>(\n data: ColumnMeasurementData<T[]>[],\n scale: CompositeColumnScale,\n axisType: ColumnAxisType,\n groupDistance: number,\n) {\n /** Group notes that are within a certain pixel distance of each other\n * in display space\n */\n if (data.length === 0 || groupDistance <= 0) return data;\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n data.sort((a, b) => b.height - a.height);\n } else {\n // Sort data by height (ascending up the column)\n data.sort((a, b) => a.height - b.height);\n }\n\n const groupedData: ColumnMeasurementData<T[]>[] = [];\n let currentGroup: ColumnMeasurementData<T[]> | null = null;\n let currentGroupPosition: number = Infinity;\n\n for (const d of data) {\n // Check distance from current max position\n // Pixels go up as we go down in the section\n\n // The _top_ of the next group must be within groupDistance of the\n // _bottom_ of the current group. This makes sure that we don't collapse\n // groups that are separated by a large distance\n const distance = currentGroupPosition - scale(d.top_height ?? d.height);\n\n if (distance <= groupDistance) {\n if (currentGroup == null) {\n throw new Error(\"Current group is null when it shouldn't be\");\n }\n // Merge into current group\n currentGroup.data.push(...d.data);\n // Update height range\n const top_height = d.top_height ?? d.height;\n if (\n axisType === ColumnAxisType.AGE ||\n axisType === ColumnAxisType.DEPTH\n ) {\n // Inverted axis\n currentGroup.top_height = Math.min(currentGroup.top_height, top_height);\n } else {\n currentGroup.top_height = Math.max(currentGroup.top_height, top_height);\n }\n currentGroup.id = `${currentGroup.height}-${currentGroup.top_height}`;\n } else {\n // Start a new group\n currentGroup = { ...d, data: [...d.data] };\n currentGroupPosition =\n scale(currentGroup.height) ??\n scale(currentGroup.top_height) ??\n Infinity;\n groupedData.push(currentGroup);\n }\n }\n\n return groupedData;\n}\n"],"names":["hyper","styles","getPositionWithinUnit","getUnitHeightRange","ColumnAxisType","ColumnNotes"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { CompositeColumnScale } from '../../prepare-units';
|
|
2
|
+
import { UnitLong } from '@macrostrat/api-types';
|
|
3
|
+
import { ColumnAxisType } from '@macrostrat/column-components';
|
|
4
|
+
type GetHeightRangeFn<T> = (data: T, unit: UnitLong | null, axisType: ColumnAxisType) => MeasurementHeightData;
|
|
5
|
+
export interface BaseMeasurementsColumnProps<T> {
|
|
6
|
+
data: T[];
|
|
7
|
+
noteComponent?: any;
|
|
8
|
+
width?: number;
|
|
9
|
+
paddingLeft?: number;
|
|
10
|
+
className?: string;
|
|
11
|
+
getUnitID?: (d: T) => number | string;
|
|
12
|
+
isMatchingUnit?: (d: T, unit: UnitLong) => boolean;
|
|
13
|
+
getHeightRange?: GetHeightRangeFn<T>;
|
|
14
|
+
deltaConnectorAttachment?: number;
|
|
15
|
+
focusedNoteComponent?: any;
|
|
16
|
+
}
|
|
17
|
+
export interface ColumnMeasurementData<T = any> extends MeasurementHeightData {
|
|
18
|
+
data: T;
|
|
19
|
+
id: string | number;
|
|
20
|
+
}
|
|
21
|
+
type MeasurementPositionInformation = MeasurementHeightData | {
|
|
22
|
+
unit_id: number;
|
|
23
|
+
unit_rel_pos?: number;
|
|
24
|
+
};
|
|
25
|
+
export declare function standardizeMeasurementHeight(pos: MeasurementPositionInformation, units: UnitLong[], axisType: ColumnAxisType): MeasurementHeightData | null;
|
|
26
|
+
export declare function mergeHeightRanges(data: MeasurementHeightData[], axisType: ColumnAxisType): MeasurementHeightData;
|
|
27
|
+
export type MeasurementHeightData = {
|
|
28
|
+
height: number;
|
|
29
|
+
top_height?: number | null;
|
|
30
|
+
};
|
|
31
|
+
export declare function BaseMeasurementsColumn({ data, noteComponent, width, paddingLeft, className, deltaConnectorAttachment, focusedNoteComponent, }: BaseMeasurementsColumnProps<any>): import('react').ReactElement<{
|
|
32
|
+
className: string;
|
|
33
|
+
}, string | import('react').JSXElementConstructor<any>>;
|
|
34
|
+
interface TruncatedListProps {
|
|
35
|
+
data: any[];
|
|
36
|
+
className?: string;
|
|
37
|
+
maxItems?: number;
|
|
38
|
+
itemRenderer?: (props: {
|
|
39
|
+
data: any;
|
|
40
|
+
}) => any;
|
|
41
|
+
}
|
|
42
|
+
export declare function TruncatedList({ data, className, maxItems, itemRenderer, }: TruncatedListProps): import('react').ReactElement<{
|
|
43
|
+
className: string;
|
|
44
|
+
}, string | import('react').JSXElementConstructor<any>>;
|
|
45
|
+
export declare function groupNotesByPixelDistance<T = any>(data: ColumnMeasurementData<T[]>[], scale: CompositeColumnScale, axisType: ColumnAxisType, groupDistance: number): ColumnMeasurementData<T[]>[];
|
|
46
|
+
export {};
|