@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
@@ -1,4 +1,5 @@
1
- import {MergeSectionsMode as $76e92a964ee11b97$export$e1644389ce074058, prepareColumnUnits as $76e92a964ee11b97$export$be8c5a449df4bde4, preprocessUnits as $a52J6$preprocessUnits} from "./column-views.c71c321c.js";
1
+ import {MergeSectionsMode as $b6657fba8924a702$export$e1644389ce074058} from "./column-views.54f8b909.js";
2
+ import {prepareColumnUnits as $76e92a964ee11b97$export$be8c5a449df4bde4, preprocessUnits as $a52J6$preprocessUnits} from "./column-views.3a7179c4.js";
2
3
  import {ColumnAxisType as $a52J6$ColumnAxisType} from "@macrostrat/column-components";
3
4
  import {mergeAgeRanges as $a52J6$mergeAgeRanges} from "@macrostrat/stratigraphy-utils";
4
5
 
@@ -7,10 +8,11 @@ import {mergeAgeRanges as $a52J6$mergeAgeRanges} from "@macrostrat/stratigraphy-
7
8
 
8
9
  function $2c6a8e6a98a077ae$export$7f21dc14b8199dc0(columns, settings) {
9
10
  console.log(settings);
10
- const { mergeSections: mergeSections = (0, $76e92a964ee11b97$export$e1644389ce074058).OVERLAPPING, targetUnitHeight: targetUnitHeight, ...rest } = settings;
11
+ const { mergeSections: mergeSections = (0, $b6657fba8924a702$export$e1644389ce074058).OVERLAPPING, targetUnitHeight: targetUnitHeight, ...rest } = settings;
11
12
  const opts = {
12
13
  axisType: (0, $a52J6$ColumnAxisType).AGE,
13
14
  targetUnitHeight: targetUnitHeight,
15
+ mergeSections: mergeSections,
14
16
  ...rest
15
17
  };
16
18
  if (columns.length == 0) return null;
@@ -122,4 +124,4 @@ function $2c6a8e6a98a077ae$export$63b33da9b6dd754c(col) {
122
124
 
123
125
 
124
126
  export {$2c6a8e6a98a077ae$export$7f21dc14b8199dc0 as buildCorrelationChartData, $2c6a8e6a98a077ae$export$cc5d9b95e199a6de as findLaterallyExtensiveUnits, $2c6a8e6a98a077ae$export$3e71a3125322d04b as splitStratIntoBoxes, $2c6a8e6a98a077ae$export$63b33da9b6dd754c as columnGeoJSONRecordToColumnIdentifier};
125
- //# sourceMappingURL=column-views.f08929e2.js.map
127
+ //# sourceMappingURL=column-views.88d63dd0.js.map
@@ -0,0 +1 @@
1
+ {"mappings":";;;;;;;;AA0CO,SAAS,0CACd,OAAqB,EACrB,QAAkC;IAElC,QAAQ,GAAG,CAAC;IACZ,MAAM,iBACJ,gBAAgB,CAAA,GAAA,yCAAgB,EAAE,WAAW,oBAC7C,gBAAgB,EAChB,GAAG,MACJ,GAAG;IAEJ,MAAM,OAA6B;QACjC,UAAU,CAAA,GAAA,qBAAa,EAAE,GAAG;0BAC5B;uBACA;QACA,GAAG,IAAI;IACT;IAEA,IAAI,QAAQ,MAAM,IAAI,GACpB,OAAO;IAGT,2EAA2E;IAC3E,MAAM,SAAS,QAAQ,GAAG,CAAC,CAAC,IAAM,EAAE,KAAK,EAAE,IAAI;IAE/C,MAAM,YAAY,QAAQ,GAAG,CAAC,CAAC,IAAM,EAAE,QAAQ;IAE/C,MAAM,gBAAgB,CAAA,GAAA,yCAAiB,EAAE,QAAQ;IAEjD,MAAM,YAAE,QAAQ,eAAE,WAAW,EAAE,GAAG;IAElC,MAAM,YAA6C;QACjD,UAAU,CAAA,GAAA,qBAAa,EAAE,GAAG;qBAC5B;QACA,UAAU,SAAS,GAAG,CAAC,CAAC,IAAM,EAAE,SAAS;IAC3C;IAEA,MAAM,WAAW,SAAS,GAAG,CAAC,CAAC;QAC7B,OAAO,sCAAgB,GAAG;IAC5B;IAEA,OAAO;mBAAE;kBAAW;QAAU,UAAU,UAAU,MAAM;IAAC;AAC3D;AA4BO,SAAS,0CACd,GAA2B;IAE3B,MAAM,cAAE,UAAU,SAAE,KAAK,SAAE,KAAK,EAAE,GAAG;IACrC,+BAA+B;IAC/B,MAAM,YAAY,IAAI;IACtB,KAAK,MAAM,UAAU,WAAY;QAC/B,MAAM,SAAE,KAAK,EAAE,GAAG;QAClB,KAAK,MAAM,QAAQ,MAAO;YACxB,IAAI,KAAK,aAAa,IAAI,MAAM;YAChC,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,aAAa,GACnC,UAAU,GAAG,CAAC,KAAK,aAAa,EAAE,IAAI;YAExC,UAAU,GAAG,CAAC,KAAK,aAAa,EAAE,GAAG,CAAC,OAAO,QAAQ,EAAE;QACzD;IACF;IAEA,sCAAsC;IACtC,MAAM,aAA0B,EAAE;IAClC,KAAK,MAAM,CAAC,eAAe,WAAW,IAAI,UAAW;QACnD,MAAM,QAAQ,WAAW,GAAG,CAAC,CAAC,IAAM,WAAW,GAAG,CAAC,EAAE,QAAQ,KAAK;QAClE,MAAM,gBAAgB,MAAM,MAAM,CAAC,CAAC,IAAM,KAAK;QAC/C,MAAM,CAAC,OAAO,MAAM,GAAG,CAAA,GAAA,qBAAa,EAClC,cAAc,GAAG,CAAC,CAAC,IAAM;gBAAC,EAAE,KAAK;gBAAE,EAAE,KAAK;aAAC;QAE7C,IAAI,cAAc,MAAM,IAAI,GAAG;QAE/B,WAAW,IAAI,CAAC;mBACd;mBACA;2BACA;YACA,iBAAiB,aAAa,CAAC,EAAE,CAAC,eAAe;mBACjD;QACF;IACF;IAEA,OAAO;AACT;AAEO,SAAS,0CAAoB,GAAc;IAChD,MAAM,mBAAE,eAAe,iBAAE,aAAa,SAAE,KAAK,EAAE,GAAG;IAClD,MAAM,QAAwB,EAAE;IAChC,IAAI,aAA2B;IAC/B,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,MAAM,EAAE,IAAK;QACrC,MAAM,OAAO,KAAK,CAAC,EAAE;QACrB,IAAI,QAAQ,MAAM;YAChB,IAAI,cAAc,MAAM;gBACtB,MAAM,IAAI,CAAC;gBACX,aAAa;YACf;YACA;QACF;QACA,IAAI,cAAc,MAChB,aAAa;YACX,UAAU;YACV,QAAQ;2BACR;6BACA;YACA,OAAO,KAAK,KAAK;YACjB,OAAO,KAAK,KAAK;YACjB,OAAO,EAAE;QACX;aAEA,WAAW,MAAM,GAAG;QAEtB,WAAW,KAAK,CAAC,IAAI,CAAC;IACxB;IACA,OAAO;AACT;AAEA,SAAS,sCACP,GAAsB,EACtB,SAAmB;IAEnB,+BAA+B,GAC/B,MAAM,SAAE,KAAK,SAAE,KAAK,SAAE,KAAK,EAAE,GAAG;IAEhC,OAAO;QACL,YAAY,UAAU,GAAG,CAAC,CAAC;YACzB,MAAM,KAAK,MAAM,MAAM,CAAC,CAAC,OAAS,KAAK,MAAM,IAAI;YACjD,GAAG,IAAI,CAAC,CAAC,GAAG,IAAM,EAAE,KAAK,GAAG,EAAE,KAAK;YACnC,OAAO;gBACL,UAAU;gBACV,+CAA+C;gBAC/C,OAAO,CAAA,GAAA,sBAAc,EACnB;oBACE,GAAG,GAAG;oBACN,OAAO;gBACT,GACA,CAAA,GAAA,qBAAa,EAAE,GAAG;YAEtB;QACF;QACA,gBAAgB,IAAI,SAAS,CAAC,UAAU;eACxC;eACA;IACF;AACF;AAEO,SAAS,0CACd,GAAwB;IAExB,OAAO;QACL,QAAQ,IAAI,UAAU,CAAC,MAAM;QAC7B,UAAU,IAAI,UAAU,CAAC,QAAQ;QACjC,YAAY,IAAI,UAAU,CAAC,UAAU;IACvC;AACF","sources":["packages/column-views/src/correlation-chart/prepare-data.ts"],"sourcesContent":["import { CompositeStratigraphicScaleInfo } from \"../age-axis\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { type ColumnGeoJSONRecord, UnitLong } from \"@macrostrat/api-types\";\nimport {\n MergeSectionsMode,\n PrepareColumnOptions,\n prepareColumnUnits,\n preprocessUnits,\n} from \"../prepare-units\";\nimport { mergeAgeRanges } from \"@macrostrat/stratigraphy-utils\";\nimport { PackageLayoutData } from \"../prepare-units/types\";\n\nexport interface ColumnIdentifier {\n col_id: number;\n col_name: string;\n project_id: number;\n}\n\ninterface ColumnData {\n columnID: number;\n units: UnitLong[];\n}\n\nexport interface CorrelationChartSettings extends Omit<\n PrepareColumnOptions,\n \"axisType\"\n> {\n targetUnitHeight?: number;\n}\n\nexport interface CorrelationChartData {\n packages: MultiColumnPackageData[];\n scaleInfo: CompositeStratigraphicScaleInfo;\n nColumns: number;\n}\n\nexport interface ColumnIdentifier {\n col_id: number;\n col_name: string;\n project_id: number;\n}\n\nexport function buildCorrelationChartData(\n columns: ColumnData[],\n settings: CorrelationChartSettings,\n): CorrelationChartData {\n console.log(settings);\n const {\n mergeSections = MergeSectionsMode.OVERLAPPING,\n targetUnitHeight,\n ...rest\n } = settings;\n\n const opts: PrepareColumnOptions = {\n axisType: ColumnAxisType.AGE,\n targetUnitHeight,\n mergeSections,\n ...rest,\n };\n\n if (columns.length == 0) {\n return null;\n }\n\n // Flatten the units array to pretend that all units are in the same column\n const _units = columns.map((d) => d.units).flat();\n\n const columnIDs = columns.map((d) => d.columnID);\n\n const preparedUnits = prepareColumnUnits(_units, opts);\n\n const { sections, totalHeight } = preparedUnits;\n\n const scaleInfo: CompositeStratigraphicScaleInfo = {\n axisType: ColumnAxisType.AGE,\n totalHeight,\n packages: sections.map((d) => d.scaleInfo),\n };\n\n const packages = sections.map((d) => {\n return separateColumns(d, columnIDs);\n });\n\n return { scaleInfo, packages, nColumns: columnIDs.length };\n}\n\ninterface UnitGroup {\n b_age: number;\n t_age: number;\n strat_name_id: number;\n strat_name_long: string;\n units: (UnitLong | null)[];\n}\n\nexport interface UnitGroupBox extends UnitGroup {\n units: UnitLong[];\n startCol: number;\n endCol: number;\n}\n\ninterface ColumnExt {\n columnID: number;\n units: UnitLong[];\n}\n\ninterface MultiColumnPackageData {\n columnData: ColumnExt[];\n bestPixelScale?: number;\n b_age: number;\n t_age: number;\n}\n\nexport function findLaterallyExtensiveUnits(\n pkg: MultiColumnPackageData,\n): UnitGroup[] {\n const { columnData, b_age, t_age } = pkg;\n // Group units by strat_name_id\n const unitIndex = new Map<number, Map<number, UnitLong>>();\n for (const column of columnData) {\n const { units } = column;\n for (const unit of units) {\n if (unit.strat_name_id == null) continue;\n if (!unitIndex.has(unit.strat_name_id)) {\n unitIndex.set(unit.strat_name_id, new Map());\n }\n unitIndex.get(unit.strat_name_id).set(column.columnID, unit);\n }\n }\n\n // Prepare grouped units for rendering\n const unitGroups: UnitGroup[] = [];\n for (const [strat_name_id, unitIndex0] of unitIndex) {\n const units = columnData.map((d) => unitIndex0.get(d.columnID) ?? null);\n const filteredUnits = units.filter((d) => d != null);\n const [t_age, b_age] = mergeAgeRanges(\n filteredUnits.map((d) => [d.t_age, d.b_age]),\n );\n if (filteredUnits.length <= 1) continue;\n\n unitGroups.push({\n b_age,\n t_age,\n strat_name_id,\n strat_name_long: filteredUnits[0].strat_name_long,\n units,\n });\n }\n\n return unitGroups;\n}\n\nexport function splitStratIntoBoxes(pkg: UnitGroup): UnitGroupBox[] {\n const { strat_name_long, strat_name_id, units } = pkg;\n const boxes: UnitGroupBox[] = [];\n let currentBox: UnitGroupBox = null;\n for (let i = 0; i < units.length; i++) {\n const unit = units[i];\n if (unit == null) {\n if (currentBox != null) {\n boxes.push(currentBox);\n currentBox = null;\n }\n continue;\n }\n if (currentBox == null) {\n currentBox = {\n startCol: i,\n endCol: i,\n strat_name_id,\n strat_name_long,\n t_age: unit.t_age,\n b_age: unit.b_age,\n units: [],\n };\n } else {\n currentBox.endCol = i;\n }\n currentBox.units.push(unit);\n }\n return boxes;\n}\n\nfunction separateColumns(\n pkg: PackageLayoutData,\n columnIDs: number[],\n): MultiColumnPackageData {\n /** Separate columns by col_id */\n const { units, t_age, b_age } = pkg;\n\n return {\n columnData: columnIDs.map((d) => {\n const u1 = units.filter((unit) => unit.col_id == d);\n u1.sort((a, b) => a.t_age - b.t_age);\n return {\n columnID: d,\n // Ensure that the units correctly show overlap\n units: preprocessUnits(\n {\n ...pkg,\n units: u1,\n },\n ColumnAxisType.AGE,\n ),\n };\n }),\n bestPixelScale: pkg.scaleInfo.pixelScale,\n t_age,\n b_age,\n };\n}\n\nexport function columnGeoJSONRecordToColumnIdentifier(\n col: ColumnGeoJSONRecord,\n): ColumnIdentifier {\n return {\n col_id: col.properties.col_id,\n col_name: col.properties.col_name,\n project_id: col.properties.project_id,\n };\n}\n"],"names":[],"version":3,"file":"column-views.88d63dd0.js.map"}
@@ -1,4 +1,4 @@
1
- import {useColumnNavigationStore as $09486427d129f589$export$642c2b57c47ea41} from "./column-views.e3b9a317.js";
1
+ import {useColumnNavigationStore as $09486427d129f589$export$642c2b57c47ea41} from "./column-views.c3495702.js";
2
2
  import {buildKeyMapping as $40b71acee908f16d$export$b3975a0f05980d25, buildTriangulation as $40b71acee908f16d$export$39cd73f2cb8dc4f7} from "./column-views.dc42f5d0.js";
3
3
  import {useMemo as $1DDgQ$useMemo, useCallback as $1DDgQ$useCallback, useEffect as $1DDgQ$useEffect} from "react";
4
4
  import {setGeoJSON as $1DDgQ$setGeoJSON, buildGeoJSONSource as $1DDgQ$buildGeoJSONSource} from "@macrostrat/mapbox-utils";
@@ -109,4 +109,4 @@ function $ab1043903d5406ef$export$c613fba0aabeee13(color = "purple") {
109
109
 
110
110
 
111
111
  export {$ab1043903d5406ef$export$8c41dd563753848 as ColumnKeyboardNavigation, $ab1043903d5406ef$export$c613fba0aabeee13 as buildKeyboardNavigationStyle};
112
- //# sourceMappingURL=column-views.935ef6f7.js.map
112
+ //# sourceMappingURL=column-views.8b623b27.js.map
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;AAaO,SAAS,yCAAyB,KAAuB;IAC9D,kEAAkE,GAClE,MAAM,qBAAE,oBAAoB,OAAO,GAAG;IACtC,MAAM,UAAU,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,OAAO;IACjE,MAAM,SAAS,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,cAAc;IACvE,MAAM,eAAe,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,YAAY;IAE3E,MAAM,UAAU,CAAA,GAAA,cAAM,EAAE;QACtB,IAAI,CAAC,WAAW,QAAQ,MAAM,IAAI,GAAG,OAAO;QAC5C,OAAO,CAAA,GAAA,yCAAiB,EAAE;IAC5B,GAAG;QAAC;KAAQ;IAEZ,MAAM,SAAS,CAAA,GAAA,gBAAQ;IACvB,MAAM,MAAM,OAAO,OAAO;IAE1B,MAAM,aAAa,CAAA,GAAA,cAAM,EAAE;QACzB,IAAI,WAAW,QAAQ,WAAW,QAAQ,OAAO,MAAM,OAAO;QAE9D,MAAM,aAAa,CAAC;YAClB,MAAM,KAAK,IAAI,OAAO,CAAC;YACvB,OAAO;gBAAC,GAAG,CAAC;gBAAE,GAAG,CAAC;aAAC;QACrB;QAEA,MAAM,eAAe,QAAQ,SAAS,CACpC,CAAC,IAAM,EAAE,UAAU,CAAC,MAAM,IAAI;QAGhC,MAAM,YAAY,QAAQ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa;QAC9D,OAAO,CAAA,GAAA,yCAAc,EACnB,WACA,QAAQ,SAAS,EACjB,cACA;IAEJ,GAAG;QAAC;QAAQ;QAAS;QAAS;KAAI;IAElC,MAAM,YAAY,CAAA,GAAA,kBAAU,EAC1B,CAAC;QACC,IAAI,cAAc,MAAM;QACxB,MAAM,eAAe,UAAU,CAAC,MAAM,KAAK,CAAC;QAC5C,IAAI,gBAAgB,MAAM;QAC1B,MAAM,cAAc;QACpB,MAAM,eAAe;QACrB,aAAa;QACb,aAAa,OAAO,CAAC,aAAa,CAAC,EAAE;QACrC,OAAO;IACT,GACA;QAAC;QAAY;KAAa;IAG5B,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,OAAO,MAAM;QACjB,MAAM,SAAS,IAAI,SAAS;QAC5B,OAAO,gBAAgB,CAAC,WAAW;QACnC,OAAO;YACL,OAAO,mBAAmB,CAAC,WAAW;QACxC;IACF,GAAG;QAAC;QAAK;KAAU;IAEnB,CAAA,GAAA,0BAAkB,EAChB,CAAC;QACC,IAAI,WAAW,QAAQ,CAAC,mBAAmB;QAC3C,MAAM,YAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,CAAC,KAAK;QAEtC,CAAA,GAAA,iBAAS,EAAE,KAAK,gBAAgB;YAC9B,MAAM;sBACN;QACF;IACF,GACA;QAAC;QAAS;KAAkB;IAG9B,qCAAqC;IACrC,6DAA6D;IAE7D,OAAO;AACT;AAEO,SAAS,0CAA6B,QAAgB,QAAQ;IACnE,OAAO;QACL,SAAS;YACP,gBAAgB,CAAA,GAAA,yBAAiB;QAEnC;QACA,QAAQ;YACN;gBACE,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,OAAO;oBACL,cAAc;oBACd,cAAc;gBAChB;YACF;YACA;gBACE,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,OAAO;oBACL,iBAAiB;oBACjB,gBAAgB;gBAClB;YACF;SACD;IACH;AACF","sources":["packages/column-views/src/maps/column-navigation/mapbox/keyboard-navigation.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from \"react\";\nimport { buildGeoJSONSource, setGeoJSON } from \"@macrostrat/mapbox-utils\";\nimport { useMapRef, useMapStyleOperator } from \"@macrostrat/mapbox-react\";\nimport { useColumnNavigationStore } from \"./state\";\nimport {\n buildTriangulation,\n buildKeyMapping,\n} from \"../utils/keyboard-navigation\";\n\ninterface KeyboardNavProps {\n showTriangulation: boolean;\n}\n\nexport function ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const { showTriangulation = false } = props;\n const columns = useColumnNavigationStore((state) => state.columns);\n const col_id = useColumnNavigationStore((state) => state.selectedColumn);\n const selectColumn = useColumnNavigationStore((state) => state.selectColumn);\n\n const voronoi = useMemo(() => {\n if (!columns || columns.length == 0) return null;\n return buildTriangulation(columns);\n }, [columns]);\n\n const mapRef = useMapRef();\n const map = mapRef.current;\n\n const keyMapping = useMemo(() => {\n if (columns == null || voronoi == null || map == null) return null;\n\n const projection = (d) => {\n const pt = map.project(d);\n return [pt.x, pt.y];\n };\n\n const currentIndex = columns.findIndex(\n (d) => d.properties.col_id == col_id,\n );\n\n const neighbors = voronoi.tri.delaunay.neighbors[currentIndex];\n return buildKeyMapping(\n neighbors,\n voronoi.centroids,\n currentIndex,\n projection,\n );\n }, [col_id, columns, voronoi, map]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (keyMapping == null) return;\n const nextColumnIx = keyMapping[event.which];\n if (nextColumnIx == null) return;\n event.preventDefault();\n event.stopPropagation();\n // @ts-ignore\n selectColumn(columns[nextColumnIx].id);\n return false;\n },\n [keyMapping, selectColumn],\n );\n\n useEffect(() => {\n if (map == null) return;\n const canvas = map.getCanvas();\n canvas.addEventListener(\"keydown\", onKeyDown);\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [map, onKeyDown]);\n\n useMapStyleOperator(\n (map) => {\n if (voronoi == null || !showTriangulation) return;\n const { features } = voronoi.tri.links();\n\n setGeoJSON(map, \"column-links\", {\n type: \"FeatureCollection\",\n features,\n });\n },\n [voronoi, showTriangulation],\n );\n\n //if (neighbors == null) return null;\n //const neighborFeatures = neighbors.map((d) => features[d]);\n\n return null;\n}\n\nexport function buildKeyboardNavigationStyle(color: string = \"purple\") {\n return {\n sources: {\n \"column-links\": buildGeoJSONSource(),\n //neighbors: buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"column-links\",\n type: \"line\",\n source: \"column-links\",\n paint: {\n \"line-color\": color,\n \"line-width\": 1.5,\n },\n },\n {\n id: \"column-centers\",\n type: \"circle\",\n source: \"column-links\",\n paint: {\n \"circle-radius\": 2,\n \"circle-color\": color,\n },\n },\n ],\n };\n}\n"],"names":[],"version":3,"file":"column-views.935ef6f7.js.map"}
1
+ {"mappings":";;;;;;;;;;;AAaO,SAAS,yCAAyB,KAAuB;IAC9D,kEAAkE,GAClE,MAAM,qBAAE,oBAAoB,OAAO,GAAG;IACtC,MAAM,UAAU,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,OAAO;IACjE,MAAM,SAAS,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,cAAc;IACvE,MAAM,eAAe,CAAA,GAAA,wCAAuB,EAAE,CAAC,QAAU,MAAM,YAAY;IAE3E,MAAM,UAAU,CAAA,GAAA,cAAM,EAAE;QACtB,IAAI,CAAC,WAAW,QAAQ,MAAM,IAAI,GAAG,OAAO;QAC5C,OAAO,CAAA,GAAA,yCAAiB,EAAE;IAC5B,GAAG;QAAC;KAAQ;IAEZ,MAAM,SAAS,CAAA,GAAA,gBAAQ;IACvB,MAAM,MAAM,OAAO,OAAO;IAE1B,MAAM,aAAa,CAAA,GAAA,cAAM,EAAE;QACzB,IAAI,WAAW,QAAQ,WAAW,QAAQ,OAAO,MAAM,OAAO;QAE9D,MAAM,aAAa,CAAC;YAClB,MAAM,KAAK,IAAI,OAAO,CAAC;YACvB,OAAO;gBAAC,GAAG,CAAC;gBAAE,GAAG,CAAC;aAAC;QACrB;QAEA,MAAM,eAAe,QAAQ,SAAS,CACpC,CAAC,IAAM,EAAE,UAAU,CAAC,MAAM,IAAI;QAGhC,MAAM,YAAY,QAAQ,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa;QAC9D,OAAO,CAAA,GAAA,yCAAc,EACnB,WACA,QAAQ,SAAS,EACjB,cACA;IAEJ,GAAG;QAAC;QAAQ;QAAS;QAAS;KAAI;IAElC,MAAM,YAAY,CAAA,GAAA,kBAAU,EAC1B,CAAC;QACC,IAAI,cAAc,MAAM;QACxB,MAAM,eAAe,UAAU,CAAC,MAAM,KAAK,CAAC;QAC5C,IAAI,gBAAgB,MAAM;QAC1B,MAAM,cAAc;QACpB,MAAM,eAAe;QACrB,aAAa;QACb,aAAa,OAAO,CAAC,aAAa,CAAC,EAAE;QACrC,OAAO;IACT,GACA;QAAC;QAAY;KAAa;IAG5B,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,OAAO,MAAM;QACjB,MAAM,SAAS,IAAI,SAAS;QAC5B,OAAO,gBAAgB,CAAC,WAAW;QACnC,OAAO;YACL,OAAO,mBAAmB,CAAC,WAAW;QACxC;IACF,GAAG;QAAC;QAAK;KAAU;IAEnB,CAAA,GAAA,0BAAkB,EAChB,CAAC;QACC,IAAI,WAAW,QAAQ,CAAC,mBAAmB;QAC3C,MAAM,YAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,CAAC,KAAK;QAEtC,CAAA,GAAA,iBAAS,EAAE,KAAK,gBAAgB;YAC9B,MAAM;sBACN;QACF;IACF,GACA;QAAC;QAAS;KAAkB;IAG9B,qCAAqC;IACrC,6DAA6D;IAE7D,OAAO;AACT;AAEO,SAAS,0CAA6B,QAAgB,QAAQ;IACnE,OAAO;QACL,SAAS;YACP,gBAAgB,CAAA,GAAA,yBAAiB;QAEnC;QACA,QAAQ;YACN;gBACE,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,OAAO;oBACL,cAAc;oBACd,cAAc;gBAChB;YACF;YACA;gBACE,IAAI;gBACJ,MAAM;gBACN,QAAQ;gBACR,OAAO;oBACL,iBAAiB;oBACjB,gBAAgB;gBAClB;YACF;SACD;IACH;AACF","sources":["packages/column-views/src/maps/column-navigation/mapbox/keyboard-navigation.ts"],"sourcesContent":["import { useCallback, useEffect, useMemo } from \"react\";\nimport { buildGeoJSONSource, setGeoJSON } from \"@macrostrat/mapbox-utils\";\nimport { useMapRef, useMapStyleOperator } from \"@macrostrat/mapbox-react\";\nimport { useColumnNavigationStore } from \"./state\";\nimport {\n buildTriangulation,\n buildKeyMapping,\n} from \"../utils/keyboard-navigation\";\n\ninterface KeyboardNavProps {\n showTriangulation: boolean;\n}\n\nexport function ColumnKeyboardNavigation(props: KeyboardNavProps) {\n /** Keyboard navigation of columns using a Delaunay triangulation */\n const { showTriangulation = false } = props;\n const columns = useColumnNavigationStore((state) => state.columns);\n const col_id = useColumnNavigationStore((state) => state.selectedColumn);\n const selectColumn = useColumnNavigationStore((state) => state.selectColumn);\n\n const voronoi = useMemo(() => {\n if (!columns || columns.length == 0) return null;\n return buildTriangulation(columns);\n }, [columns]);\n\n const mapRef = useMapRef();\n const map = mapRef.current;\n\n const keyMapping = useMemo(() => {\n if (columns == null || voronoi == null || map == null) return null;\n\n const projection = (d) => {\n const pt = map.project(d);\n return [pt.x, pt.y];\n };\n\n const currentIndex = columns.findIndex(\n (d) => d.properties.col_id == col_id,\n );\n\n const neighbors = voronoi.tri.delaunay.neighbors[currentIndex];\n return buildKeyMapping(\n neighbors,\n voronoi.centroids,\n currentIndex,\n projection,\n );\n }, [col_id, columns, voronoi, map]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (keyMapping == null) return;\n const nextColumnIx = keyMapping[event.which];\n if (nextColumnIx == null) return;\n event.preventDefault();\n event.stopPropagation();\n // @ts-ignore\n selectColumn(columns[nextColumnIx].id);\n return false;\n },\n [keyMapping, selectColumn],\n );\n\n useEffect(() => {\n if (map == null) return;\n const canvas = map.getCanvas();\n canvas.addEventListener(\"keydown\", onKeyDown);\n return () => {\n canvas.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [map, onKeyDown]);\n\n useMapStyleOperator(\n (map) => {\n if (voronoi == null || !showTriangulation) return;\n const { features } = voronoi.tri.links();\n\n setGeoJSON(map, \"column-links\", {\n type: \"FeatureCollection\",\n features,\n });\n },\n [voronoi, showTriangulation],\n );\n\n //if (neighbors == null) return null;\n //const neighborFeatures = neighbors.map((d) => features[d]);\n\n return null;\n}\n\nexport function buildKeyboardNavigationStyle(color: string = \"purple\") {\n return {\n sources: {\n \"column-links\": buildGeoJSONSource(),\n //neighbors: buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"column-links\",\n type: \"line\",\n source: \"column-links\",\n paint: {\n \"line-color\": color,\n \"line-width\": 1.5,\n },\n },\n {\n id: \"column-centers\",\n type: \"circle\",\n source: \"column-links\",\n paint: {\n \"circle-radius\": 2,\n \"circle-color\": color,\n },\n },\n ],\n };\n}\n"],"names":[],"version":3,"file":"column-views.8b623b27.js.map"}
@@ -20,10 +20,10 @@ async function $33a46f9423c8104a$export$45bd78cd093090fa(options = {}) {
20
20
  ...args,
21
21
  project_id: projectID
22
22
  };
23
- if (statusCode != null) args = {
24
- ...args,
25
- status_code: statusCode
26
- };
23
+ let _statusCode = undefined;
24
+ if (Array.isArray(statusCode)) _statusCode = statusCode.join(",");
25
+ else if (statusCode != null) _statusCode = statusCode;
26
+ args.statusCode = _statusCode;
27
27
  if (projectID == null) args = {
28
28
  ...args,
29
29
  all: true
@@ -156,4 +156,4 @@ async function $33a46f9423c8104a$export$d3d8b0fabcc76c5d(col_id, fetch = $33a46f
156
156
 
157
157
 
158
158
  export {$33a46f9423c8104a$export$45bd78cd093090fa as fetchAllColumns, $33a46f9423c8104a$export$e3270a4e30e40ff9 as useColumnFeatures, $33a46f9423c8104a$export$1aa679bd5e605f82 as fetchLithologies, $33a46f9423c8104a$export$5d2ec2e733dfe6c7 as fetchIntervals, $33a46f9423c8104a$export$780b4b253712916c as fetchEnvironments, $33a46f9423c8104a$export$cd7bfa0860f58b96 as fetchRefs, $33a46f9423c8104a$export$8ea8f45a7ffe4183 as fetchStratNames, $33a46f9423c8104a$export$b97b9bdd6a521298 as fetchUnits, $33a46f9423c8104a$export$d3d8b0fabcc76c5d as fetchColumnUnits};
159
- //# sourceMappingURL=column-views.3f246167.js.map
159
+ //# sourceMappingURL=column-views.8c296309.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/data-provider/fetch.ts"],"sourcesContent":["import {\n ColumnGeoJSONRecord,\n ColumnGeoJSONRecordWithID,\n MacrostratRef,\n StratName,\n StratUnit,\n UnitLong,\n} from \"@macrostrat/api-types\";\nimport {\n addQueryString,\n joinURL,\n useAPIResult,\n} from \"@macrostrat/ui-components\";\nimport crossFetch from \"cross-fetch\";\nimport { feature } from \"topojson-client\";\nimport { geoArea } from \"d3-geo\";\nimport _ from \"underscore\";\n\nfunction defaultFetch(\n url: string,\n options: RequestInit | undefined = undefined,\n) {\n const baseURL = \"https://macrostrat.org/api/v2\";\n return crossFetch(baseURL + url, options);\n}\n\nexport type ColumnStatusCode = \"in process\" | \"active\" | \"obsolete\";\n\nexport interface ColumnFetchOptions {\n apiBaseURL?: string;\n projectID?: number;\n statusCode?: ColumnStatusCode | ColumnStatusCode[];\n format?: \"geojson\" | \"topojson\" | \"geojson_bare\";\n fetch?: any;\n}\n\nexport async function fetchAllColumns(\n options: ColumnFetchOptions = {},\n): Promise<ColumnGeoJSONRecord[]> {\n const {\n apiBaseURL,\n projectID,\n format = \"topojson\",\n statusCode,\n fetch = crossFetch,\n } = options;\n\n let args: any = { format };\n if (projectID != null) {\n args = { ...args, project_id: projectID };\n }\n let _statusCode: string | undefined = undefined;\n if (Array.isArray(statusCode)) {\n _statusCode = statusCode.join(\",\");\n } else if (statusCode != null) {\n _statusCode = statusCode;\n }\n args.statusCode = _statusCode;\n\n if (projectID == null) {\n args = { ...args, all: true };\n }\n\n let url = \"/columns\";\n if (apiBaseURL != null) {\n url = joinURL(apiBaseURL, url);\n }\n\n // Try with fetch\n url = addQueryString(url, args);\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (res == null) {\n return null;\n }\n\n // Get JSON\n const data = await res.json();\n return postProcessColumns(columnProcessors[format](data));\n}\n\nexport function useColumnFeatures({\n apiRoute = \"/columns\",\n status_code,\n project_id,\n format = \"geojson\",\n}) {\n let all: boolean = undefined;\n if (status_code == null && project_id == null) {\n all = true;\n }\n\n const processor = columnProcessors[format];\n\n return useAPIResult(\n apiRoute,\n { format, all, status_code, project_id },\n processor,\n );\n}\n\nfunction processGeoJSON(res) {\n return processGeoJSONBare(res?.success?.data);\n}\n\nfunction processGeoJSONBare(res) {\n return res?.features;\n}\n\nfunction processTopoJSON(res) {\n try {\n const { data } = res.success;\n const { features: f } = feature(data, data.objects.output) as any;\n return f;\n } catch (err) {\n console.error(err);\n return [];\n }\n}\n\nfunction postProcessColumns(columns) {\n return promoteColumnIDs(\n convertSmallAreasToPoints(removeFeaturesWithoutGeometry(columns)),\n );\n}\n\nfunction promoteColumnIDs(\n features: ColumnGeoJSONRecord[],\n): ColumnGeoJSONRecordWithID[] {\n return features.map((f, i) => {\n return {\n id: f.properties?.col_id,\n ...f,\n };\n });\n}\n\nfunction removeFeaturesWithoutGeometry(features) {\n return features.filter((f) => f.geometry != null);\n}\n\nfunction convertSmallAreasToPoints(features) {\n return features.map((f) => {\n // GeoArea takes a long time to run. We are really more worried about points that are zero-area\n if (geoArea(f.geometry) < 1e-8) {\n const centroid = f.geometry.coordinates[0][0];\n f.geometry = {\n type: \"Point\",\n coordinates: centroid,\n };\n }\n return f;\n });\n}\n\nconst columnProcessors = {\n topojson: processTopoJSON,\n geojson: processGeoJSON,\n geojson_bare: processGeoJSONBare,\n};\n\nasync function unwrapResponse(res) {\n if (res == null) {\n return null;\n }\n const resData = await res.json();\n return resData[\"success\"][\"data\"];\n}\n\nexport async function fetchLithologies(fetch = defaultFetch) {\n const res = await fetch(\"/defs/lithologies?all\");\n return await unwrapResponse(res);\n}\n\nexport async function fetchIntervals(\n timescaleID: number | null,\n fetch = defaultFetch,\n) {\n let url = `/defs/intervals`;\n if (timescaleID != null) {\n url += `?timescale_id=${timescaleID}`;\n } else {\n url += \"?all\";\n }\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport async function fetchEnvironments(fetch = defaultFetch) {\n const res = await fetch(\"/defs/environments?all\");\n return await unwrapResponse(res);\n}\n\nexport async function fetchRefs(\n refs: number[],\n fetch = defaultFetch,\n): Promise<MacrostratRef[]> {\n let url = `/defs/refs`;\n if (refs.length == 0) {\n return [];\n }\n url += \"?ref_id=\" + refs.join(\",\");\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport async function fetchStratNames(\n names: number[],\n fetch = defaultFetch,\n): Promise<StratName[]> {\n let url = `/defs/strat_names`;\n if (names.length == 0) {\n return [];\n }\n url += \"?strat_name_id=\" + names.join(\",\");\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport type ColumnData = {\n units: UnitLong[];\n columnID: number;\n};\n\nexport async function fetchUnits(\n columns: number[],\n fetch = defaultFetch,\n): Promise<ColumnData[]> {\n const promises = columns.map((col_id) => fetchColumnUnits(col_id, fetch));\n return await Promise.all(promises);\n}\n\nexport async function fetchColumnUnits(\n col_id: number,\n fetch = defaultFetch,\n): Promise<ColumnData> {\n const params = new URLSearchParams();\n params.append(\"response\", \"long\");\n params.append(\"col_id\", col_id.toString());\n const res = await fetch(\"/units\" + \"?\" + params.toString());\n const data = await res.json();\n if (!data.success) {\n throw new Error(\"Failed to fetch column units\");\n }\n const units = data.success.data;\n return { columnID: col_id, units };\n}\n"],"names":[],"version":3,"file":"column-views.8c296309.js.map"}
@@ -1,28 +1,28 @@
1
- import $eIxPJ$macrostrathyper from "@macrostrat/hyper";
2
- import {useKeyHandler as $eIxPJ$useKeyHandler} from "@macrostrat/ui-components";
3
- import {createContext as $eIxPJ$createContext, useContext as $eIxPJ$useContext, useState as $eIxPJ$useState, useEffect as $eIxPJ$useEffect, useRef as $eIxPJ$useRef, useCallback as $eIxPJ$useCallback} from "react";
4
- import {useStore as $eIxPJ$useStore, createStore as $eIxPJ$createStore} from "zustand";
1
+ import $7fhMn$macrostrathyper from "@macrostrat/hyper";
2
+ import {useKeyHandler as $7fhMn$useKeyHandler} from "@macrostrat/ui-components";
3
+ import {createContext as $7fhMn$createContext, useContext as $7fhMn$useContext, useState as $7fhMn$useState, useEffect as $7fhMn$useEffect, useRef as $7fhMn$useRef, useCallback as $7fhMn$useCallback} from "react";
4
+ import {useStore as $7fhMn$useStore, createStore as $7fhMn$createStore} from "zustand";
5
5
 
6
6
 
7
7
 
8
8
 
9
9
 
10
- const $4d5d1c15f39f6a14$var$UnitSelectionContext = (0, $eIxPJ$createContext)(null);
11
- function $4d5d1c15f39f6a14$export$77a278d5ca56e309() {
12
- const store = (0, $eIxPJ$useContext)($4d5d1c15f39f6a14$var$UnitSelectionContext);
10
+ const $61771df184788970$var$UnitSelectionContext = (0, $7fhMn$createContext)(null);
11
+ function $61771df184788970$export$77a278d5ca56e309() {
12
+ const store = (0, $7fhMn$useContext)($61771df184788970$var$UnitSelectionContext);
13
13
  if (store == null) return ()=>{};
14
- return (0, $eIxPJ$useStore)(store, (state)=>state.onUnitSelected);
14
+ return (0, $7fhMn$useStore)(store, (state)=>state.onUnitSelected);
15
15
  }
16
- function $4d5d1c15f39f6a14$export$b220b1d3591dc9e5(selector) {
17
- const store = (0, $eIxPJ$useContext)($4d5d1c15f39f6a14$var$UnitSelectionContext);
16
+ function $61771df184788970$export$b220b1d3591dc9e5(selector) {
17
+ const store = (0, $7fhMn$useContext)($61771df184788970$var$UnitSelectionContext);
18
18
  if (store == null) return null;
19
- return (0, $eIxPJ$useStore)(store, selector);
19
+ return (0, $7fhMn$useStore)(store, selector);
20
20
  }
21
- function $4d5d1c15f39f6a14$export$f0dd93f90aa8e5da() {
22
- return $4d5d1c15f39f6a14$export$b220b1d3591dc9e5((state)=>state.selectedUnitData);
21
+ function $61771df184788970$export$f0dd93f90aa8e5da() {
22
+ return $61771df184788970$export$b220b1d3591dc9e5((state)=>state.selectedUnitData);
23
23
  }
24
- function $4d5d1c15f39f6a14$export$f19d75b1d4b676a4(props) {
25
- const [store] = (0, $eIxPJ$useState)(()=>(0, $eIxPJ$createStore)((set)=>({
24
+ function $61771df184788970$export$f19d75b1d4b676a4(props) {
25
+ const [store] = (0, $7fhMn$useState)(()=>(0, $7fhMn$createStore)((set)=>({
26
26
  selectedUnit: null,
27
27
  selectedUnitData: null,
28
28
  overlayPosition: null,
@@ -43,7 +43,15 @@ function $4d5d1c15f39f6a14$export$f19d75b1d4b676a4(props) {
43
43
  selectedUnitData: selectedUnit
44
44
  });
45
45
  },
46
- onUnitSelected: (unit, target, event)=>{
46
+ onUnitSelected: (input, target = null, event = null)=>{
47
+ if (input == null) return set({
48
+ selectedUnit: null,
49
+ selectedUnitData: null,
50
+ overlayPosition: null
51
+ });
52
+ let unit = null;
53
+ if (typeof input === "number") unit = props.units.find((u)=>u.unit_id === input) || null;
54
+ else unit = input;
47
55
  const el = props.columnRef?.current;
48
56
  let overlayPosition = null;
49
57
  /** This is not the natural place to get positions within the column,
@@ -80,7 +88,7 @@ function $4d5d1c15f39f6a14$export$f19d75b1d4b676a4(props) {
80
88
  }
81
89
  })));
82
90
  const { units: units, selectedUnit: selectedUnit } = props;
83
- (0, $eIxPJ$useEffect)(()=>{
91
+ (0, $7fhMn$useEffect)(()=>{
84
92
  // Synchronize store with provided props
85
93
  if (selectedUnit != null) {
86
94
  const unitData = units?.find((u)=>u.unit_id === selectedUnit);
@@ -96,16 +104,16 @@ function $4d5d1c15f39f6a14$export$f19d75b1d4b676a4(props) {
96
104
  selectedUnit,
97
105
  units
98
106
  ]);
99
- return (0, $eIxPJ$macrostrathyper)($4d5d1c15f39f6a14$var$UnitSelectionContext.Provider, {
107
+ return (0, $7fhMn$macrostrathyper)($61771df184788970$var$UnitSelectionContext.Provider, {
100
108
  value: store
101
109
  }, props.children);
102
110
  }
103
- function $4d5d1c15f39f6a14$export$cbbec12b1451fe7d(unit) {
104
- const ref = (0, $eIxPJ$useRef)();
105
- const selectedUnit = $4d5d1c15f39f6a14$export$f0dd93f90aa8e5da();
106
- const onSelectUnit = $4d5d1c15f39f6a14$export$b220b1d3591dc9e5((state)=>state.onUnitSelected);
111
+ function $61771df184788970$export$cbbec12b1451fe7d(unit) {
112
+ const ref = (0, $7fhMn$useRef)();
113
+ const selectedUnit = $61771df184788970$export$f0dd93f90aa8e5da();
114
+ const onSelectUnit = $61771df184788970$export$b220b1d3591dc9e5((state)=>state.onUnitSelected);
107
115
  const selected = selectedUnit?.unit_id == unit.unit_id;
108
- const onClick = (0, $eIxPJ$useCallback)((evt)=>{
116
+ const onClick = (0, $7fhMn$useCallback)((evt)=>{
109
117
  if (onSelectUnit == null) return;
110
118
  onSelectUnit(unit, ref.current, evt);
111
119
  evt.stopPropagation();
@@ -113,7 +121,7 @@ function $4d5d1c15f39f6a14$export$cbbec12b1451fe7d(unit) {
113
121
  unit,
114
122
  onSelectUnit
115
123
  ]);
116
- (0, $eIxPJ$useEffect)(()=>{
124
+ (0, $7fhMn$useEffect)(()=>{
117
125
  if (!selected || onSelectUnit == null) return;
118
126
  // In case we haven't set the position of the unit (if we don't have a target), set the selected unit
119
127
  onSelectUnit(unit, ref.current, null);
@@ -133,15 +141,15 @@ function $4d5d1c15f39f6a14$export$cbbec12b1451fe7d(unit) {
133
141
  onClick
134
142
  ];
135
143
  }
136
- function $4d5d1c15f39f6a14$export$70f5ee19650fc7d1({ units: units }) {
137
- const selectedUnit = $4d5d1c15f39f6a14$export$f0dd93f90aa8e5da();
138
- const selectUnit = $4d5d1c15f39f6a14$export$77a278d5ca56e309();
144
+ function $61771df184788970$export$70f5ee19650fc7d1({ units: units }) {
145
+ const selectedUnit = $61771df184788970$export$f0dd93f90aa8e5da();
146
+ const selectUnit = $61771df184788970$export$77a278d5ca56e309();
139
147
  const ix = units.findIndex((unit)=>unit.unit_id === selectedUnit?.unit_id);
140
148
  const keyMap = {
141
149
  38: ix - 1,
142
150
  40: ix + 1
143
151
  };
144
- (0, $eIxPJ$useKeyHandler)((event)=>{
152
+ (0, $7fhMn$useKeyHandler)((event)=>{
145
153
  const nextIx = keyMap[event.keyCode];
146
154
  if (nextIx == null || nextIx < 0 || nextIx >= units.length) return;
147
155
  selectUnit(units[nextIx], null, null);
@@ -154,5 +162,5 @@ function $4d5d1c15f39f6a14$export$70f5ee19650fc7d1({ units: units }) {
154
162
  }
155
163
 
156
164
 
157
- export {$4d5d1c15f39f6a14$export$77a278d5ca56e309 as useUnitSelectionDispatch, $4d5d1c15f39f6a14$export$b220b1d3591dc9e5 as useUnitSelectionStore, $4d5d1c15f39f6a14$export$f0dd93f90aa8e5da as useSelectedUnit, $4d5d1c15f39f6a14$export$f19d75b1d4b676a4 as UnitSelectionProvider, $4d5d1c15f39f6a14$export$cbbec12b1451fe7d as useUnitSelectionTarget, $4d5d1c15f39f6a14$export$70f5ee19650fc7d1 as UnitKeyboardNavigation};
158
- //# sourceMappingURL=column-views.64a84c43.js.map
165
+ export {$61771df184788970$export$77a278d5ca56e309 as useUnitSelectionDispatch, $61771df184788970$export$b220b1d3591dc9e5 as useUnitSelectionStore, $61771df184788970$export$f0dd93f90aa8e5da as useSelectedUnit, $61771df184788970$export$f19d75b1d4b676a4 as UnitSelectionProvider, $61771df184788970$export$cbbec12b1451fe7d as useUnitSelectionTarget, $61771df184788970$export$70f5ee19650fc7d1 as UnitKeyboardNavigation};
166
+ //# sourceMappingURL=column-views.a3fabf0f.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/data-provider/unit-selection.ts"],"sourcesContent":["import { BaseUnit } from \"@macrostrat/api-types\";\nimport h from \"@macrostrat/hyper\";\nimport { useKeyHandler } from \"@macrostrat/ui-components\";\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n ReactNode,\n RefObject,\n useRef,\n useCallback,\n} from \"react\";\nimport { createStore, StoreApi, useStore } from \"zustand\";\nimport type { RectBounds, IUnit } from \"../units/types\";\n\ntype UnitSelectDispatch = (\n unit: number | BaseUnit | null,\n target: HTMLElement | null,\n event: Event | null,\n) => void;\n\nconst UnitSelectionContext = createContext<StoreApi<UnitSelectionStore>>(null);\n\nexport function useUnitSelectionDispatch(): UnitSelectDispatch {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return () => {};\n }\n return useStore(store, (state) => state.onUnitSelected);\n}\n\nexport function useUnitSelectionStore<T>(\n selector: (state: UnitSelectionStore) => T,\n): T {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return null;\n }\n return useStore(store, selector);\n}\n\nexport function useSelectedUnit() {\n return useUnitSelectionStore((state) => state.selectedUnitData);\n}\n\ninterface UnitSelectionStore {\n selectedUnit: number | null;\n selectedUnitData: BaseUnit | null;\n overlayPosition: RectBounds | null;\n onUnitSelected: UnitSelectDispatch;\n setSelectedUnit: (unit: number | null) => void;\n}\n\nexport interface ColumnClickData {\n unitID: number | null;\n unit: BaseUnit | null;\n target: HTMLElement | null;\n height: number;\n // Room for boundary IDs eventually\n}\n\nexport function UnitSelectionProvider<T extends BaseUnit>(props: {\n children: ReactNode;\n columnRef?: RefObject<HTMLElement>;\n units: T[];\n selectedUnit: number | null;\n onClickedColumn?: (columnClickData: ColumnClickData, event: Event) => void;\n onUnitSelected?: (unitID: number | null, unit: T | null) => void;\n}) {\n const [store] = useState(() =>\n createStore<UnitSelectionStore>((set) => ({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n setSelectedUnit(selectedUnit: number | null | BaseUnit) {\n if (selectedUnit == null) {\n set({ selectedUnit: null, selectedUnitData: null });\n return;\n // If it's a number, set the selected unit\n } else if (typeof selectedUnit === \"number\") {\n set({ selectedUnit, selectedUnitData: null });\n } else if (\"unit_id\" in selectedUnit) {\n set({\n selectedUnit: selectedUnit.unit_id,\n selectedUnitData: selectedUnit,\n });\n }\n },\n onUnitSelected: (\n input: number | T | null,\n target: HTMLElement = null,\n event: PointerEvent = null,\n ) => {\n if (input == null) {\n return set({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n });\n }\n\n let unit: T | null = null;\n if (typeof input === \"number\") {\n unit = props.units.find((u) => u.unit_id === input) || null;\n } else {\n unit = input;\n }\n\n const el = props.columnRef?.current;\n let overlayPosition = null;\n\n /** This is not the natural place to get positions within the column,\n * but it will work for now.\n */\n if (props.onClickedColumn) {\n // Infer height from top and bottom height of unit (because that's passed back with the call)\n //const py = event.y;\n //const [bottom, top] = getUnitHeightRange(unit, axisType);\n //const height = Math.abs(bottom - top);\n\n /** Ideally this would be defined at the column level */\n const columnClickData: ColumnClickData = {\n unitID: unit?.unit_id,\n unit,\n target,\n height: el?.getBoundingClientRect().height || 0,\n };\n props.onClickedColumn(columnClickData, event);\n }\n\n if (unit != null && el != null && target != null) {\n const rect = el.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n overlayPosition = {\n x: targetRect.left - rect.left,\n y: targetRect.top - rect.top,\n width: targetRect.width,\n height: targetRect.height,\n };\n }\n props.onUnitSelected?.(unit?.unit_id, unit);\n\n return set({\n selectedUnit: unit?.unit_id,\n selectedUnitData: unit,\n overlayPosition,\n });\n },\n })),\n );\n\n const { units, selectedUnit } = props;\n\n useEffect(() => {\n // Synchronize store with provided props\n if (selectedUnit != null) {\n const unitData = units?.find((u) => u.unit_id === selectedUnit);\n store.setState({ selectedUnit, selectedUnitData: unitData });\n } else {\n store.setState({ selectedUnit: null, selectedUnitData: null });\n }\n }, [selectedUnit, units]);\n\n return h(UnitSelectionContext.Provider, { value: store }, props.children);\n}\n\nexport function useUnitSelectionTarget(\n unit: IUnit,\n): [React.RefObject<HTMLElement>, boolean, (evt: Event) => void] {\n const ref = useRef<HTMLElement>();\n const selectedUnit = useSelectedUnit();\n const onSelectUnit = useUnitSelectionStore((state) => state.onUnitSelected);\n const selected = selectedUnit?.unit_id == unit.unit_id;\n\n const onClick = useCallback(\n (evt: Event) => {\n if (onSelectUnit == null) return;\n onSelectUnit(unit, ref.current, evt);\n evt.stopPropagation();\n },\n [unit, onSelectUnit],\n );\n\n useEffect(() => {\n if (!selected || onSelectUnit == null) return;\n // In case we haven't set the position of the unit (if we don't have a target), set the selected unit\n onSelectUnit(unit, ref.current, null);\n\n // Scroll the unit into view\n ref.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\",\n });\n }, [selected, onSelectUnit]);\n\n return [ref, selected, onClick];\n}\n\nexport function UnitKeyboardNavigation<T extends BaseUnit>({\n units,\n}: {\n units: T[];\n}) {\n const selectedUnit = useSelectedUnit();\n const selectUnit = useUnitSelectionDispatch();\n\n const ix = units.findIndex((unit) => unit.unit_id === selectedUnit?.unit_id);\n\n const keyMap = {\n 38: ix - 1,\n 40: ix + 1,\n };\n\n useKeyHandler(\n (event) => {\n const nextIx = keyMap[event.keyCode];\n if (nextIx == null || nextIx < 0 || nextIx >= units.length) return;\n selectUnit(units[nextIx], null, null);\n event.stopPropagation();\n },\n [units, ix],\n );\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.a3fabf0f.js.map"}
@@ -0,0 +1,184 @@
1
+ import {FossilDataType as $a3ff7da576c02df0$export$a990c76b38782f57, useFossilData as $a3ff7da576c02df0$export$e6af757fa9780077} from "./column-views.6698b95a.js";
2
+ import {BaseMeasurementsColumn as $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d, TruncatedList as $c6d9d48b3424a44c$export$653e47a7a0da0f0d} from "./column-views.faacfc3c.js";
3
+ import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76, useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d} from "./column-views.4ed90896.js";
4
+ import "./column-views.b7016f82.css";
5
+ import $6u76g$columnviewsea4ebbb7js from "./column-views.ea4ebbb7.js";
6
+ import $6u76g$macrostrathyper from "@macrostrat/hyper";
7
+ import {Box as $6u76g$Box, useElementSize as $6u76g$useElementSize} from "@macrostrat/ui-components";
8
+ import {ColumnSVG as $6u76g$ColumnSVG, ColumnAxisType as $6u76g$ColumnAxisType} from "@macrostrat/column-components";
9
+ import {useRef as $6u76g$useRef} from "react";
10
+
11
+
12
+ function $parcel$interopDefault(a) {
13
+ return a && a.__esModule ? a.default : a;
14
+ }
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+ const $b9286605a04210d4$var$h = (0, $6u76g$macrostrathyper).styled((0, ($parcel$interopDefault($6u76g$columnviewsea4ebbb7js))));
24
+ function $b9286605a04210d4$var$FossilInfo(props) {
25
+ const { note: note, spacing: spacing } = props;
26
+ const { data: data, unit: unit } = note;
27
+ return $b9286605a04210d4$var$h((0, $c6d9d48b3424a44c$export$653e47a7a0da0f0d), {
28
+ data: data,
29
+ className: "fossil-collections",
30
+ itemRenderer: $b9286605a04210d4$var$PBDBCollectionLink
31
+ });
32
+ }
33
+ function $b9286605a04210d4$var$PBDBCollectionLink({ data: data }) {
34
+ /** A link to a PBDB collection that handles either an occurrence or collection object */ return $b9286605a04210d4$var$h("a.link-id", {
35
+ href: `https://paleobiodb.org/classic/basicCollectionSearch?collection_no=${data.cltn_id}`
36
+ }, data.best_name ?? data.cltn_name);
37
+ }
38
+ const $b9286605a04210d4$var$matchingUnit = (dz)=>(d)=>d.unit_id == dz[0].unit_id;
39
+ function $b9286605a04210d4$export$554267114407ef68({ columnID: columnID, type: type = (0, $a3ff7da576c02df0$export$a990c76b38782f57).Collections }) {
40
+ const data = (0, $a3ff7da576c02df0$export$e6af757fa9780077)(columnID, type);
41
+ return $b9286605a04210d4$var$h((0, $c6d9d48b3424a44c$export$ce5c4f2fdf4e644d), {
42
+ data: data,
43
+ noteComponent: $b9286605a04210d4$var$FossilInfo,
44
+ className: "fossil-collections",
45
+ matchingUnit: $b9286605a04210d4$var$matchingUnit
46
+ });
47
+ }
48
+ function $b9286605a04210d4$export$652730986cccff7a({ columnID: columnID }) {
49
+ /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will
50
+ eventually be extended with first/last occurrence markers and range bars.
51
+ */ const data = (0, $a3ff7da576c02df0$export$e6af757fa9780077)(columnID, (0, $a3ff7da576c02df0$export$a990c76b38782f57).Occurrences);
52
+ // convert the data to a map
53
+ const occurrenceMap = new Map(data);
54
+ const col = (0, $d5074f164411387e$export$f8509b7cce386c7d)();
55
+ const matrix = $b9286605a04210d4$var$createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);
56
+ const scale = (0, $d5074f164411387e$export$a7fc62995ec4f76)();
57
+ const { taxonRanges: taxonRanges } = matrix;
58
+ const padding = 16;
59
+ const spacing = 16;
60
+ const taxonEntries = Array.from(taxonRanges.entries());
61
+ //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa
62
+ const width = padding * 2 + spacing * taxonEntries.length;
63
+ return $b9286605a04210d4$var$h((0, $6u76g$Box), {
64
+ className: "taxon-ranges",
65
+ width: width,
66
+ height: col.totalHeight
67
+ }, [
68
+ $b9286605a04210d4$var$h($b9286605a04210d4$var$TaxonOccurrenceLabels, {
69
+ taxonEntries: taxonEntries,
70
+ padding: padding,
71
+ spacing: spacing,
72
+ scale: scale
73
+ }),
74
+ $b9286605a04210d4$var$h((0, $6u76g$ColumnSVG), {
75
+ width: padding * 2 + spacing * taxonEntries.length
76
+ }, $b9286605a04210d4$var$h("g.taxa-occurrences-matrix", taxonEntries.map(([taxonName, ranges], rowIndex)=>{
77
+ const xPosition = padding + rowIndex * spacing;
78
+ return $b9286605a04210d4$var$h("g", {
79
+ transform: `translate(${xPosition})`
80
+ }, [
81
+ ranges.map(([top, bottom])=>{
82
+ return $b9286605a04210d4$var$h("line", {
83
+ y1: scale(top),
84
+ y2: scale(bottom)
85
+ });
86
+ })
87
+ ]);
88
+ })))
89
+ ]);
90
+ }
91
+ function $b9286605a04210d4$var$TaxonOccurrenceLabels({ taxonEntries: taxonEntries, padding: padding, spacing: spacing, scale: scale }) {
92
+ return $b9286605a04210d4$var$h("div.taxon-labels", [
93
+ taxonEntries.map(([taxonName, ranges], rowIndex)=>{
94
+ const top = ranges[0]?.[0] ?? 0;
95
+ let topPx = scale(top) - 20;
96
+ if (topPx < 200) topPx = 0;
97
+ return $b9286605a04210d4$var$h($b9286605a04210d4$var$TaxonLabel, {
98
+ top: topPx,
99
+ left: padding + rowIndex * spacing,
100
+ taxonName: taxonName
101
+ });
102
+ })
103
+ ]);
104
+ }
105
+ function $b9286605a04210d4$var$TaxonLabel({ top: top, left: left, taxonName: taxonName }) {
106
+ const ref = (0, $6u76g$useRef)();
107
+ const textSize = (0, $6u76g$useElementSize)(ref);
108
+ const labelWidth = textSize?.height ?? 200;
109
+ return $b9286605a04210d4$var$h("div.taxon-label", {
110
+ style: {
111
+ top: `${top}px`,
112
+ marginLeft: `${left}px`,
113
+ "--label-width": `${labelWidth}px`
114
+ }
115
+ }, $b9286605a04210d4$var$h("div.taxon-label-inner", $b9286605a04210d4$var$h("div.taxon-label-text", {
116
+ ref: ref
117
+ }, taxonName)));
118
+ }
119
+ function $b9286605a04210d4$var$TaxonOccurrenceEntry({ xPosition: xPosition, ranges: ranges, scale: scale, name: name }) {
120
+ return $b9286605a04210d4$var$h("g", {
121
+ transform: `translate(${xPosition})`
122
+ }, [
123
+ ranges.map(([top, bottom])=>{
124
+ return $b9286605a04210d4$var$h("line", {
125
+ y1: scale(top),
126
+ y2: scale(bottom)
127
+ });
128
+ })
129
+ ]);
130
+ }
131
+ function $b9286605a04210d4$var$createOccurrenceMatrix(units, data, axisType = (0, $6u76g$ColumnAxisType).AGE) {
132
+ const taxonUnitMap = new Map();
133
+ const taxonOccurrenceMap = new Map();
134
+ for (const [unit_id, occurrences] of data.entries())for (const occ of occurrences){
135
+ const taxonName = occ.best_name ?? occ.taxon_name;
136
+ if (!taxonUnitMap.has(taxonName)) {
137
+ taxonUnitMap.set(taxonName, new Set());
138
+ taxonOccurrenceMap.set(taxonName, []);
139
+ }
140
+ taxonUnitMap.get(taxonName).add(unit_id);
141
+ taxonOccurrenceMap.get(taxonName).push(occ);
142
+ }
143
+ // sort the taxon occurrence map by number of occurrences
144
+ const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b)=>{
145
+ // Sort alphabetically by taxon name
146
+ return b[0].localeCompare(a[0]);
147
+ });
148
+ const taxonRanges = new Map();
149
+ for (const [taxonName, unitSet] of taxonUnitMap.entries())taxonRanges.set(taxonName, $b9286605a04210d4$var$accumulatePresenceDomains(units, unitSet, axisType));
150
+ return {
151
+ occurrenceMap: data,
152
+ taxonUnitMap: new Map(sortedTaxa),
153
+ taxonOccurrenceMap: taxonOccurrenceMap,
154
+ taxonRanges: taxonRanges
155
+ };
156
+ }
157
+ function $b9286605a04210d4$var$accumulatePresenceDomains(unit, presenceUnits, axisType) {
158
+ const domains = [];
159
+ let currentDomain = null;
160
+ for (const u of unit){
161
+ if (presenceUnits.has(u.unit_id)) {
162
+ if (currentDomain == null) {
163
+ if (axisType == (0, $6u76g$ColumnAxisType).DEPTH || axisType == (0, $6u76g$ColumnAxisType).HEIGHT) currentDomain = [
164
+ u.t_pos,
165
+ u.b_pos
166
+ ];
167
+ else currentDomain = [
168
+ u.t_age,
169
+ u.b_age
170
+ ];
171
+ } else if (axisType == (0, $6u76g$ColumnAxisType).DEPTH || axisType == (0, $6u76g$ColumnAxisType).HEIGHT) currentDomain[1] = u.b_pos;
172
+ else currentDomain[1] = u.b_age;
173
+ } else if (currentDomain != null) {
174
+ domains.push(currentDomain);
175
+ currentDomain = null;
176
+ }
177
+ }
178
+ if (currentDomain != null) domains.push(currentDomain);
179
+ return domains;
180
+ }
181
+
182
+
183
+ export {$b9286605a04210d4$export$554267114407ef68 as PBDBFossilsColumn, $b9286605a04210d4$export$652730986cccff7a as PBDBOccurrencesMatrix, $a3ff7da576c02df0$export$a990c76b38782f57 as FossilDataType};
184
+ //# sourceMappingURL=column-views.abeab9aa.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/facets/fossils/index.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n FossilDataType,\n PBDBCollection,\n PBDBOccurrence,\n useFossilData,\n} from \"./provider\";\nimport type { IUnit } from \"../../units\";\nimport { BaseMeasurementsColumn, TruncatedList } from \"../base-sample-column\";\nimport { Box, useElementSize } from \"@macrostrat/ui-components\";\nimport { InternMap } from \"d3-array\";\nimport { ColumnAxisType, ColumnSVG } from \"@macrostrat/column-components\";\nimport {\n useMacrostratColumnData,\n useCompositeScale,\n} from \"../../data-provider\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport styles from \"./index.module.sass\";\nimport { useRef } from \"react\";\n\nconst h = hyper.styled(styles);\n\nexport { FossilDataType };\n\ninterface FossilItemProps {\n note: {\n data: PBDBCollection[];\n unit?: IUnit;\n };\n spacing?: {\n below?: number;\n above?: number;\n };\n width?: number;\n height?: number;\n color?: string;\n}\n\nfunction FossilInfo(props: FossilItemProps) {\n const { note, spacing } = props;\n const { data, unit } = note;\n\n return h(TruncatedList, {\n data,\n className: \"fossil-collections\",\n itemRenderer: PBDBCollectionLink,\n });\n}\n\nfunction PBDBCollectionLink({\n data,\n}: {\n data: PBDBCollection | PBDBOccurrence;\n}) {\n /** A link to a PBDB collection that handles either an occurrence or collection object */\n return h(\n \"a.link-id\",\n {\n href: `https://paleobiodb.org/classic/basicCollectionSearch?collection_no=${data.cltn_id}`,\n },\n data.best_name ?? data.cltn_name,\n );\n}\n\nconst matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;\n\nexport function PBDBFossilsColumn({\n columnID,\n type = FossilDataType.Collections,\n}: {\n columnID: number;\n type: FossilDataType;\n}) {\n const data = useFossilData(columnID, type);\n\n return h(BaseMeasurementsColumn, {\n data,\n noteComponent: FossilInfo,\n className: \"fossil-collections\",\n matchingUnit,\n });\n}\n\nexport function PBDBOccurrencesMatrix({ columnID }) {\n /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will\n eventually be extended with first/last occurrence markers and range bars.\n */\n const data = useFossilData(columnID, FossilDataType.Occurrences) as InternMap<\n number,\n PBDBOccurrence[]\n >;\n\n // convert the data to a map\n const occurrenceMap = new Map(data);\n\n const col = useMacrostratColumnData();\n const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);\n\n const scale = useCompositeScale();\n\n const { taxonRanges } = matrix;\n\n const padding = 16;\n const spacing = 16;\n\n const taxonEntries = Array.from(taxonRanges.entries());\n //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa\n\n const width = padding * 2 + spacing * taxonEntries.length;\n\n return h(Box, { className: \"taxon-ranges\", width, height: col.totalHeight }, [\n h(TaxonOccurrenceLabels, {\n taxonEntries,\n padding,\n spacing,\n scale,\n }),\n h(\n ColumnSVG,\n {\n width: padding * 2 + spacing * taxonEntries.length,\n },\n h(\n \"g.taxa-occurrences-matrix\",\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const xPosition = padding + rowIndex * spacing;\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n }),\n ),\n ),\n ]);\n}\n\nfunction TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {\n return h(\"div.taxon-labels\", [\n taxonEntries.map(([taxonName, ranges], rowIndex) => {\n const top = ranges[0]?.[0] ?? 0;\n let topPx = scale(top) - 20;\n if (topPx < 200) topPx = 0;\n\n return h(TaxonLabel, {\n top: topPx,\n left: padding + rowIndex * spacing,\n taxonName,\n });\n }),\n ]);\n}\n\nfunction TaxonLabel({ top, left, taxonName }) {\n const ref = useRef();\n const textSize = useElementSize(ref);\n const labelWidth = textSize?.height ?? 200;\n return h(\n \"div.taxon-label\",\n {\n style: {\n top: `${top}px`,\n marginLeft: `${left}px`,\n \"--label-width\": `${labelWidth}px`,\n },\n },\n h(\"div.taxon-label-inner\", h(\"div.taxon-label-text\", { ref }, taxonName)),\n );\n}\n\ntype TaxonUnitMap = Map<string, Set<number>>;\n\ninterface OccurrenceMatrixData {\n occurrenceMap: Map<number, PBDBOccurrence[]>; // Map of unit IDs to occurrences (original data)\n taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs\n taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences\n taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges\n}\n\nfunction TaxonOccurrenceEntry({\n xPosition,\n ranges,\n scale,\n name,\n}: {\n xPosition: number;\n units: Set<number>;\n}) {\n return h(\"g\", { transform: `translate(${xPosition})` }, [\n ranges.map(([top, bottom]) => {\n return h(\"line\", {\n y1: scale(top),\n y2: scale(bottom),\n });\n }),\n ]);\n}\n\nfunction createOccurrenceMatrix(\n units: UnitLong[],\n data: Map<number, PBDBOccurrence[]>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): OccurrenceMatrixData {\n const taxonUnitMap = new Map<string, Set<number>>();\n const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();\n\n for (const [unit_id, occurrences] of data.entries()) {\n for (const occ of occurrences) {\n const taxonName = occ.best_name ?? occ.taxon_name;\n if (!taxonUnitMap.has(taxonName)) {\n taxonUnitMap.set(taxonName, new Set());\n taxonOccurrenceMap.set(taxonName, []);\n }\n taxonUnitMap.get(taxonName).add(unit_id);\n taxonOccurrenceMap.get(taxonName).push(occ);\n }\n }\n\n // sort the taxon occurrence map by number of occurrences\n const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {\n // Sort alphabetically by taxon name\n return b[0].localeCompare(a[0]);\n });\n\n const taxonRanges = new Map<string, [number, number][]>();\n for (const [taxonName, unitSet] of taxonUnitMap.entries()) {\n taxonRanges.set(\n taxonName,\n accumulatePresenceDomains(units, unitSet, axisType),\n );\n }\n\n return {\n occurrenceMap: data,\n taxonUnitMap: new Map(sortedTaxa),\n taxonOccurrenceMap: taxonOccurrenceMap,\n taxonRanges,\n };\n}\n\nfunction accumulatePresenceDomains(\n unit: UnitLong[],\n presenceUnits: Set<number>,\n axisType: ColumnAxisType,\n): Array<[number, number]> {\n const domains: Array<[number, number]> = [];\n let currentDomain: [number, number] | null = null;\n\n for (const u of unit) {\n if (presenceUnits.has(u.unit_id)) {\n if (currentDomain == null) {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain = [u.t_pos, u.b_pos];\n } else {\n currentDomain = [u.t_age, u.b_age];\n }\n } else {\n if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.HEIGHT\n ) {\n currentDomain[1] = u.b_pos;\n } else {\n currentDomain[1] = u.b_age;\n }\n }\n } else {\n if (currentDomain != null) {\n domains.push(currentDomain);\n currentDomain = null;\n }\n }\n }\n\n if (currentDomain != null) {\n domains.push(currentDomain);\n }\n\n return domains;\n}\n"],"names":[],"version":3,"file":"column-views.abeab9aa.js.map"}
@@ -1,7 +1,7 @@
1
- import "./column-views.b17f793f.css";
2
- import $lfxOo$columnviews686d21adjs from "./column-views.686d21ad.js";
3
- import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76, useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d} from "./column-views.1e055ed5.js";
4
- import {AgeLabel as $448b24baeef3b229$export$37ebfd237811b1eb} from "./column-views.cc5244c4.js";
1
+ import "./column-views.321af3ae.css";
2
+ import $lfxOo$columnviews22ec902bjs from "./column-views.22ec902b.js";
3
+ import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76, useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d} from "./column-views.4ed90896.js";
4
+ import {AgeLabel as $448b24baeef3b229$export$37ebfd237811b1eb} from "./column-views.8284c3a9.js";
5
5
  import $lfxOo$macrostrathyper from "@macrostrat/hyper";
6
6
  import {ColumnContext as $lfxOo$ColumnContext, ColumnAxis as $lfxOo$ColumnAxis, ColumnAxisType as $lfxOo$ColumnAxisType, SVG as $lfxOo$SVG, AgeAxis as $lfxOo$AgeAxis} from "@macrostrat/column-components";
7
7
  import {useContext as $lfxOo$useContext} from "react";
@@ -18,7 +18,7 @@ function $parcel$interopDefault(a) {
18
18
 
19
19
 
20
20
 
21
- const $43794af7643cdf40$var$h = (0, $lfxOo$macrostrathyper).styled((0, ($parcel$interopDefault($lfxOo$columnviews686d21adjs))));
21
+ const $43794af7643cdf40$var$h = (0, $lfxOo$macrostrathyper).styled((0, ($parcel$interopDefault($lfxOo$columnviews22ec902bjs))));
22
22
  const $43794af7643cdf40$var$AgeAxisCore = ({ ticks: ticks, tickSpacing: tickSpacing = 40, showDomain: showDomain = false })=>{
23
23
  const { pixelHeight: pixelHeight } = (0, $lfxOo$useContext)((0, $lfxOo$ColumnContext));
24
24
  // A tick roughly every 40 pixels
@@ -47,7 +47,7 @@ function $43794af7643cdf40$export$64204d5cbb3e8227(props) {
47
47
  }, unit)
48
48
  ]);
49
49
  }
50
- function $43794af7643cdf40$export$40b6b0e4520eeb34() {
50
+ function $43794af7643cdf40$export$40b6b0e4520eeb34(rest) {
51
51
  const { axisType: axisType, sections: sections, totalHeight: totalHeight } = (0, $d5074f164411387e$export$f8509b7cce386c7d)();
52
52
  const packages = sections.map((section)=>{
53
53
  return {
@@ -58,25 +58,46 @@ function $43794af7643cdf40$export$40b6b0e4520eeb34() {
58
58
  return $43794af7643cdf40$var$h($43794af7643cdf40$export$ac30ca3cf5df959d, {
59
59
  axisType: axisType,
60
60
  packages: packages,
61
- totalHeight: totalHeight
61
+ totalHeight: totalHeight,
62
+ ...rest
63
+ });
64
+ }
65
+ function $43794af7643cdf40$export$82731b9607850ca6(rest) {
66
+ /** Axis to show approximate height based on dynamic column scales */ const { axisType: axisType, sections: sections, totalHeight: totalHeight } = (0, $d5074f164411387e$export$f8509b7cce386c7d)();
67
+ const packages = sections.map((section)=>{
68
+ const { scaleInfo: scaleInfo } = section;
69
+ if (scaleInfo.heightScale == null) throw new Error("No height scale available for section");
70
+ return {
71
+ key: `section-${section.section_id}`,
72
+ ...scaleInfo,
73
+ scale: scaleInfo.heightScale
74
+ };
75
+ });
76
+ return $43794af7643cdf40$var$h($43794af7643cdf40$export$ac30ca3cf5df959d, {
77
+ axisType: axisType,
78
+ axisLabel: "Approx. height",
79
+ axisUnit: "m",
80
+ packages: packages,
81
+ totalHeight: totalHeight,
82
+ ...rest
62
83
  });
63
84
  }
64
85
  function $43794af7643cdf40$export$ac30ca3cf5df959d(props) {
65
- const { axisType: axisType, totalHeight: totalHeight, packages: packages } = props;
86
+ const { axisType: axisType, axisLabel: axisLabel, axisUnit: axisUnit, totalHeight: totalHeight, packages: packages, ...rest } = props;
66
87
  if (axisType == (0, $lfxOo$ColumnAxisType).ORDINAL) return null;
67
- let axisLabel = "Age";
68
- let axisUnit = "Ma";
88
+ let _axisLabel = axisLabel ?? "Age";
89
+ let _axisUnit = axisUnit ?? "Ma";
69
90
  if (axisType == (0, $lfxOo$ColumnAxisType).DEPTH) {
70
- axisLabel = "Depth";
71
- axisUnit = "m";
91
+ _axisLabel = "Depth";
92
+ _axisUnit = "m";
72
93
  } else if (axisType == (0, $lfxOo$ColumnAxisType).HEIGHT) {
73
- axisLabel = "Height";
74
- axisUnit = "m";
94
+ _axisLabel = "Height";
95
+ _axisUnit = "m";
75
96
  }
76
- return $43794af7643cdf40$var$h([
97
+ return $43794af7643cdf40$var$h("div.composite-age-axis", rest, [
77
98
  $43794af7643cdf40$var$h($43794af7643cdf40$export$64204d5cbb3e8227, {
78
- label: axisLabel,
79
- unit: axisUnit,
99
+ label: _axisLabel,
100
+ unit: _axisUnit,
80
101
  height: totalHeight
81
102
  }),
82
103
  $43794af7643cdf40$var$h((0, $lfxOo$SVG), {
@@ -101,7 +122,6 @@ function $43794af7643cdf40$export$ac30ca3cf5df959d(props) {
101
122
  function $43794af7643cdf40$export$20d84abfcfa68dfa({ age: age }) {
102
123
  /** A cursor that shows the age at a specific point on the age axis. */ const scale = (0, $d5074f164411387e$export$a7fc62995ec4f76)();
103
124
  const heightPx = scale(age);
104
- console.log(age, heightPx);
105
125
  if (age == null || heightPx == null) return null;
106
126
  return $43794af7643cdf40$var$h("div.age-cursor", {
107
127
  style: {
@@ -117,5 +137,5 @@ function $43794af7643cdf40$export$20d84abfcfa68dfa({ age: age }) {
117
137
  }
118
138
 
119
139
 
120
- export {$43794af7643cdf40$export$64204d5cbb3e8227 as VerticalAxisLabel, $43794af7643cdf40$export$40b6b0e4520eeb34 as CompositeAgeAxis, $43794af7643cdf40$export$ac30ca3cf5df959d as CompositeAgeAxisCore, $43794af7643cdf40$export$20d84abfcfa68dfa as AgeCursor};
121
- //# sourceMappingURL=column-views.02f3732a.js.map
140
+ export {$43794af7643cdf40$export$64204d5cbb3e8227 as VerticalAxisLabel, $43794af7643cdf40$export$40b6b0e4520eeb34 as CompositeAgeAxis, $43794af7643cdf40$export$ac30ca3cf5df959d as CompositeAgeAxisCore, $43794af7643cdf40$export$82731b9607850ca6 as ApproximateHeightAxis, $43794af7643cdf40$export$20d84abfcfa68dfa as AgeCursor};
141
+ //# sourceMappingURL=column-views.adec2e4c.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/age-axis.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n SVG,\n ColumnAxis,\n ColumnContext,\n ColumnAxisType,\n AgeAxis,\n} from \"@macrostrat/column-components\";\nimport { useContext } from \"react\";\nimport styles from \"./age-axis.module.sass\";\nimport { useCompositeScale, useMacrostratColumnData } from \"./data-provider\";\nimport { Parenthetical } from \"@macrostrat/data-components\";\nimport { AgeLabel } from \"./unit-details\";\nimport { PackageScaleLayoutData } from \"./prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nconst AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {\n const { pixelHeight } = useContext(ColumnContext);\n // A tick roughly every 40 pixels\n let v = Math.max(Math.round(pixelHeight / tickSpacing), 1);\n\n return h(\"g.axis\", { transform: \"translate(20 0)\" }, [\n h(ColumnAxis, {\n ticks: v,\n showDomain,\n }),\n ]);\n};\n\nexport function VerticalAxisLabel(props) {\n const { label = \"Age\", unit = \"Ma\", className, height } = props;\n return h(\n \"div.column-axis-label.age-axis-label\",\n { className, style: { height } },\n [\n label,\n \" \",\n h.if(unit)(Parenthetical, { className: \"age-axis-unit\" }, unit),\n ],\n );\n}\n\ninterface CompositeAgeAxisProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CompositeAgeAxis(rest: CompositeAgeAxisProps) {\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n return {\n key: `section-${section.section_id}`,\n ...section.scaleInfo,\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport function ApproximateHeightAxis(rest: CompositeAgeAxisProps) {\n /** Axis to show approximate height based on dynamic column scales */\n const { axisType, sections, totalHeight } = useMacrostratColumnData();\n\n const packages = sections.map((section) => {\n const { scaleInfo } = section;\n if (scaleInfo.heightScale == null) {\n throw new Error(\"No height scale available for section\");\n }\n return {\n key: `section-${section.section_id}`,\n ...scaleInfo,\n scale: scaleInfo.heightScale, // Use height scale instead of age scale\n // This only works with dynamic columns\n };\n });\n\n return h(CompositeAgeAxisCore, {\n axisType,\n axisLabel: \"Approx. height\",\n axisUnit: \"m\",\n packages,\n totalHeight,\n ...rest,\n });\n}\n\nexport interface CompositeStratigraphicScaleInfo extends CompositeAgeAxisProps {\n axisType: ColumnAxisType;\n axisLabel?: string;\n axisUnit?: string;\n totalHeight: number;\n packages: PackageScaleLayoutData[];\n}\n\nexport function CompositeAgeAxisCore(props: CompositeStratigraphicScaleInfo) {\n const { axisType, axisLabel, axisUnit, totalHeight, packages, ...rest } =\n props;\n\n if (axisType == ColumnAxisType.ORDINAL) {\n return null;\n }\n\n let _axisLabel: string = axisLabel ?? \"Age\";\n let _axisUnit = axisUnit ?? \"Ma\";\n if (axisType == ColumnAxisType.DEPTH) {\n _axisLabel = \"Depth\";\n _axisUnit = \"m\";\n } else if (axisType == ColumnAxisType.HEIGHT) {\n _axisLabel = \"Height\";\n _axisUnit = \"m\";\n }\n\n return h(\"div.composite-age-axis\", rest, [\n h(VerticalAxisLabel, {\n label: _axisLabel,\n unit: _axisUnit,\n height: totalHeight,\n }),\n h(\n SVG,\n {\n className: \"age-axis-column\",\n style: { width: `22px`, height: `${totalHeight}px` },\n width: 22,\n height: totalHeight,\n },\n packages.map((group, i) => {\n const { key, scale } = group;\n\n return h(AgeAxis, {\n key,\n className: \"age-axis\",\n scale,\n tickSizeOuter: 3,\n });\n }),\n ),\n ]);\n}\n\nexport function AgeCursor({ age }) {\n /** A cursor that shows the age at a specific point on the age axis. */\n const scale = useCompositeScale();\n const heightPx = scale(age);\n\n if (age == null || heightPx == null) {\n return null;\n }\n\n return h(\n \"div.age-cursor\",\n {\n style: {\n top: heightPx,\n },\n },\n [h(\"div.line\"), h(AgeLabel, { age, className: \"label\" })],\n );\n}\n"],"names":[],"version":3,"file":"column-views.adec2e4c.js.map"}