@macrostrat/column-views 1.0.3 → 2.0.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 (258) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/esm/{data-area.daff8da0.js → column-views.062d164a.js} +1 -1
  3. package/dist/esm/{data-area.daff8da0.js.map → column-views.062d164a.js.map} +1 -1
  4. package/dist/esm/{data-provider.1506eb64.js → column-views.07521ce6.js} +1 -1
  5. package/dist/esm/column-views.07521ce6.js.map +1 -0
  6. package/dist/esm/column-views.134b2e2a.js +9 -0
  7. package/dist/esm/column-views.134b2e2a.js.map +1 -0
  8. package/dist/esm/{selection-popover.module.0a701258.css → column-views.16cc7a58.css} +11 -8
  9. package/dist/esm/column-views.16cc7a58.css.map +1 -0
  10. package/dist/esm/column-views.1c589cc4.js +141 -0
  11. package/dist/esm/column-views.1c589cc4.js.map +1 -0
  12. package/dist/esm/column-views.1ece326b.js +420 -0
  13. package/dist/esm/column-views.1ece326b.js.map +1 -0
  14. package/dist/esm/column-views.1edc7300.js +40 -0
  15. package/dist/esm/column-views.1edc7300.js.map +1 -0
  16. package/dist/esm/column-views.240ef158.css +159 -0
  17. package/dist/esm/column-views.240ef158.css.map +1 -0
  18. package/dist/esm/column-views.25471fe0.css +111 -0
  19. package/dist/esm/column-views.25471fe0.css.map +1 -0
  20. package/dist/esm/column-views.28ee5f43.js +288 -0
  21. package/dist/esm/column-views.28ee5f43.js.map +1 -0
  22. package/dist/esm/column-views.30646469.js +118 -0
  23. package/dist/esm/column-views.30646469.js.map +1 -0
  24. package/dist/esm/column-views.338a7a83.css +134 -0
  25. package/dist/esm/column-views.338a7a83.css.map +1 -0
  26. package/dist/esm/column-views.33dbc778.js +95 -0
  27. package/dist/esm/column-views.33dbc778.js.map +1 -0
  28. package/dist/esm/column-views.343b5aa2.js +98 -0
  29. package/dist/esm/column-views.343b5aa2.js.map +1 -0
  30. package/dist/esm/column-views.34636ec7.js +104 -0
  31. package/dist/esm/column-views.34636ec7.js.map +1 -0
  32. package/dist/esm/column-views.3465c8ad.js +16 -0
  33. package/dist/esm/column-views.3465c8ad.js.map +1 -0
  34. package/dist/esm/column-views.39657bbf.js +55 -0
  35. package/dist/esm/column-views.39657bbf.js.map +1 -0
  36. package/dist/esm/column-views.3b972a9b.css +4 -0
  37. package/dist/esm/{composite.module.69a38fd1.css.map → column-views.3b972a9b.css.map} +1 -1
  38. package/dist/esm/column-views.3bec70d6.js +167 -0
  39. package/dist/esm/column-views.3bec70d6.js.map +1 -0
  40. package/dist/esm/column-views.3de4dc43.js +66 -0
  41. package/dist/esm/column-views.3de4dc43.js.map +1 -0
  42. package/dist/esm/{column.db058031.js → column-views.3f4db8cb.js} +8 -8
  43. package/dist/esm/column-views.3f4db8cb.js.map +1 -0
  44. package/dist/esm/column-views.40c1f361.js +206 -0
  45. package/dist/esm/column-views.40c1f361.js.map +1 -0
  46. package/dist/esm/{composite.module.0638e7ee.js → column-views.40cd59b5.js} +1 -1
  47. package/dist/esm/{composite.module.0638e7ee.js.map → column-views.40cd59b5.js.map} +1 -1
  48. package/dist/esm/column-views.4637f4ce.js +46 -0
  49. package/dist/esm/column-views.4637f4ce.js.map +1 -0
  50. package/dist/esm/column-views.4c4c5bac.js +163 -0
  51. package/dist/esm/column-views.4c4c5bac.js.map +1 -0
  52. package/dist/esm/column-views.4d374a35.js +19 -0
  53. package/dist/esm/column-views.4d374a35.js.map +1 -0
  54. package/dist/esm/column-views.57c4ddf3.js +125 -0
  55. package/dist/esm/column-views.57c4ddf3.js.map +1 -0
  56. package/dist/esm/column-views.58b82432.js +58 -0
  57. package/dist/esm/column-views.58b82432.js.map +1 -0
  58. package/dist/esm/column-views.5b2635fd.js +13 -0
  59. package/dist/esm/column-views.5b2635fd.js.map +1 -0
  60. package/dist/esm/column-views.5c02fee2.js +258 -0
  61. package/dist/esm/column-views.5c02fee2.js.map +1 -0
  62. package/dist/esm/column-views.5cc09c1d.js +152 -0
  63. package/dist/esm/column-views.5cc09c1d.js.map +1 -0
  64. package/dist/esm/{names.f6a4e9a4.js → column-views.650bd9f5.js} +5 -5
  65. package/dist/esm/column-views.650bd9f5.js.map +1 -0
  66. package/dist/esm/column-views.68409161.js +89 -0
  67. package/dist/esm/column-views.68409161.js.map +1 -0
  68. package/dist/esm/column-views.6a954628.js +70 -0
  69. package/dist/esm/column-views.6a954628.js.map +1 -0
  70. package/dist/esm/column-views.6c670c13.css +26 -0
  71. package/dist/esm/column-views.6c670c13.css.map +1 -0
  72. package/dist/esm/column-views.6d6b73b4.js +55 -0
  73. package/dist/esm/column-views.6d6b73b4.js.map +1 -0
  74. package/dist/esm/column-views.86c4b36f.js +222 -0
  75. package/dist/esm/column-views.86c4b36f.js.map +1 -0
  76. package/dist/esm/column-views.88de2cee.js +9 -0
  77. package/dist/esm/column-views.88de2cee.js.map +1 -0
  78. package/dist/esm/{resolvers.b5c82b78.js → column-views.8dd877af.js} +16 -3
  79. package/dist/esm/column-views.8dd877af.js.map +1 -0
  80. package/dist/esm/column-views.8e51206e.js +143 -0
  81. package/dist/esm/column-views.8e51206e.js.map +1 -0
  82. package/dist/esm/{column.module.7f47d25a.js → column-views.94b5cca1.js} +1 -1
  83. package/dist/esm/{column.module.7f47d25a.js.map → column-views.94b5cca1.js.map} +1 -1
  84. package/dist/esm/column-views.9804efda.js +75 -0
  85. package/dist/esm/column-views.9804efda.js.map +1 -0
  86. package/dist/esm/column-views.9bdd477a.js +57 -0
  87. package/dist/esm/column-views.9bdd477a.js.map +1 -0
  88. package/dist/esm/column-views.9ced149e.js +98 -0
  89. package/dist/esm/column-views.9ced149e.js.map +1 -0
  90. package/dist/esm/{column.module.cbb072df.css → column-views.a7be0a4a.css} +1 -1
  91. package/dist/esm/{column.module.cbb072df.css.map → column-views.a7be0a4a.css.map} +1 -1
  92. package/dist/esm/column-views.a98214b2.js +9 -0
  93. package/dist/esm/column-views.a98214b2.js.map +1 -0
  94. package/dist/esm/column-views.aa9fcdba.js +221 -0
  95. package/dist/esm/column-views.aa9fcdba.js.map +1 -0
  96. package/dist/esm/{isotopes-column.7cb5cc45.js → column-views.ac9fb5e1.js} +3 -3
  97. package/dist/esm/{isotopes-column.7cb5cc45.js.map → column-views.ac9fb5e1.js.map} +1 -1
  98. package/dist/esm/column-views.b2e5f1d9.js +11 -0
  99. package/dist/esm/column-views.b2e5f1d9.js.map +1 -0
  100. package/dist/esm/column-views.b775c0a3.js +112 -0
  101. package/dist/esm/column-views.b775c0a3.js.map +1 -0
  102. package/dist/esm/column-views.beb54e95.js +39 -0
  103. package/dist/esm/column-views.beb54e95.js.map +1 -0
  104. package/dist/esm/{core.4db8e452.js → column-views.c58aad3f.js} +15 -16
  105. package/dist/esm/column-views.c58aad3f.js.map +1 -0
  106. package/dist/esm/{carbon-isotopes.3b502a9e.js → column-views.d1ad48eb.js} +4 -4
  107. package/dist/esm/{carbon-isotopes.3b502a9e.js.map → column-views.d1ad48eb.js.map} +1 -1
  108. package/dist/esm/column-views.dc42f5d0.js +48 -0
  109. package/dist/esm/column-views.dc42f5d0.js.map +1 -0
  110. package/dist/esm/column-views.dff52504.js +22 -0
  111. package/dist/esm/column-views.dff52504.js.map +1 -0
  112. package/dist/esm/column-views.e2b9c23c.css +33 -0
  113. package/dist/esm/column-views.e2b9c23c.css.map +1 -0
  114. package/dist/esm/column-views.e40b8bfb.css +14 -0
  115. package/dist/esm/column-views.e40b8bfb.css.map +1 -0
  116. package/dist/esm/column-views.e77b9d6b.js +170 -0
  117. package/dist/esm/column-views.e77b9d6b.js.map +1 -0
  118. package/dist/esm/column-views.ea237aa8.js +52 -0
  119. package/dist/esm/column-views.ea237aa8.js.map +1 -0
  120. package/dist/esm/column-views.edf77621.js +22 -0
  121. package/dist/esm/column-views.edf77621.js.map +1 -0
  122. package/dist/esm/column-views.f1efcc2c.js +9 -0
  123. package/dist/esm/column-views.f1efcc2c.js.map +1 -0
  124. package/dist/esm/column-views.f2e5a72f.js +66 -0
  125. package/dist/esm/column-views.f2e5a72f.js.map +1 -0
  126. package/dist/esm/column-views.f71ec4b4.js +127 -0
  127. package/dist/esm/column-views.f71ec4b4.js.map +1 -0
  128. package/dist/esm/column-views.f9dab157.js +3 -0
  129. package/dist/esm/column-views.f9dab157.js.map +1 -0
  130. package/dist/esm/column-views.fa6f3292.js +215 -0
  131. package/dist/esm/column-views.fa6f3292.js.map +1 -0
  132. package/dist/esm/column-views.fc2b4611.js +9 -0
  133. package/dist/esm/column-views.fc2b4611.js.map +1 -0
  134. package/dist/esm/index.d.ts +797 -130
  135. package/dist/esm/index.d.ts.map +1 -1
  136. package/dist/esm/index.js +13 -9
  137. package/dist/esm/index.js.map +1 -1
  138. package/dist/node/index.js +1 -1
  139. package/dist/node/index.js.map +1 -1
  140. package/package.json +29 -13
  141. package/src/age-axis.module.sass +27 -0
  142. package/src/age-axis.ts +82 -19
  143. package/src/age-model-overlay.module.sass +11 -0
  144. package/src/age-model-overlay.ts +73 -0
  145. package/src/carbon-isotopes/column.ts +4 -2
  146. package/src/carbon-isotopes/core.ts +9 -6
  147. package/src/carbon-isotopes/data-provider.ts +3 -3
  148. package/src/column.module.sass +58 -49
  149. package/src/column.ts +149 -135
  150. package/src/correlation-chart/hash-string.ts +57 -0
  151. package/src/correlation-chart/index.ts +2 -0
  152. package/src/correlation-chart/main.module.sass +122 -0
  153. package/src/correlation-chart/main.ts +305 -0
  154. package/src/correlation-chart/prepare-data.ts +217 -0
  155. package/src/correlation-chart/stories/correlation-chart.stories.ts +192 -0
  156. package/src/correlation-chart/stories/stories.module.sass +18 -0
  157. package/src/correlation-chart/unconformity-line.module.sass +8 -0
  158. package/src/correlation-chart/unconformity-line.ts +25 -0
  159. package/src/data-provider/base.ts +388 -0
  160. package/src/data-provider/column-nav.ts +53 -0
  161. package/src/data-provider/fetch.ts +231 -0
  162. package/src/data-provider/index.ts +4 -0
  163. package/src/data-provider/store.ts +72 -0
  164. package/src/index.ts +5 -3
  165. package/src/maps/_shared/index.ts +2 -0
  166. package/src/maps/_shared/inset-map.stories.ts +20 -0
  167. package/src/maps/_shared/inset-map.ts +87 -0
  168. package/src/maps/_shared/styles.ts +57 -0
  169. package/src/maps/column-correlation/column-correlation-map.stories.ts +96 -0
  170. package/src/maps/column-correlation/core.ts +225 -0
  171. package/src/maps/column-correlation/index.ts +2 -0
  172. package/src/maps/column-correlation/state.ts +192 -0
  173. package/src/maps/column-navigation/index.ts +2 -0
  174. package/src/maps/column-navigation/mapbox/column-navigation-map.stories.ts +102 -0
  175. package/src/maps/column-navigation/mapbox/index.ts +219 -0
  176. package/src/maps/column-navigation/mapbox/keyboard-navigation.ts +119 -0
  177. package/src/maps/column-navigation/mapbox/state.ts +109 -0
  178. package/src/maps/column-navigation/svg/column-navigation-svg-map.stories.ts +46 -0
  179. package/src/{map → maps/column-navigation/svg}/index.ts +18 -6
  180. package/src/{map → maps/column-navigation/svg}/layers.ts +28 -109
  181. package/src/maps/column-navigation/utils/keyboard-navigation.ts +58 -0
  182. package/src/maps/index.ts +3 -0
  183. package/src/prepare-units/composite-scale.ts +353 -0
  184. package/src/prepare-units/helpers.ts +226 -0
  185. package/src/prepare-units/index.ts +177 -0
  186. package/src/prepare-units/utils.ts +98 -0
  187. package/src/section.ts +264 -84
  188. package/src/unit-details/index.ts +2 -215
  189. package/src/unit-details/{index.module.sass → panel.module.sass} +39 -8
  190. package/src/unit-details/panel.ts +523 -0
  191. package/src/{selection-popover.module.sass → unit-details/popover.module.sass} +4 -2
  192. package/src/unit-details/popover.ts +82 -0
  193. package/src/units/boxes.module.sass +16 -0
  194. package/src/units/boxes.ts +243 -90
  195. package/src/units/colors.ts +64 -0
  196. package/src/units/composite.ts +157 -152
  197. package/src/units/index.ts +76 -9
  198. package/src/units/names.ts +8 -4
  199. package/src/units/resolvers.ts +12 -1
  200. package/src/units/selection.ts +115 -101
  201. package/src/units/types.ts +5 -16
  202. package/dist/esm/age-axis.64c509ee.js +0 -41
  203. package/dist/esm/age-axis.64c509ee.js.map +0 -1
  204. package/dist/esm/boxes.13968b76.js +0 -164
  205. package/dist/esm/boxes.13968b76.js.map +0 -1
  206. package/dist/esm/boxes.module.28873d08.css +0 -4
  207. package/dist/esm/boxes.module.28873d08.css.map +0 -1
  208. package/dist/esm/boxes.module.605bdcd6.js +0 -13
  209. package/dist/esm/boxes.module.605bdcd6.js.map +0 -1
  210. package/dist/esm/column.8dd26e1a.js +0 -149
  211. package/dist/esm/column.8dd26e1a.js.map +0 -1
  212. package/dist/esm/column.db058031.js.map +0 -1
  213. package/dist/esm/column.module.039d872c.css +0 -151
  214. package/dist/esm/column.module.039d872c.css.map +0 -1
  215. package/dist/esm/column.module.e632868a.js +0 -19
  216. package/dist/esm/column.module.e632868a.js.map +0 -1
  217. package/dist/esm/composite.608a4ca2.js +0 -153
  218. package/dist/esm/composite.608a4ca2.js.map +0 -1
  219. package/dist/esm/composite.module.69a38fd1.css +0 -4
  220. package/dist/esm/core.4db8e452.js.map +0 -1
  221. package/dist/esm/data-provider.1506eb64.js.map +0 -1
  222. package/dist/esm/helpers.8a03cfc7.js +0 -94
  223. package/dist/esm/helpers.8a03cfc7.js.map +0 -1
  224. package/dist/esm/index.module.0844afd8.css +0 -65
  225. package/dist/esm/index.module.0844afd8.css.map +0 -1
  226. package/dist/esm/index.module.24fe3a2e.js +0 -37
  227. package/dist/esm/index.module.24fe3a2e.js.map +0 -1
  228. package/dist/esm/layers.ad5fd25d.js +0 -231
  229. package/dist/esm/layers.ad5fd25d.js.map +0 -1
  230. package/dist/esm/map.7aa26f17.js +0 -82
  231. package/dist/esm/map.7aa26f17.js.map +0 -1
  232. package/dist/esm/names.f6a4e9a4.js.map +0 -1
  233. package/dist/esm/providers.cd1e652f.js +0 -25
  234. package/dist/esm/providers.cd1e652f.js.map +0 -1
  235. package/dist/esm/resolvers.b5c82b78.js.map +0 -1
  236. package/dist/esm/section.cc1b1100.js +0 -118
  237. package/dist/esm/section.cc1b1100.js.map +0 -1
  238. package/dist/esm/selection-popover.17d1bd55.js +0 -60
  239. package/dist/esm/selection-popover.17d1bd55.js.map +0 -1
  240. package/dist/esm/selection-popover.module.0a701258.css.map +0 -1
  241. package/dist/esm/selection-popover.module.e22f5183.js +0 -22
  242. package/dist/esm/selection-popover.module.e22f5183.js.map +0 -1
  243. package/dist/esm/selection.bbf26d0e.js +0 -117
  244. package/dist/esm/selection.bbf26d0e.js.map +0 -1
  245. package/dist/esm/store.25eaa168.js +0 -18
  246. package/dist/esm/store.25eaa168.js.map +0 -1
  247. package/dist/esm/types.f016e032.js +0 -18
  248. package/dist/esm/types.f016e032.js.map +0 -1
  249. package/dist/esm/unit-details.56ff8b70.js +0 -209
  250. package/dist/esm/unit-details.56ff8b70.js.map +0 -1
  251. package/dist/esm/units.361088d4.js +0 -42
  252. package/dist/esm/units.361088d4.js.map +0 -1
  253. package/src/helpers.ts +0 -133
  254. package/src/providers.ts +0 -34
  255. package/src/selection-popover.ts +0 -71
  256. package/src/store.ts +0 -12
  257. package/src/units/units.scss +0 -16
  258. /package/src/{map → maps/column-navigation/svg}/animated.ts +0 -0
@@ -0,0 +1 @@
1
+ {"mappings":"AAAA;;;;;;AAWE;EACE;;;;;;;;EAOI;;;;EAEA;;;;;AAIN;;;;;;;;AAOE;;;;AAIF;;;;;;;;;;AAUE;;;;;AAKA;;;;;AAIF;;;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BF;;;;;;;AAOE;;;;;;;;;;;;;;;AAWE;;;;;AAMF","sources":["packages/column-views/src/column.module.sass"],"sourcesContent":[".column-container, body:global(.light-mode) .column-container\n --column-background-color: var(--background-color, #fff)\n --column-stroke-color: var(--text-emphasized-color, #000)\n --column-text-color: var(--text-emphasized-color, #000)\n\n/* We have to duplicate the dark mode styles here\n because we want to set them either if the preferred\n color scheme is dark OR if dark mode is explicitly enabled.\n If dark mode is explicitly enabled, we want to override\n the media query. */\n@media (prefers-color-scheme: dark)\n body:not(:global(.light-mode)) .column-container\n --column-background-color: var(--background-color, #000)\n --column-stroke-color: var(--text-emphasized-color, #fff)\n --column-text-color: var(--text-emphasized-color, #fff)\n color-scheme: dark\n color: var(--column-text-color)\n :global\n .timescale\n color: #000\n svg pattern image\n filter: invert(100%)\n\nbody:global(.dark-mode) .column-container\n --column-background-color: var(--background-color, #000)\n --column-stroke-color: var(--text-emphasized-color, #fff)\n --column-text-color: var(--text-emphasized-color, #fff)\n color-scheme: dark\n color: var(--column-text-color)\n :global\n .timescale\n color: #000\n svg pattern image\n filter: invert(100%)\n\n.column-container :global\n .column\n display: flex\n flex-direction: row\n position: relative\n\n .unit\n stroke: var(--column-stroke-color)\n stroke-width: 1px\n\n .selection-overlay\n fill: var(--selection-overlay-color, red)\n fill-opacity: var(--selection-overlay-opacity, 0.5)\n\n g.lithology-column use.frame\n stroke: var(--column-stroke-color)\n stroke-width: 1.5px !important\n pointer-events: none\n\n.column-container :global .unit-label\n text-align: center\n\n.column-container :global .col-note-label\n font-size: 10px\n margin-top: 3px\n padding: 2px\n padding-left: 3px\n line-height: 9px\n border-left: none !important\n\n.column-container :global g.height-range\n display: none\n\n.column-container :global .note-inner\n border: none\n\n.column-container :global .frame rect\n fill: transparent\n\n.column-container :global .default-buttons\n width: 100%\n margin: 0 -10px\n\n.column-container :global div.section\n display: flex\n flex-direction: row\n\n.column-container :global .section .divisions .unit\n cursor: pointer\n\n.column-container :global(.timescale)\n width: calc(calc(1.5em + 1.5px) * var(--timescale-level-count, 4))\n --timescale-level-size: 1.5em\n\n.timescale-column\n position: relative\n\n.section-main\n position: relative\n margin-bottom: -4px\n\n.section-units-container\n position: relative\n\n.main-column\n position: relative\n\n.unconformity-labels\n position: absolute\n top: 0\n left: 0\n pointer-events: none\n\n\n.unconformity\n text-align: center\n position: absolute\n top: 0px\n display: flex\n justify-content: center\n align-items: center\n font-size: 0.8em\n &.giga\n font-weight: 800\n font-size: 1em\n &.mega\n font-weight: 600\n font-weight: 700\n font-size: 0.9em\n &.large\n font-weight: 600\n &.small\n font-weight: 300\n\n\n.unconformity-text\n width: var(--column-width)\n color: var(--column-stroke-color)\n --unit-font-style: normal\n\n\n"],"names":[],"version":3,"file":"column-views.240ef158.css.map"}
@@ -0,0 +1,111 @@
1
+ .XUD4UG_legend-panel-header {
2
+ border-bottom: 1px solid var(--panel-rule-color);
3
+ background-color: var(--panel-secondary-background-color);
4
+ z-index: 50;
5
+ justify-content: space-between;
6
+ align-items: baseline;
7
+ gap: 1em;
8
+ padding: .5em 1em;
9
+ display: flex;
10
+ position: sticky;
11
+ top: 0;
12
+ }
13
+
14
+ .XUD4UG_legend-panel-header .XUD4UG_title-container {
15
+ flex-direction: row;
16
+ align-items: center;
17
+ gap: .5em;
18
+ margin: -.5em 0;
19
+ display: flex;
20
+ }
21
+
22
+ .XUD4UG_legend-panel-header .XUD4UG_title-container:hover .XUD4UG_hidden-actions {
23
+ opacity: .5;
24
+ display: flex;
25
+ }
26
+
27
+ .XUD4UG_legend-panel-header .XUD4UG_title-container h1, .XUD4UG_legend-panel-header .XUD4UG_title-container h2, .XUD4UG_legend-panel-header .XUD4UG_title-container h3 {
28
+ margin: .5em 0;
29
+ }
30
+
31
+ .XUD4UG_legend-panel-header .XUD4UG_title-container .XUD4UG_hidden-actions {
32
+ display: none;
33
+ }
34
+
35
+ .XUD4UG_legend-panel-header .XUD4UG_title-container button {
36
+ transform: translateY(0);
37
+ }
38
+
39
+ .XUD4UG_legend-panel-header code {
40
+ color: var(--secondary-color);
41
+ font-size: .9em;
42
+ }
43
+
44
+ .XUD4UG_legend-panel-header .XUD4UG_spacer {
45
+ flex: 1;
46
+ }
47
+
48
+ .XUD4UG_legend-panel-header button {
49
+ line-height: 1.5;
50
+ transform: translateY(2px);
51
+ }
52
+
53
+ .XUD4UG_unit-details-panel {
54
+ flex-direction: column;
55
+ display: flex;
56
+ }
57
+
58
+ .XUD4UG_unit-details-panel .XUD4UG_unit-details-content-holder {
59
+ flex: 1;
60
+ overflow-y: scroll;
61
+ }
62
+
63
+ .XUD4UG_unit-details-content {
64
+ margin: 1em;
65
+ position: relative;
66
+ }
67
+
68
+ .XUD4UG_proportion, .XUD4UG_sep, .XUD4UG_no-units {
69
+ color: var(--secondary-color);
70
+ font-style: italic;
71
+ }
72
+
73
+ .XUD4UG_strat-name-id, .XUD4UG_unit-id {
74
+ font-family: var(--monospace-font);
75
+ color: var(--secondary-color);
76
+ }
77
+
78
+ .XUD4UG_strat-name-id:before, .XUD4UG_unit-id:before {
79
+ content: "#";
80
+ color: var(--tertiary-color);
81
+ }
82
+
83
+ .XUD4UG_color-swatch {
84
+ border: 1px solid var(--panel-rule-color);
85
+ border-radius: .2em;
86
+ width: 1em;
87
+ height: 1em;
88
+ margin-right: .2em;
89
+ display: inline-block;
90
+ }
91
+
92
+ .XUD4UG_refs {
93
+ margin: 0;
94
+ padding-left: 0;
95
+ list-style: none;
96
+ }
97
+
98
+ .XUD4UG_interval-proportions {
99
+ text-align: right;
100
+ flex-grow: 1;
101
+ width: 100%;
102
+ }
103
+
104
+ .XUD4UG_interval-proportions .XUD4UG_discourage-break {
105
+ white-space: nowrap;
106
+ }
107
+
108
+ .XUD4UG_interval-proportions .XUD4UG_sep {
109
+ margin: 0 .3em;
110
+ }
111
+ /*# sourceMappingURL=column-views.25471fe0.css.map */
@@ -0,0 +1 @@
1
+ {"mappings":"AAAA;;;;;;;;;;;;;AAWE;;;;;;;;AAOI;;;;;AAGF;;;;AAEA;;;;AAEA;;;;AAGF;;;;;AAGA;;;;AAEA;;;;;AAIF;;;;;AAGE;;;;;AAIF;;;;;AAIA;;;;;AAIA;;;;;AAIE;;;;;AAIF;;;;;;;;;AAQA;;;;;;AAKA;;;;;;AAIE;;;;AAEA","sources":["packages/column-views/src/unit-details/panel.module.sass"],"sourcesContent":[".legend-panel-header\n display: flex\n justify-content: space-between\n align-items: baseline\n gap: 1em\n border-bottom: 1px solid var(--panel-rule-color)\n position: sticky\n top: 0\n background-color: var(--panel-secondary-background-color)\n padding: 0.5em 1em\n z-index: 50\n .title-container\n display: flex\n flex-direction: row\n gap: 0.5em\n align-items: center\n margin: -0.5em 0\n &:hover\n .hidden-actions\n display: flex\n opacity: 0.5\n h1, h2, h3\n margin: 0.5em 0\n .hidden-actions\n display: none\n button\n transform: translateY(0px)\n\n code\n font-size: 0.9em\n color: var(--secondary-color)\n .spacer\n flex: 1\n button\n line-height: 1.5\n transform: translateY(2px)\n\n.unit-details-panel\n display: flex\n flex-direction: column\n .unit-details-content-holder\n flex: 1\n overflow-y: scroll\n\n.unit-details-content\n position: relative\n margin: 1em\n\n.proportion, .sep, .no-units\n color: var(--secondary-color)\n font-style: italic\n\n.strat-name-id, .unit-id\n font-family: var(--monospace-font)\n color: var(--secondary-color)\n\n &::before\n content: '#'\n color: var(--tertiary-color)\n\n.color-swatch\n width: 1em\n height: 1em\n border-radius: 0.2em\n margin-right: 0.2em\n border: 1px solid var(--panel-rule-color)\n display: inline-block\n\n.refs\n list-style: none\n margin: 0\n padding-left: 0\n\n.interval-proportions\n flex-grow: 1\n width: 100%\n text-align: right\n .discourage-break\n white-space: nowrap\n .sep\n margin: 0 0.3em\n\n"],"names":[],"version":3,"file":"column-views.25471fe0.css.map"}
@@ -0,0 +1,288 @@
1
+ import {fetchRefs as $33a46f9423c8104a$export$cd7bfa0860f58b96, fetchAllColumns as $33a46f9423c8104a$export$45bd78cd093090fa, fetchLithologies as $33a46f9423c8104a$export$1aa679bd5e605f82, fetchEnvironments as $33a46f9423c8104a$export$780b4b253712916c, fetchIntervals as $33a46f9423c8104a$export$5d2ec2e733dfe6c7} from "./column-views.5cc09c1d.js";
2
+ import {useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d} from "./column-views.ea237aa8.js";
3
+ import $8Y44A$crossfetch from "cross-fetch";
4
+ import {useContext as $8Y44A$useContext, useEffect as $8Y44A$useEffect, useMemo as $8Y44A$useMemo, useState as $8Y44A$useState, createContext as $8Y44A$createContext} from "react";
5
+ import $8Y44A$macrostrathyper from "@macrostrat/hyper";
6
+ import {create as $8Y44A$create, useStore as $8Y44A$useStore} from "zustand";
7
+ import {APIProvider as $8Y44A$APIProvider} from "@macrostrat/ui-components";
8
+ import {ColumnProvider as $8Y44A$ColumnProvider} from "@macrostrat/column-components";
9
+
10
+ /** Data provider for information that needs to be loaded in bulk for frontend views */
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ function $774a5efa27d1c77b$var$createMacrostratStore(baseURL = "https://macrostrat.org/api/v2") {
19
+ return (0, $8Y44A$create)((set, get)=>{
20
+ return {
21
+ baseURL: baseURL,
22
+ inFlightRequests: new Set(),
23
+ async fetch (url, options) {
24
+ const url1 = baseURL + url;
25
+ // Avoid duplicate requests
26
+ const { inFlightRequests: inFlightRequests } = get();
27
+ if (inFlightRequests.has(url1)) return null; // Return null if already in flight
28
+ inFlightRequests.add(url1);
29
+ //set({ inFlightRequests });
30
+ const res = await (0, $8Y44A$crossfetch)(url1, options);
31
+ inFlightRequests.delete(url1);
32
+ //set({in})
33
+ return res;
34
+ },
35
+ ...$774a5efa27d1c77b$var$createLithologiesSlice(set, get),
36
+ ...$774a5efa27d1c77b$var$createIntervalsSlice(set, get),
37
+ ...$774a5efa27d1c77b$var$createEnvironmentsSlice(set, get),
38
+ ...$774a5efa27d1c77b$var$createColumnsSlice(set, get),
39
+ ...$774a5efa27d1c77b$var$createRefsSlice(set, get)
40
+ };
41
+ });
42
+ }
43
+ function $774a5efa27d1c77b$var$createRefsSlice(set, get) {
44
+ return {
45
+ refs: new Map(),
46
+ async getRefs (ids) {
47
+ const { refs: refs, fetch: fetch } = get();
48
+ const missing = ids.filter((id)=>!refs.has(id));
49
+ if (missing.length == 0) return ids.map((id)=>refs.get(id));
50
+ const data = await (0, $33a46f9423c8104a$export$cd7bfa0860f58b96)(missing, fetch);
51
+ if (data == null) return [];
52
+ for (const d of data)refs.set(d.ref_id, d);
53
+ set({
54
+ refs: refs
55
+ });
56
+ return ids.map((id)=>refs.get(id));
57
+ }
58
+ };
59
+ }
60
+ function $774a5efa27d1c77b$var$createColumnsSlice(set, get) {
61
+ // Column footprints separated by project
62
+ return {
63
+ columnFootprints: new Map(),
64
+ async getColumns (projectID, inProcess) {
65
+ const { columnFootprints: columnFootprints, baseURL: baseURL, fetch: fetch } = get();
66
+ const key = projectID ?? -1;
67
+ let _inProcess = inProcess;
68
+ if (projectID == null) // If no project is specified, in process columns cannot be included
69
+ _inProcess = false;
70
+ let footprints = columnFootprints.get(key);
71
+ if (footprints == null || footprints.inProcess != _inProcess) {
72
+ // Fetch the columns
73
+ const statusCode = inProcess ? "in process" : null;
74
+ let columns = await (0, $33a46f9423c8104a$export$45bd78cd093090fa)({
75
+ projectID: projectID,
76
+ statusCode: null,
77
+ fetch: fetch
78
+ });
79
+ if (columns == null) return;
80
+ if (_inProcess) {
81
+ const inProcessColumns = await (0, $33a46f9423c8104a$export$45bd78cd093090fa)({
82
+ projectID: projectID,
83
+ statusCode: "in process",
84
+ fetch: fetch
85
+ });
86
+ if (inProcessColumns == null) return;
87
+ // Combine active and in-process columns
88
+ columns = columns.concat(inProcessColumns);
89
+ }
90
+ footprints = {
91
+ project_id: projectID,
92
+ inProcess: inProcess,
93
+ columns: columns
94
+ };
95
+ // We could break multi-project result sets into separate caches here...
96
+ // Copy the original map
97
+ const columnFootprints2 = new Map(columnFootprints);
98
+ columnFootprints2.set(key, footprints);
99
+ set({
100
+ columnFootprints: columnFootprints2
101
+ });
102
+ }
103
+ return footprints.columns;
104
+ }
105
+ };
106
+ }
107
+ function $774a5efa27d1c77b$var$createLithologiesSlice(set, get) {
108
+ return {
109
+ lithologies: null,
110
+ async getLithologies (ids) {
111
+ const { lithologies: lithologies, fetch: fetch } = get();
112
+ let lithMap = lithologies;
113
+ if (lithMap == null) {
114
+ const data = await (0, $33a46f9423c8104a$export$1aa679bd5e605f82)(fetch);
115
+ if (data == null) return;
116
+ lithMap = new Map(data.map((d)=>[
117
+ d.lith_id,
118
+ d
119
+ ]));
120
+ set({
121
+ lithologies: lithMap
122
+ });
123
+ }
124
+ // Now get the lithologies
125
+ if (ids == null) return lithMap.values();
126
+ return ids.map((id)=>lithMap.get(id));
127
+ }
128
+ };
129
+ }
130
+ function $774a5efa27d1c77b$var$createEnvironmentsSlice(set, get) {
131
+ return {
132
+ environments: null,
133
+ async getEnvironments (ids) {
134
+ const { environments: environments, fetch: fetch } = get();
135
+ let envMap = environments;
136
+ if (envMap == null) {
137
+ const data = await (0, $33a46f9423c8104a$export$780b4b253712916c)(fetch);
138
+ if (data == null) return [];
139
+ envMap = new Map(data.map((d)=>[
140
+ d.environ_id,
141
+ d
142
+ ]));
143
+ set({
144
+ environments: envMap
145
+ });
146
+ }
147
+ // Now get the environments
148
+ if (ids == null) return envMap.values();
149
+ return ids.map((id)=>envMap.get(id));
150
+ }
151
+ };
152
+ }
153
+ function $774a5efa27d1c77b$var$createIntervalsSlice(set, get) {
154
+ return {
155
+ intervals: null,
156
+ async getIntervals (ids, timescaleID) {
157
+ const { intervals: intervals, fetch: fetch } = get();
158
+ let _intervals = intervals;
159
+ if (intervals == null || !$774a5efa27d1c77b$var$includesTimescale(intervals, timescaleID)) {
160
+ // Fetch the intervals
161
+ const data = await (0, $33a46f9423c8104a$export$5d2ec2e733dfe6c7)(timescaleID, fetch);
162
+ if (data == null) return [];
163
+ const intervalMap = intervals ?? new Map();
164
+ for (const d of data)intervalMap.set(d.int_id, d);
165
+ _intervals = intervalMap;
166
+ set({
167
+ intervals: _intervals
168
+ });
169
+ }
170
+ if (ids == null && timescaleID == null) return Array.from(_intervals.values());
171
+ if (timescaleID != null) return Array.from(_intervals.values()).filter((d)=>d.timescale_id == timescaleID);
172
+ return ids.map((id)=>intervals.get(id));
173
+ }
174
+ };
175
+ }
176
+ function $774a5efa27d1c77b$var$includesTimescale(intervals, timescaleID) {
177
+ if (intervals == null) return false;
178
+ if (timescaleID == null) return true;
179
+ return Array.from(intervals.values()).some((d)=>d.timescale_id == timescaleID);
180
+ }
181
+ function $774a5efa27d1c77b$export$fb98d5bae3a6800(selector) {
182
+ const ctx = (0, $8Y44A$useContext)($774a5efa27d1c77b$var$MacrostratDataProviderContext);
183
+ if (ctx == null) throw new Error("Missing MacrostratDataProvider");
184
+ if (selector === "api") return ctx;
185
+ return (0, $8Y44A$useStore)(ctx, selector);
186
+ }
187
+ const $774a5efa27d1c77b$var$dataTypeMapping = {
188
+ lithologies: (store)=>store.getLithologies,
189
+ intervals: (store)=>store.getIntervals,
190
+ columns: (store)=>store.getColumns,
191
+ environments: (store)=>store.getEnvironments,
192
+ refs: (store)=>store.getRefs
193
+ };
194
+ function $774a5efa27d1c77b$export$89dd4e5ae4a82373(dataType) {
195
+ if (dataType == "columns") throw new Error("Columns are not provided as a map");
196
+ const operator = $774a5efa27d1c77b$export$fb98d5bae3a6800($774a5efa27d1c77b$var$dataTypeMapping[dataType]);
197
+ (0, $8Y44A$useEffect)(()=>{
198
+ operator();
199
+ }, []);
200
+ return $774a5efa27d1c77b$export$fb98d5bae3a6800((state)=>state[dataType]);
201
+ }
202
+ function $774a5efa27d1c77b$export$81eaae0b474404fd(projectID, inProcess) {
203
+ const getColumns = $774a5efa27d1c77b$export$fb98d5bae3a6800((s)=>s.getColumns);
204
+ const columnsMap = $774a5efa27d1c77b$export$fb98d5bae3a6800((s)=>s.columnFootprints);
205
+ const key = projectID ?? -1;
206
+ const colData = columnsMap?.get(key);
207
+ (0, $8Y44A$useEffect)(()=>{
208
+ // Refetch if the columns are not available, or if we have requested inProcess columns where we didn't before
209
+ if (colData == null || inProcess && !colData.inProcess) getColumns(projectID, inProcess);
210
+ // If we've already fetched the columns there's nothing to do...
211
+ }, [
212
+ colData,
213
+ inProcess,
214
+ getColumns
215
+ ]);
216
+ return (0, $8Y44A$useMemo)(()=>{
217
+ if (colData == null) return null;
218
+ let columns = colData.columns;
219
+ if (!inProcess && colData.inProcess) // Our available set of columns includes 'in process' columns, but we don't want them
220
+ columns.features = columns.features?.filter((d)=>d.properties.status != "in process");
221
+ return columns;
222
+ }, [
223
+ colData,
224
+ inProcess
225
+ ]);
226
+ }
227
+ function $774a5efa27d1c77b$export$b9c9fc603d74a555(dataType, ...args) {
228
+ const selector = $774a5efa27d1c77b$var$dataTypeMapping[dataType];
229
+ const operator = $774a5efa27d1c77b$export$fb98d5bae3a6800(selector);
230
+ const [value, setValue] = (0, $8Y44A$useState)(null);
231
+ (0, $8Y44A$useEffect)(()=>{
232
+ operator(...args).then(setValue);
233
+ }, [
234
+ operator,
235
+ ...args
236
+ ]);
237
+ return value;
238
+ }
239
+ /** By default, we provide a store linked to the production API */ const $774a5efa27d1c77b$var$MacrostratDataProviderContext = (0, $8Y44A$createContext)($774a5efa27d1c77b$var$createMacrostratStore());
240
+ function $774a5efa27d1c77b$export$690613f93cdc5576(props) {
241
+ const { baseURL: baseURL = "https://macrostrat.org/api/v2", children: children } = props;
242
+ const [store] = (0, $8Y44A$useState)(()=>$774a5efa27d1c77b$var$createMacrostratStore(baseURL));
243
+ return (0, $8Y44A$macrostrathyper)($774a5efa27d1c77b$export$3098013bc6cc316d, {
244
+ baseURL: baseURL
245
+ }, (0, $8Y44A$macrostrathyper)($774a5efa27d1c77b$var$MacrostratDataProviderContext.Provider, {
246
+ value: store
247
+ }, children));
248
+ }
249
+ function $774a5efa27d1c77b$export$3098013bc6cc316d({ children: children, useDev: useDev = false, baseURL: baseURL }) {
250
+ baseURL ??= useDev ? "https://dev2.macrostrat.org/api/v2" : "https://macrostrat.org/api/v2";
251
+ return (0, $8Y44A$macrostrathyper)((0, $8Y44A$APIProvider), {
252
+ baseURL: baseURL,
253
+ unwrapResponse: (res)=>res.success.data
254
+ }, children);
255
+ }
256
+ function $774a5efa27d1c77b$export$9e42f9b6e0d67c7d(props) {
257
+ /** A column provider specialized the Macrostrat API. Maps more
258
+ * generic concepts to Macrostrat-specific ones.
259
+ */ const { axisType: axisType } = (0, $d5074f164411387e$export$f8509b7cce386c7d)();
260
+ const { units: units, domain: domain, pixelScale: pixelScale, children: children } = props;
261
+ return (0, $8Y44A$macrostrathyper)((0, $8Y44A$ColumnProvider), {
262
+ axisType: axisType,
263
+ divisions: units,
264
+ range: domain,
265
+ pixelsPerMeter: pixelScale
266
+ }, children);
267
+ }
268
+ function $774a5efa27d1c77b$export$8492a5cae82b6a70({ children: children }) {
269
+ (0, $8Y44A$useEffect)(()=>{
270
+ console.warn("LithologiesProvider is deprecated. Replace with MacrostratDataProvider");
271
+ }, []);
272
+ return children;
273
+ }
274
+ function $774a5efa27d1c77b$export$4d18a90c945d129f() {
275
+ const getLithologies = $774a5efa27d1c77b$export$fb98d5bae3a6800((s)=>s.getLithologies);
276
+ const lithologies = $774a5efa27d1c77b$export$fb98d5bae3a6800((s)=>s.lithologies);
277
+ (0, $8Y44A$useEffect)(()=>{
278
+ if (lithologies == null) getLithologies();
279
+ }, [
280
+ lithologies,
281
+ getLithologies
282
+ ]);
283
+ return lithologies;
284
+ }
285
+
286
+
287
+ export {$774a5efa27d1c77b$export$fb98d5bae3a6800 as useMacrostratStore, $774a5efa27d1c77b$export$89dd4e5ae4a82373 as useMacrostratDefs, $774a5efa27d1c77b$export$81eaae0b474404fd as useMacrostratColumns, $774a5efa27d1c77b$export$b9c9fc603d74a555 as useMacrostratData, $774a5efa27d1c77b$export$690613f93cdc5576 as MacrostratDataProvider, $774a5efa27d1c77b$export$3098013bc6cc316d as MacrostratAPIProvider, $774a5efa27d1c77b$export$9e42f9b6e0d67c7d as MacrostratColumnProvider, $774a5efa27d1c77b$export$8492a5cae82b6a70 as LithologiesProvider, $774a5efa27d1c77b$export$4d18a90c945d129f as useLithologies};
288
+ //# sourceMappingURL=column-views.28ee5f43.js.map
@@ -0,0 +1 @@
1
+ {"mappings":"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","sources":["packages/column-views/src/data-provider/base.ts"],"sourcesContent":["/** Data provider for information that needs to be loaded in bulk for frontend views */\nimport baseFetch from \"cross-fetch\";\nimport { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport { create, useStore } from \"zustand\";\nimport {\n ColumnGeoJSONRecord,\n ColumnGeoJSONRecordWithID,\n Environment,\n MacrostratRef,\n} from \"@macrostrat/api-types\";\nimport {\n fetchAllColumns,\n fetchEnvironments,\n fetchIntervals,\n fetchLithologies,\n fetchRefs,\n} from \"./fetch\";\nimport { APIProvider } from \"@macrostrat/ui-components\";\nimport { ColumnProvider } from \"@macrostrat/column-components\";\n\nimport { ReactNode } from \"react\";\nimport { useMacrostratColumnData } from \"./store\";\n\nexport interface MacrostratDataProviderProps {\n baseURL: string;\n children: React.ReactNode;\n}\n\ninterface ColumnFootprintsStorage {\n project_id: number;\n // Whether the \"in process\" flag was used\n inProcess: boolean;\n // The column footprints\n columns: ColumnGeoJSONRecordWithID[];\n}\n\ninterface RefsSlice {\n refs: Map<number, MacrostratRef>;\n inFlightRequests: Set<string>; // Track requests to avoid duplicates\n getRefs(ids: number[]): Promise<MacrostratRef[]>;\n}\n\ninterface MacrostratStore extends RefsSlice {\n baseURL: string;\n fetch: any;\n lithologies: Map<number, any> | null;\n getLithologies(ids: number[] | null): Promise<any>;\n intervals: Map<number, any> | null;\n getIntervals(ids: number[] | null, timescaleID: number | null): Promise<any>;\n environments: Map<number, Environment> | null;\n getEnvironments(ids: number[] | null): Promise<Environment[]>;\n columnFootprints: Map<number, ColumnFootprintsStorage>;\n getColumns(\n projectID: number | null,\n inProcess: boolean\n ): Promise<ColumnGeoJSONRecord[]>;\n}\n\nfunction createMacrostratStore(\n baseURL: string = \"https://macrostrat.org/api/v2\"\n) {\n return create<MacrostratStore>((set, get): MacrostratStore => {\n return {\n baseURL,\n inFlightRequests: new Set(),\n async fetch(url: string, options?: RequestInit) {\n const url1 = baseURL + url;\n // Avoid duplicate requests\n const { inFlightRequests } = get();\n if (inFlightRequests.has(url1)) {\n return null; // Return null if already in flight\n }\n inFlightRequests.add(url1);\n //set({ inFlightRequests });\n const res = await baseFetch(url1, options);\n inFlightRequests.delete(url1);\n //set({in})\n return res;\n },\n ...createLithologiesSlice(set, get),\n ...createIntervalsSlice(set, get),\n ...createEnvironmentsSlice(set, get),\n ...createColumnsSlice(set, get),\n ...createRefsSlice(set, get),\n };\n });\n}\n\nfunction createRefsSlice(set, get) {\n return {\n refs: new Map(),\n async getRefs(ids: number[]): Promise<MacrostratRef[]> {\n const { refs, fetch } = get();\n const missing = ids.filter((id) => !refs.has(id));\n if (missing.length == 0) {\n return ids.map((id) => refs.get(id));\n }\n const data = await fetchRefs(missing, fetch);\n if (data == null) return [];\n for (const d of data) {\n refs.set(d.ref_id, d);\n }\n set({ refs });\n return ids.map((id) => refs.get(id));\n },\n };\n}\n\nfunction createColumnsSlice(set, get) {\n // Column footprints separated by project\n return {\n columnFootprints: new Map(),\n async getColumns(projectID: number | null, inProcess: boolean) {\n const { columnFootprints, baseURL, fetch } = get();\n const key = projectID ?? -1;\n let _inProcess = inProcess;\n if (projectID == null) {\n // If no project is specified, in process columns cannot be included\n _inProcess = false;\n }\n let footprints = columnFootprints.get(key);\n if (footprints == null || footprints.inProcess != _inProcess) {\n // Fetch the columns\n const statusCode = inProcess ? \"in process\" : null;\n let columns = await fetchAllColumns({\n projectID,\n statusCode: null,\n fetch,\n });\n if (columns == null) {\n return;\n }\n if (_inProcess) {\n const inProcessColumns = await fetchAllColumns({\n projectID,\n statusCode: \"in process\",\n fetch,\n });\n if (inProcessColumns == null) {\n return;\n }\n // Combine active and in-process columns\n columns = columns.concat(inProcessColumns);\n }\n\n footprints = {\n project_id: projectID,\n inProcess,\n columns,\n };\n // We could break multi-project result sets into separate caches here...\n // Copy the original map\n const columnFootprints2 = new Map(columnFootprints);\n columnFootprints2.set(key, footprints);\n set({ columnFootprints: columnFootprints2 });\n }\n return footprints.columns;\n },\n };\n}\n\nfunction createLithologiesSlice(set, get) {\n return {\n lithologies: null,\n async getLithologies(ids: number[] | null) {\n const { lithologies, fetch } = get();\n let lithMap = lithologies;\n if (lithMap == null) {\n const data = await fetchLithologies(fetch);\n if (data == null) return;\n lithMap = new Map(data.map((d) => [d.lith_id, d]));\n set({ lithologies: lithMap });\n }\n // Now get the lithologies\n if (ids == null) return lithMap.values();\n return ids.map((id) => lithMap.get(id));\n },\n };\n}\n\nfunction createEnvironmentsSlice(set, get) {\n return {\n environments: null,\n async getEnvironments(ids: number[] | null): Promise<Environment[]> {\n const { environments, fetch } = get();\n let envMap = environments;\n if (envMap == null) {\n const data = await fetchEnvironments(fetch);\n if (data == null) return [];\n envMap = new Map(data.map((d) => [d.environ_id, d]));\n set({ environments: envMap });\n }\n // Now get the environments\n if (ids == null) return envMap.values();\n return ids.map((id) => envMap.get(id));\n },\n };\n}\n\nfunction createIntervalsSlice(set, get) {\n return {\n intervals: null,\n async getIntervals(ids: number[] | null, timescaleID: number | null) {\n const { intervals, fetch } = get();\n let _intervals = intervals;\n if (intervals == null || !includesTimescale(intervals, timescaleID)) {\n // Fetch the intervals\n const data = await fetchIntervals(timescaleID, fetch);\n if (data == null) {\n return [];\n }\n const intervalMap = intervals ?? new Map();\n for (const d of data) {\n intervalMap.set(d.int_id, d);\n }\n _intervals = intervalMap;\n set({ intervals: _intervals });\n }\n if (ids == null && timescaleID == null)\n return Array.from(_intervals.values());\n if (timescaleID != null) {\n return Array.from(_intervals.values() as any[]).filter(\n (d) => d.timescale_id == timescaleID\n );\n }\n return ids.map((id) => intervals.get(id));\n },\n };\n}\n\nfunction includesTimescale(intervals: Map<number, any>, timescaleID: number) {\n if (intervals == null) return false;\n if (timescaleID == null) return true;\n return Array.from(intervals.values()).some(\n (d) => d.timescale_id == timescaleID\n );\n}\n\ntype MacrostratSelector = (store: MacrostratStore) => any;\n\nexport function useMacrostratStore(selector: MacrostratSelector | \"api\") {\n const ctx = useContext(MacrostratDataProviderContext);\n if (ctx == null) {\n throw new Error(\"Missing MacrostratDataProvider\");\n }\n if (selector === \"api\") {\n return ctx;\n }\n\n return useStore(ctx, selector);\n}\n\nconst dataTypeMapping = {\n lithologies: (store) => store.getLithologies,\n intervals: (store) => store.getIntervals,\n columns: (store) => store.getColumns,\n environments: (store) => store.getEnvironments,\n refs: (store) => store.getRefs,\n};\n\nexport function useMacrostratDefs(dataType: string): Map<number, any> | null {\n if (dataType == \"columns\") {\n throw new Error(\"Columns are not provided as a map\");\n }\n const operator = useMacrostratStore(dataTypeMapping[dataType]);\n useEffect(() => {\n operator();\n }, []);\n return useMacrostratStore((state) => state[dataType]);\n}\n\nexport function useMacrostratColumns(\n projectID: number | null,\n inProcess: boolean\n) {\n const getColumns = useMacrostratStore((s) => s.getColumns);\n const columnsMap = useMacrostratStore((s) => s.columnFootprints);\n const key = projectID ?? -1;\n const colData = columnsMap?.get(key);\n useEffect(() => {\n // Refetch if the columns are not available, or if we have requested inProcess columns where we didn't before\n if (colData == null || (inProcess && !colData.inProcess)) {\n getColumns(projectID, inProcess);\n }\n // If we've already fetched the columns there's nothing to do...\n }, [colData, inProcess, getColumns]);\n\n return useMemo(() => {\n if (colData == null) return null;\n let columns = colData.columns;\n if (!inProcess && colData.inProcess) {\n // Our available set of columns includes 'in process' columns, but we don't want them\n columns.features = columns.features?.filter(\n (d) => d.properties.status != \"in process\"\n );\n }\n return columns;\n }, [colData, inProcess]);\n}\n\nexport function useMacrostratData(dataType: string, ...args: any[]) {\n const selector = dataTypeMapping[dataType];\n const operator = useMacrostratStore(selector);\n\n const [value, setValue] = useState(null);\n\n useEffect(() => {\n operator(...args).then(setValue);\n }, [operator, ...args]);\n\n return value;\n}\n\n/** By default, we provide a store linked to the production API */\nconst MacrostratDataProviderContext = createContext(createMacrostratStore());\n\nexport function MacrostratDataProvider(props: MacrostratDataProviderProps) {\n const { baseURL = \"https://macrostrat.org/api/v2\", children } = props;\n\n const [store] = useState(() => createMacrostratStore(baseURL));\n\n return h(\n MacrostratAPIProvider,\n { baseURL },\n h(MacrostratDataProviderContext.Provider, { value: store }, children)\n );\n}\n\n/** Legacy API provider so useAPIResult can work */\n\ntype APIProviderProps = {\n children: ReactNode;\n useDev?: boolean;\n baseURL?: string;\n};\n\nexport function MacrostratAPIProvider({\n children,\n useDev = false,\n baseURL,\n}: APIProviderProps) {\n baseURL ??= useDev\n ? \"https://dev2.macrostrat.org/api/v2\"\n : \"https://macrostrat.org/api/v2\";\n\n return h(\n APIProvider,\n {\n baseURL,\n unwrapResponse: (res) => res.success.data,\n },\n children\n );\n}\n\nexport function MacrostratColumnProvider(props) {\n /** A column provider specialized the Macrostrat API. Maps more\n * generic concepts to Macrostrat-specific ones.\n */\n\n const { axisType } = useMacrostratColumnData();\n const { units, domain, pixelScale, children } = props;\n return h(\n ColumnProvider,\n { axisType, divisions: units, range: domain, pixelsPerMeter: pixelScale },\n children\n );\n}\n\n/** This is now a legacy provider */\nexport function LithologiesProvider({ children }) {\n useEffect(() => {\n console.warn(\n \"LithologiesProvider is deprecated. Replace with MacrostratDataProvider\"\n );\n }, []);\n return children;\n}\n\nexport function useLithologies() {\n const getLithologies = useMacrostratStore((s) => s.getLithologies);\n const lithologies = useMacrostratStore((s) => s.lithologies);\n useEffect(() => {\n if (lithologies == null) getLithologies();\n }, [lithologies, getLithologies]);\n return lithologies;\n}\n"],"names":[],"version":3,"file":"column-views.28ee5f43.js.map"}
@@ -0,0 +1,118 @@
1
+ import {useMacrostratColumns as $774a5efa27d1c77b$export$81eaae0b474404fd} from "./column-views.28ee5f43.js";
2
+ import {create as $i7Wch$create, useStore as $i7Wch$useStore} from "zustand";
3
+ import {lineIntersect as $i7Wch$lineIntersect} from "@turf/line-intersect";
4
+ import $i7Wch$turfdistance from "@turf/distance";
5
+ import {nearestPointOnLine as $i7Wch$nearestPointOnLine} from "@turf/nearest-point-on-line";
6
+ import {centroid as $i7Wch$centroid} from "@turf/centroid";
7
+ import {createContext as $i7Wch$createContext, useState as $i7Wch$useState, useEffect as $i7Wch$useEffect, useContext as $i7Wch$useContext} from "react";
8
+ import $i7Wch$macrostrathyper from "@macrostrat/hyper";
9
+ import {createComputed as $i7Wch$createComputed} from "zustand-computed";
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+ const $74e211dc185c20b4$var$CorrelationStoreContext = (0, $i7Wch$createContext)(null);
21
+ /** A computed store that will automatically update when the state changes */ const $74e211dc185c20b4$var$computed = (0, $i7Wch$createComputed)((state)=>{
22
+ return {
23
+ // We compute the focused columns based on columns and focusedLine
24
+ focusedColumns: $74e211dc185c20b4$var$buildCorrelationColumns(state.columns, state.focusedLine)
25
+ };
26
+ });
27
+ function $74e211dc185c20b4$export$72ffe141ebf87ef1({ children: children, columns: columns, projectID: projectID, inProcess: inProcess, focusedLine: focusedLine, onSelectColumns: onSelectColumns }) {
28
+ const [store] = (0, $i7Wch$useState)(()=>{
29
+ return (0, $i7Wch$create)($74e211dc185c20b4$var$computed((set, get)=>{
30
+ return {
31
+ focusedLine: focusedLine,
32
+ columns: null,
33
+ onClickMap (event, point) {
34
+ const state = get();
35
+ // Check if shift key is pressed
36
+ const shiftKeyPressed = event.originalEvent.shiftKey;
37
+ let existingCoords = state.focusedLine?.coordinates ?? [];
38
+ if (existingCoords.length >= 2 && !shiftKeyPressed) // Reset the line to zero length
39
+ existingCoords = [];
40
+ set({
41
+ focusedLine: {
42
+ type: "LineString",
43
+ coordinates: [
44
+ ...existingCoords,
45
+ point.coordinates
46
+ ]
47
+ }
48
+ });
49
+ }
50
+ };
51
+ }));
52
+ });
53
+ // Set up the store
54
+ /** TODO: move the fetching of all columns to within the map */ const _columns = (0, $774a5efa27d1c77b$export$81eaae0b474404fd)(projectID, inProcess);
55
+ (0, $i7Wch$useEffect)(()=>{
56
+ if (_columns != null) store.setState({
57
+ columns: _columns
58
+ });
59
+ }, [
60
+ _columns
61
+ ]);
62
+ // Kind of an awkward way to do this but we need to allow the selector to run
63
+ const focusedColumns = (0, $i7Wch$useStore)(store, (state)=>state.focusedColumns);
64
+ const _focusedLine = (0, $i7Wch$useStore)(store, (state)=>state.focusedLine);
65
+ (0, $i7Wch$useEffect)(()=>{
66
+ onSelectColumns?.(focusedColumns, _focusedLine);
67
+ }, [
68
+ focusedColumns,
69
+ _focusedLine
70
+ ]);
71
+ return (0, $i7Wch$macrostrathyper)($74e211dc185c20b4$var$CorrelationStoreContext.Provider, {
72
+ value: store
73
+ }, children);
74
+ }
75
+ function $74e211dc185c20b4$export$21398703d3a9bb4d(selector) {
76
+ const storeApi = (0, $i7Wch$useContext)($74e211dc185c20b4$var$CorrelationStoreContext);
77
+ if (storeApi == null) throw new Error("Missing CorrelationMapProvider");
78
+ return (0, $i7Wch$useStore)(storeApi, selector);
79
+ }
80
+ function $74e211dc185c20b4$var$buildCorrelationColumns(columns, line) {
81
+ if (columns == null || line == null || line.coordinates.length < 2) return [];
82
+ return $74e211dc185c20b4$var$orderColumnsByDistance($74e211dc185c20b4$var$computeIntersectingColumns(columns, line), line);
83
+ }
84
+ function $74e211dc185c20b4$var$computeIntersectingColumns(columns, line) {
85
+ if (columns == null || line == null) return [];
86
+ return columns.filter((col)=>{
87
+ const poly = col.geometry;
88
+ // Some in-process datasets seem to have null geometries
89
+ if (poly == null) return false;
90
+ if (poly.type != "Polygon" && poly.type != "MultiPolygon") return false;
91
+ const intersection = (0, $i7Wch$lineIntersect)(line, poly);
92
+ return intersection.features.length > 0;
93
+ });
94
+ }
95
+ function $74e211dc185c20b4$var$orderColumnsByDistance(columns, line) {
96
+ const centroids = columns.map((col)=>(0, $i7Wch$centroid)(col.geometry));
97
+ const projectedPoints = centroids.map((point)=>(0, $i7Wch$nearestPointOnLine)(line, point));
98
+ const distances = projectedPoints.map((point)=>(0, $i7Wch$turfdistance)(point.geometry.coordinates, line.coordinates[0]));
99
+ let newColumns = columns.map((col, i)=>{
100
+ return {
101
+ ...col,
102
+ properties: {
103
+ ...col.properties,
104
+ centroid: centroids[i],
105
+ nearestPointOnLine: projectedPoints[i],
106
+ distanceAlongLine: distances[i]
107
+ }
108
+ };
109
+ });
110
+ return $74e211dc185c20b4$var$sorted(newColumns, (d)=>d.properties.distanceAlongLine);
111
+ }
112
+ function $74e211dc185c20b4$var$sorted(data, accessor) {
113
+ return data.sort((a, b)=>accessor(a) - accessor(b));
114
+ }
115
+
116
+
117
+ export {$74e211dc185c20b4$export$72ffe141ebf87ef1 as ColumnCorrelationProvider, $74e211dc185c20b4$export$21398703d3a9bb4d as useCorrelationMapStore};
118
+ //# sourceMappingURL=column-views.30646469.js.map
@@ -0,0 +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 mapboxgl from \"mapbox-gl\";\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.30646469.js.map"}