@macrostrat/column-views 2.2.2 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/esm/{column-views.b0e6c0b3.js → column-views.04636815.js} +3 -3
  3. package/dist/esm/{column-views.b0e6c0b3.js.map → column-views.04636815.js.map} +1 -1
  4. package/dist/esm/{column-views.54f8b909.js → column-views.052498a6.js} +37 -4
  5. package/dist/esm/column-views.052498a6.js.map +1 -0
  6. package/dist/esm/{column-views.5456a1ee.js → column-views.0da4503a.js} +2 -2
  7. package/dist/esm/{column-views.5456a1ee.js.map → column-views.0da4503a.js.map} +1 -1
  8. package/dist/esm/{column-views.ee525e88.js → column-views.107b47b4.js} +8 -8
  9. package/dist/esm/{column-views.ee525e88.js.map → column-views.107b47b4.js.map} +1 -1
  10. package/dist/esm/column-views.17a70358.js +16 -0
  11. package/dist/esm/column-views.17a70358.js.map +1 -0
  12. package/dist/esm/{column-views.073c42da.js → column-views.1b5bf0c6.js} +3 -3
  13. package/dist/esm/{column-views.073c42da.js.map → column-views.1b5bf0c6.js.map} +1 -1
  14. package/dist/esm/{column-views.52ad973a.js → column-views.2708e176.js} +8 -8
  15. package/dist/esm/column-views.2708e176.js.map +1 -0
  16. package/dist/esm/{column-views.88d63dd0.js → column-views.275ba52b.js} +3 -3
  17. package/dist/esm/{column-views.88d63dd0.js.map → column-views.275ba52b.js.map} +1 -1
  18. package/dist/esm/{column-views.7c95c3d7.js → column-views.2bac03a2.js} +2 -2
  19. package/dist/esm/{column-views.7c95c3d7.js.map → column-views.2bac03a2.js.map} +1 -1
  20. package/dist/esm/column-views.2c45a7b5.js.map +1 -1
  21. package/dist/esm/column-views.322790f3.js +138 -0
  22. package/dist/esm/column-views.322790f3.js.map +1 -0
  23. package/dist/esm/{column-views.6698b95a.js → column-views.343fc926.js} +9 -18
  24. package/dist/esm/column-views.343fc926.js.map +1 -0
  25. package/dist/esm/{column-views.aeb61926.js → column-views.3d3e00be.js} +2 -2
  26. package/dist/esm/{column-views.aeb61926.js.map → column-views.3d3e00be.js.map} +1 -1
  27. package/dist/esm/{column-views.7d69838d.js → column-views.40094dd9.js} +3 -3
  28. package/dist/esm/{column-views.7d69838d.js.map → column-views.40094dd9.js.map} +1 -1
  29. package/dist/esm/{column-views.d2214a99.js → column-views.44373a90.js} +8 -7
  30. package/dist/esm/column-views.44373a90.js.map +1 -0
  31. package/dist/esm/column-views.479f68bd.js +152 -0
  32. package/dist/esm/column-views.479f68bd.js.map +1 -0
  33. package/dist/esm/{column-views.ad080c0e.js → column-views.488f24b6.js} +2 -2
  34. package/dist/esm/{column-views.ad080c0e.js.map → column-views.488f24b6.js.map} +1 -1
  35. package/dist/esm/{column-views.abf6aedd.js → column-views.4b259f9e.js} +2 -2
  36. package/dist/esm/{column-views.abf6aedd.js.map → column-views.4b259f9e.js.map} +1 -1
  37. package/dist/esm/{column-views.1151416d.css → column-views.54c1f382.css} +6 -5
  38. package/dist/esm/column-views.54c1f382.css.map +1 -0
  39. package/dist/esm/{column-views.729a6728.js → column-views.565b193a.js} +2 -2
  40. package/dist/esm/{column-views.729a6728.js.map → column-views.565b193a.js.map} +1 -1
  41. package/dist/esm/{column-views.058c0083.js → column-views.5ca2b219.js} +5 -5
  42. package/dist/esm/{column-views.058c0083.js.map → column-views.5ca2b219.js.map} +1 -1
  43. package/dist/esm/{column-views.218e8f5d.js → column-views.5eb4e6ff.js} +4 -4
  44. package/dist/esm/{column-views.218e8f5d.js.map → column-views.5eb4e6ff.js.map} +1 -1
  45. package/dist/esm/{column-views.11ae78f7.js → column-views.5fff0716.js} +3 -3
  46. package/dist/esm/{column-views.11ae78f7.js.map → column-views.5fff0716.js.map} +1 -1
  47. package/dist/esm/{column-views.05586d1f.js → column-views.60e97132.js} +2 -4
  48. package/dist/esm/column-views.60e97132.js.map +1 -0
  49. package/dist/esm/{column-views.75e5aebe.js → column-views.63d40878.js} +4 -4
  50. package/dist/esm/{column-views.75e5aebe.js.map → column-views.63d40878.js.map} +1 -1
  51. package/dist/esm/{column-views.d6d6df77.js → column-views.6c9e5069.js} +40 -62
  52. package/dist/esm/column-views.6c9e5069.js.map +1 -0
  53. package/dist/esm/column-views.6df65dab.js +9 -0
  54. package/dist/esm/column-views.6df65dab.js.map +1 -0
  55. package/dist/esm/{column-views.403a7b48.css → column-views.6f9511d1.css} +2 -1
  56. package/dist/esm/column-views.6f9511d1.css.map +1 -0
  57. package/dist/esm/column-views.7fa0d026.js +62 -0
  58. package/dist/esm/column-views.7fa0d026.js.map +1 -0
  59. package/dist/esm/{column-views.3a7179c4.js → column-views.82eb5026.js} +12 -7
  60. package/dist/esm/column-views.82eb5026.js.map +1 -0
  61. package/dist/esm/{column-views.9dd25b5b.js → column-views.92575b87.js} +3 -3
  62. package/dist/esm/column-views.92575b87.js.map +1 -0
  63. package/dist/esm/{column-views.833c2b74.js → column-views.9d51a5ab.js} +3 -3
  64. package/dist/esm/{column-views.833c2b74.js.map → column-views.9d51a5ab.js.map} +1 -1
  65. package/dist/esm/{column-views.817752b6.js → column-views.9ffc089b.js} +3 -3
  66. package/dist/esm/{column-views.817752b6.js.map → column-views.9ffc089b.js.map} +1 -1
  67. package/dist/esm/{column-views.70164236.js → column-views.aa9ede4d.js} +2 -2
  68. package/dist/esm/{column-views.70164236.js.map → column-views.aa9ede4d.js.map} +1 -1
  69. package/dist/esm/{column-views.6d63971b.js → column-views.ad2fe46c.js} +2 -2
  70. package/dist/esm/{column-views.6d63971b.js.map → column-views.ad2fe46c.js.map} +1 -1
  71. package/dist/esm/{column-views.7b4a1f15.js → column-views.afe0bb48.js} +5 -5
  72. package/dist/esm/{column-views.7b4a1f15.js.map → column-views.afe0bb48.js.map} +1 -1
  73. package/dist/esm/{column-views.aecf25bc.js → column-views.b4e1236d.js} +2 -2
  74. package/dist/esm/{column-views.aecf25bc.js.map → column-views.b4e1236d.js.map} +1 -1
  75. package/dist/esm/{column-views.6ce8cb61.js → column-views.c149f7a5.js} +3 -3
  76. package/dist/esm/{column-views.6ce8cb61.js.map → column-views.c149f7a5.js.map} +1 -1
  77. package/dist/esm/{column-views.b7016f82.css → column-views.cb6fc808.css} +10 -10
  78. package/dist/esm/column-views.cb6fc808.css.map +1 -0
  79. package/dist/esm/{column-views.35efe006.js → column-views.ce3a3ac8.js} +2 -2
  80. package/dist/esm/{column-views.35efe006.js.map → column-views.ce3a3ac8.js.map} +1 -1
  81. package/dist/esm/{column-views.77e22590.js → column-views.d1b49f5c.js} +2 -2
  82. package/dist/esm/{column-views.77e22590.js.map → column-views.d1b49f5c.js.map} +1 -1
  83. package/dist/esm/{column-views.faa4e06d.js → column-views.d524075b.js} +4 -4
  84. package/dist/esm/{column-views.faa4e06d.js.map → column-views.d524075b.js.map} +1 -1
  85. package/dist/esm/column-views.d5e788e8.js +31 -0
  86. package/dist/esm/column-views.d5e788e8.js.map +1 -0
  87. package/dist/esm/{column-views.30950997.js → column-views.d6c0b7bc.js} +2 -2
  88. package/dist/esm/{column-views.30950997.js.map → column-views.d6c0b7bc.js.map} +1 -1
  89. package/dist/esm/{column-views.44d3797a.js → column-views.dc195174.js} +2 -2
  90. package/dist/esm/{column-views.44d3797a.js.map → column-views.dc195174.js.map} +1 -1
  91. package/dist/esm/column-views.de433f18.js +139 -0
  92. package/dist/esm/column-views.de433f18.js.map +1 -0
  93. package/dist/esm/{column-views.ef88c46c.js → column-views.e075af15.js} +2 -2
  94. package/dist/esm/{column-views.ef88c46c.js.map → column-views.e075af15.js.map} +1 -1
  95. package/dist/esm/{column-views.7faf00ed.js → column-views.f7cdf6be.js} +3 -3
  96. package/dist/esm/{column-views.7faf00ed.js.map → column-views.f7cdf6be.js.map} +1 -1
  97. package/dist/esm/{column-views.66ccfc44.js → column-views.faa7e52e.js} +3 -3
  98. package/dist/esm/{column-views.66ccfc44.js.map → column-views.faa7e52e.js.map} +1 -1
  99. package/dist/esm/column-views.fba36cbb.js +13 -0
  100. package/dist/esm/{column-views.43beafa3.js.map → column-views.fba36cbb.js.map} +1 -1
  101. package/dist/esm/index.d.ts +40 -19
  102. package/dist/esm/index.d.ts.map +1 -1
  103. package/dist/esm/index.js +12 -12
  104. package/dist/node/column-views.012fa10c.js +2 -0
  105. package/dist/node/column-views.012fa10c.js.map +1 -0
  106. package/dist/node/{column-views.edb4ba54.js → column-views.021a6961.js} +2 -2
  107. package/dist/node/{column-views.edb4ba54.js.map → column-views.021a6961.js.map} +1 -1
  108. package/dist/node/{column-views.a19be00f.js → column-views.08bef1f6.js} +2 -2
  109. package/dist/node/{column-views.a19be00f.js.map → column-views.08bef1f6.js.map} +1 -1
  110. package/dist/node/{column-views.ae22e8b1.js → column-views.0f401891.js} +2 -2
  111. package/dist/node/{column-views.ae22e8b1.js.map → column-views.0f401891.js.map} +1 -1
  112. package/dist/node/column-views.1d064426.js +2 -0
  113. package/dist/node/column-views.1d064426.js.map +1 -0
  114. package/dist/node/{column-views.ae54d3e1.js → column-views.2577dec0.js} +2 -2
  115. package/dist/node/{column-views.ae54d3e1.js.map → column-views.2577dec0.js.map} +1 -1
  116. package/dist/node/{column-views.1ac9e2ed.js → column-views.2fe8feb9.js} +2 -2
  117. package/dist/node/{column-views.1ac9e2ed.js.map → column-views.2fe8feb9.js.map} +1 -1
  118. package/dist/node/column-views.3a079e34.css +2 -0
  119. package/dist/node/column-views.3a079e34.css.map +1 -0
  120. package/dist/node/{column-views.a281d5bb.js → column-views.42bc66a8.js} +2 -2
  121. package/dist/node/{column-views.a281d5bb.js.map → column-views.42bc66a8.js.map} +1 -1
  122. package/dist/node/{column-views.4ce5f5e4.js → column-views.465e593b.js} +2 -2
  123. package/dist/node/{column-views.4ce5f5e4.js.map → column-views.465e593b.js.map} +1 -1
  124. package/dist/node/{column-views.e1813308.js → column-views.46efb749.js} +2 -2
  125. package/dist/node/{column-views.e1813308.js.map → column-views.46efb749.js.map} +1 -1
  126. package/dist/node/{column-views.61dc64bc.js → column-views.47440961.js} +2 -2
  127. package/dist/node/{column-views.61dc64bc.js.map → column-views.47440961.js.map} +1 -1
  128. package/dist/node/{column-views.38835c99.js → column-views.5559de6a.js} +2 -2
  129. package/dist/node/{column-views.38835c99.js.map → column-views.5559de6a.js.map} +1 -1
  130. package/dist/node/{column-views.52cc4dd0.js → column-views.56f88b8c.js} +2 -2
  131. package/dist/node/{column-views.52cc4dd0.js.map → column-views.56f88b8c.js.map} +1 -1
  132. package/dist/node/{column-views.0b3a384e.js → column-views.5a9331a9.js} +2 -2
  133. package/dist/node/{column-views.0b3a384e.js.map → column-views.5a9331a9.js.map} +1 -1
  134. package/dist/node/column-views.5cb51833.js +2 -0
  135. package/dist/node/column-views.5cb51833.js.map +1 -0
  136. package/dist/node/column-views.5fd6e11a.js +2 -0
  137. package/dist/node/column-views.5fd6e11a.js.map +1 -0
  138. package/dist/node/column-views.672b683c.js +2 -0
  139. package/dist/node/column-views.672b683c.js.map +1 -0
  140. package/dist/node/{column-views.a08b0c9f.js → column-views.6c7f9245.js} +2 -2
  141. package/dist/node/{column-views.a08b0c9f.js.map → column-views.6c7f9245.js.map} +1 -1
  142. package/dist/node/{column-views.67fed1f5.js → column-views.75456275.js} +2 -2
  143. package/dist/node/{column-views.67fed1f5.js.map → column-views.75456275.js.map} +1 -1
  144. package/dist/node/column-views.75ba0464.css +2 -0
  145. package/dist/node/column-views.75ba0464.css.map +1 -0
  146. package/dist/node/{column-views.21a73236.js → column-views.7c322202.js} +2 -2
  147. package/dist/node/{column-views.21a73236.js.map → column-views.7c322202.js.map} +1 -1
  148. package/dist/node/column-views.7cc1a14f.js +2 -0
  149. package/dist/node/column-views.7cc1a14f.js.map +1 -0
  150. package/dist/node/{column-views.7faaf6c8.js → column-views.8e846c57.js} +2 -2
  151. package/dist/node/{column-views.7faaf6c8.js.map → column-views.8e846c57.js.map} +1 -1
  152. package/dist/node/{column-views.003348f6.js → column-views.8ee8469d.js} +2 -2
  153. package/dist/node/{column-views.003348f6.js.map → column-views.8ee8469d.js.map} +1 -1
  154. package/dist/node/{column-views.420b60d2.js → column-views.93bde6c1.js} +2 -2
  155. package/dist/node/{column-views.420b60d2.js.map → column-views.93bde6c1.js.map} +1 -1
  156. package/dist/node/{column-views.f2ee436e.js → column-views.a14f0134.js} +2 -2
  157. package/dist/node/{column-views.f2ee436e.js.map → column-views.a14f0134.js.map} +1 -1
  158. package/dist/node/column-views.a230263f.js +2 -0
  159. package/dist/node/column-views.a230263f.js.map +1 -0
  160. package/dist/node/{column-views.aef76eee.js → column-views.a596b1f5.js} +2 -2
  161. package/dist/node/{column-views.aef76eee.js.map → column-views.a596b1f5.js.map} +1 -1
  162. package/dist/node/column-views.af480651.js +2 -0
  163. package/dist/node/column-views.af480651.js.map +1 -0
  164. package/dist/node/column-views.b103acbc.js +2 -0
  165. package/dist/node/column-views.b103acbc.js.map +1 -0
  166. package/dist/node/{column-views.60b5663d.js → column-views.b40c1b9c.js} +2 -2
  167. package/dist/node/{column-views.60b5663d.js.map → column-views.b40c1b9c.js.map} +1 -1
  168. package/dist/node/column-views.b6e86cf0.js +2 -0
  169. package/dist/node/column-views.b6e86cf0.js.map +1 -0
  170. package/dist/node/{column-views.22c2d45b.js → column-views.c007152b.js} +2 -2
  171. package/dist/node/{column-views.22c2d45b.js.map → column-views.c007152b.js.map} +1 -1
  172. package/dist/node/{column-views.b6943236.js → column-views.c921fa1a.js} +2 -2
  173. package/dist/node/{column-views.b6943236.js.map → column-views.c921fa1a.js.map} +1 -1
  174. package/dist/node/{column-views.05cfc627.js → column-views.c9880a4d.js} +2 -2
  175. package/dist/node/{column-views.05cfc627.js.map → column-views.c9880a4d.js.map} +1 -1
  176. package/dist/node/column-views.ccfb9afb.css +2 -0
  177. package/dist/node/column-views.ccfb9afb.css.map +1 -0
  178. package/dist/node/{column-views.bde2dfa8.js → column-views.cd54f1b1.js} +2 -2
  179. package/dist/node/{column-views.bde2dfa8.js.map → column-views.cd54f1b1.js.map} +1 -1
  180. package/dist/node/{column-views.db47fe3c.js → column-views.d77d260b.js} +2 -2
  181. package/dist/node/{column-views.db47fe3c.js.map → column-views.d77d260b.js.map} +1 -1
  182. package/dist/node/{column-views.105c28fa.js → column-views.d818b387.js} +2 -2
  183. package/dist/node/{column-views.105c28fa.js.map → column-views.d818b387.js.map} +1 -1
  184. package/dist/node/{column-views.2d00d842.js → column-views.d8821a96.js} +2 -2
  185. package/dist/node/{column-views.2d00d842.js.map → column-views.d8821a96.js.map} +1 -1
  186. package/dist/node/column-views.dbb4a46b.js +2 -0
  187. package/dist/node/column-views.dbb4a46b.js.map +1 -0
  188. package/dist/node/{column-views.b12f8c81.js → column-views.e264a767.js} +2 -2
  189. package/dist/node/{column-views.b12f8c81.js.map → column-views.e264a767.js.map} +1 -1
  190. package/dist/node/column-views.e93b3bdb.js +2 -0
  191. package/dist/node/column-views.e93b3bdb.js.map +1 -0
  192. package/dist/node/{column-views.3913cd0f.js → column-views.ec691859.js} +2 -2
  193. package/dist/node/{column-views.3913cd0f.js.map → column-views.ec691859.js.map} +1 -1
  194. package/dist/node/column-views.ec7cc7cc.js +2 -0
  195. package/dist/node/column-views.ec7cc7cc.js.map +1 -0
  196. package/dist/node/{column-views.aae09aca.js → column-views.eecdc727.js} +2 -2
  197. package/dist/node/{column-views.aae09aca.js.map → column-views.eecdc727.js.map} +1 -1
  198. package/dist/node/{column-views.d08e4328.js → column-views.f577d065.js} +2 -2
  199. package/dist/node/{column-views.d08e4328.js.map → column-views.f577d065.js.map} +1 -1
  200. package/dist/node/column-views.fac4baff.js +2 -0
  201. package/dist/node/column-views.fac4baff.js.map +1 -0
  202. package/dist/node/index.js +1 -1
  203. package/dist/node/index.js.map +1 -1
  204. package/package.json +2 -2
  205. package/src/age-axis.ts +1 -1
  206. package/src/column.ts +4 -1
  207. package/src/correlation-chart/stories/correlation-chart.stories.ts +1 -1
  208. package/src/facets/detrital-zircon/index.module.sass +2 -3
  209. package/src/facets/detrital-zircon/index.ts +81 -11
  210. package/src/facets/detrital-zircon/provider.ts +1 -1
  211. package/src/facets/fossils/index.ts +145 -215
  212. package/src/facets/fossils/provider.ts +18 -25
  213. package/src/facets/fossils/taxon-ranges.ts +220 -0
  214. package/src/facets/index.ts +0 -1
  215. package/src/facets/{base-sample-column.module.sass → measurements/base.module.sass} +1 -0
  216. package/src/facets/measurements/base.ts +215 -0
  217. package/src/facets/measurements/index.ts +2 -38
  218. package/src/facets/measurements/sgp.ts +91 -0
  219. package/src/notes.ts +6 -3
  220. package/src/prepare-units/index.ts +8 -2
  221. package/src/prepare-units/utils.ts +55 -9
  222. package/dist/esm/column-views.05586d1f.js.map +0 -1
  223. package/dist/esm/column-views.1151416d.css.map +0 -1
  224. package/dist/esm/column-views.1e579112.js +0 -92
  225. package/dist/esm/column-views.1e579112.js.map +0 -1
  226. package/dist/esm/column-views.3a7179c4.js.map +0 -1
  227. package/dist/esm/column-views.403a7b48.css.map +0 -1
  228. package/dist/esm/column-views.43beafa3.js +0 -15
  229. package/dist/esm/column-views.52ad973a.js.map +0 -1
  230. package/dist/esm/column-views.54f8b909.js.map +0 -1
  231. package/dist/esm/column-views.6698b95a.js.map +0 -1
  232. package/dist/esm/column-views.6e7082db.js +0 -16
  233. package/dist/esm/column-views.6e7082db.js.map +0 -1
  234. package/dist/esm/column-views.7243e77d.js +0 -37
  235. package/dist/esm/column-views.7243e77d.js.map +0 -1
  236. package/dist/esm/column-views.76a220c4.js +0 -95
  237. package/dist/esm/column-views.76a220c4.js.map +0 -1
  238. package/dist/esm/column-views.9dd25b5b.js.map +0 -1
  239. package/dist/esm/column-views.b7016f82.css.map +0 -1
  240. package/dist/esm/column-views.d2214a99.js.map +0 -1
  241. package/dist/esm/column-views.d6d6df77.js.map +0 -1
  242. package/dist/esm/column-views.ea4ebbb7.js +0 -31
  243. package/dist/esm/column-views.ea4ebbb7.js.map +0 -1
  244. package/dist/node/column-views.16f336ee.js +0 -2
  245. package/dist/node/column-views.16f336ee.js.map +0 -1
  246. package/dist/node/column-views.1c567bfd.js +0 -2
  247. package/dist/node/column-views.1c567bfd.js.map +0 -1
  248. package/dist/node/column-views.28609db2.css +0 -2
  249. package/dist/node/column-views.28609db2.css.map +0 -1
  250. package/dist/node/column-views.2901b649.js +0 -2
  251. package/dist/node/column-views.2901b649.js.map +0 -1
  252. package/dist/node/column-views.29eb25bd.css +0 -2
  253. package/dist/node/column-views.29eb25bd.css.map +0 -1
  254. package/dist/node/column-views.39c21f22.js +0 -2
  255. package/dist/node/column-views.39c21f22.js.map +0 -1
  256. package/dist/node/column-views.573cb29d.js +0 -2
  257. package/dist/node/column-views.573cb29d.js.map +0 -1
  258. package/dist/node/column-views.5f3b0b04.js +0 -2
  259. package/dist/node/column-views.5f3b0b04.js.map +0 -1
  260. package/dist/node/column-views.77ace3a2.js +0 -2
  261. package/dist/node/column-views.77ace3a2.js.map +0 -1
  262. package/dist/node/column-views.8f54691f.js +0 -2
  263. package/dist/node/column-views.8f54691f.js.map +0 -1
  264. package/dist/node/column-views.a16cd1f2.js +0 -2
  265. package/dist/node/column-views.a16cd1f2.js.map +0 -1
  266. package/dist/node/column-views.a9576bac.js +0 -2
  267. package/dist/node/column-views.a9576bac.js.map +0 -1
  268. package/dist/node/column-views.c3c15cc2.js +0 -2
  269. package/dist/node/column-views.c3c15cc2.js.map +0 -1
  270. package/dist/node/column-views.cd7b223b.css +0 -2
  271. package/dist/node/column-views.cd7b223b.css.map +0 -1
  272. package/dist/node/column-views.f6ac1161.js +0 -2
  273. package/dist/node/column-views.f6ac1161.js.map +0 -1
  274. package/src/facets/base-sample-column.ts +0 -114
  275. package/src/facets/measurements/provider.ts +0 -80
  276. /package/src/facets/fossils/{index.module.sass → taxon-ranges.module.sass} +0 -0
@@ -1 +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"}
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.aa9ede4d.js.map"}
@@ -1,4 +1,4 @@
1
- import {useMacrostratColumns as $774a5efa27d1c77b$export$81eaae0b474404fd} from "./column-views.ef88c46c.js";
1
+ import {useMacrostratColumns as $774a5efa27d1c77b$export$81eaae0b474404fd} from "./column-views.e075af15.js";
2
2
  import {create as $i7Wch$create, useStore as $i7Wch$useStore} from "zustand";
3
3
  import {lineIntersect as $i7Wch$lineIntersect} from "@turf/line-intersect";
4
4
  import $i7Wch$turfdistance from "@turf/distance";
@@ -115,4 +115,4 @@ function $74e211dc185c20b4$var$sorted(data, accessor) {
115
115
 
116
116
 
117
117
  export {$74e211dc185c20b4$export$72ffe141ebf87ef1 as ColumnCorrelationProvider, $74e211dc185c20b4$export$21398703d3a9bb4d as useCorrelationMapStore};
118
- //# sourceMappingURL=column-views.6d63971b.js.map
118
+ //# sourceMappingURL=column-views.ad2fe46c.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/column-views/src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"../../data-provider/base\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n return columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":[],"version":3,"file":"column-views.6d63971b.js.map"}
1
+ {"mappings":"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","sources":["packages/column-views/src/maps/column-correlation/state.ts"],"sourcesContent":["import { LineString, Point } from \"geojson\";\nimport { create, StoreApi, useStore } from \"zustand\";\nimport type { ColumnGeoJSONRecord } from \"@macrostrat/api-types\";\n// Turf intersection\nimport { lineIntersect } from \"@turf/line-intersect\";\nimport distance from \"@turf/distance\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { centroid } from \"@turf/centroid\";\nimport {\n createContext,\n useState,\n useContext,\n ReactNode,\n useEffect,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { createComputed } from \"zustand-computed\";\nimport { useMacrostratColumns } from \"../../data-provider/base\";\n\nexport interface CorrelationMapInput {\n columns: ColumnGeoJSONRecord[];\n focusedLine: LineString | null;\n}\n\nexport interface CorrelationMapStore extends CorrelationMapInput {\n onClickMap: (event: mapboxgl.MapMouseEvent, point: Point) => void;\n}\n\nexport interface CorrelationProviderProps extends CorrelationMapInput {\n projectID?: number;\n inProcess?: boolean;\n columns: ColumnGeoJSONRecord[] | null;\n children: ReactNode;\n onSelectColumns?: (\n columns: FocusedColumnGeoJSONRecord[],\n line: LineString | null,\n ) => void;\n}\n\nconst CorrelationStoreContext =\n createContext<StoreApi<CorrelationMapStore> | null>(null);\n\ntype ComputedStore = {\n focusedColumns: FocusedColumnGeoJSONRecord[];\n};\n\n/** A computed store that will automatically update when the state changes */\nconst computed = createComputed((state: CorrelationMapStore): ComputedStore => {\n return {\n // We compute the focused columns based on columns and focusedLine\n focusedColumns: buildCorrelationColumns(state.columns, state.focusedLine),\n };\n}) as any;\n\nexport function ColumnCorrelationProvider({\n children,\n columns,\n projectID,\n inProcess,\n focusedLine,\n onSelectColumns,\n}: CorrelationProviderProps) {\n const [store] = useState(() => {\n return create<CorrelationMapStore & ComputedStore>(\n computed((set, get): CorrelationMapStore => {\n return {\n focusedLine,\n columns: null,\n onClickMap(event: mapboxgl.MapMouseEvent, point: Point) {\n const state = get();\n // Check if shift key is pressed\n const shiftKeyPressed = event.originalEvent.shiftKey;\n let existingCoords = state.focusedLine?.coordinates ?? [];\n\n if (existingCoords.length >= 2 && !shiftKeyPressed) {\n // Reset the line to zero length\n existingCoords = [];\n }\n set({\n focusedLine: {\n type: \"LineString\",\n coordinates: [...existingCoords, point.coordinates],\n },\n });\n },\n };\n }),\n );\n });\n\n // Set up the store\n /** TODO: move the fetching of all columns to within the map */\n const _columns = useMacrostratColumns(projectID, inProcess);\n useEffect(() => {\n if (_columns != null) {\n store.setState({ columns: _columns });\n }\n }, [_columns]);\n\n // Kind of an awkward way to do this but we need to allow the selector to run\n const focusedColumns = useStore(store, (state) => state.focusedColumns);\n const _focusedLine = useStore(store, (state) => state.focusedLine);\n\n useEffect(() => {\n onSelectColumns?.(focusedColumns, _focusedLine);\n }, [focusedColumns, _focusedLine]);\n\n return h(CorrelationStoreContext.Provider, { value: store }, children);\n}\n\nexport function useCorrelationMapStore(\n selector: (state: CorrelationMapStore & ComputedStore) => any,\n) {\n const storeApi = useContext(CorrelationStoreContext);\n if (storeApi == null) {\n throw new Error(\"Missing CorrelationMapProvider\");\n }\n return useStore(storeApi, selector);\n}\n\nfunction buildCorrelationColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n if (columns == null || line == null || line.coordinates.length < 2) {\n return [];\n }\n return orderColumnsByDistance(\n computeIntersectingColumns(columns, line),\n line,\n );\n}\n\nfunction computeIntersectingColumns(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): ColumnGeoJSONRecord[] {\n if (columns == null || line == null) {\n return [];\n }\n\n return columns.filter((col) => {\n const poly = col.geometry;\n\n // Some in-process datasets seem to have null geometries\n if (poly == null) return false;\n if (poly.type != \"Polygon\" && poly.type != \"MultiPolygon\") return false;\n\n const intersection = lineIntersect(line, poly);\n return intersection.features.length > 0;\n });\n}\n\ninterface FocusedColumnGeoJSONRecord extends ColumnGeoJSONRecord {\n properties: {\n centroid: Point;\n nearestPointOnLine: Point;\n distanceAlongLine: number;\n } & ColumnGeoJSONRecord[\"properties\"];\n}\n\nfunction orderColumnsByDistance(\n columns: ColumnGeoJSONRecord[],\n line: LineString,\n): FocusedColumnGeoJSONRecord[] {\n const centroids = columns.map((col) => centroid(col.geometry));\n const projectedPoints = centroids.map((point) =>\n nearestPointOnLine(line, point),\n );\n const distances = projectedPoints.map((point) =>\n distance(point.geometry.coordinates, line.coordinates[0]),\n );\n\n let newColumns = columns.map((col, i) => {\n return {\n ...col,\n properties: {\n ...col.properties,\n centroid: centroids[i],\n nearestPointOnLine: projectedPoints[i],\n distanceAlongLine: distances[i],\n },\n };\n });\n\n return sorted(newColumns, (d) => d.properties.distanceAlongLine);\n}\n\nfunction sorted(data, accessor: (d) => number) {\n return data.sort((a, b) => accessor(a) - accessor(b));\n}\n"],"names":[],"version":3,"file":"column-views.ad2fe46c.js.map"}
@@ -1,9 +1,9 @@
1
- import {CompositeUnitsColumn as $8c8238faa5cde49c$export$a6684360fef0406e, LabelTrackerProvider as $8c8238faa5cde49c$export$e4e89ab6c86ac513, SectionLabelsColumn as $8c8238faa5cde49c$export$13984e34afdbb040} from "./column-views.75e5aebe.js";
1
+ import {CompositeUnitsColumn as $8c8238faa5cde49c$export$a6684360fef0406e, LabelTrackerProvider as $8c8238faa5cde49c$export$e4e89ab6c86ac513, SectionLabelsColumn as $8c8238faa5cde49c$export$13984e34afdbb040} from "./column-views.63d40878.js";
2
2
  import $7zu8d$columnviewscc733361js from "./column-views.cc733361.js";
3
3
  import "./column-views.e93478c3.css";
4
- import {MacrostratColumnProvider as $774a5efa27d1c77b$export$9e42f9b6e0d67c7d, useMacrostratBaseURL as $774a5efa27d1c77b$export$33b1392d23dde04} from "./column-views.ef88c46c.js";
5
- import {useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d, useMacrostratUnits as $d5074f164411387e$export$6fb40844db555b2} from "./column-views.abf6aedd.js";
6
- import {Duration as $448b24baeef3b229$export$3b11bc38611c5941} from "./column-views.218e8f5d.js";
4
+ import {MacrostratColumnProvider as $774a5efa27d1c77b$export$9e42f9b6e0d67c7d, useMacrostratBaseURL as $774a5efa27d1c77b$export$33b1392d23dde04} from "./column-views.e075af15.js";
5
+ import {useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d, useMacrostratUnits as $d5074f164411387e$export$6fb40844db555b2} from "./column-views.4b259f9e.js";
6
+ import {Duration as $448b24baeef3b229$export$3b11bc38611c5941} from "./column-views.5eb4e6ff.js";
7
7
  import {useMemo as $7zu8d$useMemo} from "react";
8
8
  import {useMacrostratIntervals as $7zu8d$useMacrostratIntervals, Timescale as $7zu8d$Timescale, TimescaleOrientation as $7zu8d$TimescaleOrientation} from "@macrostrat/timescale";
9
9
  import {SVG as $7zu8d$SVG, ColumnAxisType as $7zu8d$ColumnAxisType} from "@macrostrat/column-components";
@@ -245,4 +245,4 @@ function $7d0f52717c0de7e1$var$Unconformity({ upperAge: upperAge, lowerAge: lowe
245
245
 
246
246
 
247
247
  export {$7d0f52717c0de7e1$export$38cb0ab5af8f50d7 as SectionsColumn, $7d0f52717c0de7e1$export$e12e53eeee198b99 as UnconformityLabels, $7d0f52717c0de7e1$export$db2df5a73a6fbe10 as CompositeTimescale, $7d0f52717c0de7e1$export$463f46772c64d403 as CompositeTimescaleCore};
248
- //# sourceMappingURL=column-views.7b4a1f15.js.map
248
+ //# sourceMappingURL=column-views.afe0bb48.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/column-views/src/section.ts"],"sourcesContent":["import {\n CompositeUnitsColumn,\n LabelTrackerProvider,\n SectionLabelsColumn,\n} from \"./units\";\nimport { ReactNode, FunctionComponent, useMemo } from \"react\";\nimport {\n Timescale,\n TimescaleOrientation,\n useMacrostratIntervals,\n} from \"@macrostrat/timescale\";\nimport { ColumnAxisType, SVG } from \"@macrostrat/column-components\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./column.module.sass\";\nimport {\n useMacrostratColumnData,\n useMacrostratUnits,\n MacrostratColumnProvider,\n useMacrostratBaseURL,\n} from \"./data-provider\";\nimport { Duration } from \"./unit-details\";\nimport { Value } from \"@macrostrat/data-components\";\nimport type { ExtUnit, PackageScaleLayoutData } from \"./prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface SectionSharedProps {\n unitComponent?: FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n children?: ReactNode;\n showLabelColumn?: boolean;\n axisType?: ColumnAxisType;\n className?: string;\n clipUnits?: boolean;\n maxInternalColumns?: number;\n // Space between sections\n verticalSpacing?: number;\n // Whether to render unconformity labels\n unconformityLabels?: boolean;\n}\n\nexport interface SectionProps extends SectionSharedProps {\n units: ExtUnit[];\n scaleInfo: PackageScaleLayoutData;\n}\n\nexport function SectionsColumn(props: SectionSharedProps) {\n const {\n unconformityLabels = true,\n unitComponent,\n unitComponentProps,\n showLabels = true,\n width = 300,\n columnWidth = 150,\n showLabelColumn = true,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const units = useMacrostratUnits();\n\n // Get a unique key for the column\n const key = units[0]?.col_id;\n\n return h(LabelTrackerProvider, { units, key }, [\n h(SectionUnitsColumn, {\n width: columnWidth,\n unitComponent,\n unitComponentProps,\n showLabels,\n clipUnits,\n maxInternalColumns,\n unconformityLabels,\n }),\n h.if(showLabelColumn)(SectionLabelsColumn, {\n width: width - columnWidth,\n }),\n ]);\n}\n\nfunction SectionUnitsColumn(props: SectionSharedProps) {\n const {\n width,\n showLabels,\n unitComponent,\n unitComponentProps,\n clipUnits,\n maxInternalColumns,\n axisType,\n unconformityLabels = true,\n } = props;\n\n const { sections, totalHeight } = useMacrostratColumnData();\n\n const scaleData: PackageScaleLayoutData[] = sections.map((section) => {\n return section.scaleInfo;\n });\n\n const innerWidth = width - 2;\n\n return h(\"div.section-units-container\", { style: { width } }, [\n h(\n SVG,\n {\n className: \"sections\",\n height: totalHeight,\n innerWidth,\n paddingH: 1,\n },\n sections.map((group) => {\n const { units, scaleInfo, section_id } = group;\n\n const key = `section-${section_id}`;\n return h(\n SectionUnits,\n {\n units,\n scaleInfo,\n key,\n unitComponent,\n unitComponentProps,\n showLabels,\n width: innerWidth,\n clipUnits,\n maxInternalColumns,\n }, // This unconformity is with the section _above_\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width,\n sections: scaleData,\n verbose: false,\n }),\n ]);\n}\n\nfunction SectionUnits(props: SectionProps) {\n // Section with \"squishy\" timescale\n const {\n units,\n scaleInfo,\n unitComponent,\n showLabels = true,\n width = 300,\n unitComponentProps,\n className,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const { domain, pixelScale, pixelHeight, scale } = scaleInfo;\n\n /** Ensure that we can arrange units into the maximum number\n * of columns defined by unitComponentProps, but that we don't\n * use more than necessary.\n */\n const _unitComponentProps = useMemo(() => {\n return {\n ...unitComponentProps,\n nColumns: Math.min(\n maxInternalColumns ?? Math.floor(width / 10),\n unitComponentProps?.nColumns ?? Infinity,\n Math.max(...units.map((d) => d.column)) + 1,\n ),\n //axisType,\n };\n }, [units, unitComponentProps, maxInternalColumns, width]);\n\n const style = {\n \"--section-height\": `${pixelHeight}px`,\n \"--section-width\": `${width}px`,\n };\n\n return h(\n \"g.section\",\n { className, style, transform: `translate(0 ${scaleInfo.offset})` },\n h(\n MacrostratColumnProvider,\n {\n units,\n domain,\n pixelScale, // Actually pixels per myr,\n scale,\n },\n h(CompositeUnitsColumn, {\n width,\n showLabels,\n unitComponent,\n unitComponentProps: _unitComponentProps,\n clipToFrame: clipUnits,\n }),\n ),\n );\n}\n\ninterface CompositeTimescaleProps {\n levels?: [number, number] | number;\n unconformityLabels?: boolean;\n}\n\nexport function CompositeTimescale(props: CompositeTimescaleProps) {\n const { sections } = useMacrostratColumnData();\n const sectionScales = sections.map((section) => {\n return section.scaleInfo;\n });\n\n return h(CompositeTimescaleCore, {\n packages: sectionScales,\n ...props,\n });\n}\n\ntype CompositeTimescaleCoreProps = CompositeTimescaleProps & {\n packages: PackageScaleLayoutData[];\n};\n\nexport function CompositeTimescaleCore(props: CompositeTimescaleCoreProps) {\n const { levels = 3, packages, unconformityLabels = false } = props;\n\n // Use intervals from Macrostrat API\n const baseURL = useMacrostratBaseURL();\n const intervals = useMacrostratIntervals(baseURL);\n\n let _levels: [number, number];\n if (typeof levels === \"number\") {\n // If levels is a number, use the most common starting level\n _levels = [2, Math.max(2 + Math.min(levels, 5) - 1, 1)];\n } else {\n _levels = levels;\n }\n\n const nCols = _levels[1] - _levels[0] + 1;\n\n return h(\"div.timescale-column\", [\n h(\n \"div.timescales\",\n packages.map((group) => {\n const { pixelHeight, paddingTop, key, scale } = group;\n return h(\n \"div.timescale-container\",\n { style: { paddingTop, \"--timescale-level-count\": nCols }, key },\n [\n h(Timescale, {\n orientation: TimescaleOrientation.VERTICAL,\n length: pixelHeight,\n levels: _levels,\n absoluteAgeScale: true,\n showAgeAxis: false,\n scale,\n intervals,\n }),\n ],\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width: \"100%\",\n sections: packages,\n className: \"unconformity-labels\",\n axisType: ColumnAxisType.AGE,\n }),\n ]);\n}\n\nexport function UnconformityLabels(props: {\n width: string | number;\n sections: PackageScaleLayoutData[];\n axisType?: ColumnAxisType;\n className?: string;\n verbose?: boolean;\n}) {\n const { width, sections, className, axisType, verbose } = props;\n\n return h(\n \"div.unconformity-labels\",\n {\n style: {\n width,\n },\n className,\n },\n sections.map((scaleInfo, i) => {\n const lastGroup = sections[i - 1];\n const top = scaleInfo.offset - scaleInfo.paddingTop;\n const upperAge = lastGroup?.domain[0];\n const lowerAge = scaleInfo.domain[1];\n return h(Unconformity, {\n axisType,\n upperAge,\n lowerAge,\n style: {\n width,\n height: scaleInfo.paddingTop,\n top,\n },\n verbose,\n });\n }),\n );\n}\n\nfunction Unconformity({\n upperAge,\n lowerAge,\n style,\n axisType,\n verbose = false,\n}) {\n if (upperAge == null || lowerAge == null) {\n return null;\n }\n\n const ageGap = Math.abs(upperAge - lowerAge);\n\n let maximumFractionDigits = 0;\n\n let className: string = null;\n if (ageGap > 1000) {\n className = \"giga\";\n } else if (ageGap > 100) {\n className = \"mega\";\n } else if (ageGap > 10) {\n className = \"large\";\n } else if (ageGap < 1) {\n className = \"small\";\n maximumFractionDigits = 2;\n } else {\n maximumFractionDigits = 1;\n }\n\n let val: ReactNode;\n if (axisType === ColumnAxisType.DEPTH || axisType === ColumnAxisType.HEIGHT) {\n const _txt = ageGap.toLocaleString(\"en-US\", { maximumFractionDigits });\n val = h(Value, { value: _txt, unit: \"m\" });\n } else {\n val = h(Duration, { value: ageGap, maximumFractionDigits });\n }\n\n let prefix: ReactNode = null;\n if (verbose) {\n prefix = h([\" \", h(\"span.prefix\", \" gap\")]);\n }\n\n return h(\"div.unconformity\", { style, className }, [\n h(\"div.unconformity-inner\", h(\"div.unconformity-text\", [val, prefix])),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.7b4a1f15.js.map"}
1
+ {"mappings":"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","sources":["packages/column-views/src/section.ts"],"sourcesContent":["import {\n CompositeUnitsColumn,\n LabelTrackerProvider,\n SectionLabelsColumn,\n} from \"./units\";\nimport { ReactNode, FunctionComponent, useMemo } from \"react\";\nimport {\n Timescale,\n TimescaleOrientation,\n useMacrostratIntervals,\n} from \"@macrostrat/timescale\";\nimport { ColumnAxisType, SVG } from \"@macrostrat/column-components\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./column.module.sass\";\nimport {\n useMacrostratColumnData,\n useMacrostratUnits,\n MacrostratColumnProvider,\n useMacrostratBaseURL,\n} from \"./data-provider\";\nimport { Duration } from \"./unit-details\";\nimport { Value } from \"@macrostrat/data-components\";\nimport type { ExtUnit, PackageScaleLayoutData } from \"./prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface SectionSharedProps {\n unitComponent?: FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n children?: ReactNode;\n showLabelColumn?: boolean;\n axisType?: ColumnAxisType;\n className?: string;\n clipUnits?: boolean;\n maxInternalColumns?: number;\n // Space between sections\n verticalSpacing?: number;\n // Whether to render unconformity labels\n unconformityLabels?: boolean;\n}\n\nexport interface SectionProps extends SectionSharedProps {\n units: ExtUnit[];\n scaleInfo: PackageScaleLayoutData;\n}\n\nexport function SectionsColumn(props: SectionSharedProps) {\n const {\n unconformityLabels = true,\n unitComponent,\n unitComponentProps,\n showLabels = true,\n width = 300,\n columnWidth = 150,\n showLabelColumn = true,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const units = useMacrostratUnits();\n\n // Get a unique key for the column\n const key = units[0]?.col_id;\n\n return h(LabelTrackerProvider, { units, key }, [\n h(SectionUnitsColumn, {\n width: columnWidth,\n unitComponent,\n unitComponentProps,\n showLabels,\n clipUnits,\n maxInternalColumns,\n unconformityLabels,\n }),\n h.if(showLabelColumn)(SectionLabelsColumn, {\n width: width - columnWidth,\n }),\n ]);\n}\n\nfunction SectionUnitsColumn(props: SectionSharedProps) {\n const {\n width,\n showLabels,\n unitComponent,\n unitComponentProps,\n clipUnits,\n maxInternalColumns,\n axisType,\n unconformityLabels = true,\n } = props;\n\n const { sections, totalHeight } = useMacrostratColumnData();\n\n const scaleData: PackageScaleLayoutData[] = sections.map((section) => {\n return section.scaleInfo;\n });\n\n const innerWidth = width - 2;\n\n return h(\"div.section-units-container\", { style: { width } }, [\n h(\n SVG,\n {\n className: \"sections\",\n height: totalHeight,\n innerWidth,\n paddingH: 1,\n },\n sections.map((group) => {\n const { units, scaleInfo, section_id } = group;\n\n const key = `section-${section_id}`;\n return h(\n SectionUnits,\n {\n units,\n scaleInfo,\n key,\n unitComponent,\n unitComponentProps,\n showLabels,\n width: innerWidth,\n clipUnits,\n maxInternalColumns,\n }, // This unconformity is with the section _above_\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width,\n sections: scaleData,\n verbose: false,\n }),\n ]);\n}\n\nfunction SectionUnits(props: SectionProps) {\n // Section with \"squishy\" timescale\n const {\n units,\n scaleInfo,\n unitComponent,\n showLabels = true,\n width = 300,\n unitComponentProps,\n className,\n clipUnits = true,\n maxInternalColumns,\n } = props;\n\n const { domain, pixelScale, pixelHeight, scale } = scaleInfo;\n\n /** Ensure that we can arrange units into the maximum number\n * of columns defined by unitComponentProps, but that we don't\n * use more than necessary.\n */\n const _unitComponentProps = useMemo(() => {\n return {\n ...unitComponentProps,\n nColumns: Math.min(\n maxInternalColumns ?? Math.floor(width / 10),\n unitComponentProps?.nColumns ?? Infinity,\n Math.max(...units.map((d) => d.column)) + 1,\n ),\n //axisType,\n };\n }, [units, unitComponentProps, maxInternalColumns, width]);\n\n const style = {\n \"--section-height\": `${pixelHeight}px`,\n \"--section-width\": `${width}px`,\n };\n\n return h(\n \"g.section\",\n { className, style, transform: `translate(0 ${scaleInfo.offset})` },\n h(\n MacrostratColumnProvider,\n {\n units,\n domain,\n pixelScale, // Actually pixels per myr,\n scale,\n },\n h(CompositeUnitsColumn, {\n width,\n showLabels,\n unitComponent,\n unitComponentProps: _unitComponentProps,\n clipToFrame: clipUnits,\n }),\n ),\n );\n}\n\ninterface CompositeTimescaleProps {\n levels?: [number, number] | number;\n unconformityLabels?: boolean;\n}\n\nexport function CompositeTimescale(props: CompositeTimescaleProps) {\n const { sections } = useMacrostratColumnData();\n const sectionScales = sections.map((section) => {\n return section.scaleInfo;\n });\n\n return h(CompositeTimescaleCore, {\n packages: sectionScales,\n ...props,\n });\n}\n\ntype CompositeTimescaleCoreProps = CompositeTimescaleProps & {\n packages: PackageScaleLayoutData[];\n};\n\nexport function CompositeTimescaleCore(props: CompositeTimescaleCoreProps) {\n const { levels = 3, packages, unconformityLabels = false } = props;\n\n // Use intervals from Macrostrat API\n const baseURL = useMacrostratBaseURL();\n const intervals = useMacrostratIntervals(baseURL);\n\n let _levels: [number, number];\n if (typeof levels === \"number\") {\n // If levels is a number, use the most common starting level\n _levels = [2, Math.max(2 + Math.min(levels, 5) - 1, 1)];\n } else {\n _levels = levels;\n }\n\n const nCols = _levels[1] - _levels[0] + 1;\n\n return h(\"div.timescale-column\", [\n h(\n \"div.timescales\",\n packages.map((group) => {\n const { pixelHeight, paddingTop, key, scale } = group;\n return h(\n \"div.timescale-container\",\n { style: { paddingTop, \"--timescale-level-count\": nCols }, key },\n [\n h(Timescale, {\n orientation: TimescaleOrientation.VERTICAL,\n length: pixelHeight,\n levels: _levels,\n absoluteAgeScale: true,\n showAgeAxis: false,\n scale,\n intervals,\n }),\n ],\n );\n }),\n ),\n h.if(unconformityLabels)(UnconformityLabels, {\n width: \"100%\",\n sections: packages,\n className: \"unconformity-labels\",\n axisType: ColumnAxisType.AGE,\n }),\n ]);\n}\n\nexport function UnconformityLabels(props: {\n width: string | number;\n sections: PackageScaleLayoutData[];\n axisType?: ColumnAxisType;\n className?: string;\n verbose?: boolean;\n}) {\n const { width, sections, className, axisType, verbose } = props;\n\n return h(\n \"div.unconformity-labels\",\n {\n style: {\n width,\n },\n className,\n },\n sections.map((scaleInfo, i) => {\n const lastGroup = sections[i - 1];\n const top = scaleInfo.offset - scaleInfo.paddingTop;\n const upperAge = lastGroup?.domain[0];\n const lowerAge = scaleInfo.domain[1];\n return h(Unconformity, {\n axisType,\n upperAge,\n lowerAge,\n style: {\n width,\n height: scaleInfo.paddingTop,\n top,\n },\n verbose,\n });\n }),\n );\n}\n\nfunction Unconformity({\n upperAge,\n lowerAge,\n style,\n axisType,\n verbose = false,\n}) {\n if (upperAge == null || lowerAge == null) {\n return null;\n }\n\n const ageGap = Math.abs(upperAge - lowerAge);\n\n let maximumFractionDigits = 0;\n\n let className: string = null;\n if (ageGap > 1000) {\n className = \"giga\";\n } else if (ageGap > 100) {\n className = \"mega\";\n } else if (ageGap > 10) {\n className = \"large\";\n } else if (ageGap < 1) {\n className = \"small\";\n maximumFractionDigits = 2;\n } else {\n maximumFractionDigits = 1;\n }\n\n let val: ReactNode;\n if (axisType === ColumnAxisType.DEPTH || axisType === ColumnAxisType.HEIGHT) {\n const _txt = ageGap.toLocaleString(\"en-US\", { maximumFractionDigits });\n val = h(Value, { value: _txt, unit: \"m\" });\n } else {\n val = h(Duration, { value: ageGap, maximumFractionDigits });\n }\n\n let prefix: ReactNode = null;\n if (verbose) {\n prefix = h([\" \", h(\"span.prefix\", \" gap\")]);\n }\n\n return h(\"div.unconformity\", { style, className }, [\n h(\"div.unconformity-inner\", h(\"div.unconformity-text\", [val, prefix])),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.afe0bb48.js.map"}
@@ -1,4 +1,4 @@
1
- import {createUnitSorter as $b6657fba8924a702$export$ab14c04795685c55, ensureArray as $b6657fba8924a702$export$d0c8ecbd4ed8940c, ensureRealFloat as $b6657fba8924a702$export$97de5b0a6b4e4dac, getUnitHeightRange as $b6657fba8924a702$export$70e712e2ac0237a, unitsOverlap as $b6657fba8924a702$export$f1a15f539858307} from "./column-views.54f8b909.js";
1
+ import {createUnitSorter as $b6657fba8924a702$export$ab14c04795685c55, ensureArray as $b6657fba8924a702$export$d0c8ecbd4ed8940c, ensureRealFloat as $b6657fba8924a702$export$97de5b0a6b4e4dac, getUnitHeightRange as $b6657fba8924a702$export$70e712e2ac0237a, unitsOverlap as $b6657fba8924a702$export$f1a15f539858307} from "./column-views.052498a6.js";
2
2
  import {group as $ailTa$group} from "d3-array";
3
3
  import {ColumnAxisType as $ailTa$ColumnAxisType} from "@macrostrat/column-components";
4
4
  import {compareAgeRanges as $ailTa$compareAgeRanges, AgeRangeRelationship as $ailTa$AgeRangeRelationship} from "@macrostrat/stratigraphy-utils";
@@ -222,4 +222,4 @@ function $663a0cdd08b02256$export$47e05aac3f0b77d4(unit) {
222
222
 
223
223
 
224
224
  export {$663a0cdd08b02256$export$55543e159517d62d as preprocessUnits, $663a0cdd08b02256$export$eeade20e3eee4638 as groupUnitsIntoSectionsBySectionID, $663a0cdd08b02256$export$8093438ec3e4c6fd as getSectionAgeRange, $663a0cdd08b02256$export$483b05c497fd70c6 as getSectionPosRange, $663a0cdd08b02256$export$bb26cdbde9c8c08b as groupUnitsIntoSectionsByOverlap, $663a0cdd08b02256$export$e7bb744b9be37f3d as mergeOverlappingSections, $663a0cdd08b02256$export$47e05aac3f0b77d4 as preprocessSectionUnit};
225
- //# sourceMappingURL=column-views.aecf25bc.js.map
225
+ //# sourceMappingURL=column-views.b4e1236d.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/column-views/src/prepare-units/helpers.ts"],"sourcesContent":["import type { BaseUnit, UnitLong } from \"@macrostrat/api-types\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n createUnitSorter,\n ensureArray,\n ensureRealFloat,\n getUnitHeightRange,\n unitsOverlap,\n} from \"./utils\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport type { ExtUnit, SectionInfo, StratigraphicPackage } from \"./types\";\n\nconst dt = 0.001;\n\nexport function preprocessUnits<T extends UnitLong = UnitLong>(\n section: SectionInfo<T>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit[] {\n /** Preprocess units to add overlapping units and columns. */\n let units = section.units;\n\n let divisions = units.map((...args) => extendDivision(...args, axisType));\n for (let d of divisions) {\n const overlappingUnits = divisions.filter((u) =>\n d.overlappingUnits.includes(u.unit_id),\n );\n\n // Overlapping columns\n const columns = overlappingUnits.map((d) => d.column);\n\n if (columns.includes(d.column)) {\n let col = 0;\n // Go through columns to find a better index\n while (columns.includes(col)) {\n col++;\n }\n d.column = col;\n }\n\n // If unit overlaps the edges of a section, set the clip positions\n const [b_pos, t_pos] = getUnitHeightRange(d, axisType);\n if (axisType == ColumnAxisType.AGE) {\n if (b_pos > section.b_age) {\n d.b_clip_pos = section.b_age;\n }\n if (t_pos < section.t_age) {\n d.t_clip_pos = section.t_age;\n }\n }\n if (axisType == ColumnAxisType.DEPTH) {\n if (b_pos > section.b_pos) {\n d.b_clip_pos = section.b_pos;\n }\n if (t_pos < section.t_pos) {\n d.t_clip_pos = section.t_pos;\n }\n }\n // if (axisType == ColumnAxisType.HEIGHT) {\n // if (b_pos < section.b_pos) {\n // d.b_clip_pos = section.b_pos;\n // }\n // if (t_pos > section.t_pos) {\n // d.t_clip_pos = section.t_pos;\n // }\n // }\n }\n\n return divisions;\n}\n\nfunction extendDivision(\n unit: UnitLong,\n i: number,\n divisions: UnitLong[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit {\n // TODO: make this configurable\n let tolerance = 0.001; // 1 kyr tolerance for age columns\n if (axisType != ColumnAxisType.AGE) {\n tolerance = 0.01; // 1cm tolerance for height/depth columns\n }\n\n const overlappingUnits = divisions.filter(\n (d) =>\n d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType, tolerance),\n );\n const u_pos = getUnitHeightRange(unit, axisType);\n const bottomOverlap = overlappingUnits.some((d) => {\n const d_pos = getUnitHeightRange(d, axisType);\n // Check if the unit is below the current unit\n return d_pos[0] < u_pos[0] + dt;\n });\n let column = 0;\n if (overlappingUnits.length == 1) {\n column = 1;\n }\n\n return {\n ...unit,\n bottomOverlap,\n column,\n overlappingUnits: overlappingUnits.map((d) => d.unit_id),\n };\n}\n\nexport function groupUnitsIntoSectionsBySectionID<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by section_id.\n * This works for large-scale Macrostrat columns, where units are grouped by section_id.\n * */\n let groups = Array.from(group(units, (d) => d.section_id));\n const unitComparator = createUnitSorter(axisType);\n\n const groups1 = groups.map(([section_id, sectionUnits]) => {\n const [b_age, t_age] = getSectionAgeRange(sectionUnits);\n const [b_pos, t_pos] = getSectionPosRange(sectionUnits, axisType);\n\n // sort units by position\n sectionUnits.sort(unitComparator);\n return { section_id, t_age, b_age, b_pos, t_pos, units: sectionUnits };\n });\n // Sort sections by increasing top age, then increasing bottom age.\n // Sections have no relative ordinal position other than age...\n const compareSections = createUnitSorter(axisType) as (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n ) => number;\n groups1.sort(compareSections);\n return groups1;\n}\n\ninterface WorkingSection {\n units: UnitLong[];\n // Position or age\n heightRange?: [number, number];\n}\n\nexport function groupUnitsIntoSectionsByOverlap<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by overlap.\n * This creates \"synthetic\" sections that correspond to packages bound by scale gaps.\n * This is most useful in the height and depth domains, where gaps (e.g., missing core) are\n * common.\n * */\n // Start with each unit as its own \"section\", and progressively merge...\n const sectionList: WorkingSection[] = [];\n for (const unit of units) {\n // Check if the unit overlaps with any existing section\n const heightRange = getUnitHeightRange(unit, axisType);\n let section: WorkingSection | undefined = sectionList.find(\n (s) =>\n compareAgeRanges(heightRange, s.heightRange) !==\n AgeRangeRelationship.Disjoint,\n );\n if (section == null) {\n // No overlap, create a new section\n sectionList.push({\n heightRange,\n units: [unit],\n });\n } else {\n // Overlap, merge the unit into the section\n section.units.push(unit);\n // Update the height range\n if (axisType == ColumnAxisType.DEPTH || axisType == ColumnAxisType.AGE) {\n section.heightRange = [\n Math.max(section.heightRange[0], heightRange[0]),\n Math.min(section.heightRange[1], heightRange[1]),\n ];\n } else {\n section.heightRange = [\n Math.min(section.heightRange[0], heightRange[0]),\n Math.max(section.heightRange[1], heightRange[1]),\n ];\n }\n }\n }\n // We should have a section for each unit, now we can convert to SectionInfo\n // Ages have to be really actually ages, not heights\n\n return sectionList.map((section, i) => {\n const [b_age, t_age] = getSectionAgeRange(section.units);\n const [b_pos, t_pos] = getSectionPosRange(section.units, axisType);\n return {\n // Negative section IDs are used to indicate that these are synthetic sections\n section_id: -i,\n t_age,\n b_age,\n t_pos,\n b_pos,\n units: section.units as T[],\n };\n });\n}\n\nexport function getSectionPosRange(\n units: BaseUnit[],\n axisType: ColumnAxisType,\n): [number, number] {\n /** Get the overall position range of a set of units. */\n const t_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.t_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.t_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n const b_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.b_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.b_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n if (axisType == ColumnAxisType.AGE || axisType == ColumnAxisType.DEPTH) {\n return [Math.max(...b_positions), Math.min(...t_positions)];\n } else {\n return [Math.min(...b_positions), Math.max(...t_positions)];\n }\n}\n\nexport function getSectionAgeRange(units: BaseUnit[]): [number, number] {\n /** Get the overall age range of a set of units. */\n return getSectionPosRange(units, ColumnAxisType.AGE);\n}\n\nexport function mergeOverlappingSections<T extends UnitLong>(\n sections: SectionInfo<T>[],\n): SectionInfo<T>[] {\n /** Columns can have sections that overlap in time. Here, we merge overlapping\n * sections into a single section to correctly render gap-bound packages.\n */\n const [firstSection, ...rest] = sections;\n const newSections = [firstSection];\n for (const section of rest) {\n const lastSection = newSections[newSections.length - 1];\n if (\n lastSection.b_age < section.t_age ||\n lastSection.t_age > section.b_age\n ) {\n // No overlap, add the section as normal\n newSections.push(section);\n continue;\n }\n\n // Overlap, merge the sections\n lastSection.section_id = [\n ...ensureArray(lastSection.section_id),\n ...ensureArray(section.section_id),\n ];\n lastSection.units.push(...section.units);\n lastSection.b_age = Math.max(lastSection.b_age, section.b_age);\n lastSection.t_age = Math.min(lastSection.t_age, section.t_age);\n }\n return newSections;\n}\n\nexport function preprocessSectionUnit(unit: UnitLong): UnitLong {\n /** Preprocess a single unit for a \"section\" column type.\n * This mostly handles vagaries of eODP-style columns.\n * */\n\n let b_pos = unit.b_pos;\n let t_pos = unit.t_pos;\n\n let unit_name = unit.unit_name;\n\n // eODP columns sometimes have overlapping core sections, which are encoded in the name field\n // Match eODP section names\n const match = unit.unit_name.match(/^(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?): (.+)/);\n\n if (match) {\n // These values should already be set if we've used the show_positions flag\n t_pos ??= ensureRealFloat(match[1]);\n b_pos ??= ensureRealFloat(match[3]);\n unit_name = match[5];\n }\n\n return {\n ...unit,\n b_pos: ensureRealFloat(b_pos),\n t_pos: ensureRealFloat(t_pos),\n unit_name,\n };\n}\n"],"names":[],"version":3,"file":"column-views.aecf25bc.js.map"}
1
+ {"mappings":"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","sources":["packages/column-views/src/prepare-units/helpers.ts"],"sourcesContent":["import type { BaseUnit, UnitLong } from \"@macrostrat/api-types\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n createUnitSorter,\n ensureArray,\n ensureRealFloat,\n getUnitHeightRange,\n unitsOverlap,\n} from \"./utils\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport type { ExtUnit, SectionInfo, StratigraphicPackage } from \"./types\";\n\nconst dt = 0.001;\n\nexport function preprocessUnits<T extends UnitLong = UnitLong>(\n section: SectionInfo<T>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit[] {\n /** Preprocess units to add overlapping units and columns. */\n let units = section.units;\n\n let divisions = units.map((...args) => extendDivision(...args, axisType));\n for (let d of divisions) {\n const overlappingUnits = divisions.filter((u) =>\n d.overlappingUnits.includes(u.unit_id),\n );\n\n // Overlapping columns\n const columns = overlappingUnits.map((d) => d.column);\n\n if (columns.includes(d.column)) {\n let col = 0;\n // Go through columns to find a better index\n while (columns.includes(col)) {\n col++;\n }\n d.column = col;\n }\n\n // If unit overlaps the edges of a section, set the clip positions\n const [b_pos, t_pos] = getUnitHeightRange(d, axisType);\n if (axisType == ColumnAxisType.AGE) {\n if (b_pos > section.b_age) {\n d.b_clip_pos = section.b_age;\n }\n if (t_pos < section.t_age) {\n d.t_clip_pos = section.t_age;\n }\n }\n if (axisType == ColumnAxisType.DEPTH) {\n if (b_pos > section.b_pos) {\n d.b_clip_pos = section.b_pos;\n }\n if (t_pos < section.t_pos) {\n d.t_clip_pos = section.t_pos;\n }\n }\n // if (axisType == ColumnAxisType.HEIGHT) {\n // if (b_pos < section.b_pos) {\n // d.b_clip_pos = section.b_pos;\n // }\n // if (t_pos > section.t_pos) {\n // d.t_clip_pos = section.t_pos;\n // }\n // }\n }\n\n return divisions;\n}\n\nfunction extendDivision(\n unit: UnitLong,\n i: number,\n divisions: UnitLong[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit {\n // TODO: make this configurable\n let tolerance = 0.001; // 1 kyr tolerance for age columns\n if (axisType != ColumnAxisType.AGE) {\n tolerance = 0.01; // 1cm tolerance for height/depth columns\n }\n\n const overlappingUnits = divisions.filter(\n (d) =>\n d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType, tolerance),\n );\n const u_pos = getUnitHeightRange(unit, axisType);\n const bottomOverlap = overlappingUnits.some((d) => {\n const d_pos = getUnitHeightRange(d, axisType);\n // Check if the unit is below the current unit\n return d_pos[0] < u_pos[0] + dt;\n });\n let column = 0;\n if (overlappingUnits.length == 1) {\n column = 1;\n }\n\n return {\n ...unit,\n bottomOverlap,\n column,\n overlappingUnits: overlappingUnits.map((d) => d.unit_id),\n };\n}\n\nexport function groupUnitsIntoSectionsBySectionID<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by section_id.\n * This works for large-scale Macrostrat columns, where units are grouped by section_id.\n * */\n let groups = Array.from(group(units, (d) => d.section_id));\n const unitComparator = createUnitSorter(axisType);\n\n const groups1 = groups.map(([section_id, sectionUnits]) => {\n const [b_age, t_age] = getSectionAgeRange(sectionUnits);\n const [b_pos, t_pos] = getSectionPosRange(sectionUnits, axisType);\n\n // sort units by position\n sectionUnits.sort(unitComparator);\n return { section_id, t_age, b_age, b_pos, t_pos, units: sectionUnits };\n });\n // Sort sections by increasing top age, then increasing bottom age.\n // Sections have no relative ordinal position other than age...\n const compareSections = createUnitSorter(axisType) as (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n ) => number;\n groups1.sort(compareSections);\n return groups1;\n}\n\ninterface WorkingSection {\n units: UnitLong[];\n // Position or age\n heightRange?: [number, number];\n}\n\nexport function groupUnitsIntoSectionsByOverlap<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by overlap.\n * This creates \"synthetic\" sections that correspond to packages bound by scale gaps.\n * This is most useful in the height and depth domains, where gaps (e.g., missing core) are\n * common.\n * */\n // Start with each unit as its own \"section\", and progressively merge...\n const sectionList: WorkingSection[] = [];\n for (const unit of units) {\n // Check if the unit overlaps with any existing section\n const heightRange = getUnitHeightRange(unit, axisType);\n let section: WorkingSection | undefined = sectionList.find(\n (s) =>\n compareAgeRanges(heightRange, s.heightRange) !==\n AgeRangeRelationship.Disjoint,\n );\n if (section == null) {\n // No overlap, create a new section\n sectionList.push({\n heightRange,\n units: [unit],\n });\n } else {\n // Overlap, merge the unit into the section\n section.units.push(unit);\n // Update the height range\n if (axisType == ColumnAxisType.DEPTH || axisType == ColumnAxisType.AGE) {\n section.heightRange = [\n Math.max(section.heightRange[0], heightRange[0]),\n Math.min(section.heightRange[1], heightRange[1]),\n ];\n } else {\n section.heightRange = [\n Math.min(section.heightRange[0], heightRange[0]),\n Math.max(section.heightRange[1], heightRange[1]),\n ];\n }\n }\n }\n // We should have a section for each unit, now we can convert to SectionInfo\n // Ages have to be really actually ages, not heights\n\n return sectionList.map((section, i) => {\n const [b_age, t_age] = getSectionAgeRange(section.units);\n const [b_pos, t_pos] = getSectionPosRange(section.units, axisType);\n return {\n // Negative section IDs are used to indicate that these are synthetic sections\n section_id: -i,\n t_age,\n b_age,\n t_pos,\n b_pos,\n units: section.units as T[],\n };\n });\n}\n\nexport function getSectionPosRange(\n units: BaseUnit[],\n axisType: ColumnAxisType,\n): [number, number] {\n /** Get the overall position range of a set of units. */\n const t_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.t_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.t_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n const b_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.b_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.b_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n if (axisType == ColumnAxisType.AGE || axisType == ColumnAxisType.DEPTH) {\n return [Math.max(...b_positions), Math.min(...t_positions)];\n } else {\n return [Math.min(...b_positions), Math.max(...t_positions)];\n }\n}\n\nexport function getSectionAgeRange(units: BaseUnit[]): [number, number] {\n /** Get the overall age range of a set of units. */\n return getSectionPosRange(units, ColumnAxisType.AGE);\n}\n\nexport function mergeOverlappingSections<T extends UnitLong>(\n sections: SectionInfo<T>[],\n): SectionInfo<T>[] {\n /** Columns can have sections that overlap in time. Here, we merge overlapping\n * sections into a single section to correctly render gap-bound packages.\n */\n const [firstSection, ...rest] = sections;\n const newSections = [firstSection];\n for (const section of rest) {\n const lastSection = newSections[newSections.length - 1];\n if (\n lastSection.b_age < section.t_age ||\n lastSection.t_age > section.b_age\n ) {\n // No overlap, add the section as normal\n newSections.push(section);\n continue;\n }\n\n // Overlap, merge the sections\n lastSection.section_id = [\n ...ensureArray(lastSection.section_id),\n ...ensureArray(section.section_id),\n ];\n lastSection.units.push(...section.units);\n lastSection.b_age = Math.max(lastSection.b_age, section.b_age);\n lastSection.t_age = Math.min(lastSection.t_age, section.t_age);\n }\n return newSections;\n}\n\nexport function preprocessSectionUnit(unit: UnitLong): UnitLong {\n /** Preprocess a single unit for a \"section\" column type.\n * This mostly handles vagaries of eODP-style columns.\n * */\n\n let b_pos = unit.b_pos;\n let t_pos = unit.t_pos;\n\n let unit_name = unit.unit_name;\n\n // eODP columns sometimes have overlapping core sections, which are encoded in the name field\n // Match eODP section names\n const match = unit.unit_name.match(/^(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?): (.+)/);\n\n if (match) {\n // These values should already be set if we've used the show_positions flag\n t_pos ??= ensureRealFloat(match[1]);\n b_pos ??= ensureRealFloat(match[3]);\n unit_name = match[5];\n }\n\n return {\n ...unit,\n b_pos: ensureRealFloat(b_pos),\n t_pos: ensureRealFloat(t_pos),\n unit_name,\n };\n}\n"],"names":[],"version":3,"file":"column-views.b4e1236d.js.map"}
@@ -1,9 +1,9 @@
1
- import {ColumnCorrelationMap as $dcd183b733f66144$export$8e7d97509e84cc49} from "./column-views.35efe006.js";
2
- import {ColumnCorrelationProvider as $74e211dc185c20b4$export$72ffe141ebf87ef1, useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.6d63971b.js";
1
+ import {ColumnCorrelationMap as $dcd183b733f66144$export$8e7d97509e84cc49} from "./column-views.ce3a3ac8.js";
2
+ import {ColumnCorrelationProvider as $74e211dc185c20b4$export$72ffe141ebf87ef1, useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.ad2fe46c.js";
3
3
 
4
4
 
5
5
 
6
6
 
7
7
 
8
8
  export {$dcd183b733f66144$export$8e7d97509e84cc49 as ColumnCorrelationMap, $74e211dc185c20b4$export$72ffe141ebf87ef1 as ColumnCorrelationProvider, $74e211dc185c20b4$export$21398703d3a9bb4d as useCorrelationMapStore};
9
- //# sourceMappingURL=column-views.6ce8cb61.js.map
9
+ //# sourceMappingURL=column-views.c149f7a5.js.map
@@ -1 +1 @@
1
- {"mappings":"","sources":["packages/column-views/src/maps/column-correlation/index.ts"],"sourcesContent":["export * from \"./core\";\nexport * from \"./state\";\n"],"names":[],"version":3,"file":"column-views.6ce8cb61.js.map"}
1
+ {"mappings":"","sources":["packages/column-views/src/maps/column-correlation/index.ts"],"sourcesContent":["export * from \"./core\";\nexport * from \"./state\";\n"],"names":[],"version":3,"file":"column-views.c149f7a5.js.map"}
@@ -1,13 +1,13 @@
1
- .VC2fja_taxa-occurrences-matrix {
1
+ .RZWNlW_taxa-occurrences-matrix {
2
2
  color: var(--column-text-color);
3
3
  }
4
4
 
5
- .VC2fja_taxa-occurrences-matrix line {
5
+ .RZWNlW_taxa-occurrences-matrix line {
6
6
  stroke: var(--column-stroke-color);
7
7
  stroke-width: 2px;
8
8
  }
9
9
 
10
- .VC2fja_taxa-occurrences-matrix text.VC2fja_taxon-name {
10
+ .RZWNlW_taxa-occurrences-matrix text.RZWNlW_taxon-name {
11
11
  fill: var(--column-text-color);
12
12
  text-anchor: end;
13
13
  position: sticky;
@@ -15,16 +15,16 @@
15
15
  transform: rotate(90deg)translate(0, 4px);
16
16
  }
17
17
 
18
- .VC2fja_taxon-ranges {
18
+ .RZWNlW_taxon-ranges {
19
19
  position: relative;
20
20
  }
21
21
 
22
- .VC2fja_taxon-ranges > svg {
22
+ .RZWNlW_taxon-ranges > svg {
23
23
  height: 100%;
24
24
  position: absolute;
25
25
  }
26
26
 
27
- .VC2fja_taxon-labels {
27
+ .RZWNlW_taxon-labels {
28
28
  z-index: 10;
29
29
  pointer-events: none;
30
30
  width: 100%;
@@ -32,12 +32,12 @@
32
32
  position: absolute;
33
33
  }
34
34
 
35
- .VC2fja_taxon-labels .VC2fja_taxon-label {
35
+ .RZWNlW_taxon-labels .RZWNlW_taxon-label {
36
36
  height: 100%;
37
37
  position: absolute;
38
38
  }
39
39
 
40
- .VC2fja_taxon-labels .VC2fja_taxon-label-inner {
40
+ .RZWNlW_taxon-labels .RZWNlW_taxon-label-inner {
41
41
  top: calc(var(--label-width, 200px) - 10px);
42
42
  transform-origin: 0 100%;
43
43
  background-color: var(--column-background-color);
@@ -45,10 +45,10 @@
45
45
  transform: rotate(-90deg)translate(10px, 8px);
46
46
  }
47
47
 
48
- .VC2fja_taxon-labels .VC2fja_taxon-label-text {
48
+ .RZWNlW_taxon-labels .RZWNlW_taxon-label-text {
49
49
  text-align: left;
50
50
  max-width: 300px;
51
51
  padding: 0 8px;
52
52
  font-style: italic;
53
53
  }
54
- /*# sourceMappingURL=column-views.b7016f82.css.map */
54
+ /*# sourceMappingURL=column-views.cb6fc808.css.map */
@@ -0,0 +1 @@
1
+ {"mappings":"AAAA;;;;AAEE;;;;;AAGA;;;;;;;;AAOF;;;;AAEE;;;;;AAIF;;;;;;;;AAOE;;;;;AAIA;;;;;;;;AAOA","sources":["packages/column-views/src/facets/fossils/taxon-ranges.module.sass"],"sourcesContent":[".taxa-occurrences-matrix\n color: var(--column-text-color)\n line\n stroke: var(--column-stroke-color)\n stroke-width: 2px\n text.taxon-name\n fill: var(--column-text-color)\n transform: rotate(90deg) translate(0, 4px)\n text-anchor: end\n position: sticky\n top: 0\n\n.taxon-ranges\n position: relative\n &>svg\n position: absolute\n height: 100%\n\n.taxon-labels\n z-index: 10\n position: absolute\n width: 100%\n height: 100%\n pointer-events: none\n\n .taxon-label\n position: absolute\n height: 100%\n\n .taxon-label-inner\n position: sticky\n top: calc(var(--label-width, 200px) - 10px)\n transform: rotate(-90deg) translate(10px, 8px)\n transform-origin: bottom left\n background-color: var(--column-background-color)\n\n .taxon-label-text\n\n font-style: italic\n text-align: left\n padding: 0 8px\n max-width: 300px\n //position: sticky\n //top: 200px\n"],"names":[],"version":3,"file":"column-views.cb6fc808.css.map"}
@@ -1,4 +1,4 @@
1
- import {useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.6d63971b.js";
1
+ import {useCorrelationMapStore as $74e211dc185c20b4$export$21398703d3a9bb4d} from "./column-views.ad2fe46c.js";
2
2
  import {buildColumnsStyle as $1dbfddc9637b572c$export$d2995719c3a4ae17} from "./column-views.633c42a3.js";
3
3
  import {InsetMap as $5593f90ffec284da$export$1e8149fc0d15fed0} from "./column-views.3de4dc43.js";
4
4
  import {useMapClickHandler as $6wt91$useMapClickHandler, useMapStyleOperator as $6wt91$useMapStyleOperator, useMapEaseTo as $6wt91$useMapEaseTo} from "@macrostrat/mapbox-react";
@@ -196,4 +196,4 @@ function $dcd183b733f66144$var$SectionLine({ padding: padding }) {
196
196
 
197
197
 
198
198
  export {$dcd183b733f66144$export$8e7d97509e84cc49 as ColumnCorrelationMap};
199
- //# sourceMappingURL=column-views.35efe006.js.map
199
+ //# sourceMappingURL=column-views.ce3a3ac8.js.map
@@ -1 +1 @@
1
- {"mappings":"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","sources":["packages/column-views/src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { buildColumnsStyle, InsetMap, InsetMapProps } from \"../_shared\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, ...rest } = props;\n\n const overlayStyles: Partial<Style>[] = useMemo(() => {\n return [\n buildColumnsStyle(columnColor) as Style,\n selectedColumnsStyle as Style,\n lineOfSectionStyle as Style,\n ];\n }, [columnColor]);\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n overlayStyles,\n },\n [\n h(ColumnsLayer),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n\n useMapStyleOperator(\n (map) => {\n if (columns == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: columns,\n };\n\n console.log(\" columns\", data);\n setGeoJSON(map, \"columns\", data);\n },\n [columns, enabled],\n );\n return null;\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.35efe006.js.map"}
1
+ {"mappings":"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","sources":["packages/column-views/src/maps/column-correlation/core.ts"],"sourcesContent":["import {\n useMapClickHandler,\n useMapEaseTo,\n useMapStyleOperator,\n} from \"@macrostrat/mapbox-react\";\nimport { LngLatBounds, Style } from \"mapbox-gl\";\nimport h from \"@macrostrat/hyper\";\nimport { Feature, FeatureCollection } from \"geojson\";\nimport { ReactNode, useMemo } from \"react\";\nimport { setGeoJSON, buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\n\nimport { useCorrelationMapStore } from \"./state\";\nimport { buildColumnsStyle, InsetMap, InsetMapProps } from \"../_shared\";\nimport { buildCrossSectionLayers } from \"@macrostrat/map-styles\";\n\nexport interface CorrelationMapProps extends InsetMapProps {\n padding?: number;\n children?: ReactNode;\n accessToken?: string;\n columnColor?: string;\n}\n\nexport function ColumnCorrelationMap(props: CorrelationMapProps) {\n const { padding = 50, children, columnColor, ...rest } = props;\n\n const overlayStyles: Partial<Style>[] = useMemo(() => {\n return [\n buildColumnsStyle(columnColor) as Style,\n selectedColumnsStyle as Style,\n lineOfSectionStyle as Style,\n ];\n }, [columnColor]);\n\n return h(\n InsetMap,\n {\n ...rest,\n boxZoom: false,\n dragRotate: false,\n overlayStyles,\n },\n [\n h(ColumnsLayer),\n h(SelectedColumnsLayer),\n h(MapClickHandler),\n h(SectionLine, { padding }),\n children,\n ],\n );\n}\n\nfunction MapClickHandler() {\n const onClickMap = useCorrelationMapStore((state) => state.onClickMap);\n\n useMapClickHandler(\n (e) => {\n onClickMap(e, { type: \"Point\", coordinates: e.lngLat.toArray() });\n },\n [onClickMap],\n );\n\n return null;\n}\n\nfunction SelectedColumnsLayer() {\n const focusedColumns = useCorrelationMapStore(\n (state) => state.focusedColumns,\n );\n\n useMapStyleOperator(\n (map) => {\n let features = focusedColumns;\n\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features,\n };\n\n const columnCentroidLine: Feature = {\n type: \"Feature\",\n geometry: {\n type: \"LineString\",\n coordinates: features.map(\n (col) => col.properties.centroid.geometry.coordinates,\n ),\n },\n properties: {},\n };\n\n setGeoJSON(map, \"selected-columns\", data);\n setGeoJSON(map, \"selected-column-centroids\", {\n type: \"FeatureCollection\",\n features: [columnCentroidLine],\n });\n },\n [focusedColumns],\n );\n return null;\n}\n\nfunction ColumnsLayer({ enabled = true }) {\n const columns = useCorrelationMapStore((state) => state.columns);\n\n useMapStyleOperator(\n (map) => {\n if (columns == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: columns,\n };\n\n console.log(\" columns\", data);\n setGeoJSON(map, \"columns\", data);\n },\n [columns, enabled],\n );\n return null;\n}\n\nconst selectedColumnsStyle: Style = {\n version: 8,\n sources: {\n \"selected-columns\": buildGeoJSONSource(),\n \"selected-column-centroids\": buildGeoJSONSource(),\n },\n layers: [\n {\n id: \"selected-columns-fill\",\n type: \"fill\",\n source: \"selected-columns\",\n paint: {\n \"fill-color\": \"rgba(255, 0, 0, 0.1)\",\n },\n },\n {\n id: \"selected-column-centroids-line\",\n type: \"line\",\n source: \"selected-column-centroids\",\n paint: {\n \"line-color\": \"rgba(255, 0, 0, 0.8)\",\n \"line-width\": 2,\n \"line-dasharray\": [2, 2],\n },\n },\n {\n id: \"selected-column-centroids-points\",\n type: \"circle\",\n source: \"selected-column-centroids\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": \"rgba(255, 0, 0, 0.8)\",\n },\n },\n ],\n};\n\nconst lineOfSectionStyle: Style = {\n version: 8,\n sources: {\n elevationMarker: buildGeoJSONSource(),\n crossSectionLine: buildGeoJSONSource(),\n crossSectionEndpoints: buildGeoJSONSource(),\n },\n layers: buildCrossSectionLayers(),\n};\n\nfunction SectionLine({ padding }: { padding: number }) {\n const focusedLine = useCorrelationMapStore((state) => state.focusedLine);\n\n // Setup focused line\n useMapStyleOperator(\n (map) => {\n if (focusedLine == null) {\n return;\n }\n const data: FeatureCollection = {\n type: \"FeatureCollection\",\n features: [\n {\n type: \"Feature\",\n geometry: focusedLine,\n properties: { id: \"focusedLine\" },\n },\n ],\n };\n\n setGeoJSON(map, \"crossSectionLine\", data);\n setGeoJSON(map, \"crossSectionEndpoints\", {\n type: \"FeatureCollection\",\n features: focusedLine.coordinates.map((coord) => ({\n type: \"Feature\",\n geometry: { type: \"Point\", coordinates: coord },\n properties: {},\n })),\n });\n },\n [focusedLine],\n );\n\n const bounds = useMemo(() => {\n if (focusedLine == null || focusedLine?.coordinates.length < 2) {\n return null;\n }\n let bounds = new LngLatBounds();\n for (let coord of focusedLine.coordinates) {\n bounds.extend(coord);\n }\n return bounds;\n }, [focusedLine]);\n\n useMapEaseTo({ bounds, padding, trackResize: true });\n\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.ce3a3ac8.js.map"}
@@ -1,4 +1,4 @@
1
- import {ColumnNavigationMap as $9d5d216fa2057b5b$export$821baedf611249f3} from "./column-views.11ae78f7.js";
1
+ import {ColumnNavigationMap as $9d5d216fa2057b5b$export$821baedf611249f3} from "./column-views.5fff0716.js";
2
2
  import {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.c92a359e.js";
3
3
 
4
4
 
@@ -6,4 +6,4 @@ import {ResizableMapFrame as $e6046e00d2c8a163$export$c4313db718750a5a, ColumnNa
6
6
 
7
7
 
8
8
  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};
9
- //# sourceMappingURL=column-views.77e22590.js.map
9
+ //# sourceMappingURL=column-views.d1b49f5c.js.map
@@ -1 +1 @@
1
- {"mappings":"","sources":["packages/column-views/src/maps/column-navigation/index.ts"],"sourcesContent":["export * from \"./mapbox\";\nexport * from \"./svg\";\n"],"names":[],"version":3,"file":"column-views.77e22590.js.map"}
1
+ {"mappings":"","sources":["packages/column-views/src/maps/column-navigation/index.ts"],"sourcesContent":["export * from \"./mapbox\";\nexport * from \"./svg\";\n"],"names":[],"version":3,"file":"column-views.d1b49f5c.js.map"}
@@ -1,6 +1,6 @@
1
- import {UnitDetailsPanel as $448b24baeef3b229$export$fbd245232df17557, LegendPanelHeader as $448b24baeef3b229$export$fc503c39cc5cff43, UnitDetailsFeature as $448b24baeef3b229$export$ec297f6f9a6ccad0, Duration as $448b24baeef3b229$export$3b11bc38611c5941, ReferencesField as $448b24baeef3b229$export$895d4931dd696e25, Identifier as $448b24baeef3b229$export$989167234458594d, AgeLabel as $448b24baeef3b229$export$37ebfd237811b1eb, ClickableText as $448b24baeef3b229$export$b6867fc5221f9f65} from "./column-views.218e8f5d.js";
2
- import {UnitDetailsPopover as $a9bcb536274d1bf9$export$6716aecc2c9afbe2, UnitSelectionPopover as $a9bcb536274d1bf9$export$db1115efab13710d} from "./column-views.729a6728.js";
3
- import {UnitDetailsPanelWithNavigation as $d418ca9cbe9b0f3c$export$cfdbe8496aa51962} from "./column-views.7c95c3d7.js";
1
+ import {UnitDetailsPanel as $448b24baeef3b229$export$fbd245232df17557, LegendPanelHeader as $448b24baeef3b229$export$fc503c39cc5cff43, UnitDetailsFeature as $448b24baeef3b229$export$ec297f6f9a6ccad0, Duration as $448b24baeef3b229$export$3b11bc38611c5941, ReferencesField as $448b24baeef3b229$export$895d4931dd696e25, Identifier as $448b24baeef3b229$export$989167234458594d, AgeLabel as $448b24baeef3b229$export$37ebfd237811b1eb, ClickableText as $448b24baeef3b229$export$b6867fc5221f9f65} from "./column-views.5eb4e6ff.js";
2
+ import {UnitDetailsPopover as $a9bcb536274d1bf9$export$6716aecc2c9afbe2, UnitSelectionPopover as $a9bcb536274d1bf9$export$db1115efab13710d} from "./column-views.565b193a.js";
3
+ import {UnitDetailsPanelWithNavigation as $d418ca9cbe9b0f3c$export$cfdbe8496aa51962} from "./column-views.2bac03a2.js";
4
4
 
5
5
 
6
6
 
@@ -8,4 +8,4 @@ import {UnitDetailsPanelWithNavigation as $d418ca9cbe9b0f3c$export$cfdbe8496aa51
8
8
 
9
9
 
10
10
  export {$448b24baeef3b229$export$fbd245232df17557 as UnitDetailsPanel, $448b24baeef3b229$export$fc503c39cc5cff43 as LegendPanelHeader, $448b24baeef3b229$export$ec297f6f9a6ccad0 as UnitDetailsFeature, $448b24baeef3b229$export$3b11bc38611c5941 as Duration, $448b24baeef3b229$export$895d4931dd696e25 as ReferencesField, $448b24baeef3b229$export$989167234458594d as Identifier, $448b24baeef3b229$export$37ebfd237811b1eb as AgeLabel, $448b24baeef3b229$export$b6867fc5221f9f65 as ClickableText, $a9bcb536274d1bf9$export$6716aecc2c9afbe2 as UnitDetailsPopover, $a9bcb536274d1bf9$export$db1115efab13710d as UnitSelectionPopover, $d418ca9cbe9b0f3c$export$cfdbe8496aa51962 as UnitDetailsPanelWithNavigation};
11
- //# sourceMappingURL=column-views.faa4e06d.js.map
11
+ //# sourceMappingURL=column-views.d524075b.js.map
@@ -1 +1 @@
1
- {"mappings":"","sources":["packages/column-views/src/unit-details/index.ts"],"sourcesContent":["export * from \"./panel\";\nexport * from \"./popover\";\nexport * from \"./modal-panel\";\n"],"names":[],"version":3,"file":"column-views.faa4e06d.js.map"}
1
+ {"mappings":"","sources":["packages/column-views/src/unit-details/index.ts"],"sourcesContent":["export * from \"./panel\";\nexport * from \"./popover\";\nexport * from \"./modal-panel\";\n"],"names":[],"version":3,"file":"column-views.d524075b.js.map"}
@@ -0,0 +1,31 @@
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 $2bdf21cdc74b774c$exports = {};
6
+
7
+ $parcel$export($2bdf21cdc74b774c$exports, "taxa-occurrences-matrix", () => $2bdf21cdc74b774c$export$1a8a56764d75ed71, (v) => $2bdf21cdc74b774c$export$1a8a56764d75ed71 = v);
8
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-label", () => $2bdf21cdc74b774c$export$a72089d2f6fa8dfc, (v) => $2bdf21cdc74b774c$export$a72089d2f6fa8dfc = v);
9
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-label-inner", () => $2bdf21cdc74b774c$export$bca4873e6487914b, (v) => $2bdf21cdc74b774c$export$bca4873e6487914b = v);
10
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-label-text", () => $2bdf21cdc74b774c$export$c17fb3de63e5b5e0, (v) => $2bdf21cdc74b774c$export$c17fb3de63e5b5e0 = v);
11
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-labels", () => $2bdf21cdc74b774c$export$5717d7656277d73a, (v) => $2bdf21cdc74b774c$export$5717d7656277d73a = v);
12
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-name", () => $2bdf21cdc74b774c$export$8bc33626fdbc643b, (v) => $2bdf21cdc74b774c$export$8bc33626fdbc643b = v);
13
+ $parcel$export($2bdf21cdc74b774c$exports, "taxon-ranges", () => $2bdf21cdc74b774c$export$6f150713c4eb8d46, (v) => $2bdf21cdc74b774c$export$6f150713c4eb8d46 = v);
14
+ var $2bdf21cdc74b774c$export$1a8a56764d75ed71;
15
+ var $2bdf21cdc74b774c$export$a72089d2f6fa8dfc;
16
+ var $2bdf21cdc74b774c$export$bca4873e6487914b;
17
+ var $2bdf21cdc74b774c$export$c17fb3de63e5b5e0;
18
+ var $2bdf21cdc74b774c$export$5717d7656277d73a;
19
+ var $2bdf21cdc74b774c$export$8bc33626fdbc643b;
20
+ var $2bdf21cdc74b774c$export$6f150713c4eb8d46;
21
+ $2bdf21cdc74b774c$export$1a8a56764d75ed71 = `RZWNlW_taxa-occurrences-matrix`;
22
+ $2bdf21cdc74b774c$export$a72089d2f6fa8dfc = `RZWNlW_taxon-label`;
23
+ $2bdf21cdc74b774c$export$bca4873e6487914b = `RZWNlW_taxon-label-inner`;
24
+ $2bdf21cdc74b774c$export$c17fb3de63e5b5e0 = `RZWNlW_taxon-label-text`;
25
+ $2bdf21cdc74b774c$export$5717d7656277d73a = `RZWNlW_taxon-labels`;
26
+ $2bdf21cdc74b774c$export$8bc33626fdbc643b = `RZWNlW_taxon-name`;
27
+ $2bdf21cdc74b774c$export$6f150713c4eb8d46 = `RZWNlW_taxon-ranges`;
28
+
29
+
30
+ export {$2bdf21cdc74b774c$exports as default};
31
+ //# sourceMappingURL=column-views.d5e788e8.js.map
@@ -0,0 +1 @@
1
+ {"mappings":";;;;;;;;;;;;;AAAA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AACA,IAAA;AANA,4CAA4C,CAAC,8BAA8B,CAAC;AAC5E,4CAAgC,CAAC,kBAAkB,CAAC;AACpD,4CAAsC,CAAC,wBAAwB,CAAC;AAChE,4CAAqC,CAAC,uBAAuB,CAAC;AAC9D,4CAAiC,CAAC,mBAAmB,CAAC;AACtD,4CAA+B,CAAC,iBAAiB,CAAC;AAClD,4CAAiC,CAAC,mBAAmB,CAAC","sources":["packages/column-views/src/facets/fossils/taxon-ranges.module.sass"],"sourcesContent":[".taxa-occurrences-matrix\n color: var(--column-text-color)\n line\n stroke: var(--column-stroke-color)\n stroke-width: 2px\n text.taxon-name\n fill: var(--column-text-color)\n transform: rotate(90deg) translate(0, 4px)\n text-anchor: end\n position: sticky\n top: 0\n\n.taxon-ranges\n position: relative\n &>svg\n position: absolute\n height: 100%\n\n.taxon-labels\n z-index: 10\n position: absolute\n width: 100%\n height: 100%\n pointer-events: none\n\n .taxon-label\n position: absolute\n height: 100%\n\n .taxon-label-inner\n position: sticky\n top: calc(var(--label-width, 200px) - 10px)\n transform: rotate(-90deg) translate(10px, 8px)\n transform-origin: bottom left\n background-color: var(--column-background-color)\n\n .taxon-label-text\n\n font-style: italic\n text-align: left\n padding: 0 8px\n max-width: 300px\n //position: sticky\n //top: 200px\n"],"names":[],"version":3,"file":"column-views.d5e788e8.js.map"}
@@ -1,4 +1,4 @@
1
- import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76} from "./column-views.abf6aedd.js";
1
+ import {useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76} from "./column-views.4b259f9e.js";
2
2
  import {line as $iZTQD$line} from "d3-shape";
3
3
  import {createContext as $iZTQD$createContext, useContext as $iZTQD$useContext} from "react";
4
4
  import $iZTQD$macrostrathyper from "@macrostrat/hyper";
@@ -83,4 +83,4 @@ const $5f39f3d52558a1d0$export$919dbb10b6b5b75 = ()=>(0, $iZTQD$useContext)($5f3
83
83
 
84
84
 
85
85
  export {$5f39f3d52558a1d0$export$309ef8546e07d921 as IsotopesDataArea, $5f39f3d52558a1d0$export$4cb5d059db4e2bd as IsotopeDataPoint, $5f39f3d52558a1d0$export$628a3ef6eb9c3a89 as IsotopeDataLine, $5f39f3d52558a1d0$export$919dbb10b6b5b75 as useDataLocator};
86
- //# sourceMappingURL=column-views.30950997.js.map
86
+ //# sourceMappingURL=column-views.d6c0b7bc.js.map
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;AAMA,MAAM,iCAAW,CAAC,OAAO;IACvB,MAAM,SAAS,MAAM,MAAM;IAC3B,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE;AACpC;AAEA,MAAM,2CAAqB,SAAU,IAAI;IACvC,MAAM,UAAE,MAAM,SAAE,KAAK,aAAE,SAAS,EAAE,GAAG,MAAM,GAAG;IAC9C,OAAO,SAAU,CAAC,EAAE,IAAI,CAAC;QACvB,MAAM,SAAS,UAAU;QACzB,IAAI,CAAC,+BAAS,OAAO,SAAS,OAAO;QACrC,OAAO;YAAC,OAAO,EAAE,KAAK;YAAG,MAAM;SAAQ;IACzC;AACF;AAEA,MAAM,4CAAsB,CAAA,GAAA,oBAAY,EAAE;AAW1C,MAAM,4CAAmB,SAAU,KAAoB;IACrD,MAAM,SAAS,CAAA,GAAA,iBAAS,EAAE,CAAA,GAAA,0BAAkB,IAAI;IAEhD,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,IAAI,aAAE,SAAS,UAAE,MAAM,YAAE,QAAQ,aAAE,SAAS,SAAE,QAAQ,OAAO,GAAG;IAChE,IAAI,aAAa,MACf,YAAY,SAAU,CAAC;QACrB,IAAI,EAAE,MAAM,IAAI,MACd,QAAQ,GAAG,CAAC;QAEd,OAAO,EAAE,MAAM;IACjB;IAGF,yCAAyC;IACzC,MAAM,eAAe,yCAAmB;gBACtC;eACA;mBACA;gBACA;mBACA;IACF;IAEA,IAAI,SAAS,SAAS;IACtB,IAAI,WACF,UAAU;IAEZ,MAAM,cAAc,CAAA,GAAA,WAAG,IACpB,CAAC,CAAC,CAAC,IAAM,OAAO,CAAC,CAAC,OAAO,EAC1B,aAAa;KACZ,CAAC,CAAC,CAAC,IAAM,MAAM,EAAE,MAAM;IAE1B,MAAM,QAAQ;sBAAE;qBAAc;mBAAa;gBAAW;eAAQ;IAAM;IACpE,OAAO,CAAA,GAAA,sBAAA,EAAE,0CAAoB,QAAQ,EAAE;eAAE;IAAM,GAAG,CAAA,GAAA,sBAAA,EAAE,UAAU;AAChE;AAEA,MAAM,2CAAmB,SAAU,KAAK;IACtC,MAAM,gBAAE,YAAY,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACpC,MAAM,SAAE,KAAK,eAAE,WAAW,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,MAAM,aAAa;IACzB,IAAI,OAAO,MAAM,OAAO;IACxB,MAAM,CAAC,IAAI,GAAG,GAAG;IAEjB,OAAO,CAAA,GAAA,sBAAA,EAAE,UAAU;QACjB,KAAK,MAAM,SAAS;YACpB;YACA;QACA,GAAG;QACH,GAAG,IAAI;IACT;AACF;AAEA,MAAM,4CAAkB,SAAU,KAAK;IACrC,MAAM,EAAE,QAAQ,UAAU,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,eAAE,WAAW,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACnC,OAAO,CAAA,GAAA,sBAAA,EAAE,QAAQ;QACf,GAAG,YAAY;QACf,MAAM;QACN,GAAG,IAAI;IACT;AACF;AAEA,MAAM,2CAAiB,IAAM,CAAA,GAAA,iBAAS,EAAE","sources":["packages/column-views/src/facets/carbon-isotopes/data-area.ts"],"sourcesContent":["import { line } from \"d3-shape\";\nimport { createContext, useContext } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { ColumnLayoutContext } from \"@macrostrat/column-components\";\nimport { useCompositeScale } from \"../../data-provider\";\n\nconst inDomain = (scale, num) => {\n const domain = scale.domain();\n return domain[0] < num < domain[1];\n};\n\nconst createPointLocator = function (opts) {\n const { xScale, scale, getHeight, ...rest } = opts;\n return function (d, s = 0) {\n const height = getHeight(d);\n if (!inDomain(scale, height)) return null;\n return [xScale(d.value), scale(height)];\n };\n};\n\nconst IsotopesDataContext = createContext(null);\n\nexport interface DataAreaProps {\n clipY: boolean;\n parameter: string;\n corrected: boolean;\n system: string;\n children: React.ReactNode;\n getHeight?: Function;\n}\n\nconst IsotopesDataArea = function (props: DataAreaProps) {\n const xScale = useContext(ColumnLayoutContext)?.xScale;\n\n const scale = useCompositeScale();\n\n let { corrected, system, children, getHeight, clipY = false } = props;\n if (getHeight == null) {\n getHeight = function (d) {\n if (d.height == null) {\n console.log(d);\n }\n return d.height;\n };\n }\n\n // Handlers for creating points and lines\n const pointLocator = createPointLocator({\n xScale,\n scale,\n corrected,\n system,\n getHeight,\n });\n\n let column = \"avg_\" + system;\n if (corrected) {\n column += \"_corr\";\n }\n const lineLocator = line()\n .x((d) => xScale(d[column]))\n // @ts-ignore\n .y((d) => scale(d.height));\n\n const value = { pointLocator, lineLocator, corrected, system, clipY };\n return h(IsotopesDataContext.Provider, { value }, h(\"g.data\", children));\n};\n\nconst IsotopeDataPoint = function (props) {\n const { pointLocator } = useContext(IsotopesDataContext);\n const { datum, strokeWidth, ...rest } = props;\n const loc = pointLocator(datum);\n if (loc == null) return null;\n const [cx, cy] = loc;\n\n return h(\"circle\", {\n key: datum.sample_id,\n cx,\n cy,\n r: 2,\n ...rest,\n });\n};\n\nconst IsotopeDataLine = function (props) {\n const { values: lineValues, ...rest } = props;\n const { lineLocator } = useContext(IsotopesDataContext);\n return h(\"path\", {\n d: lineLocator(lineValues),\n fill: \"transparent\",\n ...rest,\n });\n};\n\nconst useDataLocator = () => useContext(IsotopesDataContext);\n\nexport { IsotopesDataArea, IsotopeDataPoint, IsotopeDataLine, useDataLocator };\n"],"names":[],"version":3,"file":"column-views.30950997.js.map"}
1
+ {"mappings":";;;;;;;;;;;AAMA,MAAM,iCAAW,CAAC,OAAO;IACvB,MAAM,SAAS,MAAM,MAAM;IAC3B,OAAO,MAAM,CAAC,EAAE,GAAG,MAAM,MAAM,CAAC,EAAE;AACpC;AAEA,MAAM,2CAAqB,SAAU,IAAI;IACvC,MAAM,UAAE,MAAM,SAAE,KAAK,aAAE,SAAS,EAAE,GAAG,MAAM,GAAG;IAC9C,OAAO,SAAU,CAAC,EAAE,IAAI,CAAC;QACvB,MAAM,SAAS,UAAU;QACzB,IAAI,CAAC,+BAAS,OAAO,SAAS,OAAO;QACrC,OAAO;YAAC,OAAO,EAAE,KAAK;YAAG,MAAM;SAAQ;IACzC;AACF;AAEA,MAAM,4CAAsB,CAAA,GAAA,oBAAY,EAAE;AAW1C,MAAM,4CAAmB,SAAU,KAAoB;IACrD,MAAM,SAAS,CAAA,GAAA,iBAAS,EAAE,CAAA,GAAA,0BAAkB,IAAI;IAEhD,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,IAAI,aAAE,SAAS,UAAE,MAAM,YAAE,QAAQ,aAAE,SAAS,SAAE,QAAQ,OAAO,GAAG;IAChE,IAAI,aAAa,MACf,YAAY,SAAU,CAAC;QACrB,IAAI,EAAE,MAAM,IAAI,MACd,QAAQ,GAAG,CAAC;QAEd,OAAO,EAAE,MAAM;IACjB;IAGF,yCAAyC;IACzC,MAAM,eAAe,yCAAmB;gBACtC;eACA;mBACA;gBACA;mBACA;IACF;IAEA,IAAI,SAAS,SAAS;IACtB,IAAI,WACF,UAAU;IAEZ,MAAM,cAAc,CAAA,GAAA,WAAG,IACpB,CAAC,CAAC,CAAC,IAAM,OAAO,CAAC,CAAC,OAAO,EAC1B,aAAa;KACZ,CAAC,CAAC,CAAC,IAAM,MAAM,EAAE,MAAM;IAE1B,MAAM,QAAQ;sBAAE;qBAAc;mBAAa;gBAAW;eAAQ;IAAM;IACpE,OAAO,CAAA,GAAA,sBAAA,EAAE,0CAAoB,QAAQ,EAAE;eAAE;IAAM,GAAG,CAAA,GAAA,sBAAA,EAAE,UAAU;AAChE;AAEA,MAAM,2CAAmB,SAAU,KAAK;IACtC,MAAM,gBAAE,YAAY,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACpC,MAAM,SAAE,KAAK,eAAE,WAAW,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,MAAM,aAAa;IACzB,IAAI,OAAO,MAAM,OAAO;IACxB,MAAM,CAAC,IAAI,GAAG,GAAG;IAEjB,OAAO,CAAA,GAAA,sBAAA,EAAE,UAAU;QACjB,KAAK,MAAM,SAAS;YACpB;YACA;QACA,GAAG;QACH,GAAG,IAAI;IACT;AACF;AAEA,MAAM,4CAAkB,SAAU,KAAK;IACrC,MAAM,EAAE,QAAQ,UAAU,EAAE,GAAG,MAAM,GAAG;IACxC,MAAM,eAAE,WAAW,EAAE,GAAG,CAAA,GAAA,iBAAS,EAAE;IACnC,OAAO,CAAA,GAAA,sBAAA,EAAE,QAAQ;QACf,GAAG,YAAY;QACf,MAAM;QACN,GAAG,IAAI;IACT;AACF;AAEA,MAAM,2CAAiB,IAAM,CAAA,GAAA,iBAAS,EAAE","sources":["packages/column-views/src/facets/carbon-isotopes/data-area.ts"],"sourcesContent":["import { line } from \"d3-shape\";\nimport { createContext, useContext } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { ColumnLayoutContext } from \"@macrostrat/column-components\";\nimport { useCompositeScale } from \"../../data-provider\";\n\nconst inDomain = (scale, num) => {\n const domain = scale.domain();\n return domain[0] < num < domain[1];\n};\n\nconst createPointLocator = function (opts) {\n const { xScale, scale, getHeight, ...rest } = opts;\n return function (d, s = 0) {\n const height = getHeight(d);\n if (!inDomain(scale, height)) return null;\n return [xScale(d.value), scale(height)];\n };\n};\n\nconst IsotopesDataContext = createContext(null);\n\nexport interface DataAreaProps {\n clipY: boolean;\n parameter: string;\n corrected: boolean;\n system: string;\n children: React.ReactNode;\n getHeight?: Function;\n}\n\nconst IsotopesDataArea = function (props: DataAreaProps) {\n const xScale = useContext(ColumnLayoutContext)?.xScale;\n\n const scale = useCompositeScale();\n\n let { corrected, system, children, getHeight, clipY = false } = props;\n if (getHeight == null) {\n getHeight = function (d) {\n if (d.height == null) {\n console.log(d);\n }\n return d.height;\n };\n }\n\n // Handlers for creating points and lines\n const pointLocator = createPointLocator({\n xScale,\n scale,\n corrected,\n system,\n getHeight,\n });\n\n let column = \"avg_\" + system;\n if (corrected) {\n column += \"_corr\";\n }\n const lineLocator = line()\n .x((d) => xScale(d[column]))\n // @ts-ignore\n .y((d) => scale(d.height));\n\n const value = { pointLocator, lineLocator, corrected, system, clipY };\n return h(IsotopesDataContext.Provider, { value }, h(\"g.data\", children));\n};\n\nconst IsotopeDataPoint = function (props) {\n const { pointLocator } = useContext(IsotopesDataContext);\n const { datum, strokeWidth, ...rest } = props;\n const loc = pointLocator(datum);\n if (loc == null) return null;\n const [cx, cy] = loc;\n\n return h(\"circle\", {\n key: datum.sample_id,\n cx,\n cy,\n r: 2,\n ...rest,\n });\n};\n\nconst IsotopeDataLine = function (props) {\n const { values: lineValues, ...rest } = props;\n const { lineLocator } = useContext(IsotopesDataContext);\n return h(\"path\", {\n d: lineLocator(lineValues),\n fill: \"transparent\",\n ...rest,\n });\n};\n\nconst useDataLocator = () => useContext(IsotopesDataContext);\n\nexport { IsotopesDataArea, IsotopeDataPoint, IsotopeDataLine, useDataLocator };\n"],"names":[],"version":3,"file":"column-views.d6c0b7bc.js.map"}
@@ -1,4 +1,4 @@
1
- import {CorrelationChart as $ed7dc56184962590$export$9ebf875c09445bec} from "./column-views.ee525e88.js";
1
+ import {CorrelationChart as $ed7dc56184962590$export$9ebf875c09445bec} from "./column-views.107b47b4.js";
2
2
  import {parseLineFromString as $c491b6231216b7f9$export$77c3cc7a57c6db5f, stringifyLine as $c491b6231216b7f9$export$8c53992169ff5301} from "./column-views.beb54e95.js";
3
3
 
4
4
 
@@ -6,4 +6,4 @@ import {parseLineFromString as $c491b6231216b7f9$export$77c3cc7a57c6db5f, string
6
6
 
7
7
 
8
8
  export {$ed7dc56184962590$export$9ebf875c09445bec as CorrelationChart, $c491b6231216b7f9$export$77c3cc7a57c6db5f as parseLineFromString, $c491b6231216b7f9$export$8c53992169ff5301 as stringifyLine};
9
- //# sourceMappingURL=column-views.44d3797a.js.map
9
+ //# sourceMappingURL=column-views.dc195174.js.map
@@ -1 +1 @@
1
- {"mappings":"","sources":["packages/column-views/src/correlation-chart/index.ts"],"sourcesContent":["export * from \"./main\";\nexport * from \"./hash-string\";\n"],"names":[],"version":3,"file":"column-views.44d3797a.js.map"}
1
+ {"mappings":"","sources":["packages/column-views/src/correlation-chart/index.ts"],"sourcesContent":["export * from \"./main\";\nexport * from \"./hash-string\";\n"],"names":[],"version":3,"file":"column-views.dc195174.js.map"}