@macrostrat/column-views 2.1.4 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/esm/{column-views.77b49a43.js → column-views.0265cf7f.js} +52 -23
  3. package/dist/esm/column-views.0265cf7f.js.map +1 -0
  4. package/dist/esm/{column-views.4ab0ec82.js → column-views.073c42da.js} +142 -76
  5. package/dist/esm/column-views.073c42da.js.map +1 -0
  6. package/dist/esm/column-views.079119f4.js +17 -0
  7. package/dist/esm/column-views.079119f4.js.map +1 -0
  8. package/dist/esm/{column-views.5e2dc19d.js → column-views.0ce9b697.js} +3 -3
  9. package/dist/esm/{column-views.5e2dc19d.js.map → column-views.0ce9b697.js.map} +1 -1
  10. package/dist/esm/{column-views.448c0687.css → column-views.1151416d.css} +5 -5
  11. package/dist/esm/column-views.1151416d.css.map +1 -0
  12. package/dist/esm/{column-views.686d21ad.js → column-views.22ec902b.js} +4 -1
  13. package/dist/esm/column-views.22ec902b.js.map +1 -0
  14. package/dist/esm/{column-views.42b89c52.js → column-views.29a551f6.js} +60 -27
  15. package/dist/esm/column-views.29a551f6.js.map +1 -0
  16. package/dist/esm/{column-views.fbc7401f.js → column-views.2aef5df8.js} +5 -5
  17. package/dist/esm/{column-views.fbc7401f.js.map → column-views.2aef5df8.js.map} +1 -1
  18. package/dist/esm/{column-views.ab0380ed.js → column-views.2e854496.js} +3 -3
  19. package/dist/esm/{column-views.ab0380ed.js.map → column-views.2e854496.js.map} +1 -1
  20. package/dist/esm/{column-views.7ca9e1cd.js → column-views.2eceafb5.js} +19 -21
  21. package/dist/esm/column-views.2eceafb5.js.map +1 -0
  22. package/dist/esm/{column-views.b17f793f.css → column-views.321af3ae.css} +7 -1
  23. package/dist/esm/{column-views.686d21ad.js.map → column-views.321af3ae.css.map} +1 -1
  24. package/dist/esm/{column-views.75ea6dbe.js → column-views.382c486d.js} +11 -6
  25. package/dist/esm/column-views.382c486d.js.map +1 -0
  26. package/dist/esm/column-views.3a7179c4.js +137 -0
  27. package/dist/esm/column-views.3a7179c4.js.map +1 -0
  28. package/dist/esm/{column-views.8e3dec90.js → column-views.413217dc.js} +2 -2
  29. package/dist/esm/column-views.413217dc.js.map +1 -0
  30. package/dist/esm/column-views.418f948f.js +15 -0
  31. package/dist/esm/{column-views.38a305a0.js.map → column-views.418f948f.js.map} +1 -1
  32. package/dist/esm/{column-views.4d22c21c.js → column-views.41e5f0dc.js} +22 -4
  33. package/dist/esm/column-views.41e5f0dc.js.map +1 -0
  34. package/dist/esm/{column-views.676cb1d3.js → column-views.469a4952.js} +3 -3
  35. package/dist/esm/{column-views.676cb1d3.js.map → column-views.469a4952.js.map} +1 -1
  36. package/dist/esm/column-views.4ed90896.js +105 -0
  37. package/dist/esm/column-views.4ed90896.js.map +1 -0
  38. package/dist/esm/{column-views.547b2730.js → column-views.53722d0a.js} +19 -15
  39. package/dist/esm/column-views.53722d0a.js.map +1 -0
  40. package/dist/esm/{column-views.39657bbf.js → column-views.54f8b909.js} +7 -2
  41. package/dist/esm/column-views.54f8b909.js.map +1 -0
  42. package/dist/esm/{column-views.b72918ce.css → column-views.562db43a.css} +10 -2
  43. package/dist/esm/column-views.562db43a.css.map +1 -0
  44. package/dist/esm/{column-views.9e1c82fe.js → column-views.58b891df.js} +2 -2
  45. package/dist/esm/{column-views.9e1c82fe.js.map → column-views.58b891df.js.map} +1 -1
  46. package/dist/esm/{column-views.86619334.js → column-views.60365cdb.js} +2 -2
  47. package/dist/esm/{column-views.86619334.js.map → column-views.60365cdb.js.map} +1 -1
  48. package/dist/esm/column-views.6698b95a.js +108 -0
  49. package/dist/esm/column-views.6698b95a.js.map +1 -0
  50. package/dist/esm/column-views.6e7082db.js +16 -0
  51. package/dist/esm/column-views.6e7082db.js.map +1 -0
  52. package/dist/esm/column-views.70164236.js +206 -0
  53. package/dist/esm/column-views.70164236.js.map +1 -0
  54. package/dist/esm/{column-views.2ff3dd8b.js → column-views.748dce47.js} +31 -60
  55. package/dist/esm/column-views.748dce47.js.map +1 -0
  56. package/dist/esm/{column-views.775846c9.js → column-views.7683bb52.js} +9 -40
  57. package/dist/esm/column-views.7683bb52.js.map +1 -0
  58. package/dist/esm/{column-views.e7ab5af0.js → column-views.787d7696.js} +3 -3
  59. package/dist/esm/{column-views.e7ab5af0.js.map → column-views.787d7696.js.map} +1 -1
  60. package/dist/esm/{column-views.f20eb583.js → column-views.81bddbee.js} +6 -8
  61. package/dist/esm/column-views.81bddbee.js.map +1 -0
  62. package/dist/esm/{column-views.cc5244c4.js → column-views.8284c3a9.js} +91 -55
  63. package/dist/esm/column-views.8284c3a9.js.map +1 -0
  64. package/dist/esm/{column-views.f08929e2.js → column-views.88d63dd0.js} +5 -3
  65. package/dist/esm/column-views.88d63dd0.js.map +1 -0
  66. package/dist/esm/{column-views.935ef6f7.js → column-views.8b623b27.js} +2 -2
  67. package/dist/esm/{column-views.935ef6f7.js.map → column-views.8b623b27.js.map} +1 -1
  68. package/dist/esm/{column-views.3f246167.js → column-views.8c296309.js} +5 -5
  69. package/dist/esm/column-views.8c296309.js.map +1 -0
  70. package/dist/esm/{column-views.64a84c43.js → column-views.a3fabf0f.js} +38 -30
  71. package/dist/esm/column-views.a3fabf0f.js.map +1 -0
  72. package/dist/esm/column-views.abeab9aa.js +184 -0
  73. package/dist/esm/column-views.abeab9aa.js.map +1 -0
  74. package/dist/esm/{column-views.02f3732a.js → column-views.adec2e4c.js} +40 -20
  75. package/dist/esm/column-views.adec2e4c.js.map +1 -0
  76. package/dist/esm/{column-views.9892f825.js → column-views.aecf25bc.js} +75 -42
  77. package/dist/esm/column-views.aecf25bc.js.map +1 -0
  78. package/dist/esm/{column-views.1f7fb650.js → column-views.b08d82e6.js} +3 -3
  79. package/dist/esm/{column-views.1f7fb650.js.map → column-views.b08d82e6.js.map} +1 -1
  80. package/dist/esm/{column-views.769fa0ee.js → column-views.b29f8718.js} +2 -2
  81. package/dist/esm/{column-views.769fa0ee.js.map → column-views.b29f8718.js.map} +1 -1
  82. package/dist/esm/column-views.b7016f82.css +54 -0
  83. package/dist/esm/column-views.b7016f82.css.map +1 -0
  84. package/dist/esm/{column-views.0732894f.js → column-views.bbc77227.js} +2 -2
  85. package/dist/esm/{column-views.0732894f.js.map → column-views.bbc77227.js.map} +1 -1
  86. package/dist/esm/column-views.c2fbcba8.js +15 -0
  87. package/dist/esm/{column-views.0a159282.js.map → column-views.c2fbcba8.js.map} +1 -1
  88. package/dist/esm/{column-views.e3b9a317.js → column-views.c3495702.js} +2 -2
  89. package/dist/esm/{column-views.e3b9a317.js.map → column-views.c3495702.js.map} +1 -1
  90. package/dist/esm/{column-views.f7523c1d.js → column-views.c92a359e.js} +2 -2
  91. package/dist/esm/{column-views.f7523c1d.js.map → column-views.c92a359e.js.map} +1 -1
  92. package/dist/esm/{column-views.243da806.js → column-views.cae1a6a1.js} +3 -3
  93. package/dist/esm/{column-views.243da806.js.map → column-views.cae1a6a1.js.map} +1 -1
  94. package/dist/esm/{column-views.cdadc5c2.js → column-views.cc733361.js} +7 -1
  95. package/dist/esm/column-views.cc733361.js.map +1 -0
  96. package/dist/esm/{column-views.a195109e.js → column-views.d86555b0.js} +2 -2
  97. package/dist/esm/{column-views.a195109e.js.map → column-views.d86555b0.js.map} +1 -1
  98. package/dist/esm/{column-views.a6301a41.js → column-views.df34441c.js} +6 -8
  99. package/dist/esm/column-views.df34441c.js.map +1 -0
  100. package/dist/esm/{column-views.97d542eb.js → column-views.e17f00d3.js} +4 -4
  101. package/dist/esm/column-views.e17f00d3.js.map +1 -0
  102. package/dist/esm/{column-views.7715e35e.js → column-views.e1bc3cfa.js} +3 -3
  103. package/dist/esm/{column-views.7715e35e.js.map → column-views.e1bc3cfa.js.map} +1 -1
  104. package/dist/esm/{column-views.8d4ce558.css → column-views.e33ac5c9.css} +26 -9
  105. package/dist/esm/column-views.e33ac5c9.css.map +1 -0
  106. package/dist/esm/column-views.ea4ebbb7.js +31 -0
  107. package/dist/esm/column-views.ea4ebbb7.js.map +1 -0
  108. package/dist/esm/{column-views.78bd3f09.js → column-views.f0b0fc56.js} +2 -2
  109. package/dist/esm/{column-views.78bd3f09.js.map → column-views.f0b0fc56.js.map} +1 -1
  110. package/dist/esm/column-views.faacfc3c.js +92 -0
  111. package/dist/esm/column-views.faacfc3c.js.map +1 -0
  112. package/dist/esm/{column-views.d48cb0d8.js → column-views.fcf25ec6.js} +7 -1
  113. package/dist/esm/column-views.fcf25ec6.js.map +1 -0
  114. package/dist/esm/index.d.ts +264 -441
  115. package/dist/esm/index.d.ts.map +1 -1
  116. package/dist/esm/index.js +12 -12
  117. package/dist/node/column-views.0201566d.js +2 -0
  118. package/dist/node/column-views.0201566d.js.map +1 -0
  119. package/dist/node/column-views.07c503d3.js +2 -0
  120. package/dist/node/column-views.07c503d3.js.map +1 -0
  121. package/dist/node/{column-views.3a55ecd7.css → column-views.0840b115.css} +2 -2
  122. package/dist/node/column-views.0840b115.css.map +1 -0
  123. package/dist/node/column-views.0b3a384e.js +2 -0
  124. package/dist/node/column-views.0b3a384e.js.map +1 -0
  125. package/dist/node/column-views.0bd15ee4.js +2 -0
  126. package/dist/node/column-views.0bd15ee4.js.map +1 -0
  127. package/dist/node/{column-views.2a6b842d.js → column-views.0e7ac946.js} +2 -2
  128. package/dist/node/column-views.0e7ac946.js.map +1 -0
  129. package/dist/node/column-views.108db52e.js +2 -0
  130. package/dist/node/column-views.108db52e.js.map +1 -0
  131. package/dist/node/column-views.1261be59.js +2 -0
  132. package/dist/node/column-views.1261be59.js.map +1 -0
  133. package/dist/node/column-views.16f336ee.js +2 -0
  134. package/dist/node/column-views.16f336ee.js.map +1 -0
  135. package/dist/node/column-views.18d54bbb.js +2 -0
  136. package/dist/node/column-views.18d54bbb.js.map +1 -0
  137. package/dist/node/column-views.19a84c01.js +2 -0
  138. package/dist/node/column-views.19a84c01.js.map +1 -0
  139. package/dist/node/column-views.1a3c399e.js +2 -0
  140. package/dist/node/column-views.1a3c399e.js.map +1 -0
  141. package/dist/node/column-views.29483479.js +2 -0
  142. package/dist/node/column-views.29483479.js.map +1 -0
  143. package/dist/node/column-views.29eb25bd.css +2 -0
  144. package/dist/node/column-views.29eb25bd.css.map +1 -0
  145. package/dist/node/column-views.312db572.js +2 -0
  146. package/dist/node/column-views.312db572.js.map +1 -0
  147. package/dist/node/{column-views.2ca669bc.js → column-views.32344397.js} +2 -2
  148. package/dist/node/{column-views.2ca669bc.js.map → column-views.32344397.js.map} +1 -1
  149. package/dist/node/column-views.44952ae6.js +2 -0
  150. package/dist/node/column-views.44952ae6.js.map +1 -0
  151. package/dist/node/{column-views.a372c943.js → column-views.45a03acc.js} +2 -2
  152. package/dist/node/{column-views.a372c943.js.map → column-views.45a03acc.js.map} +1 -1
  153. package/dist/node/{column-views.0cbd4a3f.js → column-views.48a3cfa3.js} +2 -2
  154. package/dist/node/{column-views.0cbd4a3f.js.map → column-views.48a3cfa3.js.map} +1 -1
  155. package/dist/node/{column-views.42db0bb8.js → column-views.4b4c214a.js} +2 -2
  156. package/dist/node/{column-views.42db0bb8.js.map → column-views.4b4c214a.js.map} +1 -1
  157. package/dist/node/column-views.50a992d3.css +2 -0
  158. package/dist/node/column-views.50a992d3.css.map +1 -0
  159. package/dist/node/{column-views.65f091ea.js → column-views.54363c13.js} +2 -2
  160. package/dist/node/{column-views.65f091ea.js.map → column-views.54363c13.js.map} +1 -1
  161. package/dist/node/{column-views.858b5cf4.js → column-views.554d44a7.js} +2 -2
  162. package/dist/node/{column-views.858b5cf4.js.map → column-views.554d44a7.js.map} +1 -1
  163. package/dist/node/column-views.573cb29d.js +2 -0
  164. package/dist/node/column-views.573cb29d.js.map +1 -0
  165. package/dist/node/{column-views.492b4917.js → column-views.57dd069c.js} +2 -2
  166. package/dist/node/{column-views.492b4917.js.map → column-views.57dd069c.js.map} +1 -1
  167. package/dist/node/{column-views.2e4e357d.js → column-views.588b02a1.js} +2 -2
  168. package/dist/node/{column-views.2e4e357d.js.map → column-views.588b02a1.js.map} +1 -1
  169. package/dist/node/column-views.5a8bc8e3.js +2 -0
  170. package/dist/node/column-views.5a8bc8e3.js.map +1 -0
  171. package/dist/node/column-views.5f3b0b04.js +2 -0
  172. package/dist/node/column-views.5f3b0b04.js.map +1 -0
  173. package/dist/node/column-views.6099a3a9.js +2 -0
  174. package/dist/node/column-views.6099a3a9.js.map +1 -0
  175. package/dist/node/column-views.6919fd2a.js +2 -0
  176. package/dist/node/column-views.6919fd2a.js.map +1 -0
  177. package/dist/node/{column-views.45fab61b.js → column-views.6b8424fd.js} +2 -2
  178. package/dist/node/{column-views.45fab61b.js.map → column-views.6b8424fd.js.map} +1 -1
  179. package/dist/node/column-views.7425d37b.js +2 -0
  180. package/dist/node/column-views.7425d37b.js.map +1 -0
  181. package/dist/node/column-views.77ace3a2.js +2 -0
  182. package/dist/node/column-views.77ace3a2.js.map +1 -0
  183. package/dist/node/column-views.7f9c7448.js +2 -0
  184. package/dist/node/column-views.7f9c7448.js.map +1 -0
  185. package/dist/node/column-views.92e29010.js +2 -0
  186. package/dist/node/column-views.92e29010.js.map +1 -0
  187. package/dist/node/{column-views.7010a03b.js → column-views.93febe9b.js} +2 -2
  188. package/dist/node/{column-views.7010a03b.js.map → column-views.93febe9b.js.map} +1 -1
  189. package/dist/node/{column-views.51bc87ca.js → column-views.94c84716.js} +2 -2
  190. package/dist/node/{column-views.51bc87ca.js.map → column-views.94c84716.js.map} +1 -1
  191. package/dist/node/column-views.a16cd1f2.js +2 -0
  192. package/dist/node/column-views.a16cd1f2.js.map +1 -0
  193. package/dist/node/{column-views.eeca917f.js → column-views.a1e29a15.js} +2 -2
  194. package/dist/node/{column-views.eeca917f.js.map → column-views.a1e29a15.js.map} +1 -1
  195. package/dist/node/column-views.aae09aca.js +2 -0
  196. package/dist/node/column-views.aae09aca.js.map +1 -0
  197. package/dist/node/column-views.abe0a664.js +2 -0
  198. package/dist/node/column-views.abe0a664.js.map +1 -0
  199. package/dist/node/{column-views.a2274834.js → column-views.ae9536b3.js} +2 -2
  200. package/dist/node/{column-views.a2274834.js.map → column-views.ae9536b3.js.map} +1 -1
  201. package/dist/node/column-views.aef76eee.js +2 -0
  202. package/dist/node/column-views.aef76eee.js.map +1 -0
  203. package/dist/node/column-views.cd7b223b.css +2 -0
  204. package/dist/node/column-views.cd7b223b.css.map +1 -0
  205. package/dist/node/{column-views.df97f28e.js → column-views.ce5904a6.js} +2 -2
  206. package/dist/node/{column-views.df97f28e.js.map → column-views.ce5904a6.js.map} +1 -1
  207. package/dist/node/column-views.d4545f9f.js +2 -0
  208. package/dist/node/column-views.d4545f9f.js.map +1 -0
  209. package/dist/node/{column-views.c7f6fc0a.js → column-views.d529d3aa.js} +2 -2
  210. package/dist/node/{column-views.c7f6fc0a.js.map → column-views.d529d3aa.js.map} +1 -1
  211. package/dist/node/{column-views.2d957a97.js → column-views.db4ccacc.js} +2 -2
  212. package/dist/node/column-views.db4ccacc.js.map +1 -0
  213. package/dist/node/column-views.e2562224.js +2 -0
  214. package/dist/node/column-views.e2562224.js.map +1 -0
  215. package/dist/node/column-views.e803e4ae.css +2 -0
  216. package/dist/node/column-views.e803e4ae.css.map +1 -0
  217. package/dist/node/column-views.ebe61439.js +2 -0
  218. package/dist/node/column-views.ebe61439.js.map +1 -0
  219. package/dist/node/column-views.edb4ba54.js +2 -0
  220. package/dist/node/column-views.edb4ba54.js.map +1 -0
  221. package/dist/node/column-views.f0f5cefd.js +2 -0
  222. package/dist/node/column-views.f0f5cefd.js.map +1 -0
  223. package/dist/node/column-views.f1ad131a.js +2 -0
  224. package/dist/node/column-views.f1ad131a.js.map +1 -0
  225. package/dist/node/{column-views.58d2f993.js → column-views.f7d72702.js} +2 -2
  226. package/dist/node/{column-views.58d2f993.js.map → column-views.f7d72702.js.map} +1 -1
  227. package/dist/node/{column-views.e3ba0594.js → column-views.fcdc74c4.js} +2 -2
  228. package/dist/node/{column-views.e3ba0594.js.map → column-views.fcdc74c4.js.map} +1 -1
  229. package/dist/node/index.js +1 -1
  230. package/dist/node/index.js.map +1 -1
  231. package/package.json +15 -13
  232. package/src/age-axis.module.sass +4 -2
  233. package/src/age-axis.ts +49 -15
  234. package/src/age-model-overlay.ts +22 -1
  235. package/src/column.module.sass +29 -9
  236. package/src/column.ts +99 -24
  237. package/src/correlation-chart/main.ts +11 -3
  238. package/src/correlation-chart/prepare-data.ts +7 -4
  239. package/src/correlation-chart/stories/correlation-chart.stories.ts +26 -1
  240. package/src/data-provider/base.ts +32 -24
  241. package/src/data-provider/fetch.ts +10 -3
  242. package/src/data-provider/index.ts +1 -0
  243. package/src/data-provider/store.ts +74 -13
  244. package/src/{units/selection.ts → data-provider/unit-selection.ts} +22 -8
  245. package/src/facets/base-sample-column.module.sass +14 -0
  246. package/src/facets/base-sample-column.ts +114 -0
  247. package/src/facets/detrital-zircon/index.ts +31 -63
  248. package/src/facets/fossils/index.module.sass +43 -13
  249. package/src/facets/fossils/index.ts +232 -158
  250. package/src/facets/fossils/provider.ts +121 -25
  251. package/src/facets/index.ts +1 -0
  252. package/src/facets/measurements/index.ts +1 -2
  253. package/src/maps/column-correlation/state.ts +0 -1
  254. package/src/prepare-units/composite-scale.ts +183 -155
  255. package/src/prepare-units/dynamic-scales.ts +298 -0
  256. package/src/prepare-units/helpers.ts +99 -87
  257. package/src/prepare-units/index.ts +77 -51
  258. package/src/prepare-units/types.ts +138 -0
  259. package/src/prepare-units/utils.ts +29 -1
  260. package/src/section.ts +46 -9
  261. package/src/unit-details/panel.module.sass +8 -1
  262. package/src/unit-details/panel.ts +123 -53
  263. package/src/unit-details/popover.ts +6 -1
  264. package/src/units/boxes.ts +2 -7
  265. package/src/units/composite.ts +7 -50
  266. package/src/units/index.ts +0 -1
  267. package/dist/esm/column-views.02f3732a.js.map +0 -1
  268. package/dist/esm/column-views.0a159282.js +0 -13
  269. package/dist/esm/column-views.1e055ed5.js +0 -53
  270. package/dist/esm/column-views.1e055ed5.js.map +0 -1
  271. package/dist/esm/column-views.2ff3dd8b.js.map +0 -1
  272. package/dist/esm/column-views.3048acc1.js +0 -66
  273. package/dist/esm/column-views.3048acc1.js.map +0 -1
  274. package/dist/esm/column-views.38a305a0.js +0 -13
  275. package/dist/esm/column-views.39657bbf.js.map +0 -1
  276. package/dist/esm/column-views.3f246167.js.map +0 -1
  277. package/dist/esm/column-views.42b89c52.js.map +0 -1
  278. package/dist/esm/column-views.448c0687.css.map +0 -1
  279. package/dist/esm/column-views.4ab0ec82.js.map +0 -1
  280. package/dist/esm/column-views.4d22c21c.js.map +0 -1
  281. package/dist/esm/column-views.547b2730.js.map +0 -1
  282. package/dist/esm/column-views.64a84c43.js.map +0 -1
  283. package/dist/esm/column-views.75ea6dbe.js.map +0 -1
  284. package/dist/esm/column-views.775846c9.js.map +0 -1
  285. package/dist/esm/column-views.77b49a43.js.map +0 -1
  286. package/dist/esm/column-views.7ca9e1cd.js.map +0 -1
  287. package/dist/esm/column-views.8703a35b.js +0 -163
  288. package/dist/esm/column-views.8703a35b.js.map +0 -1
  289. package/dist/esm/column-views.8d4ce558.css.map +0 -1
  290. package/dist/esm/column-views.8e3dec90.js.map +0 -1
  291. package/dist/esm/column-views.97d542eb.js.map +0 -1
  292. package/dist/esm/column-views.9892f825.js.map +0 -1
  293. package/dist/esm/column-views.a6301a41.js.map +0 -1
  294. package/dist/esm/column-views.b17f793f.css.map +0 -1
  295. package/dist/esm/column-views.b3c1eb9e.js +0 -16
  296. package/dist/esm/column-views.b3c1eb9e.js.map +0 -1
  297. package/dist/esm/column-views.b72918ce.css.map +0 -1
  298. package/dist/esm/column-views.c71c321c.js +0 -104
  299. package/dist/esm/column-views.c71c321c.js.map +0 -1
  300. package/dist/esm/column-views.cc5244c4.js.map +0 -1
  301. package/dist/esm/column-views.cdadc5c2.js.map +0 -1
  302. package/dist/esm/column-views.d48cb0d8.js.map +0 -1
  303. package/dist/esm/column-views.f08929e2.js.map +0 -1
  304. package/dist/esm/column-views.f20eb583.js.map +0 -1
  305. package/dist/node/column-views.085f4a51.js +0 -2
  306. package/dist/node/column-views.085f4a51.js.map +0 -1
  307. package/dist/node/column-views.0dfc7ef7.js +0 -2
  308. package/dist/node/column-views.0dfc7ef7.js.map +0 -1
  309. package/dist/node/column-views.1a0b56fc.js +0 -2
  310. package/dist/node/column-views.1a0b56fc.js.map +0 -1
  311. package/dist/node/column-views.2926f656.css +0 -2
  312. package/dist/node/column-views.2926f656.css.map +0 -1
  313. package/dist/node/column-views.2a6b842d.js.map +0 -1
  314. package/dist/node/column-views.2d957a97.js.map +0 -1
  315. package/dist/node/column-views.307661d1.css +0 -2
  316. package/dist/node/column-views.307661d1.css.map +0 -1
  317. package/dist/node/column-views.33752461.js +0 -2
  318. package/dist/node/column-views.33752461.js.map +0 -1
  319. package/dist/node/column-views.38357d4a.js +0 -2
  320. package/dist/node/column-views.38357d4a.js.map +0 -1
  321. package/dist/node/column-views.3a55ecd7.css.map +0 -1
  322. package/dist/node/column-views.3eeac38d.js +0 -2
  323. package/dist/node/column-views.3eeac38d.js.map +0 -1
  324. package/dist/node/column-views.45168c80.js +0 -2
  325. package/dist/node/column-views.45168c80.js.map +0 -1
  326. package/dist/node/column-views.4ca62e5d.js +0 -2
  327. package/dist/node/column-views.4ca62e5d.js.map +0 -1
  328. package/dist/node/column-views.6ae7bb69.js +0 -2
  329. package/dist/node/column-views.6ae7bb69.js.map +0 -1
  330. package/dist/node/column-views.6f7a432f.js +0 -2
  331. package/dist/node/column-views.6f7a432f.js.map +0 -1
  332. package/dist/node/column-views.755f726e.js +0 -2
  333. package/dist/node/column-views.755f726e.js.map +0 -1
  334. package/dist/node/column-views.758b9bc1.js +0 -2
  335. package/dist/node/column-views.758b9bc1.js.map +0 -1
  336. package/dist/node/column-views.78d3f3c5.js +0 -2
  337. package/dist/node/column-views.78d3f3c5.js.map +0 -1
  338. package/dist/node/column-views.80fcf105.js +0 -2
  339. package/dist/node/column-views.80fcf105.js.map +0 -1
  340. package/dist/node/column-views.8cfed88b.js +0 -2
  341. package/dist/node/column-views.8cfed88b.js.map +0 -1
  342. package/dist/node/column-views.91043465.js +0 -2
  343. package/dist/node/column-views.91043465.js.map +0 -1
  344. package/dist/node/column-views.976a829b.js +0 -2
  345. package/dist/node/column-views.976a829b.js.map +0 -1
  346. package/dist/node/column-views.99fb74c0.js +0 -2
  347. package/dist/node/column-views.99fb74c0.js.map +0 -1
  348. package/dist/node/column-views.9b7a9ae1.js +0 -2
  349. package/dist/node/column-views.9b7a9ae1.js.map +0 -1
  350. package/dist/node/column-views.9de31cdb.js +0 -2
  351. package/dist/node/column-views.9de31cdb.js.map +0 -1
  352. package/dist/node/column-views.a4e6d4ad.js +0 -2
  353. package/dist/node/column-views.a4e6d4ad.js.map +0 -1
  354. package/dist/node/column-views.a501cea0.js +0 -2
  355. package/dist/node/column-views.a501cea0.js.map +0 -1
  356. package/dist/node/column-views.a7256aa7.js +0 -2
  357. package/dist/node/column-views.a7256aa7.js.map +0 -1
  358. package/dist/node/column-views.c4b409e1.css +0 -2
  359. package/dist/node/column-views.c4b409e1.css.map +0 -1
  360. package/dist/node/column-views.cef1b814.js +0 -2
  361. package/dist/node/column-views.cef1b814.js.map +0 -1
  362. package/dist/node/column-views.d6708353.js +0 -2
  363. package/dist/node/column-views.d6708353.js.map +0 -1
  364. package/dist/node/column-views.d9add589.js +0 -2
  365. package/dist/node/column-views.d9add589.js.map +0 -1
  366. package/dist/node/column-views.dfb2361a.js +0 -2
  367. package/dist/node/column-views.dfb2361a.js.map +0 -1
  368. package/dist/node/column-views.e9515ec1.js +0 -2
  369. package/dist/node/column-views.e9515ec1.js.map +0 -1
package/src/column.ts CHANGED
@@ -1,17 +1,28 @@
1
1
  import { ColumnAxisType } from "@macrostrat/column-components";
2
2
  import { hyperStyled } from "@macrostrat/hyper";
3
- import { useDarkMode } from "@macrostrat/ui-components";
3
+ import {
4
+ Box,
5
+ extractPadding,
6
+ Padding,
7
+ useDarkMode,
8
+ } from "@macrostrat/ui-components";
4
9
  import classNames from "classnames";
5
- import { RefObject, useRef, HTMLAttributes, useCallback } from "react";
10
+ import {
11
+ RefObject,
12
+ useRef,
13
+ HTMLAttributes,
14
+ useCallback,
15
+ CSSProperties,
16
+ ComponentType,
17
+ } from "react";
6
18
  import styles from "./column.module.sass";
19
+ import { UnitComponent } from "./units";
7
20
  import {
8
21
  UnitSelectionProvider,
9
- UnitComponent,
10
22
  UnitKeyboardNavigation,
11
23
  useUnitSelectionDispatch,
12
- } from "./units";
24
+ } from "./data-provider";
13
25
 
14
- import { ColumnHeightScaleOptions } from "./prepare-units/composite-scale";
15
26
  import {
16
27
  Identifier,
17
28
  ReferencesField,
@@ -27,11 +38,17 @@ import {
27
38
  CompositeTimescale,
28
39
  SectionsColumn,
29
40
  } from "./section";
30
- import { CompositeAgeAxis } from "./age-axis";
31
- import { MergeSectionsMode, usePreparedColumnUnits } from "./prepare-units";
41
+ import { ApproximateHeightAxis, CompositeAgeAxis } from "./age-axis";
42
+ import {
43
+ MergeSectionsMode,
44
+ usePreparedColumnUnits,
45
+ HybridScaleType,
46
+ ColumnHeightScaleOptions,
47
+ } from "./prepare-units";
32
48
  import { UnitLong } from "@macrostrat/api-types";
33
49
  import { NonIdealState } from "@blueprintjs/core";
34
50
  import { DataField } from "@macrostrat/data-components";
51
+ import { ScaleContinuousNumeric } from "d3-scale";
35
52
 
36
53
  const h = hyperStyled(styles);
37
54
 
@@ -51,11 +68,14 @@ interface BaseColumnProps extends SectionSharedProps {
51
68
  ) => void;
52
69
  }
53
70
 
54
- export interface ColumnProps extends BaseColumnProps, ColumnHeightScaleOptions {
71
+ export interface ColumnProps
72
+ extends Padding, BaseColumnProps, ColumnHeightScaleOptions {
55
73
  // Macrostrat units
56
74
  units: UnitLong[];
57
75
  t_age?: number;
58
76
  b_age?: number;
77
+ t_pos?: number;
78
+ b_pos?: number;
59
79
  mergeSections?: MergeSectionsMode;
60
80
  showUnitPopover?: boolean;
61
81
  allowUnitSelection?: boolean;
@@ -63,6 +83,7 @@ export interface ColumnProps extends BaseColumnProps, ColumnHeightScaleOptions {
63
83
  onUnitSelected?: (unitID: number | null, unit: any) => void;
64
84
  // Unconformity height in pixels
65
85
  unconformityHeight?: number;
86
+ scale?: ScaleContinuousNumeric<number, number>;
66
87
  }
67
88
 
68
89
  export function Column(props: ColumnProps) {
@@ -74,9 +95,10 @@ export function Column(props: ColumnProps) {
74
95
  selectedUnit,
75
96
  children,
76
97
  units: rawUnits,
77
- axisType = ColumnAxisType.AGE,
78
98
  t_age,
79
99
  b_age,
100
+ t_pos,
101
+ b_pos,
80
102
  unconformityHeight = 30,
81
103
  targetUnitHeight = 20,
82
104
  pixelScale,
@@ -84,22 +106,53 @@ export function Column(props: ColumnProps) {
84
106
  minSectionHeight = 50,
85
107
  collapseSmallUnconformities = true,
86
108
  allowUnitSelection,
109
+ hybridScale,
110
+ scale,
111
+ axisType,
87
112
  ...rest
88
113
  } = props;
89
114
  const ref = useRef<HTMLElement>();
90
115
  // Selected item position
91
116
 
117
+ /* Make pixelScale and targetUnitHeight mutually exclusive. PixelScale implies
118
+ * standardization of scales in all sections */
119
+ let _targetUnitHeight = targetUnitHeight;
120
+ let _minSectionHeight = minSectionHeight;
121
+ let _minPixelScale = minPixelScale;
122
+ if (pixelScale != null) {
123
+ _targetUnitHeight = null;
124
+ _minSectionHeight = 0;
125
+ _minPixelScale = pixelScale;
126
+ }
127
+
128
+ // Handle special cases for hybrid scales (WIP, we need to regularize this)
129
+ let _axisType = axisType ?? ColumnAxisType.AGE;
130
+ let ageAxisComponent = CompositeAgeAxis;
131
+ if (
132
+ hybridScale?.type === HybridScaleType.ApproximateHeight &&
133
+ _axisType != ColumnAxisType.AGE
134
+ ) {
135
+ // Use approximate height axis for non-age columns if a non-age axis type is requested
136
+ ageAxisComponent = ApproximateHeightAxis;
137
+ _axisType = ColumnAxisType.AGE;
138
+ }
139
+
92
140
  const { sections, units, totalHeight } = usePreparedColumnUnits(rawUnits, {
93
- axisType,
141
+ axisType: _axisType,
94
142
  t_age,
95
143
  b_age,
144
+ t_pos,
145
+ b_pos,
96
146
  mergeSections,
97
- targetUnitHeight,
147
+ targetUnitHeight: _targetUnitHeight,
98
148
  unconformityHeight,
99
149
  pixelScale,
100
- minPixelScale,
101
- minSectionHeight,
150
+ minPixelScale: _minPixelScale,
151
+ minSectionHeight: _minSectionHeight,
102
152
  collapseSmallUnconformities,
153
+ // TODO: consider unifying scale and hybridScale options
154
+ scale,
155
+ hybridScale,
103
156
  });
104
157
 
105
158
  if (sections.length === 0) {
@@ -113,11 +166,15 @@ export function Column(props: ColumnProps) {
113
166
  );
114
167
  }
115
168
 
116
- let main: any = h(ColumnInner, { columnRef: ref, ...rest }, [
117
- children,
118
- h.if(showUnitPopover)(UnitSelectionPopover),
119
- h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),
120
- ]);
169
+ let main: any = h(
170
+ ColumnInner,
171
+ { columnRef: ref, ageAxisComponent, ...rest },
172
+ [
173
+ children,
174
+ h.if(showUnitPopover)(UnitSelectionPopover),
175
+ h.if(keyboardNavigation)(UnitKeyboardNavigation, { units }),
176
+ ],
177
+ );
121
178
 
122
179
  /* By default, unit selection is disabled. However, if any related props are passed,
123
180
  we enable it.
@@ -142,16 +199,27 @@ export function Column(props: ColumnProps) {
142
199
 
143
200
  return h(
144
201
  MacrostratColumnDataProvider,
145
- { units, sections, totalHeight, axisType },
202
+ { units, sections, totalHeight, axisType: _axisType },
146
203
  main,
147
204
  );
148
205
  }
149
206
 
150
207
  interface ColumnInnerProps extends BaseColumnProps {
151
208
  columnRef: RefObject<HTMLElement>;
209
+ ageAxisComponent?: ComponentType;
152
210
  }
153
211
 
154
212
  function ColumnInner(props: ColumnInnerProps) {
213
+ const padding = extractPadding(props);
214
+
215
+ // TODO: integrate padding vars more closely with the rest of the spacing (right now padding is a bit ad-hoc)
216
+ const paddingVars: any = {
217
+ "--column-padding-top": `${padding.paddingTop}px`,
218
+ "--column-padding-bottom": `${padding.paddingBottom}px`,
219
+ "--column-padding-left": `${padding.paddingLeft}px`,
220
+ "--column-padding-right": `${padding.paddingRight}px`,
221
+ };
222
+
155
223
  const {
156
224
  unitComponent = UnitComponent,
157
225
  unconformityLabels = true,
@@ -167,6 +235,7 @@ function ColumnInner(props: ColumnInnerProps) {
167
235
  timescaleLevels,
168
236
  maxInternalColumns,
169
237
  onMouseOver,
238
+ ageAxisComponent = CompositeAgeAxis,
170
239
  } = props;
171
240
 
172
241
  const { axisType } = useMacrostratColumnData();
@@ -191,10 +260,11 @@ function ColumnInner(props: ColumnInnerProps) {
191
260
  ColumnContainer,
192
261
  {
193
262
  ...useMouseEventHandlers(onMouseOver),
263
+ style: paddingVars,
194
264
  className,
195
265
  },
196
266
  h("div.column", { ref: columnRef }, [
197
- h(CompositeAgeAxis),
267
+ h(ageAxisComponent),
198
268
  h.if(_showTimescale)(CompositeTimescale, { levels: timescaleLevels }),
199
269
  h(SectionsColumn, {
200
270
  unitComponent,
@@ -262,16 +332,21 @@ function useMouseEventHandlers(
262
332
 
263
333
  export interface ColumnContainerProps extends HTMLAttributes<HTMLDivElement> {
264
334
  className?: string;
335
+ style?: CSSProperties;
265
336
  }
266
337
 
267
338
  export function ColumnContainer(props: ColumnContainerProps) {
268
339
  const { className, ...rest } = props;
269
340
  const darkMode = useDarkMode();
270
341
 
271
- return h("div.column-container", {
272
- className: classNames(className, {
273
- "dark-mode": darkMode?.isEnabled ?? false,
274
- }),
342
+ return h(Box, {
343
+ className: classNames(
344
+ className,
345
+ {
346
+ "dark-mode": darkMode?.isEnabled ?? false,
347
+ },
348
+ "column-container",
349
+ ),
275
350
  ...rest,
276
351
  });
277
352
  }
@@ -3,7 +3,7 @@ import {
3
3
  UnitSelectionProvider,
4
4
  UnitKeyboardNavigation,
5
5
  useUnitSelectionStore,
6
- } from "../units";
6
+ } from "../data-provider";
7
7
  import { UnitSelectionPopover } from "../unit-details";
8
8
  import hyper from "@macrostrat/hyper";
9
9
  import styles from "./main.module.sass";
@@ -29,10 +29,11 @@ import {
29
29
  } from "@macrostrat/column-components";
30
30
  import { ColoredUnitComponent } from "../units";
31
31
  import { UnitBoxes } from "../units/boxes";
32
- import { ExtUnit } from "../prepare-units/helpers";
33
32
  import { ColumnContainer } from "../column";
34
33
  import { ColumnData } from "../data-provider";
35
34
  import { BaseUnit } from "@macrostrat/api-types";
35
+ import { ScaleContinuousNumeric } from "d3-scale";
36
+ import { ExtUnit } from "../prepare-units/types";
36
37
 
37
38
  const h = hyper.styled(styles);
38
39
 
@@ -117,7 +118,8 @@ export function CorrelationChart({
117
118
  paddingH: 4,
118
119
  },
119
120
  packages.map((pkg, i) => {
120
- const { offset, domain, pixelScale, key } = scaleInfo.packages[i];
121
+ const { offset, domain, pixelScale, scale, key } =
122
+ scaleInfo.packages[i];
121
123
  return h(Package, {
122
124
  columnData: pkg.columnData,
123
125
  key,
@@ -126,6 +128,7 @@ export function CorrelationChart({
126
128
  offset,
127
129
  domain,
128
130
  pixelScale,
131
+ scale,
129
132
  unitComponent,
130
133
  });
131
134
  }),
@@ -147,6 +150,7 @@ function Package({
147
150
  offset,
148
151
  domain,
149
152
  pixelScale,
153
+ scale,
150
154
  }) {
151
155
  return h("g.package", { transform: `translate(0 ${offset})` }, [
152
156
  // Disable the SVG overlay for now
@@ -160,6 +164,7 @@ function Package({
160
164
  key: i,
161
165
  domain,
162
166
  pixelScale,
167
+ scale,
163
168
  offsetLeft: i * (columnWidth + columnSpacing),
164
169
  });
165
170
  }),
@@ -179,6 +184,7 @@ interface ColumnProps {
179
184
  offsetLeft?: number;
180
185
  domain: [number, number];
181
186
  pixelScale: number;
187
+ scale?: ScaleContinuousNumeric<number, number>;
182
188
  }
183
189
 
184
190
  function Column(props: ColumnProps) {
@@ -188,6 +194,7 @@ function Column(props: ColumnProps) {
188
194
  offsetLeft,
189
195
  domain,
190
196
  pixelScale,
197
+ scale,
191
198
  unitComponent = ColoredUnitComponent,
192
199
  } = props;
193
200
 
@@ -208,6 +215,7 @@ function Column(props: ColumnProps) {
208
215
  // Need to tighten up types here...
209
216
  divisions: units as any[],
210
217
  range: domain,
218
+ scale,
211
219
  pixelsPerMeter: pixelScale, // Actually pixels per myr
212
220
  axisType: ColumnAxisType.AGE,
213
221
  },
@@ -1,5 +1,4 @@
1
1
  import { CompositeStratigraphicScaleInfo } from "../age-axis";
2
- import { PackageLayoutData } from "../prepare-units/composite-scale";
3
2
  import { ColumnAxisType } from "@macrostrat/column-components";
4
3
  import { type ColumnGeoJSONRecord, UnitLong } from "@macrostrat/api-types";
5
4
  import {
@@ -9,6 +8,7 @@ import {
9
8
  preprocessUnits,
10
9
  } from "../prepare-units";
11
10
  import { mergeAgeRanges } from "@macrostrat/stratigraphy-utils";
11
+ import { PackageLayoutData } from "../prepare-units/types";
12
12
 
13
13
  export interface ColumnIdentifier {
14
14
  col_id: number;
@@ -21,8 +21,10 @@ interface ColumnData {
21
21
  units: UnitLong[];
22
22
  }
23
23
 
24
- export interface CorrelationChartSettings
25
- extends Omit<PrepareColumnOptions, "axisType"> {
24
+ export interface CorrelationChartSettings extends Omit<
25
+ PrepareColumnOptions,
26
+ "axisType"
27
+ > {
26
28
  targetUnitHeight?: number;
27
29
  }
28
30
 
@@ -52,6 +54,7 @@ export function buildCorrelationChartData(
52
54
  const opts: PrepareColumnOptions = {
53
55
  axisType: ColumnAxisType.AGE,
54
56
  targetUnitHeight,
57
+ mergeSections,
55
58
  ...rest,
56
59
  };
57
60
 
@@ -102,7 +105,7 @@ interface ColumnExt {
102
105
 
103
106
  interface MultiColumnPackageData {
104
107
  columnData: ColumnExt[];
105
- bestPixelScale: number;
108
+ bestPixelScale?: number;
106
109
  b_age: number;
107
110
  t_age: number;
108
111
  }
@@ -6,6 +6,7 @@ import {
6
6
  ColumnCorrelationMap,
7
7
  ColumnCorrelationProvider,
8
8
  fetchUnits,
9
+ MergeSectionsMode,
9
10
  useCorrelationMapStore,
10
11
  } from "@macrostrat/column-views";
11
12
  import { hyperStyled } from "@macrostrat/hyper";
@@ -16,6 +17,7 @@ import { ErrorBoundary, useAsyncMemo } from "@macrostrat/ui-components";
16
17
  import { OverlaysProvider } from "@blueprintjs/core";
17
18
  import { parseLineFromString, stringifyLine } from "../hash-string";
18
19
  import { EnvironmentColoredUnitComponent } from "../../units";
20
+ import { scaleLinear, scalePow } from "d3-scale";
19
21
 
20
22
  const mapboxToken = import.meta.env.VITE_MAPBOX_API_TOKEN;
21
23
 
@@ -96,7 +98,7 @@ export default {
96
98
  focusedLine: "-100,45 -90,50",
97
99
  columnSpacing: 0,
98
100
  columnWidth: 100,
99
- collapseSmallUnconformities: false,
101
+ collapseSmallUnconformities: true,
100
102
  targetUnitHeight: 20,
101
103
  },
102
104
  argTypes: {
@@ -196,3 +198,26 @@ export const ColoredByEnvironment = Template.bind({});
196
198
  ColoredByEnvironment.args = {
197
199
  unitComponent: EnvironmentColoredUnitComponent,
198
200
  };
201
+
202
+ export const RestrictedAgeRange = Template.bind({});
203
+ RestrictedAgeRange.args = {
204
+ t_age: 100,
205
+ b_age: 300,
206
+ focusedLine: "-114.29,42.74 -104.59,39.21",
207
+ };
208
+
209
+ export const WithFixedScale = Template.bind({});
210
+ WithFixedScale.args = {
211
+ scale: scaleLinear().domain([0, 2500]).range([0, 1000]),
212
+ };
213
+
214
+ export const WithPowerScale = Template.bind({});
215
+ WithPowerScale.args = {
216
+ scale: scalePow().exponent(0.3).domain([0, 2500]).range([0, 1000]),
217
+ };
218
+
219
+ export const WithPowerScaleMerged = Template.bind({});
220
+ WithPowerScaleMerged.args = {
221
+ scale: scalePow().exponent(0.3).domain([0, 2500]).range([0, 1000]),
222
+ mergeSections: MergeSectionsMode.ALL,
223
+ };
@@ -9,6 +9,7 @@ import {
9
9
  Environment,
10
10
  MacrostratRef,
11
11
  StratName,
12
+ Interval,
12
13
  } from "@macrostrat/api-types";
13
14
  import {
14
15
  fetchAllColumns,
@@ -49,7 +50,10 @@ interface MacrostratStore extends RefsSlice {
49
50
  lithologies: Map<number, any> | null;
50
51
  getLithologies(ids: number[] | null): Promise<any>;
51
52
  intervals: Map<number, any> | null;
52
- getIntervals(ids: number[] | null, timescaleID: number | null): Promise<any>;
53
+ getIntervals(
54
+ ids: number[] | null,
55
+ timescaleID: number | null,
56
+ ): Promise<Interval[]>;
53
57
  environments: Map<number, Environment> | null;
54
58
  getEnvironments(ids: number[] | null): Promise<Environment[]>;
55
59
  columnFootprints: Map<number, ColumnFootprintsStorage>;
@@ -121,35 +125,22 @@ function createColumnsSlice(set, get) {
121
125
  const { columnFootprints, baseURL, fetch } = get();
122
126
  const key = projectID ?? -1;
123
127
  let _inProcess = inProcess;
124
- if (projectID == null) {
125
- // If no project is specified, in process columns cannot be included
126
- _inProcess = false;
127
- }
128
+
128
129
  let footprints = columnFootprints.get(key);
129
130
  if (footprints == null || footprints.inProcess != _inProcess) {
130
131
  // Fetch the columns
131
- const statusCode = inProcess ? "in process" : null;
132
- let columns = await fetchAllColumns({
132
+ const statusCode: ColumnStatusCode[] = ["active"];
133
+ if (_inProcess) {
134
+ statusCode.push("in process");
135
+ }
136
+ const columns = await fetchAllColumns({
133
137
  projectID,
134
- statusCode: null,
138
+ statusCode,
135
139
  fetch,
136
140
  });
137
141
  if (columns == null) {
138
142
  return;
139
143
  }
140
- if (_inProcess) {
141
- const inProcessColumns = await fetchAllColumns({
142
- projectID,
143
- statusCode: "in process",
144
- fetch,
145
- });
146
- if (inProcessColumns == null) {
147
- return;
148
- }
149
- // Combine active and in-process columns
150
- columns = columns.concat(inProcessColumns);
151
- }
152
-
153
144
  footprints = {
154
145
  project_id: projectID,
155
146
  inProcess,
@@ -281,10 +272,21 @@ export function useMacrostratStore(selector: MacrostratSelector | "api") {
281
272
  if (selector === "api") {
282
273
  return ctx;
283
274
  }
284
-
285
275
  return useStore(ctx, selector);
286
276
  }
287
277
 
278
+ export function useMacrostratBaseURL(
279
+ defaultURL = "https://macrostrat.org/api/v2",
280
+ ): string {
281
+ /** Get the Macrostrat base URL from the store if set, otherwise return a default value */
282
+ const ctx = useContext(MacrostratDataProviderContext);
283
+ if (ctx == null) {
284
+ // Return default URL if no provider is present
285
+ return defaultURL;
286
+ }
287
+ return ctx.getState().baseURL;
288
+ }
289
+
288
290
  type DataTypeKey =
289
291
  | "lithologies"
290
292
  | "intervals"
@@ -407,10 +409,16 @@ export function MacrostratColumnProvider(props) {
407
409
  */
408
410
 
409
411
  const { axisType } = useMacrostratColumnData();
410
- const { units, domain, pixelScale, children } = props;
412
+ const { units, domain, pixelScale, scale, children } = props;
411
413
  return h(
412
414
  ColumnProvider,
413
- { axisType, divisions: units, range: domain, pixelsPerMeter: pixelScale },
415
+ {
416
+ axisType,
417
+ divisions: units,
418
+ range: domain,
419
+ pixelsPerMeter: pixelScale,
420
+ scale,
421
+ },
414
422
  children,
415
423
  );
416
424
  }
@@ -14,6 +14,7 @@ import {
14
14
  import crossFetch from "cross-fetch";
15
15
  import { feature } from "topojson-client";
16
16
  import { geoArea } from "d3-geo";
17
+ import _ from "underscore";
17
18
 
18
19
  function defaultFetch(
19
20
  url: string,
@@ -23,10 +24,12 @@ function defaultFetch(
23
24
  return crossFetch(baseURL + url, options);
24
25
  }
25
26
 
27
+ export type ColumnStatusCode = "in process" | "active" | "obsolete";
28
+
26
29
  export interface ColumnFetchOptions {
27
30
  apiBaseURL?: string;
28
31
  projectID?: number;
29
- statusCode?: "in process";
32
+ statusCode?: ColumnStatusCode | ColumnStatusCode[];
30
33
  format?: "geojson" | "topojson" | "geojson_bare";
31
34
  fetch?: any;
32
35
  }
@@ -46,9 +49,13 @@ export async function fetchAllColumns(
46
49
  if (projectID != null) {
47
50
  args = { ...args, project_id: projectID };
48
51
  }
49
- if (statusCode != null) {
50
- args = { ...args, status_code: statusCode };
52
+ let _statusCode: string | undefined = undefined;
53
+ if (Array.isArray(statusCode)) {
54
+ _statusCode = statusCode.join(",");
55
+ } else if (statusCode != null) {
56
+ _statusCode = statusCode;
51
57
  }
58
+ args.statusCode = _statusCode;
52
59
 
53
60
  if (projectID == null) {
54
61
  args = { ...args, all: true };
@@ -2,3 +2,4 @@ export * from "./fetch";
2
2
  export * from "./base";
3
3
  export * from "./column-nav";
4
4
  export * from "./store";
5
+ export * from "./unit-selection";
@@ -1,18 +1,66 @@
1
- import {
2
- createContext,
3
- useContext,
4
- ReactNode,
5
- useMemo,
6
- useEffect,
7
- } from "react";
1
+ import { createContext, ReactNode, useContext, useMemo } from "react";
8
2
  import h from "@macrostrat/hyper";
9
3
  import {
10
- createCompositeScale,
11
- PackageLayoutData,
12
4
  CompositeColumnScale,
5
+ createCompositeScale,
13
6
  } from "../prepare-units/composite-scale";
14
- import { ExtUnit } from "../prepare-units/helpers";
15
7
  import { ColumnAxisType } from "@macrostrat/column-components";
8
+ import type { ExtUnit, PackageLayoutData } from "../prepare-units";
9
+ // An isolated jotai store for Macrostrat column usage
10
+ // TODO: there might be a better way to do this using the MacrostratDataProvider or similar
11
+ import { createIsolation } from "jotai-scope";
12
+ import { atom, type WritableAtom } from "jotai";
13
+
14
+ const { Provider, useAtom, useAtomValue, useStore } = createIsolation();
15
+
16
+ type ProviderProps = {
17
+ children: ReactNode;
18
+ initialValues?: Iterable<[WritableAtom<any, any, any>, any]>;
19
+ };
20
+
21
+ const columnUnitsAtom = atom<ExtUnit[]>();
22
+
23
+ const columnUnitsMapAtom = atom<Map<number, ExtUnit> | null>((get) => {
24
+ const units = get(columnUnitsAtom);
25
+ if (!units) return null;
26
+ const unitMap = new Map<number, ExtUnit>();
27
+ units.forEach((unit) => {
28
+ unitMap.set(unit.unit_id, unit);
29
+ });
30
+ return unitMap;
31
+ });
32
+
33
+ function ScopedProvider({ children, ...rest }: ProviderProps) {
34
+ // Always use the same store instance in this tree
35
+ let val = null;
36
+ try {
37
+ val = useStore();
38
+ } catch {
39
+ // No store found, create a new one
40
+ val = null;
41
+ }
42
+ return h(Provider, { store: val, ...rest }, children);
43
+ }
44
+
45
+ export function MacrostratColumnStateProvider({
46
+ children,
47
+ units,
48
+ }: {
49
+ children: ReactNode;
50
+ units: ExtUnit[];
51
+ }) {
52
+ /** Top-level provider for Macrostrat column data.
53
+ * It is either provided by the Column component itself, or
54
+ * can be hoisted higher in the tree to provide a common data context
55
+ */
56
+ return h(
57
+ ScopedProvider,
58
+ {
59
+ initialValues: [[columnUnitsAtom, units]],
60
+ },
61
+ children,
62
+ );
63
+ }
16
64
 
17
65
  export interface MacrostratColumnDataContext {
18
66
  units: ExtUnit[];
@@ -31,7 +79,7 @@ export function MacrostratColumnDataProvider({
31
79
  totalHeight,
32
80
  axisType,
33
81
  }: MacrostratColumnDataContext & { children: ReactNode }) {
34
- /** Provider for Macrostrat column data.
82
+ /** Internal provider for Macrostrat column data.
35
83
  * As a general rule, we want to provide data and column-axis
36
84
  * height calculations through the context, since these need to
37
85
  * be accessed by any component that lays out information on the
@@ -43,6 +91,7 @@ export function MacrostratColumnDataProvider({
43
91
  * */
44
92
 
45
93
  const value = useMemo(() => {
94
+ // For now, change ordinal axis types to age axis types
46
95
  return {
47
96
  units,
48
97
  sections,
@@ -51,7 +100,11 @@ export function MacrostratColumnDataProvider({
51
100
  };
52
101
  }, [units, sections, totalHeight, axisType]);
53
102
 
54
- return h(MacrostratColumnDataContext.Provider, { value }, children);
103
+ return h(
104
+ MacrostratColumnStateProvider,
105
+ { units },
106
+ h(MacrostratColumnDataContext.Provider, { value }, children),
107
+ );
55
108
  }
56
109
 
57
110
  export function useMacrostratColumnData() {
@@ -65,7 +118,15 @@ export function useMacrostratColumnData() {
65
118
  }
66
119
 
67
120
  export function useMacrostratUnits() {
68
- return useMacrostratColumnData().units;
121
+ return useAtomValue(columnUnitsAtom);
122
+ }
123
+
124
+ export function useColumnUnitsMap(): Map<number, ExtUnit> | null {
125
+ try {
126
+ return useAtomValue(columnUnitsMapAtom);
127
+ } catch {
128
+ return null;
129
+ }
69
130
  }
70
131
 
71
132
  export function useCompositeScale(): CompositeColumnScale {