@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
package/src/units/composite.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { hyperStyled } from "@macrostrat/hyper";
|
|
2
2
|
import {
|
|
3
3
|
LithologyColumn,
|
|
4
|
-
ColumnAxisType,
|
|
5
4
|
SVG,
|
|
6
5
|
ColumnContext,
|
|
7
6
|
} from "@macrostrat/column-components";
|
|
@@ -18,6 +17,7 @@ import { BaseUnit } from "@macrostrat/api-types";
|
|
|
18
17
|
import { LabeledUnit, UnitBoxes } from "./boxes";
|
|
19
18
|
import styles from "./composite.module.sass";
|
|
20
19
|
import { useMacrostratColumnData } from "../data-provider";
|
|
20
|
+
import { useUnitSelectionDispatch } from "../units";
|
|
21
21
|
|
|
22
22
|
const h = hyperStyled(styles);
|
|
23
23
|
|
|
@@ -49,11 +49,11 @@ export function LabelTrackerProvider(props) {
|
|
|
49
49
|
units.filter((d) => {
|
|
50
50
|
const id = findUnitID(d);
|
|
51
51
|
return labelTrackerRef.current[id] == false;
|
|
52
|
-
})
|
|
52
|
+
}),
|
|
53
53
|
);
|
|
54
54
|
}
|
|
55
55
|
},
|
|
56
|
-
[labelTrackerRef, units, findUnitID]
|
|
56
|
+
[labelTrackerRef, units, findUnitID],
|
|
57
57
|
);
|
|
58
58
|
|
|
59
59
|
const value = trackLabelVisibility;
|
|
@@ -63,8 +63,8 @@ export function LabelTrackerProvider(props) {
|
|
|
63
63
|
h(
|
|
64
64
|
UnlabeledDivisionsContext.Provider,
|
|
65
65
|
{ value: unlabeledDivisions },
|
|
66
|
-
children
|
|
67
|
-
)
|
|
66
|
+
children,
|
|
67
|
+
),
|
|
68
68
|
);
|
|
69
69
|
}
|
|
70
70
|
|
|
@@ -141,7 +141,7 @@ export function CompositeUnitsColumn(props: CompositeUnitProps) {
|
|
|
141
141
|
export function AnnotatedUnitsColumn(props: ICompositeUnitProps) {
|
|
142
142
|
useEffect(() => {
|
|
143
143
|
console.warn(
|
|
144
|
-
"AnnotatedUnitsColumn is deprecated and currently renders a no-op for transition purposes"
|
|
144
|
+
"AnnotatedUnitsColumn is deprecated and currently renders a no-op for transition purposes",
|
|
145
145
|
);
|
|
146
146
|
}, []);
|
|
147
147
|
return null;
|
|
@@ -164,6 +164,8 @@ export function SectionLabelsColumn(props: ICompositeUnitProps) {
|
|
|
164
164
|
|
|
165
165
|
const _compositeScale = compositeScale(sections);
|
|
166
166
|
|
|
167
|
+
const selectUnit = useUnitSelectionDispatch();
|
|
168
|
+
|
|
167
169
|
return h("div.section-labels-column", [
|
|
168
170
|
h(
|
|
169
171
|
ColumnNotesProvider,
|
|
@@ -188,8 +190,11 @@ export function SectionLabelsColumn(props: ICompositeUnitProps) {
|
|
|
188
190
|
noteComponent,
|
|
189
191
|
shouldRenderNote,
|
|
190
192
|
scale: _compositeScale,
|
|
191
|
-
|
|
192
|
-
|
|
193
|
+
onClickNote(note) {
|
|
194
|
+
selectUnit(note.data, null, null);
|
|
195
|
+
},
|
|
196
|
+
}),
|
|
197
|
+
),
|
|
193
198
|
),
|
|
194
199
|
]);
|
|
195
200
|
}
|
|
@@ -206,7 +211,7 @@ export interface CompositeColumnScale {
|
|
|
206
211
|
|
|
207
212
|
export function compositeScale(
|
|
208
213
|
sections,
|
|
209
|
-
opts: CompositeScaleOpts = {}
|
|
214
|
+
opts: CompositeScaleOpts = {},
|
|
210
215
|
): CompositeColumnScale {
|
|
211
216
|
/** A basic composite scale that works across all sections. This isn't a fully featured,
|
|
212
217
|
* contiuous D3 scale, but it shares enough attributes to be useful for
|
|
@@ -245,7 +250,7 @@ export function compositeScale(
|
|
|
245
250
|
return baseScale as CompositeColumnScale;
|
|
246
251
|
}
|
|
247
252
|
|
|
248
|
-
function ColumnNotesProvider(props) {
|
|
253
|
+
export function ColumnNotesProvider(props) {
|
|
249
254
|
// A fake column axis provider that allows scales to cross
|
|
250
255
|
const { children, scale, totalHeight, pixelScale } = props;
|
|
251
256
|
|
|
@@ -264,7 +269,7 @@ function ColumnNotesProvider(props) {
|
|
|
264
269
|
zoom: 1,
|
|
265
270
|
},
|
|
266
271
|
},
|
|
267
|
-
children
|
|
272
|
+
children,
|
|
268
273
|
);
|
|
269
274
|
}
|
|
270
275
|
|
package/src/units/index.ts
CHANGED
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
} from "@macrostrat/column-components";
|
|
6
6
|
import { UnitNamesColumn } from "./names";
|
|
7
7
|
import { ICompositeUnitProps } from "./composite";
|
|
8
|
-
import { UnitBoxes } from "./boxes";
|
|
8
|
+
import { UnitBoxes, UnitProps } from "./boxes";
|
|
9
9
|
import { useColumnLayout } from "@macrostrat/column-components";
|
|
10
10
|
import { useInDarkMode } from "@macrostrat/ui-components";
|
|
11
11
|
import { getMixedUnitColor } from "./colors";
|
|
12
12
|
import { TrackedLabeledUnit } from "./composite";
|
|
13
|
-
import { useLithologies } from "../data-provider";
|
|
13
|
+
import { useEnvironments, useLithologies } from "../data-provider";
|
|
14
14
|
import { useMemo } from "react";
|
|
15
15
|
import { resolveID } from "./resolvers";
|
|
16
16
|
import { Lithology } from "@macrostrat/api-types";
|
|
@@ -46,33 +46,100 @@ export function SimpleUnitsColumn(props: ICompositeUnitProps) {
|
|
|
46
46
|
]);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
export function BasicUnitComponent({ division, ...rest }) {
|
|
50
|
+
/** A unit that allows directly setting colors and patterns. */
|
|
51
|
+
|
|
52
|
+
return h(UnitComponent, {
|
|
53
|
+
division,
|
|
54
|
+
...rest,
|
|
55
|
+
backgroundColor: division.color,
|
|
56
|
+
patternID: division.patternID,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
49
60
|
export function UnitComponent({ division, nColumns = 2, ...rest }) {
|
|
50
61
|
const width = rest.width ?? useColumnLayout()?.width;
|
|
51
62
|
|
|
52
63
|
const nOverlappingUnits = division.overlappingUnits?.length ?? 0;
|
|
53
|
-
const
|
|
64
|
+
const _nColumns = nOverlappingUnits == 0 ? 1 : nColumns;
|
|
65
|
+
const columnIx = (division.column ?? 0) % _nColumns;
|
|
66
|
+
const reducedWidth = width / _nColumns;
|
|
67
|
+
const x = (columnIx * width) / _nColumns;
|
|
54
68
|
|
|
55
69
|
return h(TrackedLabeledUnit, {
|
|
56
70
|
division,
|
|
57
71
|
...rest,
|
|
58
|
-
width:
|
|
59
|
-
x
|
|
72
|
+
width: reducedWidth,
|
|
73
|
+
x,
|
|
60
74
|
});
|
|
61
75
|
}
|
|
62
76
|
|
|
77
|
+
interface UnitColorOptions {
|
|
78
|
+
asBackground?: boolean;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function useUnitColor(unit, opts: UnitColorOptions = {}): string | null {
|
|
82
|
+
/** Get the color for a unit based on its lithology */
|
|
83
|
+
const lithMap = useLithologies();
|
|
84
|
+
const inDarkMode = useInDarkMode();
|
|
85
|
+
const { asBackground = true } = opts;
|
|
86
|
+
|
|
87
|
+
return useMemo(() => {
|
|
88
|
+
if (unit == null || lithMap == null) return null;
|
|
89
|
+
return getMixedUnitColor(unit, lithMap, inDarkMode, asBackground);
|
|
90
|
+
}, [unit?.unit_id, lithMap, inDarkMode, asBackground]);
|
|
91
|
+
}
|
|
92
|
+
|
|
63
93
|
export function ColoredUnitComponent(props) {
|
|
64
94
|
/** A unit component that is colored using a mixture of lithologies.
|
|
65
95
|
* This is a separate component because it depends on more providers/contexts to determine coloring. */
|
|
96
|
+
const backgroundColor = useUnitColor(props.division);
|
|
97
|
+
|
|
98
|
+
const patternID = useMemo(() => {
|
|
99
|
+
return resolveID(props.division); // ?? getPatternID(props.division.lith, lithMap);
|
|
100
|
+
}, [props.division?.unit_id]);
|
|
101
|
+
|
|
102
|
+
const fill = useGeologicPattern(patternID);
|
|
103
|
+
|
|
104
|
+
return h(UnitComponent, {
|
|
105
|
+
fill,
|
|
106
|
+
backgroundColor,
|
|
107
|
+
...props,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function useUnitColorByEnvironment(
|
|
112
|
+
unit,
|
|
113
|
+
opts: UnitColorOptions = {},
|
|
114
|
+
): string | null {
|
|
115
|
+
/** Get the color for a unit based on its lithology */
|
|
116
|
+
const environmentMap = useEnvironments();
|
|
66
117
|
const lithMap = useLithologies();
|
|
67
118
|
const inDarkMode = useInDarkMode();
|
|
119
|
+
const { asBackground = true } = opts;
|
|
120
|
+
|
|
121
|
+
return useMemo(() => {
|
|
122
|
+
if (unit == null || environmentMap == null) return null;
|
|
123
|
+
let c = getMixedUnitColor(unit, environmentMap, inDarkMode, asBackground, {
|
|
124
|
+
key: "environ",
|
|
125
|
+
id_key: "environ_id",
|
|
126
|
+
});
|
|
127
|
+
if (c != null) {
|
|
128
|
+
return c;
|
|
129
|
+
}
|
|
130
|
+
// Fallback to lithology color if no environment color is found
|
|
131
|
+
return getMixedUnitColor(unit, lithMap, inDarkMode, asBackground);
|
|
132
|
+
}, [unit?.unit_id, environmentMap, lithMap, inDarkMode, asBackground]);
|
|
133
|
+
}
|
|
68
134
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
135
|
+
export function EnvironmentColoredUnitComponent(props) {
|
|
136
|
+
/** A unit component that is colored using a mixture of lithologies.
|
|
137
|
+
* This is a separate component because it depends on more providers/contexts to determine coloring. */
|
|
138
|
+
const backgroundColor = useUnitColorByEnvironment(props.division);
|
|
72
139
|
|
|
73
140
|
const patternID = useMemo(() => {
|
|
74
141
|
return resolveID(props.division); // ?? getPatternID(props.division.lith, lithMap);
|
|
75
|
-
}, [props.division?.unit_id
|
|
142
|
+
}, [props.division?.unit_id]);
|
|
76
143
|
|
|
77
144
|
const fill = useGeologicPattern(patternID);
|
|
78
145
|
|
|
@@ -85,7 +152,7 @@ export function ColoredUnitComponent(props) {
|
|
|
85
152
|
|
|
86
153
|
function getPatternID(
|
|
87
154
|
liths: Array<Lithology>,
|
|
88
|
-
lithMap: Map<number, Lithology
|
|
155
|
+
lithMap: Map<number, Lithology>,
|
|
89
156
|
): string | null {
|
|
90
157
|
if (lithMap == null || liths == null || liths.length == 0) {
|
|
91
158
|
return null;
|
package/src/units/names.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import h from "@macrostrat/hyper";
|
|
2
|
-
import {
|
|
2
|
+
import { useCallback, useMemo } from "react";
|
|
3
3
|
import {
|
|
4
|
-
ColumnContext,
|
|
5
4
|
ColumnAxisType,
|
|
6
5
|
NotesColumn,
|
|
7
6
|
NotesColumnProps,
|
|
@@ -11,6 +10,7 @@ import { IUnit } from "./types";
|
|
|
11
10
|
import React from "react";
|
|
12
11
|
import { getUnitHeightRange } from "../prepare-units/utils";
|
|
13
12
|
import { CompositeColumnScale } from "./composite";
|
|
13
|
+
import { useCompositeScale, useMacrostratColumnData } from "../data-provider";
|
|
14
14
|
|
|
15
15
|
interface UnitDataProps extends NotesColumnProps {
|
|
16
16
|
left?: number;
|
|
@@ -31,7 +31,7 @@ type UnitNote = {
|
|
|
31
31
|
|
|
32
32
|
function noteForDivision(
|
|
33
33
|
div: IUnit,
|
|
34
|
-
opts: { axisType: ColumnAxisType }
|
|
34
|
+
opts: { axisType: ColumnAxisType },
|
|
35
35
|
): UnitNote {
|
|
36
36
|
const { axisType } = opts;
|
|
37
37
|
|
|
@@ -53,35 +53,34 @@ const defaultNameFunction = (div) => {
|
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
function UnitDataColumn_(props: UnitDataProps) {
|
|
56
|
-
const
|
|
56
|
+
const { axisType, units } = useMacrostratColumnData();
|
|
57
|
+
const scale = useCompositeScale();
|
|
57
58
|
const {
|
|
58
|
-
left,
|
|
59
|
+
left = 0,
|
|
59
60
|
noteComponent,
|
|
60
61
|
shouldRenderNote = (note: ColumnDivision | IUnit, i: number) => true,
|
|
61
62
|
minimumHeight = 0,
|
|
62
|
-
divisions =
|
|
63
|
+
divisions = units,
|
|
63
64
|
...rest
|
|
64
65
|
} = props;
|
|
65
66
|
|
|
66
|
-
const { scale } = ctx;
|
|
67
|
-
|
|
68
67
|
const minimumHeightFilter = useCallback(
|
|
69
68
|
(d) => {
|
|
70
69
|
if (minimumHeight == 0) return true;
|
|
71
70
|
const dy = Math.abs(scale(d.top_height) - scale(d.height));
|
|
72
71
|
return dy > minimumHeight;
|
|
73
72
|
},
|
|
74
|
-
[scale, minimumHeight]
|
|
73
|
+
[scale, minimumHeight],
|
|
75
74
|
);
|
|
76
75
|
|
|
77
76
|
if (divisions == null) return null;
|
|
78
77
|
const notes: UnitNote[] = divisions
|
|
79
78
|
.filter(shouldRenderNote)
|
|
80
|
-
.map((d: IUnit) => noteForDivision(d, { axisType
|
|
79
|
+
.map((d: IUnit) => noteForDivision(d, { axisType }))
|
|
81
80
|
.filter(minimumHeightFilter);
|
|
82
81
|
|
|
83
82
|
return h(NotesColumn, {
|
|
84
|
-
transform: `translate(${left
|
|
83
|
+
transform: `translate(${left})`,
|
|
85
84
|
editable: false,
|
|
86
85
|
noteComponent,
|
|
87
86
|
notes,
|
|
@@ -98,6 +97,7 @@ interface UnitNamesProps extends UnitDataProps {
|
|
|
98
97
|
nameForDivision?(obj: IUnit): string;
|
|
99
98
|
paddingLeft?: number;
|
|
100
99
|
width: number;
|
|
100
|
+
onClickNote?: (note: any) => void;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
export function UnitNamesColumn(props: UnitNamesProps) {
|
|
@@ -107,13 +107,16 @@ export function UnitNamesColumn(props: UnitNamesProps) {
|
|
|
107
107
|
...rest
|
|
108
108
|
} = props;
|
|
109
109
|
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
const defaultNoteComponent = useMemo(
|
|
111
|
+
() => (props) => {
|
|
112
|
+
const { note } = props;
|
|
113
|
+
return h("p.col-note-label", nameForDivision(note.data));
|
|
114
|
+
},
|
|
115
|
+
[nameForDivision],
|
|
116
|
+
);
|
|
114
117
|
|
|
115
118
|
return h(UnitDataColumn, {
|
|
116
|
-
noteComponent: noteComponent ??
|
|
119
|
+
noteComponent: noteComponent ?? defaultNoteComponent,
|
|
117
120
|
...rest,
|
|
118
121
|
});
|
|
119
122
|
}
|
package/src/units/resolvers.ts
CHANGED
|
@@ -55,6 +55,9 @@ const symbolIndex = {
|
|
|
55
55
|
};
|
|
56
56
|
|
|
57
57
|
const resolveID = (d: any) => {
|
|
58
|
+
if (d.lith == null || d.lith.length == 0) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
58
61
|
let liths = [...d.lith];
|
|
59
62
|
let environs = d.environ.map((d) => d.name).join(" ");
|
|
60
63
|
liths.sort((a, b) => b.prop - a.prop);
|
package/src/units/selection.ts
CHANGED
|
@@ -10,14 +10,19 @@ import {
|
|
|
10
10
|
RefObject,
|
|
11
11
|
useRef,
|
|
12
12
|
useCallback,
|
|
13
|
+
MouseEvent,
|
|
13
14
|
} from "react";
|
|
14
15
|
import { createStore, StoreApi, useStore } from "zustand";
|
|
15
16
|
import type { RectBounds, IUnit } from "./types";
|
|
17
|
+
import {
|
|
18
|
+
getUnitHeightRange,
|
|
19
|
+
useMacrostratColumnData,
|
|
20
|
+
} from "@macrostrat/column-views";
|
|
16
21
|
|
|
17
22
|
type UnitSelectDispatch = (
|
|
18
23
|
unit: BaseUnit | null,
|
|
19
24
|
target: HTMLElement | null,
|
|
20
|
-
event: Event | null
|
|
25
|
+
event: Event | null,
|
|
21
26
|
) => void;
|
|
22
27
|
|
|
23
28
|
const UnitSelectionContext = createContext<StoreApi<UnitSelectionStore>>(null);
|
|
@@ -31,13 +36,11 @@ export function useUnitSelectionDispatch(): UnitSelectDispatch {
|
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export function useUnitSelectionStore<T>(
|
|
34
|
-
selector: (state: UnitSelectionStore) => T
|
|
39
|
+
selector: (state: UnitSelectionStore) => T,
|
|
35
40
|
): T {
|
|
36
41
|
const store = useContext(UnitSelectionContext);
|
|
37
42
|
if (store == null) {
|
|
38
|
-
|
|
39
|
-
"useUnitSelectionStore must be used within a UnitSelectionProvider"
|
|
40
|
-
);
|
|
43
|
+
return null;
|
|
41
44
|
}
|
|
42
45
|
return useStore(store, selector);
|
|
43
46
|
}
|
|
@@ -54,11 +57,20 @@ interface UnitSelectionStore {
|
|
|
54
57
|
setSelectedUnit: (unit: number | null) => void;
|
|
55
58
|
}
|
|
56
59
|
|
|
60
|
+
export interface ColumnClickData {
|
|
61
|
+
unitID: number | null;
|
|
62
|
+
unit: BaseUnit | null;
|
|
63
|
+
target: HTMLElement | null;
|
|
64
|
+
height: number;
|
|
65
|
+
// Room for boundary IDs eventually
|
|
66
|
+
}
|
|
67
|
+
|
|
57
68
|
export function UnitSelectionProvider<T extends BaseUnit>(props: {
|
|
58
69
|
children: ReactNode;
|
|
59
70
|
columnRef?: RefObject<HTMLElement>;
|
|
60
71
|
units: T[];
|
|
61
72
|
selectedUnit: number | null;
|
|
73
|
+
onClickedColumn?: (columnClickData: ColumnClickData, event: Event) => void;
|
|
62
74
|
onUnitSelected?: (unitID: number | null, unit: T | null) => void;
|
|
63
75
|
}) {
|
|
64
76
|
const [store] = useState(() =>
|
|
@@ -80,10 +92,30 @@ export function UnitSelectionProvider<T extends BaseUnit>(props: {
|
|
|
80
92
|
});
|
|
81
93
|
}
|
|
82
94
|
},
|
|
83
|
-
onUnitSelected: (unit: T, target: HTMLElement, event:
|
|
95
|
+
onUnitSelected: (unit: T, target: HTMLElement, event: PointerEvent) => {
|
|
84
96
|
console.log("onUnitSelected", unit, target, event);
|
|
85
97
|
const el = props.columnRef?.current;
|
|
86
98
|
let overlayPosition = null;
|
|
99
|
+
|
|
100
|
+
/** This is not the natural place to get positions within the column,
|
|
101
|
+
* but it will work for now.
|
|
102
|
+
*/
|
|
103
|
+
if (props.onClickedColumn) {
|
|
104
|
+
// Infer height from top and bottom height of unit (because that's passed back with the call)
|
|
105
|
+
//const py = event.y;
|
|
106
|
+
//const [bottom, top] = getUnitHeightRange(unit, axisType);
|
|
107
|
+
//const height = Math.abs(bottom - top);
|
|
108
|
+
|
|
109
|
+
/** Ideally this would be defined at the column level */
|
|
110
|
+
const columnClickData: ColumnClickData = {
|
|
111
|
+
unitID: unit?.unit_id,
|
|
112
|
+
unit,
|
|
113
|
+
target,
|
|
114
|
+
height: el?.getBoundingClientRect().height || 0,
|
|
115
|
+
};
|
|
116
|
+
props.onClickedColumn(columnClickData, event);
|
|
117
|
+
}
|
|
118
|
+
|
|
87
119
|
if (unit != null && el != null && target != null) {
|
|
88
120
|
const rect = el.getBoundingClientRect();
|
|
89
121
|
const targetRect = target.getBoundingClientRect();
|
|
@@ -103,7 +135,7 @@ export function UnitSelectionProvider<T extends BaseUnit>(props: {
|
|
|
103
135
|
overlayPosition,
|
|
104
136
|
});
|
|
105
137
|
},
|
|
106
|
-
}))
|
|
138
|
+
})),
|
|
107
139
|
);
|
|
108
140
|
|
|
109
141
|
const { units, selectedUnit } = props;
|
|
@@ -122,7 +154,7 @@ export function UnitSelectionProvider<T extends BaseUnit>(props: {
|
|
|
122
154
|
}
|
|
123
155
|
|
|
124
156
|
export function useUnitSelectionTarget(
|
|
125
|
-
unit: IUnit
|
|
157
|
+
unit: IUnit,
|
|
126
158
|
): [React.RefObject<HTMLElement>, boolean, (evt: Event) => void] {
|
|
127
159
|
const ref = useRef<HTMLElement>();
|
|
128
160
|
const selectedUnit = useSelectedUnit();
|
|
@@ -131,14 +163,15 @@ export function useUnitSelectionTarget(
|
|
|
131
163
|
|
|
132
164
|
const onClick = useCallback(
|
|
133
165
|
(evt: Event) => {
|
|
166
|
+
if (onSelectUnit == null) return;
|
|
134
167
|
onSelectUnit(unit, ref.current, evt);
|
|
135
168
|
evt.stopPropagation();
|
|
136
169
|
},
|
|
137
|
-
[unit, onSelectUnit]
|
|
170
|
+
[unit, onSelectUnit],
|
|
138
171
|
);
|
|
139
172
|
|
|
140
173
|
useEffect(() => {
|
|
141
|
-
if (!selected) return;
|
|
174
|
+
if (!selected || onSelectUnit == null) return;
|
|
142
175
|
// In case we haven't set the position of the unit (if we don't have a target), set the selected unit
|
|
143
176
|
onSelectUnit(unit, ref.current, null);
|
|
144
177
|
|
|
@@ -175,7 +208,7 @@ export function UnitKeyboardNavigation<T extends BaseUnit>({
|
|
|
175
208
|
selectUnit(units[nextIx], null, null);
|
|
176
209
|
event.stopPropagation();
|
|
177
210
|
},
|
|
178
|
-
[units, ix]
|
|
211
|
+
[units, ix],
|
|
179
212
|
);
|
|
180
213
|
return null;
|
|
181
214
|
}
|
package/src/units/types.ts
CHANGED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import {line as $8epey$line} from "d3-shape";
|
|
2
|
-
import {createContext as $8epey$createContext, useContext as $8epey$useContext} from "react";
|
|
3
|
-
import $8epey$macrostrathyper from "@macrostrat/hyper";
|
|
4
|
-
import {ColumnLayoutContext as $8epey$ColumnLayoutContext} from "@macrostrat/column-components";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const $1dbd903fb3e2f029$var$inDomain = (scale, num)=>{
|
|
11
|
-
const domain = scale.domain();
|
|
12
|
-
return domain[0] < num < domain[1];
|
|
13
|
-
};
|
|
14
|
-
const $1dbd903fb3e2f029$var$createPointLocator = function(opts) {
|
|
15
|
-
const { xScale: xScale, scale: scale, getHeight: getHeight, ...rest } = opts;
|
|
16
|
-
return function(d, s = 0) {
|
|
17
|
-
const height = getHeight(d);
|
|
18
|
-
if (!$1dbd903fb3e2f029$var$inDomain(scale, height)) return null;
|
|
19
|
-
return [
|
|
20
|
-
xScale(d.value),
|
|
21
|
-
scale(height)
|
|
22
|
-
];
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
const $1dbd903fb3e2f029$var$IsotopesDataContext = (0, $8epey$createContext)(null);
|
|
26
|
-
const $1dbd903fb3e2f029$export$309ef8546e07d921 = function(props) {
|
|
27
|
-
const { xScale: xScale, scale: scale } = (0, $8epey$useContext)((0, $8epey$ColumnLayoutContext)) ?? {};
|
|
28
|
-
let { corrected: corrected, system: system, children: children, getHeight: getHeight, clipY: clipY } = props;
|
|
29
|
-
if (getHeight == null) getHeight = function(d) {
|
|
30
|
-
if (d.height == null) console.log(d);
|
|
31
|
-
return d.height;
|
|
32
|
-
};
|
|
33
|
-
// Handlers for creating points and lines
|
|
34
|
-
const pointLocator = $1dbd903fb3e2f029$var$createPointLocator({
|
|
35
|
-
xScale: xScale,
|
|
36
|
-
scale: scale,
|
|
37
|
-
corrected: corrected,
|
|
38
|
-
system: system,
|
|
39
|
-
getHeight: getHeight
|
|
40
|
-
});
|
|
41
|
-
let column = "avg_" + system;
|
|
42
|
-
if (corrected) column += "_corr";
|
|
43
|
-
const lineLocator = (0, $8epey$line)().x((d)=>xScale(d[column]))// @ts-ignore
|
|
44
|
-
.y((d)=>scale(d.height));
|
|
45
|
-
const value = {
|
|
46
|
-
pointLocator: pointLocator,
|
|
47
|
-
lineLocator: lineLocator,
|
|
48
|
-
corrected: corrected,
|
|
49
|
-
system: system,
|
|
50
|
-
clipY: clipY
|
|
51
|
-
};
|
|
52
|
-
return (0, $8epey$macrostrathyper)($1dbd903fb3e2f029$var$IsotopesDataContext.Provider, {
|
|
53
|
-
value: value
|
|
54
|
-
}, (0, $8epey$macrostrathyper)("g.data", children));
|
|
55
|
-
};
|
|
56
|
-
$1dbd903fb3e2f029$export$309ef8546e07d921.defaultProps = {
|
|
57
|
-
clipY: false
|
|
58
|
-
};
|
|
59
|
-
const $1dbd903fb3e2f029$export$4cb5d059db4e2bd = function(props) {
|
|
60
|
-
const { pointLocator: pointLocator } = (0, $8epey$useContext)($1dbd903fb3e2f029$var$IsotopesDataContext);
|
|
61
|
-
const { datum: datum, strokeWidth: strokeWidth, ...rest } = props;
|
|
62
|
-
const loc = pointLocator(datum);
|
|
63
|
-
if (loc == null) return null;
|
|
64
|
-
const [cx, cy] = loc;
|
|
65
|
-
return (0, $8epey$macrostrathyper)("circle", {
|
|
66
|
-
key: datum.sample_id,
|
|
67
|
-
cx: cx,
|
|
68
|
-
cy: cy,
|
|
69
|
-
r: 2,
|
|
70
|
-
...rest
|
|
71
|
-
});
|
|
72
|
-
};
|
|
73
|
-
const $1dbd903fb3e2f029$export$628a3ef6eb9c3a89 = function(props) {
|
|
74
|
-
const { values: lineValues, ...rest } = props;
|
|
75
|
-
const { lineLocator: lineLocator } = (0, $8epey$useContext)($1dbd903fb3e2f029$var$IsotopesDataContext);
|
|
76
|
-
return (0, $8epey$macrostrathyper)("path", {
|
|
77
|
-
d: lineLocator(lineValues),
|
|
78
|
-
fill: "transparent",
|
|
79
|
-
...rest
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
const $1dbd903fb3e2f029$export$919dbb10b6b5b75 = ()=>(0, $8epey$useContext)($1dbd903fb3e2f029$var$IsotopesDataContext);
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
export {$1dbd903fb3e2f029$export$309ef8546e07d921 as IsotopesDataArea, $1dbd903fb3e2f029$export$4cb5d059db4e2bd as IsotopeDataPoint, $1dbd903fb3e2f029$export$628a3ef6eb9c3a89 as IsotopeDataLine, $1dbd903fb3e2f029$export$919dbb10b6b5b75 as useDataLocator};
|
|
86
|
-
//# sourceMappingURL=column-views.062d164a.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;AAKA,MAAM,iCAAW,CAAC,OAAO;IACvB,MAAM,SAAS,MAAM,MAAM;IAC3B,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE;AACpC;AAEA,MAAM,2CAAqB,SAAU,IAAI;IACvC,MAAM,UAAE,MAAM,SAAE,KAAK,aAAE,SAAS,EAAE,GAAG,MAAM,GAAG;IAC9C,OAAO,SAAU,CAAC,EAAE,IAAI,CAAC;QACvB,MAAM,SAAS,UAAU;QACzB,IAAI,CAAC,+BAAS,OAAO,SAAS,OAAO;QACrC,OAAO;YAAC,OAAO,EAAE,KAAK;YAAG,MAAM;SAAQ;IACzC;AACF;AAEA,MAAM,4CAAsB,CAAA,GAAA,oBAAY,EAAE;AAW1C,MAAM,4CAAmB,SAAU,KAAoB;IACrD,MAAM,UAAE,MAAM,SAAE,KAAK,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE,CAAA,GAAA,0BAAkB,MAAM,CAAC;IAE9D,IAAI,aAAE,SAAS,UAAE,MAAM,YAAE,QAAQ,aAAE,SAAS,SAAE,KAAK,EAAE,GAAG;IACxD,IAAI,aAAa,MACf,YAAY,SAAU,CAAC;QACrB,IAAI,EAAE,MAAM,IAAI,MACd,QAAQ,GAAG,CAAC;QAEd,OAAO,EAAE,MAAM;IACjB;IAGF,yCAAyC;IACzC,MAAM,eAAe,yCAAmB;gBACtC;eACA;mBACA;gBACA;mBACA;IACF;IAEA,IAAI,SAAS,SAAS;IACtB,IAAI,WACF,UAAU;IAEZ,MAAM,cAAc,CAAA,GAAA,WAAG,IACpB,CAAC,CAAC,CAAC,IAAM,OAAO,CAAC,CAAC,OAAO,EAC1B,aAAa;KACZ,CAAC,CAAC,CAAC,IAAM,MAAM,EAAE,MAAM;IAE1B,MAAM,QAAQ;sBAAE;qBAAc;mBAAa;gBAAW;eAAQ;IAAM;IACpE,OAAO,CAAA,GAAA,sBAAA,EAAE,0CAAoB,QAAQ,EAAE;eAAE;IAAM,GAAG,CAAA,GAAA,sBAAA,EAAE,UAAU;AAChE;AAEA,0CAAiB,YAAY,GAAG;IAAE,OAAO;AAAM;AAE/C,MAAM,2CAAmB,SAAU,KAAK;IACtC,MAAM,gBAAE,YAAY,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACpC,MAAM,SAAE,KAAK,eAAE,WAAW,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,MAAM,aAAa;IACzB,IAAI,OAAO,MAAM,OAAO;IACxB,MAAM,CAAC,IAAI,GAAG,GAAG;IAEjB,OAAO,CAAA,GAAA,sBAAA,EAAE,UAAU;QACjB,KAAK,MAAM,SAAS;YACpB;YACA;QACA,GAAG;QACH,GAAG,IAAI;IACT;AACF;AAEA,MAAM,4CAAkB,SAAU,KAAK;IACrC,MAAM,EAAE,QAAQ,UAAU,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,eAAE,WAAW,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACnC,OAAO,CAAA,GAAA,sBAAA,EAAE,QAAQ;QACf,GAAG,YAAY;QACf,MAAM;QACN,GAAG,IAAI;IACT;AACF;AAEA,MAAM,2CAAiB,IAAM,CAAA,GAAA,iBAAS,EAAE","sources":["packages/column-views/src/carbon-isotopes/data-area.ts"],"sourcesContent":["import { line } from \"d3-shape\";\nimport { createContext, useContext } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { ColumnLayoutContext } from \"@macrostrat/column-components\";\n\nconst inDomain = (scale, num) => {\n const domain = scale.domain();\n return domain[0] < num < domain[1];\n};\n\nconst createPointLocator = function (opts) {\n const { xScale, scale, getHeight, ...rest } = opts;\n return function (d, s = 0) {\n const height = getHeight(d);\n if (!inDomain(scale, height)) return null;\n return [xScale(d.value), scale(height)];\n };\n};\n\nconst IsotopesDataContext = createContext(null);\n\nexport interface DataAreaProps {\n clipY: boolean;\n parameter: string;\n corrected: boolean;\n system: string;\n children: React.ReactNode;\n getHeight?: Function;\n}\n\nconst IsotopesDataArea = function (props: DataAreaProps) {\n const { xScale, scale } = useContext(ColumnLayoutContext) ?? {};\n\n let { corrected, system, children, getHeight, clipY } = props;\n if (getHeight == null) {\n getHeight = function (d) {\n if (d.height == null) {\n console.log(d);\n }\n return d.height;\n };\n }\n\n // Handlers for creating points and lines\n const pointLocator = createPointLocator({\n xScale,\n scale,\n corrected,\n system,\n getHeight,\n });\n\n let column = \"avg_\" + system;\n if (corrected) {\n column += \"_corr\";\n }\n const lineLocator = line()\n .x((d) => xScale(d[column]))\n // @ts-ignore\n .y((d) => scale(d.height));\n\n const value = { pointLocator, lineLocator, corrected, system, clipY };\n return h(IsotopesDataContext.Provider, { value }, h(\"g.data\", children));\n};\n\nIsotopesDataArea.defaultProps = { clipY: false };\n\nconst IsotopeDataPoint = function (props) {\n const { pointLocator } = useContext(IsotopesDataContext);\n const { datum, strokeWidth, ...rest } = props;\n const loc = pointLocator(datum);\n if (loc == null) return null;\n const [cx, cy] = loc;\n\n return h(\"circle\", {\n key: datum.sample_id,\n cx,\n cy,\n r: 2,\n ...rest,\n });\n};\n\nconst IsotopeDataLine = function (props) {\n const { values: lineValues, ...rest } = props;\n const { lineLocator } = useContext(IsotopesDataContext);\n return h(\"path\", {\n d: lineLocator(lineValues),\n fill: \"transparent\",\n ...rest,\n });\n};\n\nconst useDataLocator = () => useContext(IsotopesDataContext);\n\nexport { IsotopesDataArea, IsotopeDataPoint, IsotopeDataLine, useDataLocator };\n"],"names":[],"version":3,"file":"column-views.062d164a.js.map"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import $hiXDY$macrostrathyper from "@macrostrat/hyper";
|
|
2
|
-
import {createContext as $hiXDY$createContext, useContext as $hiXDY$useContext} from "react";
|
|
3
|
-
import {useAPIResult as $hiXDY$useAPIResult} from "@macrostrat/ui-components";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const $8adf39b8c41fe3cc$export$c644ef985ce7a4c4 = (0, $hiXDY$createContext)(null);
|
|
9
|
-
function $8adf39b8c41fe3cc$export$5f01d5b342a89841(props) {
|
|
10
|
-
const { children: children, ...params } = props;
|
|
11
|
-
const res = (0, $hiXDY$useAPIResult)("/measurements", {
|
|
12
|
-
...params,
|
|
13
|
-
show_values: true,
|
|
14
|
-
response: "long"
|
|
15
|
-
});
|
|
16
|
-
return (0, $hiXDY$macrostrathyper)($8adf39b8c41fe3cc$export$c644ef985ce7a4c4.Provider, {
|
|
17
|
-
value: res,
|
|
18
|
-
children: children
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
const $8adf39b8c41fe3cc$export$8a0335fd9ff72150 = ()=>(0, $hiXDY$useContext)($8adf39b8c41fe3cc$export$c644ef985ce7a4c4);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
export {$8adf39b8c41fe3cc$export$c644ef985ce7a4c4 as MeasurementDataContext, $8adf39b8c41fe3cc$export$5f01d5b342a89841 as MeasurementDataProvider, $8adf39b8c41fe3cc$export$8a0335fd9ff72150 as useMeasurementData};
|
|
25
|
-
//# sourceMappingURL=column-views.07521ce6.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;AAIA,MAAM,4CAAyB,CAAA,GAAA,oBAAY,EAAE;AAEtC,SAAS,0CAAwB,KAAK;IAC3C,MAAM,YAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG;IAChC,MAAM,MAAM,CAAA,GAAA,mBAAW,EAAE,iBAAiB;QACxC,GAAG,MAAM;QACT,aAAa;QACb,UAAU;IACZ;IACA,OAAO,CAAA,GAAA,sBAAA,EAAE,0CAAuB,QAAQ,EAAE;QAAE,OAAO;kBAAK;IAAS;AACnE;AAEA,MAAM,4CAAqB,IAAM,CAAA,GAAA,iBAAS,EAAE","sources":["packages/column-views/src/carbon-isotopes/data-provider.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { useContext, createContext } from \"react\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\n\nconst MeasurementDataContext = createContext(null);\n\nexport function MeasurementDataProvider(props) {\n const { children, ...params } = props;\n const res = useAPIResult(\"/measurements\", {\n ...params,\n show_values: true,\n response: \"long\",\n });\n return h(MeasurementDataContext.Provider, { value: res, children });\n}\n\nconst useMeasurementData = () => useContext(MeasurementDataContext);\n\nexport { useMeasurementData, MeasurementDataContext };\n"],"names":[],"version":3,"file":"column-views.07521ce6.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/prepare-units/helpers.ts"],"sourcesContent":["import type { BaseUnit, UnitLong } from \"@macrostrat/api-types\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n unitsOverlap,\n getUnitHeightRange,\n createUnitSorter,\n ensureArray,\n ensureRealFloat,\n} from \"./utils\";\n\nconst dt = 0.001;\n\nexport interface StratigraphicPackage {\n /** A collection of stratigraphic information organized in time, corresponding\n * to single or multiple columns. */\n t_age: number;\n b_age: number;\n}\n\nexport interface SectionInfo<T extends UnitLong = ExtUnit>\n extends StratigraphicPackage {\n /** A time-bounded part of a single stratigraphic column. */\n section_id: number | number[];\n units: T[];\n}\n\nexport interface ExtUnit extends UnitLong {\n bottomOverlap: boolean;\n overlappingUnits: number[];\n column?: number;\n /* Positions (ages or heights) where the unit is clipped to its containing section.\n * This is relevant if we are filtering by age/height/depth range.\n */\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function preprocessUnits<T extends UnitLong = UnitLong>(\n section: SectionInfo<T>,\n axisType: ColumnAxisType = ColumnAxisType.AGE\n): ExtUnit[] {\n /** Preprocess units to add overlapping units and columns. */\n const units = section.units;\n let divisions = units.map((...args) => extendDivision(...args, axisType));\n for (let d of divisions) {\n const overlappingUnits = divisions.filter((u) =>\n d.overlappingUnits.includes(u.unit_id)\n );\n\n // Overlapping columns\n const columns = overlappingUnits.map((d) => d.column);\n\n if (columns.includes(d.column)) {\n let col = 0;\n // Go through columns to find a better index\n while (columns.includes(col)) {\n col++;\n }\n d.column = col;\n }\n\n // If unit overlaps the edges of a section, set the clip positions\n if (axisType == ColumnAxisType.AGE) {\n const [b_pos, t_pos] = getUnitHeightRange(d, axisType);\n if (b_pos > section.b_age) {\n d.b_clip_pos = section.b_age;\n }\n if (t_pos < section.t_age) {\n d.t_clip_pos = section.t_age;\n }\n }\n }\n\n if (axisType != ColumnAxisType.AGE) {\n return preprocessSectionUnits(divisions, axisType);\n }\n\n return divisions;\n}\n\nfunction extendDivision(\n unit: UnitLong,\n i: number,\n divisions: UnitLong[],\n axisType: ColumnAxisType = ColumnAxisType.AGE\n): ExtUnit {\n const overlappingUnits = divisions.filter(\n (d) => d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType)\n );\n const u_pos = getUnitHeightRange(unit, axisType);\n const bottomOverlap = overlappingUnits.some((d) => {\n const d_pos = getUnitHeightRange(d, axisType);\n // Check if the unit is below the current unit\n return d_pos[0] < u_pos[0] + dt;\n });\n let column = 0;\n if (overlappingUnits.length == 1) {\n column = 1;\n }\n\n return {\n ...unit,\n bottomOverlap,\n column,\n overlappingUnits: overlappingUnits.map((d) => d.unit_id),\n };\n}\n\nexport function groupUnitsIntoSections<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE\n): SectionInfo<T>[] {\n let groups = Array.from(group(units, (d) => d.section_id));\n const unitComparator = createUnitSorter(axisType);\n\n const groups1 = groups.map(([section_id, sectionUnits]) => {\n const [b_age, t_age] = getSectionAgeRange(sectionUnits);\n // sort units by position\n sectionUnits.sort(unitComparator);\n return { section_id, t_age, b_age, units: sectionUnits };\n });\n // Sort sections by increasing top age, then increasing bottom age.\n // Sections have no relative ordinal position other than age...\n const compareSections = createUnitSorter(ColumnAxisType.AGE) as (\n a: StratigraphicPackage,\n b: StratigraphicPackage\n ) => number;\n groups1.sort(compareSections);\n return groups1;\n}\n\nexport function getSectionAgeRange(units: BaseUnit[]): [number, number] {\n /** Get the overall age range of a set of units. */\n const t_ages = units.map((d) => d.t_age);\n const b_ages = units.map((d) => d.b_age);\n const t_age = Math.min(...t_ages);\n const b_age = Math.max(...b_ages);\n return [b_age, t_age];\n}\n\nexport function mergeOverlappingSections<T extends UnitLong>(\n sections: SectionInfo<T>[]\n): SectionInfo<T>[] {\n /** Columns can have sections that overlap in time. Here, we merge overlapping\n * sections into a single section to correctly render gap-bound packages.\n */\n const [firstSection, ...rest] = sections;\n const newSections = [firstSection];\n for (const section of rest) {\n const lastSection = newSections[newSections.length - 1];\n if (\n lastSection.b_age < section.t_age ||\n lastSection.t_age > section.b_age\n ) {\n // No overlap, add the section as normal\n newSections.push(section);\n continue;\n }\n\n // Overlap, merge the sections\n lastSection.section_id = [\n ...ensureArray(lastSection.section_id),\n ...ensureArray(section.section_id),\n ];\n lastSection.units.push(...section.units);\n lastSection.b_age = Math.max(lastSection.b_age, section.b_age);\n lastSection.t_age = Math.min(lastSection.t_age, section.t_age);\n }\n return newSections;\n}\n\nfunction preprocessSectionUnits(\n units: UnitLong[],\n axisType: ColumnAxisType = ColumnAxisType.DEPTH\n): ExtUnit[] {\n /** Preprocess units for a \"section\" column type, which is guaranteed to be simpler. */\n // We have to assume the units are ordered...\n let thickness = 0;\n return units.map((unit, i) => {\n let u1 = preprocessSectionUnit(unit, i, units, thickness, axisType);\n thickness += Math.abs(u1.t_pos - u1.b_pos);\n return u1;\n });\n}\n\nfunction preprocessSectionUnit(\n unit: UnitLong,\n i: number,\n units: UnitLong[],\n accumulatedThickness: number = 0,\n axisType: ColumnAxisType = ColumnAxisType.DEPTH\n): ExtUnit {\n /** Preprocess a single unit for a \"section\" column type.\n * No provision for overlapping units.\n * */\n\n let b_pos = unit.b_pos;\n let t_pos = unit.t_pos;\n\n if (b_pos == t_pos && axisType == ColumnAxisType.ORDINAL) {\n t_pos = t_pos - 1;\n }\n\n let unit_name = unit.unit_name;\n\n // eODP columns sometimes have overlapping core sections, which are encoded in the name field\n // Match eODP section names\n const match = unit.unit_name.match(/^(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?): (.+)/);\n\n if (match) {\n // These values should already be set if we've used the show_positions flag\n t_pos ??= ensureRealFloat(match[1]);\n b_pos ??= ensureRealFloat(match[3]);\n unit_name = match[5];\n }\n\n return {\n ...unit,\n b_pos: ensureRealFloat(b_pos),\n t_pos: ensureRealFloat(t_pos),\n unit_name,\n bottomOverlap: false,\n overlappingUnits: [],\n };\n}\n"],"names":[],"version":3,"file":"column-views.1c589cc4.js.map"}
|