@macrostrat/column-views 2.2.1 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/dist/esm/{column-views.c2fbcba8.js → column-views.04636815.js} +4 -4
- package/dist/esm/{column-views.c2fbcba8.js.map → column-views.04636815.js.map} +1 -1
- package/dist/esm/{column-views.54f8b909.js → column-views.052498a6.js} +37 -4
- package/dist/esm/column-views.052498a6.js.map +1 -0
- package/dist/esm/{column-views.60365cdb.js → column-views.0da4503a.js} +2 -2
- package/dist/esm/{column-views.60365cdb.js.map → column-views.0da4503a.js.map} +1 -1
- package/dist/esm/{column-views.53722d0a.js → column-views.107b47b4.js} +9 -9
- package/dist/esm/{column-views.53722d0a.js.map → column-views.107b47b4.js.map} +1 -1
- package/dist/esm/column-views.17a70358.js +16 -0
- package/dist/esm/column-views.17a70358.js.map +1 -0
- package/dist/esm/{column-views.073c42da.js → column-views.1b5bf0c6.js} +3 -3
- package/dist/esm/{column-views.073c42da.js.map → column-views.1b5bf0c6.js.map} +1 -1
- package/dist/esm/{column-views.29a551f6.js → column-views.2708e176.js} +22 -16
- package/dist/esm/column-views.2708e176.js.map +1 -0
- package/dist/esm/{column-views.88d63dd0.js → column-views.275ba52b.js} +3 -3
- package/dist/esm/{column-views.88d63dd0.js.map → column-views.275ba52b.js.map} +1 -1
- package/dist/esm/{column-views.d86555b0.js → column-views.2bac03a2.js} +2 -2
- package/dist/esm/{column-views.d86555b0.js.map → column-views.2bac03a2.js.map} +1 -1
- package/dist/esm/column-views.322790f3.js +138 -0
- package/dist/esm/column-views.322790f3.js.map +1 -0
- package/dist/esm/{column-views.6698b95a.js → column-views.343fc926.js} +9 -18
- package/dist/esm/column-views.343fc926.js.map +1 -0
- package/dist/esm/column-views.3c9cba65.js +13 -0
- package/dist/esm/{column-views.418f948f.js.map → column-views.3c9cba65.js.map} +1 -1
- package/dist/esm/{column-views.c3495702.js → column-views.3d3e00be.js} +2 -2
- package/dist/esm/{column-views.c3495702.js.map → column-views.3d3e00be.js.map} +1 -1
- package/dist/esm/{column-views.e1bc3cfa.js → column-views.40094dd9.js} +3 -3
- package/dist/esm/{column-views.e1bc3cfa.js.map → column-views.40094dd9.js.map} +1 -1
- package/dist/esm/{column-views.787d7696.js → column-views.44373a90.js} +8 -7
- package/dist/esm/column-views.44373a90.js.map +1 -0
- package/dist/esm/{column-views.8b623b27.js → column-views.488f24b6.js} +2 -2
- package/dist/esm/{column-views.8b623b27.js.map → column-views.488f24b6.js.map} +1 -1
- package/dist/esm/{column-views.4ed90896.js → column-views.4b259f9e.js} +42 -11
- package/dist/esm/column-views.4b259f9e.js.map +1 -0
- package/dist/esm/{column-views.1151416d.css → column-views.54c1f382.css} +6 -5
- package/dist/esm/column-views.54c1f382.css.map +1 -0
- package/dist/esm/{column-views.382c486d.js → column-views.565b193a.js} +3 -3
- package/dist/esm/{column-views.382c486d.js.map → column-views.565b193a.js.map} +1 -1
- package/dist/esm/{column-views.df34441c.js → column-views.5ca2b219.js} +5 -5
- package/dist/esm/{column-views.df34441c.js.map → column-views.5ca2b219.js.map} +1 -1
- package/dist/esm/{column-views.8284c3a9.js → column-views.5eb4e6ff.js} +5 -5
- package/dist/esm/{column-views.8284c3a9.js.map → column-views.5eb4e6ff.js.map} +1 -1
- package/dist/esm/{column-views.2e854496.js → column-views.5fff0716.js} +3 -3
- package/dist/esm/{column-views.2e854496.js.map → column-views.5fff0716.js.map} +1 -1
- package/dist/esm/{column-views.05586d1f.js → column-views.60e97132.js} +2 -4
- package/dist/esm/column-views.60e97132.js.map +1 -0
- package/dist/esm/{column-views.7683bb52.js → column-views.63d40878.js} +5 -5
- package/dist/esm/{column-views.7683bb52.js.map → column-views.63d40878.js.map} +1 -1
- package/dist/esm/{column-views.abeab9aa.js → column-views.6c9e5069.js} +40 -62
- package/dist/esm/column-views.6c9e5069.js.map +1 -0
- package/dist/esm/column-views.6df65dab.js +9 -0
- package/dist/esm/column-views.6df65dab.js.map +1 -0
- package/dist/esm/column-views.7fa0d026.js +62 -0
- package/dist/esm/column-views.7fa0d026.js.map +1 -0
- package/dist/esm/{column-views.3a7179c4.js → column-views.82eb5026.js} +12 -7
- package/dist/esm/column-views.82eb5026.js.map +1 -0
- package/dist/esm/{column-views.adec2e4c.js → column-views.92575b87.js} +3 -3
- package/dist/esm/column-views.92575b87.js.map +1 -0
- package/dist/esm/{column-views.41e5f0dc.js → column-views.9d51a5ab.js} +3 -3
- package/dist/esm/{column-views.41e5f0dc.js.map → column-views.9d51a5ab.js.map} +1 -1
- package/dist/esm/{column-views.0ce9b697.js → column-views.9ffc089b.js} +3 -3
- package/dist/esm/{column-views.0ce9b697.js.map → column-views.9ffc089b.js.map} +1 -1
- package/dist/esm/{column-views.70164236.js → column-views.aa9ede4d.js} +2 -2
- package/dist/esm/{column-views.70164236.js.map → column-views.aa9ede4d.js.map} +1 -1
- package/dist/esm/{column-views.413217dc.js → column-views.ad2fe46c.js} +2 -2
- package/dist/esm/{column-views.413217dc.js.map → column-views.ad2fe46c.js.map} +1 -1
- package/dist/esm/{column-views.0265cf7f.js → column-views.afe0bb48.js} +15 -10
- package/dist/esm/column-views.afe0bb48.js.map +1 -0
- package/dist/esm/{column-views.aecf25bc.js → column-views.b4e1236d.js} +2 -2
- package/dist/esm/{column-views.aecf25bc.js.map → column-views.b4e1236d.js.map} +1 -1
- package/dist/esm/{column-views.469a4952.js → column-views.c149f7a5.js} +3 -3
- package/dist/esm/{column-views.469a4952.js.map → column-views.c149f7a5.js.map} +1 -1
- package/dist/esm/column-views.c3c7901a.js +149 -0
- package/dist/esm/column-views.c3c7901a.js.map +1 -0
- package/dist/esm/{column-views.a3fabf0f.js → column-views.c44febd0.js} +9 -6
- package/dist/esm/column-views.c44febd0.js.map +1 -0
- package/dist/esm/{column-views.b7016f82.css → column-views.cb6fc808.css} +10 -10
- package/dist/esm/column-views.cb6fc808.css.map +1 -0
- package/dist/esm/column-views.cc733361.js.map +1 -1
- package/dist/esm/{column-views.f0b0fc56.js → column-views.ce3a3ac8.js} +2 -2
- package/dist/esm/{column-views.f0b0fc56.js.map → column-views.ce3a3ac8.js.map} +1 -1
- package/dist/esm/{column-views.b08d82e6.js → column-views.d1b49f5c.js} +2 -2
- package/dist/esm/{column-views.b08d82e6.js.map → column-views.d1b49f5c.js.map} +1 -1
- package/dist/esm/{column-views.2aef5df8.js → column-views.d524075b.js} +4 -4
- package/dist/esm/{column-views.2aef5df8.js.map → column-views.d524075b.js.map} +1 -1
- package/dist/esm/column-views.d5e788e8.js +31 -0
- package/dist/esm/column-views.d5e788e8.js.map +1 -0
- package/dist/esm/{column-views.bbc77227.js → column-views.d6c0b7bc.js} +2 -2
- package/dist/esm/{column-views.bbc77227.js.map → column-views.d6c0b7bc.js.map} +1 -1
- package/dist/esm/{column-views.b29f8718.js → column-views.dc195174.js} +2 -2
- package/dist/esm/{column-views.b29f8718.js.map → column-views.dc195174.js.map} +1 -1
- package/dist/esm/column-views.de433f18.js +139 -0
- package/dist/esm/column-views.de433f18.js.map +1 -0
- package/dist/esm/{column-views.2eceafb5.js → column-views.e075af15.js} +2 -2
- package/dist/esm/{column-views.2eceafb5.js.map → column-views.e075af15.js.map} +1 -1
- package/dist/esm/{column-views.e33ac5c9.css → column-views.e93478c3.css} +7 -2
- package/dist/esm/column-views.e93478c3.css.map +1 -0
- package/dist/esm/{column-views.cae1a6a1.js → column-views.f7cdf6be.js} +3 -3
- package/dist/esm/{column-views.cae1a6a1.js.map → column-views.f7cdf6be.js.map} +1 -1
- package/dist/esm/{column-views.81bddbee.js → column-views.faa7e52e.js} +4 -4
- package/dist/esm/{column-views.81bddbee.js.map → column-views.faa7e52e.js.map} +1 -1
- package/dist/esm/index.d.ts +43 -20
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -12
- package/dist/node/column-views.012fa10c.js +2 -0
- package/dist/node/column-views.012fa10c.js.map +1 -0
- package/dist/node/{column-views.edb4ba54.js → column-views.021a6961.js} +2 -2
- package/dist/node/{column-views.edb4ba54.js.map → column-views.021a6961.js.map} +1 -1
- package/dist/node/{column-views.f1ad131a.js → column-views.08bef1f6.js} +2 -2
- package/dist/node/{column-views.f1ad131a.js.map → column-views.08bef1f6.js.map} +1 -1
- package/dist/node/column-views.0beae29d.js +2 -0
- package/dist/node/column-views.0beae29d.js.map +1 -0
- package/dist/node/{column-views.6b8424fd.js → column-views.0f401891.js} +2 -2
- package/dist/node/{column-views.6b8424fd.js.map → column-views.0f401891.js.map} +1 -1
- package/dist/node/column-views.1d064426.js +2 -0
- package/dist/node/column-views.1d064426.js.map +1 -0
- package/dist/node/{column-views.ce5904a6.js → column-views.2577dec0.js} +2 -2
- package/dist/node/{column-views.ce5904a6.js.map → column-views.2577dec0.js.map} +1 -1
- package/dist/node/{column-views.45a03acc.js → column-views.2fe8feb9.js} +2 -2
- package/dist/node/{column-views.45a03acc.js.map → column-views.2fe8feb9.js.map} +1 -1
- package/dist/node/{column-views.ebe61439.js → column-views.42bc66a8.js} +2 -2
- package/dist/node/{column-views.ebe61439.js.map → column-views.42bc66a8.js.map} +1 -1
- package/dist/node/{column-views.ae9536b3.js → column-views.465e593b.js} +2 -2
- package/dist/node/{column-views.ae9536b3.js.map → column-views.465e593b.js.map} +1 -1
- package/dist/node/column-views.46efb749.js +2 -0
- package/dist/node/column-views.46efb749.js.map +1 -0
- package/dist/node/{column-views.554d44a7.js → column-views.47440961.js} +2 -2
- package/dist/node/{column-views.554d44a7.js.map → column-views.47440961.js.map} +1 -1
- package/dist/node/column-views.5361f0e2.js +2 -0
- package/dist/node/column-views.5361f0e2.js.map +1 -0
- package/dist/node/{column-views.f0f5cefd.js → column-views.5559de6a.js} +2 -2
- package/dist/node/{column-views.f0f5cefd.js.map → column-views.5559de6a.js.map} +1 -1
- package/dist/node/column-views.56f88b8c.js +2 -0
- package/dist/node/column-views.56f88b8c.js.map +1 -0
- package/dist/node/{column-views.0b3a384e.js → column-views.5a9331a9.js} +2 -2
- package/dist/node/{column-views.0b3a384e.js.map → column-views.5a9331a9.js.map} +1 -1
- package/dist/node/column-views.5fd6e11a.js +2 -0
- package/dist/node/column-views.5fd6e11a.js.map +1 -0
- package/dist/node/column-views.672b683c.js +2 -0
- package/dist/node/column-views.672b683c.js.map +1 -0
- package/dist/node/{column-views.07c503d3.js → column-views.6c7f9245.js} +2 -2
- package/dist/node/column-views.6c7f9245.js.map +1 -0
- package/dist/node/{column-views.4b4c214a.js → column-views.75456275.js} +2 -2
- package/dist/node/{column-views.4b4c214a.js.map → column-views.75456275.js.map} +1 -1
- package/dist/node/column-views.75ba0464.css +2 -0
- package/dist/node/column-views.75ba0464.css.map +1 -0
- package/dist/node/column-views.777b9bb6.js +2 -0
- package/dist/node/column-views.777b9bb6.js.map +1 -0
- package/dist/node/{column-views.93febe9b.js → column-views.7c322202.js} +2 -2
- package/dist/node/{column-views.93febe9b.js.map → column-views.7c322202.js.map} +1 -1
- package/dist/node/column-views.7cc1a14f.js +2 -0
- package/dist/node/column-views.7cc1a14f.js.map +1 -0
- package/dist/node/{column-views.fcdc74c4.js → column-views.8e846c57.js} +2 -2
- package/dist/node/{column-views.fcdc74c4.js.map → column-views.8e846c57.js.map} +1 -1
- package/dist/node/{column-views.6919fd2a.js → column-views.8ee8469d.js} +2 -2
- package/dist/node/{column-views.6919fd2a.js.map → column-views.8ee8469d.js.map} +1 -1
- package/dist/node/{column-views.588b02a1.js → column-views.93bde6c1.js} +2 -2
- package/dist/node/{column-views.588b02a1.js.map → column-views.93bde6c1.js.map} +1 -1
- package/dist/node/{column-views.94c84716.js → column-views.a14f0134.js} +2 -2
- package/dist/node/{column-views.94c84716.js.map → column-views.a14f0134.js.map} +1 -1
- package/dist/node/{column-views.aef76eee.js → column-views.a596b1f5.js} +2 -2
- package/dist/node/{column-views.aef76eee.js.map → column-views.a596b1f5.js.map} +1 -1
- package/dist/node/column-views.af480651.js +2 -0
- package/dist/node/column-views.af480651.js.map +1 -0
- package/dist/node/column-views.b103acbc.js +2 -0
- package/dist/node/column-views.b103acbc.js.map +1 -0
- package/dist/node/column-views.b40c1b9c.js +2 -0
- package/dist/node/column-views.b40c1b9c.js.map +1 -0
- package/dist/node/column-views.b6e86cf0.js +2 -0
- package/dist/node/column-views.b6e86cf0.js.map +1 -0
- package/dist/node/{column-views.6099a3a9.js → column-views.c007152b.js} +2 -2
- package/dist/node/{column-views.6099a3a9.js.map → column-views.c007152b.js.map} +1 -1
- package/dist/node/{column-views.db4ccacc.js → column-views.c921fa1a.js} +2 -2
- package/dist/node/{column-views.db4ccacc.js.map → column-views.c921fa1a.js.map} +1 -1
- package/dist/node/{column-views.a1e29a15.js → column-views.c9880a4d.js} +2 -2
- package/dist/node/{column-views.a1e29a15.js.map → column-views.c9880a4d.js.map} +1 -1
- package/dist/node/column-views.ccfb9afb.css +2 -0
- package/dist/node/column-views.ccfb9afb.css.map +1 -0
- package/dist/node/{column-views.32344397.js → column-views.cd54f1b1.js} +2 -2
- package/dist/node/{column-views.32344397.js.map → column-views.cd54f1b1.js.map} +1 -1
- package/dist/node/{column-views.0201566d.js → column-views.d77d260b.js} +2 -2
- package/dist/node/{column-views.0201566d.js.map → column-views.d77d260b.js.map} +1 -1
- package/dist/node/{column-views.54363c13.js → column-views.d818b387.js} +2 -2
- package/dist/node/{column-views.54363c13.js.map → column-views.d818b387.js.map} +1 -1
- package/dist/node/{column-views.29483479.js → column-views.d8821a96.js} +2 -2
- package/dist/node/{column-views.29483479.js.map → column-views.d8821a96.js.map} +1 -1
- package/dist/node/column-views.dbb4a46b.js +2 -0
- package/dist/node/column-views.dbb4a46b.js.map +1 -0
- package/dist/node/{column-views.e803e4ae.css → column-views.ddc6184e.css} +2 -2
- package/dist/node/column-views.ddc6184e.css.map +1 -0
- package/dist/node/{column-views.44952ae6.js → column-views.e264a767.js} +2 -2
- package/dist/node/{column-views.44952ae6.js.map → column-views.e264a767.js.map} +1 -1
- package/dist/node/column-views.e93b3bdb.js +2 -0
- package/dist/node/column-views.e93b3bdb.js.map +1 -0
- package/dist/node/{column-views.57dd069c.js → column-views.ec691859.js} +2 -2
- package/dist/node/{column-views.57dd069c.js.map → column-views.ec691859.js.map} +1 -1
- package/dist/node/column-views.ec7cc7cc.js +2 -0
- package/dist/node/column-views.ec7cc7cc.js.map +1 -0
- package/dist/node/{column-views.aae09aca.js → column-views.eecdc727.js} +2 -2
- package/dist/node/{column-views.aae09aca.js.map → column-views.eecdc727.js.map} +1 -1
- package/dist/node/{column-views.108db52e.js → column-views.f577d065.js} +2 -2
- package/dist/node/{column-views.108db52e.js.map → column-views.f577d065.js.map} +1 -1
- package/dist/node/column-views.fac4baff.js +2 -0
- package/dist/node/column-views.fac4baff.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +2 -2
- package/src/age-axis.ts +1 -1
- package/src/column.module.sass +7 -5
- package/src/column.ts +29 -7
- package/src/correlation-chart/stories/correlation-chart.stories.ts +1 -1
- package/src/data-provider/store.ts +48 -5
- package/src/data-provider/unit-selection.ts +1 -0
- package/src/facets/detrital-zircon/index.ts +78 -11
- package/src/facets/detrital-zircon/provider.ts +1 -1
- package/src/facets/fossils/index.ts +145 -215
- package/src/facets/fossils/provider.ts +18 -25
- package/src/facets/fossils/taxon-ranges.ts +220 -0
- package/src/facets/index.ts +0 -1
- package/src/facets/{base-sample-column.module.sass → measurements/base.module.sass} +1 -0
- package/src/facets/measurements/base.ts +215 -0
- package/src/facets/measurements/index.ts +2 -38
- package/src/facets/measurements/sgp.ts +91 -0
- package/src/notes.ts +6 -3
- package/src/prepare-units/index.ts +8 -2
- package/src/prepare-units/utils.ts +55 -9
- package/src/section.ts +9 -4
- package/src/unit-details/panel.ts +2 -1
- package/dist/esm/column-views.0265cf7f.js.map +0 -1
- package/dist/esm/column-views.05586d1f.js.map +0 -1
- package/dist/esm/column-views.1151416d.css.map +0 -1
- package/dist/esm/column-views.29a551f6.js.map +0 -1
- package/dist/esm/column-views.3a7179c4.js.map +0 -1
- package/dist/esm/column-views.418f948f.js +0 -15
- package/dist/esm/column-views.4ed90896.js.map +0 -1
- package/dist/esm/column-views.54f8b909.js.map +0 -1
- package/dist/esm/column-views.6698b95a.js.map +0 -1
- package/dist/esm/column-views.6e7082db.js +0 -16
- package/dist/esm/column-views.6e7082db.js.map +0 -1
- package/dist/esm/column-views.748dce47.js +0 -95
- package/dist/esm/column-views.748dce47.js.map +0 -1
- package/dist/esm/column-views.787d7696.js.map +0 -1
- package/dist/esm/column-views.a3fabf0f.js.map +0 -1
- package/dist/esm/column-views.abeab9aa.js.map +0 -1
- package/dist/esm/column-views.adec2e4c.js.map +0 -1
- package/dist/esm/column-views.b7016f82.css.map +0 -1
- package/dist/esm/column-views.e17f00d3.js +0 -37
- package/dist/esm/column-views.e17f00d3.js.map +0 -1
- package/dist/esm/column-views.e33ac5c9.css.map +0 -1
- package/dist/esm/column-views.ea4ebbb7.js +0 -31
- package/dist/esm/column-views.ea4ebbb7.js.map +0 -1
- package/dist/esm/column-views.faacfc3c.js +0 -92
- package/dist/esm/column-views.faacfc3c.js.map +0 -1
- package/dist/node/column-views.07c503d3.js.map +0 -1
- package/dist/node/column-views.0e7ac946.js +0 -2
- package/dist/node/column-views.0e7ac946.js.map +0 -1
- package/dist/node/column-views.16f336ee.js +0 -2
- package/dist/node/column-views.16f336ee.js.map +0 -1
- package/dist/node/column-views.18d54bbb.js +0 -2
- package/dist/node/column-views.18d54bbb.js.map +0 -1
- package/dist/node/column-views.19a84c01.js +0 -2
- package/dist/node/column-views.19a84c01.js.map +0 -1
- package/dist/node/column-views.1a3c399e.js +0 -2
- package/dist/node/column-views.1a3c399e.js.map +0 -1
- package/dist/node/column-views.29eb25bd.css +0 -2
- package/dist/node/column-views.29eb25bd.css.map +0 -1
- package/dist/node/column-views.312db572.js +0 -2
- package/dist/node/column-views.312db572.js.map +0 -1
- package/dist/node/column-views.573cb29d.js +0 -2
- package/dist/node/column-views.573cb29d.js.map +0 -1
- package/dist/node/column-views.5a8bc8e3.js +0 -2
- package/dist/node/column-views.5a8bc8e3.js.map +0 -1
- package/dist/node/column-views.5f3b0b04.js +0 -2
- package/dist/node/column-views.5f3b0b04.js.map +0 -1
- package/dist/node/column-views.77ace3a2.js +0 -2
- package/dist/node/column-views.77ace3a2.js.map +0 -1
- package/dist/node/column-views.8f54691f.js +0 -2
- package/dist/node/column-views.8f54691f.js.map +0 -1
- package/dist/node/column-views.92e29010.js +0 -2
- package/dist/node/column-views.92e29010.js.map +0 -1
- package/dist/node/column-views.a16cd1f2.js +0 -2
- package/dist/node/column-views.a16cd1f2.js.map +0 -1
- package/dist/node/column-views.abe0a664.js +0 -2
- package/dist/node/column-views.abe0a664.js.map +0 -1
- package/dist/node/column-views.cd7b223b.css +0 -2
- package/dist/node/column-views.cd7b223b.css.map +0 -1
- package/dist/node/column-views.d4545f9f.js +0 -2
- package/dist/node/column-views.d4545f9f.js.map +0 -1
- package/dist/node/column-views.e803e4ae.css.map +0 -1
- package/dist/node/column-views.f7d72702.js +0 -2
- package/dist/node/column-views.f7d72702.js.map +0 -1
- package/src/facets/base-sample-column.ts +0 -114
- package/src/facets/measurements/provider.ts +0 -80
- /package/src/facets/fossils/{index.module.sass → taxon-ranges.module.sass} +0 -0
|
@@ -83,17 +83,63 @@ export interface PossiblyClippedUnit extends BaseUnit {
|
|
|
83
83
|
export function getUnitHeightRange(
|
|
84
84
|
unit: PossiblyClippedUnit,
|
|
85
85
|
axisType: ColumnAxisType,
|
|
86
|
+
clipped: boolean = true,
|
|
86
87
|
): [number, number] {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
88
|
+
if (clipped) {
|
|
89
|
+
switch (axisType) {
|
|
90
|
+
case ColumnAxisType.AGE:
|
|
91
|
+
return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];
|
|
92
|
+
case ColumnAxisType.DEPTH:
|
|
93
|
+
case ColumnAxisType.ORDINAL:
|
|
94
|
+
case ColumnAxisType.HEIGHT:
|
|
95
|
+
return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];
|
|
96
|
+
default:
|
|
97
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
98
|
+
}
|
|
99
|
+
} else {
|
|
100
|
+
switch (axisType) {
|
|
101
|
+
case ColumnAxisType.AGE:
|
|
102
|
+
return [unit.b_age, unit.t_age];
|
|
103
|
+
case ColumnAxisType.DEPTH:
|
|
104
|
+
case ColumnAxisType.ORDINAL:
|
|
105
|
+
case ColumnAxisType.HEIGHT:
|
|
106
|
+
return [unit.b_pos, unit.t_pos];
|
|
107
|
+
default:
|
|
108
|
+
throw new Error(`Unknown axis type: ${axisType}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export function getPositionWithinUnit(
|
|
114
|
+
position: number,
|
|
115
|
+
unit: PossiblyClippedUnit,
|
|
116
|
+
axisType: ColumnAxisType,
|
|
117
|
+
): number | null {
|
|
118
|
+
/** Translate a relative position (0-1) within a unit to an absolute position
|
|
119
|
+
* within the unit's height range. If the unit is clipped, null values will be
|
|
120
|
+
* returned for positions outside the clip range
|
|
121
|
+
*/
|
|
122
|
+
if (position < 0 || position > 1) {
|
|
123
|
+
throw new Error(`Position must be between 0 and 1: ${position}`);
|
|
96
124
|
}
|
|
125
|
+
|
|
126
|
+
const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);
|
|
127
|
+
const abs_pos = pos_bottom + position * (pos_top - pos_bottom);
|
|
128
|
+
|
|
129
|
+
// If clipped, check if abs_pos is within the clipped range
|
|
130
|
+
const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);
|
|
131
|
+
if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {
|
|
132
|
+
// Invert for age/depth axes
|
|
133
|
+
if (abs_pos > clip_bottom || abs_pos < clip_top) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
if (abs_pos < clip_bottom || abs_pos > clip_top) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return abs_pos;
|
|
97
143
|
}
|
|
98
144
|
|
|
99
145
|
export const createUnitSorter = (axisType: ColumnAxisType) => {
|
package/src/section.ts
CHANGED
|
@@ -63,7 +63,7 @@ export function SectionsColumn(props: SectionSharedProps) {
|
|
|
63
63
|
const units = useMacrostratUnits();
|
|
64
64
|
|
|
65
65
|
// Get a unique key for the column
|
|
66
|
-
const key = units[0]?.
|
|
66
|
+
const key = units[0]?.col_id;
|
|
67
67
|
|
|
68
68
|
return h(LabelTrackerProvider, { units, key }, [
|
|
69
69
|
h(SectionUnitsColumn, {
|
|
@@ -199,6 +199,7 @@ function SectionUnits(props: SectionProps) {
|
|
|
199
199
|
|
|
200
200
|
interface CompositeTimescaleProps {
|
|
201
201
|
levels?: [number, number] | number;
|
|
202
|
+
unconformityLabels?: boolean;
|
|
202
203
|
}
|
|
203
204
|
|
|
204
205
|
export function CompositeTimescale(props: CompositeTimescaleProps) {
|
|
@@ -215,7 +216,6 @@ export function CompositeTimescale(props: CompositeTimescaleProps) {
|
|
|
215
216
|
|
|
216
217
|
type CompositeTimescaleCoreProps = CompositeTimescaleProps & {
|
|
217
218
|
packages: PackageScaleLayoutData[];
|
|
218
|
-
unconformityLabels?: boolean;
|
|
219
219
|
};
|
|
220
220
|
|
|
221
221
|
export function CompositeTimescaleCore(props: CompositeTimescaleCoreProps) {
|
|
@@ -316,6 +316,8 @@ function Unconformity({
|
|
|
316
316
|
|
|
317
317
|
const ageGap = Math.abs(upperAge - lowerAge);
|
|
318
318
|
|
|
319
|
+
let maximumFractionDigits = 0;
|
|
320
|
+
|
|
319
321
|
let className: string = null;
|
|
320
322
|
if (ageGap > 1000) {
|
|
321
323
|
className = "giga";
|
|
@@ -325,14 +327,17 @@ function Unconformity({
|
|
|
325
327
|
className = "large";
|
|
326
328
|
} else if (ageGap < 1) {
|
|
327
329
|
className = "small";
|
|
330
|
+
maximumFractionDigits = 2;
|
|
331
|
+
} else {
|
|
332
|
+
maximumFractionDigits = 1;
|
|
328
333
|
}
|
|
329
334
|
|
|
330
335
|
let val: ReactNode;
|
|
331
336
|
if (axisType === ColumnAxisType.DEPTH || axisType === ColumnAxisType.HEIGHT) {
|
|
332
|
-
const _txt = ageGap.toLocaleString("en-US", { maximumFractionDigits
|
|
337
|
+
const _txt = ageGap.toLocaleString("en-US", { maximumFractionDigits });
|
|
333
338
|
val = h(Value, { value: _txt, unit: "m" });
|
|
334
339
|
} else {
|
|
335
|
-
val = h(Duration, { value: ageGap });
|
|
340
|
+
val = h(Duration, { value: ageGap, maximumFractionDigits });
|
|
336
341
|
}
|
|
337
342
|
|
|
338
343
|
let prefix: ReactNode = null;
|
|
@@ -301,10 +301,11 @@ export function ReferencesField({ refs, className = null, ...rest }) {
|
|
|
301
301
|
if (refs == null || refs.length === 0) {
|
|
302
302
|
return null;
|
|
303
303
|
}
|
|
304
|
+
|
|
304
305
|
return h(
|
|
305
306
|
DataField,
|
|
306
307
|
{
|
|
307
|
-
label: "
|
|
308
|
+
label: "References",
|
|
308
309
|
className: classNames("refs-field", className),
|
|
309
310
|
...rest,
|
|
310
311
|
},
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/section.ts"],"sourcesContent":["import {\n CompositeUnitsColumn,\n LabelTrackerProvider,\n SectionLabelsColumn,\n} from \"./units\";\nimport { ReactNode, FunctionComponent, useMemo } from \"react\";\nimport {\n Timescale,\n TimescaleOrientation,\n useMacrostratIntervals,\n} from \"@macrostrat/timescale\";\nimport { ColumnAxisType, SVG } from \"@macrostrat/column-components\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./column.module.sass\";\nimport {\n useMacrostratColumnData,\n useMacrostratUnits,\n MacrostratColumnProvider,\n useMacrostratBaseURL,\n} from \"./data-provider\";\nimport { Duration } from \"./unit-details\";\nimport { Value } from \"@macrostrat/data-components\";\nimport type { ExtUnit, PackageScaleLayoutData } from \"./prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface SectionSharedProps {\n unitComponent?: FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n children?: ReactNode;\n showLabelColumn?: boolean;\n axisType?: ColumnAxisType;\n className?: string;\n clipUnits?: boolean;\n maxInternalColumns?: number;\n // Space between sections\n verticalSpacing?: number;\n // Whether to render unconformity labels\n unconformityLabels?: boolean;\n}\n\nexport interface SectionProps extends SectionSharedProps {\n units: ExtUnit[];\n scaleInfo: PackageScaleLayoutData;\n}\n\nexport function SectionsColumn(props: SectionSharedProps) {\n const {\n unconformityLabels = true,\n unitComponent,\n unitComponentProps,\n showLabels = true,\n width = 300,\n columnWidth = 150,\n showLabelColumn = true,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const units = useMacrostratUnits();\n\n // Get a unique key for the column\n const key = units[0]?.unit_id;\n\n return h(LabelTrackerProvider, { units, key }, [\n h(SectionUnitsColumn, {\n width: columnWidth,\n unitComponent,\n unitComponentProps,\n showLabels,\n clipUnits,\n maxInternalColumns,\n unconformityLabels,\n }),\n h.if(showLabelColumn)(SectionLabelsColumn, {\n width: width - columnWidth,\n }),\n ]);\n}\n\nfunction SectionUnitsColumn(props: SectionSharedProps) {\n const {\n width,\n showLabels,\n unitComponent,\n unitComponentProps,\n clipUnits,\n maxInternalColumns,\n axisType,\n unconformityLabels = true,\n } = props;\n\n const { sections, totalHeight } = useMacrostratColumnData();\n\n const scaleData: PackageScaleLayoutData[] = sections.map((section) => {\n return section.scaleInfo;\n });\n\n const innerWidth = width - 2;\n\n return h(\"div.section-units-container\", { style: { width } }, [\n h(\n SVG,\n {\n className: \"sections\",\n height: totalHeight,\n innerWidth,\n paddingH: 1,\n },\n sections.map((group) => {\n const { units, scaleInfo, section_id } = group;\n\n const key = `section-${section_id}`;\n return h(\n SectionUnits,\n {\n units,\n scaleInfo,\n key,\n unitComponent,\n unitComponentProps,\n showLabels,\n width: innerWidth,\n clipUnits,\n maxInternalColumns,\n }, // This unconformity is with the section _above_\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width,\n sections: scaleData,\n verbose: false,\n }),\n ]);\n}\n\nfunction SectionUnits(props: SectionProps) {\n // Section with \"squishy\" timescale\n const {\n units,\n scaleInfo,\n unitComponent,\n showLabels = true,\n width = 300,\n unitComponentProps,\n className,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const { domain, pixelScale, pixelHeight, scale } = scaleInfo;\n\n /** Ensure that we can arrange units into the maximum number\n * of columns defined by unitComponentProps, but that we don't\n * use more than necessary.\n */\n const _unitComponentProps = useMemo(() => {\n return {\n ...unitComponentProps,\n nColumns: Math.min(\n maxInternalColumns ?? Math.floor(width / 10),\n unitComponentProps?.nColumns ?? Infinity,\n Math.max(...units.map((d) => d.column)) + 1,\n ),\n //axisType,\n };\n }, [units, unitComponentProps, maxInternalColumns, width]);\n\n const style = {\n \"--section-height\": `${pixelHeight}px`,\n \"--section-width\": `${width}px`,\n };\n\n return h(\n \"g.section\",\n { className, style, transform: `translate(0 ${scaleInfo.offset})` },\n h(\n MacrostratColumnProvider,\n {\n units,\n domain,\n pixelScale, // Actually pixels per myr,\n scale,\n },\n h(CompositeUnitsColumn, {\n width,\n showLabels,\n unitComponent,\n unitComponentProps: _unitComponentProps,\n clipToFrame: clipUnits,\n }),\n ),\n );\n}\n\ninterface CompositeTimescaleProps {\n levels?: [number, number] | number;\n}\n\nexport function CompositeTimescale(props: CompositeTimescaleProps) {\n const { sections } = useMacrostratColumnData();\n const sectionScales = sections.map((section) => {\n return section.scaleInfo;\n });\n\n return h(CompositeTimescaleCore, {\n packages: sectionScales,\n ...props,\n });\n}\n\ntype CompositeTimescaleCoreProps = CompositeTimescaleProps & {\n packages: PackageScaleLayoutData[];\n unconformityLabels?: boolean;\n};\n\nexport function CompositeTimescaleCore(props: CompositeTimescaleCoreProps) {\n const { levels = 3, packages, unconformityLabels = false } = props;\n\n // Use intervals from Macrostrat API\n const baseURL = useMacrostratBaseURL();\n const intervals = useMacrostratIntervals(baseURL);\n\n let _levels: [number, number];\n if (typeof levels === \"number\") {\n // If levels is a number, use the most common starting level\n _levels = [2, Math.max(2 + Math.min(levels, 5) - 1, 1)];\n } else {\n _levels = levels;\n }\n\n const nCols = _levels[1] - _levels[0] + 1;\n\n return h(\"div.timescale-column\", [\n h(\n \"div.timescales\",\n packages.map((group) => {\n const { pixelHeight, paddingTop, key, scale } = group;\n return h(\n \"div.timescale-container\",\n { style: { paddingTop, \"--timescale-level-count\": nCols }, key },\n [\n h(Timescale, {\n orientation: TimescaleOrientation.VERTICAL,\n length: pixelHeight,\n levels: _levels,\n absoluteAgeScale: true,\n showAgeAxis: false,\n scale,\n intervals,\n }),\n ],\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width: \"100%\",\n sections: packages,\n className: \"unconformity-labels\",\n axisType: ColumnAxisType.AGE,\n }),\n ]);\n}\n\nexport function UnconformityLabels(props: {\n width: string | number;\n sections: PackageScaleLayoutData[];\n axisType?: ColumnAxisType;\n className?: string;\n verbose?: boolean;\n}) {\n const { width, sections, className, axisType, verbose } = props;\n\n return h(\n \"div.unconformity-labels\",\n {\n style: {\n width,\n },\n className,\n },\n sections.map((scaleInfo, i) => {\n const lastGroup = sections[i - 1];\n const top = scaleInfo.offset - scaleInfo.paddingTop;\n const upperAge = lastGroup?.domain[0];\n const lowerAge = scaleInfo.domain[1];\n return h(Unconformity, {\n axisType,\n upperAge,\n lowerAge,\n style: {\n width,\n height: scaleInfo.paddingTop,\n top,\n },\n verbose,\n });\n }),\n );\n}\n\nfunction Unconformity({\n upperAge,\n lowerAge,\n style,\n axisType,\n verbose = false,\n}) {\n if (upperAge == null || lowerAge == null) {\n return null;\n }\n\n const ageGap = Math.abs(upperAge - lowerAge);\n\n let className: string = null;\n if (ageGap > 1000) {\n className = \"giga\";\n } else if (ageGap > 100) {\n className = \"mega\";\n } else if (ageGap > 10) {\n className = \"large\";\n } else if (ageGap < 1) {\n className = \"small\";\n }\n\n let val: ReactNode;\n if (axisType === ColumnAxisType.DEPTH || axisType === ColumnAxisType.HEIGHT) {\n const _txt = ageGap.toLocaleString(\"en-US\", { maximumFractionDigits: 2 });\n val = h(Value, { value: _txt, unit: \"m\" });\n } else {\n val = h(Duration, { value: ageGap });\n }\n\n let prefix: ReactNode = null;\n if (verbose) {\n prefix = h([\" \", h(\"span.prefix\", \" gap\")]);\n }\n\n return h(\"div.unconformity\", { style, className }, [\n h(\"div.unconformity-inner\", h(\"div.unconformity-text\", [val, prefix])),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.0265cf7f.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;AAkCO,SAAS,0CAAwB,UAAU;IAChD,MAAM,SAAS;QACb,GAAG,UAAU;QACb,eAAe;QACf,UAAU;QACV,aAAa;QACb,iDAAiD;QACjD,aAAa;IACf;IACA,MAAM,MAAyB,CAAA,GAAA,mBAAW,EACxC,iBACA,QACA;IAEF,IAAI,OAAO,MAAM,OAAO;IACxB,OAAO,CAAA,GAAA,YAAI,EAAE,KAAK,CAAC,IAAM,EAAE,OAAO;AACpC","sources":["packages/column-views/src/facets/detrital-zircon/provider.ts"],"sourcesContent":["import { group } from \"d3-array\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\n\nexport interface MeasurementInfo {\n measurement_id: number;\n measuremeta_id: number;\n measurement: string;\n measure_units: string;\n measure_phase: string;\n method: string;\n n: number;\n ref_id: number;\n sample_name: string;\n geo_unit: string;\n samp_lith: string;\n samp_lith_id: number;\n samp_desc: string;\n samp_age: string;\n lat: number;\n lng: number;\n unit_id: number;\n unit_rel_pos?: any;\n col_id: number;\n strat_name_id: number;\n match_basis: string;\n ref: string;\n measure_value: number[];\n measure_error: number[];\n measure_position: any[];\n measure_n: number[];\n sample_no: string[];\n error_units: string;\n}\n\nexport function useDetritalMeasurements(columnArgs) {\n const params = {\n ...columnArgs,\n measure_phase: \"zircon\",\n response: \"long\",\n show_values: true,\n // Other isotope systems are organized separately\n measurement: \"207Pb-206Pb\",\n };\n const res: MeasurementInfo[] = useAPIResult(\n \"/measurements\",\n params,\n columnArgs,\n );\n if (res == null) return null;\n return group(res, (d) => d.unit_id);\n}\n"],"names":[],"version":3,"file":"column-views.05586d1f.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA;;;;;;;;AAME;;;;AAEE;;;;;AAGF","sources":["packages/column-views/src/facets/base-sample-column.module.sass"],"sourcesContent":[".truncated-list\n padding-left: 0.2em\n font-size: 0.9em\n list-style: none\n border-left: 1px solid var(--column-stroke-color)\n margin: 1px 0\n li\n display: inline\n &:not(:last-child):after\n content: \", \"\n color: var(--secondary-color)\n li.too-many\n color: var(--secondary-color)\n font-style: italic\n"],"names":[],"version":3,"file":"column-views.1151416d.css.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/column.ts"],"sourcesContent":["import { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { hyperStyled } from \"@macrostrat/hyper\";\nimport {\n Box,\n extractPadding,\n Padding,\n useDarkMode,\n} from \"@macrostrat/ui-components\";\nimport classNames from \"classnames\";\nimport {\n RefObject,\n useRef,\n HTMLAttributes,\n useCallback,\n CSSProperties,\n ComponentType,\n} from \"react\";\nimport styles from \"./column.module.sass\";\nimport { UnitComponent } from \"./units\";\nimport {\n UnitSelectionProvider,\n UnitKeyboardNavigation,\n useUnitSelectionDispatch,\n} from \"./data-provider\";\n\nimport {\n Identifier,\n ReferencesField,\n UnitSelectionPopover,\n} from \"./unit-details\";\nimport {\n MacrostratColumnDataProvider,\n useCompositeScale,\n useMacrostratColumnData,\n} from \"./data-provider\";\nimport {\n SectionSharedProps,\n CompositeTimescale,\n SectionsColumn,\n} from \"./section\";\nimport { ApproximateHeightAxis, CompositeAgeAxis } from \"./age-axis\";\nimport {\n MergeSectionsMode,\n usePreparedColumnUnits,\n HybridScaleType,\n ColumnHeightScaleOptions,\n} from \"./prepare-units\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { NonIdealState } from \"@blueprintjs/core\";\nimport { DataField } from \"@macrostrat/data-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\n\nconst h = hyperStyled(styles);\n\ninterface BaseColumnProps extends SectionSharedProps {\n className?: string;\n showLabelColumn?: boolean;\n keyboardNavigation?: boolean;\n showLabels?: boolean;\n maxInternalColumns?: number;\n // Timescale properties\n showTimescale?: boolean;\n timescaleLevels?: number | [number, number];\n onMouseOver?: (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n ) => void;\n}\n\nexport interface ColumnProps\n extends Padding, BaseColumnProps, ColumnHeightScaleOptions {\n // Macrostrat units\n units: UnitLong[];\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n showUnitPopover?: boolean;\n allowUnitSelection?: boolean;\n selectedUnit?: number | null;\n onUnitSelected?: (unitID: number | null, unit: any) => void;\n // Unconformity height in pixels\n unconformityHeight?: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport function Column(props: ColumnProps) {\n const {\n showUnitPopover = false,\n keyboardNavigation = false,\n mergeSections,\n onUnitSelected,\n selectedUnit,\n children,\n units: rawUnits,\n t_age,\n b_age,\n t_pos,\n b_pos,\n unconformityHeight = 30,\n targetUnitHeight = 20,\n pixelScale,\n minPixelScale = 0.2,\n minSectionHeight = 50,\n collapseSmallUnconformities = true,\n allowUnitSelection,\n hybridScale,\n scale,\n axisType,\n ...rest\n } = props;\n const ref = useRef<HTMLElement>();\n // Selected item position\n\n /* Make pixelScale and targetUnitHeight mutually exclusive. PixelScale implies\n * standardization of scales in all sections */\n let _targetUnitHeight = targetUnitHeight;\n let _minSectionHeight = minSectionHeight;\n let _minPixelScale = minPixelScale;\n if (pixelScale != null) {\n _targetUnitHeight = null;\n _minSectionHeight = 0;\n _minPixelScale = pixelScale;\n }\n\n // Handle special cases for hybrid scales (WIP, we need to regularize this)\n let _axisType = axisType ?? ColumnAxisType.AGE;\n let ageAxisComponent = CompositeAgeAxis;\n if (\n hybridScale?.type === HybridScaleType.ApproximateHeight &&\n _axisType != ColumnAxisType.AGE\n ) {\n // Use approximate height axis for non-age columns if a non-age axis type is requested\n ageAxisComponent = ApproximateHeightAxis;\n _axisType = ColumnAxisType.AGE;\n }\n\n const { sections, units, totalHeight } = usePreparedColumnUnits(rawUnits, {\n axisType: _axisType,\n t_age,\n b_age,\n t_pos,\n b_pos,\n mergeSections,\n targetUnitHeight: _targetUnitHeight,\n unconformityHeight,\n pixelScale,\n minPixelScale: _minPixelScale,\n minSectionHeight: _minSectionHeight,\n collapseSmallUnconformities,\n // TODO: consider unifying scale and hybridScale options\n scale,\n hybridScale,\n });\n\n if (sections.length === 0) {\n return h(\n \"div.column-container.empty\",\n h(NonIdealState, {\n title: \"Empty column\",\n description: \"No sections found in this column.\",\n icon: \"warning-sign\",\n }),\n );\n }\n\n let main: any = h(\n ColumnInner,\n { columnRef: ref, ageAxisComponent, ...rest },\n [\n children,\n h.if(showUnitPopover)(UnitSelectionPopover),\n h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),\n ],\n );\n\n /* By default, unit selection is disabled. However, if any related props are passed,\n we enable it.\n */\n let _allowUnitSelection = allowUnitSelection ?? false;\n if (showUnitPopover || selectedUnit != null || onUnitSelected != null) {\n _allowUnitSelection = true;\n }\n\n if (_allowUnitSelection) {\n main = h(\n UnitSelectionProvider,\n {\n columnRef: ref,\n onUnitSelected,\n selectedUnit,\n units,\n },\n main,\n );\n }\n\n return h(\n MacrostratColumnDataProvider,\n { units, sections, totalHeight, axisType: _axisType },\n main,\n );\n}\n\ninterface ColumnInnerProps extends BaseColumnProps {\n columnRef: RefObject<HTMLElement>;\n ageAxisComponent?: ComponentType;\n}\n\nfunction ColumnInner(props: ColumnInnerProps) {\n const padding = extractPadding(props);\n\n // TODO: integrate padding vars more closely with the rest of the spacing (right now padding is a bit ad-hoc)\n const paddingVars: any = {\n \"--column-padding-top\": `${padding.paddingTop}px`,\n \"--column-padding-bottom\": `${padding.paddingBottom}px`,\n \"--column-padding-left\": `${padding.paddingLeft}px`,\n \"--column-padding-right\": `${padding.paddingRight}px`,\n };\n\n const {\n unitComponent = UnitComponent,\n unconformityLabels = true,\n showLabels = true,\n width: _width = 300,\n columnWidth: _columnWidth = 150,\n showLabelColumn: _showLabelColumn = true,\n className,\n columnRef,\n clipUnits = false,\n children,\n showTimescale,\n timescaleLevels,\n maxInternalColumns,\n onMouseOver,\n ageAxisComponent = CompositeAgeAxis,\n } = props;\n\n const { axisType } = useMacrostratColumnData();\n\n let width = _width;\n let columnWidth = _columnWidth;\n if (columnWidth > width) {\n columnWidth = width;\n }\n let showLabelColumn = _showLabelColumn;\n if (columnWidth > width - 10) {\n showLabelColumn = false;\n }\n\n let _showTimescale = showTimescale ?? true;\n if (timescaleLevels != null) {\n _showTimescale = true;\n }\n _showTimescale = axisType == ColumnAxisType.AGE && _showTimescale;\n\n return h(\n ColumnContainer,\n {\n ...useMouseEventHandlers(onMouseOver),\n style: paddingVars,\n className,\n },\n h(\"div.column\", { ref: columnRef }, [\n h(ageAxisComponent),\n h.if(_showTimescale)(CompositeTimescale, { levels: timescaleLevels }),\n h(SectionsColumn, {\n unitComponent,\n showLabels,\n width,\n columnWidth,\n showLabelColumn,\n clipUnits,\n unconformityLabels,\n maxInternalColumns,\n }),\n children,\n ]),\n );\n}\n\ntype ColumnMouseOverHandler = (\n unit: UnitLong | null,\n height: number | null,\n evt: MouseEvent,\n) => void;\n\nfunction useMouseEventHandlers(\n _onMouseOver: ColumnMouseOverHandler | null = null,\n) {\n /** Click event handler */\n\n // Click handler for unit selection\n const dispatch = useUnitSelectionDispatch();\n const onClick = useCallback(\n (evt) => {\n dispatch?.(null, null, evt as any);\n },\n [dispatch],\n );\n\n /** Hover event handlers */\n const scale = useCompositeScale();\n\n const onMouseOver = useCallback(\n (evt) => {\n const height = scale.invert(\n evt.clientY - evt.currentTarget.getBoundingClientRect().top,\n );\n _onMouseOver?.(null, height, evt);\n },\n [scale, _onMouseOver],\n );\n\n const onMouseOut = useCallback(() => {\n _onMouseOver?.(null, null, null);\n }, [_onMouseOver]);\n\n if (_onMouseOver == null) {\n return {\n onClick,\n onMouseOver: undefined,\n onMouseMove: undefined,\n onMouseOut: undefined,\n };\n }\n\n return { onMouseOver, onMouseMove: onMouseOver, onMouseOut, onClick };\n}\n\nexport interface ColumnContainerProps extends HTMLAttributes<HTMLDivElement> {\n className?: string;\n style?: CSSProperties;\n}\n\nexport function ColumnContainer(props: ColumnContainerProps) {\n const { className, ...rest } = props;\n const darkMode = useDarkMode();\n\n return h(Box, {\n className: classNames(\n className,\n {\n \"dark-mode\": darkMode?.isEnabled ?? false,\n },\n \"column-container\",\n ),\n ...rest,\n });\n}\n\nexport function ColumnBasicInfo({ data, showColumnID = true }) {\n if (data == null) return null;\n return h(\"div.column-info\", [\n h(\"div.column-title-row\", [\n h(\"h2\", data.col_name),\n h.if(showColumnID)(\"h4\", h(Identifier, { id: data.col_id })),\n ]),\n h(DataField, { row: true, label: \"Group\", value: data.col_group }),\n h(ReferencesField, {\n refs: data.refs,\n inline: false,\n row: true,\n className: \"column-refs\",\n }),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.29a551f6.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/prepare-units/index.ts"],"sourcesContent":["import {\n getSectionAgeRange,\n getSectionPosRange,\n groupUnitsIntoSectionsByOverlap,\n groupUnitsIntoSectionsBySectionID,\n mergeOverlappingSections,\n preprocessSectionUnit,\n preprocessUnits,\n} from \"./helpers\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { useMemo } from \"react\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport {\n collapseUnconformitiesByPixelHeight,\n computeSectionHeights,\n finalizeSectionHeights,\n} from \"./composite-scale\";\nimport {\n agesOverlap,\n MergeSectionsMode,\n PrepareColumnOptions,\n PreparedColumnData,\n unitsOverlap,\n} from \"./utils\";\nimport { SectionInfo } from \"./types\";\n\nexport * from \"./utils\";\nexport * from \"./types\";\nexport { preprocessUnits };\n\nexport function usePreparedColumnUnits(\n data: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** This function wraps and memoizes all preparation steps for converting\n * an array of units from the /units route to a form ready for usage.\n */\n return useMemo(() => {\n return prepareColumnUnits(data, options);\n }, [data, ...Object.values(options)]);\n}\n\nexport function prepareColumnUnits(\n units: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** Prepare units for rendering into Macrostrat columns */\n\n let { t_age, b_age, t_pos, b_pos } = options;\n\n const {\n mergeSections = MergeSectionsMode.OVERLAPPING,\n axisType,\n unconformityHeight,\n collapseSmallUnconformities = false,\n hybridScale,\n scale,\n } = options;\n\n if (scale != null) {\n // Set t_age and b_age based on scale domain if not already set\n const domain = scale.domain();\n if (axisType == ColumnAxisType.AGE) {\n if (t_age == null) t_age = Math.min(...domain);\n if (b_age == null) b_age = Math.max(...domain);\n } else {\n if (t_pos == null) t_pos = Math.min(...domain);\n if (b_pos == null) b_pos = Math.max(...domain);\n }\n }\n\n // Start by ensuring that ages and positions are numbers\n // also set up some values for eODP-style columns\n let units1 = units.map(preprocessSectionUnit);\n\n /** Prototype filtering to age range */\n units1 = units1.filter((d) => {\n // Filter units by t_age and b_age, inclusive\n if (axisType == ColumnAxisType.AGE) {\n return agesOverlap(d, { t_age, b_age });\n } else {\n return unitsOverlap(d, { t_pos, b_pos } as any, axisType);\n }\n });\n\n let mergeMode = mergeSections;\n // if (axisType != ColumnAxisType.AGE) {\n // // For non-age columns, we always merge sections.\n // // This is because the \"groupUnitsIntoSections\" function is not well-defined\n // // for non-age columns.\n // mergeMode = MergeSectionsMode.ALL;\n // }\n\n let sections0: SectionInfo<UnitLong>[];\n if (mergeMode == MergeSectionsMode.ALL) {\n // For the \"merge sections\" mode, we need to create a single section\n const [b_unit_pos, t_unit_pos] = getSectionPosRange(units1, axisType);\n const [b_unit_age, t_unit_age] = getSectionAgeRange(units1);\n sections0 = [\n {\n section_id: 0,\n /**\n * If ages limits are directly specified, use them to define the section bounds.\n * */\n t_pos: t_unit_pos,\n b_pos: b_unit_pos,\n t_age: t_unit_age,\n b_age: b_unit_age,\n units: units1,\n },\n ];\n } else if (axisType == ColumnAxisType.AGE) {\n sections0 = groupUnitsIntoSectionsBySectionID(units1, axisType);\n } else {\n sections0 = groupUnitsIntoSectionsByOverlap(units1, axisType);\n }\n\n // Limit sections to the range specified by t_age/b_age or t_pos/b_pos global options\n for (let section of sections0) {\n if (axisType == ColumnAxisType.AGE) {\n section.t_age = Math.max(section.t_age, t_age ?? -Infinity);\n section.b_age = Math.min(section.b_age, b_age ?? Infinity);\n } else if (axisType == ColumnAxisType.DEPTH) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n } else if (axisType == ColumnAxisType.HEIGHT) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n }\n }\n\n /** Merging overlapping sections really only makes sense for age/height/depth\n * columns. Ordinal columns are numbered by section so merging them\n * results in collisions.\n */\n let sections = sections0;\n if (\n mergeSections == MergeSectionsMode.OVERLAPPING &&\n axisType == ColumnAxisType.AGE\n ) {\n sections = mergeOverlappingSections(sections);\n }\n // Filter out undefined sections just in case\n sections = sections.filter((d) => d != null);\n\n // SCALES\n\n /* Compute pixel scales etc. for sections\n * We need to do this now to determine which unconformities\n * are small enough to collapse.\n */\n let sectionsWithScales = computeSectionHeights(sections, options);\n\n if (collapseSmallUnconformities && hybridScale == null) {\n // Collapse small unconformities in pixel height space\n // TODO: this doesn't seem to work properly for non-age columns?\n let threshold = unconformityHeight ?? 30;\n if (typeof collapseSmallUnconformities == \"number\") {\n threshold = collapseSmallUnconformities;\n }\n\n sectionsWithScales = collapseUnconformitiesByPixelHeight(\n sectionsWithScales,\n threshold,\n options,\n );\n }\n\n /** Prepare section scale information using groups */\n let { totalHeight, sections: sections2 } = finalizeSectionHeights(\n sectionsWithScales,\n unconformityHeight,\n );\n\n /** For each section, find units that are overlapping.\n * We do this after merging sections so that we can\n * handle cases where there are overlapping units across sections\n * */\n const sectionsOut = sections2.map((section) => {\n return {\n ...section,\n units: preprocessUnits(section, axisType),\n };\n });\n\n /** Reconstitute the units so that they are sorted by section and properly enhanced.\n * This is mostly important so that unit keyboard navigation\n * predictably selects adjacent units.\n */\n const units2 = sectionsOut.reduce((acc, group) => {\n const { units } = group;\n for (const unit of units) {\n acc.push(unit);\n }\n return acc;\n }, []);\n\n return {\n units: units2,\n totalHeight,\n sections: sectionsOut,\n };\n}\n"],"names":[],"version":3,"file":"column-views.3a7179c4.js.map"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {PBDBFossilsColumn as $b9286605a04210d4$export$554267114407ef68, PBDBOccurrencesMatrix as $b9286605a04210d4$export$652730986cccff7a, FossilDataType as $a3ff7da576c02df0$export$a990c76b38782f57} from "./column-views.abeab9aa.js";
|
|
2
|
-
import {DetritalColumn as $715dd5fedd79146a$export$f176396e104db8d5, DetritalGroup as $715dd5fedd79146a$export$1b3047373cd1c8c7} from "./column-views.748dce47.js";
|
|
3
|
-
import {IsotopesDataset as $d71d096cfe00860f$export$c69bd0285aa5d775, IsotopesColumn as $d71d096cfe00860f$export$5d8aa8022c284748, MeasurementDataContext as $5dbb619f2c7bef60$export$c644ef985ce7a4c4, MeasurementDataProvider as $5dbb619f2c7bef60$export$5f01d5b342a89841, useMeasurementData as $5dbb619f2c7bef60$export$8a0335fd9ff72150} from "./column-views.60365cdb.js";
|
|
4
|
-
import {SGPMeasurementsColumn as $6ff130029901daab$export$c49cf57576706bab} from "./column-views.e17f00d3.js";
|
|
5
|
-
import {BaseMeasurementsColumn as $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d, TruncatedList as $c6d9d48b3424a44c$export$653e47a7a0da0f0d} from "./column-views.faacfc3c.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
export {$b9286605a04210d4$export$554267114407ef68 as PBDBFossilsColumn, $b9286605a04210d4$export$652730986cccff7a as PBDBOccurrencesMatrix, $a3ff7da576c02df0$export$a990c76b38782f57 as FossilDataType, $715dd5fedd79146a$export$f176396e104db8d5 as DetritalColumn, $715dd5fedd79146a$export$1b3047373cd1c8c7 as DetritalGroup, $d71d096cfe00860f$export$c69bd0285aa5d775 as IsotopesDataset, $d71d096cfe00860f$export$5d8aa8022c284748 as IsotopesColumn, $5dbb619f2c7bef60$export$c644ef985ce7a4c4 as MeasurementDataContext, $5dbb619f2c7bef60$export$5f01d5b342a89841 as MeasurementDataProvider, $5dbb619f2c7bef60$export$8a0335fd9ff72150 as useMeasurementData, $6ff130029901daab$export$c49cf57576706bab as SGPMeasurementsColumn, $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d as BaseMeasurementsColumn, $c6d9d48b3424a44c$export$653e47a7a0da0f0d as TruncatedList};
|
|
15
|
-
//# sourceMappingURL=column-views.418f948f.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;AAaA,MAAM,YAAE,8BAAQ,WAAE,6BAAO,gBAAE,kCAAY,YAAE,8BAAQ,EAAE,GAAG,CAAA,GAAA,sBAAc;AAOpE,MAAM,wCAAkB,CAAA,GAAA,WAAG;AAE3B,MAAM,2CAAqB,CAAA,GAAA,WAAG,EAA+B,CAAC;IAC5D,MAAM,QAAQ,IAAI;IAClB,IAAI,CAAC,OAAO,OAAO;IACnB,MAAM,UAAU,IAAI;IACpB,MAAM,OAAO,CAAC,CAAC;QACb,QAAQ,GAAG,CAAC,KAAK,OAAO,EAAE;IAC5B;IACA,OAAO;AACT;AAEA,SAAS,qCAAe,YAAE,QAAQ,EAAE,GAAG,MAAqB;IAC1D,kDAAkD;IAClD,IAAI,MAAM;IACV,IAAI;QACF,MAAM;IACR,EAAE,OAAM;QACN,mCAAmC;QACnC,MAAM;IACR;IACA,OAAO,CAAA,GAAA,sBAAA,EAAE,gCAAU;QAAE,OAAO;QAAK,GAAG,IAAI;IAAC,GAAG;AAC9C;AAEO,SAAS,0CAA8B,YAC5C,QAAQ,SACR,KAAK,EAIN;IACC;;;GAGC,GACD,OAAO,CAAA,GAAA,sBAAA,EACL,sCACA;QACE,eAAe;YAAC;gBAAC;gBAAiB;aAAM;SAAC;IAC3C,GACA;AAEJ;AASA,MAAM,oDACJ,CAAA,GAAA,oBAAY,EAA+B;AAEtC,SAAS,0CAA6B,YAC3C,QAAQ,SACR,KAAK,YACL,QAAQ,eACR,WAAW,YACX,QAAQ,EAC8C;IACtD;;;;;;;;;KASG,GAEH,MAAM,QAAQ,CAAA,GAAA,cAAM,EAAE;QACpB,uDAAuD;QACvD,OAAO;mBACL;sBACA;yBACA;sBACA;QACF;IACF,GAAG;QAAC;QAAO;QAAU;QAAa;KAAS;IAE3C,OAAO,CAAA,GAAA,sBAAA,EACL,2CACA;eAAE;IAAM,GACR,CAAA,GAAA,sBAAA,EAAE,kDAA4B,QAAQ,EAAE;eAAE;IAAM,GAAG;AAEvD;AAEO,SAAS;IACd,MAAM,MAAM,CAAA,GAAA,iBAAS,EAAE;IACvB,IAAI,CAAC,KACH,MAAM,IAAI,MACR;IAGJ,OAAO;AACT;AAEO,SAAS;IACd,OAAO,mCAAa;AACtB;AAEO,SAAS;IACd,IAAI;QACF,OAAO,mCAAa;IACtB,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,SAAS;IACd,MAAM,MAAM;IACZ,OAAO,CAAA,GAAA,cAAM,EACX,IAAM,CAAA,GAAA,yCAAmB,EAAE,IAAI,QAAQ,EAAE,OACzC;QAAC,IAAI,QAAQ;KAAC;AAElB","sources":["packages/column-views/src/data-provider/store.ts"],"sourcesContent":["import { createContext, ReactNode, useContext, useMemo } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n CompositeColumnScale,\n createCompositeScale,\n} from \"../prepare-units/composite-scale\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ExtUnit, PackageLayoutData } from \"../prepare-units\";\n// An isolated jotai store for Macrostrat column usage\n// TODO: there might be a better way to do this using the MacrostratDataProvider or similar\nimport { createIsolation } from \"jotai-scope\";\nimport { atom, type WritableAtom } from \"jotai\";\n\nconst { Provider, useAtom, useAtomValue, useStore } = createIsolation();\n\ntype ProviderProps = {\n children: ReactNode;\n initialValues?: Iterable<[WritableAtom<any, any, any>, any]>;\n};\n\nconst columnUnitsAtom = atom<ExtUnit[]>();\n\nconst columnUnitsMapAtom = atom<Map<number, ExtUnit> | null>((get) => {\n const units = get(columnUnitsAtom);\n if (!units) return null;\n const unitMap = new Map<number, ExtUnit>();\n units.forEach((unit) => {\n unitMap.set(unit.unit_id, unit);\n });\n return unitMap;\n});\n\nfunction ScopedProvider({ children, ...rest }: ProviderProps) {\n // Always use the same store instance in this tree\n let val = null;\n try {\n val = useStore();\n } catch {\n // No store found, create a new one\n val = null;\n }\n return h(Provider, { store: val, ...rest }, children);\n}\n\nexport function MacrostratColumnStateProvider({\n children,\n units,\n}: {\n children: ReactNode;\n units: ExtUnit[];\n}) {\n /** Top-level provider for Macrostrat column data.\n * It is either provided by the Column component itself, or\n * can be hoisted higher in the tree to provide a common data context\n */\n return h(\n ScopedProvider,\n {\n initialValues: [[columnUnitsAtom, units]],\n },\n children,\n );\n}\n\nexport interface MacrostratColumnDataContext {\n units: ExtUnit[];\n sections: PackageLayoutData[];\n totalHeight?: number;\n axisType?: ColumnAxisType;\n}\n\nconst MacrostratColumnDataContext =\n createContext<MacrostratColumnDataContext>(null);\n\nexport function MacrostratColumnDataProvider({\n children,\n units,\n sections,\n totalHeight,\n axisType,\n}: MacrostratColumnDataContext & { children: ReactNode }) {\n /** Internal provider for Macrostrat column data.\n * As a general rule, we want to provide data and column-axis\n * height calculations through the context, since these need to\n * be accessed by any component that lays out information on the\n * column.\n *\n * Cross-axis layout and view configuration (e.g., showing and hiding\n * of different components or labels) should be handled through passing\n * props to the components themselves.\n * */\n\n const value = useMemo(() => {\n // For now, change ordinal axis types to age axis types\n return {\n units,\n sections,\n totalHeight,\n axisType,\n };\n }, [units, sections, totalHeight, axisType]);\n\n return h(\n MacrostratColumnStateProvider,\n { units },\n h(MacrostratColumnDataContext.Provider, { value }, children),\n );\n}\n\nexport function useMacrostratColumnData() {\n const ctx = useContext(MacrostratColumnDataContext);\n if (!ctx) {\n throw new Error(\n \"useMacrostratColumnData must be used within a MacrostratColumnDataProvider\",\n );\n }\n return ctx;\n}\n\nexport function useMacrostratUnits() {\n return useAtomValue(columnUnitsAtom);\n}\n\nexport function useColumnUnitsMap(): Map<number, ExtUnit> | null {\n try {\n return useAtomValue(columnUnitsMapAtom);\n } catch {\n return null;\n }\n}\n\nexport function useCompositeScale(): CompositeColumnScale {\n const ctx = useMacrostratColumnData();\n return useMemo(\n () => createCompositeScale(ctx.sections, true),\n [ctx.sections],\n );\n}\n"],"names":[],"version":3,"file":"column-views.4ed90896.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;AAeA,MAAM,2BAAK;AAaJ,IAAA,AAAK,mEAAA;;;WAAA;;AAyBL,MAAM,2CAA6B,SACxC,CAAC,EACD,CAAC,EACD,WAA2B,CAAA,GAAA,qBAAa,EAAE,GAAG,EAC7C,YAAoB,KAAK;IAEzB,MAAM,MAAM,CAAA,GAAA,uBAAe,EACzB,yCAAmB,GAAG,WACtB,yCAAmB,GAAG,WACtB;IAEF,OAAO,OAAO,CAAA,GAAA,2BAAmB,EAAE,QAAQ;AAC7C;AAGO,SAAS,0CACd,CAAuB,EACvB,CAAuB,EACvB,YAAoB,wBAAE;IAEtB,OAAO,yCAAa,GAAG,GAAG,CAAA,GAAA,qBAAa,EAAE,GAAG,EAAE;AAChD;AAQO,SAAS,yCACd,IAAyB,EACzB,QAAwB;IAExB,OAAQ;QACN,KAAK,CAAA,GAAA,qBAAa,EAAE,GAAG;YACrB,OAAO;gBAAC,KAAK,UAAU,IAAI,KAAK,KAAK;gBAAE,KAAK,UAAU,IAAI,KAAK,KAAK;aAAC;QACvE,KAAK,CAAA,GAAA,qBAAa,EAAE,KAAK;QACzB,KAAK,CAAA,GAAA,qBAAa,EAAE,OAAO;QAC3B,KAAK,CAAA,GAAA,qBAAa,EAAE,MAAM;YACxB,OAAO;gBAAC,KAAK,UAAU,IAAI,KAAK,KAAK;gBAAE,KAAK,UAAU,IAAI,KAAK,KAAK;aAAC;QACvE;YACE,MAAM,IAAI,MAAM,CAAC,mBAAmB,EAAE,UAAU;IACpD;AACF;AAEO,MAAM,4CAAmB,CAAC;IAC/B,OAAO,CAAC,GAAa;QACnB,MAAM,QAAQ,yCAAmB,GAAG;QACpC,MAAM,QAAQ,yCAAmB,GAAG;QACpC,MAAM,QAAQ,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE;QACjC,IAAI,SAAS,GACX,OAAO;QAET,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE;IAC5B;AACF;AAEO,SAAS,0CAAe,CAAU;IACvC,IAAI,MAAM,OAAO,CAAC,IAChB,OAAO;IAET,OAAO;QAAC;KAAE;AACZ;AAEO,SAAS,0CAAgB,CAAyB;IACvD,IAAI,OAAO,KAAK,UACd,IAAI,WAAW;IAEjB,IAAI,MAAM,IACR,OAAO;IAET,OAAO;AACT","sources":["packages/column-views/src/prepare-units/utils.ts"],"sourcesContent":["import type { BaseUnit } from \"@macrostrat/api-types\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n ExtUnit,\n PackageLayoutData,\n StratigraphicPackage,\n} from \"./types\";\n\nconst dt = 0.001;\n\nexport interface PrepareColumnOptions extends ColumnScaleOptions {\n axisType: ColumnAxisType;\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n collapseSmallUnconformities?: boolean | number;\n scale?: ScaleContinuousNumeric<any, any>;\n}\n\nexport enum MergeSectionsMode {\n ALL = \"all\",\n OVERLAPPING = \"overlapping\",\n}\n\nexport interface PreparedColumnData extends CompositeColumnData {\n sections: PackageLayoutData[];\n units: ExtUnit[];\n}\n\ninterface UnitsOverlap {\n (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n axisType?: ColumnAxisType.AGE,\n tolerance?: number,\n ): boolean;\n (\n a: BaseUnit,\n b: BaseUnit,\n axisType: ColumnAxisType,\n tolerance?: number,\n ): boolean;\n}\n\nexport const unitsOverlap: UnitsOverlap = function (\n a,\n b,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n tolerance: number = 0.001,\n): boolean {\n const rel = compareAgeRanges(\n getUnitHeightRange(a, axisType),\n getUnitHeightRange(b, axisType),\n tolerance,\n );\n return rel != AgeRangeRelationship.Disjoint;\n};\n\n/** A more permissive overlap function in the age space */\nexport function agesOverlap(\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n tolerance: number = dt,\n): boolean {\n return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);\n}\n\nexport interface PossiblyClippedUnit extends BaseUnit {\n // Internally created clipped positions\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function getUnitHeightRange(\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n): [number, number] {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n}\n\nexport const createUnitSorter = (axisType: ColumnAxisType) => {\n return (a: BaseUnit, b: BaseUnit) => {\n const a_pos = getUnitHeightRange(a, axisType);\n const b_pos = getUnitHeightRange(b, axisType);\n const d_top = a_pos[1] - b_pos[1];\n if (d_top != 0) {\n return d_top;\n }\n return a_pos[0] - b_pos[0];\n };\n};\n\nexport function ensureArray<T>(x: T | T[]): T[] {\n if (Array.isArray(x)) {\n return x;\n }\n return [x];\n}\n\nexport function ensureRealFloat(x: number | string | null): number | null {\n if (typeof x == \"string\") {\n x = parseFloat(x);\n }\n if (isNaN(x)) {\n return null;\n }\n return x;\n}\n"],"names":[],"version":3,"file":"column-views.54f8b909.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/facets/fossils/provider.ts"],"sourcesContent":["import { group, InternMap } from \"d3-array\";\nimport {\n createAPIContext,\n useAPIResult,\n useAsyncMemo,\n} from \"@macrostrat/ui-components\";\n\nconst responseUnwrapper = (d) => d.records;\n\nconst pbdbAPIContext = createAPIContext({\n baseURL: \"https://paleobiodb.org/data1.2\",\n unwrapResponse: responseUnwrapper,\n});\n\nexport enum FossilDataType {\n Occurrences = \"occs\",\n Collections = \"colls\",\n}\n\nexport function usePBDBFossilData(\n type: FossilDataType,\n { col_id },\n): any[] | null {\n const params = {\n ms_column: col_id,\n show: \"full,mslink\",\n };\n return useAPIResult(`/${type}/list.json`, params, {\n context: pbdbAPIContext,\n });\n}\n\nexport interface PBDBIdentifier {\n unit_id: number;\n col_id: number;\n cltn_id: number;\n}\n\nexport interface PBDBCollection extends PBDBIdentifier {\n cltn_name: string;\n pbdb_occs: number;\n t_age: number;\n b_age: number;\n [key: string]: any; // Allow for additional properties\n}\n\nexport interface PBDBOccurrence extends PBDBIdentifier {\n occ_id: number;\n cltn_id: number;\n taxon_name: string;\n best_name: string;\n [key: string]: any; // Allow for additional properties\n}\n\nexport function useFossilData(\n col_id: number,\n type = FossilDataType.Collections,\n) {\n // Fossil links are stored in both Macrostrat and PBDB, depending on how the link was assembled. Here\n // we create a unified view of data over both sources.\n return useAsyncMemo(async () => {\n if (col_id == null) return null;\n return await fetchFossilData(col_id, type);\n }, [col_id, type]);\n}\n\nasync function fetchMacrostratFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n if (type !== FossilDataType.Collections) {\n // Macrostrat API only supports collections\n return [];\n }\n\n // Fetch fossil collections linked to columns from the Macrostrat API\n const resp = await fetch(\n `https://macrostrat.org/api/fossils?col_id=${col_id}`,\n );\n const res = await resp.json();\n // Create collections from Macrostrat data\n return res.success.data;\n}\n\nasync function fetchPDBDFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n const resp = await fetch(\n `https://paleobiodb.org/data1.2/${type}/list.json?ms_column=${col_id}&show=mslink,full`,\n );\n const res = await resp.json();\n return res.records.map(\n type == FossilDataType.Collections\n ? createMacrostratCollection\n : preprocessOccurrence,\n );\n}\n\nasync function fetchFossilData(\n colID: number,\n type: FossilDataType,\n): Promise<InternMap<number, PBDBOccurrence[] | PBDBCollection[]>> {\n const [macrostratData, pbdbData] = await Promise.all([\n fetchMacrostratFossilData(colID, type),\n fetchPDBDFossilData(colID, type),\n ]);\n\n const data = [...macrostratData, ...pbdbData];\n\n return group(data, (d) => d.unit_id);\n}\n\nfunction preprocessOccurrence(d): PBDBOccurrence {\n /* Preprocess data for an occurrence into a Macrostrat-like format */\n // Standardize names of Macrostrat units and columns\n const unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n const col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n\n // taxon names may be stored in different fields\n const occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n const cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name: d.tna,\n best_name: d.idn ?? d.tna,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n };\n}\n\nfunction createMacrostratCollection(d): PBDBCollection {\n /* Preprocess data for a collection into a Macrostrat-like format */\n let unit_id = null;\n let col_id = null;\n // Standardize names of Macrostrat units and columns\n if (d.msu != null) {\n unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n }\n if (d.msc != null) {\n col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n }\n\n // taxon names may be stored in different fields\n let taxon_name = d.tna;\n let occ_id = null;\n if (d.oid != null && d.oid.startsWith(\"occ:\")) {\n occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n }\n if (d.idn != null) {\n taxon_name = d.idn;\n }\n\n let cltn_id = d.cltn_id;\n if (d.oid != null && d.oid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.oid.replace(/^col:/, \"\"));\n } else if (d.cid != null && d.cid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n }\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n t_age: d.t_age,\n b_age: d.b_age,\n };\n}\n"],"names":[],"version":3,"file":"column-views.6698b95a.js.map"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
function $parcel$export(e, n, v, s) {
|
|
3
|
-
Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
|
|
4
|
-
}
|
|
5
|
-
var $4629ffa28ca3dfc9$exports = {};
|
|
6
|
-
|
|
7
|
-
$parcel$export($4629ffa28ca3dfc9$exports, "too-many", () => $4629ffa28ca3dfc9$export$76144d85d033d82a, (v) => $4629ffa28ca3dfc9$export$76144d85d033d82a = v);
|
|
8
|
-
$parcel$export($4629ffa28ca3dfc9$exports, "truncated-list", () => $4629ffa28ca3dfc9$export$12f42f335e4f5e49, (v) => $4629ffa28ca3dfc9$export$12f42f335e4f5e49 = v);
|
|
9
|
-
var $4629ffa28ca3dfc9$export$76144d85d033d82a;
|
|
10
|
-
var $4629ffa28ca3dfc9$export$12f42f335e4f5e49;
|
|
11
|
-
$4629ffa28ca3dfc9$export$76144d85d033d82a = `sf_8dq_too-many`;
|
|
12
|
-
$4629ffa28ca3dfc9$export$12f42f335e4f5e49 = `sf_8dq_truncated-list`;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export {$4629ffa28ca3dfc9$exports as default};
|
|
16
|
-
//# sourceMappingURL=column-views.6e7082db.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;AAAA,IAAA;AACA,IAAA;AADA,4CAA6B,CAAC,eAAe,CAAC;AAC9C,4CAAmC,CAAC,qBAAqB,CAAC","sources":["packages/column-views/src/facets/base-sample-column.module.sass"],"sourcesContent":[".truncated-list\n padding-left: 0.2em\n font-size: 0.9em\n list-style: none\n border-left: 1px solid var(--column-stroke-color)\n margin: 1px 0\n li\n display: inline\n &:not(:last-child):after\n content: \", \"\n color: var(--secondary-color)\n li.too-many\n color: var(--secondary-color)\n font-style: italic\n"],"names":[],"version":3,"file":"column-views.6e7082db.js.map"}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import {useDetritalMeasurements as $9f310bd6e88a58bc$export$1b0cf9c36f060135} from "./column-views.05586d1f.js";
|
|
2
|
-
import $d4hxx$columnviews2c45a7b5js from "./column-views.2c45a7b5.js";
|
|
3
|
-
import "./column-views.403a7b48.css";
|
|
4
|
-
import {BaseMeasurementsColumn as $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d} from "./column-views.faacfc3c.js";
|
|
5
|
-
import {usePlotArea as $d4hxx$usePlotArea, DetritalSpectrumPlot as $d4hxx$DetritalSpectrumPlot, DetritalSeries as $d4hxx$DetritalSeries} from "@macrostrat/data-components";
|
|
6
|
-
import $d4hxx$macrostrathyper from "@macrostrat/hyper";
|
|
7
|
-
import {useMemo as $d4hxx$useMemo} from "react";
|
|
8
|
-
import $d4hxx$classnames from "classnames";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
function $parcel$interopDefault(a) {
|
|
12
|
-
return a && a.__esModule ? a.default : a;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const $715dd5fedd79146a$var$h = (0, $d4hxx$macrostrathyper).styled((0, ($parcel$interopDefault($d4hxx$columnviews2c45a7b5js))));
|
|
22
|
-
const $715dd5fedd79146a$var$matchingUnit = (dz)=>(d)=>d.unit_id == dz[0].unit_id;
|
|
23
|
-
function $715dd5fedd79146a$export$f176396e104db8d5({ columnID: columnID, color: color = "magenta" }) {
|
|
24
|
-
const data = (0, $9f310bd6e88a58bc$export$1b0cf9c36f060135)({
|
|
25
|
-
col_id: columnID
|
|
26
|
-
});
|
|
27
|
-
const width = 400;
|
|
28
|
-
const paddingLeft = 40;
|
|
29
|
-
const spectrumWidth = width - paddingLeft;
|
|
30
|
-
const noteComponent = (0, $d4hxx$useMemo)(()=>{
|
|
31
|
-
return (props)=>{
|
|
32
|
-
return $715dd5fedd79146a$var$h($715dd5fedd79146a$export$1b3047373cd1c8c7, {
|
|
33
|
-
width: spectrumWidth,
|
|
34
|
-
height: 40,
|
|
35
|
-
color: color,
|
|
36
|
-
...props
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
}, [
|
|
40
|
-
width,
|
|
41
|
-
color
|
|
42
|
-
]);
|
|
43
|
-
return $715dd5fedd79146a$var$h((0, $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d), {
|
|
44
|
-
data: data,
|
|
45
|
-
noteComponent: noteComponent,
|
|
46
|
-
getUnitID: (d)=>d[0].unit_id,
|
|
47
|
-
matchingUnit: $715dd5fedd79146a$var$matchingUnit
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
function $715dd5fedd79146a$var$DepositionalAge({ unit: unit }) {
|
|
51
|
-
const { xScale: xScale, height: height } = (0, $d4hxx$usePlotArea)();
|
|
52
|
-
const { t_age: t_age, b_age: b_age } = unit;
|
|
53
|
-
const x = xScale(t_age);
|
|
54
|
-
const x1 = xScale(b_age);
|
|
55
|
-
return $715dd5fedd79146a$var$h("rect.depositional-age", {
|
|
56
|
-
x: x,
|
|
57
|
-
width: x1 - x,
|
|
58
|
-
y: 0,
|
|
59
|
-
height: height
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
function $715dd5fedd79146a$export$1b3047373cd1c8c7(props) {
|
|
63
|
-
const { note: note, width: width, height: height, color: color, spacing: spacing } = props;
|
|
64
|
-
const { data: data, unit: unit } = note;
|
|
65
|
-
const _color = color;
|
|
66
|
-
const spaceBelow = spacing?.below ?? 100;
|
|
67
|
-
const hideAxisLabels = spaceBelow < 60;
|
|
68
|
-
return $715dd5fedd79146a$var$h("div.detrital-group", {
|
|
69
|
-
className: (0, $d4hxx$classnames)({
|
|
70
|
-
"hide-axis": hideAxisLabels
|
|
71
|
-
})
|
|
72
|
-
}, [
|
|
73
|
-
$715dd5fedd79146a$var$h((0, $d4hxx$DetritalSpectrumPlot), {
|
|
74
|
-
width: width,
|
|
75
|
-
innerHeight: height,
|
|
76
|
-
showAxisLabels: true,
|
|
77
|
-
paddingBottom: 40
|
|
78
|
-
}, [
|
|
79
|
-
$715dd5fedd79146a$var$h.if(unit != null)($715dd5fedd79146a$var$DepositionalAge, {
|
|
80
|
-
unit: unit
|
|
81
|
-
}),
|
|
82
|
-
data.map((d)=>{
|
|
83
|
-
return $715dd5fedd79146a$var$h((0, $d4hxx$DetritalSeries), {
|
|
84
|
-
bandwidth: 20,
|
|
85
|
-
data: d.measure_value,
|
|
86
|
-
color: _color
|
|
87
|
-
});
|
|
88
|
-
})
|
|
89
|
-
])
|
|
90
|
-
]);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
export {$715dd5fedd79146a$export$f176396e104db8d5 as DetritalColumn, $715dd5fedd79146a$export$1b3047373cd1c8c7 as DetritalGroup};
|
|
95
|
-
//# sourceMappingURL=column-views.748dce47.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;;;;;;;;;;;;AAaA,MAAM,0BAAI,CAAA,GAAA,sBAAI,EAAE,MAAM,CAAC,CAAA,GAAA,uEAAK;AAgB5B,MAAM,qCAAe,CAAC,KAAO,CAAC,IAAM,EAAE,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO;AAE9D,SAAS,0CAAe,YAAE,QAAQ,SAAE,QAAQ,WAAW;IACrD,MAAM,OAAO,CAAA,GAAA,yCAAsB,EAAE;QAAE,QAAQ;IAAS;IAExD,MAAM,QAAQ;IACd,MAAM,cAAc;IAEpB,MAAM,gBAAgB,QAAQ;IAE9B,MAAM,gBAAgB,CAAA,GAAA,cAAM,EAAE;QAC5B,OAAO,CAAC;YACN,OAAO,wBAAE,2CAAe;gBACtB,OAAO;gBACP,QAAQ;uBACR;gBACA,GAAG,KAAK;YACV;QACF;IACF,GAAG;QAAC;QAAO;KAAM;IAEjB,OAAO,wBAAE,CAAA,GAAA,yCAAqB,GAAG;cAC/B;uBACA;QACA,WAAW,CAAC,IAAM,CAAC,CAAC,EAAE,CAAC,OAAO;sBAC9B;IACF;AACF;AAEA,SAAS,sCAAgB,QAAE,IAAI,EAAE;IAC/B,MAAM,UAAE,MAAM,UAAE,MAAM,EAAE,GAAG,CAAA,GAAA,kBAAU;IAErC,MAAM,SAAE,KAAK,SAAE,KAAK,EAAE,GAAG;IACzB,MAAM,IAAI,OAAO;IACjB,MAAM,KAAK,OAAO;IAElB,OAAO,wBAAE,yBAAyB;WAAE;QAAG,OAAO,KAAK;QAAG,GAAG;gBAAG;IAAO;AACrE;AAEA,SAAS,0CAAc,KAAwB;IAC7C,MAAM,QAAE,IAAI,SAAE,KAAK,UAAE,MAAM,SAAE,KAAK,WAAE,OAAO,EAAE,GAAG;IAChD,MAAM,QAAE,IAAI,QAAE,IAAI,EAAE,GAAG;IAEvB,MAAM,SAAS;IAEf,MAAM,aAAa,SAAS,SAAS;IACrC,MAAM,iBAAiB,aAAa;IAEpC,OAAO,wBACL,sBACA;QAAE,WAAW,CAAA,GAAA,iBAAS,EAAE;YAAE,aAAa;QAAe;IAAG,GACzD;QACE,wBACE,CAAA,GAAA,2BAAmB,GACnB;mBAAE;YAAO,aAAa;YAAQ,gBAAgB;YAAM,eAAe;QAAG,GACtE;YACE,wBAAE,EAAE,CAAC,QAAQ,MAAM,uCAAiB;sBAAE;YAAK;YAC3C,KAAK,GAAG,CAAC,CAAC;gBACR,OAAO,wBAAE,CAAA,GAAA,qBAAa,GAAG;oBACvB,WAAW;oBACX,MAAM,EAAE,aAAa;oBACrB,OAAO;gBACT;YACF;SACD;KAEJ;AAEL","sources":["packages/column-views/src/facets/detrital-zircon/index.ts"],"sourcesContent":["import {\n DetritalSpectrumPlot,\n DetritalSeries,\n usePlotArea,\n} from \"@macrostrat/data-components\";\nimport type { IUnit } from \"../../units/types\";\nimport hyper from \"@macrostrat/hyper\";\nimport { useDetritalMeasurements, MeasurementInfo } from \"./provider\";\nimport { useMemo } from \"react\";\nimport styles from \"./index.module.sass\";\nimport classNames from \"classnames\";\nimport { BaseMeasurementsColumn } from \"../base-sample-column\";\n\nconst h = hyper.styled(styles);\n\ninterface DetritalItemProps {\n note: {\n data: MeasurementInfo[];\n unit?: IUnit;\n };\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n}\n\nconst matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;\n\nfunction DetritalColumn({ columnID, color = \"magenta\" }) {\n const data = useDetritalMeasurements({ col_id: columnID });\n\n const width = 400;\n const paddingLeft = 40;\n\n const spectrumWidth = width - paddingLeft;\n\n const noteComponent = useMemo(() => {\n return (props) => {\n return h(DetritalGroup, {\n width: spectrumWidth,\n height: 40,\n color,\n ...props,\n });\n };\n }, [width, color]);\n\n return h(BaseMeasurementsColumn, {\n data,\n noteComponent,\n getUnitID: (d) => d[0].unit_id,\n matchingUnit,\n });\n}\n\nfunction DepositionalAge({ unit }) {\n const { xScale, height } = usePlotArea();\n\n const { t_age, b_age } = unit;\n const x = xScale(t_age);\n const x1 = xScale(b_age);\n\n return h(\"rect.depositional-age\", { x, width: x1 - x, y: 0, height });\n}\n\nfunction DetritalGroup(props: DetritalItemProps) {\n const { note, width, height, color, spacing } = props;\n const { data, unit } = note;\n\n const _color = color;\n\n const spaceBelow = spacing?.below ?? 100;\n const hideAxisLabels = spaceBelow < 60;\n\n return h(\n \"div.detrital-group\",\n { className: classNames({ \"hide-axis\": hideAxisLabels }) },\n [\n h(\n DetritalSpectrumPlot,\n { width, innerHeight: height, showAxisLabels: true, paddingBottom: 40 },\n [\n h.if(unit != null)(DepositionalAge, { unit }),\n data.map((d) => {\n return h(DetritalSeries, {\n bandwidth: 20,\n data: d.measure_value,\n color: _color,\n });\n }),\n ],\n ),\n ],\n );\n}\n\nexport { DetritalColumn, DetritalGroup };\n"],"names":[],"version":3,"file":"column-views.748dce47.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;;AAiBO,SAAS,0CAAY,SAC1B,KAAK,SACL,QAAQ,oBACR,aAAa,eACb,cAAc,8BACd,wBAAwB,YACxB,QAAQ,EACS;IACjB,MAAM,eAAE,WAAW,EAAE,GAAG,CAAA,GAAA,yCAAsB;IAC9C,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,OAAO,CAAA,GAAA,sBAAA,EACL,CAAA,GAAA,wCAAkB,GAClB;eACE;qBACA;QACA,YAAY;IACd,GACA;QACE,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,UAAE,GAAG;mBAAE;YAAO,QAAQ;YAAa,UAAU;QAAE,GAAG;YAClD,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,wBAAgB,GAAG;uBACnB;uBACA;+BACA;6BACA;0CACA;YACF;SACD;QACD;KACD;AAEL","sources":["packages/column-views/src/notes.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\n\nimport { ColumnNotesProvider } from \"./units\";\n\nimport { StaticNotesColumn, SVG } from \"@macrostrat/column-components\";\nimport { useCompositeScale, useMacrostratColumnData } from \"./data-provider\";\nimport type { ReactNode } from \"react\";\n\ninterface ColumnNotesProps {\n notes: any[];\n width?: number;\n noteComponent?: any;\n paddingLeft?: number;\n deltaConnectorAttachment?: number;\n children?: ReactNode;\n}\n\nexport function ColumnNotes({\n notes,\n width = 200,\n noteComponent,\n paddingLeft = 60,\n deltaConnectorAttachment,\n children,\n}: ColumnNotesProps) {\n const { totalHeight } = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n return h(\n ColumnNotesProvider,\n {\n scale,\n totalHeight,\n pixelScale: -1,\n },\n [\n h(SVG, { width, height: totalHeight, paddingH: 4 }, [\n h(StaticNotesColumn, {\n width,\n notes,\n noteComponent,\n paddingLeft,\n deltaConnectorAttachment,\n }),\n ]),\n children,\n ],\n );\n}\n"],"names":[],"version":3,"file":"column-views.787d7696.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/data-provider/unit-selection.ts"],"sourcesContent":["import { BaseUnit } from \"@macrostrat/api-types\";\nimport h from \"@macrostrat/hyper\";\nimport { useKeyHandler } from \"@macrostrat/ui-components\";\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n ReactNode,\n RefObject,\n useRef,\n useCallback,\n} from \"react\";\nimport { createStore, StoreApi, useStore } from \"zustand\";\nimport type { RectBounds, IUnit } from \"../units/types\";\n\ntype UnitSelectDispatch = (\n unit: number | BaseUnit | null,\n target: HTMLElement | null,\n event: Event | null,\n) => void;\n\nconst UnitSelectionContext = createContext<StoreApi<UnitSelectionStore>>(null);\n\nexport function useUnitSelectionDispatch(): UnitSelectDispatch {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return () => {};\n }\n return useStore(store, (state) => state.onUnitSelected);\n}\n\nexport function useUnitSelectionStore<T>(\n selector: (state: UnitSelectionStore) => T,\n): T {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return null;\n }\n return useStore(store, selector);\n}\n\nexport function useSelectedUnit() {\n return useUnitSelectionStore((state) => state.selectedUnitData);\n}\n\ninterface UnitSelectionStore {\n selectedUnit: number | null;\n selectedUnitData: BaseUnit | null;\n overlayPosition: RectBounds | null;\n onUnitSelected: UnitSelectDispatch;\n setSelectedUnit: (unit: number | null) => void;\n}\n\nexport interface ColumnClickData {\n unitID: number | null;\n unit: BaseUnit | null;\n target: HTMLElement | null;\n height: number;\n // Room for boundary IDs eventually\n}\n\nexport function UnitSelectionProvider<T extends BaseUnit>(props: {\n children: ReactNode;\n columnRef?: RefObject<HTMLElement>;\n units: T[];\n selectedUnit: number | null;\n onClickedColumn?: (columnClickData: ColumnClickData, event: Event) => void;\n onUnitSelected?: (unitID: number | null, unit: T | null) => void;\n}) {\n const [store] = useState(() =>\n createStore<UnitSelectionStore>((set) => ({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n setSelectedUnit(selectedUnit: number | null | BaseUnit) {\n if (selectedUnit == null) {\n set({ selectedUnit: null, selectedUnitData: null });\n return;\n // If it's a number, set the selected unit\n } else if (typeof selectedUnit === \"number\") {\n set({ selectedUnit, selectedUnitData: null });\n } else if (\"unit_id\" in selectedUnit) {\n set({\n selectedUnit: selectedUnit.unit_id,\n selectedUnitData: selectedUnit,\n });\n }\n },\n onUnitSelected: (\n input: number | T | null,\n target: HTMLElement = null,\n event: PointerEvent = null,\n ) => {\n if (input == null) {\n return set({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n });\n }\n\n let unit: T | null = null;\n if (typeof input === \"number\") {\n unit = props.units.find((u) => u.unit_id === input) || null;\n } else {\n unit = input;\n }\n\n const el = props.columnRef?.current;\n let overlayPosition = null;\n\n /** This is not the natural place to get positions within the column,\n * but it will work for now.\n */\n if (props.onClickedColumn) {\n // Infer height from top and bottom height of unit (because that's passed back with the call)\n //const py = event.y;\n //const [bottom, top] = getUnitHeightRange(unit, axisType);\n //const height = Math.abs(bottom - top);\n\n /** Ideally this would be defined at the column level */\n const columnClickData: ColumnClickData = {\n unitID: unit?.unit_id,\n unit,\n target,\n height: el?.getBoundingClientRect().height || 0,\n };\n props.onClickedColumn(columnClickData, event);\n }\n\n if (unit != null && el != null && target != null) {\n const rect = el.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n overlayPosition = {\n x: targetRect.left - rect.left,\n y: targetRect.top - rect.top,\n width: targetRect.width,\n height: targetRect.height,\n };\n }\n props.onUnitSelected?.(unit?.unit_id, unit);\n\n return set({\n selectedUnit: unit?.unit_id,\n selectedUnitData: unit,\n overlayPosition,\n });\n },\n })),\n );\n\n const { units, selectedUnit } = props;\n\n useEffect(() => {\n // Synchronize store with provided props\n if (selectedUnit != null) {\n const unitData = units?.find((u) => u.unit_id === selectedUnit);\n store.setState({ selectedUnit, selectedUnitData: unitData });\n } else {\n store.setState({ selectedUnit: null, selectedUnitData: null });\n }\n }, [selectedUnit, units]);\n\n return h(UnitSelectionContext.Provider, { value: store }, props.children);\n}\n\nexport function useUnitSelectionTarget(\n unit: IUnit,\n): [React.RefObject<HTMLElement>, boolean, (evt: Event) => void] {\n const ref = useRef<HTMLElement>();\n const selectedUnit = useSelectedUnit();\n const onSelectUnit = useUnitSelectionStore((state) => state.onUnitSelected);\n const selected = selectedUnit?.unit_id == unit.unit_id;\n\n const onClick = useCallback(\n (evt: Event) => {\n if (onSelectUnit == null) return;\n onSelectUnit(unit, ref.current, evt);\n evt.stopPropagation();\n },\n [unit, onSelectUnit],\n );\n\n useEffect(() => {\n if (!selected || onSelectUnit == null) return;\n // In case we haven't set the position of the unit (if we don't have a target), set the selected unit\n onSelectUnit(unit, ref.current, null);\n\n // Scroll the unit into view\n ref.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\",\n });\n }, [selected, onSelectUnit]);\n\n return [ref, selected, onClick];\n}\n\nexport function UnitKeyboardNavigation<T extends BaseUnit>({\n units,\n}: {\n units: T[];\n}) {\n const selectedUnit = useSelectedUnit();\n const selectUnit = useUnitSelectionDispatch();\n\n const ix = units.findIndex((unit) => unit.unit_id === selectedUnit?.unit_id);\n\n const keyMap = {\n 38: ix - 1,\n 40: ix + 1,\n };\n\n useKeyHandler(\n (event) => {\n const nextIx = keyMap[event.keyCode];\n if (nextIx == null || nextIx < 0 || nextIx >= units.length) return;\n selectUnit(units[nextIx], null, null);\n event.stopPropagation();\n },\n [units, ix],\n );\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.a3fabf0f.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/facets/fossils/index.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBCollection,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport type { IUnit } from \"../../units\";\nimport { BaseMeasurementsColumn, TruncatedList } from \"../base-sample-column\";\nimport { Box, useElementSize } from \"@macrostrat/ui-components\";\nimport { InternMap } from \"d3-array\";\nimport { ColumnAxisType, ColumnSVG } from \"@macrostrat/column-components\";\nimport {\n useMacrostratColumnData,\n useCompositeScale,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./index.module.sass\";\nimport { useRef } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport { FossilDataType };\n\ninterface FossilItemProps {\n note: {\n data: PBDBCollection[];\n unit?: IUnit;\n };\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n}\n\nfunction FossilInfo(props: FossilItemProps) {\n const { note, spacing } = props;\n const { data, unit } = note;\n\n return h(TruncatedList, {\n data,\n className: \"fossil-collections\",\n itemRenderer: PBDBCollectionLink,\n });\n}\n\nfunction PBDBCollectionLink({\n data,\n}: {\n data: PBDBCollection | PBDBOccurrence;\n}) {\n /** A link to a PBDB collection that handles either an occurrence or collection object */\n return h(\n \"a.link-id\",\n {\n href: `https://paleobiodb.org/classic/basicCollectionSearch?collection_no=${data.cltn_id}`,\n },\n data.best_name ?? data.cltn_name,\n );\n}\n\nconst matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;\n\nexport function PBDBFossilsColumn({\n columnID,\n type = FossilDataType.Collections,\n}: {\n columnID: number;\n type: FossilDataType;\n}) {\n const data = useFossilData(columnID, type);\n\n return h(BaseMeasurementsColumn, {\n data,\n noteComponent: FossilInfo,\n className: \"fossil-collections\",\n matchingUnit,\n });\n}\n\nexport function PBDBOccurrencesMatrix({ columnID }) {\n /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will\n eventually be extended with first/last occurrence markers and range bars.\n */\n const data = useFossilData(columnID, FossilDataType.Occurrences) as InternMap<\n number,\n PBDBOccurrence[]\n >;\n\n // convert the data to a map\n const occurrenceMap = new Map(data);\n\n const col = useMacrostratColumnData();\n const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);\n\n const scale = useCompositeScale();\n\n const { taxonRanges } = matrix;\n\n const padding = 16;\n const spacing = 16;\n\n const taxonEntries = Array.from(taxonRanges.entries());\n //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa\n\n const width = padding * 2 + spacing * taxonEntries.length;\n\n return h(Box, { className: \"taxon-ranges\", width, height: col.totalHeight }, [\n h(TaxonOccurrenceLabels, {\n taxonEntries,\n padding,\n spacing,\n scale,\n }),\n h(\n ColumnSVG,\n {\n width: padding * 2 + spacing * taxonEntries.length,\n },\n h(\n \"g.taxa-occurrences-matrix\",\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const xPosition = padding + rowIndex * spacing;\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n }),\n ),\n ),\n ]);\n}\n\nfunction TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {\n return h(\"div.taxon-labels\", [\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const top = ranges[0]?.[0] ?? 0;\n let topPx = scale(top) - 20;\n if (topPx < 200) topPx = 0;\n\n return h(TaxonLabel, {\n top: topPx,\n left: padding + rowIndex * spacing,\n taxonName,\n });\n }),\n ]);\n}\n\nfunction TaxonLabel({ top, left, taxonName }) {\n const ref = useRef();\n const textSize = useElementSize(ref);\n const labelWidth = textSize?.height ?? 200;\n return h(\n \"div.taxon-label\",\n {\n style: {\n top: `${top}px`,\n marginLeft: `${left}px`,\n \"--label-width\": `${labelWidth}px`,\n },\n },\n h(\"div.taxon-label-inner\", h(\"div.taxon-label-text\", { ref }, taxonName)),\n );\n}\n\ntype TaxonUnitMap = Map<string, Set<number>>;\n\ninterface OccurrenceMatrixData {\n occurrenceMap: Map<number, PBDBOccurrence[]>; // Map of unit IDs to occurrences (original data)\n taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs\n taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences\n taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges\n}\n\nfunction TaxonOccurrenceEntry({\n xPosition,\n ranges,\n scale,\n name,\n}: {\n xPosition: number;\n units: Set<number>;\n}) {\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n}\n\nfunction createOccurrenceMatrix(\n units: UnitLong[],\n data: Map<number, PBDBOccurrence[]>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): OccurrenceMatrixData {\n const taxonUnitMap = new Map<string, Set<number>>();\n const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();\n\n for (const [unit_id, occurrences] of data.entries()) {\n for (const occ of occurrences) {\n const taxonName = occ.best_name ?? occ.taxon_name;\n if (!taxonUnitMap.has(taxonName)) {\n taxonUnitMap.set(taxonName, new Set());\n taxonOccurrenceMap.set(taxonName, []);\n }\n taxonUnitMap.get(taxonName).add(unit_id);\n taxonOccurrenceMap.get(taxonName).push(occ);\n }\n }\n\n // sort the taxon occurrence map by number of occurrences\n const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {\n // Sort alphabetically by taxon name\n return b[0].localeCompare(a[0]);\n });\n\n const taxonRanges = new Map<string, [number, number][]>();\n for (const [taxonName, unitSet] of taxonUnitMap.entries()) {\n taxonRanges.set(\n taxonName,\n accumulatePresenceDomains(units, unitSet, axisType),\n );\n }\n\n return {\n occurrenceMap: data,\n taxonUnitMap: new Map(sortedTaxa),\n taxonOccurrenceMap: taxonOccurrenceMap,\n taxonRanges,\n };\n}\n\nfunction accumulatePresenceDomains(\n unit: UnitLong[],\n presenceUnits: Set<number>,\n axisType: ColumnAxisType,\n): Array<[number, number]> {\n const domains: Array<[number, number]> = [];\n let currentDomain: [number, number] | null = null;\n\n for (const u of unit) {\n if (presenceUnits.has(u.unit_id)) {\n if (currentDomain == null) {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain = [u.t_pos, u.b_pos];\n } else {\n currentDomain = [u.t_age, u.b_age];\n }\n } else {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain[1] = u.b_pos;\n } else {\n currentDomain[1] = u.b_age;\n }\n }\n } else {\n if (currentDomain != null) {\n domains.push(currentDomain);\n currentDomain = null;\n }\n }\n }\n\n if (currentDomain != null) {\n domains.push(currentDomain);\n }\n\n return domains;\n}\n"],"names":[],"version":3,"file":"column-views.abeab9aa.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/age-axis.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n SVG,\n ColumnAxis,\n ColumnContext,\n ColumnAxisType,\n AgeAxis,\n} from \"@macrostrat/column-components\";\nimport { useContext } from \"react\";\nimport styles from \"./age-axis.module.sass\";\nimport { useCompositeScale, useMacrostratColumnData } from \"./data-provider\";\nimport { Parenthetical } from \"@macrostrat/data-components\";\nimport { AgeLabel } from \"./unit-details\";\nimport { PackageScaleLayoutData } from \"./prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nconst AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {\n const { pixelHeight } = useContext(ColumnContext);\n // A tick roughly every 40 pixels\n let v = Math.max(Math.round(pixelHeight / tickSpacing), 1);\n\n return h(\"g.axis\", { transform: \"translate(20 0)\" }, [\n h(ColumnAxis, {\n ticks: v,\n showDomain,\n }),\n ]);\n};\n\nexport function VerticalAxisLabel(props) {\n const { label = \"Age\", unit = \"Ma\", className, height } = props;\n return h(\n \"div.column-axis-label.age-axis-label\",\n { className, style: { height } },\n [\n label,\n \" \",\n h.if(unit)(Parenthetical, { className: \"age-axis-unit\" }, unit),\n ],\n );\n}\n\ninterface CompositeAgeAxisProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CompositeAgeAxis(rest: CompositeAgeAxisProps) {\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n return {\n key: `section-${section.section_id}`,\n ...section.scaleInfo,\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport function ApproximateHeightAxis(rest: CompositeAgeAxisProps) {\n /** Axis to show approximate height based on dynamic column scales */\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n const { scaleInfo } = section;\n if (scaleInfo.heightScale == null) {\n throw new Error(\"No height scale available for section\");\n }\n return {\n key: `section-${section.section_id}`,\n ...scaleInfo,\n scale: scaleInfo.heightScale, // Use height scale instead of age scale\n // This only works with dynamic columns\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n axisLabel: \"Approx. height\",\n axisUnit: \"m\",\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport interface CompositeStratigraphicScaleInfo extends CompositeAgeAxisProps {\n axisType: ColumnAxisType;\n axisLabel?: string;\n axisUnit?: string;\n totalHeight: number;\n packages: PackageScaleLayoutData[];\n}\n\nexport function CompositeAgeAxisCore(props: CompositeStratigraphicScaleInfo) {\n const { axisType, axisLabel, axisUnit, totalHeight, packages, ...rest } =\n props;\n\n if (axisType == ColumnAxisType.ORDINAL) {\n return null;\n }\n\n let _axisLabel: string = axisLabel ?? \"Age\";\n let _axisUnit = axisUnit ?? \"Ma\";\n if (axisType == ColumnAxisType.DEPTH) {\n _axisLabel = \"Depth\";\n _axisUnit = \"m\";\n } else if (axisType == ColumnAxisType.HEIGHT) {\n _axisLabel = \"Height\";\n _axisUnit = \"m\";\n }\n\n return h(\"div.composite-age-axis\", rest, [\n h(VerticalAxisLabel, {\n label: _axisLabel,\n unit: _axisUnit,\n height: totalHeight,\n }),\n h(\n SVG,\n {\n className: \"age-axis-column\",\n style: { width: `22px`, height: `${totalHeight}px` },\n width: 22,\n height: totalHeight,\n },\n packages.map((group, i) => {\n const { key, scale } = group;\n\n return h(AgeAxis, {\n key,\n className: \"age-axis\",\n scale,\n tickSizeOuter: 3,\n });\n }),\n ),\n ]);\n}\n\nexport function AgeCursor({ age }) {\n /** A cursor that shows the age at a specific point on the age axis. */\n const scale = useCompositeScale();\n const heightPx = scale(age);\n\n if (age == null || heightPx == null) {\n return null;\n }\n\n return h(\n \"div.age-cursor\",\n {\n style: {\n top: heightPx,\n },\n },\n [h(\"div.line\"), h(AgeLabel, { age, className: \"label\" })],\n );\n}\n"],"names":[],"version":3,"file":"column-views.adec2e4c.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA;;;;AAEE;;;;;AAGA;;;;;;;;AAOF;;;;AAEE;;;;;AAIF;;;;;;;;AAOE;;;;;AAIA;;;;;;;;AAOA","sources":["packages/column-views/src/facets/fossils/index.module.sass"],"sourcesContent":[".taxa-occurrences-matrix\n color: var(--column-text-color)\n line\n stroke: var(--column-stroke-color)\n stroke-width: 2px\n text.taxon-name\n fill: var(--column-text-color)\n transform: rotate(90deg) translate(0, 4px)\n text-anchor: end\n position: sticky\n top: 0\n\n.taxon-ranges\n position: relative\n &>svg\n position: absolute\n height: 100%\n\n.taxon-labels\n z-index: 10\n position: absolute\n width: 100%\n height: 100%\n pointer-events: none\n\n .taxon-label\n position: absolute\n height: 100%\n\n .taxon-label-inner\n position: sticky\n top: calc(var(--label-width, 200px) - 10px)\n transform: rotate(-90deg) translate(10px, 8px)\n transform-origin: bottom left\n background-color: var(--column-background-color)\n\n .taxon-label-text\n\n font-style: italic\n text-align: left\n padding: 0 8px\n max-width: 300px\n //position: sticky\n //top: 200px\n"],"names":[],"version":3,"file":"column-views.b7016f82.css.map"}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import {BaseMeasurementsColumn as $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d, TruncatedList as $c6d9d48b3424a44c$export$653e47a7a0da0f0d} from "./column-views.faacfc3c.js";
|
|
2
|
-
import $fqcIO$macrostrathyper from "@macrostrat/hyper";
|
|
3
|
-
import {useAPIResult as $fqcIO$useAPIResult} from "@macrostrat/ui-components";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function $6ff130029901daab$var$useSGPData({ col_id: col_id }) {
|
|
9
|
-
const res = (0, $fqcIO$useAPIResult)("https://dev.macrostrat.org/api/pg/sgp_unit_matches", {
|
|
10
|
-
col_id: `eq.${col_id}`
|
|
11
|
-
}, (d)=>d);
|
|
12
|
-
return res;
|
|
13
|
-
}
|
|
14
|
-
function $6ff130029901daab$export$c49cf57576706bab({ columnID: columnID, color: color = "magenta" }) {
|
|
15
|
-
const data = $6ff130029901daab$var$useSGPData({
|
|
16
|
-
col_id: columnID
|
|
17
|
-
});
|
|
18
|
-
if (data == null) return null;
|
|
19
|
-
return (0, $fqcIO$macrostrathyper)((0, $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d), {
|
|
20
|
-
data: data,
|
|
21
|
-
noteComponent: $6ff130029901daab$var$SGPSamplesNote
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
function $6ff130029901daab$var$SGPSamplesNote(props) {
|
|
25
|
-
const { note: note } = props;
|
|
26
|
-
const sgp_samples = note?.data?.sgp_samples;
|
|
27
|
-
if (sgp_samples == null || sgp_samples.length === 0) return null;
|
|
28
|
-
return (0, $fqcIO$macrostrathyper)((0, $c6d9d48b3424a44c$export$653e47a7a0da0f0d), {
|
|
29
|
-
className: "sgp-samples",
|
|
30
|
-
data: sgp_samples,
|
|
31
|
-
itemRenderer: (p)=>(0, $fqcIO$macrostrathyper)("span", p.data.name)
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
export {$6ff130029901daab$export$c49cf57576706bab as SGPMeasurementsColumn};
|
|
37
|
-
//# sourceMappingURL=column-views.e17f00d3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;AAIA,SAAS,iCAAW,UAAE,MAAM,EAAE;IAC5B,MAAM,MAAM,CAAA,GAAA,mBAAW,EACrB,sDACA;QACE,QAAQ,CAAC,GAAG,EAAE,QAAQ;IACxB,GACA,CAAC,IAAM;IAET,OAAO;AACT;AAEO,SAAS,0CAAsB,YAAE,QAAQ,SAAE,QAAQ,WAAW;IACnE,MAAM,OAAO,iCAAW;QAAE,QAAQ;IAAS;IAE3C,IAAI,QAAQ,MAAM,OAAO;IAEzB,OAAO,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,yCAAqB,GAAG;cAC/B;QACA,eAAe;IACjB;AACF;AAEA,SAAS,qCAAe,KAAK;IAC3B,MAAM,QAAE,IAAI,EAAE,GAAG;IACjB,MAAM,cAAc,MAAM,MAAM;IAEhC,IAAI,eAAe,QAAQ,YAAY,MAAM,KAAK,GAAG,OAAO;IAE5D,OAAO,CAAA,GAAA,sBAAA,EAAE,CAAA,GAAA,yCAAY,GAAG;QACtB,WAAW;QACX,MAAM;QACN,cAAc,CAAC,IAAM,CAAA,GAAA,sBAAA,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI;IAC5C;AACF","sources":["packages/column-views/src/facets/measurements/index.ts"],"sourcesContent":["import h from \"@macrostrat/hyper\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport { BaseMeasurementsColumn, TruncatedList } from \"../base-sample-column\";\n\nfunction useSGPData({ col_id }) {\n const res = useAPIResult(\n \"https://dev.macrostrat.org/api/pg/sgp_unit_matches\",\n {\n col_id: `eq.${col_id}`,\n },\n (d) => d,\n );\n return res;\n}\n\nexport function SGPMeasurementsColumn({ columnID, color = \"magenta\" }) {\n const data = useSGPData({ col_id: columnID });\n\n if (data == null) return null;\n\n return h(BaseMeasurementsColumn, {\n data,\n noteComponent: SGPSamplesNote,\n });\n}\n\nfunction SGPSamplesNote(props) {\n const { note } = props;\n const sgp_samples = note?.data?.sgp_samples;\n\n if (sgp_samples == null || sgp_samples.length === 0) return null;\n\n return h(TruncatedList, {\n className: \"sgp-samples\",\n data: sgp_samples,\n itemRenderer: (p) => h(\"span\", p.data.name),\n });\n}\n"],"names":[],"version":3,"file":"column-views.e17f00d3.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"AAAA;;;;;;AAWE;EACE;;;;;;;;EAOI;;;;EAEA;;;;;AAIN;;;;;;;;AAOE;;;;AAGJ;;;;AAIE;;;;;;;AAOE;;;;;;;AAOA;;;;AAIA;;;;;AAKA;;;;;;;;;;;AASF;;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCF;;;;AAQE;;;;;;;AAOA;;;;;;;;;AAQA;;;;AAIF;;;;AAKE;;;;AAIA;;;;AAGF;;;;;;;;;AAYE","sources":["packages/column-views/src/column.module.sass"],"sourcesContent":[".column-container, body:global(.light-mode) .column-container\n --column-background-color: var(--background-color, #fff)\n --column-stroke-color: var(--text-emphasized-color, #000)\n --column-text-color: var(--text-emphasized-color, #000)\n\n/* We have to duplicate the dark mode styles here\n because we want to set them either if the preferred\n color scheme is dark OR if dark mode is explicitly enabled.\n If dark mode is explicitly enabled, we want to override\n the media query. */\n@media (prefers-color-scheme: dark)\n body:not(:global(.light-mode)) .column-container\n --column-background-color: var(--background-color, #000)\n --column-stroke-color: var(--text-emphasized-color, #fff)\n --column-text-color: var(--text-emphasized-color, #fff)\n color-scheme: dark\n color: var(--column-text-color)\n :global\n .timescale\n color: #000\n svg pattern image\n filter: invert(100%)\n\nbody:global(.dark-mode) .column-container\n --column-background-color: var(--background-color, #000)\n --column-stroke-color: var(--text-emphasized-color, #fff)\n --column-text-color: var(--text-emphasized-color, #fff)\n color-scheme: dark\n color: var(--column-text-color)\n :global\n .timescale\n color: #000\n svg pattern image\n filter: invert(100%)\n\n.column-container\n padding-top: var(--column-padding-top)\n padding-bottom: var(--column-padding-bottom)\n padding-left: var(--column-padding-left)\n padding-right: var(--column-padding-right)\n\n.column-container :global\n .column\n display: flex\n flex-direction: row\n position: relative\n height: fit-content\n\n g.lithology-column .column-clip-frame\n stroke: none\n\n .unit\n stroke: var(--column-stroke-color)\n stroke-width: 1px\n\n .selection-overlay\n fill: var(--selection-overlay-color, red)\n fill-opacity: var(--selection-overlay-opacity, 0.5)\n\n g.lithology-column use.frame\n stroke: var(--column-stroke-color)\n stroke-width: 1.5px !important\n pointer-events: none\n\n.column-container :global .unit-label\n text-align: center\n\n.column-container :global .col-note-label\n font-size: 10px\n line-height: 9px\n border-left: none !important\n margin: 1px 0\n\n.column-container :global g.height-range\n display: none\n\n.column-container :global .note-inner\n border: none\n padding: 1px\n\n.column-container :global .frame rect\n fill: transparent\n\n.column-container :global .default-buttons\n width: 100%\n margin: 0 -10px\n\n.column-container :global div.section\n display: flex\n flex-direction: row\n\n.column-container :global .section .divisions .unit\n cursor: pointer\n\n.column-container :global(.timescale)\n width: calc(calc(1.5em + 1.5px) * var(--timescale-level-count, 4))\n --timescale-level-size: 1.5em\n\n.timescale-column\n position: relative\n\n.section-main\n position: relative\n margin-bottom: -4px\n\n.section-units-container\n position: relative\n\n.main-column\n position: relative\n\n.unconformity-labels\n position: absolute\n top: 0\n left: 0\n pointer-events: none\n\n\n.unconformity\n position: absolute\n font-family: var(--label-font-family, sans-serif)\n top: 0px\n //font-size: 12px\n font-weight: 400\n\n font-size: 0.8em\n &.giga\n font-weight: 800\n //font-size: 1em\n &.mega\n font-weight: 700\n //font-size: 0.9em\n &.large\n font-weight: 500\n &.small\n font-weight: 300\n --unit-font-weight: 400\n\n.unconformity-inner\n //border-left: 1.5px dotted var(--secondary-color)\n position: absolute\n top: 5px\n bottom: 5px\n left: -3px\n right: -2px\n display: flex\n justify-content: center\n align-items: center\n text-align: center\n\n.unconformity-text\n width: var(--column-width)\n --unit-font-style: normal\n .prefix\n font-weight: 400\n color: var(--secondary-color)\n\n\n\n.column-title-row\n display: flex\n flex-direction: row\n gap: 1em\n justify-content: space-between\n align-items: baseline\n"],"names":[],"version":3,"file":"column-views.e33ac5c9.css.map"}
|