@macrostrat/column-views 2.0.1 → 2.1.1
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 +15 -0
- package/dist/esm/{column-views.8dd877af.js → column-views.006d5180.js} +2 -1
- package/dist/esm/column-views.006d5180.js.map +1 -0
- package/dist/esm/column-views.05586d1f.js +22 -0
- package/dist/esm/column-views.05586d1f.js.map +1 -0
- package/dist/esm/column-views.0732894f.js +86 -0
- package/dist/esm/column-views.0732894f.js.map +1 -0
- package/dist/esm/{column-views.134b2e2a.js → column-views.08440694.js} +2 -2
- package/dist/esm/{column-views.134b2e2a.js.map → column-views.08440694.js.map} +1 -1
- package/dist/esm/{column-views.aa9fcdba.js → column-views.0c14e18e.js} +18 -15
- package/dist/esm/column-views.0c14e18e.js.map +1 -0
- package/dist/esm/column-views.10eba967.js +11 -0
- package/dist/esm/column-views.10eba967.js.map +1 -0
- package/dist/esm/{column-views.8e51206e.js → column-views.1af9761e.js} +19 -3
- package/dist/esm/column-views.1af9761e.js.map +1 -0
- package/dist/esm/column-views.1c92b88f.js +16 -0
- package/dist/esm/column-views.1c92b88f.js.map +1 -0
- package/dist/esm/{column-views.ea237aa8.js → column-views.1e055ed5.js} +6 -5
- package/dist/esm/column-views.1e055ed5.js.map +1 -0
- package/dist/esm/{column-views.1ece326b.js → column-views.1f123354.js} +60 -11
- package/dist/esm/column-views.1f123354.js.map +1 -0
- package/dist/esm/{column-views.240ef158.css → column-views.217078ab.css} +4 -3
- package/dist/esm/column-views.217078ab.css.map +1 -0
- package/dist/esm/column-views.2c45a7b5.js +25 -0
- package/dist/esm/column-views.2c45a7b5.js.map +1 -0
- package/dist/esm/column-views.2ca34210.js +151 -0
- package/dist/esm/column-views.2ca34210.js.map +1 -0
- package/dist/esm/{column-views.3bec70d6.js → column-views.2d8e0e0f.js} +9 -8
- package/dist/esm/column-views.2d8e0e0f.js.map +1 -0
- package/dist/esm/column-views.3048acc1.js +66 -0
- package/dist/esm/column-views.3048acc1.js.map +1 -0
- package/dist/esm/column-views.39657bbf.js.map +1 -1
- package/dist/esm/{column-views.28ee5f43.js → column-views.3ba9213d.js} +16 -5
- package/dist/esm/column-views.3ba9213d.js.map +1 -0
- package/dist/esm/column-views.3de4dc43.js.map +1 -1
- package/dist/esm/column-views.403a7b48.css +24 -0
- package/dist/esm/column-views.403a7b48.css.map +1 -0
- package/dist/esm/column-views.4637f4ce.js.map +1 -1
- package/dist/esm/{column-views.86c4b36f.js → column-views.4ab0ec82.js} +44 -13
- package/dist/esm/column-views.4ab0ec82.js.map +1 -0
- package/dist/esm/{column-views.9bdd477a.js → column-views.4d22c21c.js} +2 -2
- package/dist/esm/{column-views.9bdd477a.js.map → column-views.4d22c21c.js.map} +1 -1
- package/dist/esm/{column-views.fa6f3292.js → column-views.4df0b803.js} +7 -8
- package/dist/esm/column-views.4df0b803.js.map +1 -0
- package/dist/esm/{column-views.b775c0a3.js → column-views.52a6eb47.js} +3 -3
- package/dist/esm/{column-views.b775c0a3.js.map → column-views.52a6eb47.js.map} +1 -1
- package/dist/esm/column-views.57636733.css +22 -0
- package/dist/esm/column-views.57636733.css.map +1 -0
- package/dist/esm/{column-views.68409161.js → column-views.59bb0cba.js} +2 -3
- package/dist/esm/column-views.59bb0cba.js.map +1 -0
- package/dist/esm/column-views.5cc09c1d.js.map +1 -1
- package/dist/esm/column-views.5e2dc19d.js +187 -0
- package/dist/esm/column-views.5e2dc19d.js.map +1 -0
- package/dist/esm/{column-views.33dbc778.js → column-views.633c42a3.js} +2 -1
- package/dist/esm/column-views.633c42a3.js.map +1 -0
- package/dist/esm/{column-views.e77b9d6b.js → column-views.6549388a.js} +4 -5
- package/dist/esm/column-views.6549388a.js.map +1 -0
- package/dist/esm/{column-views.dff52504.js → column-views.686d21ad.js} +10 -1
- package/dist/esm/column-views.686d21ad.js.map +1 -0
- package/dist/esm/column-views.6992ca88.js +25 -0
- package/dist/esm/column-views.6992ca88.js.map +1 -0
- package/dist/esm/column-views.6d6b73b4.js.map +1 -1
- package/dist/esm/column-views.708140ab.css +36 -0
- package/dist/esm/column-views.708140ab.css.map +1 -0
- package/dist/esm/{column-views.650bd9f5.js → column-views.7715e35e.js} +17 -13
- package/dist/esm/column-views.7715e35e.js.map +1 -0
- package/dist/esm/{column-views.a98214b2.js → column-views.7e350ae2.js} +3 -3
- package/dist/esm/{column-views.a98214b2.js.map → column-views.7e350ae2.js.map} +1 -1
- package/dist/esm/{column-views.30646469.js → column-views.85c6a716.js} +2 -2
- package/dist/esm/column-views.85c6a716.js.map +1 -0
- package/dist/esm/column-views.86619334.js +9 -0
- package/dist/esm/column-views.86619334.js.map +1 -0
- package/dist/esm/{column-views.40c1f361.js → column-views.89b9e542.js} +11 -18
- package/dist/esm/column-views.89b9e542.js.map +1 -0
- package/dist/esm/{column-views.1c589cc4.js → column-views.9892f825.js} +55 -4
- package/dist/esm/column-views.9892f825.js.map +1 -0
- package/dist/esm/{column-views.1edc7300.js → column-views.9b77388d.js} +6 -5
- package/dist/esm/column-views.9b77388d.js.map +1 -0
- package/dist/esm/column-views.a7c5ae16.js +25 -0
- package/dist/esm/column-views.a7c5ae16.js.map +1 -0
- package/dist/esm/{column-views.5c02fee2.js → column-views.a91dde4a.js} +10 -9
- package/dist/esm/column-views.a91dde4a.js.map +1 -0
- package/dist/esm/{column-views.fc2b4611.js → column-views.a94e99a2.js} +2 -2
- package/dist/esm/{column-views.fc2b4611.js.map → column-views.a94e99a2.js.map} +1 -1
- package/dist/esm/{column-views.e2b9c23c.css → column-views.b17f793f.css} +21 -1
- package/dist/esm/column-views.b17f793f.css.map +1 -0
- package/dist/esm/{column-views.9804efda.js → column-views.b9fe5176.js} +14 -8
- package/dist/esm/column-views.b9fe5176.js.map +1 -0
- package/dist/esm/{column-views.b2e5f1d9.js → column-views.bcffe6e5.js} +4 -4
- package/dist/esm/{column-views.b2e5f1d9.js.map → column-views.bcffe6e5.js.map} +1 -1
- package/dist/esm/{column-views.f1efcc2c.js → column-views.c25e8b32.js} +3 -3
- package/dist/esm/{column-views.f1efcc2c.js.map → column-views.c25e8b32.js.map} +1 -1
- package/dist/esm/{column-views.9ced149e.js → column-views.c32d6ad0.js} +25 -6
- package/dist/esm/column-views.c32d6ad0.js.map +1 -0
- package/dist/esm/{column-views.34636ec7.js → column-views.c71c321c.js} +11 -11
- package/dist/esm/column-views.c71c321c.js.map +1 -0
- package/dist/esm/{column-views.f2e5a72f.js → column-views.c8cc249a.js} +3 -3
- package/dist/esm/{column-views.f2e5a72f.js.map → column-views.c8cc249a.js.map} +1 -1
- package/dist/esm/{column-views.5b2635fd.js → column-views.c8e2983a.js} +4 -4
- package/dist/esm/{column-views.5b2635fd.js.map → column-views.c8e2983a.js.map} +1 -1
- package/dist/esm/{column-views.88de2cee.js → column-views.cfcf6096.js} +4 -4
- package/dist/esm/{column-views.88de2cee.js.map → column-views.cfcf6096.js.map} +1 -1
- package/dist/esm/{column-views.4c4c5bac.js → column-views.d2037465.js} +14 -8
- package/dist/esm/column-views.d2037465.js.map +1 -0
- package/dist/esm/column-views.dc42f5d0.js.map +1 -1
- package/dist/esm/column-views.e20f6a4b.js +124 -0
- package/dist/esm/column-views.e20f6a4b.js.map +1 -0
- package/dist/esm/{column-views.57c4ddf3.js → column-views.f08929e2.js} +2 -2
- package/dist/esm/column-views.f08929e2.js.map +1 -0
- package/dist/esm/column-views.f13a1d6e.js +37 -0
- package/dist/esm/column-views.f13a1d6e.js.map +1 -0
- package/dist/esm/column-views.f9dab157.js.map +1 -1
- package/dist/esm/column-views.fa19cea0.js +108 -0
- package/dist/esm/column-views.fa19cea0.js.map +1 -0
- package/dist/esm/{column-views.f71ec4b4.js → column-views.fdb0e9ec.js} +67 -30
- package/dist/esm/column-views.fdb0e9ec.js.map +1 -0
- package/dist/esm/index.d.ts +325 -296
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +13 -11
- package/dist/esm/index.js.map +1 -1
- package/dist/node/column-views.04407342.js +2 -0
- package/dist/node/column-views.04407342.js.map +1 -0
- package/dist/node/column-views.06951a55.js +2 -0
- package/dist/node/column-views.06951a55.js.map +1 -0
- package/dist/node/column-views.06b0534e.js +2 -0
- package/dist/node/column-views.06b0534e.js.map +1 -0
- package/dist/node/column-views.0859f5d2.js +2 -0
- package/dist/node/column-views.0859f5d2.js.map +1 -0
- package/dist/node/column-views.10a2bad6.js +2 -0
- package/dist/node/column-views.10a2bad6.js.map +1 -0
- package/dist/node/column-views.12a70e9d.js +2 -0
- package/dist/node/column-views.12a70e9d.js.map +1 -0
- package/dist/node/column-views.139b0855.js +2 -0
- package/dist/node/column-views.139b0855.js.map +1 -0
- package/dist/node/column-views.1a0b56fc.js +2 -0
- package/dist/node/column-views.1a0b56fc.js.map +1 -0
- package/dist/node/column-views.1de87649.js +2 -0
- package/dist/node/column-views.1de87649.js.map +1 -0
- package/dist/node/column-views.1e94d562.js +2 -0
- package/dist/node/column-views.1e94d562.js.map +1 -0
- package/dist/node/column-views.28609db2.css +2 -0
- package/dist/node/column-views.28609db2.css.map +1 -0
- package/dist/node/column-views.286d444d.js +2 -0
- package/dist/node/column-views.286d444d.js.map +1 -0
- package/dist/node/column-views.2877f398.js +2 -0
- package/dist/node/column-views.2877f398.js.map +1 -0
- package/dist/node/column-views.2a70b9a2.js +2 -0
- package/dist/node/column-views.2a70b9a2.js.map +1 -0
- package/dist/node/column-views.2e4e357d.js +2 -0
- package/dist/node/column-views.2e4e357d.js.map +1 -0
- package/dist/node/column-views.3345cd7a.js +2 -0
- package/dist/node/column-views.3345cd7a.js.map +1 -0
- package/dist/node/column-views.33752461.js +2 -0
- package/dist/node/column-views.33752461.js.map +1 -0
- package/dist/node/column-views.39d3a0be.js +2 -0
- package/dist/node/column-views.39d3a0be.js.map +1 -0
- package/dist/node/column-views.3a55ecd7.css +2 -0
- package/dist/node/column-views.3a55ecd7.css.map +1 -0
- package/dist/node/column-views.3bd09ad6.js +2 -0
- package/dist/node/column-views.3bd09ad6.js.map +1 -0
- package/dist/node/column-views.3cb3345e.js +2 -0
- package/dist/node/column-views.3cb3345e.js.map +1 -0
- package/dist/node/column-views.41876859.js +2 -0
- package/dist/node/column-views.41876859.js.map +1 -0
- package/dist/node/column-views.45168c80.js +2 -0
- package/dist/node/column-views.45168c80.js.map +1 -0
- package/dist/node/column-views.4e2bdf9b.js +2 -0
- package/dist/node/column-views.4e2bdf9b.js.map +1 -0
- package/dist/node/column-views.51fbed89.js +2 -0
- package/dist/node/column-views.51fbed89.js.map +1 -0
- package/dist/node/column-views.536dc54e.js +2 -0
- package/dist/node/column-views.536dc54e.js.map +1 -0
- package/dist/node/column-views.5b6833f0.js +2 -0
- package/dist/node/column-views.5b6833f0.js.map +1 -0
- package/dist/node/column-views.5c1b0eeb.css +2 -0
- package/dist/node/column-views.5c1b0eeb.css.map +1 -0
- package/dist/node/column-views.664dc6c9.js +2 -0
- package/dist/node/column-views.664dc6c9.js.map +1 -0
- package/dist/node/column-views.6a0a35e7.js +2 -0
- package/dist/node/column-views.6a0a35e7.js.map +1 -0
- package/dist/node/column-views.6a4c2100.css +2 -0
- package/dist/node/column-views.6a4c2100.css.map +1 -0
- package/dist/node/column-views.6a9da051.js +2 -0
- package/dist/node/column-views.6a9da051.js.map +1 -0
- package/dist/node/column-views.6b441349.js +2 -0
- package/dist/node/column-views.6b441349.js.map +1 -0
- package/dist/node/column-views.6b6b756b.js +2 -0
- package/dist/node/column-views.6b6b756b.js.map +1 -0
- package/dist/node/column-views.6bba8c57.js +2 -0
- package/dist/node/column-views.6bba8c57.js.map +1 -0
- package/dist/node/column-views.6da49480.js +2 -0
- package/dist/node/column-views.6da49480.js.map +1 -0
- package/dist/node/column-views.7350ac73.js +2 -0
- package/dist/node/column-views.7350ac73.js.map +1 -0
- package/dist/node/column-views.755f726e.js +2 -0
- package/dist/node/column-views.755f726e.js.map +1 -0
- package/dist/node/column-views.770d2c95.js +2 -0
- package/dist/node/column-views.770d2c95.js.map +1 -0
- package/dist/node/column-views.78d3f3c5.js +2 -0
- package/dist/node/column-views.78d3f3c5.js.map +1 -0
- package/dist/node/column-views.7b9bd06e.css +2 -0
- package/dist/node/column-views.7b9bd06e.css.map +1 -0
- package/dist/node/column-views.7d45bbeb.js +2 -0
- package/dist/node/column-views.7d45bbeb.js.map +1 -0
- package/dist/node/column-views.82cf7c0d.js +2 -0
- package/dist/node/column-views.82cf7c0d.js.map +1 -0
- package/dist/node/column-views.869c7199.js +2 -0
- package/dist/node/column-views.869c7199.js.map +1 -0
- package/dist/node/column-views.8c00beb4.js +2 -0
- package/dist/node/column-views.8c00beb4.js.map +1 -0
- package/dist/node/column-views.8cfed88b.js +2 -0
- package/dist/node/column-views.8cfed88b.js.map +1 -0
- package/dist/node/column-views.8f54691f.js +2 -0
- package/dist/node/column-views.8f54691f.js.map +1 -0
- package/dist/node/column-views.95411f1b.js +2 -0
- package/dist/node/column-views.95411f1b.js.map +1 -0
- package/dist/node/column-views.9cb13e51.css +2 -0
- package/dist/node/column-views.9cb13e51.css.map +1 -0
- package/dist/node/column-views.a025fbe3.js +2 -0
- package/dist/node/column-views.a025fbe3.js.map +1 -0
- package/dist/node/column-views.a0aac838.js +2 -0
- package/dist/node/column-views.a0aac838.js.map +1 -0
- package/dist/node/column-views.a501cea0.js +2 -0
- package/dist/node/column-views.a501cea0.js.map +1 -0
- package/dist/node/column-views.a8ffe072.js +2 -0
- package/dist/node/column-views.a8ffe072.js.map +1 -0
- package/dist/node/column-views.aff245a8.js +2 -0
- package/dist/node/column-views.aff245a8.js.map +1 -0
- package/dist/node/column-views.b169b4b5.css +2 -0
- package/dist/node/column-views.b169b4b5.css.map +1 -0
- package/dist/node/column-views.b773edb8.js +2 -0
- package/dist/node/column-views.b773edb8.js.map +1 -0
- package/dist/node/column-views.c968a185.css +2 -0
- package/dist/node/column-views.c968a185.css.map +1 -0
- package/dist/node/column-views.cd3c430b.js +2 -0
- package/dist/node/column-views.cd3c430b.js.map +1 -0
- package/dist/node/column-views.cd468adb.css +2 -0
- package/dist/node/column-views.cd468adb.css.map +1 -0
- package/dist/node/column-views.cdcce702.js +2 -0
- package/dist/node/column-views.cdcce702.js.map +1 -0
- package/dist/node/column-views.ce6808fe.js +2 -0
- package/dist/node/column-views.ce6808fe.js.map +1 -0
- package/dist/node/column-views.cf90f63d.js +2 -0
- package/dist/node/column-views.cf90f63d.js.map +1 -0
- package/dist/node/column-views.d6708353.js +2 -0
- package/dist/node/column-views.d6708353.js.map +1 -0
- package/dist/node/column-views.d9bbd6fb.css +2 -0
- package/dist/node/column-views.d9bbd6fb.css.map +1 -0
- package/dist/node/column-views.e6720522.js +2 -0
- package/dist/node/column-views.e6720522.js.map +1 -0
- package/dist/node/column-views.e7e26765.js +2 -0
- package/dist/node/column-views.e7e26765.js.map +1 -0
- package/dist/node/column-views.e9515ec1.js +2 -0
- package/dist/node/column-views.e9515ec1.js.map +1 -0
- package/dist/node/column-views.ebb44b7d.js +2 -0
- package/dist/node/column-views.ebb44b7d.js.map +1 -0
- package/dist/node/column-views.ecc2394a.js +2 -0
- package/dist/node/column-views.ecc2394a.js.map +1 -0
- package/dist/node/column-views.eea80478.js +2 -0
- package/dist/node/column-views.eea80478.js.map +1 -0
- package/dist/node/column-views.f7315cbc.css +2 -0
- package/dist/node/column-views.f7315cbc.css.map +1 -0
- package/dist/node/column-views.f76ba19f.js +2 -0
- package/dist/node/column-views.f76ba19f.js.map +1 -0
- package/dist/node/column-views.fdaa2963.js +2 -0
- package/dist/node/column-views.fdaa2963.js.map +1 -0
- package/dist/node/column-views.fea32686.js +2 -0
- package/dist/node/column-views.fea32686.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +16 -15
- package/src/age-axis.module.sass +20 -0
- package/src/age-axis.ts +25 -3
- package/src/age-model-overlay.ts +2 -2
- package/src/column.module.sass +3 -3
- package/src/column.ts +92 -19
- package/src/correlation-chart/main.ts +25 -12
- package/src/correlation-chart/prepare-data.ts +6 -6
- package/src/correlation-chart/stories/correlation-chart.stories.ts +12 -6
- package/src/data-provider/base.ts +20 -11
- package/src/data-provider/column-nav.ts +2 -2
- package/src/data-provider/fetch.ts +9 -9
- package/src/data-provider/store.ts +15 -10
- package/src/{carbon-isotopes → facets/carbon-isotopes}/data-area.ts +5 -4
- package/src/{carbon-isotopes → facets/carbon-isotopes}/index.ts +0 -1
- package/src/facets/carbon-isotopes/isotopes-column.module.sass +31 -0
- package/src/{carbon-isotopes → facets/carbon-isotopes}/isotopes-column.ts +119 -87
- package/src/facets/detrital-zircon/index.module.sass +22 -0
- package/src/facets/detrital-zircon/index.ts +132 -0
- package/src/facets/detrital-zircon/provider.ts +51 -0
- package/src/facets/fossils/index.module.sass +14 -0
- package/src/facets/fossils/index.ts +120 -0
- package/src/facets/fossils/provider.ts +80 -0
- package/src/facets/index.ts +3 -0
- package/src/index.ts +2 -1
- package/src/maps/_shared/inset-map.stories.ts +1 -1
- package/src/maps/_shared/inset-map.ts +2 -2
- package/src/maps/_shared/styles.ts +3 -1
- package/src/maps/column-correlation/column-correlation-map.stories.ts +3 -3
- package/src/maps/column-correlation/core.ts +17 -26
- package/src/maps/column-correlation/state.ts +9 -9
- package/src/maps/column-navigation/mapbox/column-navigation-map.stories.ts +177 -1
- package/src/maps/column-navigation/mapbox/index.ts +18 -15
- package/src/maps/column-navigation/mapbox/keyboard-navigation.ts +4 -4
- package/src/maps/column-navigation/mapbox/state.ts +16 -6
- package/src/maps/column-navigation/svg/animated.ts +2 -2
- package/src/maps/column-navigation/svg/column-navigation-svg-map.stories.ts +2 -2
- package/src/maps/column-navigation/svg/index.ts +2 -4
- package/src/maps/column-navigation/svg/layers.ts +5 -7
- package/src/maps/column-navigation/utils/keyboard-navigation.ts +1 -1
- package/src/notes.ts +49 -0
- package/src/prepare-units/composite-scale.ts +73 -25
- package/src/prepare-units/helpers.ts +78 -13
- package/src/prepare-units/index.ts +17 -17
- package/src/prepare-units/utils.ts +7 -7
- package/src/section.ts +8 -8
- package/src/unit-details/panel.ts +100 -17
- package/src/unit-details/popover.ts +5 -5
- package/src/units/boxes.ts +20 -10
- package/src/units/colors.ts +12 -5
- package/src/units/composite.ts +16 -11
- package/src/units/index.ts +77 -10
- package/src/units/names.ts +19 -16
- package/src/units/resolvers.ts +3 -0
- package/src/units/selection.ts +44 -11
- package/src/units/types.ts +2 -0
- package/dist/esm/column-views.062d164a.js +0 -86
- package/dist/esm/column-views.062d164a.js.map +0 -1
- package/dist/esm/column-views.07521ce6.js +0 -25
- package/dist/esm/column-views.07521ce6.js.map +0 -1
- package/dist/esm/column-views.1c589cc4.js.map +0 -1
- package/dist/esm/column-views.1ece326b.js.map +0 -1
- package/dist/esm/column-views.1edc7300.js.map +0 -1
- package/dist/esm/column-views.240ef158.css.map +0 -1
- package/dist/esm/column-views.28ee5f43.js.map +0 -1
- package/dist/esm/column-views.30646469.js.map +0 -1
- package/dist/esm/column-views.33dbc778.js.map +0 -1
- package/dist/esm/column-views.343b5aa2.js +0 -98
- package/dist/esm/column-views.343b5aa2.js.map +0 -1
- package/dist/esm/column-views.34636ec7.js.map +0 -1
- package/dist/esm/column-views.3bec70d6.js.map +0 -1
- package/dist/esm/column-views.3f4db8cb.js +0 -117
- package/dist/esm/column-views.3f4db8cb.js.map +0 -1
- package/dist/esm/column-views.40c1f361.js.map +0 -1
- package/dist/esm/column-views.4c4c5bac.js.map +0 -1
- package/dist/esm/column-views.57c4ddf3.js.map +0 -1
- package/dist/esm/column-views.5c02fee2.js.map +0 -1
- package/dist/esm/column-views.650bd9f5.js.map +0 -1
- package/dist/esm/column-views.68409161.js.map +0 -1
- package/dist/esm/column-views.86c4b36f.js.map +0 -1
- package/dist/esm/column-views.8dd877af.js.map +0 -1
- package/dist/esm/column-views.8e51206e.js.map +0 -1
- package/dist/esm/column-views.94b5cca1.js +0 -34
- package/dist/esm/column-views.94b5cca1.js.map +0 -1
- package/dist/esm/column-views.9804efda.js.map +0 -1
- package/dist/esm/column-views.9ced149e.js.map +0 -1
- package/dist/esm/column-views.a7be0a4a.css +0 -157
- package/dist/esm/column-views.a7be0a4a.css.map +0 -1
- package/dist/esm/column-views.aa9fcdba.js.map +0 -1
- package/dist/esm/column-views.ac9fb5e1.js +0 -163
- package/dist/esm/column-views.ac9fb5e1.js.map +0 -1
- package/dist/esm/column-views.c58aad3f.js +0 -88
- package/dist/esm/column-views.c58aad3f.js.map +0 -1
- package/dist/esm/column-views.d1ad48eb.js +0 -11
- package/dist/esm/column-views.d1ad48eb.js.map +0 -1
- package/dist/esm/column-views.dff52504.js.map +0 -1
- package/dist/esm/column-views.e2b9c23c.css.map +0 -1
- package/dist/esm/column-views.e77b9d6b.js.map +0 -1
- package/dist/esm/column-views.ea237aa8.js.map +0 -1
- package/dist/esm/column-views.f71ec4b4.js.map +0 -1
- package/dist/esm/column-views.fa6f3292.js.map +0 -1
- package/src/carbon-isotopes/column.module.sass +0 -136
- package/src/carbon-isotopes/column.ts +0 -133
- package/src/carbon-isotopes/core.ts +0 -81
- /package/src/{carbon-isotopes → facets/carbon-isotopes}/data-provider.ts +0 -0
|
@@ -35,7 +35,7 @@ export function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
const currentIndex = columns.findIndex(
|
|
38
|
-
(d) => d.properties.col_id == col_id
|
|
38
|
+
(d) => d.properties.col_id == col_id,
|
|
39
39
|
);
|
|
40
40
|
|
|
41
41
|
const neighbors = voronoi.tri.delaunay.neighbors[currentIndex];
|
|
@@ -43,7 +43,7 @@ export function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
43
43
|
neighbors,
|
|
44
44
|
voronoi.centroids,
|
|
45
45
|
currentIndex,
|
|
46
|
-
projection
|
|
46
|
+
projection,
|
|
47
47
|
);
|
|
48
48
|
}, [col_id, columns, voronoi, map]);
|
|
49
49
|
|
|
@@ -58,7 +58,7 @@ export function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
58
58
|
selectColumn(columns[nextColumnIx].id);
|
|
59
59
|
return false;
|
|
60
60
|
},
|
|
61
|
-
[keyMapping, selectColumn]
|
|
61
|
+
[keyMapping, selectColumn],
|
|
62
62
|
);
|
|
63
63
|
|
|
64
64
|
useEffect(() => {
|
|
@@ -80,7 +80,7 @@ export function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
80
80
|
features,
|
|
81
81
|
});
|
|
82
82
|
},
|
|
83
|
-
[voronoi, showTriangulation]
|
|
83
|
+
[voronoi, showTriangulation],
|
|
84
84
|
);
|
|
85
85
|
|
|
86
86
|
//if (neighbors == null) return null;
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
useContext,
|
|
7
7
|
ReactNode,
|
|
8
8
|
useEffect,
|
|
9
|
+
useMemo,
|
|
9
10
|
} from "react";
|
|
10
11
|
import h from "@macrostrat/hyper";
|
|
11
12
|
import {
|
|
@@ -27,18 +28,20 @@ export interface NavigationProviderProps {
|
|
|
27
28
|
selectedColumn?: number | null;
|
|
28
29
|
hoveredColumn?: number | null;
|
|
29
30
|
columns?: ColumnGeoJSONRecordWithID[] | null;
|
|
31
|
+
columnIDs?: number[] | null;
|
|
30
32
|
children: ReactNode;
|
|
31
33
|
onSelectColumn?: (col_id: number | null, column: any) => void;
|
|
32
34
|
onHoverColumn?: (col_id: number | null, column: any) => void;
|
|
33
35
|
}
|
|
34
36
|
|
|
35
37
|
const NavigationStoreContext = createContext<StoreApi<NavigationStore> | null>(
|
|
36
|
-
null
|
|
38
|
+
null,
|
|
37
39
|
);
|
|
38
40
|
|
|
39
41
|
export function ColumnNavigationProvider({
|
|
40
42
|
children,
|
|
41
43
|
columns,
|
|
44
|
+
columnIDs,
|
|
42
45
|
selectedColumn,
|
|
43
46
|
projectID,
|
|
44
47
|
inProcess,
|
|
@@ -76,17 +79,24 @@ export function ColumnNavigationProvider({
|
|
|
76
79
|
// store.setState({ columns: _columns, selectedColumn });
|
|
77
80
|
// }, [projectID, inProcess, columns, getColumns]);
|
|
78
81
|
|
|
79
|
-
|
|
82
|
+
let _columns = columns ?? useMacrostratColumns(projectID, inProcess);
|
|
83
|
+
|
|
84
|
+
// filter columns if specified
|
|
85
|
+
if (columnIDs?.length > 0) {
|
|
86
|
+
_columns = useMemo(() => {
|
|
87
|
+
return _columns?.filter((d) => columnIDs.includes(d.properties.col_id));
|
|
88
|
+
}, [columnIDs, _columns]);
|
|
89
|
+
}
|
|
90
|
+
|
|
80
91
|
useEffect(() => {
|
|
81
|
-
if (_columns
|
|
92
|
+
if (_columns?.length > 0) {
|
|
82
93
|
store.setState({ columns: _columns, selectedColumn });
|
|
83
94
|
}
|
|
84
95
|
}, [_columns]);
|
|
85
|
-
// Update selected
|
|
96
|
+
// Update selected column if it is changed externally
|
|
86
97
|
|
|
87
98
|
// Kind of an awkward way to do this but we need to allow the selector to run
|
|
88
99
|
useEffect(() => {
|
|
89
|
-
console.log("Selecting column", selectedColumn);
|
|
90
100
|
const { selectColumn, selectedColumn: _internalSelectedColumn } =
|
|
91
101
|
store.getState();
|
|
92
102
|
if (selectedColumn == _internalSelectedColumn) {
|
|
@@ -99,7 +109,7 @@ export function ColumnNavigationProvider({
|
|
|
99
109
|
}
|
|
100
110
|
|
|
101
111
|
export function useColumnNavigationStore(
|
|
102
|
-
selector: (state: NavigationStore) => any
|
|
112
|
+
selector: (state: NavigationStore) => any,
|
|
103
113
|
) {
|
|
104
114
|
const storeApi = useContext(NavigationStoreContext);
|
|
105
115
|
if (storeApi == null) {
|
|
@@ -48,7 +48,7 @@ const MapViewFrame = (props) => {
|
|
|
48
48
|
setExpanded(true);
|
|
49
49
|
},
|
|
50
50
|
},
|
|
51
|
-
[h(LandLayer), children]
|
|
51
|
+
[h(LandLayer), children],
|
|
52
52
|
),
|
|
53
53
|
h.if(expanded)(Button, {
|
|
54
54
|
className: "close-button",
|
|
@@ -60,7 +60,7 @@ const MapViewFrame = (props) => {
|
|
|
60
60
|
intent: "danger",
|
|
61
61
|
}),
|
|
62
62
|
]),
|
|
63
|
-
]
|
|
63
|
+
],
|
|
64
64
|
);
|
|
65
65
|
};
|
|
66
66
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import h from "@macrostrat/hyper";
|
|
2
2
|
|
|
3
|
-
import { Meta } from "@storybook/react";
|
|
3
|
+
import { Meta } from "@storybook/react-vite";
|
|
4
4
|
import { ColumnNavigationSVGMap, ColumnNavigationSVGMapProps } from ".";
|
|
5
5
|
import { MacrostratDataProvider } from "../../../data-provider";
|
|
6
6
|
import { useState } from "react";
|
|
@@ -12,7 +12,7 @@ interface ColumnIndexMapProps extends ColumnNavigationSVGMapProps {
|
|
|
12
12
|
function BasicColumnNavigationSVGMap(props: ColumnIndexMapProps) {
|
|
13
13
|
return h(
|
|
14
14
|
MacrostratDataProvider,
|
|
15
|
-
h(ColumnNavigationSVGMap, { style: { width: 500, height: 500 }, ...props })
|
|
15
|
+
h(ColumnNavigationSVGMap, { style: { width: 500, height: 500 }, ...props }),
|
|
16
16
|
);
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -41,7 +41,7 @@ export function ResizableMapFrame(props) {
|
|
|
41
41
|
...rest,
|
|
42
42
|
scale,
|
|
43
43
|
},
|
|
44
|
-
[h(LandLayer), children]
|
|
44
|
+
[h(LandLayer), children],
|
|
45
45
|
),
|
|
46
46
|
]);
|
|
47
47
|
}
|
|
@@ -70,8 +70,6 @@ export function ColumnNavigationSVGMap(props) {
|
|
|
70
70
|
_center = geoCentroid(currentColumn);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
console.log(currentColumn);
|
|
74
|
-
|
|
75
73
|
return h(
|
|
76
74
|
ResizableMapFrame,
|
|
77
75
|
{ center: _center, style, margin, scale, className },
|
|
@@ -91,7 +89,7 @@ export function ColumnNavigationSVGMap(props) {
|
|
|
91
89
|
...rest,
|
|
92
90
|
}),
|
|
93
91
|
h.if(currentColumn != null)(CurrentColumn, { feature: currentColumn }),
|
|
94
|
-
]
|
|
92
|
+
],
|
|
95
93
|
);
|
|
96
94
|
}
|
|
97
95
|
|
|
@@ -32,7 +32,7 @@ export function MeasurementsLayer(props) {
|
|
|
32
32
|
return h(FeatureLayer, {
|
|
33
33
|
useCanvas: false,
|
|
34
34
|
style,
|
|
35
|
-
features: res.features
|
|
35
|
+
features: res.features?.filter((d) => d.properties.unit_id != null) ?? [],
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -48,8 +48,6 @@ function ColumnFeatures(props) {
|
|
|
48
48
|
singleFeature = true,
|
|
49
49
|
} = props;
|
|
50
50
|
|
|
51
|
-
console.log(features);
|
|
52
|
-
|
|
53
51
|
const c = chroma(color);
|
|
54
52
|
|
|
55
53
|
return h(
|
|
@@ -62,13 +60,13 @@ function ColumnFeatures(props) {
|
|
|
62
60
|
stroke: c.alpha(0.4).css(),
|
|
63
61
|
},
|
|
64
62
|
},
|
|
65
|
-
features
|
|
63
|
+
features?.map((f) => {
|
|
66
64
|
return h(Feature, {
|
|
67
65
|
id: f.id ?? f.properties.col_id,
|
|
68
66
|
onClick,
|
|
69
67
|
feature: f,
|
|
70
68
|
});
|
|
71
|
-
})
|
|
69
|
+
}),
|
|
72
70
|
);
|
|
73
71
|
}
|
|
74
72
|
|
|
@@ -100,7 +98,7 @@ function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
100
98
|
const { projection } = useContext(MapContext);
|
|
101
99
|
const { centroids, tri } = useMemo(
|
|
102
100
|
() => buildTriangulation(features),
|
|
103
|
-
[features]
|
|
101
|
+
[features],
|
|
104
102
|
);
|
|
105
103
|
|
|
106
104
|
const currentIndex = useMemo(() => {
|
|
@@ -120,7 +118,7 @@ function ColumnKeyboardNavigation(props: KeyboardNavProps) {
|
|
|
120
118
|
// @ts-ignore
|
|
121
119
|
onChange(features[nextColumnIx]);
|
|
122
120
|
},
|
|
123
|
-
[keyMapping]
|
|
121
|
+
[keyMapping],
|
|
124
122
|
);
|
|
125
123
|
|
|
126
124
|
if (neighbors == null) return null;
|
package/src/notes.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import h from "@macrostrat/hyper";
|
|
2
|
+
|
|
3
|
+
import { ColumnNotesProvider } from "./units";
|
|
4
|
+
|
|
5
|
+
import { StaticNotesColumn, SVG } from "@macrostrat/column-components";
|
|
6
|
+
import { useCompositeScale, useMacrostratColumnData } from "./data-provider";
|
|
7
|
+
import type { ReactNode } from "react";
|
|
8
|
+
|
|
9
|
+
interface ColumnNotesProps {
|
|
10
|
+
notes: any[];
|
|
11
|
+
width?: number;
|
|
12
|
+
noteComponent?: any;
|
|
13
|
+
paddingLeft?: number;
|
|
14
|
+
deltaConnectorAttachment?: number;
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function ColumnNotes({
|
|
19
|
+
notes,
|
|
20
|
+
width = 200,
|
|
21
|
+
noteComponent,
|
|
22
|
+
paddingLeft = 60,
|
|
23
|
+
deltaConnectorAttachment,
|
|
24
|
+
children,
|
|
25
|
+
}: ColumnNotesProps) {
|
|
26
|
+
const { totalHeight } = useMacrostratColumnData();
|
|
27
|
+
const scale = useCompositeScale();
|
|
28
|
+
|
|
29
|
+
return h(
|
|
30
|
+
ColumnNotesProvider,
|
|
31
|
+
{
|
|
32
|
+
scale,
|
|
33
|
+
totalHeight,
|
|
34
|
+
pixelScale: -1,
|
|
35
|
+
},
|
|
36
|
+
[
|
|
37
|
+
h(SVG, { width, height: totalHeight, paddingH: 4 }, [
|
|
38
|
+
h(StaticNotesColumn, {
|
|
39
|
+
width,
|
|
40
|
+
notes,
|
|
41
|
+
noteComponent,
|
|
42
|
+
paddingLeft,
|
|
43
|
+
deltaConnectorAttachment,
|
|
44
|
+
}),
|
|
45
|
+
]),
|
|
46
|
+
children,
|
|
47
|
+
],
|
|
48
|
+
);
|
|
49
|
+
}
|
|
@@ -77,7 +77,7 @@ export interface CompositeColumnData<T extends UnitLong = ExtUnit>
|
|
|
77
77
|
|
|
78
78
|
export function buildCompositeScaleInfo(
|
|
79
79
|
inputScales: LinearScaleDef[],
|
|
80
|
-
unconformityHeight: number
|
|
80
|
+
unconformityHeight: number,
|
|
81
81
|
): CompositeScaleData {
|
|
82
82
|
/** Finalize the heights of sections, including the heights of unconformities
|
|
83
83
|
* between them.
|
|
@@ -112,7 +112,7 @@ export function buildCompositeScaleInfo(
|
|
|
112
112
|
|
|
113
113
|
export function finalizeSectionHeights<T extends UnitLong>(
|
|
114
114
|
sections: SectionInfoWithScale<T>[],
|
|
115
|
-
unconformityHeight: number
|
|
115
|
+
unconformityHeight: number,
|
|
116
116
|
): CompositeColumnData<T> {
|
|
117
117
|
/** Finalize the heights of sections, including the heights of unconformities
|
|
118
118
|
* between them.
|
|
@@ -121,7 +121,7 @@ export function finalizeSectionHeights<T extends UnitLong>(
|
|
|
121
121
|
const sectionScales = sections.map((d) => d.scaleInfo);
|
|
122
122
|
const { totalHeight, sections: packages } = buildCompositeScaleInfo(
|
|
123
123
|
sectionScales,
|
|
124
|
-
unconformityHeight
|
|
124
|
+
unconformityHeight,
|
|
125
125
|
);
|
|
126
126
|
|
|
127
127
|
// This could perhaps be simplified.
|
|
@@ -148,7 +148,7 @@ interface SectionInfoWithScale<T extends UnitLong = ExtUnit>
|
|
|
148
148
|
|
|
149
149
|
export function computeSectionHeights<T extends UnitLong>(
|
|
150
150
|
sections: SectionInfo<T>[],
|
|
151
|
-
opts: ColumnScaleOptions
|
|
151
|
+
opts: ColumnScaleOptions,
|
|
152
152
|
): SectionInfoWithScale<T>[] {
|
|
153
153
|
return sections.map((group) => {
|
|
154
154
|
return addScaleToSection<T>(group, opts);
|
|
@@ -157,7 +157,7 @@ export function computeSectionHeights<T extends UnitLong>(
|
|
|
157
157
|
|
|
158
158
|
function addScaleToSection<T extends UnitLong = ExtUnit>(
|
|
159
159
|
group: SectionInfo<T>,
|
|
160
|
-
opts: ColumnScaleOptions
|
|
160
|
+
opts: ColumnScaleOptions,
|
|
161
161
|
): SectionInfoWithScale<T> {
|
|
162
162
|
const { t_age, b_age, units } = group;
|
|
163
163
|
let _range = null;
|
|
@@ -179,7 +179,7 @@ function addScaleToSection<T extends UnitLong = ExtUnit>(
|
|
|
179
179
|
|
|
180
180
|
function buildSectionScale<T extends UnitLong>(
|
|
181
181
|
data: T[],
|
|
182
|
-
opts: SectionScaleOptions
|
|
182
|
+
opts: SectionScaleOptions,
|
|
183
183
|
): PackageScaleInfo {
|
|
184
184
|
const {
|
|
185
185
|
targetUnitHeight = 20,
|
|
@@ -216,7 +216,7 @@ function buildSectionScale<T extends UnitLong>(
|
|
|
216
216
|
|
|
217
217
|
export function createPackageScale(
|
|
218
218
|
def: LinearScaleDef,
|
|
219
|
-
offset: number = 0
|
|
219
|
+
offset: number = 0,
|
|
220
220
|
): PackageScaleInfo {
|
|
221
221
|
/** Build a section scale */
|
|
222
222
|
// Domain should be oriented from bottom to top, but scale is oriented from top to bottom
|
|
@@ -234,7 +234,7 @@ export function createPackageScale(
|
|
|
234
234
|
|
|
235
235
|
function findSectionHeightRange(
|
|
236
236
|
data: UnitLong[],
|
|
237
|
-
axisType: ColumnAxisType
|
|
237
|
+
axisType: ColumnAxisType,
|
|
238
238
|
): [number, number] {
|
|
239
239
|
if (axisType == null) {
|
|
240
240
|
throw new Error("Axis type is not set");
|
|
@@ -259,7 +259,7 @@ function findSectionHeightRange(
|
|
|
259
259
|
|
|
260
260
|
function findAverageUnitHeight(
|
|
261
261
|
data: UnitLong[],
|
|
262
|
-
axisType: ColumnAxisType
|
|
262
|
+
axisType: ColumnAxisType,
|
|
263
263
|
): number {
|
|
264
264
|
const unitHeights = data.map((d) => {
|
|
265
265
|
const [b_pos, t_pos] = getUnitHeightRange(d, axisType);
|
|
@@ -268,15 +268,22 @@ function findAverageUnitHeight(
|
|
|
268
268
|
return unitHeights.reduce((a, b) => a + b, 0) / unitHeights.length;
|
|
269
269
|
}
|
|
270
270
|
|
|
271
|
+
export interface CompositeColumnScale {
|
|
272
|
+
(age: number): number | null;
|
|
273
|
+
copy(): CompositeColumnScale;
|
|
274
|
+
domain(): [number, number];
|
|
275
|
+
invert(pixelHeight: number): number | null;
|
|
276
|
+
}
|
|
277
|
+
|
|
271
278
|
export function createCompositeScale(
|
|
272
279
|
sections: PackageLayoutData[],
|
|
273
|
-
interpolateUnconformities: boolean = false
|
|
274
|
-
):
|
|
280
|
+
interpolateUnconformities: boolean = false,
|
|
281
|
+
): CompositeColumnScale {
|
|
275
282
|
/** Create a scale that works across multiple packages */
|
|
276
283
|
// Get surfaces at which scale breaks
|
|
277
284
|
let scaleBreaks: [number, number][] = [];
|
|
278
285
|
for (const section of sections) {
|
|
279
|
-
const { pixelHeight,
|
|
286
|
+
const { pixelHeight, offset, domain } = section.scaleInfo;
|
|
280
287
|
|
|
281
288
|
scaleBreaks.push([domain[1], offset]);
|
|
282
289
|
scaleBreaks.push([domain[0], offset + pixelHeight]);
|
|
@@ -284,32 +291,73 @@ export function createCompositeScale(
|
|
|
284
291
|
// Sort the scale breaks by age
|
|
285
292
|
scaleBreaks.sort((a, b) => a[0] - b[0]);
|
|
286
293
|
|
|
287
|
-
|
|
288
|
-
/** Given an age, find the corresponding pixel position */
|
|
289
|
-
// Iterate through the sections to find the correct one
|
|
290
|
-
|
|
294
|
+
const scale = (age) => {
|
|
291
295
|
// Accumulate scale breaks and pixel height
|
|
292
|
-
let
|
|
293
|
-
let pixelScale = 0;
|
|
296
|
+
let lastHeight = 0;
|
|
294
297
|
let lastAge = null;
|
|
295
298
|
for (const [age1, height] of scaleBreaks) {
|
|
296
299
|
if (age <= age1) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
return
|
|
300
|
+
let deltaAge = age1 - lastAge;
|
|
301
|
+
if (deltaAge === 0) {
|
|
302
|
+
// If the age is exactly at a scale break, return the height at that break
|
|
303
|
+
return height;
|
|
300
304
|
}
|
|
301
|
-
|
|
302
|
-
|
|
305
|
+
let pixelScale = (height - lastHeight) / deltaAge;
|
|
306
|
+
return lastHeight + (age - lastAge) * pixelScale;
|
|
303
307
|
}
|
|
308
|
+
lastAge = age1;
|
|
309
|
+
lastHeight = height;
|
|
304
310
|
}
|
|
305
311
|
};
|
|
312
|
+
|
|
313
|
+
scale.copy = () => {
|
|
314
|
+
return createCompositeScale(sections, interpolateUnconformities);
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
scale.domain = () => {
|
|
318
|
+
/** Return the domain of the scale */
|
|
319
|
+
const firstSection = sections[0].scaleInfo.domain;
|
|
320
|
+
const lastSection = sections[sections.length - 1].scaleInfo.domain;
|
|
321
|
+
if (firstSection[0] < lastSection[0]) {
|
|
322
|
+
return [Math.min(...firstSection), Math.max(...lastSection)];
|
|
323
|
+
} else {
|
|
324
|
+
// Catches "normal" axes like height
|
|
325
|
+
return [Math.max(...firstSection), Math.min(...lastSection)];
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
scale.invert = (pixelHeight) => {
|
|
330
|
+
/** Invert the scale to get the age at a given pixel height */
|
|
331
|
+
// Iterate through the sections to find the correct one
|
|
332
|
+
let lastAge = null;
|
|
333
|
+
for (const section of sections) {
|
|
334
|
+
const {
|
|
335
|
+
pixelHeight: sectionHeight,
|
|
336
|
+
pixelScale,
|
|
337
|
+
offset,
|
|
338
|
+
domain,
|
|
339
|
+
} = section.scaleInfo;
|
|
340
|
+
if (
|
|
341
|
+
pixelHeight >= offset &&
|
|
342
|
+
pixelHeight <= offset + sectionHeight &&
|
|
343
|
+
pixelScale > 0
|
|
344
|
+
) {
|
|
345
|
+
const age = domain[1] + (pixelHeight - offset) / pixelScale;
|
|
346
|
+
return age;
|
|
347
|
+
}
|
|
348
|
+
lastAge = domain[1];
|
|
349
|
+
}
|
|
350
|
+
return null;
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
return scale as CompositeColumnScale;
|
|
306
354
|
}
|
|
307
355
|
|
|
308
356
|
/** Collapse sections separated by unconformities that are smaller than a given pixel height. */
|
|
309
357
|
export function collapseUnconformitiesByPixelHeight<T extends UnitLong>(
|
|
310
358
|
sections: SectionInfoWithScale<T>[],
|
|
311
359
|
threshold: number,
|
|
312
|
-
opts: ColumnScaleOptions
|
|
360
|
+
opts: ColumnScaleOptions,
|
|
313
361
|
): SectionInfoWithScale<T>[] {
|
|
314
362
|
const newSections = [];
|
|
315
363
|
let currentSection: SectionInfoWithScale<T> | null = null;
|
|
@@ -323,7 +371,7 @@ export function collapseUnconformitiesByPixelHeight<T extends UnitLong>(
|
|
|
323
371
|
dAge *
|
|
324
372
|
Math.max(
|
|
325
373
|
currentSection.scaleInfo.pixelScale,
|
|
326
|
-
nextSection.scaleInfo.pixelScale
|
|
374
|
+
nextSection.scaleInfo.pixelScale,
|
|
327
375
|
);
|
|
328
376
|
if (pxHeight < threshold) {
|
|
329
377
|
// We need to merge the sections
|
|
@@ -7,7 +7,9 @@ import {
|
|
|
7
7
|
createUnitSorter,
|
|
8
8
|
ensureArray,
|
|
9
9
|
ensureRealFloat,
|
|
10
|
+
PossiblyClippedUnit,
|
|
10
11
|
} from "./utils";
|
|
12
|
+
import { compareAgeRanges } from "@macrostrat/stratigraphy-utils";
|
|
11
13
|
|
|
12
14
|
const dt = 0.001;
|
|
13
15
|
|
|
@@ -38,14 +40,14 @@ export interface ExtUnit extends UnitLong {
|
|
|
38
40
|
|
|
39
41
|
export function preprocessUnits<T extends UnitLong = UnitLong>(
|
|
40
42
|
section: SectionInfo<T>,
|
|
41
|
-
axisType: ColumnAxisType = ColumnAxisType.AGE
|
|
43
|
+
axisType: ColumnAxisType = ColumnAxisType.AGE,
|
|
42
44
|
): ExtUnit[] {
|
|
43
45
|
/** Preprocess units to add overlapping units and columns. */
|
|
44
46
|
const units = section.units;
|
|
45
47
|
let divisions = units.map((...args) => extendDivision(...args, axisType));
|
|
46
48
|
for (let d of divisions) {
|
|
47
49
|
const overlappingUnits = divisions.filter((u) =>
|
|
48
|
-
d.overlappingUnits.includes(u.unit_id)
|
|
50
|
+
d.overlappingUnits.includes(u.unit_id),
|
|
49
51
|
);
|
|
50
52
|
|
|
51
53
|
// Overlapping columns
|
|
@@ -72,10 +74,12 @@ export function preprocessUnits<T extends UnitLong = UnitLong>(
|
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
76
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
// TODO: we may want to re-enable this simpler processing for sections,
|
|
78
|
+
// but we want it to be less universally applied.
|
|
79
|
+
// if (axisType != ColumnAxisType.AGE) {
|
|
80
|
+
// return preprocessSectionUnits(divisions, axisType);
|
|
81
|
+
// }
|
|
82
|
+
//
|
|
79
83
|
return divisions;
|
|
80
84
|
}
|
|
81
85
|
|
|
@@ -83,10 +87,10 @@ function extendDivision(
|
|
|
83
87
|
unit: UnitLong,
|
|
84
88
|
i: number,
|
|
85
89
|
divisions: UnitLong[],
|
|
86
|
-
axisType: ColumnAxisType = ColumnAxisType.AGE
|
|
90
|
+
axisType: ColumnAxisType = ColumnAxisType.AGE,
|
|
87
91
|
): ExtUnit {
|
|
88
92
|
const overlappingUnits = divisions.filter(
|
|
89
|
-
(d) => d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType)
|
|
93
|
+
(d) => d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType),
|
|
90
94
|
);
|
|
91
95
|
const u_pos = getUnitHeightRange(unit, axisType);
|
|
92
96
|
const bottomOverlap = overlappingUnits.some((d) => {
|
|
@@ -109,8 +113,15 @@ function extendDivision(
|
|
|
109
113
|
|
|
110
114
|
export function groupUnitsIntoSections<T extends UnitLong>(
|
|
111
115
|
units: T[],
|
|
112
|
-
axisType: ColumnAxisType = ColumnAxisType.AGE
|
|
116
|
+
axisType: ColumnAxisType = ColumnAxisType.AGE,
|
|
113
117
|
): SectionInfo<T>[] {
|
|
118
|
+
if (axisType != ColumnAxisType.AGE) {
|
|
119
|
+
return groupUnitsIntoSectionByOverlap(units, axisType);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Group units into sections by section_id.
|
|
123
|
+
* This works for large-scale Macrostrat columns, where units are grouped by section_id.
|
|
124
|
+
* */
|
|
114
125
|
let groups = Array.from(group(units, (d) => d.section_id));
|
|
115
126
|
const unitComparator = createUnitSorter(axisType);
|
|
116
127
|
|
|
@@ -124,12 +135,66 @@ export function groupUnitsIntoSections<T extends UnitLong>(
|
|
|
124
135
|
// Sections have no relative ordinal position other than age...
|
|
125
136
|
const compareSections = createUnitSorter(ColumnAxisType.AGE) as (
|
|
126
137
|
a: StratigraphicPackage,
|
|
127
|
-
b: StratigraphicPackage
|
|
138
|
+
b: StratigraphicPackage,
|
|
128
139
|
) => number;
|
|
129
140
|
groups1.sort(compareSections);
|
|
130
141
|
return groups1;
|
|
131
142
|
}
|
|
132
143
|
|
|
144
|
+
interface WorkingSection {
|
|
145
|
+
units: UnitLong[];
|
|
146
|
+
// Position or age
|
|
147
|
+
heightRange?: [number, number];
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
function groupUnitsIntoSectionByOverlap<T extends UnitLong>(
|
|
151
|
+
units: T[],
|
|
152
|
+
axisType: ColumnAxisType = ColumnAxisType.AGE,
|
|
153
|
+
): SectionInfo<T>[] {
|
|
154
|
+
/** Group units into sections by overlap.
|
|
155
|
+
* This creates "synthetic" sections that correspond to packages bound by scale gaps.
|
|
156
|
+
* This is most useful in the height and depth domains, where gaps (e.g., missing core) are
|
|
157
|
+
* common.
|
|
158
|
+
* */
|
|
159
|
+
// Start with each unit as its own "section", and progressively merge...
|
|
160
|
+
const sectionList: WorkingSection[] = [];
|
|
161
|
+
for (const unit of units) {
|
|
162
|
+
// Check if the unit overlaps with any existing section
|
|
163
|
+
const heightRange = getUnitHeightRange(unit, axisType);
|
|
164
|
+
let section: WorkingSection | undefined = sectionList.find((s) =>
|
|
165
|
+
compareAgeRanges(heightRange, s.heightRange),
|
|
166
|
+
);
|
|
167
|
+
if (section == null) {
|
|
168
|
+
// No overlap, create a new section
|
|
169
|
+
sectionList.push({
|
|
170
|
+
heightRange,
|
|
171
|
+
units: [unit],
|
|
172
|
+
});
|
|
173
|
+
} else {
|
|
174
|
+
// Overlap, merge the unit into the section
|
|
175
|
+
section.units.push(unit);
|
|
176
|
+
// Update the height range
|
|
177
|
+
section.heightRange = [
|
|
178
|
+
Math.max(section.heightRange[0], heightRange[0]),
|
|
179
|
+
Math.min(section.heightRange[1], heightRange[1]),
|
|
180
|
+
];
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// We should have a section for each unit, now we can convert to SectionInfo
|
|
184
|
+
// Ages have to be really actually ages, not heights
|
|
185
|
+
|
|
186
|
+
return sectionList.map((section, i) => {
|
|
187
|
+
const [b_age, t_age] = getSectionAgeRange(section.units);
|
|
188
|
+
return {
|
|
189
|
+
// Negative section IDs are used to indicate that these are synthetic sections
|
|
190
|
+
section_id: -i,
|
|
191
|
+
t_age: t_age,
|
|
192
|
+
b_age: b_age,
|
|
193
|
+
units: section.units as T[],
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
133
198
|
export function getSectionAgeRange(units: BaseUnit[]): [number, number] {
|
|
134
199
|
/** Get the overall age range of a set of units. */
|
|
135
200
|
const t_ages = units.map((d) => d.t_age);
|
|
@@ -140,7 +205,7 @@ export function getSectionAgeRange(units: BaseUnit[]): [number, number] {
|
|
|
140
205
|
}
|
|
141
206
|
|
|
142
207
|
export function mergeOverlappingSections<T extends UnitLong>(
|
|
143
|
-
sections: SectionInfo<T>[]
|
|
208
|
+
sections: SectionInfo<T>[],
|
|
144
209
|
): SectionInfo<T>[] {
|
|
145
210
|
/** Columns can have sections that overlap in time. Here, we merge overlapping
|
|
146
211
|
* sections into a single section to correctly render gap-bound packages.
|
|
@@ -172,7 +237,7 @@ export function mergeOverlappingSections<T extends UnitLong>(
|
|
|
172
237
|
|
|
173
238
|
function preprocessSectionUnits(
|
|
174
239
|
units: UnitLong[],
|
|
175
|
-
axisType: ColumnAxisType = ColumnAxisType.DEPTH
|
|
240
|
+
axisType: ColumnAxisType = ColumnAxisType.DEPTH,
|
|
176
241
|
): ExtUnit[] {
|
|
177
242
|
/** Preprocess units for a "section" column type, which is guaranteed to be simpler. */
|
|
178
243
|
// We have to assume the units are ordered...
|
|
@@ -189,7 +254,7 @@ function preprocessSectionUnit(
|
|
|
189
254
|
i: number,
|
|
190
255
|
units: UnitLong[],
|
|
191
256
|
accumulatedThickness: number = 0,
|
|
192
|
-
axisType: ColumnAxisType = ColumnAxisType.DEPTH
|
|
257
|
+
axisType: ColumnAxisType = ColumnAxisType.DEPTH,
|
|
193
258
|
): ExtUnit {
|
|
194
259
|
/** Preprocess a single unit for a "section" column type.
|
|
195
260
|
* No provision for overlapping units.
|