@macrostrat/column-views 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/esm/_shared.f7eec55a.js +9 -0
  3. package/dist/esm/_shared.f7eec55a.js.map +1 -0
  4. package/dist/esm/age-axis.4a8cf5e6.js +98 -0
  5. package/dist/esm/age-axis.4a8cf5e6.js.map +1 -0
  6. package/dist/esm/age-axis.module.03773a80.css +33 -0
  7. package/dist/esm/age-axis.module.03773a80.css.map +1 -0
  8. package/dist/esm/age-axis.module.3cc91335.js +22 -0
  9. package/dist/esm/age-axis.module.3cc91335.js.map +1 -0
  10. package/dist/esm/age-model-overlay.c7226855.js +57 -0
  11. package/dist/esm/age-model-overlay.c7226855.js.map +1 -0
  12. package/dist/esm/age-model-overlay.module.5d9e78fb.css +14 -0
  13. package/dist/esm/age-model-overlay.module.5d9e78fb.css.map +1 -0
  14. package/dist/esm/age-model-overlay.module.cd985dcb.js +16 -0
  15. package/dist/esm/age-model-overlay.module.cd985dcb.js.map +1 -0
  16. package/dist/esm/base.910b80b4.js +288 -0
  17. package/dist/esm/base.910b80b4.js.map +1 -0
  18. package/dist/esm/boxes.8292cff2.js +258 -0
  19. package/dist/esm/boxes.8292cff2.js.map +1 -0
  20. package/dist/esm/boxes.module.2b5fb18e.css +26 -0
  21. package/dist/esm/boxes.module.2b5fb18e.css.map +1 -0
  22. package/dist/esm/boxes.module.4ebc7796.js +19 -0
  23. package/dist/esm/boxes.module.4ebc7796.js.map +1 -0
  24. package/dist/esm/{carbon-isotopes.3b502a9e.js → carbon-isotopes.10db8285.js} +2 -2
  25. package/dist/esm/{carbon-isotopes.3b502a9e.js.map → carbon-isotopes.10db8285.js.map} +1 -1
  26. package/dist/esm/colors.395c6db5.js +40 -0
  27. package/dist/esm/colors.395c6db5.js.map +1 -0
  28. package/dist/esm/column-correlation.c8dcfe98.js +9 -0
  29. package/dist/esm/column-correlation.c8dcfe98.js.map +1 -0
  30. package/dist/esm/column-nav.5414677c.js +55 -0
  31. package/dist/esm/column-nav.5414677c.js.map +1 -0
  32. package/dist/esm/column-navigation.37cd3245.js +9 -0
  33. package/dist/esm/column-navigation.37cd3245.js.map +1 -0
  34. package/dist/esm/column.01d68dd8.js +127 -0
  35. package/dist/esm/column.01d68dd8.js.map +1 -0
  36. package/dist/esm/{column.db058031.js → column.a25f8ebd.js} +4 -4
  37. package/dist/esm/column.a25f8ebd.js.map +1 -0
  38. package/dist/esm/column.module.1b776e15.js +46 -0
  39. package/dist/esm/column.module.1b776e15.js.map +1 -0
  40. package/dist/esm/column.module.a67a6b4c.css +159 -0
  41. package/dist/esm/column.module.a67a6b4c.css.map +1 -0
  42. package/dist/esm/composite-scale.577bf64a.js +222 -0
  43. package/dist/esm/composite-scale.577bf64a.js.map +1 -0
  44. package/dist/esm/composite.039e4798.js +163 -0
  45. package/dist/esm/composite.039e4798.js.map +1 -0
  46. package/dist/esm/{core.4db8e452.js → core.843310d3.js} +11 -12
  47. package/dist/esm/core.843310d3.js.map +1 -0
  48. package/dist/esm/core.91ede078.js +206 -0
  49. package/dist/esm/core.91ede078.js.map +1 -0
  50. package/dist/esm/correlation-chart.abd8b346.js +9 -0
  51. package/dist/esm/correlation-chart.abd8b346.js.map +1 -0
  52. package/dist/esm/data-provider.1506eb64.js.map +1 -1
  53. package/dist/esm/data-provider.f10c6d0b.js +13 -0
  54. package/dist/esm/data-provider.f10c6d0b.js.map +1 -0
  55. package/dist/esm/fetch.99aec438.js +152 -0
  56. package/dist/esm/fetch.99aec438.js.map +1 -0
  57. package/dist/esm/hash-string.285b37fb.js +39 -0
  58. package/dist/esm/hash-string.285b37fb.js.map +1 -0
  59. package/dist/esm/helpers.2f0a0cb7.js +141 -0
  60. package/dist/esm/helpers.2f0a0cb7.js.map +1 -0
  61. package/dist/esm/index.d.ts +797 -120
  62. package/dist/esm/index.d.ts.map +1 -1
  63. package/dist/esm/index.js +14 -8
  64. package/dist/esm/index.js.map +1 -1
  65. package/dist/esm/inset-map.3c18106d.js +66 -0
  66. package/dist/esm/inset-map.3c18106d.js.map +1 -0
  67. package/dist/esm/keyboard-navigation.6713401b.js +48 -0
  68. package/dist/esm/keyboard-navigation.6713401b.js.map +1 -0
  69. package/dist/esm/keyboard-navigation.a9fc80dd.js +112 -0
  70. package/dist/esm/keyboard-navigation.a9fc80dd.js.map +1 -0
  71. package/dist/esm/layers.033d3fb0.js +170 -0
  72. package/dist/esm/layers.033d3fb0.js.map +1 -0
  73. package/dist/esm/main.2e0375a5.js +221 -0
  74. package/dist/esm/main.2e0375a5.js.map +1 -0
  75. package/dist/esm/main.module.3dd9500b.css +134 -0
  76. package/dist/esm/main.module.3dd9500b.css.map +1 -0
  77. package/dist/esm/main.module.c09154b1.js +70 -0
  78. package/dist/esm/main.module.c09154b1.js.map +1 -0
  79. package/dist/esm/mapbox.cac42eed.js +167 -0
  80. package/dist/esm/mapbox.cac42eed.js.map +1 -0
  81. package/dist/esm/maps.bcdea9c1.js +11 -0
  82. package/dist/esm/maps.bcdea9c1.js.map +1 -0
  83. package/dist/esm/{names.f6a4e9a4.js → names.a8f2b452.js} +5 -5
  84. package/dist/esm/names.a8f2b452.js.map +1 -0
  85. package/dist/esm/panel.598f76a5.js +420 -0
  86. package/dist/esm/panel.598f76a5.js.map +1 -0
  87. package/dist/esm/panel.module.386166cc.js +58 -0
  88. package/dist/esm/panel.module.386166cc.js.map +1 -0
  89. package/dist/esm/panel.module.3d2ea3c6.css +111 -0
  90. package/dist/esm/panel.module.3d2ea3c6.css.map +1 -0
  91. package/dist/esm/popover.a810b7bc.js +66 -0
  92. package/dist/esm/popover.a810b7bc.js.map +1 -0
  93. package/dist/esm/popover.module.c4ba4189.js +22 -0
  94. package/dist/esm/popover.module.c4ba4189.js.map +1 -0
  95. package/dist/esm/{selection-popover.module.0a701258.css → popover.module.c4d6bfb0.css} +11 -8
  96. package/dist/esm/popover.module.c4d6bfb0.css.map +1 -0
  97. package/dist/esm/prepare-data.d4284b4a.js +125 -0
  98. package/dist/esm/prepare-data.d4284b4a.js.map +1 -0
  99. package/dist/esm/prepare-units.6c890a96.js +104 -0
  100. package/dist/esm/prepare-units.6c890a96.js.map +1 -0
  101. package/dist/esm/{resolvers.b5c82b78.js → resolvers.36013b49.js} +13 -2
  102. package/dist/esm/resolvers.36013b49.js.map +1 -0
  103. package/dist/esm/section.a34d379a.js +215 -0
  104. package/dist/esm/section.a34d379a.js.map +1 -0
  105. package/dist/esm/selection.f5b0297e.js +143 -0
  106. package/dist/esm/selection.f5b0297e.js.map +1 -0
  107. package/dist/esm/state.178ef364.js +75 -0
  108. package/dist/esm/state.178ef364.js.map +1 -0
  109. package/dist/esm/state.2952cbca.js +118 -0
  110. package/dist/esm/state.2952cbca.js.map +1 -0
  111. package/dist/esm/store.c4d7a8a4.js +52 -0
  112. package/dist/esm/store.c4d7a8a4.js.map +1 -0
  113. package/dist/esm/styles.7bc776d1.js +95 -0
  114. package/dist/esm/styles.7bc776d1.js.map +1 -0
  115. package/dist/esm/svg.4b9a96c1.js +89 -0
  116. package/dist/esm/svg.4b9a96c1.js.map +1 -0
  117. package/dist/esm/types.0f0b57c9.js +3 -0
  118. package/dist/esm/types.0f0b57c9.js.map +1 -0
  119. package/dist/esm/unit-details.071cefed.js +9 -0
  120. package/dist/esm/unit-details.071cefed.js.map +1 -0
  121. package/dist/esm/units.5a4fc058.js +98 -0
  122. package/dist/esm/units.5a4fc058.js.map +1 -0
  123. package/dist/esm/utils.d7a43a2a.js +55 -0
  124. package/dist/esm/utils.d7a43a2a.js.map +1 -0
  125. package/dist/node/index.js.map +1 -1
  126. package/package.json +24 -7
  127. package/src/age-axis.module.sass +27 -0
  128. package/src/age-axis.ts +82 -19
  129. package/src/age-model-overlay.module.sass +11 -0
  130. package/src/age-model-overlay.ts +73 -0
  131. package/src/carbon-isotopes/column.ts +4 -2
  132. package/src/carbon-isotopes/core.ts +9 -6
  133. package/src/carbon-isotopes/data-provider.ts +3 -3
  134. package/src/column.module.sass +58 -49
  135. package/src/column.ts +149 -135
  136. package/src/correlation-chart/hash-string.ts +57 -0
  137. package/src/correlation-chart/index.ts +2 -0
  138. package/src/correlation-chart/main.module.sass +122 -0
  139. package/src/correlation-chart/main.ts +305 -0
  140. package/src/correlation-chart/prepare-data.ts +217 -0
  141. package/src/correlation-chart/stories/correlation-chart.stories.ts +192 -0
  142. package/src/correlation-chart/stories/stories.module.sass +18 -0
  143. package/src/correlation-chart/unconformity-line.module.sass +8 -0
  144. package/src/correlation-chart/unconformity-line.ts +25 -0
  145. package/src/data-provider/base.ts +388 -0
  146. package/src/data-provider/column-nav.ts +53 -0
  147. package/src/data-provider/fetch.ts +231 -0
  148. package/src/data-provider/index.ts +4 -0
  149. package/src/data-provider/store.ts +72 -0
  150. package/src/index.ts +6 -3
  151. package/src/maps/_shared/index.ts +2 -0
  152. package/src/maps/_shared/inset-map.stories.ts +20 -0
  153. package/src/maps/_shared/inset-map.ts +87 -0
  154. package/src/maps/_shared/styles.ts +57 -0
  155. package/src/maps/column-correlation/column-correlation-map.stories.ts +96 -0
  156. package/src/maps/column-correlation/core.ts +225 -0
  157. package/src/maps/column-correlation/index.ts +2 -0
  158. package/src/maps/column-correlation/state.ts +192 -0
  159. package/src/maps/column-navigation/index.ts +2 -0
  160. package/src/maps/column-navigation/mapbox/column-navigation-map.stories.ts +102 -0
  161. package/src/maps/column-navigation/mapbox/index.ts +219 -0
  162. package/src/maps/column-navigation/mapbox/keyboard-navigation.ts +119 -0
  163. package/src/maps/column-navigation/mapbox/state.ts +109 -0
  164. package/src/maps/column-navigation/svg/column-navigation-svg-map.stories.ts +46 -0
  165. package/src/{map → maps/column-navigation/svg}/index.ts +18 -6
  166. package/src/{map → maps/column-navigation/svg}/layers.ts +28 -109
  167. package/src/maps/column-navigation/utils/keyboard-navigation.ts +58 -0
  168. package/src/maps/index.ts +3 -0
  169. package/src/prepare-units/composite-scale.ts +353 -0
  170. package/src/prepare-units/helpers.ts +226 -0
  171. package/src/prepare-units/index.ts +177 -0
  172. package/src/prepare-units/utils.ts +98 -0
  173. package/src/section.ts +264 -84
  174. package/src/unit-details/index.ts +2 -215
  175. package/src/unit-details/{index.module.sass → panel.module.sass} +39 -8
  176. package/src/unit-details/panel.ts +523 -0
  177. package/src/{selection-popover.module.sass → unit-details/popover.module.sass} +4 -2
  178. package/src/unit-details/popover.ts +82 -0
  179. package/src/units/boxes.module.sass +16 -0
  180. package/src/units/boxes.ts +243 -90
  181. package/src/units/colors.ts +64 -0
  182. package/src/units/composite.ts +157 -152
  183. package/src/units/index.ts +76 -9
  184. package/src/units/names.ts +8 -4
  185. package/src/units/resolvers.ts +11 -0
  186. package/src/units/selection.ts +115 -101
  187. package/src/units/types.ts +5 -16
  188. package/dist/esm/age-axis.64c509ee.js +0 -41
  189. package/dist/esm/age-axis.64c509ee.js.map +0 -1
  190. package/dist/esm/boxes.13968b76.js +0 -164
  191. package/dist/esm/boxes.13968b76.js.map +0 -1
  192. package/dist/esm/boxes.module.28873d08.css +0 -4
  193. package/dist/esm/boxes.module.28873d08.css.map +0 -1
  194. package/dist/esm/boxes.module.605bdcd6.js +0 -13
  195. package/dist/esm/boxes.module.605bdcd6.js.map +0 -1
  196. package/dist/esm/column.8dd26e1a.js +0 -149
  197. package/dist/esm/column.8dd26e1a.js.map +0 -1
  198. package/dist/esm/column.db058031.js.map +0 -1
  199. package/dist/esm/column.module.039d872c.css +0 -151
  200. package/dist/esm/column.module.039d872c.css.map +0 -1
  201. package/dist/esm/column.module.e632868a.js +0 -19
  202. package/dist/esm/column.module.e632868a.js.map +0 -1
  203. package/dist/esm/composite.608a4ca2.js +0 -153
  204. package/dist/esm/composite.608a4ca2.js.map +0 -1
  205. package/dist/esm/core.4db8e452.js.map +0 -1
  206. package/dist/esm/helpers.8a03cfc7.js +0 -94
  207. package/dist/esm/helpers.8a03cfc7.js.map +0 -1
  208. package/dist/esm/index.module.0844afd8.css +0 -65
  209. package/dist/esm/index.module.0844afd8.css.map +0 -1
  210. package/dist/esm/index.module.24fe3a2e.js +0 -37
  211. package/dist/esm/index.module.24fe3a2e.js.map +0 -1
  212. package/dist/esm/layers.ad5fd25d.js +0 -231
  213. package/dist/esm/layers.ad5fd25d.js.map +0 -1
  214. package/dist/esm/map.7aa26f17.js +0 -82
  215. package/dist/esm/map.7aa26f17.js.map +0 -1
  216. package/dist/esm/names.f6a4e9a4.js.map +0 -1
  217. package/dist/esm/providers.cd1e652f.js +0 -25
  218. package/dist/esm/providers.cd1e652f.js.map +0 -1
  219. package/dist/esm/resolvers.b5c82b78.js.map +0 -1
  220. package/dist/esm/section.cc1b1100.js +0 -118
  221. package/dist/esm/section.cc1b1100.js.map +0 -1
  222. package/dist/esm/selection-popover.17d1bd55.js +0 -60
  223. package/dist/esm/selection-popover.17d1bd55.js.map +0 -1
  224. package/dist/esm/selection-popover.module.0a701258.css.map +0 -1
  225. package/dist/esm/selection-popover.module.e22f5183.js +0 -22
  226. package/dist/esm/selection-popover.module.e22f5183.js.map +0 -1
  227. package/dist/esm/selection.bbf26d0e.js +0 -117
  228. package/dist/esm/selection.bbf26d0e.js.map +0 -1
  229. package/dist/esm/store.25eaa168.js +0 -18
  230. package/dist/esm/store.25eaa168.js.map +0 -1
  231. package/dist/esm/types.f016e032.js +0 -18
  232. package/dist/esm/types.f016e032.js.map +0 -1
  233. package/dist/esm/unit-details.56ff8b70.js +0 -209
  234. package/dist/esm/unit-details.56ff8b70.js.map +0 -1
  235. package/dist/esm/units.361088d4.js +0 -42
  236. package/dist/esm/units.361088d4.js.map +0 -1
  237. package/src/helpers.ts +0 -133
  238. package/src/providers.ts +0 -34
  239. package/src/selection-popover.ts +0 -71
  240. package/src/store.ts +0 -12
  241. package/src/units/units.scss +0 -16
  242. /package/src/{map → maps/column-navigation/svg}/animated.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macrostrat/column-views",
3
- "version": "1.0.2",
3
+ "version": "2.0.0",
4
4
  "description": "Data views for Macrostrat stratigraphic columns",
5
5
  "type": "module",
6
6
  "source": "src/index.ts",
@@ -29,14 +29,24 @@
29
29
  "build": "rm -rf dist && parcel build"
30
30
  },
31
31
  "dependencies": {
32
- "@macrostrat/api-types": "^1.0.0",
33
- "@macrostrat/column-components": "^1.0.3",
34
- "@macrostrat/data-components": "^0.0.6",
32
+ "@macrostrat/api-types": "^1.1.0",
33
+ "@macrostrat/color-utils": "^1.1.0",
34
+ "@macrostrat/column-components": "^1.1.0",
35
+ "@macrostrat/data-components": "^0.1.0",
35
36
  "@macrostrat/hyper": "^3.0.6",
37
+ "@macrostrat/map-interface": "^1.3.0",
38
+ "@macrostrat/map-styles": "^1.2.0",
39
+ "@macrostrat/mapbox-react": "^2.6.0",
40
+ "@macrostrat/mapbox-utils": "^1.5.0",
36
41
  "@macrostrat/stratigraphy-utils": "^1.0.0",
37
- "@macrostrat/svg-map-components": "^1.0.3",
42
+ "@macrostrat/svg-map-components": "^1.0.4",
38
43
  "@macrostrat/timescale": "^2.1.1",
39
- "@macrostrat/ui-components": "^4.1.2",
44
+ "@macrostrat/ui-components": "^4.2.0",
45
+ "@turf/buffer": "^7.2.0",
46
+ "@turf/centroid": "^7.2.0",
47
+ "@turf/distance": "^7.2.0",
48
+ "@turf/line-intersect": "^7.2.0",
49
+ "@turf/nearest-point-on-line": "^7.2.0",
40
50
  "@types/chroma-js": "^3",
41
51
  "@types/d3-format": "^3",
42
52
  "@types/d3-geo": "^3",
@@ -45,14 +55,19 @@
45
55
  "@visx/axis": "^3.12.0",
46
56
  "chroma-js": "^3.1.2",
47
57
  "classnames": "^2.5.1",
58
+ "cross-fetch": "^4.1.0",
48
59
  "d3-array": "^3.2.4",
49
60
  "d3-format": "^3.1.0",
50
61
  "d3-geo": "^3.1.1",
51
62
  "d3-geo-voronoi": "^2.1.0",
63
+ "d3-path": "^3.1.0",
64
+ "d3-scale": "^4.0.2",
52
65
  "d3-shape": "^3.2.0",
66
+ "mapbox-gl": "^2.11.0",
53
67
  "react-spring": "^9.7.5",
54
68
  "topojson-client": "^3.1.0",
55
- "zustand": "^5.0.3"
69
+ "zustand": "^5.0.3",
70
+ "zustand-computed": "^2.0.2"
56
71
  },
57
72
  "peerDependencies": {
58
73
  "@blueprintjs/core": "^3.43.0 || ^4.3.0 || ^5.0.0",
@@ -64,6 +79,8 @@
64
79
  "directory": "packages/column-views"
65
80
  },
66
81
  "devDependencies": {
82
+ "@types/d3-path": "^3",
83
+ "@types/d3-scale": "^4",
67
84
  "parcel": "^2.13.3",
68
85
  "postcss": "^8.0.0",
69
86
  "postcss-modules": "^6.0.0"
@@ -0,0 +1,27 @@
1
+ .age-axis
2
+ transform: translateX(20px)
3
+
4
+ :global(.tick)
5
+ text
6
+ text-anchor: middle
7
+ // TODO: allow font size to vary without this..
8
+ font-weight: 400 !important
9
+ transform: rotate(-90deg) translate(8px, -12px)
10
+ font-size: var(--column-axis-font-size, 0.8rem)
11
+
12
+ line
13
+ stroke-width: 1px !important
14
+
15
+ .age-axis-column
16
+ flex-shrink: 0
17
+
18
+ .age-axis-label
19
+ writing-mode: vertical-lr
20
+ transform: rotate(180deg)
21
+ font-size: var(--column-axis-font-size, 0.8rem)
22
+ text-align: center
23
+ position: sticky
24
+ top: 0
25
+ max-height: 100vh
26
+ .age-axis-unit
27
+ color: var(--text-subtle-color)
package/src/age-axis.ts CHANGED
@@ -1,12 +1,20 @@
1
- import h from "@macrostrat/hyper";
1
+ import hyper from "@macrostrat/hyper";
2
2
  import {
3
+ SVG,
3
4
  ColumnSVG,
4
5
  ColumnAxis,
5
6
  ColumnContext,
7
+ ColumnAxisType,
8
+ AgeAxis,
6
9
  } from "@macrostrat/column-components";
7
10
  import { useContext } from "react";
8
- // import "@macrostrat/timescale/dist/timescale.css";
9
- //
11
+ import styles from "./age-axis.module.sass";
12
+ import { useMacrostratColumnData } from "./data-provider";
13
+ import { Parenthetical } from "@macrostrat/data-components";
14
+ import { PackageScaleLayoutData } from "./prepare-units/composite-scale";
15
+
16
+ const h = hyper.styled(styles);
17
+
10
18
  const AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {
11
19
  const { pixelHeight } = useContext(ColumnContext);
12
20
  // A tick roughly every 40 pixels
@@ -20,23 +28,78 @@ const AgeAxisCore = ({ ticks, tickSpacing = 40, showDomain = false }) => {
20
28
  ]);
21
29
  };
22
30
 
23
- export function AgeAxis(props) {
24
- const {
25
- ticks,
26
- tickSpacing,
27
- showLabel = true,
28
- paddingV = 10,
29
- showDomain,
30
- ...rest
31
- } = props;
32
-
33
- // Not sure where this extra 5px comes from.
34
- return h("div.column.age-axis", [
35
- h.if(showLabel)("div.age-axis-label", "Age (Ma)"),
31
+ export function VerticalAxisLabel(props) {
32
+ const { label = "Age", unit = "Ma", className } = props;
33
+ return h("div.column-axis-label.age-axis-label", { className }, [
34
+ label,
35
+ " ",
36
+ h.if(unit)(Parenthetical, { className: "age-axis-unit" }, unit),
37
+ ]);
38
+ }
39
+
40
+ export function CompositeAgeAxis() {
41
+ const { axisType, sections, totalHeight } = useMacrostratColumnData();
42
+
43
+ const packages = sections.map((section) => {
44
+ return {
45
+ key: `section-${section.section_id}`,
46
+ ...section.scaleInfo,
47
+ };
48
+ });
49
+
50
+ return h(CompositeAgeAxisCore, {
51
+ axisType,
52
+ packages,
53
+ totalHeight,
54
+ });
55
+ }
56
+
57
+ export interface CompositeStratigraphicScaleInfo {
58
+ axisType: ColumnAxisType;
59
+ totalHeight: number;
60
+ packages: PackageScaleLayoutData[];
61
+ }
62
+
63
+ export function CompositeAgeAxisCore(props: CompositeStratigraphicScaleInfo) {
64
+ const { axisType, totalHeight, packages } = props;
65
+
66
+ if (axisType == ColumnAxisType.ORDINAL) {
67
+ return null;
68
+ }
69
+
70
+ let axisLabel: string = "Age";
71
+ let axisUnit = "Ma";
72
+ if (axisType == ColumnAxisType.DEPTH) {
73
+ axisLabel = "Depth";
74
+ axisUnit = "m";
75
+ } else if (axisType == ColumnAxisType.HEIGHT) {
76
+ axisLabel = "Height";
77
+ axisUnit = "m";
78
+ }
79
+
80
+ return h([
81
+ h(VerticalAxisLabel, {
82
+ label: axisLabel,
83
+ unit: axisUnit,
84
+ }),
36
85
  h(
37
- ColumnSVG,
38
- { paddingV, ...rest },
39
- h(AgeAxisCore, { ticks, tickSpacing, showDomain })
86
+ SVG,
87
+ {
88
+ className: "age-axis-column",
89
+ style: { width: `22px`, height: `${totalHeight}px` },
90
+ width: 22,
91
+ height: totalHeight,
92
+ },
93
+ packages.map((group, i) => {
94
+ const { key, scale } = group;
95
+
96
+ return h(AgeAxis, {
97
+ key,
98
+ className: "age-axis",
99
+ scale,
100
+ tickSizeOuter: 3,
101
+ });
102
+ })
40
103
  ),
41
104
  ]);
42
105
  }
@@ -0,0 +1,11 @@
1
+ .boundary-age-model
2
+ top: 0
3
+ left: 0
4
+ position: absolute
5
+ width: 100%
6
+
7
+ .boundary-age-model-surface
8
+ left: 0
9
+ right: 0
10
+ position: absolute
11
+ border-top: 1px solid lightgreen
@@ -0,0 +1,73 @@
1
+ /** An in-development overlay for a column's age model.
2
+ *
3
+ * Age model info:
4
+ * {
5
+ * "boundary_id": 8049,
6
+ * "col_id": 432,
7
+ * "section_id": 3104,
8
+ * "interval_id": 268,
9
+ * "interval_name": "Calymmian",
10
+ * "age_bottom": 1600,
11
+ * "age_top": 1400,
12
+ * "rel_position": 0.85,
13
+ * "model_age": 1430,
14
+ * "boundary_status": "absolute",
15
+ * "boundary_type": "",
16
+ * "boundary_position": null,
17
+ * "unit_below": 11541,
18
+ * "unit_above": 0,
19
+ * "ref_id": 217
20
+ * },
21
+ *
22
+ * */
23
+
24
+ import hyper from "@macrostrat/hyper";
25
+ import styles from "./age-model-overlay.module.sass";
26
+ import { useAPIResult } from "@macrostrat/ui-components";
27
+ import { useCompositeScale, useMacrostratUnits } from "./data-provider";
28
+ const h = hyper.styled(styles);
29
+
30
+ interface AgeModelSurface {
31
+ boundary_id: number;
32
+ col_id: number;
33
+ section_id: number;
34
+ interval_id: number;
35
+ interval_name: string;
36
+ age_bottom: number;
37
+ age_top: number;
38
+ rel_position: number;
39
+ model_age: number;
40
+ boundary_status: "absolute" | "relative" | "modeled";
41
+ boundary_type: string;
42
+ boundary_position: null | number;
43
+ unit_below: number;
44
+ unit_above: number;
45
+ ref_id: number;
46
+ }
47
+
48
+ export function BoundaryAgeModelOverlay() {
49
+ const col_id = useMacrostratUnits()?.[0]?.col_id;
50
+ const scale = useCompositeScale();
51
+
52
+ const ageModel = useAPIResult(
53
+ "https://macrostrat.org/api/v2/age_model",
54
+ { col_id },
55
+ (res) => res.success.data
56
+ );
57
+
58
+ if (ageModel == null) {
59
+ return null;
60
+ }
61
+
62
+ return h(
63
+ "div.boundary-age-model",
64
+ ageModel.map((surface) => {
65
+ const height = scale(surface.model_age);
66
+
67
+ return h("div.boundary-age-model-surface", {
68
+ key: surface.boundary_id,
69
+ style: { top: `${height}px` },
70
+ });
71
+ })
72
+ );
73
+ }
@@ -6,10 +6,10 @@ import {
6
6
  ColumnAxis,
7
7
  ColumnContext,
8
8
  } from "@macrostrat/column-components";
9
- import { SimpleUnitsColumn, IUnit, ColumnArgs } from "../units";
9
+ import { SimpleUnitsColumn, IUnit } from "../units";
10
10
  import { useContext } from "react";
11
11
  import { IsotopesColumn } from "./isotopes-column";
12
- import { MacrostratColumnProvider } from "../providers";
12
+ import { MacrostratColumnProvider } from "../data-provider";
13
13
  import styles from "./column.module.sass";
14
14
 
15
15
  const h = hyper.styled(styles);
@@ -98,6 +98,8 @@ const Section = (props: IColumnProps) => {
98
98
  );
99
99
  };
100
100
 
101
+ type ColumnArgs = any;
102
+
101
103
  function Column(props: Omit<IColumnProps, "data"> & { params: ColumnArgs }) {
102
104
  const { params } = props;
103
105
  const data: IUnit[] = useAPIResult("/units", {
@@ -3,10 +3,13 @@ import styles from "./column.module.sass";
3
3
 
4
4
  import { useAPIResult } from "@macrostrat/ui-components";
5
5
  import BaseColumn from "./column";
6
- import { ColumnNavigatorMap, MeasurementsLayer } from "../map";
6
+ import { ColumnNavigationSVGMap, MeasurementsLayer } from "../maps";
7
+ import {
8
+ MacrostratDataProvider,
9
+ ColumnArgs,
10
+ useColumnNav,
11
+ } from "../data-provider";
7
12
  import { MeasurementDataProvider } from "./data-provider";
8
- import { MacrostratAPIProvider } from "../providers";
9
- import { ColumnArgs, useColumnNav } from "../units";
10
13
  import { useMemo } from "react";
11
14
  import { FeatureCollection } from "geojson";
12
15
 
@@ -25,7 +28,7 @@ const defaultArgs: ColumnArgs = {
25
28
 
26
29
  export function CarbonIsotopesColumn(columnArgs) {
27
30
  return h(
28
- MacrostratAPIProvider,
31
+ MacrostratDataProvider,
29
32
  h(MeasurementDataProvider, columnArgs, [
30
33
  // @ts-ignore
31
34
  h(BaseColumn, { params: columnArgs }),
@@ -53,7 +56,7 @@ function ColumnManager() {
53
56
  ]),
54
57
  h("div.map-column", [
55
58
  h(
56
- ColumnNavigatorMap,
59
+ ColumnNavigationSVGMap,
57
60
  {
58
61
  currentColumn: columnFeature,
59
62
  setCurrentColumn,
@@ -74,5 +77,5 @@ function ColumnManager() {
74
77
  }
75
78
 
76
79
  export function CarbonIsotopesApp() {
77
- return h(MacrostratAPIProvider, h(ColumnManager));
80
+ return h(MacrostratDataProvider, h(ColumnManager));
78
81
  }
@@ -4,16 +4,16 @@ import { useAPIResult } from "@macrostrat/ui-components";
4
4
 
5
5
  const MeasurementDataContext = createContext(null);
6
6
 
7
- function MeasurementDataProvider(props) {
7
+ export function MeasurementDataProvider(props) {
8
8
  const { children, ...params } = props;
9
9
  const res = useAPIResult("/measurements", {
10
10
  ...params,
11
11
  show_values: true,
12
- response: "long"
12
+ response: "long",
13
13
  });
14
14
  return h(MeasurementDataContext.Provider, { value: res, children });
15
15
  }
16
16
 
17
17
  const useMeasurementData = () => useContext(MeasurementDataContext);
18
18
 
19
- export { MeasurementDataProvider, useMeasurementData, MeasurementDataContext };
19
+ export { useMeasurementData, MeasurementDataContext };
@@ -1,7 +1,7 @@
1
1
  .column-container, body:global(.light-mode) .column-container
2
2
  --column-background-color: var(--background-color, #fff)
3
- --column-stroke-color: var(--text-color, #000)
4
- --column-text-color: var(--text-color, #000)
3
+ --column-stroke-color: var(--text-emphasized-color, #000)
4
+ --column-text-color: var(--text-emphasized-color, #000)
5
5
 
6
6
  /* We have to duplicate the dark mode styles here
7
7
  because we want to set them either if the preferred
@@ -11,27 +11,27 @@
11
11
  @media (prefers-color-scheme: dark)
12
12
  body:not(:global(.light-mode)) .column-container
13
13
  --column-background-color: var(--background-color, #000)
14
- --column-stroke-color: var(--text-color, #fff)
15
- --column-text-color: var(--text-color, #fff)
14
+ --column-stroke-color: var(--text-emphasized-color, #fff)
15
+ --column-text-color: var(--text-emphasized-color, #fff)
16
16
  color-scheme: dark
17
17
  color: var(--column-text-color)
18
18
  :global
19
19
  .timescale
20
20
  color: #000
21
- g.inner pattern image
22
- filter: invert(80%)
21
+ svg pattern image
22
+ filter: invert(100%)
23
23
 
24
24
  body:global(.dark-mode) .column-container
25
25
  --column-background-color: var(--background-color, #000)
26
- --column-stroke-color: var(--text-color, #fff)
27
- --column-text-color: var(--text-color, #fff)
26
+ --column-stroke-color: var(--text-emphasized-color, #fff)
27
+ --column-text-color: var(--text-emphasized-color, #fff)
28
28
  color-scheme: dark
29
29
  color: var(--column-text-color)
30
30
  :global
31
31
  .timescale
32
32
  color: #000
33
- g.inner pattern image
34
- filter: invert(80%)
33
+ svg pattern image
34
+ filter: invert(100%)
35
35
 
36
36
  .column-container :global
37
37
  .column
@@ -39,24 +39,14 @@ body:global(.dark-mode) .column-container
39
39
  flex-direction: row
40
40
  position: relative
41
41
 
42
- .age-axis-label
43
- writing-mode: vertical-lr
44
- transform: rotate(180deg)
45
- font-size: 12px
46
- text-align: center
47
- position: sticky
48
- top: 0
49
- max-height: 100vh
50
-
51
- .tick text
52
- text-anchor: middle
53
- font-weight: 400 !important
54
- transform: rotate(-90deg) translate(8px, -12px)
55
-
56
- rect.unit
42
+ .unit
57
43
  stroke: var(--column-stroke-color)
58
44
  stroke-width: 1px
59
45
 
46
+ .selection-overlay
47
+ fill: var(--selection-overlay-color, red)
48
+ fill-opacity: var(--selection-overlay-opacity, 0.5)
49
+
60
50
  g.lithology-column use.frame
61
51
  stroke: var(--column-stroke-color)
62
52
  stroke-width: 1.5px !important
@@ -82,17 +72,6 @@ body:global(.dark-mode) .column-container
82
72
  .column-container :global .frame rect
83
73
  fill: transparent
84
74
 
85
- .column-container :global .labeled-unit .unit-overlay
86
- font-size: 10px
87
- font-style: italic
88
- display: flex
89
- align-items: center
90
- justify-content: center
91
-
92
- .column-container :global .labeled-unit .unit-overlay .unit-label
93
- display: block
94
- text-shadow: 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color), 0px 0px 4px var(--column-background-color)
95
-
96
75
  .column-container :global .default-buttons
97
76
  width: 100%
98
77
  margin: 0 -10px
@@ -101,27 +80,57 @@ body:global(.dark-mode) .column-container
101
80
  display: flex
102
81
  flex-direction: row
103
82
 
104
- .column-container :global div.section :global(.timescale)
105
- transform: translateY(0.5)
106
-
107
83
  .column-container :global .section .divisions .unit
108
84
  cursor: pointer
109
85
 
110
- .column-container :global rect.selection-overlay
111
- fill: rgba(255,0,0,0.5)
112
-
113
- .column-container :global div.timescale
114
- width: calc(6em + 4px)
86
+ .column-container :global(.timescale)
87
+ width: calc(calc(1.5em + 1.5px) * var(--timescale-level-count, 4))
115
88
  --timescale-level-size: 1.5em
116
89
 
90
+ .timescale-column
91
+ position: relative
92
+
93
+ .section-main
94
+ position: relative
95
+ margin-bottom: -4px
96
+
97
+ .section-units-container
98
+ position: relative
99
+
100
+ .main-column
101
+ position: relative
102
+
103
+ .unconformity-labels
104
+ position: absolute
105
+ top: 0
106
+ left: 0
107
+ pointer-events: none
108
+
109
+
117
110
  .unconformity
118
- height: 0px
119
- font-size: 10px
120
- font-style: italic
121
111
  text-align: center
122
- margin-left: calc(6em + 4px + 40px)
112
+ position: absolute
113
+ top: 0px
114
+ display: flex
115
+ justify-content: center
116
+ align-items: center
117
+ font-size: 0.8em
118
+ &.giga
119
+ font-weight: 800
120
+ font-size: 1em
121
+ &.mega
122
+ font-weight: 600
123
+ font-weight: 700
124
+ font-size: 0.9em
125
+ &.large
126
+ font-weight: 600
127
+ &.small
128
+ font-weight: 300
129
+
123
130
 
124
131
  .unconformity-text
125
- transform: translateY(-0.5em)
126
132
  width: var(--column-width)
127
133
  color: var(--column-stroke-color)
134
+ --unit-font-style: normal
135
+
136
+