@macrostrat/column-views 2.4.4 → 3.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 (657) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/dist/age-axis.cjs +123 -0
  3. package/dist/age-axis.cjs.map +1 -0
  4. package/dist/age-axis.d.ts +33 -0
  5. package/dist/age-axis.js +123 -0
  6. package/dist/age-axis.js.map +1 -0
  7. package/dist/age-axis.module.sass.cjs +18 -0
  8. package/dist/age-axis.module.sass.cjs.map +1 -0
  9. package/dist/age-axis.module.sass.js +18 -0
  10. package/dist/age-axis.module.sass.js.map +1 -0
  11. package/dist/age-model-overlay.cjs +48 -0
  12. package/dist/age-model-overlay.cjs.map +1 -0
  13. package/dist/age-model-overlay.d.ts +24 -0
  14. package/dist/age-model-overlay.js +48 -0
  15. package/dist/age-model-overlay.js.map +1 -0
  16. package/dist/age-model-overlay.module.sass.cjs +8 -0
  17. package/dist/age-model-overlay.module.sass.cjs.map +1 -0
  18. package/dist/age-model-overlay.module.sass.js +8 -0
  19. package/dist/age-model-overlay.module.sass.js.map +1 -0
  20. package/dist/column-views.css +685 -0
  21. package/dist/column.cjs +247 -0
  22. package/dist/column.cjs.map +1 -0
  23. package/dist/column.d.ts +44 -0
  24. package/dist/column.js +247 -0
  25. package/dist/column.js.map +1 -0
  26. package/dist/column.module.sass.cjs +33 -0
  27. package/dist/column.module.sass.cjs.map +1 -0
  28. package/dist/column.module.sass.js +33 -0
  29. package/dist/column.module.sass.js.map +1 -0
  30. package/dist/correlation-chart/hash-string.cjs +46 -0
  31. package/dist/correlation-chart/hash-string.cjs.map +1 -0
  32. package/dist/correlation-chart/hash-string.d.ts +3 -0
  33. package/dist/correlation-chart/hash-string.js +46 -0
  34. package/dist/correlation-chart/hash-string.js.map +1 -0
  35. package/dist/correlation-chart/index.d.ts +2 -0
  36. package/dist/correlation-chart/main.cjs +202 -0
  37. package/dist/correlation-chart/main.cjs.map +1 -0
  38. package/dist/correlation-chart/main.d.ts +15 -0
  39. package/dist/correlation-chart/main.js +202 -0
  40. package/dist/correlation-chart/main.js.map +1 -0
  41. package/dist/correlation-chart/main.module.sass.cjs +28 -0
  42. package/dist/correlation-chart/main.module.sass.cjs.map +1 -0
  43. package/dist/correlation-chart/main.module.sass.js +28 -0
  44. package/dist/correlation-chart/main.module.sass.js.map +1 -0
  45. package/dist/correlation-chart/prepare-data.cjs +62 -0
  46. package/dist/correlation-chart/prepare-data.cjs.map +1 -0
  47. package/dist/correlation-chart/prepare-data.d.ts +52 -0
  48. package/dist/correlation-chart/prepare-data.js +62 -0
  49. package/dist/correlation-chart/prepare-data.js.map +1 -0
  50. package/dist/correlation-chart/stories/utils.d.ts +6 -0
  51. package/dist/correlation-chart/unconformity-line.d.ts +3 -0
  52. package/dist/data-provider/base.cjs +349 -0
  53. package/dist/data-provider/base.cjs.map +1 -0
  54. package/dist/data-provider/base.d.ts +65 -0
  55. package/dist/data-provider/base.js +349 -0
  56. package/dist/data-provider/base.js.map +1 -0
  57. package/dist/data-provider/column-nav.cjs +36 -0
  58. package/dist/data-provider/column-nav.cjs.map +1 -0
  59. package/dist/data-provider/column-nav.d.ts +13 -0
  60. package/dist/data-provider/column-nav.js +36 -0
  61. package/dist/data-provider/column-nav.js.map +1 -0
  62. package/dist/data-provider/core.cjs +56 -0
  63. package/dist/data-provider/core.cjs.map +1 -0
  64. package/dist/data-provider/core.d.ts +31 -0
  65. package/dist/data-provider/core.js +56 -0
  66. package/dist/{esm/column-views.67804ce5.js.map → data-provider/core.js.map} +1 -1
  67. package/dist/data-provider/fetch.cjs +210 -0
  68. package/dist/data-provider/fetch.cjs.map +1 -0
  69. package/dist/data-provider/fetch.d.ts +27 -0
  70. package/dist/data-provider/fetch.js +210 -0
  71. package/dist/data-provider/fetch.js.map +1 -0
  72. package/dist/data-provider/index.d.ts +5 -0
  73. package/dist/data-provider/store.cjs +107 -0
  74. package/dist/data-provider/store.cjs.map +1 -0
  75. package/dist/data-provider/store.d.ts +34 -0
  76. package/dist/data-provider/store.js +107 -0
  77. package/dist/data-provider/store.js.map +1 -0
  78. package/dist/data-provider/unit-selection.cjs +225 -0
  79. package/dist/data-provider/unit-selection.cjs.map +1 -0
  80. package/dist/data-provider/unit-selection.d.ts +49 -0
  81. package/dist/data-provider/unit-selection.js +225 -0
  82. package/dist/data-provider/unit-selection.js.map +1 -0
  83. package/dist/facets/carbon-isotopes/data-area.cjs +64 -0
  84. package/dist/facets/carbon-isotopes/data-area.cjs.map +1 -0
  85. package/dist/facets/carbon-isotopes/data-area.d.ts +13 -0
  86. package/dist/facets/carbon-isotopes/data-area.js +64 -0
  87. package/dist/facets/carbon-isotopes/data-area.js.map +1 -0
  88. package/dist/facets/carbon-isotopes/data-provider.cjs +20 -0
  89. package/dist/facets/carbon-isotopes/data-provider.cjs.map +1 -0
  90. package/dist/facets/carbon-isotopes/data-provider.d.ts +4 -0
  91. package/dist/facets/carbon-isotopes/data-provider.js +20 -0
  92. package/dist/facets/carbon-isotopes/data-provider.js.map +1 -0
  93. package/dist/facets/carbon-isotopes/index.d.ts +2 -0
  94. package/dist/facets/carbon-isotopes/isotopes-column.cjs +174 -0
  95. package/dist/facets/carbon-isotopes/isotopes-column.cjs.map +1 -0
  96. package/dist/facets/carbon-isotopes/isotopes-column.d.ts +19 -0
  97. package/dist/facets/carbon-isotopes/isotopes-column.js +174 -0
  98. package/dist/facets/carbon-isotopes/isotopes-column.js.map +1 -0
  99. package/dist/facets/carbon-isotopes/isotopes-column.module.sass.cjs +15 -0
  100. package/dist/facets/carbon-isotopes/isotopes-column.module.sass.cjs.map +1 -0
  101. package/dist/facets/carbon-isotopes/isotopes-column.module.sass.js +15 -0
  102. package/dist/facets/carbon-isotopes/isotopes-column.module.sass.js.map +1 -0
  103. package/dist/facets/detrital-zircon/index.cjs +108 -0
  104. package/dist/facets/detrital-zircon/index.cjs.map +1 -0
  105. package/dist/facets/detrital-zircon/index.d.ts +24 -0
  106. package/dist/facets/detrital-zircon/index.js +108 -0
  107. package/dist/facets/detrital-zircon/index.js.map +1 -0
  108. package/dist/facets/detrital-zircon/index.module.sass.cjs +11 -0
  109. package/dist/facets/detrital-zircon/index.module.sass.cjs.map +1 -0
  110. package/dist/facets/detrital-zircon/index.module.sass.js +11 -0
  111. package/dist/facets/detrital-zircon/index.module.sass.js.map +1 -0
  112. package/dist/facets/detrital-zircon/provider.cjs +22 -0
  113. package/dist/facets/detrital-zircon/provider.cjs.map +1 -0
  114. package/dist/facets/detrital-zircon/provider.d.ts +31 -0
  115. package/dist/facets/detrital-zircon/provider.js +22 -0
  116. package/dist/facets/detrital-zircon/provider.js.map +1 -0
  117. package/dist/facets/fossils/index.cjs +120 -0
  118. package/dist/facets/fossils/index.cjs.map +1 -0
  119. package/dist/facets/fossils/index.d.ts +7 -0
  120. package/dist/facets/fossils/index.js +120 -0
  121. package/dist/facets/fossils/index.js.map +1 -0
  122. package/dist/facets/fossils/provider.cjs +99 -0
  123. package/dist/facets/fossils/provider.cjs.map +1 -0
  124. package/dist/facets/fossils/provider.d.ts +29 -0
  125. package/dist/facets/fossils/provider.js +99 -0
  126. package/dist/facets/fossils/provider.js.map +1 -0
  127. package/dist/facets/fossils/taxon-ranges.cjs +145 -0
  128. package/dist/facets/fossils/taxon-ranges.cjs.map +1 -0
  129. package/dist/facets/fossils/taxon-ranges.d.ts +3 -0
  130. package/dist/facets/fossils/taxon-ranges.js +145 -0
  131. package/dist/facets/fossils/taxon-ranges.js.map +1 -0
  132. package/dist/facets/fossils/taxon-ranges.module.sass.cjs +13 -0
  133. package/dist/facets/fossils/taxon-ranges.module.sass.cjs.map +1 -0
  134. package/dist/facets/fossils/taxon-ranges.module.sass.js +13 -0
  135. package/dist/facets/fossils/taxon-ranges.module.sass.js.map +1 -0
  136. package/dist/facets/index.d.ts +4 -0
  137. package/dist/facets/measurements/base.cjs +128 -0
  138. package/dist/facets/measurements/base.cjs.map +1 -0
  139. package/dist/facets/measurements/base.d.ts +46 -0
  140. package/dist/facets/measurements/base.js +128 -0
  141. package/dist/facets/measurements/base.js.map +1 -0
  142. package/dist/facets/measurements/base.module.sass.cjs +8 -0
  143. package/dist/facets/measurements/base.module.sass.cjs.map +1 -0
  144. package/dist/facets/measurements/base.module.sass.js +8 -0
  145. package/dist/facets/measurements/base.module.sass.js.map +1 -0
  146. package/dist/facets/measurements/index.d.ts +2 -0
  147. package/dist/facets/measurements/sgp.cjs +62 -0
  148. package/dist/facets/measurements/sgp.cjs.map +1 -0
  149. package/dist/facets/measurements/sgp.d.ts +3 -0
  150. package/dist/facets/measurements/sgp.js +62 -0
  151. package/dist/facets/measurements/sgp.js.map +1 -0
  152. package/dist/index.cjs +164 -0
  153. package/dist/index.cjs.map +1 -0
  154. package/dist/index.d.ts +11 -0
  155. package/dist/index.js +164 -0
  156. package/dist/index.js.map +1 -0
  157. package/dist/maps/_shared/index.d.ts +2 -0
  158. package/dist/maps/_shared/inset-map.cjs +69 -0
  159. package/dist/maps/_shared/inset-map.cjs.map +1 -0
  160. package/dist/maps/_shared/inset-map.d.ts +16 -0
  161. package/dist/maps/_shared/inset-map.js +69 -0
  162. package/dist/maps/_shared/inset-map.js.map +1 -0
  163. package/dist/maps/_shared/styles.cjs +68 -0
  164. package/dist/maps/_shared/styles.cjs.map +1 -0
  165. package/dist/maps/_shared/styles.d.ts +2 -0
  166. package/dist/maps/_shared/styles.js +68 -0
  167. package/dist/maps/_shared/styles.js.map +1 -0
  168. package/dist/maps/column-correlation/core.cjs +185 -0
  169. package/dist/maps/column-correlation/core.cjs.map +1 -0
  170. package/dist/maps/column-correlation/core.d.ts +9 -0
  171. package/dist/maps/column-correlation/core.js +185 -0
  172. package/dist/maps/column-correlation/core.js.map +1 -0
  173. package/dist/maps/column-correlation/index.d.ts +2 -0
  174. package/dist/maps/column-correlation/state.cjs +129 -0
  175. package/dist/maps/column-correlation/state.cjs.map +1 -0
  176. package/dist/maps/column-correlation/state.d.ts +31 -0
  177. package/dist/maps/column-correlation/state.js +129 -0
  178. package/dist/maps/column-correlation/state.js.map +1 -0
  179. package/dist/maps/column-navigation/index.d.ts +2 -0
  180. package/dist/maps/column-navigation/mapbox/index.cjs +175 -0
  181. package/dist/maps/column-navigation/mapbox/index.cjs.map +1 -0
  182. package/dist/maps/column-navigation/mapbox/index.d.ts +17 -0
  183. package/dist/maps/column-navigation/mapbox/index.js +175 -0
  184. package/dist/maps/column-navigation/mapbox/index.js.map +1 -0
  185. package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs +99 -0
  186. package/dist/maps/column-navigation/mapbox/keyboard-navigation.cjs.map +1 -0
  187. package/dist/maps/column-navigation/mapbox/keyboard-navigation.d.ts +31 -0
  188. package/dist/maps/column-navigation/mapbox/keyboard-navigation.js +99 -0
  189. package/dist/maps/column-navigation/mapbox/keyboard-navigation.js.map +1 -0
  190. package/dist/maps/column-navigation/mapbox/state.cjs +71 -0
  191. package/dist/maps/column-navigation/mapbox/state.cjs.map +1 -0
  192. package/dist/maps/column-navigation/mapbox/state.d.ts +23 -0
  193. package/dist/maps/column-navigation/mapbox/state.js +71 -0
  194. package/dist/maps/column-navigation/mapbox/state.js.map +1 -0
  195. package/dist/maps/column-navigation/svg/animated.d.ts +1 -0
  196. package/dist/maps/column-navigation/svg/index.cjs +92 -0
  197. package/dist/maps/column-navigation/svg/index.cjs.map +1 -0
  198. package/dist/maps/column-navigation/svg/index.d.ts +9 -0
  199. package/dist/maps/column-navigation/svg/index.js +93 -0
  200. package/dist/maps/column-navigation/svg/index.js.map +1 -0
  201. package/dist/maps/column-navigation/svg/layers.cjs +175 -0
  202. package/dist/maps/column-navigation/svg/layers.cjs.map +1 -0
  203. package/dist/maps/column-navigation/svg/layers.d.ts +54 -0
  204. package/dist/maps/column-navigation/svg/layers.js +175 -0
  205. package/dist/maps/column-navigation/svg/layers.js.map +1 -0
  206. package/dist/maps/column-navigation/utils/keyboard-navigation.cjs +50 -0
  207. package/dist/maps/column-navigation/utils/keyboard-navigation.cjs.map +1 -0
  208. package/dist/maps/column-navigation/utils/keyboard-navigation.d.ts +10 -0
  209. package/dist/maps/column-navigation/utils/keyboard-navigation.js +50 -0
  210. package/dist/maps/column-navigation/utils/keyboard-navigation.js.map +1 -0
  211. package/dist/maps/index.d.ts +3 -0
  212. package/dist/notes.cjs +41 -0
  213. package/dist/notes.cjs.map +1 -0
  214. package/dist/notes.d.ts +12 -0
  215. package/dist/notes.js +41 -0
  216. package/dist/notes.js.map +1 -0
  217. package/dist/prepare-units/composite-scale.cjs +284 -0
  218. package/dist/prepare-units/composite-scale.cjs.map +1 -0
  219. package/dist/prepare-units/composite-scale.d.ts +19 -0
  220. package/dist/prepare-units/composite-scale.js +284 -0
  221. package/dist/prepare-units/composite-scale.js.map +1 -0
  222. package/dist/prepare-units/dynamic-scales.cjs +190 -0
  223. package/dist/prepare-units/dynamic-scales.cjs.map +1 -0
  224. package/dist/prepare-units/dynamic-scales.d.ts +13 -0
  225. package/dist/prepare-units/dynamic-scales.js +190 -0
  226. package/dist/prepare-units/dynamic-scales.js.map +1 -0
  227. package/dist/prepare-units/helpers.cjs +198 -0
  228. package/dist/prepare-units/helpers.cjs.map +1 -0
  229. package/dist/prepare-units/helpers.d.ts +10 -0
  230. package/dist/prepare-units/helpers.js +198 -0
  231. package/dist/prepare-units/helpers.js.map +1 -0
  232. package/dist/prepare-units/index.cjs +130 -0
  233. package/dist/prepare-units/index.cjs.map +1 -0
  234. package/dist/prepare-units/index.d.ts +10 -0
  235. package/dist/prepare-units/index.js +131 -0
  236. package/dist/prepare-units/index.js.map +1 -0
  237. package/dist/prepare-units/types.cjs +16 -0
  238. package/dist/prepare-units/types.cjs.map +1 -0
  239. package/dist/prepare-units/types.d.ts +99 -0
  240. package/dist/prepare-units/types.js +16 -0
  241. package/dist/prepare-units/types.js.map +1 -0
  242. package/dist/prepare-units/utils.cjs +99 -0
  243. package/dist/prepare-units/utils.cjs.map +1 -0
  244. package/dist/prepare-units/utils.d.ts +39 -0
  245. package/dist/prepare-units/utils.js +99 -0
  246. package/dist/prepare-units/utils.js.map +1 -0
  247. package/dist/section.cjs +269 -0
  248. package/dist/section.cjs.map +1 -0
  249. package/dist/section.d.ts +45 -0
  250. package/dist/section.js +269 -0
  251. package/dist/section.js.map +1 -0
  252. package/dist/unit-details/index.d.ts +3 -0
  253. package/dist/unit-details/modal-panel.cjs +57 -0
  254. package/dist/unit-details/modal-panel.cjs.map +1 -0
  255. package/dist/unit-details/modal-panel.d.ts +1 -0
  256. package/dist/unit-details/modal-panel.js +57 -0
  257. package/dist/unit-details/modal-panel.js.map +1 -0
  258. package/dist/unit-details/panel.cjs +627 -0
  259. package/dist/unit-details/panel.cjs.map +1 -0
  260. package/dist/unit-details/panel.d.ts +87 -0
  261. package/dist/unit-details/panel.js +627 -0
  262. package/dist/unit-details/panel.js.map +1 -0
  263. package/dist/unit-details/panel.module.sass.cjs +42 -0
  264. package/dist/unit-details/panel.module.sass.cjs.map +1 -0
  265. package/dist/unit-details/panel.module.sass.js +42 -0
  266. package/dist/unit-details/panel.module.sass.js.map +1 -0
  267. package/dist/unit-details/popover.cjs +81 -0
  268. package/dist/unit-details/popover.cjs.map +1 -0
  269. package/dist/unit-details/popover.d.ts +9 -0
  270. package/dist/unit-details/popover.js +81 -0
  271. package/dist/unit-details/popover.js.map +1 -0
  272. package/dist/unit-details/popover.module.sass.cjs +10 -0
  273. package/dist/unit-details/popover.module.sass.cjs.map +1 -0
  274. package/dist/unit-details/popover.module.sass.js +10 -0
  275. package/dist/unit-details/popover.module.sass.js.map +1 -0
  276. package/dist/units/boxes.cjs +187 -0
  277. package/dist/units/boxes.cjs.map +1 -0
  278. package/dist/units/boxes.d.ts +54 -0
  279. package/dist/units/boxes.js +187 -0
  280. package/dist/units/boxes.js.map +1 -0
  281. package/dist/units/boxes.module.sass.cjs +11 -0
  282. package/dist/units/boxes.module.sass.cjs.map +1 -0
  283. package/dist/units/boxes.module.sass.js +11 -0
  284. package/dist/units/boxes.module.sass.js.map +1 -0
  285. package/dist/units/colors.cjs +52 -0
  286. package/dist/units/colors.cjs.map +1 -0
  287. package/dist/units/colors.d.ts +7 -0
  288. package/dist/units/colors.js +52 -0
  289. package/dist/units/colors.js.map +1 -0
  290. package/dist/units/composite.cjs +157 -0
  291. package/dist/units/composite.cjs.map +1 -0
  292. package/dist/units/composite.d.ts +39 -0
  293. package/dist/units/composite.js +157 -0
  294. package/dist/units/composite.js.map +1 -0
  295. package/dist/units/composite.module.sass.cjs +7 -0
  296. package/dist/units/composite.module.sass.cjs.map +1 -0
  297. package/dist/units/composite.module.sass.js +7 -0
  298. package/dist/units/composite.module.sass.js.map +1 -0
  299. package/dist/units/index.cjs +117 -0
  300. package/dist/units/index.cjs.map +1 -0
  301. package/dist/units/index.d.ts +40 -0
  302. package/dist/units/index.js +118 -0
  303. package/dist/units/index.js.map +1 -0
  304. package/dist/units/names.cjs +72 -0
  305. package/dist/units/names.cjs.map +1 -0
  306. package/dist/units/names.d.ts +33 -0
  307. package/dist/units/names.js +72 -0
  308. package/dist/units/names.js.map +1 -0
  309. package/dist/units/resolvers.cjs +114 -0
  310. package/dist/units/resolvers.cjs.map +1 -0
  311. package/dist/units/resolvers.d.ts +3 -0
  312. package/dist/units/resolvers.js +114 -0
  313. package/dist/units/resolvers.js.map +1 -0
  314. package/dist/units/types.d.ts +16 -0
  315. package/package.json +52 -55
  316. package/src/unit-details/popover.module.sass +3 -3
  317. package/dist/esm/column-views.006d5180.js +0 -97
  318. package/dist/esm/column-views.006d5180.js.map +0 -1
  319. package/dist/esm/column-views.052498a6.js +0 -93
  320. package/dist/esm/column-views.052498a6.js.map +0 -1
  321. package/dist/esm/column-views.079119f4.js +0 -17
  322. package/dist/esm/column-views.079119f4.js.map +0 -1
  323. package/dist/esm/column-views.0abf7e10.js +0 -67
  324. package/dist/esm/column-views.0abf7e10.js.map +0 -1
  325. package/dist/esm/column-views.0b3c0d18.js +0 -322
  326. package/dist/esm/column-views.0b3c0d18.js.map +0 -1
  327. package/dist/esm/column-views.0ed9da35.js +0 -141
  328. package/dist/esm/column-views.0ed9da35.js.map +0 -1
  329. package/dist/esm/column-views.0faf79a9.js +0 -142
  330. package/dist/esm/column-views.0faf79a9.js.map +0 -1
  331. package/dist/esm/column-views.16cc7a58.css +0 -37
  332. package/dist/esm/column-views.16cc7a58.css.map +0 -1
  333. package/dist/esm/column-views.17a70358.js +0 -16
  334. package/dist/esm/column-views.17a70358.js.map +0 -1
  335. package/dist/esm/column-views.19539293.js +0 -86
  336. package/dist/esm/column-views.19539293.js.map +0 -1
  337. package/dist/esm/column-views.1af3ec1f.js +0 -139
  338. package/dist/esm/column-views.1af3ec1f.js.map +0 -1
  339. package/dist/esm/column-views.1cd55918.js +0 -206
  340. package/dist/esm/column-views.1cd55918.js.map +0 -1
  341. package/dist/esm/column-views.22ec902b.js +0 -34
  342. package/dist/esm/column-views.22ec902b.js.map +0 -1
  343. package/dist/esm/column-views.2a0010a3.js +0 -15
  344. package/dist/esm/column-views.2a0010a3.js.map +0 -1
  345. package/dist/esm/column-views.2c45a7b5.js +0 -25
  346. package/dist/esm/column-views.2c45a7b5.js.map +0 -1
  347. package/dist/esm/column-views.321af3ae.css +0 -59
  348. package/dist/esm/column-views.321af3ae.css.map +0 -1
  349. package/dist/esm/column-views.334c3947.js +0 -75
  350. package/dist/esm/column-views.334c3947.js.map +0 -1
  351. package/dist/esm/column-views.33796541.js +0 -88
  352. package/dist/esm/column-views.33796541.js.map +0 -1
  353. package/dist/esm/column-views.337b40a2.js +0 -199
  354. package/dist/esm/column-views.337b40a2.js.map +0 -1
  355. package/dist/esm/column-views.338a7a83.css +0 -134
  356. package/dist/esm/column-views.338a7a83.css.map +0 -1
  357. package/dist/esm/column-views.33d35a44.js +0 -118
  358. package/dist/esm/column-views.33d35a44.js.map +0 -1
  359. package/dist/esm/column-views.3465c8ad.js +0 -16
  360. package/dist/esm/column-views.3465c8ad.js.map +0 -1
  361. package/dist/esm/column-views.362aae9a.js +0 -113
  362. package/dist/esm/column-views.362aae9a.js.map +0 -1
  363. package/dist/esm/column-views.3b972a9b.css +0 -4
  364. package/dist/esm/column-views.3b972a9b.css.map +0 -1
  365. package/dist/esm/column-views.3de4dc43.js +0 -66
  366. package/dist/esm/column-views.3de4dc43.js.map +0 -1
  367. package/dist/esm/column-views.40cd59b5.js +0 -13
  368. package/dist/esm/column-views.40cd59b5.js.map +0 -1
  369. package/dist/esm/column-views.4252a555.js +0 -248
  370. package/dist/esm/column-views.4252a555.js.map +0 -1
  371. package/dist/esm/column-views.45c70ba4.js +0 -38
  372. package/dist/esm/column-views.45c70ba4.js.map +0 -1
  373. package/dist/esm/column-views.47b7d9ca.js +0 -206
  374. package/dist/esm/column-views.47b7d9ca.js.map +0 -1
  375. package/dist/esm/column-views.47ca059d.js +0 -225
  376. package/dist/esm/column-views.47ca059d.js.map +0 -1
  377. package/dist/esm/column-views.4d374a35.js +0 -19
  378. package/dist/esm/column-views.4d374a35.js.map +0 -1
  379. package/dist/esm/column-views.54c1f382.css +0 -23
  380. package/dist/esm/column-views.54c1f382.css.map +0 -1
  381. package/dist/esm/column-views.562db43a.css +0 -148
  382. package/dist/esm/column-views.562db43a.css.map +0 -1
  383. package/dist/esm/column-views.5e1c216f.js +0 -180
  384. package/dist/esm/column-views.5e1c216f.js.map +0 -1
  385. package/dist/esm/column-views.60e97132.js +0 -20
  386. package/dist/esm/column-views.60e97132.js.map +0 -1
  387. package/dist/esm/column-views.636d6553.js +0 -343
  388. package/dist/esm/column-views.636d6553.js.map +0 -1
  389. package/dist/esm/column-views.64f6ddd3.js +0 -9
  390. package/dist/esm/column-views.64f6ddd3.js.map +0 -1
  391. package/dist/esm/column-views.6519a353.js +0 -9
  392. package/dist/esm/column-views.6519a353.js.map +0 -1
  393. package/dist/esm/column-views.67804ce5.js +0 -68
  394. package/dist/esm/column-views.6992ca88.js +0 -25
  395. package/dist/esm/column-views.6992ca88.js.map +0 -1
  396. package/dist/esm/column-views.6a954628.js +0 -70
  397. package/dist/esm/column-views.6a954628.js.map +0 -1
  398. package/dist/esm/column-views.6c670c13.css +0 -26
  399. package/dist/esm/column-views.6c670c13.css.map +0 -1
  400. package/dist/esm/column-views.6cff6659.js +0 -11
  401. package/dist/esm/column-views.6cff6659.js.map +0 -1
  402. package/dist/esm/column-views.6d6b73b4.js +0 -55
  403. package/dist/esm/column-views.6d6b73b4.js.map +0 -1
  404. package/dist/esm/column-views.6f9511d1.css +0 -25
  405. package/dist/esm/column-views.6f9511d1.css.map +0 -1
  406. package/dist/esm/column-views.6fff7602.js +0 -94
  407. package/dist/esm/column-views.6fff7602.js.map +0 -1
  408. package/dist/esm/column-views.70387120.js +0 -9
  409. package/dist/esm/column-views.70387120.js.map +0 -1
  410. package/dist/esm/column-views.708140ab.css +0 -36
  411. package/dist/esm/column-views.708140ab.css.map +0 -1
  412. package/dist/esm/column-views.74837922.js +0 -112
  413. package/dist/esm/column-views.74837922.js.map +0 -1
  414. package/dist/esm/column-views.76fb9948.js +0 -169
  415. package/dist/esm/column-views.76fb9948.js.map +0 -1
  416. package/dist/esm/column-views.7bfb4318.js +0 -161
  417. package/dist/esm/column-views.7bfb4318.js.map +0 -1
  418. package/dist/esm/column-views.7dc53f1b.js +0 -168
  419. package/dist/esm/column-views.7dc53f1b.js.map +0 -1
  420. package/dist/esm/column-views.85df21ec.js +0 -567
  421. package/dist/esm/column-views.85df21ec.js.map +0 -1
  422. package/dist/esm/column-views.87c589b7.js +0 -72
  423. package/dist/esm/column-views.87c589b7.js.map +0 -1
  424. package/dist/esm/column-views.8da2b857.js +0 -81
  425. package/dist/esm/column-views.8da2b857.js.map +0 -1
  426. package/dist/esm/column-views.8fb37de7.js +0 -9
  427. package/dist/esm/column-views.8fb37de7.js.map +0 -1
  428. package/dist/esm/column-views.9512c5d5.js +0 -240
  429. package/dist/esm/column-views.9512c5d5.js.map +0 -1
  430. package/dist/esm/column-views.9905b91c.js +0 -11
  431. package/dist/esm/column-views.9905b91c.js.map +0 -1
  432. package/dist/esm/column-views.9b77388d.js +0 -41
  433. package/dist/esm/column-views.9b77388d.js.map +0 -1
  434. package/dist/esm/column-views.a4f394fe.js +0 -127
  435. package/dist/esm/column-views.a4f394fe.js.map +0 -1
  436. package/dist/esm/column-views.a7c5ae16.js +0 -25
  437. package/dist/esm/column-views.a7c5ae16.js.map +0 -1
  438. package/dist/esm/column-views.aa9ede4d.js +0 -206
  439. package/dist/esm/column-views.aa9ede4d.js.map +0 -1
  440. package/dist/esm/column-views.b7cf0da2.js +0 -60
  441. package/dist/esm/column-views.b7cf0da2.js.map +0 -1
  442. package/dist/esm/column-views.beb54e95.js +0 -39
  443. package/dist/esm/column-views.beb54e95.js.map +0 -1
  444. package/dist/esm/column-views.c47dba5f.js +0 -9
  445. package/dist/esm/column-views.c47dba5f.js.map +0 -1
  446. package/dist/esm/column-views.c750a6df.js +0 -9
  447. package/dist/esm/column-views.c750a6df.js.map +0 -1
  448. package/dist/esm/column-views.cb1cc9f2.js +0 -134
  449. package/dist/esm/column-views.cb1cc9f2.js.map +0 -1
  450. package/dist/esm/column-views.cb6fc808.css +0 -54
  451. package/dist/esm/column-views.cb6fc808.css.map +0 -1
  452. package/dist/esm/column-views.cc733361.js +0 -55
  453. package/dist/esm/column-views.cc733361.js.map +0 -1
  454. package/dist/esm/column-views.ce000969.js +0 -187
  455. package/dist/esm/column-views.ce000969.js.map +0 -1
  456. package/dist/esm/column-views.d5e788e8.js +0 -31
  457. package/dist/esm/column-views.d5e788e8.js.map +0 -1
  458. package/dist/esm/column-views.d7740949.js +0 -152
  459. package/dist/esm/column-views.d7740949.js.map +0 -1
  460. package/dist/esm/column-views.d7e6bf67.js +0 -70
  461. package/dist/esm/column-views.d7e6bf67.js.map +0 -1
  462. package/dist/esm/column-views.dac0a3bb.js +0 -149
  463. package/dist/esm/column-views.dac0a3bb.js.map +0 -1
  464. package/dist/esm/column-views.dc42f5d0.js +0 -48
  465. package/dist/esm/column-views.dc42f5d0.js.map +0 -1
  466. package/dist/esm/column-views.e13a0a76.js +0 -138
  467. package/dist/esm/column-views.e13a0a76.js.map +0 -1
  468. package/dist/esm/column-views.e40b8bfb.css +0 -14
  469. package/dist/esm/column-views.e40b8bfb.css.map +0 -1
  470. package/dist/esm/column-views.e93478c3.css +0 -194
  471. package/dist/esm/column-views.e93478c3.css.map +0 -1
  472. package/dist/esm/column-views.ea08f667.js +0 -218
  473. package/dist/esm/column-views.ea08f667.js.map +0 -1
  474. package/dist/esm/column-views.ebb5f280.js +0 -13
  475. package/dist/esm/column-views.ebb5f280.js.map +0 -1
  476. package/dist/esm/column-views.edf77621.js +0 -22
  477. package/dist/esm/column-views.edf77621.js.map +0 -1
  478. package/dist/esm/column-views.f9dab157.js +0 -3
  479. package/dist/esm/column-views.f9dab157.js.map +0 -1
  480. package/dist/esm/column-views.fcf25ec6.js +0 -76
  481. package/dist/esm/column-views.fcf25ec6.js.map +0 -1
  482. package/dist/esm/column-views.fe42d2fc.js +0 -134
  483. package/dist/esm/column-views.fe42d2fc.js.map +0 -1
  484. package/dist/esm/index.d.ts +0 -1008
  485. package/dist/esm/index.d.ts.map +0 -1
  486. package/dist/esm/index.js +0 -27
  487. package/dist/esm/index.js.map +0 -1
  488. package/dist/node/column-views.012fa10c.js +0 -2
  489. package/dist/node/column-views.012fa10c.js.map +0 -1
  490. package/dist/node/column-views.048fdcaf.js +0 -2
  491. package/dist/node/column-views.048fdcaf.js.map +0 -1
  492. package/dist/node/column-views.04a72b35.js +0 -2
  493. package/dist/node/column-views.04a72b35.js.map +0 -1
  494. package/dist/node/column-views.0840b115.css +0 -2
  495. package/dist/node/column-views.0840b115.css.map +0 -1
  496. package/dist/node/column-views.0af5912d.js +0 -2
  497. package/dist/node/column-views.0af5912d.js.map +0 -1
  498. package/dist/node/column-views.0bd15ee4.js +0 -2
  499. package/dist/node/column-views.0bd15ee4.js.map +0 -1
  500. package/dist/node/column-views.0d254fd3.js +0 -2
  501. package/dist/node/column-views.0d254fd3.js.map +0 -1
  502. package/dist/node/column-views.109cb0c8.js +0 -2
  503. package/dist/node/column-views.109cb0c8.js.map +0 -1
  504. package/dist/node/column-views.1261be59.js +0 -2
  505. package/dist/node/column-views.1261be59.js.map +0 -1
  506. package/dist/node/column-views.133855e6.js +0 -2
  507. package/dist/node/column-views.133855e6.js.map +0 -1
  508. package/dist/node/column-views.15b5cecc.js +0 -2
  509. package/dist/node/column-views.15b5cecc.js.map +0 -1
  510. package/dist/node/column-views.183745c0.js +0 -2
  511. package/dist/node/column-views.183745c0.js.map +0 -1
  512. package/dist/node/column-views.2e2158f5.js +0 -2
  513. package/dist/node/column-views.2e2158f5.js.map +0 -1
  514. package/dist/node/column-views.306acd3f.js +0 -2
  515. package/dist/node/column-views.306acd3f.js.map +0 -1
  516. package/dist/node/column-views.31153f29.js +0 -2
  517. package/dist/node/column-views.31153f29.js.map +0 -1
  518. package/dist/node/column-views.31da008b.js +0 -2
  519. package/dist/node/column-views.31da008b.js.map +0 -1
  520. package/dist/node/column-views.3a079e34.css +0 -2
  521. package/dist/node/column-views.3a079e34.css.map +0 -1
  522. package/dist/node/column-views.40e758b3.js +0 -2
  523. package/dist/node/column-views.40e758b3.js.map +0 -1
  524. package/dist/node/column-views.41876859.js +0 -2
  525. package/dist/node/column-views.41876859.js.map +0 -1
  526. package/dist/node/column-views.4a28d695.js +0 -2
  527. package/dist/node/column-views.4a28d695.js.map +0 -1
  528. package/dist/node/column-views.4ec769a6.js +0 -2
  529. package/dist/node/column-views.4ec769a6.js.map +0 -1
  530. package/dist/node/column-views.50a992d3.css +0 -2
  531. package/dist/node/column-views.50a992d3.css.map +0 -1
  532. package/dist/node/column-views.51fbed89.js +0 -2
  533. package/dist/node/column-views.51fbed89.js.map +0 -1
  534. package/dist/node/column-views.5950c8eb.js +0 -2
  535. package/dist/node/column-views.5950c8eb.js.map +0 -1
  536. package/dist/node/column-views.5987bc26.js +0 -2
  537. package/dist/node/column-views.5987bc26.js.map +0 -1
  538. package/dist/node/column-views.5a9331a9.js +0 -2
  539. package/dist/node/column-views.5a9331a9.js.map +0 -1
  540. package/dist/node/column-views.5bb858c9.js +0 -2
  541. package/dist/node/column-views.5bb858c9.js.map +0 -1
  542. package/dist/node/column-views.5c1b0eeb.css +0 -2
  543. package/dist/node/column-views.5c1b0eeb.css.map +0 -1
  544. package/dist/node/column-views.5cbada24.js +0 -2
  545. package/dist/node/column-views.5cbada24.js.map +0 -1
  546. package/dist/node/column-views.5fcd2be6.js +0 -2
  547. package/dist/node/column-views.5fcd2be6.js.map +0 -1
  548. package/dist/node/column-views.672b683c.js +0 -2
  549. package/dist/node/column-views.672b683c.js.map +0 -1
  550. package/dist/node/column-views.6a0a35e7.js +0 -2
  551. package/dist/node/column-views.6a0a35e7.js.map +0 -1
  552. package/dist/node/column-views.6a4c2100.css +0 -2
  553. package/dist/node/column-views.6a4c2100.css.map +0 -1
  554. package/dist/node/column-views.6a9da051.js +0 -2
  555. package/dist/node/column-views.6a9da051.js.map +0 -1
  556. package/dist/node/column-views.6bba8c57.js +0 -2
  557. package/dist/node/column-views.6bba8c57.js.map +0 -1
  558. package/dist/node/column-views.75ba0464.css +0 -2
  559. package/dist/node/column-views.75ba0464.css.map +0 -1
  560. package/dist/node/column-views.78b2d234.js +0 -2
  561. package/dist/node/column-views.78b2d234.js.map +0 -1
  562. package/dist/node/column-views.7b6e7d82.js +0 -2
  563. package/dist/node/column-views.7b6e7d82.js.map +0 -1
  564. package/dist/node/column-views.7b9bd06e.css +0 -2
  565. package/dist/node/column-views.7b9bd06e.css.map +0 -1
  566. package/dist/node/column-views.7d45bbeb.js +0 -2
  567. package/dist/node/column-views.7d45bbeb.js.map +0 -1
  568. package/dist/node/column-views.7f9c7448.js +0 -2
  569. package/dist/node/column-views.7f9c7448.js.map +0 -1
  570. package/dist/node/column-views.82cf7c0d.js +0 -2
  571. package/dist/node/column-views.82cf7c0d.js.map +0 -1
  572. package/dist/node/column-views.869c7199.js +0 -2
  573. package/dist/node/column-views.869c7199.js.map +0 -1
  574. package/dist/node/column-views.8bee789c.js +0 -2
  575. package/dist/node/column-views.8bee789c.js.map +0 -1
  576. package/dist/node/column-views.90c36c0b.js +0 -2
  577. package/dist/node/column-views.90c36c0b.js.map +0 -1
  578. package/dist/node/column-views.951e3e9a.js +0 -2
  579. package/dist/node/column-views.951e3e9a.js.map +0 -1
  580. package/dist/node/column-views.95411f1b.js +0 -2
  581. package/dist/node/column-views.95411f1b.js.map +0 -1
  582. package/dist/node/column-views.9cb13e51.css +0 -2
  583. package/dist/node/column-views.9cb13e51.css.map +0 -1
  584. package/dist/node/column-views.a0969fc8.js +0 -2
  585. package/dist/node/column-views.a0969fc8.js.map +0 -1
  586. package/dist/node/column-views.a2476e39.js +0 -2
  587. package/dist/node/column-views.a2476e39.js.map +0 -1
  588. package/dist/node/column-views.a8f5ee28.js +0 -2
  589. package/dist/node/column-views.a8f5ee28.js.map +0 -1
  590. package/dist/node/column-views.ad60c02f.js +0 -2
  591. package/dist/node/column-views.ad60c02f.js.map +0 -1
  592. package/dist/node/column-views.add5e42b.js +0 -2
  593. package/dist/node/column-views.add5e42b.js.map +0 -1
  594. package/dist/node/column-views.b169b4b5.css +0 -2
  595. package/dist/node/column-views.b169b4b5.css.map +0 -1
  596. package/dist/node/column-views.b2e5f823.js +0 -2
  597. package/dist/node/column-views.b2e5f823.js.map +0 -1
  598. package/dist/node/column-views.b57e5e6e.js +0 -2
  599. package/dist/node/column-views.b57e5e6e.js.map +0 -1
  600. package/dist/node/column-views.b762c9a8.js +0 -2
  601. package/dist/node/column-views.b762c9a8.js.map +0 -1
  602. package/dist/node/column-views.ba9108fe.js +0 -2
  603. package/dist/node/column-views.ba9108fe.js.map +0 -1
  604. package/dist/node/column-views.c16a19fb.js +0 -2
  605. package/dist/node/column-views.c16a19fb.js.map +0 -1
  606. package/dist/node/column-views.c3097d9a.js +0 -2
  607. package/dist/node/column-views.c3097d9a.js.map +0 -1
  608. package/dist/node/column-views.c4c15e2b.js +0 -2
  609. package/dist/node/column-views.c4c15e2b.js.map +0 -1
  610. package/dist/node/column-views.c651b684.js +0 -2
  611. package/dist/node/column-views.c651b684.js.map +0 -1
  612. package/dist/node/column-views.c968a185.css +0 -2
  613. package/dist/node/column-views.c968a185.css.map +0 -1
  614. package/dist/node/column-views.ccfb9afb.css +0 -2
  615. package/dist/node/column-views.ccfb9afb.css.map +0 -1
  616. package/dist/node/column-views.cdcce702.js +0 -2
  617. package/dist/node/column-views.cdcce702.js.map +0 -1
  618. package/dist/node/column-views.cf41a6d7.js +0 -2
  619. package/dist/node/column-views.cf41a6d7.js.map +0 -1
  620. package/dist/node/column-views.d22bf15c.js +0 -2
  621. package/dist/node/column-views.d22bf15c.js.map +0 -1
  622. package/dist/node/column-views.d737de1e.js +0 -2
  623. package/dist/node/column-views.d737de1e.js.map +0 -1
  624. package/dist/node/column-views.da902c44.js +0 -2
  625. package/dist/node/column-views.da902c44.js.map +0 -1
  626. package/dist/node/column-views.db3377d8.js +0 -2
  627. package/dist/node/column-views.db3377d8.js.map +0 -1
  628. package/dist/node/column-views.dbb4a46b.js +0 -2
  629. package/dist/node/column-views.dbb4a46b.js.map +0 -1
  630. package/dist/node/column-views.ddc6184e.css +0 -2
  631. package/dist/node/column-views.ddc6184e.css.map +0 -1
  632. package/dist/node/column-views.e0e20136.js +0 -2
  633. package/dist/node/column-views.e0e20136.js.map +0 -1
  634. package/dist/node/column-views.e2562224.js +0 -2
  635. package/dist/node/column-views.e2562224.js.map +0 -1
  636. package/dist/node/column-views.e6720522.js +0 -2
  637. package/dist/node/column-views.e6720522.js.map +0 -1
  638. package/dist/node/column-views.e7e26765.js +0 -2
  639. package/dist/node/column-views.e7e26765.js.map +0 -1
  640. package/dist/node/column-views.e93b3bdb.js +0 -2
  641. package/dist/node/column-views.e93b3bdb.js.map +0 -1
  642. package/dist/node/column-views.ebb44b7d.js +0 -2
  643. package/dist/node/column-views.ebb44b7d.js.map +0 -1
  644. package/dist/node/column-views.ec0087a2.js +0 -2
  645. package/dist/node/column-views.ec0087a2.js.map +0 -1
  646. package/dist/node/column-views.eea80478.js +0 -2
  647. package/dist/node/column-views.eea80478.js.map +0 -1
  648. package/dist/node/column-views.fb3ed7cc.js +0 -2
  649. package/dist/node/column-views.fb3ed7cc.js.map +0 -1
  650. package/dist/node/column-views.fc4c2c61.js +0 -2
  651. package/dist/node/column-views.fc4c2c61.js.map +0 -1
  652. package/dist/node/column-views.fcb243a2.js +0 -2
  653. package/dist/node/column-views.fcb243a2.js.map +0 -1
  654. package/dist/node/column-views.fea32686.js +0 -2
  655. package/dist/node/column-views.fea32686.js.map +0 -1
  656. package/dist/node/index.js +0 -2
  657. package/dist/node/index.js.map +0 -1
@@ -0,0 +1,131 @@
1
+ import { preprocessSectionUnit, getSectionPosRange, getSectionAgeRange, groupUnitsIntoSectionsBySectionID, groupUnitsIntoSectionsByOverlap, mergeOverlappingSections, preprocessUnits } from "./helpers.js";
2
+ import { ColumnAxisType } from "@macrostrat/column-components";
3
+ import { useMemo } from "react";
4
+ import { computeSectionHeights, collapseUnconformitiesByPixelHeight, finalizeSectionHeights } from "./composite-scale.js";
5
+ import { MergeSectionsMode, agesOverlap, unitsOverlap } from "./utils.js";
6
+ import { createUnitSorter, ensureArray, ensureRealFloat, getPositionWithinUnit, getUnitHeightRange } from "./utils.js";
7
+ function usePreparedColumnUnits(data, options) {
8
+ return useMemo(() => {
9
+ return prepareColumnUnits(data, options);
10
+ }, [data, ...Object.values(options)]);
11
+ }
12
+ function prepareColumnUnits(units, options) {
13
+ let { t_age, b_age, t_pos, b_pos } = options;
14
+ const {
15
+ mergeSections = MergeSectionsMode.OVERLAPPING,
16
+ axisType,
17
+ unconformityHeight,
18
+ collapseSmallUnconformities = false,
19
+ hybridScale,
20
+ scale
21
+ } = options;
22
+ let _totalHeight = null;
23
+ if (scale != null) {
24
+ const domain = scale.domain();
25
+ if (axisType == ColumnAxisType.AGE) {
26
+ if (t_age == null) t_age = Math.min(...domain);
27
+ if (b_age == null) b_age = Math.max(...domain);
28
+ _totalHeight = Math.abs(scale(b_age) - scale(t_age));
29
+ } else {
30
+ if (t_pos == null) t_pos = Math.min(...domain);
31
+ if (b_pos == null) b_pos = Math.max(...domain);
32
+ _totalHeight = Math.abs(scale(b_pos) - scale(t_pos));
33
+ }
34
+ }
35
+ let units1 = units.map(preprocessSectionUnit);
36
+ units1 = units1.filter((d) => {
37
+ if (axisType == ColumnAxisType.AGE) {
38
+ return agesOverlap(d, { t_age, b_age });
39
+ } else {
40
+ return unitsOverlap(d, { t_pos, b_pos }, axisType);
41
+ }
42
+ });
43
+ let mergeMode = mergeSections;
44
+ let sections0;
45
+ if (mergeMode == MergeSectionsMode.ALL) {
46
+ const [b_unit_pos, t_unit_pos] = getSectionPosRange(units1, axisType);
47
+ const [b_unit_age, t_unit_age] = getSectionAgeRange(units1);
48
+ sections0 = [
49
+ {
50
+ section_id: 0,
51
+ /**
52
+ * If ages limits are directly specified, use them to define the section bounds.
53
+ * */
54
+ t_pos: t_unit_pos,
55
+ b_pos: b_unit_pos,
56
+ t_age: t_unit_age,
57
+ b_age: b_unit_age,
58
+ units: units1
59
+ }
60
+ ];
61
+ } else if (axisType == ColumnAxisType.AGE) {
62
+ sections0 = groupUnitsIntoSectionsBySectionID(units1, axisType);
63
+ } else {
64
+ sections0 = groupUnitsIntoSectionsByOverlap(units1, axisType);
65
+ }
66
+ for (let section of sections0) {
67
+ if (axisType == ColumnAxisType.AGE) {
68
+ section.t_age = Math.max(section.t_age, t_age ?? -Infinity);
69
+ section.b_age = Math.min(section.b_age, b_age ?? Infinity);
70
+ } else if (axisType == ColumnAxisType.DEPTH) {
71
+ section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);
72
+ section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);
73
+ } else if (axisType == ColumnAxisType.HEIGHT) {
74
+ section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);
75
+ section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);
76
+ }
77
+ }
78
+ let sections = sections0;
79
+ if (mergeSections == MergeSectionsMode.OVERLAPPING && axisType == ColumnAxisType.AGE) {
80
+ sections = mergeOverlappingSections(sections);
81
+ }
82
+ sections = sections.filter((d) => d != null);
83
+ let sectionsWithScales = computeSectionHeights(sections, options);
84
+ if (collapseSmallUnconformities && hybridScale == null) {
85
+ let threshold = unconformityHeight ?? 30;
86
+ if (typeof collapseSmallUnconformities == "number") {
87
+ threshold = collapseSmallUnconformities;
88
+ }
89
+ sectionsWithScales = collapseUnconformitiesByPixelHeight(
90
+ sectionsWithScales,
91
+ threshold,
92
+ options
93
+ );
94
+ }
95
+ let { totalHeight, sections: sections2 } = finalizeSectionHeights(
96
+ sectionsWithScales,
97
+ unconformityHeight
98
+ );
99
+ const sectionsOut = sections2.map((section) => {
100
+ return {
101
+ ...section,
102
+ units: preprocessUnits(section, axisType)
103
+ };
104
+ });
105
+ const units2 = sectionsOut.reduce((acc, group) => {
106
+ const { units: units3 } = group;
107
+ for (const unit of units3) {
108
+ acc.push(unit);
109
+ }
110
+ return acc;
111
+ }, []);
112
+ return {
113
+ units: units2,
114
+ totalHeight: _totalHeight ?? totalHeight,
115
+ sections: sectionsOut
116
+ };
117
+ }
118
+ export {
119
+ MergeSectionsMode,
120
+ agesOverlap,
121
+ createUnitSorter,
122
+ ensureArray,
123
+ ensureRealFloat,
124
+ getPositionWithinUnit,
125
+ getUnitHeightRange,
126
+ prepareColumnUnits,
127
+ preprocessUnits,
128
+ unitsOverlap,
129
+ usePreparedColumnUnits
130
+ };
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/prepare-units/index.ts"],"sourcesContent":["import {\n getSectionAgeRange,\n getSectionPosRange,\n groupUnitsIntoSectionsByOverlap,\n groupUnitsIntoSectionsBySectionID,\n mergeOverlappingSections,\n preprocessSectionUnit,\n preprocessUnits,\n} from \"./helpers\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { useMemo } from \"react\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport {\n collapseUnconformitiesByPixelHeight,\n computeSectionHeights,\n finalizeSectionHeights,\n type CompositeColumnScale,\n} from \"./composite-scale\";\nimport {\n agesOverlap,\n MergeSectionsMode,\n PrepareColumnOptions,\n PreparedColumnData,\n unitsOverlap,\n} from \"./utils\";\nimport { SectionInfo } from \"./types\";\n\nexport * from \"./utils\";\nexport * from \"./types\";\nexport { preprocessUnits };\nexport type { CompositeColumnScale };\n\nexport function usePreparedColumnUnits(\n data: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** This function wraps and memoizes all preparation steps for converting\n * an array of units from the /units route to a form ready for usage.\n */\n return useMemo(() => {\n return prepareColumnUnits(data, options);\n }, [data, ...Object.values(options)]);\n}\n\nexport function prepareColumnUnits(\n units: UnitLong[],\n options: PrepareColumnOptions,\n): PreparedColumnData {\n /** Prepare units for rendering into Macrostrat columns */\n\n let { t_age, b_age, t_pos, b_pos } = options;\n\n const {\n mergeSections = MergeSectionsMode.OVERLAPPING,\n axisType,\n unconformityHeight,\n collapseSmallUnconformities = false,\n hybridScale,\n scale,\n } = options;\n\n let _totalHeight = null;\n\n if (scale != null) {\n // Set t_age and b_age based on scale domain if not already set\n const domain = scale.domain();\n if (axisType == ColumnAxisType.AGE) {\n if (t_age == null) t_age = Math.min(...domain);\n if (b_age == null) b_age = Math.max(...domain);\n _totalHeight = Math.abs(scale(b_age) - scale(t_age));\n } else {\n if (t_pos == null) t_pos = Math.min(...domain);\n if (b_pos == null) b_pos = Math.max(...domain);\n _totalHeight = Math.abs(scale(b_pos) - scale(t_pos));\n }\n }\n\n // Start by ensuring that ages and positions are numbers\n // also set up some values for eODP-style columns\n let units1 = units.map(preprocessSectionUnit);\n\n /** Prototype filtering to age range */\n units1 = units1.filter((d) => {\n // Filter units by t_age and b_age, inclusive\n if (axisType == ColumnAxisType.AGE) {\n return agesOverlap(d, { t_age, b_age });\n } else {\n return unitsOverlap(d, { t_pos, b_pos } as any, axisType);\n }\n });\n\n let mergeMode = mergeSections;\n // if (axisType != ColumnAxisType.AGE) {\n // // For non-age columns, we always merge sections.\n // // This is because the \"groupUnitsIntoSections\" function is not well-defined\n // // for non-age columns.\n // mergeMode = MergeSectionsMode.ALL;\n // }\n\n let sections0: SectionInfo<UnitLong>[];\n if (mergeMode == MergeSectionsMode.ALL) {\n // For the \"merge sections\" mode, we need to create a single section\n const [b_unit_pos, t_unit_pos] = getSectionPosRange(units1, axisType);\n const [b_unit_age, t_unit_age] = getSectionAgeRange(units1);\n sections0 = [\n {\n section_id: 0,\n /**\n * If ages limits are directly specified, use them to define the section bounds.\n * */\n t_pos: t_unit_pos,\n b_pos: b_unit_pos,\n t_age: t_unit_age,\n b_age: b_unit_age,\n units: units1,\n },\n ];\n } else if (axisType == ColumnAxisType.AGE) {\n sections0 = groupUnitsIntoSectionsBySectionID(units1, axisType);\n } else {\n sections0 = groupUnitsIntoSectionsByOverlap(units1, axisType);\n }\n\n // Limit sections to the range specified by t_age/b_age or t_pos/b_pos global options\n for (let section of sections0) {\n if (axisType == ColumnAxisType.AGE) {\n section.t_age = Math.max(section.t_age, t_age ?? -Infinity);\n section.b_age = Math.min(section.b_age, b_age ?? Infinity);\n } else if (axisType == ColumnAxisType.DEPTH) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n } else if (axisType == ColumnAxisType.HEIGHT) {\n section.t_pos = Math.max(section.t_pos, t_pos ?? -Infinity);\n section.b_pos = Math.min(section.b_pos, b_pos ?? Infinity);\n }\n }\n\n /** Merging overlapping sections really only makes sense for age/height/depth\n * columns. Ordinal columns are numbered by section so merging them\n * results in collisions.\n */\n let sections = sections0;\n if (\n mergeSections == MergeSectionsMode.OVERLAPPING &&\n axisType == ColumnAxisType.AGE\n ) {\n sections = mergeOverlappingSections(sections);\n }\n // Filter out undefined sections just in case\n sections = sections.filter((d) => d != null);\n\n // SCALES\n\n /* Compute pixel scales etc. for sections\n * We need to do this now to determine which unconformities\n * are small enough to collapse.\n */\n let sectionsWithScales = computeSectionHeights(sections, options);\n\n if (collapseSmallUnconformities && hybridScale == null) {\n // Collapse small unconformities in pixel height space\n // TODO: this doesn't seem to work properly for non-age columns?\n let threshold = unconformityHeight ?? 30;\n if (typeof collapseSmallUnconformities == \"number\") {\n threshold = collapseSmallUnconformities;\n }\n\n sectionsWithScales = collapseUnconformitiesByPixelHeight(\n sectionsWithScales,\n threshold,\n options,\n );\n }\n\n /** Prepare section scale information using groups.\n * Total height is computed from section scales.\n * */\n let { totalHeight, sections: sections2 } = finalizeSectionHeights(\n sectionsWithScales,\n unconformityHeight,\n );\n\n /** For each section, find units that are overlapping.\n * We do this after merging sections so that we can\n * handle cases where there are overlapping units across sections\n * */\n const sectionsOut = sections2.map((section) => {\n return {\n ...section,\n units: preprocessUnits(section, axisType),\n };\n });\n\n /** Reconstitute the units so that they are sorted by section and properly enhanced.\n * This is mostly important so that unit keyboard navigation\n * predictably selects adjacent units.\n */\n const units2 = sectionsOut.reduce((acc, group) => {\n const { units } = group;\n for (const unit of units) {\n acc.push(unit);\n }\n return acc;\n }, []);\n\n return {\n units: units2,\n totalHeight: _totalHeight ?? totalHeight,\n sections: sectionsOut,\n };\n}\n"],"names":["units"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ var HybridScaleType = /* @__PURE__ */ ((HybridScaleType2) => {
4
+ HybridScaleType2["EquidistantSurfaces"] = "equidistant-surfaces";
5
+ HybridScaleType2["ApproximateHeight"] = "approximate-height";
6
+ return HybridScaleType2;
7
+ })(HybridScaleType || {});
8
+ var HeightMethod = /* @__PURE__ */ ((HeightMethod2) => {
9
+ HeightMethod2["Minimum"] = "minimum";
10
+ HeightMethod2["Average"] = "average";
11
+ HeightMethod2["Maximum"] = "maximum";
12
+ return HeightMethod2;
13
+ })(HeightMethod || {});
14
+ exports.HeightMethod = HeightMethod;
15
+ exports.HybridScaleType = HybridScaleType;
16
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","sources":["../../src/prepare-units/types.ts"],"sourcesContent":["import type { UnitLong } from \"@macrostrat/api-types\";\nimport type { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ScaleContinuousNumeric } from \"d3-scale\";\n\nexport interface ColumnHeightScaleOptions {\n /** A fixed pixel scale to use for the section (pixels per Myr) */\n pixelScale?: number;\n /** The target height of a constituent unit in pixels, for dynamic\n * scale generation */\n targetUnitHeight?: number;\n /** Min height of a section in pixels. Will override minPixelScale in some cases. */\n minSectionHeight?: number;\n /** The minimum pixel scale to use for the section (pixels per Myr). This is mostly\n * needed because small sections (<1-2 units) don't necessarily have space to comfortably\n * render two axis labels */\n minPixelScale?: number;\n // Axis scale type\n axisType?: ColumnAxisType;\n // Unconformity height in pixels\n unconformityHeight?: number;\n // Whether to collapse unconformities that are less than a height threshold\n collapseSmallUnconformities?: boolean | number;\n // A continuous scale to use instead of generating one\n // TODO: discontinuous scales are not yet supported\n scale?: ScaleContinuousNumeric<number, number>;\n // Hybrid scale type.\n // This overrides parameters such as the axis type\n hybridScale?: HybridScaleDefinition;\n}\n\nexport enum HybridScaleType {\n // An age-domain scale that puts equal vertical space between surfaces\n EquidistantSurfaces = \"equidistant-surfaces\",\n // A height-domain scale that is based on the average height of units between surfaces\n ApproximateHeight = \"approximate-height\",\n}\n\nexport enum HeightMethod {\n Minimum = \"minimum\",\n Average = \"average\",\n Maximum = \"maximum\",\n}\n\nexport interface HybridScaleOptions {\n pixelOffset?: number;\n pixelScale?: number;\n}\n\nexport type ApproxHeightScaleOptions = {\n minHeight?: number;\n defaultHeight?: number;\n heightMethod?: HeightMethod;\n};\n\nexport type HybridScaleDefinition =\n | ({\n type: HybridScaleType.ApproximateHeight;\n } & ApproxHeightScaleOptions)\n | {\n type: HybridScaleType.EquidistantSurfaces;\n };\n\nexport interface SectionScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n domain: [number, number];\n}\n\n/** Output of a section scale. For now, this assumes that the\n * mapping is linear, but it could be extended to support arbitrary\n * scale functions.\n */\nexport interface PackageScaleInfo {\n domain: [number, number];\n pixelHeight: number;\n // TODO: add a function\n scale: ScaleContinuousNumeric<number, number>;\n pixelScale?: number; // if it's a linear scale, this could be defined\n // Subsidiary scale for height mapping (for hybrid scales)\n heightScale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport type PackageScaleLayoutData = PackageScaleInfo & {\n // A unique key for the section to use in React\n key: string;\n offset: number;\n // How much to\n paddingTop: number;\n};\nexport interface StratigraphicPackage {\n /** A collection of stratigraphic information organized in time, corresponding\n * to single or multiple columns. */\n t_age: number;\n b_age: number;\n}\n\nexport interface SectionInfo<\n T extends UnitLong = ExtUnit,\n> extends StratigraphicPackage {\n /** A time-bounded part of a single stratigraphic column. */\n section_id: number | number[];\n units: T[];\n b_pos?: number;\n t_pos?: number;\n}\n\nexport interface ExtUnit extends UnitLong {\n bottomOverlap: boolean;\n overlappingUnits: number[];\n column?: number;\n /* Positions (ages or heights) where the unit is clipped to its containing section.\n * This is relevant if we are filtering by age/height/depth range.\n */\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {\n scaleInfo: PackageScaleLayoutData;\n // A unique key for the section to use in React\n key: string;\n};\n\nexport interface CompositeScaleData {\n totalHeight: number;\n sections: PackageScaleLayoutData[];\n}\n\nexport interface ColumnScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n unconformityHeight: number;\n}\n\nexport interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<\n CompositeScaleData,\n \"sections\"\n> {\n sections: PackageLayoutData<T>[];\n}\n"],"names":["HybridScaleType","HeightMethod"],"mappings":";;AA8BO,IAAK,oCAAAA,qBAAL;AAELA,mBAAA,qBAAA,IAAsB;AAEtBA,mBAAA,mBAAA,IAAoB;AAJV,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAOL,IAAK,iCAAAC,kBAAL;AACLA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AAHA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;;;"}
@@ -0,0 +1,99 @@
1
+ import { UnitLong } from '@macrostrat/api-types';
2
+ import { ColumnAxisType } from '@macrostrat/column-components';
3
+ import { ScaleContinuousNumeric } from 'd3-scale';
4
+ export interface ColumnHeightScaleOptions {
5
+ /** A fixed pixel scale to use for the section (pixels per Myr) */
6
+ pixelScale?: number;
7
+ /** The target height of a constituent unit in pixels, for dynamic
8
+ * scale generation */
9
+ targetUnitHeight?: number;
10
+ /** Min height of a section in pixels. Will override minPixelScale in some cases. */
11
+ minSectionHeight?: number;
12
+ /** The minimum pixel scale to use for the section (pixels per Myr). This is mostly
13
+ * needed because small sections (<1-2 units) don't necessarily have space to comfortably
14
+ * render two axis labels */
15
+ minPixelScale?: number;
16
+ axisType?: ColumnAxisType;
17
+ unconformityHeight?: number;
18
+ collapseSmallUnconformities?: boolean | number;
19
+ scale?: ScaleContinuousNumeric<number, number>;
20
+ hybridScale?: HybridScaleDefinition;
21
+ }
22
+ export declare enum HybridScaleType {
23
+ EquidistantSurfaces = "equidistant-surfaces",
24
+ ApproximateHeight = "approximate-height"
25
+ }
26
+ export declare enum HeightMethod {
27
+ Minimum = "minimum",
28
+ Average = "average",
29
+ Maximum = "maximum"
30
+ }
31
+ export interface HybridScaleOptions {
32
+ pixelOffset?: number;
33
+ pixelScale?: number;
34
+ }
35
+ export type ApproxHeightScaleOptions = {
36
+ minHeight?: number;
37
+ defaultHeight?: number;
38
+ heightMethod?: HeightMethod;
39
+ };
40
+ export type HybridScaleDefinition = ({
41
+ type: HybridScaleType.ApproximateHeight;
42
+ } & ApproxHeightScaleOptions) | {
43
+ type: HybridScaleType.EquidistantSurfaces;
44
+ };
45
+ export interface SectionScaleOptions extends ColumnHeightScaleOptions {
46
+ axisType: ColumnAxisType;
47
+ domain: [number, number];
48
+ }
49
+ /** Output of a section scale. For now, this assumes that the
50
+ * mapping is linear, but it could be extended to support arbitrary
51
+ * scale functions.
52
+ */
53
+ export interface PackageScaleInfo {
54
+ domain: [number, number];
55
+ pixelHeight: number;
56
+ scale: ScaleContinuousNumeric<number, number>;
57
+ pixelScale?: number;
58
+ heightScale?: ScaleContinuousNumeric<number, number>;
59
+ }
60
+ export type PackageScaleLayoutData = PackageScaleInfo & {
61
+ key: string;
62
+ offset: number;
63
+ paddingTop: number;
64
+ };
65
+ export interface StratigraphicPackage {
66
+ /** A collection of stratigraphic information organized in time, corresponding
67
+ * to single or multiple columns. */
68
+ t_age: number;
69
+ b_age: number;
70
+ }
71
+ export interface SectionInfo<T extends UnitLong = ExtUnit> extends StratigraphicPackage {
72
+ /** A time-bounded part of a single stratigraphic column. */
73
+ section_id: number | number[];
74
+ units: T[];
75
+ b_pos?: number;
76
+ t_pos?: number;
77
+ }
78
+ export interface ExtUnit extends UnitLong {
79
+ bottomOverlap: boolean;
80
+ overlappingUnits: number[];
81
+ column?: number;
82
+ t_clip_pos?: number;
83
+ b_clip_pos?: number;
84
+ }
85
+ export type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {
86
+ scaleInfo: PackageScaleLayoutData;
87
+ key: string;
88
+ };
89
+ export interface CompositeScaleData {
90
+ totalHeight: number;
91
+ sections: PackageScaleLayoutData[];
92
+ }
93
+ export interface ColumnScaleOptions extends ColumnHeightScaleOptions {
94
+ axisType: ColumnAxisType;
95
+ unconformityHeight: number;
96
+ }
97
+ export interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<CompositeScaleData, "sections"> {
98
+ sections: PackageLayoutData<T>[];
99
+ }
@@ -0,0 +1,16 @@
1
+ var HybridScaleType = /* @__PURE__ */ ((HybridScaleType2) => {
2
+ HybridScaleType2["EquidistantSurfaces"] = "equidistant-surfaces";
3
+ HybridScaleType2["ApproximateHeight"] = "approximate-height";
4
+ return HybridScaleType2;
5
+ })(HybridScaleType || {});
6
+ var HeightMethod = /* @__PURE__ */ ((HeightMethod2) => {
7
+ HeightMethod2["Minimum"] = "minimum";
8
+ HeightMethod2["Average"] = "average";
9
+ HeightMethod2["Maximum"] = "maximum";
10
+ return HeightMethod2;
11
+ })(HeightMethod || {});
12
+ export {
13
+ HeightMethod,
14
+ HybridScaleType
15
+ };
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/prepare-units/types.ts"],"sourcesContent":["import type { UnitLong } from \"@macrostrat/api-types\";\nimport type { ColumnAxisType } from \"@macrostrat/column-components\";\nimport type { ScaleContinuousNumeric } from \"d3-scale\";\n\nexport interface ColumnHeightScaleOptions {\n /** A fixed pixel scale to use for the section (pixels per Myr) */\n pixelScale?: number;\n /** The target height of a constituent unit in pixels, for dynamic\n * scale generation */\n targetUnitHeight?: number;\n /** Min height of a section in pixels. Will override minPixelScale in some cases. */\n minSectionHeight?: number;\n /** The minimum pixel scale to use for the section (pixels per Myr). This is mostly\n * needed because small sections (<1-2 units) don't necessarily have space to comfortably\n * render two axis labels */\n minPixelScale?: number;\n // Axis scale type\n axisType?: ColumnAxisType;\n // Unconformity height in pixels\n unconformityHeight?: number;\n // Whether to collapse unconformities that are less than a height threshold\n collapseSmallUnconformities?: boolean | number;\n // A continuous scale to use instead of generating one\n // TODO: discontinuous scales are not yet supported\n scale?: ScaleContinuousNumeric<number, number>;\n // Hybrid scale type.\n // This overrides parameters such as the axis type\n hybridScale?: HybridScaleDefinition;\n}\n\nexport enum HybridScaleType {\n // An age-domain scale that puts equal vertical space between surfaces\n EquidistantSurfaces = \"equidistant-surfaces\",\n // A height-domain scale that is based on the average height of units between surfaces\n ApproximateHeight = \"approximate-height\",\n}\n\nexport enum HeightMethod {\n Minimum = \"minimum\",\n Average = \"average\",\n Maximum = \"maximum\",\n}\n\nexport interface HybridScaleOptions {\n pixelOffset?: number;\n pixelScale?: number;\n}\n\nexport type ApproxHeightScaleOptions = {\n minHeight?: number;\n defaultHeight?: number;\n heightMethod?: HeightMethod;\n};\n\nexport type HybridScaleDefinition =\n | ({\n type: HybridScaleType.ApproximateHeight;\n } & ApproxHeightScaleOptions)\n | {\n type: HybridScaleType.EquidistantSurfaces;\n };\n\nexport interface SectionScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n domain: [number, number];\n}\n\n/** Output of a section scale. For now, this assumes that the\n * mapping is linear, but it could be extended to support arbitrary\n * scale functions.\n */\nexport interface PackageScaleInfo {\n domain: [number, number];\n pixelHeight: number;\n // TODO: add a function\n scale: ScaleContinuousNumeric<number, number>;\n pixelScale?: number; // if it's a linear scale, this could be defined\n // Subsidiary scale for height mapping (for hybrid scales)\n heightScale?: ScaleContinuousNumeric<number, number>;\n}\n\nexport type PackageScaleLayoutData = PackageScaleInfo & {\n // A unique key for the section to use in React\n key: string;\n offset: number;\n // How much to\n paddingTop: number;\n};\nexport interface StratigraphicPackage {\n /** A collection of stratigraphic information organized in time, corresponding\n * to single or multiple columns. */\n t_age: number;\n b_age: number;\n}\n\nexport interface SectionInfo<\n T extends UnitLong = ExtUnit,\n> extends StratigraphicPackage {\n /** A time-bounded part of a single stratigraphic column. */\n section_id: number | number[];\n units: T[];\n b_pos?: number;\n t_pos?: number;\n}\n\nexport interface ExtUnit extends UnitLong {\n bottomOverlap: boolean;\n overlappingUnits: number[];\n column?: number;\n /* Positions (ages or heights) where the unit is clipped to its containing section.\n * This is relevant if we are filtering by age/height/depth range.\n */\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport type PackageLayoutData<T extends UnitLong = ExtUnit> = SectionInfo<T> & {\n scaleInfo: PackageScaleLayoutData;\n // A unique key for the section to use in React\n key: string;\n};\n\nexport interface CompositeScaleData {\n totalHeight: number;\n sections: PackageScaleLayoutData[];\n}\n\nexport interface ColumnScaleOptions extends ColumnHeightScaleOptions {\n axisType: ColumnAxisType;\n unconformityHeight: number;\n}\n\nexport interface CompositeColumnData<T extends UnitLong = ExtUnit> extends Omit<\n CompositeScaleData,\n \"sections\"\n> {\n sections: PackageLayoutData<T>[];\n}\n"],"names":["HybridScaleType","HeightMethod"],"mappings":"AA8BO,IAAK,oCAAAA,qBAAL;AAELA,mBAAA,qBAAA,IAAsB;AAEtBA,mBAAA,mBAAA,IAAoB;AAJV,SAAAA;AAAA,GAAA,mBAAA,CAAA,CAAA;AAOL,IAAK,iCAAAC,kBAAL;AACLA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AACVA,gBAAA,SAAA,IAAU;AAHA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const stratigraphyUtils = require("@macrostrat/stratigraphy-utils");
4
+ const columnComponents = require("@macrostrat/column-components");
5
+ const dt = 1e-3;
6
+ var MergeSectionsMode = /* @__PURE__ */ ((MergeSectionsMode2) => {
7
+ MergeSectionsMode2["ALL"] = "all";
8
+ MergeSectionsMode2["OVERLAPPING"] = "overlapping";
9
+ return MergeSectionsMode2;
10
+ })(MergeSectionsMode || {});
11
+ const unitsOverlap = function(a, b, axisType = columnComponents.ColumnAxisType.AGE, tolerance = 1e-3) {
12
+ const rel = stratigraphyUtils.compareAgeRanges(
13
+ getUnitHeightRange(a, axisType),
14
+ getUnitHeightRange(b, axisType),
15
+ tolerance
16
+ );
17
+ return rel != stratigraphyUtils.AgeRangeRelationship.Disjoint;
18
+ };
19
+ function agesOverlap(a, b, tolerance = dt) {
20
+ return unitsOverlap(a, b, columnComponents.ColumnAxisType.AGE, tolerance);
21
+ }
22
+ function getUnitHeightRange(unit, axisType, clipped = true) {
23
+ if (clipped) {
24
+ switch (axisType) {
25
+ case columnComponents.ColumnAxisType.AGE:
26
+ return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];
27
+ case columnComponents.ColumnAxisType.DEPTH:
28
+ case columnComponents.ColumnAxisType.ORDINAL:
29
+ case columnComponents.ColumnAxisType.HEIGHT:
30
+ return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];
31
+ default:
32
+ throw new Error(`Unknown axis type: ${axisType}`);
33
+ }
34
+ } else {
35
+ switch (axisType) {
36
+ case columnComponents.ColumnAxisType.AGE:
37
+ return [unit.b_age, unit.t_age];
38
+ case columnComponents.ColumnAxisType.DEPTH:
39
+ case columnComponents.ColumnAxisType.ORDINAL:
40
+ case columnComponents.ColumnAxisType.HEIGHT:
41
+ return [unit.b_pos, unit.t_pos];
42
+ default:
43
+ throw new Error(`Unknown axis type: ${axisType}`);
44
+ }
45
+ }
46
+ }
47
+ function getPositionWithinUnit(position, unit, axisType) {
48
+ if (position < 0 || position > 1) {
49
+ throw new Error(`Position must be between 0 and 1: ${position}`);
50
+ }
51
+ const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);
52
+ const abs_pos = pos_bottom + position * (pos_top - pos_bottom);
53
+ const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);
54
+ if (axisType === columnComponents.ColumnAxisType.AGE || axisType === columnComponents.ColumnAxisType.DEPTH) {
55
+ if (abs_pos > clip_bottom || abs_pos < clip_top) {
56
+ return null;
57
+ }
58
+ } else {
59
+ if (abs_pos < clip_bottom || abs_pos > clip_top) {
60
+ return null;
61
+ }
62
+ }
63
+ return abs_pos;
64
+ }
65
+ const createUnitSorter = (axisType) => {
66
+ return (a, b) => {
67
+ const a_pos = getUnitHeightRange(a, axisType);
68
+ const b_pos = getUnitHeightRange(b, axisType);
69
+ const d_top = a_pos[1] - b_pos[1];
70
+ if (d_top != 0) {
71
+ return d_top;
72
+ }
73
+ return a_pos[0] - b_pos[0];
74
+ };
75
+ };
76
+ function ensureArray(x) {
77
+ if (Array.isArray(x)) {
78
+ return x;
79
+ }
80
+ return [x];
81
+ }
82
+ function ensureRealFloat(x) {
83
+ if (typeof x == "string") {
84
+ x = parseFloat(x);
85
+ }
86
+ if (isNaN(x)) {
87
+ return null;
88
+ }
89
+ return x;
90
+ }
91
+ exports.MergeSectionsMode = MergeSectionsMode;
92
+ exports.agesOverlap = agesOverlap;
93
+ exports.createUnitSorter = createUnitSorter;
94
+ exports.ensureArray = ensureArray;
95
+ exports.ensureRealFloat = ensureRealFloat;
96
+ exports.getPositionWithinUnit = getPositionWithinUnit;
97
+ exports.getUnitHeightRange = getUnitHeightRange;
98
+ exports.unitsOverlap = unitsOverlap;
99
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","sources":["../../src/prepare-units/utils.ts"],"sourcesContent":["import type { BaseUnit } from \"@macrostrat/api-types\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n ExtUnit,\n PackageLayoutData,\n StratigraphicPackage,\n} from \"./types\";\n\nconst dt = 0.001;\n\nexport interface PrepareColumnOptions extends ColumnScaleOptions {\n axisType: ColumnAxisType;\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n collapseSmallUnconformities?: boolean | number;\n scale?: ScaleContinuousNumeric<any, any>;\n}\n\nexport enum MergeSectionsMode {\n ALL = \"all\",\n OVERLAPPING = \"overlapping\",\n}\n\nexport interface PreparedColumnData extends CompositeColumnData {\n sections: PackageLayoutData[];\n units: ExtUnit[];\n}\n\ninterface UnitsOverlap {\n (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n axisType?: ColumnAxisType.AGE,\n tolerance?: number,\n ): boolean;\n (\n a: BaseUnit,\n b: BaseUnit,\n axisType: ColumnAxisType,\n tolerance?: number,\n ): boolean;\n}\n\nexport const unitsOverlap: UnitsOverlap = function (\n a,\n b,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n tolerance: number = 0.001,\n): boolean {\n const rel = compareAgeRanges(\n getUnitHeightRange(a, axisType),\n getUnitHeightRange(b, axisType),\n tolerance,\n );\n return rel != AgeRangeRelationship.Disjoint;\n};\n\n/** A more permissive overlap function in the age space */\nexport function agesOverlap(\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n tolerance: number = dt,\n): boolean {\n return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);\n}\n\nexport interface PossiblyClippedUnit extends BaseUnit {\n // Internally created clipped positions\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function getUnitHeightRange(\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n clipped: boolean = true,\n): [number, number] {\n if (clipped) {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n } else {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_age, unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_pos, unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n }\n}\n\nexport function getPositionWithinUnit(\n position: number,\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n): number | null {\n /** Translate a relative position (0-1) within a unit to an absolute position\n * within the unit's height range. If the unit is clipped, null values will be\n * returned for positions outside the clip range\n */\n if (position < 0 || position > 1) {\n throw new Error(`Position must be between 0 and 1: ${position}`);\n }\n\n const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);\n const abs_pos = pos_bottom + position * (pos_top - pos_bottom);\n\n // If clipped, check if abs_pos is within the clipped range\n const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n // Invert for age/depth axes\n if (abs_pos > clip_bottom || abs_pos < clip_top) {\n return null;\n }\n } else {\n if (abs_pos < clip_bottom || abs_pos > clip_top) {\n return null;\n }\n }\n\n return abs_pos;\n}\n\nexport const createUnitSorter = (axisType: ColumnAxisType) => {\n return (a: BaseUnit, b: BaseUnit) => {\n const a_pos = getUnitHeightRange(a, axisType);\n const b_pos = getUnitHeightRange(b, axisType);\n const d_top = a_pos[1] - b_pos[1];\n if (d_top != 0) {\n return d_top;\n }\n return a_pos[0] - b_pos[0];\n };\n};\n\nexport function ensureArray<T>(x: T | T[]): T[] {\n if (Array.isArray(x)) {\n return x;\n }\n return [x];\n}\n\nexport function ensureRealFloat(x: number | string | null): number | null {\n if (typeof x == \"string\") {\n x = parseFloat(x);\n }\n if (isNaN(x)) {\n return null;\n }\n return x;\n}\n"],"names":["MergeSectionsMode","ColumnAxisType","compareAgeRanges","AgeRangeRelationship"],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { BaseUnit } from '@macrostrat/api-types';
2
+ import { ColumnAxisType } from '@macrostrat/column-components';
3
+ import { ScaleContinuousNumeric } from 'd3-scale';
4
+ import { ColumnScaleOptions, CompositeColumnData, ExtUnit, PackageLayoutData, StratigraphicPackage } from './types';
5
+ export interface PrepareColumnOptions extends ColumnScaleOptions {
6
+ axisType: ColumnAxisType;
7
+ t_age?: number;
8
+ b_age?: number;
9
+ t_pos?: number;
10
+ b_pos?: number;
11
+ mergeSections?: MergeSectionsMode;
12
+ collapseSmallUnconformities?: boolean | number;
13
+ scale?: ScaleContinuousNumeric<any, any>;
14
+ }
15
+ export declare enum MergeSectionsMode {
16
+ ALL = "all",
17
+ OVERLAPPING = "overlapping"
18
+ }
19
+ export interface PreparedColumnData extends CompositeColumnData {
20
+ sections: PackageLayoutData[];
21
+ units: ExtUnit[];
22
+ }
23
+ interface UnitsOverlap {
24
+ (a: StratigraphicPackage, b: StratigraphicPackage, axisType?: ColumnAxisType.AGE, tolerance?: number): boolean;
25
+ (a: BaseUnit, b: BaseUnit, axisType: ColumnAxisType, tolerance?: number): boolean;
26
+ }
27
+ export declare const unitsOverlap: UnitsOverlap;
28
+ /** A more permissive overlap function in the age space */
29
+ export declare function agesOverlap(a: StratigraphicPackage, b: StratigraphicPackage, tolerance?: number): boolean;
30
+ export interface PossiblyClippedUnit extends BaseUnit {
31
+ t_clip_pos?: number;
32
+ b_clip_pos?: number;
33
+ }
34
+ export declare function getUnitHeightRange(unit: PossiblyClippedUnit, axisType: ColumnAxisType, clipped?: boolean): [number, number];
35
+ export declare function getPositionWithinUnit(position: number, unit: PossiblyClippedUnit, axisType: ColumnAxisType): number | null;
36
+ export declare const createUnitSorter: (axisType: ColumnAxisType) => (a: BaseUnit, b: BaseUnit) => number;
37
+ export declare function ensureArray<T>(x: T | T[]): T[];
38
+ export declare function ensureRealFloat(x: number | string | null): number | null;
39
+ export {};
@@ -0,0 +1,99 @@
1
+ import { compareAgeRanges, AgeRangeRelationship } from "@macrostrat/stratigraphy-utils";
2
+ import { ColumnAxisType } from "@macrostrat/column-components";
3
+ const dt = 1e-3;
4
+ var MergeSectionsMode = /* @__PURE__ */ ((MergeSectionsMode2) => {
5
+ MergeSectionsMode2["ALL"] = "all";
6
+ MergeSectionsMode2["OVERLAPPING"] = "overlapping";
7
+ return MergeSectionsMode2;
8
+ })(MergeSectionsMode || {});
9
+ const unitsOverlap = function(a, b, axisType = ColumnAxisType.AGE, tolerance = 1e-3) {
10
+ const rel = compareAgeRanges(
11
+ getUnitHeightRange(a, axisType),
12
+ getUnitHeightRange(b, axisType),
13
+ tolerance
14
+ );
15
+ return rel != AgeRangeRelationship.Disjoint;
16
+ };
17
+ function agesOverlap(a, b, tolerance = dt) {
18
+ return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);
19
+ }
20
+ function getUnitHeightRange(unit, axisType, clipped = true) {
21
+ if (clipped) {
22
+ switch (axisType) {
23
+ case ColumnAxisType.AGE:
24
+ return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];
25
+ case ColumnAxisType.DEPTH:
26
+ case ColumnAxisType.ORDINAL:
27
+ case ColumnAxisType.HEIGHT:
28
+ return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];
29
+ default:
30
+ throw new Error(`Unknown axis type: ${axisType}`);
31
+ }
32
+ } else {
33
+ switch (axisType) {
34
+ case ColumnAxisType.AGE:
35
+ return [unit.b_age, unit.t_age];
36
+ case ColumnAxisType.DEPTH:
37
+ case ColumnAxisType.ORDINAL:
38
+ case ColumnAxisType.HEIGHT:
39
+ return [unit.b_pos, unit.t_pos];
40
+ default:
41
+ throw new Error(`Unknown axis type: ${axisType}`);
42
+ }
43
+ }
44
+ }
45
+ function getPositionWithinUnit(position, unit, axisType) {
46
+ if (position < 0 || position > 1) {
47
+ throw new Error(`Position must be between 0 and 1: ${position}`);
48
+ }
49
+ const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);
50
+ const abs_pos = pos_bottom + position * (pos_top - pos_bottom);
51
+ const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);
52
+ if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {
53
+ if (abs_pos > clip_bottom || abs_pos < clip_top) {
54
+ return null;
55
+ }
56
+ } else {
57
+ if (abs_pos < clip_bottom || abs_pos > clip_top) {
58
+ return null;
59
+ }
60
+ }
61
+ return abs_pos;
62
+ }
63
+ const createUnitSorter = (axisType) => {
64
+ return (a, b) => {
65
+ const a_pos = getUnitHeightRange(a, axisType);
66
+ const b_pos = getUnitHeightRange(b, axisType);
67
+ const d_top = a_pos[1] - b_pos[1];
68
+ if (d_top != 0) {
69
+ return d_top;
70
+ }
71
+ return a_pos[0] - b_pos[0];
72
+ };
73
+ };
74
+ function ensureArray(x) {
75
+ if (Array.isArray(x)) {
76
+ return x;
77
+ }
78
+ return [x];
79
+ }
80
+ function ensureRealFloat(x) {
81
+ if (typeof x == "string") {
82
+ x = parseFloat(x);
83
+ }
84
+ if (isNaN(x)) {
85
+ return null;
86
+ }
87
+ return x;
88
+ }
89
+ export {
90
+ MergeSectionsMode,
91
+ agesOverlap,
92
+ createUnitSorter,
93
+ ensureArray,
94
+ ensureRealFloat,
95
+ getPositionWithinUnit,
96
+ getUnitHeightRange,
97
+ unitsOverlap
98
+ };
99
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../src/prepare-units/utils.ts"],"sourcesContent":["import type { BaseUnit } from \"@macrostrat/api-types\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ScaleContinuousNumeric } from \"d3-scale\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n ExtUnit,\n PackageLayoutData,\n StratigraphicPackage,\n} from \"./types\";\n\nconst dt = 0.001;\n\nexport interface PrepareColumnOptions extends ColumnScaleOptions {\n axisType: ColumnAxisType;\n t_age?: number;\n b_age?: number;\n t_pos?: number;\n b_pos?: number;\n mergeSections?: MergeSectionsMode;\n collapseSmallUnconformities?: boolean | number;\n scale?: ScaleContinuousNumeric<any, any>;\n}\n\nexport enum MergeSectionsMode {\n ALL = \"all\",\n OVERLAPPING = \"overlapping\",\n}\n\nexport interface PreparedColumnData extends CompositeColumnData {\n sections: PackageLayoutData[];\n units: ExtUnit[];\n}\n\ninterface UnitsOverlap {\n (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n axisType?: ColumnAxisType.AGE,\n tolerance?: number,\n ): boolean;\n (\n a: BaseUnit,\n b: BaseUnit,\n axisType: ColumnAxisType,\n tolerance?: number,\n ): boolean;\n}\n\nexport const unitsOverlap: UnitsOverlap = function (\n a,\n b,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n tolerance: number = 0.001,\n): boolean {\n const rel = compareAgeRanges(\n getUnitHeightRange(a, axisType),\n getUnitHeightRange(b, axisType),\n tolerance,\n );\n return rel != AgeRangeRelationship.Disjoint;\n};\n\n/** A more permissive overlap function in the age space */\nexport function agesOverlap(\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n tolerance: number = dt,\n): boolean {\n return unitsOverlap(a, b, ColumnAxisType.AGE, tolerance);\n}\n\nexport interface PossiblyClippedUnit extends BaseUnit {\n // Internally created clipped positions\n t_clip_pos?: number;\n b_clip_pos?: number;\n}\n\nexport function getUnitHeightRange(\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n clipped: boolean = true,\n): [number, number] {\n if (clipped) {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_clip_pos ?? unit.b_age, unit.t_clip_pos ?? unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_clip_pos ?? unit.b_pos, unit.t_clip_pos ?? unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n } else {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return [unit.b_age, unit.t_age];\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.ORDINAL:\n case ColumnAxisType.HEIGHT:\n return [unit.b_pos, unit.t_pos];\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n }\n}\n\nexport function getPositionWithinUnit(\n position: number,\n unit: PossiblyClippedUnit,\n axisType: ColumnAxisType,\n): number | null {\n /** Translate a relative position (0-1) within a unit to an absolute position\n * within the unit's height range. If the unit is clipped, null values will be\n * returned for positions outside the clip range\n */\n if (position < 0 || position > 1) {\n throw new Error(`Position must be between 0 and 1: ${position}`);\n }\n\n const [pos_bottom, pos_top] = getUnitHeightRange(unit, axisType, false);\n const abs_pos = pos_bottom + position * (pos_top - pos_bottom);\n\n // If clipped, check if abs_pos is within the clipped range\n const [clip_bottom, clip_top] = getUnitHeightRange(unit, axisType, true);\n if (axisType === ColumnAxisType.AGE || axisType === ColumnAxisType.DEPTH) {\n // Invert for age/depth axes\n if (abs_pos > clip_bottom || abs_pos < clip_top) {\n return null;\n }\n } else {\n if (abs_pos < clip_bottom || abs_pos > clip_top) {\n return null;\n }\n }\n\n return abs_pos;\n}\n\nexport const createUnitSorter = (axisType: ColumnAxisType) => {\n return (a: BaseUnit, b: BaseUnit) => {\n const a_pos = getUnitHeightRange(a, axisType);\n const b_pos = getUnitHeightRange(b, axisType);\n const d_top = a_pos[1] - b_pos[1];\n if (d_top != 0) {\n return d_top;\n }\n return a_pos[0] - b_pos[0];\n };\n};\n\nexport function ensureArray<T>(x: T | T[]): T[] {\n if (Array.isArray(x)) {\n return x;\n }\n return [x];\n}\n\nexport function ensureRealFloat(x: number | string | null): number | null {\n if (typeof x == \"string\") {\n x = parseFloat(x);\n }\n if (isNaN(x)) {\n return null;\n }\n return x;\n}\n"],"names":["MergeSectionsMode"],"mappings":";;AAeA,MAAM,KAAK;AAaJ,IAAK,sCAAAA,uBAAL;AACLA,qBAAA,KAAA,IAAM;AACNA,qBAAA,aAAA,IAAc;AAFJ,SAAAA;AAAA,GAAA,qBAAA,CAAA,CAAA;AAyBL,MAAM,eAA6B,SACxC,GACA,GACA,WAA2B,eAAe,KAC1C,YAAoB,MACX;AACT,QAAM,MAAM;AAAA,IACV,mBAAmB,GAAG,QAAQ;AAAA,IAC9B,mBAAmB,GAAG,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEF,SAAO,OAAO,qBAAqB;AACrC;AAGO,SAAS,YACd,GACA,GACA,YAAoB,IACX;AACT,SAAO,aAAa,GAAG,GAAG,eAAe,KAAK,SAAS;AACzD;AAQO,SAAS,mBACd,MACA,UACA,UAAmB,MACD;AAClB,MAAI,SAAS;AACX,YAAQ,UAAA;AAAA,MACN,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,cAAc,KAAK,OAAO,KAAK,cAAc,KAAK,KAAK;AAAA,MACtE,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,cAAc,KAAK,OAAO,KAAK,cAAc,KAAK,KAAK;AAAA,MACtE;AACE,cAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEtD,OAAO;AACL,YAAQ,UAAA;AAAA,MACN,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,OAAO,KAAK,KAAK;AAAA,MAChC,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAAA,MACpB,KAAK,eAAe;AAClB,eAAO,CAAC,KAAK,OAAO,KAAK,KAAK;AAAA,MAChC;AACE,cAAM,IAAI,MAAM,sBAAsB,QAAQ,EAAE;AAAA,IAAA;AAAA,EAEtD;AACF;AAEO,SAAS,sBACd,UACA,MACA,UACe;AAKf,MAAI,WAAW,KAAK,WAAW,GAAG;AAChC,UAAM,IAAI,MAAM,qCAAqC,QAAQ,EAAE;AAAA,EACjE;AAEA,QAAM,CAAC,YAAY,OAAO,IAAI,mBAAmB,MAAM,UAAU,KAAK;AACtE,QAAM,UAAU,aAAa,YAAY,UAAU;AAGnD,QAAM,CAAC,aAAa,QAAQ,IAAI,mBAAmB,MAAM,UAAU,IAAI;AACvE,MAAI,aAAa,eAAe,OAAO,aAAa,eAAe,OAAO;AAExE,QAAI,UAAU,eAAe,UAAU,UAAU;AAC/C,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL,QAAI,UAAU,eAAe,UAAU,UAAU;AAC/C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,mBAAmB,CAAC,aAA6B;AAC5D,SAAO,CAAC,GAAa,MAAgB;AACnC,UAAM,QAAQ,mBAAmB,GAAG,QAAQ;AAC5C,UAAM,QAAQ,mBAAmB,GAAG,QAAQ;AAC5C,UAAM,QAAQ,MAAM,CAAC,IAAI,MAAM,CAAC;AAChC,QAAI,SAAS,GAAG;AACd,aAAO;AAAA,IACT;AACA,WAAO,MAAM,CAAC,IAAI,MAAM,CAAC;AAAA,EAC3B;AACF;AAEO,SAAS,YAAe,GAAiB;AAC9C,MAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,WAAO;AAAA,EACT;AACA,SAAO,CAAC,CAAC;AACX;AAEO,SAAS,gBAAgB,GAA0C;AACxE,MAAI,OAAO,KAAK,UAAU;AACxB,QAAI,WAAW,CAAC;AAAA,EAClB;AACA,MAAI,MAAM,CAAC,GAAG;AACZ,WAAO;AAAA,EACT;AACA,SAAO;AACT;"}