@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
@@ -1,5 +1,5 @@
1
- import {ColumnNavigationMap as $9d5d216fa2057b5b$export$821baedf611249f3, ResizableMapFrame as $e6046e00d2c8a163$export$c4313db718750a5a, ColumnNavigationSVGMap as $e6046e00d2c8a163$export$9595c40c7a4c4f7b, MeasurementsLayer as $93f116a6493b17c3$export$2254347cd20e6080, ColumnFeatures as $93f116a6493b17c3$export$f177ff57c101017a, ColumnKeyboardNavigation as $93f116a6493b17c3$export$8c41dd563753848, Columns as $93f116a6493b17c3$export$f02cc02ad0e0bba3, ColumnCenters as $93f116a6493b17c3$export$4d8f6e6df85d9012, CurrentColumn as $93f116a6493b17c3$export$b9d912252344e099} from "./column-views.d099eaf9.js";
2
- import {ColumnCorrelationMap as $dcd183b733f66144$export$8e7d97509e84cc49, ColumnCorrelationProvider as $74e211dc185c20b4$export$72ffe141ebf87ef1, useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.53f4160e.js";
1
+ import {ColumnNavigationMap as $9d5d216fa2057b5b$export$821baedf611249f3, ResizableMapFrame as $e6046e00d2c8a163$export$c4313db718750a5a, ColumnNavigationSVGMap as $e6046e00d2c8a163$export$9595c40c7a4c4f7b, MeasurementsLayer as $93f116a6493b17c3$export$2254347cd20e6080, ColumnFeatures as $93f116a6493b17c3$export$f177ff57c101017a, ColumnKeyboardNavigation as $93f116a6493b17c3$export$8c41dd563753848, Columns as $93f116a6493b17c3$export$f02cc02ad0e0bba3, ColumnCenters as $93f116a6493b17c3$export$4d8f6e6df85d9012, CurrentColumn as $93f116a6493b17c3$export$b9d912252344e099} from "./column-views.0a8a07f4.js";
2
+ import {ColumnCorrelationMap as $dcd183b733f66144$export$8e7d97509e84cc49, ColumnCorrelationProvider as $74e211dc185c20b4$export$72ffe141ebf87ef1, useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.1b644998.js";
3
3
  import {InsetMap as $5593f90ffec284da$export$1e8149fc0d15fed0, buildColumnsStyle as $1dbfddc9637b572c$export$d2995719c3a4ae17} from "./column-views.a94e99a2.js";
4
4
 
5
5
 
@@ -8,4 +8,4 @@ import {InsetMap as $5593f90ffec284da$export$1e8149fc0d15fed0, buildColumnsStyle
8
8
 
9
9
 
10
10
  export {$9d5d216fa2057b5b$export$821baedf611249f3 as ColumnNavigationMap, $e6046e00d2c8a163$export$c4313db718750a5a as ResizableMapFrame, $e6046e00d2c8a163$export$9595c40c7a4c4f7b as ColumnNavigationSVGMap, $93f116a6493b17c3$export$2254347cd20e6080 as MeasurementsLayer, $93f116a6493b17c3$export$f177ff57c101017a as ColumnFeatures, $93f116a6493b17c3$export$8c41dd563753848 as ColumnKeyboardNavigation, $93f116a6493b17c3$export$f02cc02ad0e0bba3 as Columns, $93f116a6493b17c3$export$4d8f6e6df85d9012 as ColumnCenters, $93f116a6493b17c3$export$b9d912252344e099 as CurrentColumn, $dcd183b733f66144$export$8e7d97509e84cc49 as ColumnCorrelationMap, $74e211dc185c20b4$export$72ffe141ebf87ef1 as ColumnCorrelationProvider, $74e211dc185c20b4$export$21398703d3a9bb4d as useCorrelationMapStore, $5593f90ffec284da$export$1e8149fc0d15fed0 as InsetMap, $1dbfddc9637b572c$export$d2995719c3a4ae17 as buildColumnsStyle};
11
- //# sourceMappingURL=column-views.43fb819d.js.map
11
+ //# sourceMappingURL=column-views.63b7e5aa.js.map
@@ -1 +1 @@
1
- {"mappings":"","sources":["packages/column-views/src/maps/index.ts"],"sourcesContent":["export * from \"./column-navigation\";\nexport * from \"./column-correlation\";\nexport * from \"./_shared\";\n"],"names":[],"version":3,"file":"column-views.43fb819d.js.map"}
1
+ {"mappings":"","sources":["packages/column-views/src/maps/index.ts"],"sourcesContent":["export * from \"./column-navigation\";\nexport * from \"./column-correlation\";\nexport * from \"./_shared\";\n"],"names":[],"version":3,"file":"column-views.63b7e5aa.js.map"}
@@ -0,0 +1,108 @@
1
+ import {group as $7EBVZ$group} from "d3-array";
2
+ import {createAPIContext as $7EBVZ$createAPIContext, useAPIResult as $7EBVZ$useAPIResult, useAsyncMemo as $7EBVZ$useAsyncMemo} from "@macrostrat/ui-components";
3
+
4
+
5
+
6
+ const $a3ff7da576c02df0$var$responseUnwrapper = (d)=>d.records;
7
+ const $a3ff7da576c02df0$var$pbdbAPIContext = (0, $7EBVZ$createAPIContext)({
8
+ baseURL: "https://paleobiodb.org/data1.2",
9
+ unwrapResponse: $a3ff7da576c02df0$var$responseUnwrapper
10
+ });
11
+ var $a3ff7da576c02df0$export$a990c76b38782f57 = /*#__PURE__*/ function(FossilDataType) {
12
+ FossilDataType["Occurrences"] = "occs";
13
+ FossilDataType["Collections"] = "colls";
14
+ return FossilDataType;
15
+ }({});
16
+ function $a3ff7da576c02df0$export$c4ed16553d869511(type, { col_id: col_id }) {
17
+ const params = {
18
+ ms_column: col_id,
19
+ show: "full,mslink"
20
+ };
21
+ return (0, $7EBVZ$useAPIResult)(`/${type}/list.json`, params, {
22
+ context: $a3ff7da576c02df0$var$pbdbAPIContext
23
+ });
24
+ }
25
+ function $a3ff7da576c02df0$export$e6af757fa9780077(col_id, type = "colls") {
26
+ // Fossil links are stored in both Macrostrat and PBDB, depending on how the link was assembled. Here
27
+ // we create a unified view of data over both sources.
28
+ return (0, $7EBVZ$useAsyncMemo)(async ()=>{
29
+ if (col_id == null) return null;
30
+ return await $a3ff7da576c02df0$var$fetchFossilData(col_id, type);
31
+ }, [
32
+ col_id,
33
+ type
34
+ ]);
35
+ }
36
+ async function $a3ff7da576c02df0$var$fetchMacrostratFossilData(col_id, type) {
37
+ if (type !== "colls") // Macrostrat API only supports collections
38
+ return [];
39
+ // Fetch fossil collections linked to columns from the Macrostrat API
40
+ const resp = await fetch(`https://macrostrat.org/api/fossils?col_id=${col_id}`);
41
+ const res = await resp.json();
42
+ // Create collections from Macrostrat data
43
+ return res.success.data;
44
+ }
45
+ async function $a3ff7da576c02df0$var$fetchPDBDFossilData(col_id, type) {
46
+ const resp = await fetch(`https://paleobiodb.org/data1.2/${type}/list.json?ms_column=${col_id}&show=mslink,full`);
47
+ const res = await resp.json();
48
+ return res.records.map(type == "colls" ? $a3ff7da576c02df0$var$createMacrostratCollection : $a3ff7da576c02df0$var$preprocessOccurrence);
49
+ }
50
+ async function $a3ff7da576c02df0$var$fetchFossilData(colID, type) {
51
+ const [macrostratData, pbdbData] = await Promise.all([
52
+ $a3ff7da576c02df0$var$fetchMacrostratFossilData(colID, type),
53
+ $a3ff7da576c02df0$var$fetchPDBDFossilData(colID, type)
54
+ ]);
55
+ const data = [
56
+ ...macrostratData,
57
+ ...pbdbData
58
+ ];
59
+ return (0, $7EBVZ$group)(data, (d)=>d.unit_id);
60
+ }
61
+ function $a3ff7da576c02df0$var$preprocessOccurrence(d) {
62
+ /* Preprocess data for an occurrence into a Macrostrat-like format */ // Standardize names of Macrostrat units and columns
63
+ const unit_id = parseInt(d.msu.replace(/^\w+:/, ""));
64
+ const col_id = parseInt(d.msc.replace(/^\w+:/, ""));
65
+ // taxon names may be stored in different fields
66
+ const occ_id = parseInt(d.oid.replace(/^occ:/, ""));
67
+ const cltn_id = parseInt(d.cid.replace(/^col:/, ""));
68
+ return {
69
+ ...d,
70
+ unit_id: unit_id,
71
+ col_id: col_id,
72
+ taxon_name: d.tna,
73
+ best_name: d.idn ?? d.tna,
74
+ occ_id: occ_id,
75
+ cltn_id: cltn_id,
76
+ cltn_name: d.nam
77
+ };
78
+ }
79
+ function $a3ff7da576c02df0$var$createMacrostratCollection(d) {
80
+ /* Preprocess data for a collection into a Macrostrat-like format */ let unit_id = null;
81
+ let col_id = null;
82
+ // Standardize names of Macrostrat units and columns
83
+ if (d.msu != null) unit_id = parseInt(d.msu.replace(/^\w+:/, ""));
84
+ if (d.msc != null) col_id = parseInt(d.msc.replace(/^\w+:/, ""));
85
+ // taxon names may be stored in different fields
86
+ let taxon_name = d.tna;
87
+ let occ_id = null;
88
+ if (d.oid != null && d.oid.startsWith("occ:")) occ_id = parseInt(d.oid.replace(/^occ:/, ""));
89
+ if (d.idn != null) taxon_name = d.idn;
90
+ let cltn_id = d.cltn_id;
91
+ if (d.oid != null && d.oid.startsWith("col:")) cltn_id = parseInt(d.oid.replace(/^col:/, ""));
92
+ else if (d.cid != null && d.cid.startsWith("col:")) cltn_id = parseInt(d.cid.replace(/^col:/, ""));
93
+ return {
94
+ ...d,
95
+ unit_id: unit_id,
96
+ col_id: col_id,
97
+ taxon_name: taxon_name,
98
+ occ_id: occ_id,
99
+ cltn_id: cltn_id,
100
+ cltn_name: d.nam,
101
+ t_age: d.t_age,
102
+ b_age: d.b_age
103
+ };
104
+ }
105
+
106
+
107
+ export {$a3ff7da576c02df0$export$a990c76b38782f57 as FossilDataType, $a3ff7da576c02df0$export$c4ed16553d869511 as usePBDBFossilData, $a3ff7da576c02df0$export$e6af757fa9780077 as useFossilData};
108
+ //# sourceMappingURL=column-views.6698b95a.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/facets/fossils/provider.ts"],"sourcesContent":["import { group, InternMap } from \"d3-array\";\nimport {\n createAPIContext,\n useAPIResult,\n useAsyncMemo,\n} from \"@macrostrat/ui-components\";\n\nconst responseUnwrapper = (d) => d.records;\n\nconst pbdbAPIContext = createAPIContext({\n baseURL: \"https://paleobiodb.org/data1.2\",\n unwrapResponse: responseUnwrapper,\n});\n\nexport enum FossilDataType {\n Occurrences = \"occs\",\n Collections = \"colls\",\n}\n\nexport function usePBDBFossilData(\n type: FossilDataType,\n { col_id },\n): any[] | null {\n const params = {\n ms_column: col_id,\n show: \"full,mslink\",\n };\n return useAPIResult(`/${type}/list.json`, params, {\n context: pbdbAPIContext,\n });\n}\n\nexport interface PBDBIdentifier {\n unit_id: number;\n col_id: number;\n cltn_id: number;\n}\n\nexport interface PBDBCollection extends PBDBIdentifier {\n cltn_name: string;\n pbdb_occs: number;\n t_age: number;\n b_age: number;\n [key: string]: any; // Allow for additional properties\n}\n\nexport interface PBDBOccurrence extends PBDBIdentifier {\n occ_id: number;\n cltn_id: number;\n taxon_name: string;\n best_name: string;\n [key: string]: any; // Allow for additional properties\n}\n\nexport function useFossilData(\n col_id: number,\n type = FossilDataType.Collections,\n) {\n // Fossil links are stored in both Macrostrat and PBDB, depending on how the link was assembled. Here\n // we create a unified view of data over both sources.\n return useAsyncMemo(async () => {\n if (col_id == null) return null;\n return await fetchFossilData(col_id, type);\n }, [col_id, type]);\n}\n\nasync function fetchMacrostratFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n if (type !== FossilDataType.Collections) {\n // Macrostrat API only supports collections\n return [];\n }\n\n // Fetch fossil collections linked to columns from the Macrostrat API\n const resp = await fetch(\n `https://macrostrat.org/api/fossils?col_id=${col_id}`,\n );\n const res = await resp.json();\n // Create collections from Macrostrat data\n return res.success.data;\n}\n\nasync function fetchPDBDFossilData(\n col_id: number,\n type: FossilDataType,\n): Promise<PBDBCollection[]> {\n const resp = await fetch(\n `https://paleobiodb.org/data1.2/${type}/list.json?ms_column=${col_id}&show=mslink,full`,\n );\n const res = await resp.json();\n return res.records.map(\n type == FossilDataType.Collections\n ? createMacrostratCollection\n : preprocessOccurrence,\n );\n}\n\nasync function fetchFossilData(\n colID: number,\n type: FossilDataType,\n): Promise<InternMap<number, PBDBOccurrence[] | PBDBCollection[]>> {\n const [macrostratData, pbdbData] = await Promise.all([\n fetchMacrostratFossilData(colID, type),\n fetchPDBDFossilData(colID, type),\n ]);\n\n const data = [...macrostratData, ...pbdbData];\n\n return group(data, (d) => d.unit_id);\n}\n\nfunction preprocessOccurrence(d): PBDBOccurrence {\n /* Preprocess data for an occurrence into a Macrostrat-like format */\n // Standardize names of Macrostrat units and columns\n const unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n const col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n\n // taxon names may be stored in different fields\n const occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n const cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name: d.tna,\n best_name: d.idn ?? d.tna,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n };\n}\n\nfunction createMacrostratCollection(d): PBDBCollection {\n /* Preprocess data for a collection into a Macrostrat-like format */\n let unit_id = null;\n let col_id = null;\n // Standardize names of Macrostrat units and columns\n if (d.msu != null) {\n unit_id = parseInt(d.msu.replace(/^\\w+:/, \"\"));\n }\n if (d.msc != null) {\n col_id = parseInt(d.msc.replace(/^\\w+:/, \"\"));\n }\n\n // taxon names may be stored in different fields\n let taxon_name = d.tna;\n let occ_id = null;\n if (d.oid != null && d.oid.startsWith(\"occ:\")) {\n occ_id = parseInt(d.oid.replace(/^occ:/, \"\"));\n }\n if (d.idn != null) {\n taxon_name = d.idn;\n }\n\n let cltn_id = d.cltn_id;\n if (d.oid != null && d.oid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.oid.replace(/^col:/, \"\"));\n } else if (d.cid != null && d.cid.startsWith(\"col:\")) {\n cltn_id = parseInt(d.cid.replace(/^col:/, \"\"));\n }\n\n return {\n ...d,\n unit_id,\n col_id,\n taxon_name,\n occ_id,\n cltn_id,\n cltn_name: d.nam,\n t_age: d.t_age,\n b_age: d.b_age,\n };\n}\n"],"names":[],"version":3,"file":"column-views.6698b95a.js.map"}
@@ -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.e84bd756.js";
3
+ import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76, useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d} from "./column-views.4fd4ec92.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.6c644353.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.6c644353.js.map"}
@@ -0,0 +1,16 @@
1
+
2
+ function $parcel$export(e, n, v, s) {
3
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
4
+ }
5
+ var $4629ffa28ca3dfc9$exports = {};
6
+
7
+ $parcel$export($4629ffa28ca3dfc9$exports, "too-many", () => $4629ffa28ca3dfc9$export$76144d85d033d82a, (v) => $4629ffa28ca3dfc9$export$76144d85d033d82a = v);
8
+ $parcel$export($4629ffa28ca3dfc9$exports, "truncated-list", () => $4629ffa28ca3dfc9$export$12f42f335e4f5e49, (v) => $4629ffa28ca3dfc9$export$12f42f335e4f5e49 = v);
9
+ var $4629ffa28ca3dfc9$export$76144d85d033d82a;
10
+ var $4629ffa28ca3dfc9$export$12f42f335e4f5e49;
11
+ $4629ffa28ca3dfc9$export$76144d85d033d82a = `sf_8dq_too-many`;
12
+ $4629ffa28ca3dfc9$export$12f42f335e4f5e49 = `sf_8dq_truncated-list`;
13
+
14
+
15
+ export {$4629ffa28ca3dfc9$exports as default};
16
+ //# sourceMappingURL=column-views.6e7082db.js.map
@@ -0,0 +1 @@
1
+ {"mappings":";;;;;;;;AAAA,IAAA;AACA,IAAA;AADA,4CAA6B,CAAC,eAAe,CAAC;AAC9C,4CAAmC,CAAC,qBAAqB,CAAC","sources":["packages/column-views/src/facets/base-sample-column.module.sass"],"sourcesContent":[".truncated-list\n padding-left: 0.2em\n font-size: 0.9em\n list-style: none\n border-left: 1px solid var(--column-stroke-color)\n margin: 1px 0\n li\n display: inline\n &:not(:last-child):after\n content: \", \"\n color: var(--secondary-color)\n li.too-many\n color: var(--secondary-color)\n font-style: italic\n"],"names":[],"version":3,"file":"column-views.6e7082db.js.map"}
@@ -0,0 +1,206 @@
1
+ import {getUnitHeightRange as $b6657fba8924a702$export$70e712e2ac0237a} from "./column-views.54f8b909.js";
2
+ import {HeightMethod as $1254c5929638d7f9$export$e40aae6f0de9bb95, HybridScaleType as $1254c5929638d7f9$export$45e8e2d7a1794c23} from "./column-views.079119f4.js";
3
+ import {scaleLinear as $a4oUv$scaleLinear} from "d3-scale";
4
+ import {ColumnAxisType as $a4oUv$ColumnAxisType} from "@macrostrat/column-components";
5
+ import {mergeAgeRanges as $a4oUv$mergeAgeRanges, MergeMode as $a4oUv$MergeMode} from "@macrostrat/stratigraphy-utils";
6
+
7
+
8
+
9
+
10
+
11
+
12
+ function $90d6b105908858a7$export$151c207e6887154c(units, tolerance = 0.001) {
13
+ /** Compute age surfaces for a column based on unit tops and bottoms */ const surfaces = [];
14
+ for (const unit of units){
15
+ // Top surface
16
+ surfaces.push({
17
+ age: unit.t_age,
18
+ units_below: [
19
+ unit.unit_id
20
+ ],
21
+ units_above: []
22
+ });
23
+ // Bottom surface
24
+ surfaces.push({
25
+ age: unit.b_age,
26
+ units_above: [
27
+ unit.unit_id
28
+ ],
29
+ units_below: []
30
+ });
31
+ }
32
+ // Merge duplicate surfaces (same age)
33
+ const mergedSurfaces = [];
34
+ for (const surface of surfaces){
35
+ const existingSurface = mergedSurfaces.find((s)=>Math.abs(s.age - surface.age) < tolerance);
36
+ if (existingSurface) {
37
+ existingSurface.units_above.push(...surface.units_above);
38
+ existingSurface.units_below.push(...surface.units_below);
39
+ } else mergedSurfaces.push(surface);
40
+ }
41
+ // Sort surfaces by age (ascending)
42
+ mergedSurfaces.sort((a, b)=>a.age - b.age);
43
+ return mergedSurfaces.map((s, i)=>({
44
+ ...s,
45
+ index: i
46
+ }));
47
+ }
48
+ function $90d6b105908858a7$var$getUnitsInAgeDomains(surfaces, units) {
49
+ // Get unit IDs represented between the same surface, and the proportion of their total height represented
50
+ const domainUnitInfo = [];
51
+ for(let i = 0; i < surfaces.length - 1; i++){
52
+ const topSurface = surfaces[i];
53
+ const bottomSurface = surfaces[i + 1];
54
+ const unitsInDomain = units.filter((unit)=>{
55
+ return unit.t_age <= topSurface.age + 0.001 && unit.b_age >= bottomSurface.age - 0.001;
56
+ });
57
+ domainUnitInfo.push({
58
+ t_age: topSurface.age,
59
+ b_age: bottomSurface.age,
60
+ units: unitsInDomain
61
+ });
62
+ }
63
+ return domainUnitInfo;
64
+ }
65
+ function $90d6b105908858a7$var$proportionOfUnitInDomain(unit, t_age, b_age) {
66
+ // Compute the proportion of a unit's height that lies within the given age domain
67
+ const rng = (0, $b6657fba8924a702$export$70e712e2ac0237a)(unit, (0, $a4oUv$ColumnAxisType).AGE);
68
+ const rng1 = [
69
+ b_age,
70
+ t_age
71
+ ];
72
+ // Compute overlap
73
+ const mergedRange = (0, $a4oUv$mergeAgeRanges)([
74
+ rng,
75
+ rng1
76
+ ], (0, $a4oUv$MergeMode).Inner);
77
+ const unitHeight = Math.abs(rng[1] - rng[0]);
78
+ const mergedHeight = Math.abs(mergedRange[1] - mergedRange[0]);
79
+ return mergedHeight / unitHeight;
80
+ }
81
+ function $90d6b105908858a7$export$6b39f1b6356d94b6(def, units, domain, options = {}) {
82
+ const surfaces = $90d6b105908858a7$export$151c207e6887154c(units);
83
+ const filteredSurfaces = surfaces.filter((s)=>s.age < Math.max(...domain) && s.age > Math.min(...domain));
84
+ const s1 = [
85
+ {
86
+ index: -1,
87
+ age: Math.min(...domain),
88
+ units_above: [],
89
+ units_below: []
90
+ },
91
+ ...filteredSurfaces,
92
+ {
93
+ index: -1,
94
+ age: Math.max(...domain),
95
+ units_above: [],
96
+ units_below: []
97
+ }
98
+ ];
99
+ const { type: type, ...rest } = def;
100
+ if (type === (0, $1254c5929638d7f9$export$45e8e2d7a1794c23).EquidistantSurfaces) return $90d6b105908858a7$export$d02d2d708a7b495f(s1, options);
101
+ return $90d6b105908858a7$export$be7a6f1f0a23d12c(s1, units, {
102
+ ...options,
103
+ ...rest
104
+ });
105
+ }
106
+ function $90d6b105908858a7$var$getApproximateHeight(unit, method = (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Maximum) {
107
+ // Get approximate height of a unit based on specified method
108
+ const heights = [];
109
+ let minHeight = unit.min_thick;
110
+ if (method === (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Minimum || method === (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Average) {
111
+ const h = unit.min_thick;
112
+ if (h != null && !isNaN(h) && h > 0) heights.push(h);
113
+ }
114
+ if (method === (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Average || method === (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Maximum) {
115
+ const h = unit.max_thick;
116
+ if (h != null && !isNaN(h) && h > 0) heights.push(h);
117
+ }
118
+ if (heights.length === 0) return null;
119
+ if (method === (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Average) return heights.reduce((sum, h)=>sum + h, 0) / heights.length;
120
+ else return heights[0];
121
+ }
122
+ function $90d6b105908858a7$export$be7a6f1f0a23d12c(surfaces, units, options = {}) {
123
+ /** Build a variable age scale that places age surfaces equally far apart in height space.
124
+ * It is presumed that gaps are already removed from the unit set provided.
125
+ * */ const { pixelScale: pixelScale = 1, pixelOffset: pixelOffset = 0, minHeight: minHeight = 5, heightMethod: heightMethod = (0, $1254c5929638d7f9$export$e40aae6f0de9bb95).Maximum, defaultHeight: // Default height for when height is unknown
126
+ defaultHeight = 100 } = options;
127
+ // Get units associated with each surface
128
+ // Note: we could hoist this if it proved useful for other scale types
129
+ const domainInfo = $90d6b105908858a7$var$getUnitsInAgeDomains(surfaces, units);
130
+ // Compute the height in pixels for each surface
131
+ const surfaceHeights = [];
132
+ const ageDomain = [];
133
+ let lastHeight = pixelOffset;
134
+ for (const domain of domainInfo){
135
+ if (lastHeight == pixelOffset) {
136
+ surfaceHeights.push(lastHeight);
137
+ ageDomain.push(domain.t_age);
138
+ }
139
+ // Approximate height based on units in this domain
140
+ const units = domain.units;
141
+ let unitHeightInfo = [];
142
+ for (const unit of units){
143
+ const proportion = $90d6b105908858a7$var$proportionOfUnitInDomain(unit, domain.t_age, domain.b_age);
144
+ const height = $90d6b105908858a7$var$getApproximateHeight(unit, heightMethod);
145
+ if (height != null) unitHeightInfo.push({
146
+ unit: unit,
147
+ height: height * proportion
148
+ });
149
+ }
150
+ let thisHeight = 0;
151
+ if (unitHeightInfo.length === 0) thisHeight = defaultHeight; // Default height if no units with height info
152
+ else {
153
+ // Normalize weights (take the mean)
154
+ const meanHeight = unitHeightInfo.reduce((sum, d)=>sum + d.height, 0) / unitHeightInfo.length;
155
+ if (meanHeight == 0) thisHeight = defaultHeight; // Arbitrary height for zero-height intervals
156
+ else if (meanHeight < minHeight) thisHeight = minHeight; // Minimum height
157
+ else thisHeight = meanHeight;
158
+ }
159
+ lastHeight += thisHeight;
160
+ surfaceHeights.push(lastHeight);
161
+ ageDomain.push(domain.b_age);
162
+ }
163
+ // Build a piecewise linear scale mapping age to pixel height
164
+ const pixelRange = surfaceHeights.map((h)=>h * pixelScale);
165
+ const scale = (0, $a4oUv$scaleLinear)().domain(ageDomain).range(pixelRange);
166
+ const heightDomain = surfaceHeights.map((h)=>lastHeight - h);
167
+ const heightScale = (0, $a4oUv$scaleLinear)().domain(heightDomain).range(pixelRange);
168
+ const domain = [
169
+ ageDomain[ageDomain.length - 1],
170
+ ageDomain[0]
171
+ ];
172
+ return {
173
+ scale: scale,
174
+ pixelScale: null,
175
+ domain: domain,
176
+ pixelHeight: Math.abs(pixelRange[pixelRange.length - 1] - pixelRange[0]),
177
+ heightScale: heightScale
178
+ };
179
+ }
180
+ function $90d6b105908858a7$export$d02d2d708a7b495f(surfaces, options = {}) {
181
+ /** Build a variable age scale that places age surfaces equally far apart in height space.
182
+ * It is presumed that gaps are already removed from the unit set provided.
183
+ * */ const { pixelScale: pixelScale = 30 } = options;
184
+ const domain = [
185
+ surfaces[surfaces.length - 1].age,
186
+ surfaces[0].age
187
+ ];
188
+ // Compute the height in pixels for each surface
189
+ const surfaceHeights = surfaces.map((surface, i)=>{
190
+ return i * pixelScale;
191
+ });
192
+ // Build a piecewise linear scale mapping age to pixel height
193
+ const ageDomain = surfaces.map((s)=>s.age);
194
+ const pixelRange = surfaceHeights;
195
+ const scale = (0, $a4oUv$scaleLinear)().domain(ageDomain).range(pixelRange);
196
+ return {
197
+ scale: scale,
198
+ pixelScale: null,
199
+ domain: domain,
200
+ pixelHeight: Math.abs(pixelRange[pixelRange.length - 1] - pixelRange[0])
201
+ };
202
+ }
203
+
204
+
205
+ export {$90d6b105908858a7$export$151c207e6887154c as buildColumnSurfaces, $90d6b105908858a7$export$6b39f1b6356d94b6 as buildHybridScale, $90d6b105908858a7$export$d02d2d708a7b495f as buildScaleFromSurfacesSimple, $90d6b105908858a7$export$be7a6f1f0a23d12c as buildApproximateHeightScale};
206
+ //# sourceMappingURL=column-views.70164236.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/prepare-units/dynamic-scales.ts"],"sourcesContent":["import type { UnitLong } from \"@macrostrat/api-types\";\nimport { scaleLinear } from \"d3-scale\";\nimport { getUnitHeightRange } from \"./utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { mergeAgeRanges, MergeMode } from \"@macrostrat/stratigraphy-utils\";\nimport type {\n ApproxHeightScaleOptions,\n ExtUnit,\n HybridScaleDefinition,\n HybridScaleOptions,\n PackageScaleInfo,\n} from \"./types\";\nimport { HybridScaleType, HeightMethod } from \"./types\";\n\ninterface BaseSurface {\n index: number;\n age: number;\n units_below: number[];\n units_above: number[];\n}\n\nexport function buildColumnSurfaces<T extends UnitLong>(\n units: T[],\n tolerance: number = 0.001,\n): BaseSurface[] {\n /** Compute age surfaces for a column based on unit tops and bottoms */\n const surfaces: Omit<BaseSurface, \"index\">[] = [];\n for (const unit of units) {\n // Top surface\n surfaces.push({\n age: unit.t_age,\n units_below: [unit.unit_id],\n units_above: [],\n });\n // Bottom surface\n surfaces.push({\n age: unit.b_age,\n units_above: [unit.unit_id],\n units_below: [],\n });\n }\n\n // Merge duplicate surfaces (same age)\n const mergedSurfaces: Omit<BaseSurface, \"index\">[] = [];\n for (const surface of surfaces) {\n const existingSurface = mergedSurfaces.find(\n (s) => Math.abs(s.age - surface.age) < tolerance,\n );\n if (existingSurface) {\n existingSurface.units_above.push(...surface.units_above);\n existingSurface.units_below.push(...surface.units_below);\n } else {\n mergedSurfaces.push(surface);\n }\n }\n\n // Sort surfaces by age (ascending)\n mergedSurfaces.sort((a, b) => a.age - b.age);\n\n return mergedSurfaces.map((s, i) => ({ ...s, index: i }));\n}\n\ninterface AgeDomainUnitInfo {\n t_age: number;\n b_age: number;\n units: ExtUnit[];\n}\n\nfunction getUnitsInAgeDomains(\n surfaces: BaseSurface[],\n units: ExtUnit[],\n): AgeDomainUnitInfo[] {\n // Get unit IDs represented between the same surface, and the proportion of their total height represented\n const domainUnitInfo: AgeDomainUnitInfo[] = [];\n for (let i = 0; i < surfaces.length - 1; i++) {\n const topSurface = surfaces[i];\n const bottomSurface = surfaces[i + 1];\n const unitsInDomain = units.filter((unit) => {\n return (\n unit.t_age <= topSurface.age + 0.001 &&\n unit.b_age >= bottomSurface.age - 0.001\n );\n });\n domainUnitInfo.push({\n t_age: topSurface.age,\n b_age: bottomSurface.age,\n units: unitsInDomain,\n });\n }\n return domainUnitInfo;\n}\n\nfunction proportionOfUnitInDomain(\n unit: ExtUnit,\n t_age: number,\n b_age: number,\n): number {\n // Compute the proportion of a unit's height that lies within the given age domain\n\n const rng = getUnitHeightRange(unit, ColumnAxisType.AGE);\n const rng1: [number, number] = [b_age, t_age];\n // Compute overlap\n\n const mergedRange = mergeAgeRanges([rng, rng1], MergeMode.Inner);\n\n const unitHeight = Math.abs(rng[1] - rng[0]);\n const mergedHeight = Math.abs(mergedRange[1] - mergedRange[0]);\n\n return mergedHeight / unitHeight;\n}\n\nexport function buildHybridScale<T extends UnitLong>(\n def: HybridScaleDefinition,\n units: T[],\n domain: [number, number],\n options: HybridScaleOptions = {},\n): PackageScaleInfo {\n const surfaces = buildColumnSurfaces(units);\n\n const filteredSurfaces = surfaces.filter(\n (s) => s.age < Math.max(...domain) && s.age > Math.min(...domain),\n );\n\n const s1 = [\n { index: -1, age: Math.min(...domain), units_above: [], units_below: [] },\n ...filteredSurfaces,\n {\n index: -1,\n age: Math.max(...domain),\n units_above: [],\n units_below: [],\n },\n ];\n\n const { type, ...rest } = def;\n\n if (type === HybridScaleType.EquidistantSurfaces) {\n return buildScaleFromSurfacesSimple(s1, options);\n }\n\n return buildApproximateHeightScale(s1, units, { ...options, ...rest });\n}\n\nfunction getApproximateHeight(\n unit: ExtUnit,\n method: HeightMethod = HeightMethod.Maximum,\n): number | null {\n // Get approximate height of a unit based on specified method\n const heights = [];\n let minHeight = unit.min_thick;\n if (method === HeightMethod.Minimum || method === HeightMethod.Average) {\n const h = unit.min_thick;\n if (h != null && !isNaN(h) && h > 0) heights.push(h);\n }\n if (method === HeightMethod.Average || method === HeightMethod.Maximum) {\n const h = unit.max_thick;\n if (h != null && !isNaN(h) && h > 0) heights.push(h);\n }\n\n if (heights.length === 0) return null;\n\n if (method === HeightMethod.Average) {\n return heights.reduce((sum, h) => sum + h, 0) / heights.length;\n } else {\n return heights[0];\n }\n}\n\nexport function buildApproximateHeightScale(\n surfaces: BaseSurface[],\n units: UnitLong[],\n options: HybridScaleOptions & ApproxHeightScaleOptions = {},\n): PackageScaleInfo {\n /** Build a variable age scale that places age surfaces equally far apart in height space.\n * It is presumed that gaps are already removed from the unit set provided.\n * */\n\n const {\n pixelScale = 1, // pixels per meter\n pixelOffset = 0,\n minHeight = 5,\n heightMethod = HeightMethod.Maximum,\n // Default height for when height is unknown\n defaultHeight = 100,\n } = options;\n\n // Get units associated with each surface\n // Note: we could hoist this if it proved useful for other scale types\n const domainInfo = getUnitsInAgeDomains(surfaces, units as ExtUnit[]);\n\n // Compute the height in pixels for each surface\n\n const surfaceHeights = [];\n const ageDomain = [];\n let lastHeight = pixelOffset;\n\n for (const domain of domainInfo) {\n if (lastHeight == pixelOffset) {\n surfaceHeights.push(lastHeight);\n ageDomain.push(domain.t_age);\n }\n\n // Approximate height based on units in this domain\n const units = domain.units;\n let unitHeightInfo: { unit: ExtUnit; height: number }[] = [];\n\n for (const unit of units) {\n const proportion = proportionOfUnitInDomain(\n unit,\n domain.t_age,\n domain.b_age,\n );\n const height = getApproximateHeight(unit, heightMethod);\n if (height != null) {\n unitHeightInfo.push({ unit, height: height * proportion });\n }\n }\n\n let thisHeight = 0;\n if (unitHeightInfo.length === 0) {\n thisHeight = defaultHeight; // Default height if no units with height info\n } else {\n // Normalize weights (take the mean)\n\n const meanHeight =\n unitHeightInfo.reduce((sum, d) => sum + d.height, 0) /\n unitHeightInfo.length;\n\n if (meanHeight == 0) {\n thisHeight = defaultHeight; // Arbitrary height for zero-height intervals\n } else if (meanHeight < minHeight) {\n thisHeight = minHeight; // Minimum height\n } else {\n thisHeight = meanHeight;\n }\n }\n\n lastHeight += thisHeight;\n surfaceHeights.push(lastHeight);\n ageDomain.push(domain.b_age);\n }\n\n // Build a piecewise linear scale mapping age to pixel height\n const pixelRange = surfaceHeights.map((h) => h * pixelScale);\n\n const scale = scaleLinear().domain(ageDomain).range(pixelRange);\n\n const heightDomain = surfaceHeights.map((h) => lastHeight - h);\n\n const heightScale = scaleLinear().domain(heightDomain).range(pixelRange);\n\n const domain: [number, number] = [\n ageDomain[ageDomain.length - 1],\n ageDomain[0],\n ];\n\n return {\n scale,\n pixelScale: null, // pixels per unit\n domain,\n pixelHeight: Math.abs(pixelRange[pixelRange.length - 1] - pixelRange[0]),\n heightScale,\n };\n}\n\nexport function buildScaleFromSurfacesSimple(\n surfaces: BaseSurface[],\n options: HybridScaleOptions = {},\n): PackageScaleInfo {\n /** Build a variable age scale that places age surfaces equally far apart in height space.\n * It is presumed that gaps are already removed from the unit set provided.\n * */\n\n const { pixelScale = 30 } = options;\n\n const domain: [number, number] = [\n surfaces[surfaces.length - 1].age,\n surfaces[0].age,\n ];\n // Compute the height in pixels for each surface\n\n const surfaceHeights = surfaces.map((surface, i) => {\n return i * pixelScale;\n });\n\n // Build a piecewise linear scale mapping age to pixel height\n const ageDomain = surfaces.map((s) => s.age);\n const pixelRange = surfaceHeights;\n\n const scale = scaleLinear().domain(ageDomain).range(pixelRange);\n\n return {\n scale,\n pixelScale: null, // pixels per unit\n domain,\n pixelHeight: Math.abs(pixelRange[pixelRange.length - 1] - pixelRange[0]),\n };\n}\n"],"names":[],"version":3,"file":"column-views.70164236.js.map"}