@macrostrat/column-views 2.3.3 → 2.4.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 (220) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/esm/{column-views.b977da35.js → column-views.083fb787.js} +5 -5
  3. package/dist/esm/{column-views.b977da35.js.map → column-views.083fb787.js.map} +1 -1
  4. package/dist/esm/{column-views.4685ea28.js → column-views.088a0274.js} +2 -2
  5. package/dist/esm/{column-views.4685ea28.js.map → column-views.088a0274.js.map} +1 -1
  6. package/dist/esm/{column-views.a665cbb2.js → column-views.11353c2c.js} +5 -5
  7. package/dist/esm/{column-views.a665cbb2.js.map → column-views.11353c2c.js.map} +1 -1
  8. package/dist/esm/{column-views.f7cdf6be.js → column-views.18655508.js} +3 -3
  9. package/dist/esm/{column-views.f7cdf6be.js.map → column-views.18655508.js.map} +1 -1
  10. package/dist/esm/column-views.1cd55918.js +206 -0
  11. package/dist/esm/column-views.1cd55918.js.map +1 -0
  12. package/dist/esm/column-views.1ef55568.js +15 -0
  13. package/dist/esm/{column-views.04636815.js.map → column-views.1ef55568.js.map} +1 -1
  14. package/dist/esm/{column-views.e075af15.js → column-views.3090f246.js} +22 -4
  15. package/dist/esm/column-views.3090f246.js.map +1 -0
  16. package/dist/esm/{column-views.c92a359e.js → column-views.33796541.js} +2 -2
  17. package/dist/esm/{column-views.c92a359e.js.map → column-views.33796541.js.map} +1 -1
  18. package/dist/esm/{column-views.488f24b6.js → column-views.3ae8f23d.js} +2 -2
  19. package/dist/esm/{column-views.488f24b6.js.map → column-views.3ae8f23d.js.map} +1 -1
  20. package/dist/esm/{column-views.faa7e52e.js → column-views.40d3688c.js} +3 -3
  21. package/dist/esm/{column-views.faa7e52e.js.map → column-views.40d3688c.js.map} +1 -1
  22. package/dist/esm/{column-views.b9265595.js → column-views.4e9b8594.js} +11 -10
  23. package/dist/esm/column-views.4e9b8594.js.map +1 -0
  24. package/dist/esm/{column-views.8c296309.js → column-views.5e1c216f.js} +27 -6
  25. package/dist/esm/column-views.5e1c216f.js.map +1 -0
  26. package/dist/esm/{column-views.e3f0cd7b.js → column-views.5e830e7c.js} +23 -33
  27. package/dist/esm/column-views.5e830e7c.js.map +1 -0
  28. package/dist/esm/{column-views.c149f7a5.js → column-views.5ec7294d.js} +3 -3
  29. package/dist/esm/{column-views.c149f7a5.js.map → column-views.5ec7294d.js.map} +1 -1
  30. package/dist/esm/column-views.67804ce5.js +68 -0
  31. package/dist/esm/column-views.67804ce5.js.map +1 -0
  32. package/dist/esm/{column-views.3f1cdc18.js → column-views.6f0d4f3a.js} +2 -2
  33. package/dist/esm/{column-views.3f1cdc18.js.map → column-views.6f0d4f3a.js.map} +1 -1
  34. package/dist/esm/{column-views.58b891df.js → column-views.76fb9948.js} +2 -2
  35. package/dist/esm/{column-views.58b891df.js.map → column-views.76fb9948.js.map} +1 -1
  36. package/dist/esm/{column-views.3d3e00be.js → column-views.77322764.js} +2 -2
  37. package/dist/esm/{column-views.3d3e00be.js.map → column-views.77322764.js.map} +1 -1
  38. package/dist/esm/{column-views.82a5112b.js → column-views.85d57d04.js} +4 -4
  39. package/dist/esm/{column-views.82a5112b.js.map → column-views.85d57d04.js.map} +1 -1
  40. package/dist/esm/{column-views.4e6eead3.js → column-views.88436022.js} +2 -2
  41. package/dist/esm/{column-views.4e6eead3.js.map → column-views.88436022.js.map} +1 -1
  42. package/dist/esm/{column-views.2f979aee.js → column-views.88b2418b.js} +3 -3
  43. package/dist/esm/{column-views.2f979aee.js.map → column-views.88b2418b.js.map} +1 -1
  44. package/dist/esm/{column-views.d6c0b7bc.js → column-views.8ce33ec6.js} +2 -2
  45. package/dist/esm/{column-views.d6c0b7bc.js.map → column-views.8ce33ec6.js.map} +1 -1
  46. package/dist/esm/{column-views.6f96d1c3.js → column-views.91c18fe3.js} +31 -19
  47. package/dist/esm/column-views.91c18fe3.js.map +1 -0
  48. package/dist/esm/{column-views.18aac6a5.js → column-views.99cb1c41.js} +3 -3
  49. package/dist/esm/{column-views.18aac6a5.js.map → column-views.99cb1c41.js.map} +1 -1
  50. package/dist/esm/{column-views.0a010643.js → column-views.ab2cc6cb.js} +27 -14
  51. package/dist/esm/column-views.ab2cc6cb.js.map +1 -0
  52. package/dist/esm/{column-views.d5fff9b8.js → column-views.af4278f0.js} +3 -3
  53. package/dist/esm/{column-views.d5fff9b8.js.map → column-views.af4278f0.js.map} +1 -1
  54. package/dist/esm/{column-views.d1b49f5c.js → column-views.b957dc19.js} +3 -3
  55. package/dist/esm/{column-views.d1b49f5c.js.map → column-views.b957dc19.js.map} +1 -1
  56. package/dist/esm/{column-views.ad2fe46c.js → column-views.bc83a85d.js} +19 -3
  57. package/dist/esm/column-views.bc83a85d.js.map +1 -0
  58. package/dist/esm/column-views.c1e507e6.js +113 -0
  59. package/dist/esm/column-views.c1e507e6.js.map +1 -0
  60. package/dist/esm/{column-views.ce3a3ac8.js → column-views.c93b63db.js} +3 -3
  61. package/dist/esm/column-views.c93b63db.js.map +1 -0
  62. package/dist/esm/{column-views.26e0e0b6.js → column-views.ce5251f7.js} +2 -2
  63. package/dist/esm/{column-views.26e0e0b6.js.map → column-views.ce5251f7.js.map} +1 -1
  64. package/dist/esm/{column-views.8d972657.js → column-views.d4e50f74.js} +3 -3
  65. package/dist/esm/{column-views.8d972657.js.map → column-views.d4e50f74.js.map} +1 -1
  66. package/dist/esm/{column-views.75b83110.js → column-views.dd2d5a6d.js} +5 -5
  67. package/dist/esm/{column-views.75b83110.js.map → column-views.dd2d5a6d.js.map} +1 -1
  68. package/dist/esm/{column-views.73fc96cb.js → column-views.e6882667.js} +5 -5
  69. package/dist/esm/{column-views.73fc96cb.js.map → column-views.e6882667.js.map} +1 -1
  70. package/dist/esm/{column-views.ee9d71ba.js → column-views.e885211d.js} +2 -2
  71. package/dist/esm/{column-views.ee9d71ba.js.map → column-views.e885211d.js.map} +1 -1
  72. package/dist/esm/{column-views.029ea8f1.js → column-views.ee2fd38f.js} +3 -3
  73. package/dist/esm/{column-views.029ea8f1.js.map → column-views.ee2fd38f.js.map} +1 -1
  74. package/dist/esm/{column-views.9d51a5ab.js → column-views.f35c4621.js} +2 -2
  75. package/dist/esm/column-views.f35c4621.js.map +1 -0
  76. package/dist/esm/{column-views.5fff0716.js → column-views.f56e604d.js} +3 -3
  77. package/dist/esm/{column-views.5fff0716.js.map → column-views.f56e604d.js.map} +1 -1
  78. package/dist/esm/{column-views.9ffc089b.js → column-views.f904e6d7.js} +3 -3
  79. package/dist/esm/{column-views.9ffc089b.js.map → column-views.f904e6d7.js.map} +1 -1
  80. package/dist/esm/{column-views.24060b85.js → column-views.fc4860bd.js} +4 -4
  81. package/dist/esm/{column-views.24060b85.js.map → column-views.fc4860bd.js.map} +1 -1
  82. package/dist/esm/{column-views.0da4503a.js → column-views.fedccce9.js} +2 -2
  83. package/dist/esm/{column-views.0da4503a.js.map → column-views.fedccce9.js.map} +1 -1
  84. package/dist/esm/index.d.ts +91 -86
  85. package/dist/esm/index.d.ts.map +1 -1
  86. package/dist/esm/index.js +11 -11
  87. package/dist/node/{column-views.02869dc5.js → column-views.003e0c17.js} +2 -2
  88. package/dist/node/{column-views.02869dc5.js.map → column-views.003e0c17.js.map} +1 -1
  89. package/dist/node/column-views.080781ca.js +2 -0
  90. package/dist/node/column-views.080781ca.js.map +1 -0
  91. package/dist/node/{column-views.00ad98fa.js → column-views.0818254f.js} +2 -2
  92. package/dist/node/{column-views.00ad98fa.js.map → column-views.0818254f.js.map} +1 -1
  93. package/dist/node/{column-views.2577dec0.js → column-views.0d48f51d.js} +2 -2
  94. package/dist/node/{column-views.2577dec0.js.map → column-views.0d48f51d.js.map} +1 -1
  95. package/dist/node/column-views.18e86c2d.js +2 -0
  96. package/dist/node/column-views.18e86c2d.js.map +1 -0
  97. package/dist/node/{column-views.8eae7028.js → column-views.375529b1.js} +2 -2
  98. package/dist/node/{column-views.8eae7028.js.map → column-views.375529b1.js.map} +1 -1
  99. package/dist/node/{column-views.6b391d60.js → column-views.39b71a38.js} +2 -2
  100. package/dist/node/{column-views.6b391d60.js.map → column-views.39b71a38.js.map} +1 -1
  101. package/dist/node/{column-views.47440961.js → column-views.447008d0.js} +2 -2
  102. package/dist/node/{column-views.47440961.js.map → column-views.447008d0.js.map} +1 -1
  103. package/dist/node/{column-views.c4188442.js → column-views.4d573ded.js} +2 -2
  104. package/dist/node/{column-views.c4188442.js.map → column-views.4d573ded.js.map} +1 -1
  105. package/dist/node/{column-views.8f540f78.js → column-views.4d8fc443.js} +2 -2
  106. package/dist/node/{column-views.8f540f78.js.map → column-views.4d8fc443.js.map} +1 -1
  107. package/dist/node/{column-views.3a947d58.js → column-views.54f7a243.js} +2 -2
  108. package/dist/node/{column-views.3a947d58.js.map → column-views.54f7a243.js.map} +1 -1
  109. package/dist/node/column-views.58b336f1.js +2 -0
  110. package/dist/node/column-views.58b336f1.js.map +1 -0
  111. package/dist/node/{column-views.465e593b.js → column-views.5908556a.js} +2 -2
  112. package/dist/node/{column-views.465e593b.js.map → column-views.5908556a.js.map} +1 -1
  113. package/dist/node/column-views.5c02450b.js +2 -0
  114. package/dist/node/column-views.5c02450b.js.map +1 -0
  115. package/dist/node/column-views.5e73411d.js +2 -0
  116. package/dist/node/column-views.5e73411d.js.map +1 -0
  117. package/dist/node/{column-views.825d2719.js → column-views.5f3f8ccf.js} +2 -2
  118. package/dist/node/{column-views.825d2719.js.map → column-views.5f3f8ccf.js.map} +1 -1
  119. package/dist/node/{column-views.0a2596c2.js → column-views.6051e986.js} +2 -2
  120. package/dist/node/{column-views.0a2596c2.js.map → column-views.6051e986.js.map} +1 -1
  121. package/dist/node/{column-views.c921fa1a.js → column-views.64fc40d6.js} +2 -2
  122. package/dist/node/{column-views.c921fa1a.js.map → column-views.64fc40d6.js.map} +1 -1
  123. package/dist/node/{column-views.6556e004.js → column-views.66663668.js} +2 -2
  124. package/dist/node/{column-views.6556e004.js.map → column-views.66663668.js.map} +1 -1
  125. package/dist/node/{column-views.a14f0134.js → column-views.6f0cb059.js} +2 -2
  126. package/dist/node/{column-views.a14f0134.js.map → column-views.6f0cb059.js.map} +1 -1
  127. package/dist/node/{column-views.9efa91f1.js → column-views.72c3c6e7.js} +2 -2
  128. package/dist/node/{column-views.9efa91f1.js.map → column-views.72c3c6e7.js.map} +1 -1
  129. package/dist/node/column-views.74fcfb9c.js +2 -0
  130. package/dist/node/column-views.74fcfb9c.js.map +1 -0
  131. package/dist/node/{column-views.75456275.js → column-views.784bac2a.js} +2 -2
  132. package/dist/node/{column-views.75456275.js.map → column-views.784bac2a.js.map} +1 -1
  133. package/dist/node/{column-views.0f401891.js → column-views.796fc1de.js} +2 -2
  134. package/dist/node/{column-views.0f401891.js.map → column-views.796fc1de.js.map} +1 -1
  135. package/dist/node/column-views.7b6e7d82.js +2 -0
  136. package/dist/node/column-views.7b6e7d82.js.map +1 -0
  137. package/dist/node/{column-views.7c322202.js → column-views.7e895e1a.js} +2 -2
  138. package/dist/node/{column-views.7c322202.js.map → column-views.7e895e1a.js.map} +1 -1
  139. package/dist/node/column-views.87d31e0a.js +2 -0
  140. package/dist/node/column-views.87d31e0a.js.map +1 -0
  141. package/dist/node/{column-views.59ce629d.js → column-views.94c8ce3e.js} +2 -2
  142. package/dist/node/{column-views.59ce629d.js.map → column-views.94c8ce3e.js.map} +1 -1
  143. package/dist/node/{column-views.48a3cfa3.js → column-views.951e3e9a.js} +2 -2
  144. package/dist/node/{column-views.48a3cfa3.js.map → column-views.951e3e9a.js.map} +1 -1
  145. package/dist/node/column-views.a0969fc8.js +2 -0
  146. package/dist/node/column-views.a0969fc8.js.map +1 -0
  147. package/dist/node/{column-views.67e7a200.js → column-views.b6613ab0.js} +2 -2
  148. package/dist/node/{column-views.67e7a200.js.map → column-views.b6613ab0.js.map} +1 -1
  149. package/dist/node/{column-views.d529d3aa.js → column-views.b762c9a8.js} +2 -2
  150. package/dist/node/{column-views.d529d3aa.js.map → column-views.b762c9a8.js.map} +1 -1
  151. package/dist/node/{column-views.e153680b.js → column-views.bdf05ed4.js} +2 -2
  152. package/dist/node/{column-views.e153680b.js.map → column-views.bdf05ed4.js.map} +1 -1
  153. package/dist/node/{column-views.fafbc028.js → column-views.d30231cb.js} +2 -2
  154. package/dist/node/{column-views.fafbc028.js.map → column-views.d30231cb.js.map} +1 -1
  155. package/dist/node/column-views.d86e6c7d.js +2 -0
  156. package/dist/node/column-views.d86e6c7d.js.map +1 -0
  157. package/dist/node/column-views.db3377d8.js +2 -0
  158. package/dist/node/column-views.db3377d8.js.map +1 -0
  159. package/dist/node/{column-views.2fe8feb9.js → column-views.f4063bc8.js} +2 -2
  160. package/dist/node/{column-views.2fe8feb9.js.map → column-views.f4063bc8.js.map} +1 -1
  161. package/dist/node/{column-views.3d0c2bea.js → column-views.f93b4175.js} +2 -2
  162. package/dist/node/{column-views.3d0c2bea.js.map → column-views.f93b4175.js.map} +1 -1
  163. package/dist/node/{column-views.cd54f1b1.js → column-views.fa5ee6de.js} +2 -2
  164. package/dist/node/{column-views.cd54f1b1.js.map → column-views.fa5ee6de.js.map} +1 -1
  165. package/dist/node/{column-views.08bef1f6.js → column-views.fe7a5452.js} +2 -2
  166. package/dist/node/{column-views.08bef1f6.js.map → column-views.fe7a5452.js.map} +1 -1
  167. package/dist/node/column-views.ffbffec7.js +2 -0
  168. package/dist/node/column-views.ffbffec7.js.map +1 -0
  169. package/dist/node/index.js +1 -1
  170. package/dist/node/index.js.map +1 -1
  171. package/package.json +4 -2
  172. package/src/age-model-overlay.ts +4 -2
  173. package/src/column.ts +18 -41
  174. package/src/correlation-chart/main.ts +24 -13
  175. package/src/correlation-chart/stories/correlation-chart.stories.ts +38 -17
  176. package/src/data-provider/base.ts +22 -0
  177. package/src/data-provider/core.ts +89 -0
  178. package/src/data-provider/fetch.ts +35 -10
  179. package/src/data-provider/store.ts +79 -88
  180. package/src/data-provider/unit-selection.ts +265 -159
  181. package/src/maps/column-correlation/core.ts +1 -1
  182. package/src/maps/column-correlation/state.ts +16 -1
  183. package/src/unit-details/panel.ts +44 -26
  184. package/src/unit-details/popover.ts +21 -9
  185. package/dist/esm/column-views.04636815.js +0 -15
  186. package/dist/esm/column-views.0a010643.js.map +0 -1
  187. package/dist/esm/column-views.4b259f9e.js +0 -136
  188. package/dist/esm/column-views.4b259f9e.js.map +0 -1
  189. package/dist/esm/column-views.6f96d1c3.js.map +0 -1
  190. package/dist/esm/column-views.8c296309.js.map +0 -1
  191. package/dist/esm/column-views.9d51a5ab.js.map +0 -1
  192. package/dist/esm/column-views.ad2fe46c.js.map +0 -1
  193. package/dist/esm/column-views.b9265595.js.map +0 -1
  194. package/dist/esm/column-views.c44febd0.js +0 -169
  195. package/dist/esm/column-views.c44febd0.js.map +0 -1
  196. package/dist/esm/column-views.ce3a3ac8.js.map +0 -1
  197. package/dist/esm/column-views.e075af15.js.map +0 -1
  198. package/dist/esm/column-views.e3f0cd7b.js.map +0 -1
  199. package/dist/node/column-views.0beae29d.js +0 -2
  200. package/dist/node/column-views.0beae29d.js.map +0 -1
  201. package/dist/node/column-views.46efb749.js +0 -2
  202. package/dist/node/column-views.46efb749.js.map +0 -1
  203. package/dist/node/column-views.7425d37b.js +0 -2
  204. package/dist/node/column-views.7425d37b.js.map +0 -1
  205. package/dist/node/column-views.868c04dc.js +0 -2
  206. package/dist/node/column-views.868c04dc.js.map +0 -1
  207. package/dist/node/column-views.8e846c57.js +0 -2
  208. package/dist/node/column-views.8e846c57.js.map +0 -1
  209. package/dist/node/column-views.c007152b.js +0 -2
  210. package/dist/node/column-views.c007152b.js.map +0 -1
  211. package/dist/node/column-views.d818b387.js +0 -2
  212. package/dist/node/column-views.d818b387.js.map +0 -1
  213. package/dist/node/column-views.dfe9a971.js +0 -2
  214. package/dist/node/column-views.dfe9a971.js.map +0 -1
  215. package/dist/node/column-views.e264a767.js +0 -2
  216. package/dist/node/column-views.e264a767.js.map +0 -1
  217. package/dist/node/column-views.ed2fd268.js +0 -2
  218. package/dist/node/column-views.ed2fd268.js.map +0 -1
  219. package/dist/node/column-views.fee4e65d.js +0 -2
  220. package/dist/node/column-views.fee4e65d.js.map +0 -1
@@ -1,8 +1,19 @@
1
1
  import hyper from "@macrostrat/hyper";
2
2
  import { Popover } from "@blueprintjs/core";
3
3
  import styles from "./popover.module.sass";
4
- import { useSelectedUnit, useUnitSelectionStore } from "../data-provider";
5
- import { UnitDetailsPanel } from "./panel";
4
+ import {
5
+ useAtomOverlayPosition,
6
+ useSelectedUnit,
7
+ useUnitSelectionDispatch,
8
+ } from "../data-provider";
9
+ import {
10
+ UnitDetailsFeature,
11
+ UnitDetailsPanel,
12
+ UnitDetailsPanelProps,
13
+ } from "./panel";
14
+ import { Lithology } from "@macrostrat/api-types";
15
+ import { LithologyTagFeature } from "@macrostrat/data-components";
16
+ import classNames from "classnames";
6
17
 
7
18
  const h = hyper.styled(styles);
8
19
 
@@ -52,10 +63,12 @@ function InteractionBarrier({ children }) {
52
63
  );
53
64
  }
54
65
 
55
- export function UnitSelectionPopover() {
66
+ export function UnitSelectionPopover(
67
+ props: Omit<UnitDetailsPanelProps, "onSelectUnit" | "unit">,
68
+ ) {
56
69
  const unit = useSelectedUnit();
57
- const selectUnit = useUnitSelectionStore((state) => state.onUnitSelected);
58
- const position = useUnitSelectionStore((state) => state.overlayPosition);
70
+ const selectUnit = useUnitSelectionDispatch();
71
+ const position = useAtomOverlayPosition();
59
72
  if (unit == null) {
60
73
  return null;
61
74
  }
@@ -74,12 +87,11 @@ export function UnitSelectionPopover() {
74
87
  },
75
88
  },
76
89
  h(UnitDetailsPanel, {
90
+ ...props,
77
91
  unit,
78
- showLithologyProportions: true,
79
- className: "legend-panel",
92
+ className: classNames("legend-panel", props.className),
80
93
  onSelectUnit: (id: number) => {
81
- console.log("Selected unit in popover:", id);
82
- selectUnit(id, null, null);
94
+ selectUnit(id, null);
83
95
  },
84
96
  }),
85
97
  ),
@@ -1,15 +0,0 @@
1
- import {fetchAllColumns as $33a46f9423c8104a$export$45bd78cd093090fa, useColumnFeatures as $33a46f9423c8104a$export$e3270a4e30e40ff9, fetchLithologies as $33a46f9423c8104a$export$1aa679bd5e605f82, fetchIntervals as $33a46f9423c8104a$export$5d2ec2e733dfe6c7, fetchEnvironments as $33a46f9423c8104a$export$780b4b253712916c, fetchRefs as $33a46f9423c8104a$export$cd7bfa0860f58b96, fetchStratNames as $33a46f9423c8104a$export$8ea8f45a7ffe4183, fetchUnits as $33a46f9423c8104a$export$b97b9bdd6a521298, fetchColumnUnits as $33a46f9423c8104a$export$d3d8b0fabcc76c5d} from "./column-views.8c296309.js";
2
- import {useMacrostratStore as $774a5efa27d1c77b$export$fb98d5bae3a6800, useMacrostratBaseURL as $774a5efa27d1c77b$export$33b1392d23dde04, useMacrostratDefs as $774a5efa27d1c77b$export$89dd4e5ae4a82373, useMacrostratColumns as $774a5efa27d1c77b$export$81eaae0b474404fd, useMacrostratData as $774a5efa27d1c77b$export$b9c9fc603d74a555, MacrostratDataProvider as $774a5efa27d1c77b$export$690613f93cdc5576, MacrostratAPIProvider as $774a5efa27d1c77b$export$3098013bc6cc316d, MacrostratColumnProvider as $774a5efa27d1c77b$export$9e42f9b6e0d67c7d, LithologiesProvider as $774a5efa27d1c77b$export$8492a5cae82b6a70, useLithologies as $774a5efa27d1c77b$export$4d18a90c945d129f, useEnvironments as $774a5efa27d1c77b$export$c6b216bf4c71b61f} from "./column-views.e075af15.js";
3
- import {useColumnNav as $b8de97dfa82f4910$export$91cb5ac808759b34, ColumnNavProvider as $b8de97dfa82f4910$export$36fed9e0f93a8fde} from "./column-views.6d6b73b4.js";
4
- import {MacrostratColumnStateProvider as $d5074f164411387e$export$ef5395089200109b, MacrostratColumnDataProvider as $d5074f164411387e$export$7fec7bd80ff9c10e, useMacrostratColumnData as $d5074f164411387e$export$f8509b7cce386c7d, useMacrostratUnits as $d5074f164411387e$export$6fb40844db555b2, useColumnUnitsMap as $d5074f164411387e$export$7513be0cfd10d9cc, useCompositeScale as $d5074f164411387e$export$a7fc62995ec4f76} from "./column-views.4b259f9e.js";
5
- import {useUnitSelectionDispatch as $61771df184788970$export$77a278d5ca56e309, useUnitSelectionStore as $61771df184788970$export$b220b1d3591dc9e5, useSelectedUnit as $61771df184788970$export$f0dd93f90aa8e5da, UnitSelectionProvider as $61771df184788970$export$f19d75b1d4b676a4, useUnitSelectionTarget as $61771df184788970$export$cbbec12b1451fe7d, UnitKeyboardNavigation as $61771df184788970$export$70f5ee19650fc7d1} from "./column-views.c44febd0.js";
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
- export {$33a46f9423c8104a$export$45bd78cd093090fa as fetchAllColumns, $33a46f9423c8104a$export$e3270a4e30e40ff9 as useColumnFeatures, $33a46f9423c8104a$export$1aa679bd5e605f82 as fetchLithologies, $33a46f9423c8104a$export$5d2ec2e733dfe6c7 as fetchIntervals, $33a46f9423c8104a$export$780b4b253712916c as fetchEnvironments, $33a46f9423c8104a$export$cd7bfa0860f58b96 as fetchRefs, $33a46f9423c8104a$export$8ea8f45a7ffe4183 as fetchStratNames, $33a46f9423c8104a$export$b97b9bdd6a521298 as fetchUnits, $33a46f9423c8104a$export$d3d8b0fabcc76c5d as fetchColumnUnits, $774a5efa27d1c77b$export$fb98d5bae3a6800 as useMacrostratStore, $774a5efa27d1c77b$export$33b1392d23dde04 as useMacrostratBaseURL, $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, $774a5efa27d1c77b$export$c6b216bf4c71b61f as useEnvironments, $b8de97dfa82f4910$export$91cb5ac808759b34 as useColumnNav, $b8de97dfa82f4910$export$36fed9e0f93a8fde as ColumnNavProvider, $d5074f164411387e$export$ef5395089200109b as MacrostratColumnStateProvider, $d5074f164411387e$export$7fec7bd80ff9c10e as MacrostratColumnDataProvider, $d5074f164411387e$export$f8509b7cce386c7d as useMacrostratColumnData, $d5074f164411387e$export$6fb40844db555b2 as useMacrostratUnits, $d5074f164411387e$export$7513be0cfd10d9cc as useColumnUnitsMap, $d5074f164411387e$export$a7fc62995ec4f76 as useCompositeScale, $61771df184788970$export$77a278d5ca56e309 as useUnitSelectionDispatch, $61771df184788970$export$b220b1d3591dc9e5 as useUnitSelectionStore, $61771df184788970$export$f0dd93f90aa8e5da as useSelectedUnit, $61771df184788970$export$f19d75b1d4b676a4 as UnitSelectionProvider, $61771df184788970$export$cbbec12b1451fe7d as useUnitSelectionTarget, $61771df184788970$export$70f5ee19650fc7d1 as UnitKeyboardNavigation};
15
- //# sourceMappingURL=column-views.04636815.js.map
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/unit-details/panel.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport styles from \"./panel.module.sass\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { Button, ButtonGroup } from \"@blueprintjs/core\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport {\n DataField,\n EnvironmentsList,\n IntervalShort,\n IntervalTag,\n ItemList,\n LithologyList,\n LithologyTagFeature,\n Parenthetical,\n Value,\n} from \"@macrostrat/data-components\";\nimport {\n useColumnUnitsMap,\n useMacrostratData,\n useMacrostratDefs,\n} from \"../data-provider\";\nimport type {\n Environment,\n UnitLong,\n UnitLongFull,\n Lithology,\n Interval,\n StratUnit,\n} from \"@macrostrat/api-types\";\nimport { defaultNameFunction } from \"../units/names\";\nimport classNames from \"classnames\";\n\nconst h = hyper.styled(styles);\n\nexport function UnitDetailsPanel({\n unit,\n onClose,\n className,\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n UnitDetailsFeature.JSONToggle,\n UnitDetailsFeature.DepthRange,\n ]),\n lithologyFeatures,\n actions,\n hiddenActions = null,\n onSelectUnit,\n columnUnits,\n onClickItem,\n}: {\n unit: any;\n onClose?: any;\n showLithologyProportions?: boolean;\n className?: string;\n actions?: ReactNode;\n hiddenActions?: ReactNode;\n features?: Set<UnitDetailsFeature>;\n lithologyFeatures?: Set<LithologyTagFeature>;\n columnUnits?: UnitLong[];\n onSelectUnit?: (unitID: number) => void;\n onClickItem?: MacrostratItemClickHandler;\n}) {\n const [showJSON, setShowJSON] = useState(false);\n\n let content = null;\n if (showJSON) {\n content = h(JSONView, { data: unit, showRoot: false });\n } else {\n content = h(UnitDetailsContent, {\n unit,\n features,\n lithologyFeatures,\n onClickItem,\n onSelectUnit,\n });\n }\n\n let title = defaultNameFunction(unit);\n\n if (features.has(UnitDetailsFeature.JSONToggle)) {\n hiddenActions = h([\n h(Button, {\n icon: \"code\",\n small: true,\n minimal: true,\n key: \"json-view-toggle\",\n className: classNames(\"json-view-toggle\", { enabled: setShowJSON }),\n onClick(evt) {\n setShowJSON(!showJSON);\n evt.stopPropagation();\n },\n }),\n hiddenActions,\n ]);\n }\n\n return h(\"div.unit-details-panel\", { className }, [\n h(LegendPanelHeader, {\n onClose,\n title,\n id: unit.unit_id,\n actions,\n hiddenActions,\n }),\n h(\"div.unit-details-content-holder\", content),\n ]);\n}\n\nexport function LegendPanelHeader({\n title,\n id,\n onClose,\n actions = null,\n hiddenActions,\n}: {\n title?: string | null;\n id?: number | null;\n onClose?: () => void;\n actions?: ReactNode | null;\n hiddenActions?: ReactNode | null;\n}) {\n return h(\"header.legend-panel-header\", [\n h(\"div.title-container\", [\n h.if(title != null)(\"h3\", title),\n h.if(hiddenActions != null)(\n \"span.hidden-actions-container\",\n h(\"div.hidden-actions\", hiddenActions),\n ),\n ]),\n h(\"div.spacer\"),\n h.if(id != null)(\"code.unit-id\", id),\n h.if(actions != null)(ButtonGroup, { minimal: true }, actions),\n h.if(onClose != null)(Button, {\n icon: \"cross\",\n minimal: true,\n small: true,\n onClick() {\n onClose();\n },\n }),\n ]);\n}\n\nexport enum UnitDetailsFeature {\n AdjacentUnits = \"adjacent-units\",\n Color = \"color\",\n OutcropType = \"outcrop-type\",\n JSONToggle = \"json-toggle\",\n DepthRange = \"depth-range\",\n}\n\nexport type MacrostratItemClickHandler = (\n event: MouseEvent,\n item:\n | Lithology\n | Environment\n | UnitLong\n | Interval\n | { strat_name_id: number },\n) => void;\n\nfunction UnitDetailsContent({\n unit,\n onSelectUnit,\n columnUnits,\n lithologyFeatures = new Set([\n LithologyTagFeature.Proportion,\n LithologyTagFeature.Attributes,\n ]),\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n ]),\n onClickItem,\n getItemHref,\n}: {\n unit: UnitLong;\n onSelectUnit?: (unitID: number) => void;\n columnUnits?: UnitLong[];\n lithologyFeatures?: Set<LithologyTagFeature>;\n features?: Set<UnitDetailsFeature>;\n onClickItem?: MacrostratItemClickHandler;\n getItemHref?: (item: Lithology | Environment | UnitLong) => string | null;\n}) {\n const lithMap = useMacrostratDefs(\"lithologies\");\n const envMap = useMacrostratDefs(\"environments\");\n\n const environments = enhanceEnvironments(unit.environ, envMap);\n const lithologies = enhanceLithologies(unit.lith ?? [], lithMap);\n\n // Create a lookup table of units if provided\n const columnUnitsMap = useMemo(() => {\n const map = new Map<number, UnitLong>();\n for (const colUnit of columnUnits ?? []) {\n map.set(colUnit.unit_id, colUnit);\n }\n return map;\n }, [columnUnits]);\n\n let outcropField = null;\n if (features.has(UnitDetailsFeature.OutcropType)) {\n // Determine outcrop type\n let outcrop = unit.outcrop;\n if (outcrop == \"both\") {\n outcrop = \"surface and subsurface\";\n }\n outcropField = h(DataField, {\n label: \"Outcrop\",\n value: outcrop,\n });\n }\n\n let thicknessOrHeightRange = null;\n const [thickness, thicknessUnit] = getThickness(unit);\n // Proxy for actual heights in t_pos and b_pos\n if (\n features.has(UnitDetailsFeature.DepthRange) &&\n unit.t_pos != null &&\n unit.b_pos != null &&\n unit.min_thick == unit.max_thick && // We have an actual fixed height\n unit.min_thick != 0 // Not a zero thickness\n ) {\n const label = unit.t_pos < unit.b_pos ? \"Depth\" : \"Height\";\n const u1 = \"m\";\n\n thicknessOrHeightRange = h(DataField, {\n unit: u1,\n label,\n value: formatRange(unit.b_pos, unit.t_pos),\n children: h(\n Parenthetical,\n h(Value, { value: thickness, unit: thicknessUnit }),\n ),\n });\n }\n thicknessOrHeightRange ??= h(DataField, {\n label: \"Thickness\",\n value: thickness,\n unit: thicknessUnit,\n });\n\n /** We are trying to move away from passing the \"color\" parameter in the API */\n let colorSwatch: ReactNode = null;\n if (\"color\" in unit && features.has(UnitDetailsFeature.Color)) {\n const unit1 = unit as UnitLongFull;\n colorSwatch = h(\"div.color-swatch\", {\n style: { backgroundColor: unit1.color },\n });\n }\n\n return h(\"div.unit-details-content\", [\n thicknessOrHeightRange,\n h(LithologyList, {\n label: \"Lithology\",\n lithologies,\n features: lithologyFeatures,\n getItemHref,\n onClickItem,\n }),\n h(AgeField, { unit }, [\n h(Parenthetical, h(Duration, { value: unit.b_age - unit.t_age })),\n h(IntervalProportions, {\n unit,\n onClickItem,\n }),\n ]),\n h(EnvironmentsList, {\n environments,\n onClickItem,\n getItemHref,\n }),\n h.if(unit.strat_name_id != null)(StratNameField, {\n strat_name_id: unit.strat_name_id,\n }),\n outcropField,\n h.if(features.has(UnitDetailsFeature.AdjacentUnits))([\n h(\n DataField,\n { label: \"Above\" },\n h(UnitIDList, {\n units: unit.units_above,\n onSelectUnit,\n showNames: true,\n }),\n ),\n h(\n DataField,\n { label: \"Below\" },\n h(UnitIDList, {\n units: unit.units_below,\n onSelectUnit,\n showNames: true,\n }),\n ),\n ]),\n colorSwatch,\n h(ReferencesField, { refs: unit.refs, inline: true }),\n ]);\n}\n\nexport function ReferencesField({ refs, className = null, ...rest }) {\n if (refs == null || refs.length === 0) {\n return null;\n }\n\n return h(\n DataField,\n {\n label: \"References\",\n className: classNames(\"refs-field\", className),\n ...rest,\n },\n h(BibInfo, { refs }),\n );\n}\n\nfunction StratNameField({\n strat_name_id,\n onClickItem,\n}: {\n strat_name_id: number;\n onClickItem?: (event: MouseEvent, item: { strat_name_id: number }) => void;\n}) {\n const stratNames = useMemo(() => [strat_name_id], [strat_name_id]);\n const data = useMacrostratData(\"strat_names\", stratNames);\n const stratNameData = data?.[0];\n let inner: any = h(Identifier, { id: strat_name_id });\n const name = stratNameData?.strat_name_long;\n if (name != null) {\n inner = h(\"span.strat-name\", name);\n }\n\n const clickable = onClickItem != null;\n\n const className = classNames({\n clickable,\n });\n\n return h(\n DataField,\n {\n label: \"Stratigraphic name\",\n },\n h(\n clickable ? \"a\" : \"span\",\n {\n className,\n onClick: (e) => onClickItem(e, { strat_name_id }),\n },\n inner,\n ),\n );\n}\n\nfunction getThickness(unit): [string, string] {\n let minThickness = unit.min_thick ?? 0;\n let maxThickness = unit.max_thick ?? unit.min_thick ?? 0;\n let _unit = \"m\";\n\n if (minThickness == 0 && maxThickness == 0) {\n return [\"Unknown\", null];\n }\n\n if (minThickness < 0.8 && maxThickness < 1.2) {\n // Convert to cm\n minThickness = minThickness * 100;\n maxThickness = maxThickness * 100;\n _unit = \"cm\";\n } else if (minThickness > 800 && maxThickness > 1200) {\n // Convert to km\n minThickness = minThickness / 1000;\n maxThickness = maxThickness / 1000;\n _unit = \"km\";\n }\n\n if (minThickness == maxThickness) {\n return [formatSignificance(minThickness), _unit];\n }\n\n return [formatRange(minThickness, maxThickness), _unit];\n}\n\nfunction ThicknessField({ unit, label = \"Thickness\" }) {\n const [value, thicknessUnit] = getThickness(unit);\n return h(DataField, {\n label,\n value,\n unit: thicknessUnit,\n });\n}\n\nfunction BibInfo({ refs }) {\n const refData = useMacrostratData(\"refs\", refs);\n\n if (refData == null || refData.length === 0) {\n return null;\n }\n\n if (refData.length == 1) {\n return h(Citation, {\n data: refData[0],\n tag: \"span\",\n key: refData[0].ref_id,\n });\n }\n\n return h(\n \"ul.refs\",\n refData.map((data, i) =>\n h(Citation, { data, tag: \"li\", key: data.ref_id }),\n ),\n );\n}\n\nfunction Citation({ data, tag = \"p\" }) {\n return h(tag, { className: \"citation\" }, [\n h(\"span.authors\", data.author),\n \", \",\n h(\"span.year\", data.pub_year),\n \", \",\n h(\"span.title\", data.ref),\n ]);\n}\n\nfunction AgeField({ unit, children }) {\n const [b_age, t_age, _unit] = getAgeRange(unit);\n\n return h(\n DataField,\n {\n label: \"Age\",\n value: formatRange(b_age, t_age),\n unit: _unit,\n },\n children,\n );\n}\n\nfunction getAgeRange(_unit) {\n let b_age = _unit.b_age;\n let t_age = _unit.t_age;\n let unit = \"Ma\";\n\n if (b_age < 0.8 && t_age < 1.2) {\n b_age *= 1000;\n t_age *= 1000;\n unit = \"ka\";\n } else if (b_age > 800 && t_age > 1200) {\n b_age /= 1000;\n t_age /= 1000;\n unit = \"Ga\";\n }\n\n return [b_age, t_age, unit];\n}\n\nfunction getAge(value) {\n /** Get the age value in Ma, ka, or Ga as appropriate */\n let unit = \"Ma\";\n if (value < 0.8) {\n unit = \"ka\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Ga\";\n value /= 1000;\n }\n\n return [value, unit];\n}\n\nexport function AgeLabel({\n age,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n className,\n}: {\n age: number;\n className?: string;\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n}) {\n /** Component to display a single age value with unit conversion from\n * Ma to ka or Ga as appropriate.\n */\n const [value, unit] = getAge(age);\n\n const _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit, className });\n}\n\nexport function Duration({\n value,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n}) {\n let unit = \"Myr\";\n if (value < 0.8) {\n unit = \"kyr\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Gyr\";\n value /= 1000;\n }\n\n let _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit });\n}\n\nfunction enhanceEnvironments(\n environments: Partial<Environment>[],\n envMap: Map<number, Environment>,\n) {\n return environments.map((env) => {\n return {\n ...(envMap?.get(env.environ_id) ?? {}),\n ...env,\n };\n });\n}\n\nfunction enhanceLithologies(\n lithologies: Partial<UnitLong[\"lith\"]>,\n lithMap: Map<number, any>,\n) {\n return lithologies.map((lith) => {\n return {\n ...(lithMap?.get(lith.lith_id) ?? {}), // get lithology details\n ...lith, // override with the unit's specific lithology data\n };\n });\n}\n\nexport function ClickableText({\n onClick,\n className,\n children,\n}: {\n onClick: () => void;\n className?: string;\n children: ReactNode;\n}) {\n /** An optionally clickable text element */\n const tag = onClick != null ? \"a\" : \"span\";\n return h(tag, { onClick, className }, children);\n}\n\nexport function Identifier({\n id,\n onClick,\n className,\n}: {\n id: number | string;\n onClick?: (id: number | string) => void;\n className?: string;\n}) {\n /** An item that displays a numeric identifier, optionally clickable */\n const _onClick = onClick != null ? () => onClick(id) : null;\n\n return h(\n ClickableText,\n {\n onClick: _onClick,\n className: classNames(\"identifier\", className),\n },\n id,\n );\n}\n\ntype UnitInfo = {\n unitID: number;\n colID?: number;\n name?: string;\n};\n\nfunction UnitIDList({ units, onSelectUnit, showNames = false }) {\n const unitsMap = useColumnUnitsMap();\n\n const extUnits: UnitInfo[] = useMemo(() => {\n const u1 = units.filter((d) => d != 0);\n if (showNames) {\n return u1.map((unitID) => {\n const unitData = unitsMap?.get(unitID);\n let name: string = undefined;\n if (unitData != null) {\n name = defaultNameFunction(unitData);\n }\n return {\n unitID,\n colID: unitData?.col_id,\n name,\n };\n });\n } else {\n return u1.map((unitID) => ({ unitID }));\n }\n }, [units, unitsMap]);\n\n if (extUnits.length === 0) {\n return h(\"span.no-units\", \"None\");\n }\n\n return h(\n ItemList,\n { className: \"units-list\" },\n extUnits.map((info) =>\n h(\"span.item\", h(UnitIdentifier, { ...info, onSelectUnit })),\n ),\n );\n}\n\nfunction UnitIdentifier({\n unitID,\n colID,\n name,\n onSelectUnit,\n}: UnitInfo & { onSelectUnit?: (unitID: number) => void }) {\n const onClick = useMemo(() => {\n if (onSelectUnit == null) return null;\n return () => {\n onSelectUnit(unitID);\n };\n }, [onSelectUnit]);\n\n if (name != null) {\n return h(\n ClickableText,\n {\n className: \"unit-name\",\n onClick,\n },\n name,\n );\n }\n\n return h(Identifier, {\n className: \"unit-id\",\n onClick,\n key: unitID,\n id: unitID,\n });\n}\n\nfunction IntervalProportions({ unit, onClickItem }) {\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n let b_prop = unit.b_prop ?? 0;\n let t_prop = unit.t_prop ?? 1;\n\n const intervalMap = useMacrostratDefs(\"intervals\");\n const int0 = intervalMap?.get(i0) ?? {};\n\n const interval0: IntervalShort = {\n ...int0,\n id: i0,\n name: unit.b_int_name,\n };\n\n let p0: ReactNode = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1: ReactNode = h(Proportion, { value: t_prop });\n\n if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {\n // We have a single interval with undefined proportions\n p0 = h(Proportion, { value: b_prop });\n }\n\n if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {\n p0 = h(\"span.joint-proportion\", [p0, h(\"span.sep\", \"to\"), p1]);\n }\n\n const clickable = onClickItem != null;\n\n const handleClick = (event: MouseEvent) => {\n if (onClickItem) {\n onClickItem(event, interval0);\n }\n };\n\n return h(\"div.interval-proportions\", [\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: interval0,\n prefix: p0,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \"to\"),\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: {\n ...int1,\n id: i1,\n name: unit.t_int_name,\n },\n prefix: p1,\n }),\n ]),\n ]);\n}\n\nconst formatProportion = (d) => {\n if (d == null) return null;\n return d.toFixed(1);\n};\n\nfunction Proportion({ value }) {\n let content = null;\n if (value == 0) {\n content = \"base\";\n } else if (value == 1) {\n content = \"top\";\n } else {\n content = formatProportion(value * 100) + \"%\";\n }\n\n return h(\"span.proportion\", content);\n}\n\nfunction formatRange(min, max, precision = null) {\n if (min == null || max == null) return null;\n if (min === max) {\n return min.toFixed(precision);\n }\n\n return `${formatSignificance(min, precision)}–${formatSignificance(\n max,\n precision,\n )}`;\n}\n\nfunction formatSignificance(value, precision = null) {\n // Format to preserve a reasonable number of significant figures\n // this could be done with an easier algorithm, probably:\n\n if (precision == null) {\n return value.toLocaleString();\n }\n if (precision >= 0) {\n return value.toFixed(precision);\n }\n if (precision < 0) {\n return (\n (value / Math.pow(10, -precision)).toFixed(0) + \"0\".repeat(-precision)\n );\n }\n}\n"],"names":[],"version":3,"file":"column-views.0a010643.js.map"}
@@ -1,136 +0,0 @@
1
- import {createCompositeScale as $728f6cf6c12cd490$export$3ada7641926a616d} from "./column-views.1b5bf0c6.js";
2
- import {createContext as $a90Ta$createContext, useMemo as $a90Ta$useMemo, useContext as $a90Ta$useContext, useRef as $a90Ta$useRef, useEffect as $a90Ta$useEffect} from "react";
3
- import $a90Ta$macrostrathyper from "@macrostrat/hyper";
4
- import {createIsolation as $a90Ta$createIsolation} from "jotai-scope";
5
- import {atom as $a90Ta$atom} from "jotai";
6
-
7
-
8
-
9
-
10
-
11
-
12
- const { Provider: $d5074f164411387e$var$Provider, useSetAtom: $d5074f164411387e$var$useSetAtom, useAtomValue: $d5074f164411387e$var$useAtomValue, useStore: $d5074f164411387e$var$useStore } = (0, $a90Ta$createIsolation)();
13
- const $d5074f164411387e$var$columnUnitsAtom = (0, $a90Ta$atom)();
14
- const $d5074f164411387e$var$columnUnitsMapAtom = (0, $a90Ta$atom)((get)=>{
15
- const units = get($d5074f164411387e$var$columnUnitsAtom);
16
- if (!units) return null;
17
- const unitMap = new Map();
18
- units.forEach((unit)=>{
19
- unitMap.set(unit.unit_id, unit);
20
- });
21
- return unitMap;
22
- });
23
- function $d5074f164411387e$var$ScopedProvider({ children: children, ...rest }) {
24
- // Always use the same store instance in this tree
25
- let val = null;
26
- try {
27
- val = $d5074f164411387e$var$useStore();
28
- } catch {
29
- // No store found, create a new one
30
- val = null;
31
- }
32
- return (0, $a90Ta$macrostrathyper)($d5074f164411387e$var$Provider, {
33
- store: val,
34
- ...rest
35
- }, children);
36
- }
37
- function $d5074f164411387e$export$ef5395089200109b({ children: children, units: units }) {
38
- /** Top-level provider for Macrostrat column data.
39
- * It is either provided by the Column component itself, or
40
- * can be hoisted higher in the tree to provide a common data context
41
- */ const atomMap = [
42
- [
43
- $d5074f164411387e$var$columnUnitsAtom,
44
- units
45
- ]
46
- ];
47
- return (0, $a90Ta$macrostrathyper)($d5074f164411387e$var$ScopedProvider, {
48
- initialValues: atomMap
49
- }, [
50
- (0, $a90Ta$macrostrathyper)($d5074f164411387e$var$AtomUpdater, {
51
- atoms: atomMap
52
- }),
53
- children
54
- ]);
55
- }
56
- const $d5074f164411387e$var$MacrostratColumnDataContext = (0, $a90Ta$createContext)(null);
57
- function $d5074f164411387e$export$7fec7bd80ff9c10e({ children: children, units: units, sections: sections, totalHeight: totalHeight, axisType: axisType }) {
58
- /** Internal provider for Macrostrat column data.
59
- * As a general rule, we want to provide data and column-axis
60
- * height calculations through the context, since these need to
61
- * be accessed by any component that lays out information on the
62
- * column.
63
- *
64
- * Cross-axis layout and view configuration (e.g., showing and hiding
65
- * of different components or labels) should be handled through passing
66
- * props to the components themselves.
67
- * */ const value = (0, $a90Ta$useMemo)(()=>{
68
- // For now, change ordinal axis types to age axis types
69
- return {
70
- units: units,
71
- sections: sections,
72
- totalHeight: totalHeight,
73
- axisType: axisType
74
- };
75
- }, [
76
- units,
77
- sections,
78
- totalHeight,
79
- axisType
80
- ]);
81
- return (0, $a90Ta$macrostrathyper)($d5074f164411387e$export$ef5395089200109b, {
82
- units: units
83
- }, (0, $a90Ta$macrostrathyper)($d5074f164411387e$var$MacrostratColumnDataContext.Provider, {
84
- value: value
85
- }, children));
86
- }
87
- function $d5074f164411387e$export$f8509b7cce386c7d() {
88
- const ctx = (0, $a90Ta$useContext)($d5074f164411387e$var$MacrostratColumnDataContext);
89
- if (!ctx) throw new Error("useMacrostratColumnData must be used within a MacrostratColumnDataProvider");
90
- return ctx;
91
- }
92
- function $d5074f164411387e$export$6fb40844db555b2() {
93
- return $d5074f164411387e$var$useAtomValue($d5074f164411387e$var$columnUnitsAtom);
94
- }
95
- function $d5074f164411387e$export$7513be0cfd10d9cc() {
96
- try {
97
- return $d5074f164411387e$var$useAtomValue($d5074f164411387e$var$columnUnitsMapAtom);
98
- } catch {
99
- return null;
100
- }
101
- }
102
- function $d5074f164411387e$export$a7fc62995ec4f76() {
103
- const ctx = $d5074f164411387e$export$f8509b7cce386c7d();
104
- return (0, $a90Ta$useMemo)(()=>(0, $728f6cf6c12cd490$export$3ada7641926a616d)(ctx.sections, true), [
105
- ctx.sections
106
- ]);
107
- }
108
- function $d5074f164411387e$var$AtomUpdater({ atoms: atoms }) {
109
- /**
110
- * A generic updater to sync Jotai atoms with state passed as props.
111
- * Useful for scoped providers where state needs to be synced outside
112
- * of the current context.
113
- */ /** TODO: this is an awkward way to keep atoms updated */ // The scoped store
114
- const store = $d5074f164411387e$var$useStore();
115
- // Warn on atoms changing length
116
- const prevLengthRef = (0, $a90Ta$useRef)(atoms.length);
117
- (0, $a90Ta$useEffect)(()=>{
118
- if (prevLengthRef.current !== atoms.length) {
119
- console.error("Error: number of atoms in ScopedAtomUpdater has changed.");
120
- prevLengthRef.current = atoms.length;
121
- }
122
- }, [
123
- atoms.length
124
- ]);
125
- for (const [atom, value] of atoms)(0, $a90Ta$useEffect)(()=>{
126
- store.set(atom, value);
127
- }, [
128
- store,
129
- value
130
- ]);
131
- return null;
132
- }
133
-
134
-
135
- export {$d5074f164411387e$export$ef5395089200109b as MacrostratColumnStateProvider, $d5074f164411387e$export$7fec7bd80ff9c10e as MacrostratColumnDataProvider, $d5074f164411387e$export$f8509b7cce386c7d as useMacrostratColumnData, $d5074f164411387e$export$6fb40844db555b2 as useMacrostratUnits, $d5074f164411387e$export$7513be0cfd10d9cc as useColumnUnitsMap, $d5074f164411387e$export$a7fc62995ec4f76 as useCompositeScale};
136
- //# sourceMappingURL=column-views.4b259f9e.js.map
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;AAoBA,MAAM,YAAE,8BAAQ,cAAE,gCAAU,gBAAE,kCAAY,YAAE,8BAAQ,EAAE,GAAG,CAAA,GAAA,sBAAc;AAOvE,MAAM,wCAAkB,CAAA,GAAA,WAAG;AAE3B,MAAM,2CAAqB,CAAA,GAAA,WAAG,EAA+B,CAAC;IAC5D,MAAM,QAAQ,IAAI;IAClB,IAAI,CAAC,OAAO,OAAO;IACnB,MAAM,UAAU,IAAI;IACpB,MAAM,OAAO,CAAC,CAAC;QACb,QAAQ,GAAG,CAAC,KAAK,OAAO,EAAE;IAC5B;IACA,OAAO;AACT;AAEA,SAAS,qCAAe,YAAE,QAAQ,EAAE,GAAG,MAAqB;IAC1D,kDAAkD;IAClD,IAAI,MAAM;IACV,IAAI;QACF,MAAM;IACR,EAAE,OAAM;QACN,mCAAmC;QACnC,MAAM;IACR;IACA,OAAO,CAAA,GAAA,sBAAA,EAAE,gCAAU;QAAE,OAAO;QAAK,GAAG,IAAI;IAAC,GAAG;AAC9C;AAEO,SAAS,0CAA8B,YAC5C,QAAQ,SACR,KAAK,EAIN;IACC;;;GAGC,GAED,MAAM,UAAmD;QACvD;YAAC;YAAiB;SAAM;KACzB;IAED,OAAO,CAAA,GAAA,sBAAA,EACL,sCACA;QACE,eAAe;IACjB,GACA;QAAC,CAAA,GAAA,sBAAA,EAAE,mCAAa;YAAE,OAAO;QAAQ;QAAI;KAAS;AAElD;AASA,MAAM,oDACJ,CAAA,GAAA,oBAAY,EAA+B;AAEtC,SAAS,0CAA6B,YAC3C,QAAQ,SACR,KAAK,YACL,QAAQ,eACR,WAAW,YACX,QAAQ,EAC8C;IACtD;;;;;;;;;KASG,GAEH,MAAM,QAAQ,CAAA,GAAA,cAAM,EAAE;QACpB,uDAAuD;QACvD,OAAO;mBACL;sBACA;yBACA;sBACA;QACF;IACF,GAAG;QAAC;QAAO;QAAU;QAAa;KAAS;IAE3C,OAAO,CAAA,GAAA,sBAAA,EACL,2CACA;eAAE;IAAM,GACR,CAAA,GAAA,sBAAA,EAAE,kDAA4B,QAAQ,EAAE;eAAE;IAAM,GAAG;AAEvD;AAEO,SAAS;IACd,MAAM,MAAM,CAAA,GAAA,iBAAS,EAAE;IACvB,IAAI,CAAC,KACH,MAAM,IAAI,MACR;IAGJ,OAAO;AACT;AAEO,SAAS;IACd,OAAO,mCAAa;AACtB;AAEO,SAAS;IACd,IAAI;QACF,OAAO,mCAAa;IACtB,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,SAAS;IACd,MAAM,MAAM;IACZ,OAAO,CAAA,GAAA,cAAM,EACX,IAAM,CAAA,GAAA,yCAAmB,EAAE,IAAI,QAAQ,EAAE,OACzC;QAAC,IAAI,QAAQ;KAAC;AAElB;AAEA,SAAS,kCAAY,SACnB,KAAK,EAGN;IACC;;;;GAIC,GACD,uDAAuD,GACvD,mBAAmB;IACnB,MAAM,QAAQ;IAEd,gCAAgC;IAChC,MAAM,gBAAgB,CAAA,GAAA,aAAK,EAAE,MAAM,MAAM;IACzC,CAAA,GAAA,gBAAQ,EAAE;QACR,IAAI,cAAc,OAAO,KAAK,MAAM,MAAM,EAAE;YAC1C,QAAQ,KAAK,CAAC;YACd,cAAc,OAAO,GAAG,MAAM,MAAM;QACtC;IACF,GAAG;QAAC,MAAM,MAAM;KAAC;IAEjB,KAAK,MAAM,CAAC,MAAM,MAAM,IAAI,MAC1B,CAAA,GAAA,gBAAQ,EAAE;QACR,MAAM,GAAG,CAAC,MAAM;IAClB,GAAG;QAAC;QAAO;KAAM;IAEnB,OAAO;AACT","sources":["packages/column-views/src/data-provider/store.ts"],"sourcesContent":["import {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport h from \"@macrostrat/hyper\";\nimport {\n CompositeColumnScale,\n createCompositeScale,\n} from \"../prepare-units/composite-scale\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ExtUnit, PackageLayoutData } from \"../prepare-units\";\n// An isolated jotai store for Macrostrat column usage\n// TODO: there might be a better way to do this using the MacrostratDataProvider or similar\nimport { createIsolation } from \"jotai-scope\";\nimport { atom, PrimitiveAtom, type WritableAtom } from \"jotai\";\n\nconst { Provider, useSetAtom, useAtomValue, useStore } = createIsolation();\n\ntype ProviderProps = {\n children: ReactNode;\n initialValues?: Iterable<[WritableAtom<any, any, any>, any]>;\n};\n\nconst columnUnitsAtom = atom<ExtUnit[]>();\n\nconst columnUnitsMapAtom = atom<Map<number, ExtUnit> | null>((get) => {\n const units = get(columnUnitsAtom);\n if (!units) return null;\n const unitMap = new Map<number, ExtUnit>();\n units.forEach((unit) => {\n unitMap.set(unit.unit_id, unit);\n });\n return unitMap;\n});\n\nfunction ScopedProvider({ children, ...rest }: ProviderProps) {\n // Always use the same store instance in this tree\n let val = null;\n try {\n val = useStore();\n } catch {\n // No store found, create a new one\n val = null;\n }\n return h(Provider, { store: val, ...rest }, children);\n}\n\nexport function MacrostratColumnStateProvider({\n children,\n units,\n}: {\n children?: ReactNode;\n units: ExtUnit[];\n}) {\n /** Top-level provider for Macrostrat column data.\n * It is either provided by the Column component itself, or\n * can be hoisted higher in the tree to provide a common data context\n */\n\n const atomMap: [[PrimitiveAtom<ExtUnit[]>, ExtUnit[]]] = [\n [columnUnitsAtom, units],\n ];\n\n return h(\n ScopedProvider,\n {\n initialValues: atomMap,\n },\n [h(AtomUpdater, { atoms: atomMap }), children],\n );\n}\n\nexport interface MacrostratColumnDataContext {\n units: ExtUnit[];\n sections: PackageLayoutData[];\n totalHeight?: number;\n axisType?: ColumnAxisType;\n}\n\nconst MacrostratColumnDataContext =\n createContext<MacrostratColumnDataContext>(null);\n\nexport function MacrostratColumnDataProvider({\n children,\n units,\n sections,\n totalHeight,\n axisType,\n}: MacrostratColumnDataContext & { children: ReactNode }) {\n /** Internal provider for Macrostrat column data.\n * As a general rule, we want to provide data and column-axis\n * height calculations through the context, since these need to\n * be accessed by any component that lays out information on the\n * column.\n *\n * Cross-axis layout and view configuration (e.g., showing and hiding\n * of different components or labels) should be handled through passing\n * props to the components themselves.\n * */\n\n const value = useMemo(() => {\n // For now, change ordinal axis types to age axis types\n return {\n units,\n sections,\n totalHeight,\n axisType,\n };\n }, [units, sections, totalHeight, axisType]);\n\n return h(\n MacrostratColumnStateProvider,\n { units },\n h(MacrostratColumnDataContext.Provider, { value }, children),\n );\n}\n\nexport function useMacrostratColumnData() {\n const ctx = useContext(MacrostratColumnDataContext);\n if (!ctx) {\n throw new Error(\n \"useMacrostratColumnData must be used within a MacrostratColumnDataProvider\",\n );\n }\n return ctx;\n}\n\nexport function useMacrostratUnits() {\n return useAtomValue(columnUnitsAtom);\n}\n\nexport function useColumnUnitsMap(): Map<number, ExtUnit> | null {\n try {\n return useAtomValue(columnUnitsMapAtom);\n } catch {\n return null;\n }\n}\n\nexport function useCompositeScale(): CompositeColumnScale {\n const ctx = useMacrostratColumnData();\n return useMemo(\n () => createCompositeScale(ctx.sections, true),\n [ctx.sections],\n );\n}\n\nfunction AtomUpdater({\n atoms,\n}: {\n atoms: [WritableAtom<any, any, any>, any][];\n}) {\n /**\n * A generic updater to sync Jotai atoms with state passed as props.\n * Useful for scoped providers where state needs to be synced outside\n * of the current context.\n */\n /** TODO: this is an awkward way to keep atoms updated */\n // The scoped store\n const store = useStore();\n\n // Warn on atoms changing length\n const prevLengthRef = useRef(atoms.length);\n useEffect(() => {\n if (prevLengthRef.current !== atoms.length) {\n console.error(\"Error: number of atoms in ScopedAtomUpdater has changed.\");\n prevLengthRef.current = atoms.length;\n }\n }, [atoms.length]);\n\n for (const [atom, value] of atoms) {\n useEffect(() => {\n store.set(atom, value);\n }, [store, value]);\n }\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.4b259f9e.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/correlation-chart/main.ts"],"sourcesContent":["/** Correlation chart */\nimport {\n UnitSelectionProvider,\n UnitKeyboardNavigation,\n useUnitSelectionStore,\n} from \"../data-provider\";\nimport { UnitSelectionPopover } from \"../unit-details\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMemo, useRef } from \"react\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\nimport { CompositeTimescaleCore } from \"../section\";\nimport classNames from \"classnames\";\nimport {\n findLaterallyExtensiveUnits,\n splitStratIntoBoxes,\n UnitGroupBox,\n CorrelationChartSettings,\n buildCorrelationChartData,\n} from \"./prepare-data\";\nimport {\n CompositeAgeAxisCore,\n CompositeStratigraphicScaleInfo,\n} from \"../age-axis\";\nimport {\n ColumnAxisType,\n ColumnProvider,\n SVG,\n} from \"@macrostrat/column-components\";\nimport { ColoredUnitComponent } from \"../units\";\nimport { UnitBoxes } from \"../units/boxes\";\nimport { ColumnContainer } from \"../column\";\nimport { ColumnData } from \"../data-provider\";\nimport { BaseUnit } from \"@macrostrat/api-types\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport { ExtUnit } from \"../prepare-units/types\";\n\nconst h = hyper.styled(styles);\n\nexport interface CorrelationChartProps extends CorrelationChartSettings {\n data: ColumnData[];\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n unconformityLabels?: boolean;\n selectedUnit?: number | null;\n showUnitPopover?: boolean;\n unitComponent?: any;\n onUnitSelected?: (unitID: number | null, unit: BaseUnit | null) => void;\n}\n\nexport function CorrelationChart({\n data,\n columnSpacing = 0,\n columnWidth = 130,\n unconformityLabels = true,\n showUnitPopover = true,\n selectedUnit,\n onUnitSelected,\n unitComponent,\n ...scaleProps\n}: CorrelationChartProps) {\n const defaultScaleProps = {\n targetUnitHeight: 10,\n unconformityHeight: 60,\n minSectionHeight: 60,\n collapseSmallUnconformities: true,\n };\n\n const chartData = useMemo(() => {\n if (!data) return null;\n return buildCorrelationChartData(data, {\n ...defaultScaleProps,\n ...scaleProps,\n });\n }, [data, ...Object.values(scaleProps)]);\n\n const columnRef = useRef(null);\n\n // A flattened units array is used to support keyboard navigation\n const units = useMemo(() => {\n return data?.map((d0) => d0.units).flat() ?? [];\n }, [data]);\n\n const inDarkMode = useInDarkMode();\n\n const className = classNames({\n \"dark-mode\": inDarkMode,\n });\n\n if (chartData == null) {\n return null;\n }\n\n const { packages, scaleInfo, nColumns } = chartData;\n\n const mainWidth = (columnWidth + columnSpacing) * nColumns;\n\n return h(\n ColumnContainer,\n { className: \"correlation-diagram\" },\n h(\n UnitSelectionProvider,\n { columnRef, selectedUnit, onUnitSelected, units },\n h(ChartArea, [\n h(TimescaleColumn, {\n key: \"timescale\",\n scaleInfo,\n unconformityLabels,\n }),\n h(\"div.main-chart\", { ref: columnRef }, [\n h(\n SVG,\n {\n className,\n innerWidth: mainWidth,\n height: scaleInfo.totalHeight,\n paddingH: 4,\n },\n packages.map((pkg, i) => {\n const { offset, domain, pixelScale, scale, key } =\n scaleInfo.packages[i];\n return h(Package, {\n columnData: pkg.columnData,\n key,\n columnWidth,\n columnSpacing,\n offset,\n domain,\n pixelScale,\n scale,\n unitComponent,\n });\n }),\n ),\n h.if(showUnitPopover)(UnitSelectionPopover),\n // Navigation only works within a column for now...\n h(UnitKeyboardNavigation, { units }),\n ]),\n ]),\n ),\n );\n}\n\nfunction Package({\n columnData,\n columnSpacing,\n columnWidth,\n unitComponent,\n offset,\n domain,\n pixelScale,\n scale,\n}) {\n return h(\"g.package\", { transform: `translate(0 ${offset})` }, [\n // Disable the SVG overlay for now\n //h(PackageSVGOverlay, { data, columnSpacing }),\n h(\"g.column-units\", [\n columnData.map((data, i) => {\n return h(Column, {\n units: data.units,\n unitComponent,\n width: columnWidth,\n key: i,\n domain,\n pixelScale,\n scale,\n offsetLeft: i * (columnWidth + columnSpacing),\n });\n }),\n ]),\n ]);\n}\n\ninterface ColumnProps {\n units: ExtUnit[];\n unitComponent?: React.FunctionComponent<any>;\n unitComponentProps?: any;\n showLabels?: boolean;\n width?: number;\n columnWidth?: number;\n columnSpacing?: number;\n targetUnitHeight?: number;\n offsetLeft?: number;\n domain: [number, number];\n pixelScale: number;\n scale?: ScaleContinuousNumeric<number, number>;\n}\n\nfunction Column(props: ColumnProps) {\n const {\n units,\n width = 150,\n offsetLeft,\n domain,\n pixelScale,\n scale,\n unitComponent = ColoredUnitComponent,\n } = props;\n\n const columnWidth = width;\n\n if (units.length == 0) {\n return null;\n }\n\n return h(\n \"g.section\",\n {\n transform: `translate(${offsetLeft} 0)`,\n },\n h(\n ColumnProvider,\n {\n // Need to tighten up types here...\n divisions: units as any[],\n range: domain,\n scale,\n pixelsPerMeter: pixelScale, // Actually pixels per myr\n axisType: ColumnAxisType.AGE,\n },\n h(UnitBoxes, {\n unitComponent,\n unitComponentProps: {\n nColumns: 2,\n width: columnWidth,\n showLabel: false,\n },\n }),\n ),\n );\n}\n\nfunction PackageSVGOverlay({ data, columnWidth = 100, columnSpacing = 0 }) {\n const { b_age, t_age, bestPixelScale, columnData } = data;\n\n const width = (columnWidth + columnSpacing) * columnData.length;\n const height = Math.ceil((b_age - t_age) * bestPixelScale) + 2;\n\n const extensiveUnits = findLaterallyExtensiveUnits(data);\n\n const scale = (val: number) => {\n return (val - t_age) * bestPixelScale;\n };\n\n return h(\n \"div.package-overlay\",\n { style: { width, height } },\n extensiveUnits.map((d) => {\n return h(LaterallyExtensiveUnit, {\n data: d,\n scale,\n pixelScale: bestPixelScale,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction LaterallyExtensiveUnit({ data, scale, pixelScale, columnSpacing }) {\n const { b_age, t_age, strat_name_long, units } = data;\n // Build boxes by column groups\n const boxes: UnitGroupBox[] = splitStratIntoBoxes(data);\n\n return h(\n \"div.laterally-extensive-unit\",\n boxes.map((d, i) => {\n return h(StratColSpan, {\n scale,\n data: d,\n pixelScale,\n key: i,\n columnSpacing,\n });\n }),\n );\n}\n\nfunction StratColSpan({\n data,\n scale,\n columnWidth = 100,\n columnSpacing = 0,\n pixelScale = 1,\n}) {\n const { startCol, endCol, strat_name_long, t_age, b_age } = data;\n const top = scale(t_age);\n const left = startCol * (columnWidth + columnSpacing);\n const width = (endCol - startCol + 1) * (columnWidth + columnSpacing);\n const height = (b_age - t_age) * pixelScale;\n return h(\n \"div.strat-col-span\",\n { style: { top, height, width, left } },\n strat_name_long,\n );\n}\n\nfunction ChartArea({ children }) {\n const setSelectedUnit = useUnitSelectionStore(\n (state) => state.setSelectedUnit,\n );\n\n return h(\n \"div.correlation-chart-inner\",\n {\n onClick() {\n setSelectedUnit(null);\n },\n },\n children,\n );\n}\n\ninterface TimescaleColumnProps {\n scaleInfo: CompositeStratigraphicScaleInfo;\n showLabels?: boolean;\n unconformityLabels?: boolean;\n}\n\nfunction TimescaleColumn(props: TimescaleColumnProps) {\n const { scaleInfo, unconformityLabels = true } = props;\n return h(\"div.column-container.age-axis-container\", [\n h(CompositeAgeAxisCore, { ...scaleInfo }),\n h(CompositeTimescaleCore, { ...scaleInfo, unconformityLabels }),\n ]);\n}\n"],"names":[],"version":3,"file":"column-views.6f96d1c3.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/data-provider/fetch.ts"],"sourcesContent":["import {\n ColumnGeoJSONRecord,\n ColumnGeoJSONRecordWithID,\n MacrostratRef,\n StratName,\n StratUnit,\n UnitLong,\n} from \"@macrostrat/api-types\";\nimport {\n addQueryString,\n joinURL,\n useAPIResult,\n} from \"@macrostrat/ui-components\";\nimport crossFetch from \"cross-fetch\";\nimport { feature } from \"topojson-client\";\nimport { geoArea } from \"d3-geo\";\nimport _ from \"underscore\";\n\nfunction defaultFetch(\n url: string,\n options: RequestInit | undefined = undefined,\n) {\n const baseURL = \"https://macrostrat.org/api/v2\";\n return crossFetch(baseURL + url, options);\n}\n\nexport type ColumnStatusCode = \"in process\" | \"active\" | \"obsolete\";\n\nexport interface ColumnFetchOptions {\n apiBaseURL?: string;\n projectID?: number;\n statusCode?: ColumnStatusCode | ColumnStatusCode[];\n format?: \"geojson\" | \"topojson\" | \"geojson_bare\";\n fetch?: any;\n}\n\nexport async function fetchAllColumns(\n options: ColumnFetchOptions = {},\n): Promise<ColumnGeoJSONRecord[]> {\n const {\n apiBaseURL,\n projectID,\n format = \"topojson\",\n statusCode,\n fetch = crossFetch,\n } = options;\n\n let args: any = { format };\n if (projectID != null) {\n args = { ...args, project_id: projectID };\n }\n let _statusCode: string | undefined = undefined;\n if (Array.isArray(statusCode)) {\n _statusCode = statusCode.join(\",\");\n } else if (statusCode != null) {\n _statusCode = statusCode;\n }\n args.statusCode = _statusCode;\n\n if (projectID == null) {\n args = { ...args, all: true };\n }\n\n let url = \"/columns\";\n if (apiBaseURL != null) {\n url = joinURL(apiBaseURL, url);\n }\n\n // Try with fetch\n url = addQueryString(url, args);\n\n const res = await fetch(url, {\n method: \"GET\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n });\n\n if (res == null) {\n return null;\n }\n\n // Get JSON\n const data = await res.json();\n return postProcessColumns(columnProcessors[format](data));\n}\n\nexport function useColumnFeatures({\n apiRoute = \"/columns\",\n status_code,\n project_id,\n format = \"geojson\",\n}) {\n let all: boolean = undefined;\n if (status_code == null && project_id == null) {\n all = true;\n }\n\n const processor = columnProcessors[format];\n\n return useAPIResult(\n apiRoute,\n { format, all, status_code, project_id },\n processor,\n );\n}\n\nfunction processGeoJSON(res) {\n return processGeoJSONBare(res?.success?.data);\n}\n\nfunction processGeoJSONBare(res) {\n return res?.features;\n}\n\nfunction processTopoJSON(res) {\n try {\n const { data } = res.success;\n const { features: f } = feature(data, data.objects.output) as any;\n return f;\n } catch (err) {\n console.error(err);\n return [];\n }\n}\n\nfunction postProcessColumns(columns) {\n return promoteColumnIDs(\n convertSmallAreasToPoints(removeFeaturesWithoutGeometry(columns)),\n );\n}\n\nfunction promoteColumnIDs(\n features: ColumnGeoJSONRecord[],\n): ColumnGeoJSONRecordWithID[] {\n return features.map((f, i) => {\n return {\n id: f.properties?.col_id,\n ...f,\n };\n });\n}\n\nfunction removeFeaturesWithoutGeometry(features) {\n return features.filter((f) => f.geometry != null);\n}\n\nfunction convertSmallAreasToPoints(features) {\n return features.map((f) => {\n // GeoArea takes a long time to run. We are really more worried about points that are zero-area\n if (geoArea(f.geometry) < 1e-8) {\n const centroid = f.geometry.coordinates[0][0];\n f.geometry = {\n type: \"Point\",\n coordinates: centroid,\n };\n }\n return f;\n });\n}\n\nconst columnProcessors = {\n topojson: processTopoJSON,\n geojson: processGeoJSON,\n geojson_bare: processGeoJSONBare,\n};\n\nasync function unwrapResponse(res) {\n if (res == null) {\n return null;\n }\n const resData = await res.json();\n return resData[\"success\"][\"data\"];\n}\n\nexport async function fetchLithologies(fetch = defaultFetch) {\n const res = await fetch(\"/defs/lithologies?all\");\n return await unwrapResponse(res);\n}\n\nexport async function fetchIntervals(\n timescaleID: number | null,\n fetch = defaultFetch,\n) {\n let url = `/defs/intervals`;\n if (timescaleID != null) {\n url += `?timescale_id=${timescaleID}`;\n } else {\n url += \"?all\";\n }\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport async function fetchEnvironments(fetch = defaultFetch) {\n const res = await fetch(\"/defs/environments?all\");\n return await unwrapResponse(res);\n}\n\nexport async function fetchRefs(\n refs: number[],\n fetch = defaultFetch,\n): Promise<MacrostratRef[]> {\n let url = `/defs/refs`;\n if (refs.length == 0) {\n return [];\n }\n url += \"?ref_id=\" + refs.join(\",\");\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport async function fetchStratNames(\n names: number[],\n fetch = defaultFetch,\n): Promise<StratName[]> {\n let url = `/defs/strat_names`;\n if (names.length == 0) {\n return [];\n }\n url += \"?strat_name_id=\" + names.join(\",\");\n const res = await fetch(url);\n return await unwrapResponse(res);\n}\n\nexport type ColumnData = {\n units: UnitLong[];\n columnID: number;\n};\n\nexport async function fetchUnits(\n columns: number[],\n fetch = defaultFetch,\n): Promise<ColumnData[]> {\n const promises = columns.map((col_id) => fetchColumnUnits(col_id, fetch));\n return await Promise.all(promises);\n}\n\nexport async function fetchColumnUnits(\n col_id: number,\n fetch = defaultFetch,\n): Promise<ColumnData> {\n const params = new URLSearchParams();\n params.append(\"response\", \"long\");\n params.append(\"col_id\", col_id.toString());\n const res = await fetch(\"/units\" + \"?\" + params.toString());\n const data = await res.json();\n if (!data.success) {\n throw new Error(\"Failed to fetch column units\");\n }\n const units = data.success.data;\n return { columnID: col_id, units };\n}\n"],"names":[],"version":3,"file":"column-views.8c296309.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;;;AAOH,MAAM,0BAAI,CAAA,GAAA,sBAAI,EAAE,MAAM,CAAC,CAAA,GAAA,uEAAK;AAoBrB,SAAS;IACd,MAAM,SAAS,CAAA,GAAA,wCAAiB,KAAK,CAAC,EAAE,EAAE;IAC1C,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,MAAM,WAAW,CAAA,GAAA,mBAAW,EAC1B,+CACA;gBAAE;IAAO,GACT,CAAC,MAAQ,IAAI,OAAO,CAAC,IAAI;IAG3B,IAAI,YAAY,MACd,OAAO;IAGT,OAAO,wBACL,0BACA,SAAS,GAAG,CAAC,CAAC;QACZ,MAAM,SAAS,MAAM,QAAQ,SAAS;QAEtC,OAAO,wBAAE,kCAAkC;YACzC,KAAK,QAAQ,WAAW;YACxB,OAAO;gBAAE,KAAK,GAAG,OAAO,EAAE,CAAC;YAAC;QAC9B;IACF;AAEJ;AAEO,SAAS;IACd;;GAEC,GACD,MAAM,QAAQ,CAAA,GAAA,wCAAiB;IAC/B,MAAM,WAAW,CAAA,GAAA,yCAAkB,EAAE;IACrC,MAAM,QAAQ,CAAA,GAAA,wCAAgB;IAE9B,OAAO,wBACL,0BACA,SAAS,GAAG,CAAC,CAAC;QACZ,MAAM,SAAS,MAAM,QAAQ,GAAG;QAChC,OAAO,wBAAE,kCAAkC;YACzC,KAAK,QAAQ,KAAK;YAClB,OAAO;gBAAE,KAAK,GAAG,OAAO,EAAE,CAAC;YAAC;QAC9B;IACF;AAEJ","sources":["packages/column-views/src/age-model-overlay.ts"],"sourcesContent":["/** An in-development overlay for a column's age model.\n *\n * Age model info:\n * {\n * \"boundary_id\": 8049,\n * \"col_id\": 432,\n * \"section_id\": 3104,\n * \"interval_id\": 268,\n * \"interval_name\": \"Calymmian\",\n * \"age_bottom\": 1600,\n * \"age_top\": 1400,\n * \"rel_position\": 0.85,\n * \"model_age\": 1430,\n * \"boundary_status\": \"absolute\",\n * \"boundary_type\": \"\",\n * \"boundary_position\": null,\n * \"unit_below\": 11541,\n * \"unit_above\": 0,\n * \"ref_id\": 217\n * },\n *\n * */\n\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./age-model-overlay.module.sass\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport { useCompositeScale, useMacrostratUnits } from \"./data-provider\";\nimport { buildColumnSurfaces } from \"./prepare-units/dynamic-scales\";\nconst h = hyper.styled(styles);\n\ninterface AgeModelSurface {\n boundary_id: number;\n col_id: number;\n section_id: number;\n interval_id: number;\n interval_name: string;\n age_bottom: number;\n age_top: number;\n rel_position: number;\n model_age: number;\n boundary_status: \"absolute\" | \"relative\" | \"modeled\";\n boundary_type: string;\n boundary_position: null | number;\n unit_below: number;\n unit_above: number;\n ref_id: number;\n}\n\nexport function BoundaryAgeModelOverlay() {\n const col_id = useMacrostratUnits()?.[0]?.col_id;\n const scale = useCompositeScale();\n\n const ageModel = useAPIResult(\n \"https://dev.macrostrat.org/api/v2/age_model\",\n { col_id },\n (res) => res.success.data,\n );\n\n if (ageModel == null) {\n return null;\n }\n\n return h(\n \"div.boundary-age-model\",\n ageModel.map((surface) => {\n const height = scale(surface.model_age);\n\n return h(\"div.boundary-age-model-surface\", {\n key: surface.boundary_id,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n\nexport function ComputedSurfacesOverlay() {\n /** Overlay showing age surfaces. This is like the boundary age model overlay but\n * it is computed on the fly from unit tops and bottoms.\n */\n const units = useMacrostratUnits();\n const surfaces = buildColumnSurfaces(units);\n const scale = useCompositeScale();\n\n return h(\n \"div.boundary-age-model\",\n surfaces.map((surface) => {\n const height = scale(surface.age);\n return h(\"div.boundary-age-model-surface\", {\n key: surface.index,\n style: { top: `${height}px` },\n });\n }),\n );\n}\n"],"names":[],"version":3,"file":"column-views.9d51a5ab.js.map"}
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;AAMA,MAAM,0BAAI,CAAA,GAAA,sBAAI,EAAE,MAAM,CAAC,CAAA,GAAA,uEAAK;AAErB,SAAS,0CAAmB,SACjC,KAAK,YACL,QAAQ,mBACR,kBAAkB,IAKnB;IACC,MAAM,UAAU,wBAAE,0CAAoB;IAEtC,OAAO,wBACL,oBACA;eACE;IACF,GACA,wBACE,CAAA,GAAA,cAAM,GACN,aAAa;IACb;iBACE;QACA,QAAQ;QACR,WAAW;QACX,UAAU;QACV,WAAW;YACT,iBAAiB;gBAAE,SAAS;oBAAE,SAAS;gBAAgB;YAAE;QAC3D;IACF,GACA,wBAAE;AAGR;AAEA,SAAS,yCAAmB,YAAE,QAAQ,EAAE;IACtC,OAAO,wBACL,OACA;QACE,SAAQ,CAAC;YACP,yCAAyC;YACzC,EAAE,eAAe;QACnB;IACF,GACA;AAEJ;AAEO,SAAS;IACd,MAAM,OAAO,CAAA,GAAA,yCAAc;IAC3B,MAAM,aAAa,CAAA,GAAA,yCAAoB,EAAE,CAAC,QAAU,MAAM,cAAc;IACxE,MAAM,WAAW,CAAA,GAAA,yCAAoB,EAAE,CAAC,QAAU,MAAM,eAAe;IACvE,IAAI,QAAQ,MACV,OAAO;IAGT,OAAO,wBACL,8BACA,wBACE,2CACA;QACE,OAAO;YACL,UAAU;YACV,KAAK,UAAU,KAAK;YACpB,OAAO,UAAU,SAAS;YAC1B,MAAM,UAAU,KAAK;YACrB,QAAQ,UAAU,UAAU;QAC9B;IACF,GACA,wBAAE,CAAA,GAAA,yCAAe,GAAG;cAClB;QACA,0BAA0B;QAC1B,WAAW;QACX,cAAc,CAAC;YACb,QAAQ,GAAG,CAAC,6BAA6B;YACzC,WAAW,IAAI,MAAM;QACvB;IACF;AAGN","sources":["packages/column-views/src/unit-details/popover.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport { Popover } from \"@blueprintjs/core\";\nimport styles from \"./popover.module.sass\";\nimport { useSelectedUnit, useUnitSelectionStore } from \"../data-provider\";\nimport { UnitDetailsPanel } from \"./panel\";\n\nconst h = hyper.styled(styles);\n\nexport function UnitDetailsPopover({\n style,\n children,\n viewportPadding = 20,\n}: {\n style: object;\n viewportPadding?: number;\n children: React.ReactNode;\n}) {\n const content = h(InteractionBarrier, children);\n\n return h(\n \"div.popover-main\",\n {\n style,\n },\n h(\n Popover,\n // @ts-ignore\n {\n content,\n isOpen: true,\n usePortal: false,\n position: \"right\",\n modifiers: {\n preventOverflow: { options: { padding: viewportPadding } },\n },\n },\n h(\"span.popover-target\"),\n ),\n );\n}\n\nfunction InteractionBarrier({ children }) {\n return h(\n \"div\",\n {\n onClick(e) {\n // Stop events from leaking to the parent\n e.stopPropagation();\n },\n },\n children,\n );\n}\n\nexport function UnitSelectionPopover() {\n const unit = useSelectedUnit();\n const selectUnit = useUnitSelectionStore((state) => state.onUnitSelected);\n const position = useUnitSelectionStore((state) => state.overlayPosition);\n if (unit == null) {\n return null;\n }\n\n return h(\n \"div.unit-popover-container\",\n h(\n UnitDetailsPopover,\n {\n style: {\n position: \"absolute\",\n top: position?.y ?? 0,\n width: position?.width ?? 100,\n left: position?.x ?? 0,\n height: position?.height ?? 100,\n },\n },\n h(UnitDetailsPanel, {\n unit,\n showLithologyProportions: true,\n className: \"legend-panel\",\n onSelectUnit: (id: number) => {\n console.log(\"Selected unit in popover:\", id);\n selectUnit(id, null, null);\n },\n }),\n ),\n );\n}\n"],"names":[],"version":3,"file":"column-views.b9265595.js.map"}
@@ -1,169 +0,0 @@
1
- import $7fhMn$macrostrathyper from "@macrostrat/hyper";
2
- import {useKeyHandler as $7fhMn$useKeyHandler} from "@macrostrat/ui-components";
3
- import {createContext as $7fhMn$createContext, useContext as $7fhMn$useContext, useState as $7fhMn$useState, useEffect as $7fhMn$useEffect, useRef as $7fhMn$useRef, useCallback as $7fhMn$useCallback} from "react";
4
- import {useStore as $7fhMn$useStore, createStore as $7fhMn$createStore} from "zustand";
5
-
6
-
7
-
8
-
9
-
10
- const $61771df184788970$var$UnitSelectionContext = (0, $7fhMn$createContext)(null);
11
- function $61771df184788970$export$77a278d5ca56e309() {
12
- const store = (0, $7fhMn$useContext)($61771df184788970$var$UnitSelectionContext);
13
- if (store == null) return ()=>{};
14
- return (0, $7fhMn$useStore)(store, (state)=>state.onUnitSelected);
15
- }
16
- function $61771df184788970$export$b220b1d3591dc9e5(selector) {
17
- const store = (0, $7fhMn$useContext)($61771df184788970$var$UnitSelectionContext);
18
- if (store == null) return null;
19
- return (0, $7fhMn$useStore)(store, selector);
20
- }
21
- function $61771df184788970$export$f0dd93f90aa8e5da() {
22
- return $61771df184788970$export$b220b1d3591dc9e5((state)=>state.selectedUnitData);
23
- }
24
- function $61771df184788970$export$f19d75b1d4b676a4(props) {
25
- const [store] = (0, $7fhMn$useState)(()=>(0, $7fhMn$createStore)((set)=>({
26
- selectedUnit: null,
27
- selectedUnitData: null,
28
- overlayPosition: null,
29
- setSelectedUnit (selectedUnit) {
30
- if (selectedUnit == null) {
31
- set({
32
- selectedUnit: null,
33
- selectedUnitData: null
34
- });
35
- return;
36
- // If it's a number, set the selected unit
37
- } else if (typeof selectedUnit === "number") set({
38
- selectedUnit: selectedUnit,
39
- selectedUnitData: null
40
- });
41
- else if ("unit_id" in selectedUnit) set({
42
- selectedUnit: selectedUnit.unit_id,
43
- selectedUnitData: selectedUnit
44
- });
45
- },
46
- onUnitSelected: (input, target = null, event = null)=>{
47
- if (input == null) {
48
- props.onUnitSelected?.(null, null);
49
- return set({
50
- selectedUnit: null,
51
- selectedUnitData: null,
52
- overlayPosition: null
53
- });
54
- }
55
- let unit = null;
56
- if (typeof input === "number") unit = props.units.find((u)=>u.unit_id === input) || null;
57
- else unit = input;
58
- const el = props.columnRef?.current;
59
- let overlayPosition = null;
60
- /** This is not the natural place to get positions within the column,
61
- * but it will work for now.
62
- */ if (props.onClickedColumn) {
63
- // Infer height from top and bottom height of unit (because that's passed back with the call)
64
- //const py = event.y;
65
- //const [bottom, top] = getUnitHeightRange(unit, axisType);
66
- //const height = Math.abs(bottom - top);
67
- /** Ideally this would be defined at the column level */ const columnClickData = {
68
- unitID: unit?.unit_id,
69
- unit: unit,
70
- target: target,
71
- height: el?.getBoundingClientRect().height || 0
72
- };
73
- props.onClickedColumn(columnClickData, event);
74
- }
75
- if (unit != null && el != null && target != null) {
76
- const rect = el.getBoundingClientRect();
77
- const targetRect = target.getBoundingClientRect();
78
- overlayPosition = {
79
- x: targetRect.left - rect.left,
80
- y: targetRect.top - rect.top,
81
- width: targetRect.width,
82
- height: targetRect.height
83
- };
84
- }
85
- props.onUnitSelected?.(unit?.unit_id, unit);
86
- return set({
87
- selectedUnit: unit?.unit_id,
88
- selectedUnitData: unit,
89
- overlayPosition: overlayPosition
90
- });
91
- }
92
- })));
93
- const { units: units, selectedUnit: selectedUnit } = props;
94
- (0, $7fhMn$useEffect)(()=>{
95
- // Synchronize store with provided props
96
- if (selectedUnit != null) {
97
- const unitData = units?.find((u)=>u.unit_id === selectedUnit);
98
- store.setState({
99
- selectedUnit: selectedUnit,
100
- selectedUnitData: unitData
101
- });
102
- } else store.setState({
103
- selectedUnit: null,
104
- selectedUnitData: null
105
- });
106
- }, [
107
- selectedUnit,
108
- units
109
- ]);
110
- return (0, $7fhMn$macrostrathyper)($61771df184788970$var$UnitSelectionContext.Provider, {
111
- value: store
112
- }, props.children);
113
- }
114
- function $61771df184788970$export$cbbec12b1451fe7d(unit) {
115
- const ref = (0, $7fhMn$useRef)();
116
- const selectedUnit = $61771df184788970$export$f0dd93f90aa8e5da();
117
- const onSelectUnit = $61771df184788970$export$b220b1d3591dc9e5((state)=>state.onUnitSelected);
118
- const selected = selectedUnit?.unit_id == unit.unit_id;
119
- const onClick = (0, $7fhMn$useCallback)((evt)=>{
120
- if (onSelectUnit == null) return;
121
- onSelectUnit(unit, ref.current, evt);
122
- evt.stopPropagation();
123
- }, [
124
- unit,
125
- onSelectUnit
126
- ]);
127
- (0, $7fhMn$useEffect)(()=>{
128
- if (!selected || onSelectUnit == null) return;
129
- // In case we haven't set the position of the unit (if we don't have a target), set the selected unit
130
- onSelectUnit(unit, ref.current, null);
131
- // Scroll the unit into view
132
- ref.current?.scrollIntoView({
133
- behavior: "smooth",
134
- block: "center",
135
- inline: "nearest"
136
- });
137
- }, [
138
- selected,
139
- onSelectUnit
140
- ]);
141
- return [
142
- ref,
143
- selected,
144
- onClick
145
- ];
146
- }
147
- function $61771df184788970$export$70f5ee19650fc7d1({ units: units }) {
148
- const selectedUnit = $61771df184788970$export$f0dd93f90aa8e5da();
149
- const selectUnit = $61771df184788970$export$77a278d5ca56e309();
150
- const ix = units.findIndex((unit)=>unit.unit_id === selectedUnit?.unit_id);
151
- const keyMap = {
152
- 38: ix - 1,
153
- 40: ix + 1
154
- };
155
- (0, $7fhMn$useKeyHandler)((event)=>{
156
- const nextIx = keyMap[event.keyCode];
157
- if (nextIx == null || nextIx < 0 || nextIx >= units.length) return;
158
- selectUnit(units[nextIx], null, null);
159
- event.stopPropagation();
160
- }, [
161
- units,
162
- ix
163
- ]);
164
- return null;
165
- }
166
-
167
-
168
- export {$61771df184788970$export$77a278d5ca56e309 as useUnitSelectionDispatch, $61771df184788970$export$b220b1d3591dc9e5 as useUnitSelectionStore, $61771df184788970$export$f0dd93f90aa8e5da as useSelectedUnit, $61771df184788970$export$f19d75b1d4b676a4 as UnitSelectionProvider, $61771df184788970$export$cbbec12b1451fe7d as useUnitSelectionTarget, $61771df184788970$export$70f5ee19650fc7d1 as UnitKeyboardNavigation};
169
- //# sourceMappingURL=column-views.c44febd0.js.map
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/column-views/src/data-provider/unit-selection.ts"],"sourcesContent":["import { BaseUnit } from \"@macrostrat/api-types\";\nimport h from \"@macrostrat/hyper\";\nimport { useKeyHandler } from \"@macrostrat/ui-components\";\nimport {\n createContext,\n useContext,\n useEffect,\n useState,\n ReactNode,\n RefObject,\n useRef,\n useCallback,\n} from \"react\";\nimport { createStore, StoreApi, useStore } from \"zustand\";\nimport type { RectBounds, IUnit } from \"../units/types\";\n\ntype UnitSelectDispatch = (\n unit: number | BaseUnit | null,\n target: HTMLElement | null,\n event: Event | null,\n) => void;\n\nconst UnitSelectionContext = createContext<StoreApi<UnitSelectionStore>>(null);\n\nexport function useUnitSelectionDispatch(): UnitSelectDispatch {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return () => {};\n }\n return useStore(store, (state) => state.onUnitSelected);\n}\n\nexport function useUnitSelectionStore<T>(\n selector: (state: UnitSelectionStore) => T,\n): T {\n const store = useContext(UnitSelectionContext);\n if (store == null) {\n return null;\n }\n return useStore(store, selector);\n}\n\nexport function useSelectedUnit() {\n return useUnitSelectionStore((state) => state.selectedUnitData);\n}\n\ninterface UnitSelectionStore {\n selectedUnit: number | null;\n selectedUnitData: BaseUnit | null;\n overlayPosition: RectBounds | null;\n onUnitSelected: UnitSelectDispatch;\n setSelectedUnit: (unit: number | null) => void;\n}\n\nexport interface ColumnClickData {\n unitID: number | null;\n unit: BaseUnit | null;\n target: HTMLElement | null;\n height: number;\n // Room for boundary IDs eventually\n}\n\nexport function UnitSelectionProvider<T extends BaseUnit>(props: {\n children: ReactNode;\n columnRef?: RefObject<HTMLElement>;\n units: T[];\n selectedUnit: number | null;\n onClickedColumn?: (columnClickData: ColumnClickData, event: Event) => void;\n onUnitSelected?: (unitID: number | null, unit: T | null) => void;\n}) {\n const [store] = useState(() =>\n createStore<UnitSelectionStore>((set) => ({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n setSelectedUnit(selectedUnit: number | null | BaseUnit) {\n if (selectedUnit == null) {\n set({ selectedUnit: null, selectedUnitData: null });\n return;\n // If it's a number, set the selected unit\n } else if (typeof selectedUnit === \"number\") {\n set({ selectedUnit, selectedUnitData: null });\n } else if (\"unit_id\" in selectedUnit) {\n set({\n selectedUnit: selectedUnit.unit_id,\n selectedUnitData: selectedUnit,\n });\n }\n },\n onUnitSelected: (\n input: number | T | null,\n target: HTMLElement = null,\n event: PointerEvent = null,\n ) => {\n if (input == null) {\n props.onUnitSelected?.(null, null);\n return set({\n selectedUnit: null,\n selectedUnitData: null,\n overlayPosition: null,\n });\n }\n\n let unit: T | null = null;\n if (typeof input === \"number\") {\n unit = props.units.find((u) => u.unit_id === input) || null;\n } else {\n unit = input;\n }\n\n const el = props.columnRef?.current;\n let overlayPosition = null;\n\n /** This is not the natural place to get positions within the column,\n * but it will work for now.\n */\n if (props.onClickedColumn) {\n // Infer height from top and bottom height of unit (because that's passed back with the call)\n //const py = event.y;\n //const [bottom, top] = getUnitHeightRange(unit, axisType);\n //const height = Math.abs(bottom - top);\n\n /** Ideally this would be defined at the column level */\n const columnClickData: ColumnClickData = {\n unitID: unit?.unit_id,\n unit,\n target,\n height: el?.getBoundingClientRect().height || 0,\n };\n props.onClickedColumn(columnClickData, event);\n }\n\n if (unit != null && el != null && target != null) {\n const rect = el.getBoundingClientRect();\n const targetRect = target.getBoundingClientRect();\n\n overlayPosition = {\n x: targetRect.left - rect.left,\n y: targetRect.top - rect.top,\n width: targetRect.width,\n height: targetRect.height,\n };\n }\n props.onUnitSelected?.(unit?.unit_id, unit);\n\n return set({\n selectedUnit: unit?.unit_id,\n selectedUnitData: unit,\n overlayPosition,\n });\n },\n })),\n );\n\n const { units, selectedUnit } = props;\n\n useEffect(() => {\n // Synchronize store with provided props\n if (selectedUnit != null) {\n const unitData = units?.find((u) => u.unit_id === selectedUnit);\n store.setState({ selectedUnit, selectedUnitData: unitData });\n } else {\n store.setState({ selectedUnit: null, selectedUnitData: null });\n }\n }, [selectedUnit, units]);\n\n return h(UnitSelectionContext.Provider, { value: store }, props.children);\n}\n\nexport function useUnitSelectionTarget(\n unit: IUnit,\n): [React.RefObject<HTMLElement>, boolean, (evt: Event) => void] {\n const ref = useRef<HTMLElement>();\n const selectedUnit = useSelectedUnit();\n const onSelectUnit = useUnitSelectionStore((state) => state.onUnitSelected);\n const selected = selectedUnit?.unit_id == unit.unit_id;\n\n const onClick = useCallback(\n (evt: Event) => {\n if (onSelectUnit == null) return;\n onSelectUnit(unit, ref.current, evt);\n evt.stopPropagation();\n },\n [unit, onSelectUnit],\n );\n\n useEffect(() => {\n if (!selected || onSelectUnit == null) return;\n // In case we haven't set the position of the unit (if we don't have a target), set the selected unit\n onSelectUnit(unit, ref.current, null);\n\n // Scroll the unit into view\n ref.current?.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\",\n });\n }, [selected, onSelectUnit]);\n\n return [ref, selected, onClick];\n}\n\nexport function UnitKeyboardNavigation<T extends BaseUnit>({\n units,\n}: {\n units: T[];\n}) {\n const selectedUnit = useSelectedUnit();\n const selectUnit = useUnitSelectionDispatch();\n\n const ix = units.findIndex((unit) => unit.unit_id === selectedUnit?.unit_id);\n\n const keyMap = {\n 38: ix - 1,\n 40: ix + 1,\n };\n\n useKeyHandler(\n (event) => {\n const nextIx = keyMap[event.keyCode];\n if (nextIx == null || nextIx < 0 || nextIx >= units.length) return;\n selectUnit(units[nextIx], null, null);\n event.stopPropagation();\n },\n [units, ix],\n );\n return null;\n}\n"],"names":[],"version":3,"file":"column-views.c44febd0.js.map"}
@@ -1 +0,0 @@
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"}