@macrostrat/column-views 2.1.3 → 2.2.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 +12 -0
- package/dist/esm/{column-views.4ab0ec82.js → column-views.073c42da.js} +142 -76
- package/dist/esm/column-views.073c42da.js.map +1 -0
- package/dist/esm/column-views.079119f4.js +17 -0
- package/dist/esm/column-views.079119f4.js.map +1 -0
- package/dist/esm/{column-views.0e06c069.js → column-views.0859feb3.js} +52 -23
- package/dist/esm/column-views.0859feb3.js.map +1 -0
- package/dist/esm/{column-views.d099eaf9.js → column-views.0a8a07f4.js} +3 -3
- package/dist/esm/{column-views.d099eaf9.js.map → column-views.0a8a07f4.js.map} +1 -1
- package/dist/esm/{column-views.0732894f.js → column-views.0f7f6ee6.js} +2 -2
- package/dist/esm/{column-views.0732894f.js.map → column-views.0f7f6ee6.js.map} +1 -1
- package/dist/esm/{column-views.57636733.css → column-views.1151416d.css} +5 -5
- package/dist/esm/column-views.1151416d.css.map +1 -0
- package/dist/esm/{column-views.53f4160e.js → column-views.1b644998.js} +3 -3
- package/dist/esm/{column-views.53f4160e.js.map → column-views.1b644998.js.map} +1 -1
- package/dist/esm/{column-views.686d21ad.js → column-views.22ec902b.js} +4 -1
- package/dist/esm/column-views.22ec902b.js.map +1 -0
- package/dist/esm/{column-views.3b637517.js → column-views.285cbb65.js} +40 -20
- package/dist/esm/column-views.285cbb65.js.map +1 -0
- package/dist/esm/column-views.2d602a57.js +37 -0
- package/dist/esm/column-views.2d602a57.js.map +1 -0
- package/dist/esm/{column-views.b17f793f.css → column-views.321af3ae.css} +7 -1
- package/dist/esm/{column-views.686d21ad.js.map → column-views.321af3ae.css.map} +1 -1
- package/dist/esm/column-views.3a7179c4.js +137 -0
- package/dist/esm/column-views.3a7179c4.js.map +1 -0
- package/dist/esm/{column-views.49adc09e.js → column-views.3e1b8c7d.js} +2 -2
- package/dist/esm/{column-views.49adc09e.js.map → column-views.3e1b8c7d.js.map} +1 -1
- package/dist/esm/{column-views.a23b2c92.js → column-views.3f528c5c.js} +50 -22
- package/dist/esm/column-views.3f528c5c.js.map +1 -0
- package/dist/esm/{column-views.1e055ed5.js → column-views.4fd4ec92.js} +17 -3
- package/dist/esm/column-views.4fd4ec92.js.map +1 -0
- package/dist/esm/{column-views.6ca980ae.js → column-views.53186d53.js} +2 -2
- package/dist/esm/{column-views.6ca980ae.js.map → column-views.53186d53.js.map} +1 -1
- package/dist/esm/{column-views.39657bbf.js → column-views.54f8b909.js} +7 -2
- package/dist/esm/column-views.54f8b909.js.map +1 -0
- package/dist/esm/{column-views.b72918ce.css → column-views.562db43a.css} +10 -2
- package/dist/esm/column-views.562db43a.css.map +1 -0
- package/dist/esm/{column-views.9e1c82fe.js → column-views.58b891df.js} +2 -2
- package/dist/esm/{column-views.9e1c82fe.js.map → column-views.58b891df.js.map} +1 -1
- package/dist/esm/{column-views.a2cf8f33.js → column-views.5a49cd68.js} +8 -38
- package/dist/esm/column-views.5a49cd68.js.map +1 -0
- package/dist/esm/{column-views.2e0ff311.js → column-views.5d969bc5.js} +6 -58
- package/dist/esm/column-views.5d969bc5.js.map +1 -0
- package/dist/esm/{column-views.43fb819d.js → column-views.63b7e5aa.js} +3 -3
- package/dist/esm/{column-views.43fb819d.js.map → column-views.63b7e5aa.js.map} +1 -1
- package/dist/esm/column-views.6698b95a.js +108 -0
- package/dist/esm/column-views.6698b95a.js.map +1 -0
- package/dist/esm/column-views.6c644353.js +184 -0
- package/dist/esm/column-views.6c644353.js.map +1 -0
- package/dist/esm/column-views.6e7082db.js +16 -0
- package/dist/esm/column-views.6e7082db.js.map +1 -0
- package/dist/esm/column-views.70164236.js +206 -0
- package/dist/esm/column-views.70164236.js.map +1 -0
- package/dist/esm/{column-views.34a1ac4f.js → column-views.73b8ff16.js} +20 -22
- package/dist/esm/column-views.73b8ff16.js.map +1 -0
- package/dist/esm/{column-views.9771145a.js → column-views.77561197.js} +91 -55
- package/dist/esm/column-views.77561197.js.map +1 -0
- package/dist/esm/{column-views.572b70fd.js → column-views.83395185.js} +3 -3
- package/dist/esm/{column-views.572b70fd.js.map → column-views.83395185.js.map} +1 -1
- package/dist/esm/{column-views.6dc251d3.js → column-views.86a51ce7.js} +2 -2
- package/dist/esm/{column-views.6dc251d3.js.map → column-views.86a51ce7.js.map} +1 -1
- package/dist/esm/{column-views.f08929e2.js → column-views.88d63dd0.js} +5 -3
- package/dist/esm/column-views.88d63dd0.js.map +1 -0
- package/dist/esm/{column-views.3f246167.js → column-views.8c296309.js} +5 -5
- package/dist/esm/column-views.8c296309.js.map +1 -0
- package/dist/esm/{column-views.7d47a72a.js → column-views.8d24b179.js} +3 -3
- package/dist/esm/{column-views.7d47a72a.js.map → column-views.8d24b179.js.map} +1 -1
- package/dist/esm/{column-views.3d001ab8.js → column-views.986e7566.js} +7 -7
- package/dist/esm/{column-views.3d001ab8.js.map → column-views.986e7566.js.map} +1 -1
- package/dist/esm/{column-views.86619334.js → column-views.9ddbe7df.js} +2 -2
- package/dist/esm/{column-views.86619334.js.map → column-views.9ddbe7df.js.map} +1 -1
- package/dist/esm/{column-views.abe90091.js → column-views.ae7c0a2b.js} +31 -60
- package/dist/esm/column-views.ae7c0a2b.js.map +1 -0
- package/dist/esm/{column-views.9892f825.js → column-views.aecf25bc.js} +75 -42
- package/dist/esm/column-views.aecf25bc.js.map +1 -0
- package/dist/esm/column-views.b7016f82.css +54 -0
- package/dist/esm/column-views.b7016f82.css.map +1 -0
- package/dist/esm/{column-views.a5c1bbf0.js → column-views.ba0381cc.js} +2 -2
- package/dist/esm/{column-views.a5c1bbf0.js.map → column-views.ba0381cc.js.map} +1 -1
- package/dist/esm/{column-views.ff031876.js → column-views.c518ef14.js} +9 -4
- package/dist/esm/column-views.c518ef14.js.map +1 -0
- package/dist/esm/{column-views.f7523c1d.js → column-views.c92a359e.js} +2 -2
- package/dist/esm/{column-views.f7523c1d.js.map → column-views.c92a359e.js.map} +1 -1
- package/dist/esm/{column-views.cdadc5c2.js → column-views.cc733361.js} +7 -1
- package/dist/esm/column-views.cc733361.js.map +1 -0
- package/dist/esm/{column-views.4d22c21c.js → column-views.d15d8655.js} +22 -4
- package/dist/esm/column-views.d15d8655.js.map +1 -0
- package/dist/esm/{column-views.5e2dc19d.js → column-views.d261b02d.js} +3 -3
- package/dist/esm/{column-views.5e2dc19d.js.map → column-views.d261b02d.js.map} +1 -1
- package/dist/esm/{column-views.323cad41.js → column-views.d406665d.js} +5 -5
- package/dist/esm/{column-views.323cad41.js.map → column-views.d406665d.js.map} +1 -1
- package/dist/esm/{column-views.7715e35e.js → column-views.d69c4a9f.js} +3 -3
- package/dist/esm/{column-views.7715e35e.js.map → column-views.d69c4a9f.js.map} +1 -1
- package/dist/esm/{column-views.07db2ab1.js → column-views.d9c6b527.js} +15 -12
- package/dist/esm/column-views.d9c6b527.js.map +1 -0
- package/dist/esm/{column-views.b12a6374.css → column-views.e33ac5c9.css} +30 -9
- package/dist/esm/column-views.e33ac5c9.css.map +1 -0
- package/dist/esm/column-views.e3bf5384.js +15 -0
- package/dist/esm/{column-views.6d5e3098.js.map → column-views.e3bf5384.js.map} +1 -1
- package/dist/esm/{column-views.a8926321.js → column-views.e4c26185.js} +2 -2
- package/dist/esm/{column-views.a8926321.js.map → column-views.e4c26185.js.map} +1 -1
- package/dist/esm/column-views.e84bd756.js +92 -0
- package/dist/esm/column-views.e84bd756.js.map +1 -0
- package/dist/esm/column-views.ea4ebbb7.js +31 -0
- package/dist/esm/column-views.ea4ebbb7.js.map +1 -0
- package/dist/esm/column-views.ed05e233.js +13 -0
- package/dist/esm/{column-views.3729c372.js.map → column-views.ed05e233.js.map} +1 -1
- package/dist/esm/{column-views.64a84c43.js → column-views.f2fd0e4a.js} +10 -2
- package/dist/esm/column-views.f2fd0e4a.js.map +1 -0
- package/dist/esm/{column-views.103b1cb0.js → column-views.f46a0b36.js} +2 -2
- package/dist/esm/{column-views.103b1cb0.js.map → column-views.f46a0b36.js.map} +1 -1
- package/dist/esm/{column-views.d48cb0d8.js → column-views.fcf25ec6.js} +7 -1
- package/dist/esm/column-views.fcf25ec6.js.map +1 -0
- package/dist/esm/index.d.ts +235 -397
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -12
- package/dist/node/{column-views.36094762.js → column-views.01debc76.js} +2 -2
- package/dist/node/{column-views.36094762.js.map → column-views.01debc76.js.map} +1 -1
- package/dist/node/{column-views.31f57130.js → column-views.040499c9.js} +2 -2
- package/dist/node/{column-views.31f57130.js.map → column-views.040499c9.js.map} +1 -1
- package/dist/node/{column-views.50034105.js → column-views.07ff1fdf.js} +2 -2
- package/dist/node/{column-views.50034105.js.map → column-views.07ff1fdf.js.map} +1 -1
- package/dist/node/{column-views.3a55ecd7.css → column-views.0840b115.css} +2 -2
- package/dist/node/column-views.0840b115.css.map +1 -0
- package/dist/node/column-views.0b3a384e.js +2 -0
- package/dist/node/column-views.0b3a384e.js.map +1 -0
- package/dist/node/column-views.0bd15ee4.js +2 -0
- package/dist/node/column-views.0bd15ee4.js.map +1 -0
- package/dist/node/column-views.105f6ad2.js +2 -0
- package/dist/node/column-views.105f6ad2.js.map +1 -0
- package/dist/node/column-views.1261be59.js +2 -0
- package/dist/node/column-views.1261be59.js.map +1 -0
- package/dist/node/{column-views.4381c411.js → column-views.13e69859.js} +2 -2
- package/dist/node/{column-views.4381c411.js.map → column-views.13e69859.js.map} +1 -1
- package/dist/node/column-views.16f336ee.js +2 -0
- package/dist/node/column-views.16f336ee.js.map +1 -0
- package/dist/node/{column-views.c18d5bf5.js → column-views.1a7f8afd.js} +2 -2
- package/dist/node/{column-views.c18d5bf5.js.map → column-views.1a7f8afd.js.map} +1 -1
- package/dist/node/column-views.29eb25bd.css +2 -0
- package/dist/node/column-views.29eb25bd.css.map +1 -0
- package/dist/node/column-views.2bd97c2e.js +2 -0
- package/dist/node/column-views.2bd97c2e.js.map +1 -0
- package/dist/node/column-views.3b37363f.js +2 -0
- package/dist/node/column-views.3b37363f.js.map +1 -0
- package/dist/node/column-views.45296250.js +2 -0
- package/dist/node/column-views.45296250.js.map +1 -0
- package/dist/node/{column-views.0cbd4a3f.js → column-views.48a3cfa3.js} +2 -2
- package/dist/node/{column-views.0cbd4a3f.js.map → column-views.48a3cfa3.js.map} +1 -1
- package/dist/node/{column-views.42db0bb8.js → column-views.492c2c72.js} +2 -2
- package/dist/node/{column-views.42db0bb8.js.map → column-views.492c2c72.js.map} +1 -1
- package/dist/node/column-views.50a992d3.css +2 -0
- package/dist/node/column-views.50a992d3.css.map +1 -0
- package/dist/node/column-views.573cb29d.js +2 -0
- package/dist/node/column-views.573cb29d.js.map +1 -0
- package/dist/node/column-views.576e3c5a.js +2 -0
- package/dist/node/column-views.576e3c5a.js.map +1 -0
- package/dist/node/column-views.5f3b0b04.js +2 -0
- package/dist/node/column-views.5f3b0b04.js.map +1 -0
- package/dist/node/column-views.6fd5a922.js +2 -0
- package/dist/node/column-views.6fd5a922.js.map +1 -0
- package/dist/node/column-views.7150ba18.js +2 -0
- package/dist/node/column-views.7150ba18.js.map +1 -0
- package/dist/node/column-views.728c8dfc.js +2 -0
- package/dist/node/column-views.728c8dfc.js.map +1 -0
- package/dist/node/column-views.7425d37b.js +2 -0
- package/dist/node/column-views.7425d37b.js.map +1 -0
- package/dist/node/{column-views.2e4e357d.js → column-views.75582658.js} +2 -2
- package/dist/node/{column-views.2e4e357d.js.map → column-views.75582658.js.map} +1 -1
- package/dist/node/column-views.77ace3a2.js +2 -0
- package/dist/node/column-views.77ace3a2.js.map +1 -0
- package/dist/node/column-views.7f9c7448.js +2 -0
- package/dist/node/column-views.7f9c7448.js.map +1 -0
- package/dist/node/{column-views.a2274834.js → column-views.81294fb7.js} +2 -2
- package/dist/node/{column-views.a2274834.js.map → column-views.81294fb7.js.map} +1 -1
- package/dist/node/column-views.827a9894.js +2 -0
- package/dist/node/column-views.827a9894.js.map +1 -0
- package/dist/node/column-views.87b1439e.js +2 -0
- package/dist/node/column-views.87b1439e.js.map +1 -0
- package/dist/node/{column-views.e4f18ff7.js → column-views.9dda582d.js} +2 -2
- package/dist/node/{column-views.e4f18ff7.js.map → column-views.9dda582d.js.map} +1 -1
- package/dist/node/column-views.9e155f20.js +2 -0
- package/dist/node/column-views.9e155f20.js.map +1 -0
- package/dist/node/column-views.a16cd1f2.js +2 -0
- package/dist/node/column-views.a16cd1f2.js.map +1 -0
- package/dist/node/{column-views.adf9e5b3.js → column-views.a34732e7.js} +2 -2
- package/dist/node/{column-views.adf9e5b3.js.map → column-views.a34732e7.js.map} +1 -1
- package/dist/node/{column-views.f17b6142.js → column-views.a396d3ac.js} +2 -2
- package/dist/node/{column-views.f17b6142.js.map → column-views.a396d3ac.js.map} +1 -1
- package/dist/node/column-views.aae09aca.js +2 -0
- package/dist/node/column-views.aae09aca.js.map +1 -0
- package/dist/node/{column-views.db5d74bd.js → column-views.ac1b58b7.js} +2 -2
- package/dist/node/{column-views.db5d74bd.js.map → column-views.ac1b58b7.js.map} +1 -1
- package/dist/node/column-views.aef76eee.js +2 -0
- package/dist/node/column-views.aef76eee.js.map +1 -0
- package/dist/node/column-views.b64cd0ea.js +2 -0
- package/dist/node/column-views.b64cd0ea.js.map +1 -0
- package/dist/node/column-views.b6cd4360.js +2 -0
- package/dist/node/column-views.b6cd4360.js.map +1 -0
- package/dist/node/column-views.c0be1157.js +2 -0
- package/dist/node/column-views.c0be1157.js.map +1 -0
- package/dist/node/column-views.c29e9eb8.js +2 -0
- package/dist/node/column-views.c29e9eb8.js.map +1 -0
- package/dist/node/column-views.c8df6435.js +2 -0
- package/dist/node/column-views.c8df6435.js.map +1 -0
- package/dist/node/column-views.cd2a5c85.js +2 -0
- package/dist/node/column-views.cd2a5c85.js.map +1 -0
- package/dist/node/{column-views.3d220e0c.js → column-views.cd77a1d8.js} +2 -2
- package/dist/node/{column-views.3d220e0c.js.map → column-views.cd77a1d8.js.map} +1 -1
- package/dist/node/column-views.cd7b223b.css +2 -0
- package/dist/node/column-views.cd7b223b.css.map +1 -0
- package/dist/node/column-views.cf2a78c1.js +2 -0
- package/dist/node/column-views.cf2a78c1.js.map +1 -0
- package/dist/node/{column-views.c7f6fc0a.js → column-views.d529d3aa.js} +2 -2
- package/dist/node/{column-views.c7f6fc0a.js.map → column-views.d529d3aa.js.map} +1 -1
- package/dist/node/{column-views.7010a03b.js → column-views.dd972321.js} +2 -2
- package/dist/node/{column-views.7010a03b.js.map → column-views.dd972321.js.map} +1 -1
- package/dist/node/column-views.e065152e.js +2 -0
- package/dist/node/column-views.e065152e.js.map +1 -0
- package/dist/node/{column-views.6c7a40e0.js → column-views.e08f8715.js} +2 -2
- package/dist/node/{column-views.6c7a40e0.js.map → column-views.e08f8715.js.map} +1 -1
- package/dist/node/{column-views.507635e2.js → column-views.e0d9865e.js} +2 -2
- package/dist/node/column-views.e0d9865e.js.map +1 -0
- package/dist/node/column-views.e2562224.js +2 -0
- package/dist/node/column-views.e2562224.js.map +1 -0
- package/dist/node/column-views.e803e4ae.css +2 -0
- package/dist/node/column-views.e803e4ae.css.map +1 -0
- package/dist/node/column-views.edb4ba54.js +2 -0
- package/dist/node/column-views.edb4ba54.js.map +1 -0
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/package.json +14 -14
- package/src/age-axis.module.sass +4 -2
- package/src/age-axis.ts +49 -15
- package/src/age-model-overlay.ts +22 -1
- package/src/column.module.sass +32 -9
- package/src/column.ts +91 -19
- package/src/correlation-chart/main.ts +10 -2
- package/src/correlation-chart/prepare-data.ts +7 -4
- package/src/correlation-chart/stories/correlation-chart.stories.ts +26 -1
- package/src/data-provider/base.ts +33 -25
- package/src/data-provider/fetch.ts +10 -3
- package/src/data-provider/store.ts +16 -10
- package/src/facets/base-sample-column.module.sass +14 -0
- package/src/facets/base-sample-column.ts +114 -0
- package/src/facets/detrital-zircon/index.ts +31 -63
- package/src/facets/fossils/index.module.sass +43 -13
- package/src/facets/fossils/index.ts +246 -80
- package/src/facets/fossils/provider.ts +121 -25
- package/src/facets/index.ts +2 -0
- package/src/facets/measurements/index.ts +38 -0
- package/src/facets/measurements/provider.ts +80 -0
- package/src/prepare-units/composite-scale.ts +183 -155
- package/src/prepare-units/dynamic-scales.ts +298 -0
- package/src/prepare-units/helpers.ts +99 -87
- package/src/prepare-units/index.ts +77 -51
- package/src/prepare-units/types.ts +138 -0
- package/src/prepare-units/utils.ts +29 -1
- package/src/section.ts +46 -9
- package/src/unit-details/panel.module.sass +8 -1
- package/src/unit-details/panel.ts +123 -53
- package/src/unit-details/popover.ts +5 -0
- package/src/units/boxes.ts +2 -69
- package/src/units/composite.ts +3 -49
- package/src/units/selection.ts +21 -7
- package/dist/esm/column-views.07db2ab1.js.map +0 -1
- package/dist/esm/column-views.0e06c069.js.map +0 -1
- package/dist/esm/column-views.1c92b88f.js +0 -16
- package/dist/esm/column-views.1c92b88f.js.map +0 -1
- package/dist/esm/column-views.1e055ed5.js.map +0 -1
- package/dist/esm/column-views.2e0ff311.js.map +0 -1
- package/dist/esm/column-views.3048acc1.js +0 -66
- package/dist/esm/column-views.3048acc1.js.map +0 -1
- package/dist/esm/column-views.34a1ac4f.js.map +0 -1
- package/dist/esm/column-views.3729c372.js +0 -13
- package/dist/esm/column-views.39657bbf.js.map +0 -1
- package/dist/esm/column-views.3b637517.js.map +0 -1
- package/dist/esm/column-views.3f246167.js.map +0 -1
- package/dist/esm/column-views.4ab0ec82.js.map +0 -1
- package/dist/esm/column-views.4d22c21c.js.map +0 -1
- package/dist/esm/column-views.57636733.css.map +0 -1
- package/dist/esm/column-views.60dc6bfc.js +0 -108
- package/dist/esm/column-views.60dc6bfc.js.map +0 -1
- package/dist/esm/column-views.64a84c43.js.map +0 -1
- package/dist/esm/column-views.6d5e3098.js +0 -11
- package/dist/esm/column-views.9771145a.js.map +0 -1
- package/dist/esm/column-views.9892f825.js.map +0 -1
- package/dist/esm/column-views.a23b2c92.js.map +0 -1
- package/dist/esm/column-views.a2cf8f33.js.map +0 -1
- package/dist/esm/column-views.abe90091.js.map +0 -1
- package/dist/esm/column-views.b12a6374.css.map +0 -1
- package/dist/esm/column-views.b17f793f.css.map +0 -1
- package/dist/esm/column-views.b72918ce.css.map +0 -1
- package/dist/esm/column-views.c71c321c.js +0 -104
- package/dist/esm/column-views.c71c321c.js.map +0 -1
- package/dist/esm/column-views.cdadc5c2.js.map +0 -1
- package/dist/esm/column-views.d48cb0d8.js.map +0 -1
- package/dist/esm/column-views.f08929e2.js.map +0 -1
- package/dist/esm/column-views.ff031876.js.map +0 -1
- package/dist/node/column-views.0bb1ec93.js +0 -2
- package/dist/node/column-views.0bb1ec93.js.map +0 -1
- package/dist/node/column-views.13c4ea85.js +0 -2
- package/dist/node/column-views.13c4ea85.js.map +0 -1
- package/dist/node/column-views.1a0b56fc.js +0 -2
- package/dist/node/column-views.1a0b56fc.js.map +0 -1
- package/dist/node/column-views.226d0bdb.js +0 -2
- package/dist/node/column-views.226d0bdb.js.map +0 -1
- package/dist/node/column-views.2926f656.css +0 -2
- package/dist/node/column-views.2926f656.css.map +0 -1
- package/dist/node/column-views.2ab1c2f8.js +0 -2
- package/dist/node/column-views.2ab1c2f8.js.map +0 -1
- package/dist/node/column-views.3345cd7a.js +0 -2
- package/dist/node/column-views.3345cd7a.js.map +0 -1
- package/dist/node/column-views.33752461.js +0 -2
- package/dist/node/column-views.33752461.js.map +0 -1
- package/dist/node/column-views.372bbee2.js +0 -2
- package/dist/node/column-views.372bbee2.js.map +0 -1
- package/dist/node/column-views.38357d4a.js +0 -2
- package/dist/node/column-views.38357d4a.js.map +0 -1
- package/dist/node/column-views.3a55ecd7.css.map +0 -1
- package/dist/node/column-views.3eeac38d.js +0 -2
- package/dist/node/column-views.3eeac38d.js.map +0 -1
- package/dist/node/column-views.3f032518.js +0 -2
- package/dist/node/column-views.3f032518.js.map +0 -1
- package/dist/node/column-views.45168c80.js +0 -2
- package/dist/node/column-views.45168c80.js.map +0 -1
- package/dist/node/column-views.507635e2.js.map +0 -1
- package/dist/node/column-views.556e8f69.js +0 -2
- package/dist/node/column-views.556e8f69.js.map +0 -1
- package/dist/node/column-views.5f05b73f.js +0 -2
- package/dist/node/column-views.5f05b73f.js.map +0 -1
- package/dist/node/column-views.6ae7bb69.js +0 -2
- package/dist/node/column-views.6ae7bb69.js.map +0 -1
- package/dist/node/column-views.755f726e.js +0 -2
- package/dist/node/column-views.755f726e.js.map +0 -1
- package/dist/node/column-views.75b0a8f8.js +0 -2
- package/dist/node/column-views.75b0a8f8.js.map +0 -1
- package/dist/node/column-views.78d3f3c5.js +0 -2
- package/dist/node/column-views.78d3f3c5.js.map +0 -1
- package/dist/node/column-views.8cfed88b.js +0 -2
- package/dist/node/column-views.8cfed88b.js.map +0 -1
- package/dist/node/column-views.99fb74c0.js +0 -2
- package/dist/node/column-views.99fb74c0.js.map +0 -1
- package/dist/node/column-views.a501cea0.js +0 -2
- package/dist/node/column-views.a501cea0.js.map +0 -1
- package/dist/node/column-views.af275c48.js +0 -2
- package/dist/node/column-views.af275c48.js.map +0 -1
- package/dist/node/column-views.afbf351c.js +0 -2
- package/dist/node/column-views.afbf351c.js.map +0 -1
- package/dist/node/column-views.b180e8c9.js +0 -2
- package/dist/node/column-views.b180e8c9.js.map +0 -1
- package/dist/node/column-views.cd468adb.css +0 -2
- package/dist/node/column-views.cd468adb.css.map +0 -1
- package/dist/node/column-views.d6708353.js +0 -2
- package/dist/node/column-views.d6708353.js.map +0 -1
- package/dist/node/column-views.e1a43131.css +0 -2
- package/dist/node/column-views.e1a43131.css.map +0 -1
- package/dist/node/column-views.e9515ec1.js +0 -2
- package/dist/node/column-views.e9515ec1.js.map +0 -1
- package/dist/node/column-views.f15a6ed4.js +0 -2
- package/dist/node/column-views.f15a6ed4.js.map +0 -1
- package/dist/node/column-views.fc05616e.js +0 -2
- package/dist/node/column-views.fc05616e.js.map +0 -1
|
@@ -14,8 +14,12 @@ import {
|
|
|
14
14
|
Parenthetical,
|
|
15
15
|
Value,
|
|
16
16
|
} from "@macrostrat/data-components";
|
|
17
|
-
import { useMacrostratData, useMacrostratDefs } from "../data-provider";
|
|
18
17
|
import {
|
|
18
|
+
useColumnUnitsMap,
|
|
19
|
+
useMacrostratData,
|
|
20
|
+
useMacrostratDefs,
|
|
21
|
+
} from "../data-provider";
|
|
22
|
+
import type {
|
|
19
23
|
Environment,
|
|
20
24
|
UnitLong,
|
|
21
25
|
UnitLongFull,
|
|
@@ -40,7 +44,8 @@ export function UnitDetailsPanel({
|
|
|
40
44
|
]),
|
|
41
45
|
lithologyFeatures,
|
|
42
46
|
actions,
|
|
43
|
-
|
|
47
|
+
hiddenActions = null,
|
|
48
|
+
onSelectUnit,
|
|
44
49
|
columnUnits,
|
|
45
50
|
onClickItem,
|
|
46
51
|
}: {
|
|
@@ -49,10 +54,11 @@ export function UnitDetailsPanel({
|
|
|
49
54
|
showLithologyProportions?: boolean;
|
|
50
55
|
className?: string;
|
|
51
56
|
actions?: ReactNode;
|
|
57
|
+
hiddenActions?: ReactNode;
|
|
52
58
|
features?: Set<UnitDetailsFeature>;
|
|
53
59
|
lithologyFeatures?: Set<LithologyTagFeature>;
|
|
54
60
|
columnUnits?: UnitLong[];
|
|
55
|
-
|
|
61
|
+
onSelectUnit?: (unitID: number) => void;
|
|
56
62
|
onClickItem?: (item: any) => void;
|
|
57
63
|
}) {
|
|
58
64
|
const [showJSON, setShowJSON] = useState(false);
|
|
@@ -66,24 +72,27 @@ export function UnitDetailsPanel({
|
|
|
66
72
|
features,
|
|
67
73
|
lithologyFeatures,
|
|
68
74
|
onClickItem,
|
|
75
|
+
onSelectUnit,
|
|
69
76
|
});
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
let title = defaultNameFunction(unit);
|
|
73
80
|
|
|
74
|
-
let hiddenActions = null;
|
|
75
81
|
if (features.has(UnitDetailsFeature.JSONToggle)) {
|
|
76
|
-
hiddenActions = h(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
hiddenActions = h([
|
|
83
|
+
h(Button, {
|
|
84
|
+
icon: "code",
|
|
85
|
+
small: true,
|
|
86
|
+
minimal: true,
|
|
87
|
+
key: "json-view-toggle",
|
|
88
|
+
className: classNames("json-view-toggle", { enabled: setShowJSON }),
|
|
89
|
+
onClick(evt) {
|
|
90
|
+
setShowJSON(!showJSON);
|
|
91
|
+
evt.stopPropagation();
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
hiddenActions,
|
|
95
|
+
]);
|
|
87
96
|
}
|
|
88
97
|
|
|
89
98
|
return h("div.unit-details-panel", { className }, [
|
|
@@ -114,15 +123,13 @@ export function LegendPanelHeader({
|
|
|
114
123
|
return h("header.legend-panel-header", [
|
|
115
124
|
h("div.title-container", [
|
|
116
125
|
h.if(title != null)("h3", title),
|
|
117
|
-
h.if(hiddenActions != null
|
|
126
|
+
h.if(hiddenActions != null)(
|
|
118
127
|
"span.hidden-actions-container",
|
|
119
|
-
h("div.hidden-actions",
|
|
120
|
-
h.if(id != null)("code.unit-id", id),
|
|
121
|
-
h.if(hiddenActions != null)([hiddenActions]),
|
|
122
|
-
]),
|
|
128
|
+
h("div.hidden-actions", hiddenActions),
|
|
123
129
|
),
|
|
124
130
|
]),
|
|
125
131
|
h("div.spacer"),
|
|
132
|
+
h.if(id != null)("code.unit-id", id),
|
|
126
133
|
h.if(actions != null)(ButtonGroup, { minimal: true }, actions),
|
|
127
134
|
h.if(onClose != null)(Button, {
|
|
128
135
|
icon: "cross",
|
|
@@ -145,7 +152,7 @@ export enum UnitDetailsFeature {
|
|
|
145
152
|
|
|
146
153
|
function UnitDetailsContent({
|
|
147
154
|
unit,
|
|
148
|
-
|
|
155
|
+
onSelectUnit,
|
|
149
156
|
columnUnits,
|
|
150
157
|
lithologyFeatures = new Set([
|
|
151
158
|
LithologyTagFeature.Proportion,
|
|
@@ -159,7 +166,7 @@ function UnitDetailsContent({
|
|
|
159
166
|
getItemHref,
|
|
160
167
|
}: {
|
|
161
168
|
unit: UnitLong;
|
|
162
|
-
|
|
169
|
+
onSelectUnit?: (unitID: number) => void;
|
|
163
170
|
columnUnits?: UnitLong[];
|
|
164
171
|
lithologyFeatures?: Set<LithologyTagFeature>;
|
|
165
172
|
features?: Set<UnitDetailsFeature>;
|
|
@@ -269,12 +276,20 @@ function UnitDetailsContent({
|
|
|
269
276
|
h(
|
|
270
277
|
DataField,
|
|
271
278
|
{ label: "Above" },
|
|
272
|
-
h(UnitIDList, {
|
|
279
|
+
h(UnitIDList, {
|
|
280
|
+
units: unit.units_above,
|
|
281
|
+
onSelectUnit,
|
|
282
|
+
showNames: true,
|
|
283
|
+
}),
|
|
273
284
|
),
|
|
274
285
|
h(
|
|
275
286
|
DataField,
|
|
276
287
|
{ label: "Below" },
|
|
277
|
-
h(UnitIDList, {
|
|
288
|
+
h(UnitIDList, {
|
|
289
|
+
units: unit.units_below,
|
|
290
|
+
onSelectUnit,
|
|
291
|
+
showNames: true,
|
|
292
|
+
}),
|
|
278
293
|
),
|
|
279
294
|
]),
|
|
280
295
|
colorSwatch,
|
|
@@ -529,6 +544,20 @@ function enhanceLithologies(
|
|
|
529
544
|
});
|
|
530
545
|
}
|
|
531
546
|
|
|
547
|
+
export function ClickableText({
|
|
548
|
+
onClick,
|
|
549
|
+
className,
|
|
550
|
+
children,
|
|
551
|
+
}: {
|
|
552
|
+
onClick: () => void;
|
|
553
|
+
className?: string;
|
|
554
|
+
children: ReactNode;
|
|
555
|
+
}) {
|
|
556
|
+
/** An optionally clickable text element */
|
|
557
|
+
const tag = onClick != null ? "a" : "span";
|
|
558
|
+
return h(tag, { onClick, className }, children);
|
|
559
|
+
}
|
|
560
|
+
|
|
532
561
|
export function Identifier({
|
|
533
562
|
id,
|
|
534
563
|
onClick,
|
|
@@ -539,51 +568,92 @@ export function Identifier({
|
|
|
539
568
|
className?: string;
|
|
540
569
|
}) {
|
|
541
570
|
/** An item that displays a numeric identifier, optionally clickable */
|
|
542
|
-
const
|
|
571
|
+
const _onClick = onClick != null ? () => onClick(id) : null;
|
|
572
|
+
|
|
543
573
|
return h(
|
|
544
|
-
|
|
574
|
+
ClickableText,
|
|
545
575
|
{
|
|
546
|
-
onClick
|
|
547
|
-
|
|
548
|
-
},
|
|
549
|
-
className: classNames(
|
|
550
|
-
"identifier",
|
|
551
|
-
{ clickable: onClick != null },
|
|
552
|
-
className,
|
|
553
|
-
),
|
|
576
|
+
onClick: _onClick,
|
|
577
|
+
className: classNames("identifier", className),
|
|
554
578
|
},
|
|
555
579
|
id,
|
|
556
580
|
);
|
|
557
581
|
}
|
|
558
582
|
|
|
559
|
-
|
|
560
|
-
|
|
583
|
+
type UnitInfo = {
|
|
584
|
+
unitID: number;
|
|
585
|
+
colID?: number;
|
|
586
|
+
name?: string;
|
|
587
|
+
};
|
|
561
588
|
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
589
|
+
function UnitIDList({ units, onSelectUnit, showNames = false }) {
|
|
590
|
+
const unitsMap = useColumnUnitsMap();
|
|
591
|
+
|
|
592
|
+
const extUnits: UnitInfo[] = useMemo(() => {
|
|
593
|
+
const u1 = units.filter((d) => d != 0);
|
|
594
|
+
if (showNames) {
|
|
595
|
+
return u1.map((unitID) => {
|
|
596
|
+
const unitData = unitsMap.get(unitID);
|
|
597
|
+
let name: string = undefined;
|
|
598
|
+
if (unitData != null) {
|
|
599
|
+
name = defaultNameFunction(unitData);
|
|
600
|
+
}
|
|
601
|
+
return {
|
|
602
|
+
unitID,
|
|
603
|
+
colID: unitData?.col_id,
|
|
604
|
+
name,
|
|
605
|
+
};
|
|
606
|
+
});
|
|
607
|
+
} else {
|
|
608
|
+
return u1.map((unitID) => ({ unitID }));
|
|
609
|
+
}
|
|
610
|
+
}, [units, unitsMap]);
|
|
565
611
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
tag = "a";
|
|
612
|
+
if (extUnits.length === 0) {
|
|
613
|
+
return h("span.no-units", "None");
|
|
569
614
|
}
|
|
570
615
|
|
|
571
616
|
return h(
|
|
572
617
|
ItemList,
|
|
573
|
-
{ className: "
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
onClick() {
|
|
578
|
-
selectUnit?.(unitID);
|
|
579
|
-
},
|
|
580
|
-
key: unitID,
|
|
581
|
-
id: unitID,
|
|
582
|
-
});
|
|
583
|
-
}),
|
|
618
|
+
{ className: "units-list" },
|
|
619
|
+
extUnits.map((info) =>
|
|
620
|
+
h("span.item", h(UnitIdentifier, { ...info, onSelectUnit })),
|
|
621
|
+
),
|
|
584
622
|
);
|
|
585
623
|
}
|
|
586
624
|
|
|
625
|
+
function UnitIdentifier({
|
|
626
|
+
unitID,
|
|
627
|
+
colID,
|
|
628
|
+
name,
|
|
629
|
+
onSelectUnit,
|
|
630
|
+
}: UnitInfo & { onSelectUnit?: (unitID: number) => void }) {
|
|
631
|
+
const onClick = useMemo(() => {
|
|
632
|
+
if (onSelectUnit == null) return null;
|
|
633
|
+
return () => {
|
|
634
|
+
onSelectUnit(unitID);
|
|
635
|
+
};
|
|
636
|
+
}, [onSelectUnit]);
|
|
637
|
+
|
|
638
|
+
if (name != null) {
|
|
639
|
+
return h(
|
|
640
|
+
ClickableText,
|
|
641
|
+
{
|
|
642
|
+
className: "unit-name",
|
|
643
|
+
onClick,
|
|
644
|
+
},
|
|
645
|
+
name,
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
return h(Identifier, {
|
|
650
|
+
className: "unit-id",
|
|
651
|
+
onClick,
|
|
652
|
+
key: unitID,
|
|
653
|
+
id: unitID,
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
|
|
587
657
|
function IntervalProportions({ unit, onClickItem }) {
|
|
588
658
|
const i0 = unit.b_int_id;
|
|
589
659
|
const i1 = unit.t_int_id;
|
|
@@ -54,6 +54,7 @@ function InteractionBarrier({ children }) {
|
|
|
54
54
|
|
|
55
55
|
export function UnitSelectionPopover() {
|
|
56
56
|
const unit = useSelectedUnit();
|
|
57
|
+
const selectUnit = useUnitSelectionStore((state) => state.onUnitSelected);
|
|
57
58
|
const position = useUnitSelectionStore((state) => state.overlayPosition);
|
|
58
59
|
if (unit == null) {
|
|
59
60
|
return null;
|
|
@@ -76,6 +77,10 @@ export function UnitSelectionPopover() {
|
|
|
76
77
|
unit,
|
|
77
78
|
showLithologyProportions: true,
|
|
78
79
|
className: "legend-panel",
|
|
80
|
+
onSelectUnit: (id: number) => {
|
|
81
|
+
console.log("Selected unit in popover:", id);
|
|
82
|
+
selectUnit(id, null, null);
|
|
83
|
+
},
|
|
79
84
|
}),
|
|
80
85
|
),
|
|
81
86
|
);
|
package/src/units/boxes.ts
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
PatternDefsProvider,
|
|
7
7
|
useColumn,
|
|
8
8
|
useGeologicPattern,
|
|
9
|
+
zigZagBoxPath,
|
|
9
10
|
} from "@macrostrat/column-components";
|
|
10
11
|
import { SizeAwareLabel, Clickable } from "@macrostrat/ui-components";
|
|
11
12
|
import hyper from "@macrostrat/hyper";
|
|
@@ -18,7 +19,6 @@ import classNames from "classnames";
|
|
|
18
19
|
import { getUnitHeightRange } from "../prepare-units/utils";
|
|
19
20
|
import { useLithologies } from "../data-provider";
|
|
20
21
|
import { getMixedUnitColor } from "./colors";
|
|
21
|
-
import { path } from "d3-path";
|
|
22
22
|
import type { RectBounds } from "./types";
|
|
23
23
|
|
|
24
24
|
const h = hyper.styled(styles);
|
|
@@ -45,9 +45,7 @@ interface UnitProps extends Clickable, Partial<RectBounds>, UnitRectOptions {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
export interface LabeledUnitProps
|
|
48
|
-
extends UnitRectOptions,
|
|
49
|
-
Clickable,
|
|
50
|
-
Partial<RectBounds> {
|
|
48
|
+
extends UnitRectOptions, Clickable, Partial<RectBounds> {
|
|
51
49
|
division: IUnit;
|
|
52
50
|
patternID?: string | number;
|
|
53
51
|
label: string;
|
|
@@ -162,8 +160,6 @@ function Unit(props: UnitProps) {
|
|
|
162
160
|
|
|
163
161
|
const [ref, selected, onClick] = useUnitSelectionTarget(d);
|
|
164
162
|
|
|
165
|
-
//const key = `unit-${d.unit_id}`;
|
|
166
|
-
|
|
167
163
|
return h(
|
|
168
164
|
"g.unit",
|
|
169
165
|
{
|
|
@@ -236,69 +232,6 @@ const UnitRect = forwardRef((props: UnitRectProps, ref) => {
|
|
|
236
232
|
}
|
|
237
233
|
});
|
|
238
234
|
|
|
239
|
-
function zigZagBoxPath(x, y, width, height, top: boolean, bottom: boolean) {
|
|
240
|
-
const zigZagWidth = 10;
|
|
241
|
-
const zigZagHeight = 4;
|
|
242
|
-
|
|
243
|
-
const d = path();
|
|
244
|
-
|
|
245
|
-
const nZigZags = Math.floor(width / zigZagWidth - 0.5);
|
|
246
|
-
const _zigZagWidth = width / (nZigZags + 0.5);
|
|
247
|
-
|
|
248
|
-
d.moveTo(x, y);
|
|
249
|
-
let dy = zigZagHeight / 2;
|
|
250
|
-
// Each zig-zag consists of a short outward motion
|
|
251
|
-
let dx = _zigZagWidth / 4;
|
|
252
|
-
|
|
253
|
-
let cx = x;
|
|
254
|
-
let cy = y;
|
|
255
|
-
|
|
256
|
-
const doZigZag = (last = false) => {
|
|
257
|
-
cx += dx;
|
|
258
|
-
cy -= dy;
|
|
259
|
-
d.lineTo(cx, cy);
|
|
260
|
-
let scalar = last ? 1 : 2;
|
|
261
|
-
cx += dx * scalar;
|
|
262
|
-
cy += dy * scalar;
|
|
263
|
-
d.lineTo(cx, cy);
|
|
264
|
-
cx += dx;
|
|
265
|
-
cy -= dy;
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
if (top) {
|
|
269
|
-
// Move to the offset
|
|
270
|
-
//d.lineTo(cx, y);
|
|
271
|
-
// Draw the zig-zags
|
|
272
|
-
for (let i = 0; i < nZigZags; i++) {
|
|
273
|
-
doZigZag();
|
|
274
|
-
}
|
|
275
|
-
// Draw the last half zig-zag
|
|
276
|
-
doZigZag(true);
|
|
277
|
-
}
|
|
278
|
-
// Draw the right edge
|
|
279
|
-
d.lineTo(x + width, y);
|
|
280
|
-
d.lineTo(x + width, y + height);
|
|
281
|
-
|
|
282
|
-
if (bottom) {
|
|
283
|
-
dx = -dx;
|
|
284
|
-
dy = -dy;
|
|
285
|
-
cx = x + width;
|
|
286
|
-
cy = y + height;
|
|
287
|
-
|
|
288
|
-
for (let i = 0; i < nZigZags; i++) {
|
|
289
|
-
doZigZag();
|
|
290
|
-
}
|
|
291
|
-
doZigZag(true);
|
|
292
|
-
}
|
|
293
|
-
// Draw the last line to the left edge
|
|
294
|
-
d.lineTo(x, y + height);
|
|
295
|
-
// Draw the left edge
|
|
296
|
-
d.closePath();
|
|
297
|
-
|
|
298
|
-
// Now render the path;
|
|
299
|
-
return d.toString();
|
|
300
|
-
}
|
|
301
|
-
|
|
302
235
|
function LabeledUnit(props: LabeledUnitProps) {
|
|
303
236
|
const {
|
|
304
237
|
division,
|
package/src/units/composite.ts
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
import { BaseUnit } from "@macrostrat/api-types";
|
|
17
17
|
import { LabeledUnit, UnitBoxes } from "./boxes";
|
|
18
18
|
import styles from "./composite.module.sass";
|
|
19
|
-
import { useMacrostratColumnData } from "../data-provider";
|
|
19
|
+
import { useCompositeScale, useMacrostratColumnData } from "../data-provider";
|
|
20
20
|
import { useUnitSelectionDispatch } from "../units";
|
|
21
21
|
|
|
22
22
|
const h = hyperStyled(styles);
|
|
@@ -157,13 +157,12 @@ export function SectionLabelsColumn(props: ICompositeUnitProps) {
|
|
|
157
157
|
shouldRenderNote,
|
|
158
158
|
} = props;
|
|
159
159
|
|
|
160
|
-
const {
|
|
160
|
+
const { totalHeight, axisType } = useMacrostratColumnData();
|
|
161
|
+
const _compositeScale = useCompositeScale();
|
|
161
162
|
|
|
162
163
|
const unlabeledUnits = useContext(UnlabeledDivisionsContext);
|
|
163
164
|
const unitsToLabel = noteMode == "unlabeled" ? unlabeledUnits : undefined;
|
|
164
165
|
|
|
165
|
-
const _compositeScale = compositeScale(sections);
|
|
166
|
-
|
|
167
166
|
const selectUnit = useUnitSelectionDispatch();
|
|
168
167
|
|
|
169
168
|
return h("div.section-labels-column", [
|
|
@@ -199,57 +198,12 @@ export function SectionLabelsColumn(props: ICompositeUnitProps) {
|
|
|
199
198
|
]);
|
|
200
199
|
}
|
|
201
200
|
|
|
202
|
-
type CompositeScaleOpts = {
|
|
203
|
-
clamped?: boolean;
|
|
204
|
-
};
|
|
205
|
-
|
|
206
201
|
export interface CompositeColumnScale {
|
|
207
202
|
(val: number): number;
|
|
208
203
|
copy(): CompositeColumnScale;
|
|
209
204
|
domain(): number[];
|
|
210
205
|
}
|
|
211
206
|
|
|
212
|
-
export function compositeScale(
|
|
213
|
-
sections,
|
|
214
|
-
opts: CompositeScaleOpts = {},
|
|
215
|
-
): CompositeColumnScale {
|
|
216
|
-
/** A basic composite scale that works across all sections. This isn't a fully featured,
|
|
217
|
-
* contiuous D3 scale, but it shares enough attributes to be useful for
|
|
218
|
-
* laying out notes.
|
|
219
|
-
*/
|
|
220
|
-
const { clamped = true } = opts;
|
|
221
|
-
|
|
222
|
-
const scales = sections.map((group) => {
|
|
223
|
-
const { scaleInfo } = group;
|
|
224
|
-
return scaleInfo.scale.copy().clamp(clamped);
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
let baseScale: any = (val) => {
|
|
228
|
-
// Find the scale for the section that contains the value
|
|
229
|
-
const scale = scales.find((scale) => {
|
|
230
|
-
return scale.domain()[0] <= val && val <= scale.domain()[1];
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
if (scale) {
|
|
234
|
-
return scale(val);
|
|
235
|
-
} else {
|
|
236
|
-
// return nan
|
|
237
|
-
return NaN;
|
|
238
|
-
}
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
baseScale.copy = () => {
|
|
242
|
-
return baseScale;
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
baseScale.domain = () => {
|
|
246
|
-
// Return a domain that covers all sections
|
|
247
|
-
return [scales[0].domain()[0], scales[scales.length - 1].domain()[1]];
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
return baseScale as CompositeColumnScale;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
207
|
export function ColumnNotesProvider(props) {
|
|
254
208
|
// A fake column axis provider that allows scales to cross
|
|
255
209
|
const { children, scale, totalHeight, pixelScale } = props;
|
package/src/units/selection.ts
CHANGED
|
@@ -10,17 +10,12 @@ import {
|
|
|
10
10
|
RefObject,
|
|
11
11
|
useRef,
|
|
12
12
|
useCallback,
|
|
13
|
-
MouseEvent,
|
|
14
13
|
} from "react";
|
|
15
14
|
import { createStore, StoreApi, useStore } from "zustand";
|
|
16
15
|
import type { RectBounds, IUnit } from "./types";
|
|
17
|
-
import {
|
|
18
|
-
getUnitHeightRange,
|
|
19
|
-
useMacrostratColumnData,
|
|
20
|
-
} from "@macrostrat/column-views";
|
|
21
16
|
|
|
22
17
|
type UnitSelectDispatch = (
|
|
23
|
-
unit: BaseUnit | null,
|
|
18
|
+
unit: number | BaseUnit | null,
|
|
24
19
|
target: HTMLElement | null,
|
|
25
20
|
event: Event | null,
|
|
26
21
|
) => void;
|
|
@@ -92,7 +87,26 @@ export function UnitSelectionProvider<T extends BaseUnit>(props: {
|
|
|
92
87
|
});
|
|
93
88
|
}
|
|
94
89
|
},
|
|
95
|
-
onUnitSelected: (
|
|
90
|
+
onUnitSelected: (
|
|
91
|
+
input: number | T | null,
|
|
92
|
+
target: HTMLElement = null,
|
|
93
|
+
event: PointerEvent = null,
|
|
94
|
+
) => {
|
|
95
|
+
if (input == null) {
|
|
96
|
+
return set({
|
|
97
|
+
selectedUnit: null,
|
|
98
|
+
selectedUnitData: null,
|
|
99
|
+
overlayPosition: null,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let unit: T | null = null;
|
|
104
|
+
if (typeof input === "number") {
|
|
105
|
+
unit = props.units.find((u) => u.unit_id === input) || null;
|
|
106
|
+
} else {
|
|
107
|
+
unit = input;
|
|
108
|
+
}
|
|
109
|
+
|
|
96
110
|
const el = props.columnRef?.current;
|
|
97
111
|
let overlayPosition = null;
|
|
98
112
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/correlation-chart/main.ts"],"sourcesContent":["/** Correlation chart */\nimport {\n UnitSelectionProvider,\n UnitKeyboardNavigation,\n useUnitSelectionStore,\n} from \"../units\";\nimport { UnitSelectionPopover } from \"../unit-details\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMemo, useRef } from \"react\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { CompositeTimescaleCore } from \"../section\";\nimport classNames from \"classnames\";\nimport {\n findLaterallyExtensiveUnits,\n splitStratIntoBoxes,\n UnitGroupBox,\n CorrelationChartSettings,\n buildCorrelationChartData,\n} from \"./prepare-data\";\nimport {\n CompositeAgeAxisCore,\n CompositeStratigraphicScaleInfo,\n} from \"../age-axis\";\nimport {\n ColumnAxisType,\n ColumnProvider,\n SVG,\n} from \"@macrostrat/column-components\";\nimport { ColoredUnitComponent } from \"../units\";\nimport { UnitBoxes } from \"../units/boxes\";\nimport { ExtUnit } from \"../prepare-units/helpers\";\nimport { ColumnContainer } from \"../column\";\nimport { ColumnData } from \"../data-provider\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\n\nconst h = hyper.styled(styles);\n\nexport interface CorrelationChartProps extends CorrelationChartSettings {\n data: ColumnData[];\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n unconformityLabels?: boolean;\n selectedUnit?: number | null;\n showUnitPopover?: boolean;\n unitComponent?: any;\n onUnitSelected?: (unitID: number | null, unit: BaseUnit | null) => void;\n}\n\nexport function CorrelationChart({\n data,\n columnSpacing = 0,\n columnWidth = 130,\n unconformityLabels = true,\n showUnitPopover = true,\n selectedUnit,\n onUnitSelected,\n unitComponent,\n ...scaleProps\n}: CorrelationChartProps) {\n const defaultScaleProps = {\n targetUnitHeight: 10,\n unconformityHeight: 60,\n minSectionHeight: 60,\n collapseSmallUnconformities: true,\n };\n\n const chartData = useMemo(() => {\n if (!data) return null;\n return buildCorrelationChartData(data, {\n ...defaultScaleProps,\n ...scaleProps,\n });\n }, [data, ...Object.values(scaleProps)]);\n\n const columnRef = useRef(null);\n\n // A flattened units array is used to support keyboard navigation\n const units = useMemo(() => {\n return data?.map((d0) => d0.units).flat() ?? [];\n }, [data]);\n\n const inDarkMode = useInDarkMode();\n\n const className = classNames({\n \"dark-mode\": inDarkMode,\n });\n\n if (chartData == null) {\n return null;\n }\n\n const { packages, scaleInfo, nColumns } = chartData;\n\n const mainWidth = (columnWidth + columnSpacing) * nColumns;\n\n return h(\n ColumnContainer,\n { className: \"correlation-diagram\" },\n h(\n UnitSelectionProvider,\n { columnRef, selectedUnit, onUnitSelected, units },\n h(ChartArea, [\n h(TimescaleColumn, {\n key: \"timescale\",\n scaleInfo,\n unconformityLabels,\n }),\n h(\"div.main-chart\", { ref: columnRef }, [\n h(\n SVG,\n {\n className,\n innerWidth: mainWidth,\n height: scaleInfo.totalHeight,\n paddingH: 4,\n },\n packages.map((pkg, i) => {\n const { offset, domain, pixelScale, key } = scaleInfo.packages[i];\n return h(Package, {\n columnData: pkg.columnData,\n key,\n columnWidth,\n columnSpacing,\n offset,\n domain,\n pixelScale,\n unitComponent,\n });\n }),\n ),\n h.if(showUnitPopover)(UnitSelectionPopover),\n // Navigation only works within a column for now...\n h(UnitKeyboardNavigation, { units }),\n ]),\n ]),\n ),\n );\n}\n\nfunction Package({\n columnData,\n columnSpacing,\n columnWidth,\n unitComponent,\n offset,\n domain,\n pixelScale,\n}) {\n return h(\"g.package\", { transform: `translate(0 ${offset})` }, [\n // Disable the SVG overlay for now\n //h(PackageSVGOverlay, { data, columnSpacing }),\n h(\"g.column-units\", [\n columnData.map((data, i) => {\n return h(Column, {\n units: data.units,\n unitComponent,\n width: columnWidth,\n key: i,\n domain,\n pixelScale,\n offsetLeft: i * (columnWidth + columnSpacing),\n });\n }),\n ]),\n ]);\n}\n\ninterface ColumnProps {\n units: ExtUnit[];\n unitComponent?: React.FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n offsetLeft?: number;\n domain: [number, number];\n pixelScale: number;\n}\n\nfunction Column(props: ColumnProps) {\n const {\n units,\n width = 150,\n offsetLeft,\n domain,\n pixelScale,\n unitComponent = ColoredUnitComponent,\n } = props;\n\n const columnWidth = width;\n\n if (units.length == 0) {\n return null;\n }\n\n return h(\n \"g.section\",\n {\n transform: `translate(${offsetLeft} 0)`,\n },\n h(\n ColumnProvider,\n {\n // Need to tighten up types here...\n divisions: units as any[],\n range: domain,\n pixelsPerMeter: pixelScale, // Actually pixels per myr\n axisType: ColumnAxisType.AGE,\n },\n h(UnitBoxes, {\n unitComponent,\n unitComponentProps: {\n nColumns: 2,\n width: columnWidth,\n showLabel: false,\n },\n }),\n ),\n );\n}\n\nfunction PackageSVGOverlay({ data, columnWidth = 100, columnSpacing = 0 }) {\n const { b_age, t_age, bestPixelScale, columnData } = data;\n\n const width = (columnWidth + columnSpacing) * columnData.length;\n const height = Math.ceil((b_age - t_age) * bestPixelScale) + 2;\n\n const extensiveUnits = findLaterallyExtensiveUnits(data);\n\n const scale = (val: number) => {\n return (val - t_age) * bestPixelScale;\n };\n\n return h(\n \"div.package-overlay\",\n { style: { width, height } },\n extensiveUnits.map((d) => {\n return h(LaterallyExtensiveUnit, {\n data: d,\n scale,\n pixelScale: bestPixelScale,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction LaterallyExtensiveUnit({ data, scale, pixelScale, columnSpacing }) {\n const { b_age, t_age, strat_name_long, units } = data;\n // Build boxes by column groups\n const boxes: UnitGroupBox[] = splitStratIntoBoxes(data);\n\n return h(\n \"div.laterally-extensive-unit\",\n boxes.map((d, i) => {\n return h(StratColSpan, {\n scale,\n data: d,\n pixelScale,\n key: i,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction StratColSpan({\n data,\n scale,\n columnWidth = 100,\n columnSpacing = 0,\n pixelScale = 1,\n}) {\n const { startCol, endCol, strat_name_long, t_age, b_age } = data;\n const top = scale(t_age);\n const left = startCol * (columnWidth + columnSpacing);\n const width = (endCol - startCol + 1) * (columnWidth + columnSpacing);\n const height = (b_age - t_age) * pixelScale;\n return h(\n \"div.strat-col-span\",\n { style: { top, height, width, left } },\n strat_name_long,\n );\n}\n\nfunction ChartArea({ children }) {\n const setSelectedUnit = useUnitSelectionStore(\n (state) => state.setSelectedUnit,\n );\n\n return h(\n \"div.correlation-chart-inner\",\n {\n onClick() {\n setSelectedUnit(null);\n },\n },\n children,\n );\n}\n\ninterface TimescaleColumnProps {\n scaleInfo: CompositeStratigraphicScaleInfo;\n showLabels?: boolean;\n unconformityLabels?: boolean;\n}\n\nfunction TimescaleColumn(props: TimescaleColumnProps) {\n const { scaleInfo, unconformityLabels = true } = props;\n return h(\"div.column-container.age-axis-container\", [\n h(CompositeAgeAxisCore, { ...scaleInfo }),\n h(CompositeTimescaleCore, { ...scaleInfo, unconformityLabels }),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.07db2ab1.js.map"}
|
|
@@ -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 { Timescale, TimescaleOrientation } from \"@macrostrat/timescale\";\nimport { ColumnAxisType, SVG } from \"@macrostrat/column-components\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./column.module.sass\";\nimport type { ExtUnit } from \"./prepare-units/helpers\";\nimport { PackageScaleLayoutData } from \"./prepare-units/composite-scale\";\nimport {\n useMacrostratColumnData,\n useMacrostratUnits,\n MacrostratColumnProvider,\n} from \"./data-provider\";\nimport { Duration } from \"./unit-details\";\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 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 }),\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 } = 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 },\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 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 { domain, pixelHeight, paddingTop, key } = 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 ageRange: domain as [number, number],\n }),\n ],\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width: \"100%\",\n sections: packages,\n className: \"unconformity-labels\",\n }),\n ]);\n}\n\nexport function UnconformityLabels(props: {\n width: string | number;\n sections: PackageScaleLayoutData[];\n className?: string;\n}) {\n const { width, sections, className } = 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 upperAge,\n lowerAge,\n style: {\n width,\n height: scaleInfo.paddingTop,\n top,\n },\n });\n }),\n );\n}\n\nfunction Unconformity({ upperAge, lowerAge, style }) {\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 return h(\"div.unconformity\", { style, className }, [\n h(\"div.unconformity-text\", h(Duration, { value: ageGap })),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.0e06c069.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 $c6d04ae22b505264$exports = {};
|
|
6
|
-
|
|
7
|
-
$parcel$export($c6d04ae22b505264$exports, "fossil-collections", () => $c6d04ae22b505264$export$33464f7dff3aaa69, (v) => $c6d04ae22b505264$export$33464f7dff3aaa69 = v);
|
|
8
|
-
$parcel$export($c6d04ae22b505264$exports, "too-many", () => $c6d04ae22b505264$export$76144d85d033d82a, (v) => $c6d04ae22b505264$export$76144d85d033d82a = v);
|
|
9
|
-
var $c6d04ae22b505264$export$33464f7dff3aaa69;
|
|
10
|
-
var $c6d04ae22b505264$export$76144d85d033d82a;
|
|
11
|
-
$c6d04ae22b505264$export$33464f7dff3aaa69 = `VC2fja_fossil-collections`;
|
|
12
|
-
$c6d04ae22b505264$export$76144d85d033d82a = `VC2fja_too-many`;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export {$c6d04ae22b505264$exports as default};
|
|
16
|
-
//# sourceMappingURL=column-views.1c92b88f.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;;AAAA,IAAA;AACA,IAAA;AADA,4CAAuC,CAAC,yBAAyB,CAAC;AAClE,4CAA6B,CAAC,eAAe,CAAC","sources":["packages/column-views/src/facets/fossils/index.module.sass"],"sourcesContent":[".fossil-collections\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.1c92b88f.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":";;;;;;;AAuBA,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,OAAO;mBACL;sBACA;yBACA;sBACA;QACF;IACF,GAAG;QAAC;QAAO;QAAU;QAAa;KAAS;IAE3C,OAAO,CAAA,GAAA,sBAAA,EAAE,kDAA4B,QAAQ,EAAE;eAAE;IAAM,GAAG;AAC5D;AAEO,SAAS;IACd,MAAM,MAAM,CAAA,GAAA,iBAAS,EAAE;IACvB,IAAI,CAAC,KACH,MAAM,IAAI,MACR;IAGJ,OAAO;AACT;AAEO,SAAS;IACd,OAAO,4CAA0B,KAAK;AACxC;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 {\n createContext,\n useContext,\n ReactNode,\n useMemo,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n createCompositeScale,\n PackageLayoutData,\n CompositeColumnScale,\n} from \"../prepare-units/composite-scale\";\nimport { ExtUnit } from \"../prepare-units/helpers\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\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 /** 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 return {\n units,\n sections,\n totalHeight,\n axisType,\n };\n }, [units, sections, totalHeight, axisType]);\n\n return h(MacrostratColumnDataContext.Provider, { value }, children);\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 useMacrostratColumnData().units;\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.1e055ed5.js.map"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"mappings":"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","sources":["packages/column-views/src/units/boxes.ts"],"sourcesContent":["import {\n ColumnAxisType,\n ColumnContext,\n ColumnLayoutContext,\n ForeignObject,\n PatternDefsProvider,\n useColumn,\n useGeologicPattern,\n} from \"@macrostrat/column-components\";\nimport { SizeAwareLabel, Clickable } from \"@macrostrat/ui-components\";\nimport hyper from \"@macrostrat/hyper\";\nimport { forwardRef, ReactNode, useContext, useMemo } from \"react\";\nimport { resolveID, scalePattern } from \"./resolvers\";\nimport { useUnitSelectionTarget } from \"./selection\";\nimport { IUnit } from \"./types\";\nimport styles from \"./boxes.module.sass\";\nimport classNames from \"classnames\";\nimport { getUnitHeightRange } from \"../prepare-units/utils\";\nimport { useLithologies } from \"../data-provider\";\nimport { getMixedUnitColor } from \"./colors\";\nimport { path } from \"d3-path\";\nimport type { RectBounds } from \"./types\";\n\nconst h = hyper.styled(styles);\n\ninterface UnitRectOptions {\n widthFraction?: number;\n axisType?: ColumnAxisType;\n // Padding to create overflow for zig-zags or other ornamented edges\n padding?: number;\n}\n\ninterface UnitProps extends Clickable, Partial<RectBounds>, UnitRectOptions {\n division: IUnit;\n resolveID?(IUnit): string;\n UUID?: string;\n defaultFill?: string;\n widthFraction?: number;\n children?: ReactNode;\n className?: string;\n fill?: string;\n backgroundColor?: string;\n patternColor?: string;\n patternID?: string | number;\n}\n\nexport interface LabeledUnitProps\n extends UnitRectOptions,\n Clickable,\n Partial<RectBounds> {\n division: IUnit;\n patternID?: string | number;\n label: string;\n onLabelUpdated?(label: string, shown: boolean);\n halfWidth?: boolean;\n showLabel?: boolean;\n backgroundColor?: string;\n}\n\nfunction useUnitRect(\n division: IUnit,\n options: UnitRectOptions = {},\n): RectBounds {\n const {\n widthFraction = 1,\n axisType = ColumnAxisType.AGE,\n padding = 0,\n } = options;\n const { scale } = useContext(ColumnContext);\n const { width } = useContext(ColumnLayoutContext);\n\n const [bottomHeight, topHeight] = getUnitHeightRange(division, axisType);\n\n const y = scale(topHeight);\n const height = Math.abs(scale(bottomHeight) - y);\n\n return {\n x: width * (1 - widthFraction) - padding,\n y: y - padding,\n height: height + padding * 2,\n width: widthFraction * width + padding * 2,\n };\n}\n\nexport function MinimalUnit(props) {\n const {\n division: d,\n children,\n className,\n widthFraction = 1,\n axisType: _, // not sure why this is brought in...\n nColumns: __,\n ...baseBounds\n } = props;\n\n const { axisType } = useColumn();\n const lithMap = useLithologies();\n const bounds = {\n ...useUnitRect(d, { widthFraction, axisType }),\n ...baseBounds,\n };\n\n const backgroundColor = getMixedUnitColor(d, lithMap, null, false);\n\n const [ref, selected, onClick] = useUnitSelectionTarget(d);\n\n return h(\n \"g.unit\",\n {\n className,\n style: {\n \"--column-unit-background-color\": backgroundColor,\n \"--column-stroke-color\": backgroundColor,\n },\n },\n [\n h(\"rect.unit.background\", {\n ref,\n ...bounds,\n fill: backgroundColor,\n fillOpacity: 0.8,\n stroke: backgroundColor,\n onClick,\n }),\n h.if(selected)(\"rect.selection-overlay\", bounds),\n ],\n );\n}\n\nfunction Unit(props: UnitProps) {\n const {\n division: d,\n children,\n fill,\n defaultFill = \"transparent\",\n className,\n widthFraction = 1,\n backgroundColor,\n patternColor,\n patternID,\n axisType: _, // not sure why this is brought in...\n ...baseBounds\n } = props;\n\n const { axisType } = useColumn();\n\n const hasOverflowTop = d.t_clip_pos != null;\n const hasOverflowBottom = d.b_clip_pos != null;\n\n const bounds = {\n ...useUnitRect(d, { widthFraction, axisType }),\n ...baseBounds,\n overflowTop: hasOverflowTop,\n overflowBottom: hasOverflowBottom,\n };\n const _patternID = patternID ?? resolveID(d);\n let _fill = fill ?? useGeologicPattern(_patternID, defaultFill);\n\n const hasBackgroundColor = backgroundColor != null;\n\n const _className = classNames(className, { colored: hasBackgroundColor });\n\n const [ref, selected, onClick] = useUnitSelectionTarget(d);\n\n //const key = `unit-${d.unit_id}`;\n\n return h(\n \"g.unit\",\n {\n className: _className,\n style: {\n \"--column-unit-background-color\": backgroundColor,\n },\n },\n [\n h(UnitRect, {\n ...bounds,\n fill: backgroundColor,\n onClick,\n className: \"background\",\n }),\n h(UnitRect, {\n ref,\n ...bounds,\n fill: _fill,\n //mask,\n onClick,\n className: \"unit\",\n }),\n h.if(selected)(UnitRect, { ...bounds, className: \"selection-overlay\" }),\n //defs,\n children,\n ],\n );\n}\n\ninterface UnitRectProps {\n x: number;\n y: number;\n width: number;\n height: number;\n className: string;\n // Used to determine if the rect should have a zig-zag edge on the top or bottom\n overflowTop?: boolean;\n overflowBottom?: boolean;\n [key: string]: any;\n}\n\nconst UnitRect = forwardRef((props: UnitRectProps, ref) => {\n const {\n x,\n y,\n width,\n height,\n overflowTop = false,\n overflowBottom = false,\n ...rest\n } = props;\n\n if (!overflowTop && !overflowBottom) {\n return h(\"rect\", {\n x,\n y,\n width,\n height,\n ref,\n ...rest,\n });\n } else {\n const d = zigZagBoxPath(x, y, width, height, overflowTop, overflowBottom);\n return h(\"path\", {\n d,\n ref,\n ...rest,\n });\n }\n});\n\nfunction zigZagBoxPath(x, y, width, height, top: boolean, bottom: boolean) {\n const zigZagWidth = 10;\n const zigZagHeight = 4;\n\n const d = path();\n\n const nZigZags = Math.floor(width / zigZagWidth - 0.5);\n const _zigZagWidth = width / (nZigZags + 0.5);\n\n d.moveTo(x, y);\n let dy = zigZagHeight / 2;\n // Each zig-zag consists of a short outward motion\n let dx = _zigZagWidth / 4;\n\n let cx = x;\n let cy = y;\n\n const doZigZag = (last = false) => {\n cx += dx;\n cy -= dy;\n d.lineTo(cx, cy);\n let scalar = last ? 1 : 2;\n cx += dx * scalar;\n cy += dy * scalar;\n d.lineTo(cx, cy);\n cx += dx;\n cy -= dy;\n };\n\n if (top) {\n // Move to the offset\n //d.lineTo(cx, y);\n // Draw the zig-zags\n for (let i = 0; i < nZigZags; i++) {\n doZigZag();\n }\n // Draw the last half zig-zag\n doZigZag(true);\n }\n // Draw the right edge\n d.lineTo(x + width, y);\n d.lineTo(x + width, y + height);\n\n if (bottom) {\n dx = -dx;\n dy = -dy;\n cx = x + width;\n cy = y + height;\n\n for (let i = 0; i < nZigZags; i++) {\n doZigZag();\n }\n doZigZag(true);\n }\n // Draw the last line to the left edge\n d.lineTo(x, y + height);\n // Draw the left edge\n d.closePath();\n\n // Now render the path;\n return d.toString();\n}\n\nfunction LabeledUnit(props: LabeledUnitProps) {\n const {\n division,\n label,\n onLabelUpdated,\n widthFraction,\n showLabel = true,\n backgroundColor,\n patternID,\n axisType: _, // not sure why this is brought in...\n ...baseBounds\n } = props;\n\n const { axisType } = useColumn();\n const bounds = {\n ...useUnitRect(division, { widthFraction, axisType }),\n ...baseBounds,\n };\n const { width, height } = bounds;\n return h(\n Unit,\n {\n className: \"labeled-unit\",\n division,\n backgroundColor,\n patternID,\n ...bounds,\n },\n [\n h.if(showLabel)(\n ForeignObject,\n { ...bounds, className: \"unit-label-container\" },\n h(SizeAwareLabel, {\n className: \"unit-overlay\",\n labelClassName: \"unit-label\",\n style: { width, height },\n label,\n onVisibilityChanged(viz) {\n onLabelUpdated(label, viz);\n },\n }),\n ),\n ],\n );\n}\n\nfunction UnitBoxes<T>(props: {\n unitComponent: React.FunctionComponent<{ division: T }>;\n unitComponentProps?: any;\n transformDivisions?(divisions: T[]): T[];\n transformDivision?: (\n division: any,\n index: number,\n divisions: any[],\n ) => T | null;\n}) {\n const { unitComponent = Unit, unitComponentProps = {} } = props;\n const { divisions } = useContext(ColumnContext);\n\n if (divisions.length == 0) {\n console.warn(\"No divisions found in column context\");\n return null;\n }\n\n const children = useMemo(() => {\n return divisions.map((division: any, i) => {\n // @ts-ignore\n return h(unitComponent, {\n division,\n key: division.unit_id,\n ...unitComponentProps,\n });\n });\n }, [divisions, unitComponent, unitComponentProps]);\n\n return h(\n PatternDefsProvider,\n { resolveID, scalePattern },\n h(\"g.divisions\", children),\n );\n}\n\nexport { LabeledUnit, Unit, UnitBoxes, UnitProps };\n"],"names":[],"version":3,"file":"column-views.2e0ff311.js.map"}
|