@macrostrat/column-views 2.1.3 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/esm/{column-views.4ab0ec82.js → column-views.073c42da.js} +142 -76
  3. package/dist/esm/column-views.073c42da.js.map +1 -0
  4. package/dist/esm/column-views.079119f4.js +17 -0
  5. package/dist/esm/column-views.079119f4.js.map +1 -0
  6. package/dist/esm/{column-views.0e06c069.js → column-views.0859feb3.js} +52 -23
  7. package/dist/esm/column-views.0859feb3.js.map +1 -0
  8. package/dist/esm/{column-views.d099eaf9.js → column-views.0a8a07f4.js} +3 -3
  9. package/dist/esm/{column-views.d099eaf9.js.map → column-views.0a8a07f4.js.map} +1 -1
  10. package/dist/esm/{column-views.0732894f.js → column-views.0f7f6ee6.js} +2 -2
  11. package/dist/esm/{column-views.0732894f.js.map → column-views.0f7f6ee6.js.map} +1 -1
  12. package/dist/esm/{column-views.57636733.css → column-views.1151416d.css} +5 -5
  13. package/dist/esm/column-views.1151416d.css.map +1 -0
  14. package/dist/esm/{column-views.53f4160e.js → column-views.1b644998.js} +3 -3
  15. package/dist/esm/{column-views.53f4160e.js.map → column-views.1b644998.js.map} +1 -1
  16. package/dist/esm/{column-views.686d21ad.js → column-views.22ec902b.js} +4 -1
  17. package/dist/esm/column-views.22ec902b.js.map +1 -0
  18. package/dist/esm/{column-views.3b637517.js → column-views.285cbb65.js} +40 -20
  19. package/dist/esm/column-views.285cbb65.js.map +1 -0
  20. package/dist/esm/column-views.2d602a57.js +37 -0
  21. package/dist/esm/column-views.2d602a57.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.3a7179c4.js +137 -0
  25. package/dist/esm/column-views.3a7179c4.js.map +1 -0
  26. package/dist/esm/{column-views.49adc09e.js → column-views.3e1b8c7d.js} +2 -2
  27. package/dist/esm/{column-views.49adc09e.js.map → column-views.3e1b8c7d.js.map} +1 -1
  28. package/dist/esm/{column-views.a23b2c92.js → column-views.3f528c5c.js} +50 -22
  29. package/dist/esm/column-views.3f528c5c.js.map +1 -0
  30. package/dist/esm/{column-views.1e055ed5.js → column-views.4fd4ec92.js} +17 -3
  31. package/dist/esm/column-views.4fd4ec92.js.map +1 -0
  32. package/dist/esm/{column-views.6ca980ae.js → column-views.53186d53.js} +2 -2
  33. package/dist/esm/{column-views.6ca980ae.js.map → column-views.53186d53.js.map} +1 -1
  34. package/dist/esm/{column-views.39657bbf.js → column-views.54f8b909.js} +7 -2
  35. package/dist/esm/column-views.54f8b909.js.map +1 -0
  36. package/dist/esm/{column-views.b72918ce.css → column-views.562db43a.css} +10 -2
  37. package/dist/esm/column-views.562db43a.css.map +1 -0
  38. package/dist/esm/{column-views.9e1c82fe.js → column-views.58b891df.js} +2 -2
  39. package/dist/esm/{column-views.9e1c82fe.js.map → column-views.58b891df.js.map} +1 -1
  40. package/dist/esm/{column-views.a2cf8f33.js → column-views.5a49cd68.js} +8 -38
  41. package/dist/esm/column-views.5a49cd68.js.map +1 -0
  42. package/dist/esm/{column-views.2e0ff311.js → column-views.5d969bc5.js} +6 -58
  43. package/dist/esm/column-views.5d969bc5.js.map +1 -0
  44. package/dist/esm/{column-views.43fb819d.js → column-views.63b7e5aa.js} +3 -3
  45. package/dist/esm/{column-views.43fb819d.js.map → column-views.63b7e5aa.js.map} +1 -1
  46. package/dist/esm/column-views.6698b95a.js +108 -0
  47. package/dist/esm/column-views.6698b95a.js.map +1 -0
  48. package/dist/esm/column-views.6c644353.js +184 -0
  49. package/dist/esm/column-views.6c644353.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.34a1ac4f.js → column-views.73b8ff16.js} +20 -22
  55. package/dist/esm/column-views.73b8ff16.js.map +1 -0
  56. package/dist/esm/{column-views.9771145a.js → column-views.77561197.js} +91 -55
  57. package/dist/esm/column-views.77561197.js.map +1 -0
  58. package/dist/esm/{column-views.572b70fd.js → column-views.83395185.js} +3 -3
  59. package/dist/esm/{column-views.572b70fd.js.map → column-views.83395185.js.map} +1 -1
  60. package/dist/esm/{column-views.6dc251d3.js → column-views.86a51ce7.js} +2 -2
  61. package/dist/esm/{column-views.6dc251d3.js.map → column-views.86a51ce7.js.map} +1 -1
  62. package/dist/esm/{column-views.f08929e2.js → column-views.88d63dd0.js} +5 -3
  63. package/dist/esm/column-views.88d63dd0.js.map +1 -0
  64. package/dist/esm/{column-views.3f246167.js → column-views.8c296309.js} +5 -5
  65. package/dist/esm/column-views.8c296309.js.map +1 -0
  66. package/dist/esm/{column-views.7d47a72a.js → column-views.8d24b179.js} +3 -3
  67. package/dist/esm/{column-views.7d47a72a.js.map → column-views.8d24b179.js.map} +1 -1
  68. package/dist/esm/{column-views.3d001ab8.js → column-views.986e7566.js} +7 -7
  69. package/dist/esm/{column-views.3d001ab8.js.map → column-views.986e7566.js.map} +1 -1
  70. package/dist/esm/{column-views.86619334.js → column-views.9ddbe7df.js} +2 -2
  71. package/dist/esm/{column-views.86619334.js.map → column-views.9ddbe7df.js.map} +1 -1
  72. package/dist/esm/{column-views.abe90091.js → column-views.ae7c0a2b.js} +31 -60
  73. package/dist/esm/column-views.ae7c0a2b.js.map +1 -0
  74. package/dist/esm/{column-views.9892f825.js → column-views.aecf25bc.js} +75 -42
  75. package/dist/esm/column-views.aecf25bc.js.map +1 -0
  76. package/dist/esm/column-views.b7016f82.css +54 -0
  77. package/dist/esm/column-views.b7016f82.css.map +1 -0
  78. package/dist/esm/{column-views.a5c1bbf0.js → column-views.ba0381cc.js} +2 -2
  79. package/dist/esm/{column-views.a5c1bbf0.js.map → column-views.ba0381cc.js.map} +1 -1
  80. package/dist/esm/{column-views.ff031876.js → column-views.c518ef14.js} +9 -4
  81. package/dist/esm/column-views.c518ef14.js.map +1 -0
  82. package/dist/esm/{column-views.f7523c1d.js → column-views.c92a359e.js} +2 -2
  83. package/dist/esm/{column-views.f7523c1d.js.map → column-views.c92a359e.js.map} +1 -1
  84. package/dist/esm/{column-views.cdadc5c2.js → column-views.cc733361.js} +7 -1
  85. package/dist/esm/column-views.cc733361.js.map +1 -0
  86. package/dist/esm/{column-views.4d22c21c.js → column-views.d15d8655.js} +22 -4
  87. package/dist/esm/column-views.d15d8655.js.map +1 -0
  88. package/dist/esm/{column-views.5e2dc19d.js → column-views.d261b02d.js} +3 -3
  89. package/dist/esm/{column-views.5e2dc19d.js.map → column-views.d261b02d.js.map} +1 -1
  90. package/dist/esm/{column-views.323cad41.js → column-views.d406665d.js} +5 -5
  91. package/dist/esm/{column-views.323cad41.js.map → column-views.d406665d.js.map} +1 -1
  92. package/dist/esm/{column-views.7715e35e.js → column-views.d69c4a9f.js} +3 -3
  93. package/dist/esm/{column-views.7715e35e.js.map → column-views.d69c4a9f.js.map} +1 -1
  94. package/dist/esm/{column-views.07db2ab1.js → column-views.d9c6b527.js} +15 -12
  95. package/dist/esm/column-views.d9c6b527.js.map +1 -0
  96. package/dist/esm/{column-views.b12a6374.css → column-views.e33ac5c9.css} +30 -9
  97. package/dist/esm/column-views.e33ac5c9.css.map +1 -0
  98. package/dist/esm/column-views.e3bf5384.js +15 -0
  99. package/dist/esm/{column-views.6d5e3098.js.map → column-views.e3bf5384.js.map} +1 -1
  100. package/dist/esm/{column-views.a8926321.js → column-views.e4c26185.js} +2 -2
  101. package/dist/esm/{column-views.a8926321.js.map → column-views.e4c26185.js.map} +1 -1
  102. package/dist/esm/column-views.e84bd756.js +92 -0
  103. package/dist/esm/column-views.e84bd756.js.map +1 -0
  104. package/dist/esm/column-views.ea4ebbb7.js +31 -0
  105. package/dist/esm/column-views.ea4ebbb7.js.map +1 -0
  106. package/dist/esm/column-views.ed05e233.js +13 -0
  107. package/dist/esm/{column-views.3729c372.js.map → column-views.ed05e233.js.map} +1 -1
  108. package/dist/esm/{column-views.64a84c43.js → column-views.f2fd0e4a.js} +10 -2
  109. package/dist/esm/column-views.f2fd0e4a.js.map +1 -0
  110. package/dist/esm/{column-views.103b1cb0.js → column-views.f46a0b36.js} +2 -2
  111. package/dist/esm/{column-views.103b1cb0.js.map → column-views.f46a0b36.js.map} +1 -1
  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 +235 -397
  115. package/dist/esm/index.d.ts.map +1 -1
  116. package/dist/esm/index.js +12 -12
  117. package/dist/node/{column-views.36094762.js → column-views.01debc76.js} +2 -2
  118. package/dist/node/{column-views.36094762.js.map → column-views.01debc76.js.map} +1 -1
  119. package/dist/node/{column-views.31f57130.js → column-views.040499c9.js} +2 -2
  120. package/dist/node/{column-views.31f57130.js.map → column-views.040499c9.js.map} +1 -1
  121. package/dist/node/{column-views.50034105.js → column-views.07ff1fdf.js} +2 -2
  122. package/dist/node/{column-views.50034105.js.map → column-views.07ff1fdf.js.map} +1 -1
  123. package/dist/node/{column-views.3a55ecd7.css → column-views.0840b115.css} +2 -2
  124. package/dist/node/column-views.0840b115.css.map +1 -0
  125. package/dist/node/column-views.0b3a384e.js +2 -0
  126. package/dist/node/column-views.0b3a384e.js.map +1 -0
  127. package/dist/node/column-views.0bd15ee4.js +2 -0
  128. package/dist/node/column-views.0bd15ee4.js.map +1 -0
  129. package/dist/node/column-views.105f6ad2.js +2 -0
  130. package/dist/node/column-views.105f6ad2.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.4381c411.js → column-views.13e69859.js} +2 -2
  134. package/dist/node/{column-views.4381c411.js.map → column-views.13e69859.js.map} +1 -1
  135. package/dist/node/column-views.16f336ee.js +2 -0
  136. package/dist/node/column-views.16f336ee.js.map +1 -0
  137. package/dist/node/{column-views.c18d5bf5.js → column-views.1a7f8afd.js} +2 -2
  138. package/dist/node/{column-views.c18d5bf5.js.map → column-views.1a7f8afd.js.map} +1 -1
  139. package/dist/node/column-views.29eb25bd.css +2 -0
  140. package/dist/node/column-views.29eb25bd.css.map +1 -0
  141. package/dist/node/column-views.2bd97c2e.js +2 -0
  142. package/dist/node/column-views.2bd97c2e.js.map +1 -0
  143. package/dist/node/column-views.3b37363f.js +2 -0
  144. package/dist/node/column-views.3b37363f.js.map +1 -0
  145. package/dist/node/column-views.45296250.js +2 -0
  146. package/dist/node/column-views.45296250.js.map +1 -0
  147. package/dist/node/{column-views.0cbd4a3f.js → column-views.48a3cfa3.js} +2 -2
  148. package/dist/node/{column-views.0cbd4a3f.js.map → column-views.48a3cfa3.js.map} +1 -1
  149. package/dist/node/{column-views.42db0bb8.js → column-views.492c2c72.js} +2 -2
  150. package/dist/node/{column-views.42db0bb8.js.map → column-views.492c2c72.js.map} +1 -1
  151. package/dist/node/column-views.50a992d3.css +2 -0
  152. package/dist/node/column-views.50a992d3.css.map +1 -0
  153. package/dist/node/column-views.573cb29d.js +2 -0
  154. package/dist/node/column-views.573cb29d.js.map +1 -0
  155. package/dist/node/column-views.576e3c5a.js +2 -0
  156. package/dist/node/column-views.576e3c5a.js.map +1 -0
  157. package/dist/node/column-views.5f3b0b04.js +2 -0
  158. package/dist/node/column-views.5f3b0b04.js.map +1 -0
  159. package/dist/node/column-views.6fd5a922.js +2 -0
  160. package/dist/node/column-views.6fd5a922.js.map +1 -0
  161. package/dist/node/column-views.7150ba18.js +2 -0
  162. package/dist/node/column-views.7150ba18.js.map +1 -0
  163. package/dist/node/column-views.728c8dfc.js +2 -0
  164. package/dist/node/column-views.728c8dfc.js.map +1 -0
  165. package/dist/node/column-views.7425d37b.js +2 -0
  166. package/dist/node/column-views.7425d37b.js.map +1 -0
  167. package/dist/node/{column-views.2e4e357d.js → column-views.75582658.js} +2 -2
  168. package/dist/node/{column-views.2e4e357d.js.map → column-views.75582658.js.map} +1 -1
  169. package/dist/node/column-views.77ace3a2.js +2 -0
  170. package/dist/node/column-views.77ace3a2.js.map +1 -0
  171. package/dist/node/column-views.7f9c7448.js +2 -0
  172. package/dist/node/column-views.7f9c7448.js.map +1 -0
  173. package/dist/node/{column-views.a2274834.js → column-views.81294fb7.js} +2 -2
  174. package/dist/node/{column-views.a2274834.js.map → column-views.81294fb7.js.map} +1 -1
  175. package/dist/node/column-views.827a9894.js +2 -0
  176. package/dist/node/column-views.827a9894.js.map +1 -0
  177. package/dist/node/column-views.87b1439e.js +2 -0
  178. package/dist/node/column-views.87b1439e.js.map +1 -0
  179. package/dist/node/{column-views.e4f18ff7.js → column-views.9dda582d.js} +2 -2
  180. package/dist/node/{column-views.e4f18ff7.js.map → column-views.9dda582d.js.map} +1 -1
  181. package/dist/node/column-views.9e155f20.js +2 -0
  182. package/dist/node/column-views.9e155f20.js.map +1 -0
  183. package/dist/node/column-views.a16cd1f2.js +2 -0
  184. package/dist/node/column-views.a16cd1f2.js.map +1 -0
  185. package/dist/node/{column-views.adf9e5b3.js → column-views.a34732e7.js} +2 -2
  186. package/dist/node/{column-views.adf9e5b3.js.map → column-views.a34732e7.js.map} +1 -1
  187. package/dist/node/{column-views.f17b6142.js → column-views.a396d3ac.js} +2 -2
  188. package/dist/node/{column-views.f17b6142.js.map → column-views.a396d3ac.js.map} +1 -1
  189. package/dist/node/column-views.aae09aca.js +2 -0
  190. package/dist/node/column-views.aae09aca.js.map +1 -0
  191. package/dist/node/{column-views.db5d74bd.js → column-views.ac1b58b7.js} +2 -2
  192. package/dist/node/{column-views.db5d74bd.js.map → column-views.ac1b58b7.js.map} +1 -1
  193. package/dist/node/column-views.aef76eee.js +2 -0
  194. package/dist/node/column-views.aef76eee.js.map +1 -0
  195. package/dist/node/column-views.b64cd0ea.js +2 -0
  196. package/dist/node/column-views.b64cd0ea.js.map +1 -0
  197. package/dist/node/column-views.b6cd4360.js +2 -0
  198. package/dist/node/column-views.b6cd4360.js.map +1 -0
  199. package/dist/node/column-views.c0be1157.js +2 -0
  200. package/dist/node/column-views.c0be1157.js.map +1 -0
  201. package/dist/node/column-views.c29e9eb8.js +2 -0
  202. package/dist/node/column-views.c29e9eb8.js.map +1 -0
  203. package/dist/node/column-views.c8df6435.js +2 -0
  204. package/dist/node/column-views.c8df6435.js.map +1 -0
  205. package/dist/node/column-views.cd2a5c85.js +2 -0
  206. package/dist/node/column-views.cd2a5c85.js.map +1 -0
  207. package/dist/node/{column-views.3d220e0c.js → column-views.cd77a1d8.js} +2 -2
  208. package/dist/node/{column-views.3d220e0c.js.map → column-views.cd77a1d8.js.map} +1 -1
  209. package/dist/node/column-views.cd7b223b.css +2 -0
  210. package/dist/node/column-views.cd7b223b.css.map +1 -0
  211. package/dist/node/column-views.cf2a78c1.js +2 -0
  212. package/dist/node/column-views.cf2a78c1.js.map +1 -0
  213. package/dist/node/{column-views.c7f6fc0a.js → column-views.d529d3aa.js} +2 -2
  214. package/dist/node/{column-views.c7f6fc0a.js.map → column-views.d529d3aa.js.map} +1 -1
  215. package/dist/node/{column-views.7010a03b.js → column-views.dd972321.js} +2 -2
  216. package/dist/node/{column-views.7010a03b.js.map → column-views.dd972321.js.map} +1 -1
  217. package/dist/node/column-views.e065152e.js +2 -0
  218. package/dist/node/column-views.e065152e.js.map +1 -0
  219. package/dist/node/{column-views.6c7a40e0.js → column-views.e08f8715.js} +2 -2
  220. package/dist/node/{column-views.6c7a40e0.js.map → column-views.e08f8715.js.map} +1 -1
  221. package/dist/node/{column-views.507635e2.js → column-views.e0d9865e.js} +2 -2
  222. package/dist/node/column-views.e0d9865e.js.map +1 -0
  223. package/dist/node/column-views.e2562224.js +2 -0
  224. package/dist/node/column-views.e2562224.js.map +1 -0
  225. package/dist/node/column-views.e803e4ae.css +2 -0
  226. package/dist/node/column-views.e803e4ae.css.map +1 -0
  227. package/dist/node/column-views.edb4ba54.js +2 -0
  228. package/dist/node/column-views.edb4ba54.js.map +1 -0
  229. package/dist/node/index.js +1 -1
  230. package/dist/node/index.js.map +1 -1
  231. package/package.json +14 -14
  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 +32 -9
  236. package/src/column.ts +91 -19
  237. package/src/correlation-chart/main.ts +10 -2
  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 +33 -25
  241. package/src/data-provider/fetch.ts +10 -3
  242. package/src/data-provider/store.ts +16 -10
  243. package/src/facets/base-sample-column.module.sass +14 -0
  244. package/src/facets/base-sample-column.ts +114 -0
  245. package/src/facets/detrital-zircon/index.ts +31 -63
  246. package/src/facets/fossils/index.module.sass +43 -13
  247. package/src/facets/fossils/index.ts +246 -80
  248. package/src/facets/fossils/provider.ts +121 -25
  249. package/src/facets/index.ts +2 -0
  250. package/src/facets/measurements/index.ts +38 -0
  251. package/src/facets/measurements/provider.ts +80 -0
  252. package/src/prepare-units/composite-scale.ts +183 -155
  253. package/src/prepare-units/dynamic-scales.ts +298 -0
  254. package/src/prepare-units/helpers.ts +99 -87
  255. package/src/prepare-units/index.ts +77 -51
  256. package/src/prepare-units/types.ts +138 -0
  257. package/src/prepare-units/utils.ts +29 -1
  258. package/src/section.ts +46 -9
  259. package/src/unit-details/panel.module.sass +8 -1
  260. package/src/unit-details/panel.ts +123 -53
  261. package/src/unit-details/popover.ts +5 -0
  262. package/src/units/boxes.ts +2 -69
  263. package/src/units/composite.ts +3 -49
  264. package/src/units/selection.ts +21 -7
  265. package/dist/esm/column-views.07db2ab1.js.map +0 -1
  266. package/dist/esm/column-views.0e06c069.js.map +0 -1
  267. package/dist/esm/column-views.1c92b88f.js +0 -16
  268. package/dist/esm/column-views.1c92b88f.js.map +0 -1
  269. package/dist/esm/column-views.1e055ed5.js.map +0 -1
  270. package/dist/esm/column-views.2e0ff311.js.map +0 -1
  271. package/dist/esm/column-views.3048acc1.js +0 -66
  272. package/dist/esm/column-views.3048acc1.js.map +0 -1
  273. package/dist/esm/column-views.34a1ac4f.js.map +0 -1
  274. package/dist/esm/column-views.3729c372.js +0 -13
  275. package/dist/esm/column-views.39657bbf.js.map +0 -1
  276. package/dist/esm/column-views.3b637517.js.map +0 -1
  277. package/dist/esm/column-views.3f246167.js.map +0 -1
  278. package/dist/esm/column-views.4ab0ec82.js.map +0 -1
  279. package/dist/esm/column-views.4d22c21c.js.map +0 -1
  280. package/dist/esm/column-views.57636733.css.map +0 -1
  281. package/dist/esm/column-views.60dc6bfc.js +0 -108
  282. package/dist/esm/column-views.60dc6bfc.js.map +0 -1
  283. package/dist/esm/column-views.64a84c43.js.map +0 -1
  284. package/dist/esm/column-views.6d5e3098.js +0 -11
  285. package/dist/esm/column-views.9771145a.js.map +0 -1
  286. package/dist/esm/column-views.9892f825.js.map +0 -1
  287. package/dist/esm/column-views.a23b2c92.js.map +0 -1
  288. package/dist/esm/column-views.a2cf8f33.js.map +0 -1
  289. package/dist/esm/column-views.abe90091.js.map +0 -1
  290. package/dist/esm/column-views.b12a6374.css.map +0 -1
  291. package/dist/esm/column-views.b17f793f.css.map +0 -1
  292. package/dist/esm/column-views.b72918ce.css.map +0 -1
  293. package/dist/esm/column-views.c71c321c.js +0 -104
  294. package/dist/esm/column-views.c71c321c.js.map +0 -1
  295. package/dist/esm/column-views.cdadc5c2.js.map +0 -1
  296. package/dist/esm/column-views.d48cb0d8.js.map +0 -1
  297. package/dist/esm/column-views.f08929e2.js.map +0 -1
  298. package/dist/esm/column-views.ff031876.js.map +0 -1
  299. package/dist/node/column-views.0bb1ec93.js +0 -2
  300. package/dist/node/column-views.0bb1ec93.js.map +0 -1
  301. package/dist/node/column-views.13c4ea85.js +0 -2
  302. package/dist/node/column-views.13c4ea85.js.map +0 -1
  303. package/dist/node/column-views.1a0b56fc.js +0 -2
  304. package/dist/node/column-views.1a0b56fc.js.map +0 -1
  305. package/dist/node/column-views.226d0bdb.js +0 -2
  306. package/dist/node/column-views.226d0bdb.js.map +0 -1
  307. package/dist/node/column-views.2926f656.css +0 -2
  308. package/dist/node/column-views.2926f656.css.map +0 -1
  309. package/dist/node/column-views.2ab1c2f8.js +0 -2
  310. package/dist/node/column-views.2ab1c2f8.js.map +0 -1
  311. package/dist/node/column-views.3345cd7a.js +0 -2
  312. package/dist/node/column-views.3345cd7a.js.map +0 -1
  313. package/dist/node/column-views.33752461.js +0 -2
  314. package/dist/node/column-views.33752461.js.map +0 -1
  315. package/dist/node/column-views.372bbee2.js +0 -2
  316. package/dist/node/column-views.372bbee2.js.map +0 -1
  317. package/dist/node/column-views.38357d4a.js +0 -2
  318. package/dist/node/column-views.38357d4a.js.map +0 -1
  319. package/dist/node/column-views.3a55ecd7.css.map +0 -1
  320. package/dist/node/column-views.3eeac38d.js +0 -2
  321. package/dist/node/column-views.3eeac38d.js.map +0 -1
  322. package/dist/node/column-views.3f032518.js +0 -2
  323. package/dist/node/column-views.3f032518.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.507635e2.js.map +0 -1
  327. package/dist/node/column-views.556e8f69.js +0 -2
  328. package/dist/node/column-views.556e8f69.js.map +0 -1
  329. package/dist/node/column-views.5f05b73f.js +0 -2
  330. package/dist/node/column-views.5f05b73f.js.map +0 -1
  331. package/dist/node/column-views.6ae7bb69.js +0 -2
  332. package/dist/node/column-views.6ae7bb69.js.map +0 -1
  333. package/dist/node/column-views.755f726e.js +0 -2
  334. package/dist/node/column-views.755f726e.js.map +0 -1
  335. package/dist/node/column-views.75b0a8f8.js +0 -2
  336. package/dist/node/column-views.75b0a8f8.js.map +0 -1
  337. package/dist/node/column-views.78d3f3c5.js +0 -2
  338. package/dist/node/column-views.78d3f3c5.js.map +0 -1
  339. package/dist/node/column-views.8cfed88b.js +0 -2
  340. package/dist/node/column-views.8cfed88b.js.map +0 -1
  341. package/dist/node/column-views.99fb74c0.js +0 -2
  342. package/dist/node/column-views.99fb74c0.js.map +0 -1
  343. package/dist/node/column-views.a501cea0.js +0 -2
  344. package/dist/node/column-views.a501cea0.js.map +0 -1
  345. package/dist/node/column-views.af275c48.js +0 -2
  346. package/dist/node/column-views.af275c48.js.map +0 -1
  347. package/dist/node/column-views.afbf351c.js +0 -2
  348. package/dist/node/column-views.afbf351c.js.map +0 -1
  349. package/dist/node/column-views.b180e8c9.js +0 -2
  350. package/dist/node/column-views.b180e8c9.js.map +0 -1
  351. package/dist/node/column-views.cd468adb.css +0 -2
  352. package/dist/node/column-views.cd468adb.css.map +0 -1
  353. package/dist/node/column-views.d6708353.js +0 -2
  354. package/dist/node/column-views.d6708353.js.map +0 -1
  355. package/dist/node/column-views.e1a43131.css +0 -2
  356. package/dist/node/column-views.e1a43131.css.map +0 -1
  357. package/dist/node/column-views.e9515ec1.js +0 -2
  358. package/dist/node/column-views.e9515ec1.js.map +0 -1
  359. package/dist/node/column-views.f15a6ed4.js +0 -2
  360. package/dist/node/column-views.f15a6ed4.js.map +0 -1
  361. package/dist/node/column-views.fc05616e.js +0 -2
  362. package/dist/node/column-views.fc05616e.js.map +0 -1
@@ -0,0 +1,114 @@
1
+ import { useMacrostratColumnData } from "../data-provider";
2
+ import { useCallback, useMemo } from "react";
3
+ import hyper from "@macrostrat/hyper";
4
+ import styles from "./base-sample-column.module.sass";
5
+ import { getUnitHeightRange } from "../prepare-units";
6
+ import { ColumnNotes } from "../notes";
7
+ const h = hyper.styled(styles);
8
+
9
+ export interface BaseMeasurementsColumnProps<T> {
10
+ data: T[];
11
+ noteComponent?: any;
12
+ width?: number;
13
+ paddingLeft?: number;
14
+ className?: string;
15
+ // TODO: these props are confusing
16
+ getUnitID?: (d: T) => number | string;
17
+ matchingUnit?: (dz: T) => (d: any) => boolean;
18
+ }
19
+
20
+ export function BaseMeasurementsColumn({
21
+ data,
22
+ noteComponent,
23
+ width = 500,
24
+ paddingLeft = 40,
25
+ className,
26
+ getUnitID = (d) => d.unit_id,
27
+ matchingUnit,
28
+ }: BaseMeasurementsColumnProps<any>) {
29
+ const { axisType, units } = useMacrostratColumnData();
30
+
31
+ const _matchingUnit =
32
+ matchingUnit ??
33
+ useCallback(
34
+ (dz) => {
35
+ return (d) => {
36
+ return getUnitID(d) === dz.unit_id;
37
+ };
38
+ },
39
+ [getUnitID],
40
+ );
41
+
42
+ const notes: any[] = useMemo(() => {
43
+ if (data == null || units == null) return [];
44
+ let unitRefData = Array.from(data.values())
45
+ .map((d) => {
46
+ return {
47
+ data: d,
48
+ unit: units.find(_matchingUnit(d)),
49
+ };
50
+ })
51
+ .filter((d) => d.unit != null);
52
+
53
+ unitRefData.sort((a, b) => {
54
+ const v1 = units.indexOf(a.unit);
55
+ const v2 = units.indexOf(b.unit);
56
+ return v1 - v2;
57
+ });
58
+
59
+ return unitRefData.map((d) => {
60
+ const { unit, data } = d;
61
+ const heightRange = getUnitHeightRange(unit, axisType);
62
+
63
+ return {
64
+ top_height: heightRange[1],
65
+ height: heightRange[0],
66
+ data,
67
+ unit,
68
+ id: unit.unit_id,
69
+ };
70
+ });
71
+ }, [data, units, matchingUnit]);
72
+
73
+ if (data == null || units == null) return null;
74
+
75
+ return h(
76
+ "div",
77
+ { className },
78
+ h(ColumnNotes, {
79
+ width,
80
+ paddingLeft,
81
+ notes,
82
+ noteComponent,
83
+ }),
84
+ );
85
+ }
86
+
87
+ interface TruncatedListProps {
88
+ data: any[];
89
+ className?: string;
90
+ maxItems?: number;
91
+ itemRenderer?: (props: { data: any }) => any;
92
+ }
93
+
94
+ export function TruncatedList({
95
+ data,
96
+ className,
97
+ maxItems = 5,
98
+ itemRenderer = (p) => h("span", p.data),
99
+ }: TruncatedListProps) {
100
+ let tooMany = null;
101
+ let d1 = data;
102
+ if (data.length > maxItems) {
103
+ const n = data.length - maxItems;
104
+ d1 = data.slice(0, maxItems);
105
+ tooMany = h("li.too-many", `and ${n} more`);
106
+ }
107
+
108
+ return h("ul.truncated-list", { className }, [
109
+ d1.map((d, i) => {
110
+ return h("li.element", { key: i }, h(itemRenderer, { data: d }));
111
+ }),
112
+ tooMany,
113
+ ]);
114
+ }
@@ -3,14 +3,13 @@ import {
3
3
  DetritalSeries,
4
4
  usePlotArea,
5
5
  } from "@macrostrat/data-components";
6
- import { IUnit } from "../../units/types";
6
+ import type { IUnit } from "../../units/types";
7
7
  import hyper from "@macrostrat/hyper";
8
8
  import { useDetritalMeasurements, MeasurementInfo } from "./provider";
9
- import { useMacrostratUnits } from "../../data-provider";
10
- import { ColumnNotes } from "../../notes";
11
9
  import { useMemo } from "react";
12
10
  import styles from "./index.module.sass";
13
11
  import classNames from "classnames";
12
+ import { BaseMeasurementsColumn } from "../base-sample-column";
14
13
 
15
14
  const h = hyper.styled(styles);
16
15
 
@@ -28,6 +27,35 @@ interface DetritalItemProps {
28
27
  color?: string;
29
28
  }
30
29
 
30
+ const matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;
31
+
32
+ function DetritalColumn({ columnID, color = "magenta" }) {
33
+ const data = useDetritalMeasurements({ col_id: columnID });
34
+
35
+ const width = 400;
36
+ const paddingLeft = 40;
37
+
38
+ const spectrumWidth = width - paddingLeft;
39
+
40
+ const noteComponent = useMemo(() => {
41
+ return (props) => {
42
+ return h(DetritalGroup, {
43
+ width: spectrumWidth,
44
+ height: 40,
45
+ color,
46
+ ...props,
47
+ });
48
+ };
49
+ }, [width, color]);
50
+
51
+ return h(BaseMeasurementsColumn, {
52
+ data,
53
+ noteComponent,
54
+ getUnitID: (d) => d[0].unit_id,
55
+ matchingUnit,
56
+ });
57
+ }
58
+
31
59
  function DepositionalAge({ unit }) {
32
60
  const { xScale, height } = usePlotArea();
33
61
 
@@ -41,7 +69,6 @@ function DepositionalAge({ unit }) {
41
69
  function DetritalGroup(props: DetritalItemProps) {
42
70
  const { note, width, height, color, spacing } = props;
43
71
  const { data, unit } = note;
44
- const { geo_unit } = data[0];
45
72
 
46
73
  const _color = color;
47
74
 
@@ -70,63 +97,4 @@ function DetritalGroup(props: DetritalItemProps) {
70
97
  );
71
98
  }
72
99
 
73
- const matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;
74
-
75
- function DetritalColumn({ columnID, color = "magenta" }) {
76
- const data = useDetritalMeasurements({ col_id: columnID });
77
- const units = useMacrostratUnits();
78
-
79
- const notes: any[] = useMemo(() => {
80
- if (data == null || units == null) return [];
81
- let dzUnitData = Array.from(data.values());
82
- dzUnitData.sort((a, b) => {
83
- const v1 = units.findIndex(matchingUnit(a));
84
- const v2 = units.findIndex(matchingUnit(b));
85
- return v1 - v2;
86
- });
87
-
88
- const data1 = dzUnitData.map((d) => {
89
- const unit = units.find(matchingUnit(d));
90
- return {
91
- top_height: unit?.t_age,
92
- height: unit?.b_age,
93
- data: d,
94
- unit,
95
- id: unit?.unit_id,
96
- };
97
- });
98
-
99
- return data1.filter((d) => d.unit != null);
100
- }, [data, units]);
101
-
102
- const width = 400;
103
- const paddingLeft = 40;
104
-
105
- const spectrumWidth = width - paddingLeft;
106
-
107
- const noteComponent = useMemo(() => {
108
- return (props) => {
109
- return h(DetritalGroup, {
110
- width: spectrumWidth,
111
- height: 40,
112
- color,
113
- ...props,
114
- });
115
- };
116
- }, [width, color]);
117
-
118
- if (data == null || units == null) return null;
119
-
120
- return h(
121
- "div.dz-spectra",
122
- h(ColumnNotes, {
123
- width,
124
- paddingLeft,
125
- notes,
126
- noteComponent,
127
- deltaConnectorAttachment: 20,
128
- }),
129
- );
130
- }
131
-
132
100
  export { DetritalColumn, DetritalGroup };
@@ -1,14 +1,44 @@
1
- .fossil-collections
2
- padding-left: 0.2em
3
- font-size: 0.9em
4
- list-style: none
5
- border-left: 1px solid var(--column-stroke-color)
6
- margin: 1px 0
7
- li
8
- display: inline
9
- &:not(:last-child):after
10
- content: ", "
11
- color: var(--secondary-color)
12
- li.too-many
13
- color: var(--secondary-color)
1
+ .taxa-occurrences-matrix
2
+ color: var(--column-text-color)
3
+ line
4
+ stroke: var(--column-stroke-color)
5
+ stroke-width: 2px
6
+ text.taxon-name
7
+ fill: var(--column-text-color)
8
+ transform: rotate(90deg) translate(0, 4px)
9
+ text-anchor: end
10
+ position: sticky
11
+ top: 0
12
+
13
+ .taxon-ranges
14
+ position: relative
15
+ &>svg
16
+ position: absolute
17
+ height: 100%
18
+
19
+ .taxon-labels
20
+ z-index: 10
21
+ position: absolute
22
+ width: 100%
23
+ height: 100%
24
+ pointer-events: none
25
+
26
+ .taxon-label
27
+ position: absolute
28
+ height: 100%
29
+
30
+ .taxon-label-inner
31
+ position: sticky
32
+ top: calc(var(--label-width, 200px) - 10px)
33
+ transform: rotate(-90deg) translate(10px, 8px)
34
+ transform-origin: bottom left
35
+ background-color: var(--column-background-color)
36
+
37
+ .taxon-label-text
38
+
14
39
  font-style: italic
40
+ text-align: left
41
+ padding: 0 8px
42
+ max-width: 300px
43
+ //position: sticky
44
+ //top: 200px
@@ -1,15 +1,27 @@
1
- import { getUnitHeightRange } from "../../prepare-units";
2
- import { useMacrostratColumnData } from "../../data-provider";
3
1
  import hyper from "@macrostrat/hyper";
4
- import { PBDBCollection, useFossilData } from "./provider";
5
- import { useMacrostratUnits } from "../../data-provider";
6
- import { ColumnNotes } from "../../notes";
7
- import { useMemo } from "react";
2
+ import {
3
+ FossilDataType,
4
+ PBDBCollection,
5
+ PBDBOccurrence,
6
+ useFossilData,
7
+ } from "./provider";
8
8
  import type { IUnit } from "../../units";
9
+ import { BaseMeasurementsColumn, TruncatedList } from "../base-sample-column";
10
+ import { Box, useElementSize } from "@macrostrat/ui-components";
11
+ import { InternMap } from "d3-array";
12
+ import { ColumnAxisType, ColumnSVG } from "@macrostrat/column-components";
13
+ import {
14
+ useMacrostratColumnData,
15
+ useCompositeScale,
16
+ } from "../../data-provider";
17
+ import { UnitLong } from "@macrostrat/api-types";
9
18
  import styles from "./index.module.sass";
19
+ import { useRef } from "react";
10
20
 
11
21
  const h = hyper.styled(styles);
12
22
 
23
+ export { FossilDataType };
24
+
13
25
  interface FossilItemProps {
14
26
  note: {
15
27
  data: PBDBCollection[];
@@ -28,93 +40,247 @@ function FossilInfo(props: FossilItemProps) {
28
40
  const { note, spacing } = props;
29
41
  const { data, unit } = note;
30
42
 
31
- let d1 = data;
43
+ return h(TruncatedList, {
44
+ data,
45
+ className: "fossil-collections",
46
+ itemRenderer: PBDBCollectionLink,
47
+ });
48
+ }
32
49
 
33
- let tooMany = null;
34
- if (data.length > 5) {
35
- const n = data.length - 5;
36
- d1 = data.slice(0, 5);
37
- tooMany = h("li.too-many", `and ${n} more`);
38
- }
50
+ function PBDBCollectionLink({
51
+ data,
52
+ }: {
53
+ data: PBDBCollection | PBDBOccurrence;
54
+ }) {
55
+ /** A link to a PBDB collection that handles either an occurrence or collection object */
56
+ return h(
57
+ "a.link-id",
58
+ {
59
+ href: `https://paleobiodb.org/classic/basicCollectionSearch?collection_no=${data.cltn_id}`,
60
+ },
61
+ data.best_name ?? data.cltn_name,
62
+ );
63
+ }
64
+
65
+ const matchingUnit = (dz) => (d) => d.unit_id == dz[0].unit_id;
66
+
67
+ export function PBDBFossilsColumn({
68
+ columnID,
69
+ type = FossilDataType.Collections,
70
+ }: {
71
+ columnID: number;
72
+ type: FossilDataType;
73
+ }) {
74
+ const data = useFossilData(columnID, type);
75
+
76
+ return h(BaseMeasurementsColumn, {
77
+ data,
78
+ noteComponent: FossilInfo,
79
+ className: "fossil-collections",
80
+ matchingUnit,
81
+ });
82
+ }
83
+
84
+ export function PBDBOccurrencesMatrix({ columnID }) {
85
+ /* A column for a matrix of taxon occurrences displayed as a table beside the main column. This will
86
+ eventually be extended with first/last occurrence markers and range bars.
87
+ */
88
+ const data = useFossilData(columnID, FossilDataType.Occurrences) as InternMap<
89
+ number,
90
+ PBDBOccurrence[]
91
+ >;
92
+
93
+ // convert the data to a map
94
+ const occurrenceMap = new Map(data);
95
+
96
+ const col = useMacrostratColumnData();
97
+ const matrix = createOccurrenceMatrix(col.units, occurrenceMap, col.axisType);
98
+
99
+ const scale = useCompositeScale();
100
+
101
+ const { taxonRanges } = matrix;
102
+
103
+ const padding = 16;
104
+ const spacing = 16;
105
+
106
+ const taxonEntries = Array.from(taxonRanges.entries());
107
+ //const taxon = taxonEntries.slice(0, 50); // limit to top 50 taxa
108
+
109
+ const width = padding * 2 + spacing * taxonEntries.length;
110
+
111
+ return h(Box, { className: "taxon-ranges", width, height: col.totalHeight }, [
112
+ h(TaxonOccurrenceLabels, {
113
+ taxonEntries,
114
+ padding,
115
+ spacing,
116
+ scale,
117
+ }),
118
+ h(
119
+ ColumnSVG,
120
+ {
121
+ width: padding * 2 + spacing * taxonEntries.length,
122
+ },
123
+ h(
124
+ "g.taxa-occurrences-matrix",
125
+ taxonEntries.map(([taxonName, ranges], rowIndex) => {
126
+ const xPosition = padding + rowIndex * spacing;
127
+ return h("g", { transform: `translate(${xPosition})` }, [
128
+ ranges.map(([top, bottom]) => {
129
+ return h("line", {
130
+ y1: scale(top),
131
+ y2: scale(bottom),
132
+ });
133
+ }),
134
+ ]);
135
+ }),
136
+ ),
137
+ ),
138
+ ]);
139
+ }
39
140
 
40
- return h("ul.fossil-collections", [
41
- d1.map((d) => {
42
- return h("li.collection", { key: d.cltn_id }, [
43
- h(PBDBCollectionLink, { collection: d }),
44
- ]);
141
+ function TaxonOccurrenceLabels({ taxonEntries, padding, spacing, scale }) {
142
+ return h("div.taxon-labels", [
143
+ taxonEntries.map(([taxonName, ranges], rowIndex) => {
144
+ const top = ranges[0]?.[0] ?? 0;
145
+ let topPx = scale(top) - 20;
146
+ if (topPx < 200) topPx = 0;
147
+
148
+ return h(TaxonLabel, {
149
+ top: topPx,
150
+ left: padding + rowIndex * spacing,
151
+ taxonName,
152
+ });
45
153
  }),
46
- tooMany,
47
154
  ]);
48
155
  }
49
156
 
50
- function PBDBCollectionLink({ collection }: { collection: PBDBCollection }) {
157
+ function TaxonLabel({ top, left, taxonName }) {
158
+ const ref = useRef();
159
+ const textSize = useElementSize(ref);
160
+ const labelWidth = textSize?.height ?? 200;
51
161
  return h(
52
- "a.link-id",
162
+ "div.taxon-label",
53
163
  {
54
- href: `https://paleobiodb.org/classic/basicCollectionSearch?collection_no=${collection.cltn_id}`,
164
+ style: {
165
+ top: `${top}px`,
166
+ marginLeft: `${left}px`,
167
+ "--label-width": `${labelWidth}px`,
168
+ },
55
169
  },
56
- collection.cltn_name,
170
+ h("div.taxon-label-inner", h("div.taxon-label-text", { ref }, taxonName)),
57
171
  );
58
172
  }
59
173
 
60
- const matchingUnit = (dz) => (d) => d.unit_id == dz.unit_id;
61
-
62
- export function PBDBFossilsColumn({ columnID, color = "magenta" }) {
63
- const data = useFossilData({ col_id: columnID });
64
- const { axisType, units } = useMacrostratColumnData();
65
-
66
- const notes: any[] = useMemo(() => {
67
- if (data == null || units == null) return [];
68
- let unitRefData = Array.from(data.values())
69
- .map((d) => {
70
- return {
71
- data: d,
72
- unit: units.find(matchingUnit(d[0])),
73
- };
74
- })
75
- .filter((d) => d.unit != null);
76
-
77
- unitRefData.sort((a, b) => {
78
- const v1 = units.indexOf(a.unit);
79
- const v2 = units.indexOf(b.unit);
80
- return v1 - v2;
81
- });
82
-
83
- return unitRefData.map((d) => {
84
- const { unit, data } = d;
85
- const heightRange = getUnitHeightRange(unit, axisType);
86
-
87
- return {
88
- top_height: heightRange[1],
89
- height: heightRange[0],
90
- data,
91
- unit,
92
- id: unit.unit_id,
93
- };
94
- });
95
- }, [data, units]);
96
-
97
- const width = 500;
98
- const paddingLeft = 40;
99
-
100
- const noteComponent = useMemo(() => {
101
- return (props) => {
102
- return h(FossilInfo, {
103
- color,
104
- ...props,
105
- });
106
- };
107
- }, [width, color]);
174
+ type TaxonUnitMap = Map<string, Set<number>>;
108
175
 
109
- if (data == null || units == null) return null;
176
+ interface OccurrenceMatrixData {
177
+ occurrenceMap: Map<number, PBDBOccurrence[]>; // Map of unit IDs to occurrences (original data)
178
+ taxonUnitMap: TaxonUnitMap; // Map of taxon names to sets of unit IDs
179
+ taxonOccurrenceMap: Map<string, PBDBOccurrence[]>; // Map of taxon names to occurrences
180
+ taxonRanges: Map<string, [number, number][]>; // Map of taxon names to [top, bottom] pixel ranges
181
+ }
110
182
 
111
- return h(
112
- "div.dz-spectra",
113
- h(ColumnNotes, {
114
- width,
115
- paddingLeft,
116
- notes,
117
- noteComponent,
183
+ function TaxonOccurrenceEntry({
184
+ xPosition,
185
+ ranges,
186
+ scale,
187
+ name,
188
+ }: {
189
+ xPosition: number;
190
+ units: Set<number>;
191
+ }) {
192
+ return h("g", { transform: `translate(${xPosition})` }, [
193
+ ranges.map(([top, bottom]) => {
194
+ return h("line", {
195
+ y1: scale(top),
196
+ y2: scale(bottom),
197
+ });
118
198
  }),
119
- );
199
+ ]);
200
+ }
201
+
202
+ function createOccurrenceMatrix(
203
+ units: UnitLong[],
204
+ data: Map<number, PBDBOccurrence[]>,
205
+ axisType: ColumnAxisType = ColumnAxisType.AGE,
206
+ ): OccurrenceMatrixData {
207
+ const taxonUnitMap = new Map<string, Set<number>>();
208
+ const taxonOccurrenceMap = new Map<string, PBDBOccurrence[]>();
209
+
210
+ for (const [unit_id, occurrences] of data.entries()) {
211
+ for (const occ of occurrences) {
212
+ const taxonName = occ.best_name ?? occ.taxon_name;
213
+ if (!taxonUnitMap.has(taxonName)) {
214
+ taxonUnitMap.set(taxonName, new Set());
215
+ taxonOccurrenceMap.set(taxonName, []);
216
+ }
217
+ taxonUnitMap.get(taxonName).add(unit_id);
218
+ taxonOccurrenceMap.get(taxonName).push(occ);
219
+ }
220
+ }
221
+
222
+ // sort the taxon occurrence map by number of occurrences
223
+ const sortedTaxa = Array.from(taxonUnitMap.entries()).sort((a, b) => {
224
+ // Sort alphabetically by taxon name
225
+ return b[0].localeCompare(a[0]);
226
+ });
227
+
228
+ const taxonRanges = new Map<string, [number, number][]>();
229
+ for (const [taxonName, unitSet] of taxonUnitMap.entries()) {
230
+ taxonRanges.set(
231
+ taxonName,
232
+ accumulatePresenceDomains(units, unitSet, axisType),
233
+ );
234
+ }
235
+
236
+ return {
237
+ occurrenceMap: data,
238
+ taxonUnitMap: new Map(sortedTaxa),
239
+ taxonOccurrenceMap: taxonOccurrenceMap,
240
+ taxonRanges,
241
+ };
242
+ }
243
+
244
+ function accumulatePresenceDomains(
245
+ unit: UnitLong[],
246
+ presenceUnits: Set<number>,
247
+ axisType: ColumnAxisType,
248
+ ): Array<[number, number]> {
249
+ const domains: Array<[number, number]> = [];
250
+ let currentDomain: [number, number] | null = null;
251
+
252
+ for (const u of unit) {
253
+ if (presenceUnits.has(u.unit_id)) {
254
+ if (currentDomain == null) {
255
+ if (
256
+ axisType == ColumnAxisType.DEPTH ||
257
+ axisType == ColumnAxisType.HEIGHT
258
+ ) {
259
+ currentDomain = [u.t_pos, u.b_pos];
260
+ } else {
261
+ currentDomain = [u.t_age, u.b_age];
262
+ }
263
+ } else {
264
+ if (
265
+ axisType == ColumnAxisType.DEPTH ||
266
+ axisType == ColumnAxisType.HEIGHT
267
+ ) {
268
+ currentDomain[1] = u.b_pos;
269
+ } else {
270
+ currentDomain[1] = u.b_age;
271
+ }
272
+ }
273
+ } else {
274
+ if (currentDomain != null) {
275
+ domains.push(currentDomain);
276
+ currentDomain = null;
277
+ }
278
+ }
279
+ }
280
+
281
+ if (currentDomain != null) {
282
+ domains.push(currentDomain);
283
+ }
284
+
285
+ return domains;
120
286
  }