@macrostrat/column-views 2.4.2 → 2.4.4

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 (196) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/esm/{column-views.af4278f0.js → column-views.0abf7e10.js} +11 -5
  3. package/dist/esm/column-views.0abf7e10.js.map +1 -0
  4. package/dist/esm/{column-views.1b5bf0c6.js → column-views.0b3c0d18.js} +5 -2
  5. package/dist/esm/column-views.0b3c0d18.js.map +1 -0
  6. package/dist/esm/{column-views.88b2418b.js → column-views.0ed9da35.js} +3 -3
  7. package/dist/esm/{column-views.88b2418b.js.map → column-views.0ed9da35.js.map} +1 -1
  8. package/dist/esm/{column-views.82eb5026.js → column-views.0faf79a9.js} +3 -3
  9. package/dist/esm/{column-views.82eb5026.js.map → column-views.0faf79a9.js.map} +1 -1
  10. package/dist/esm/{column-views.8ce33ec6.js → column-views.19539293.js} +2 -2
  11. package/dist/esm/{column-views.8ce33ec6.js.map → column-views.19539293.js.map} +1 -1
  12. package/dist/esm/{column-views.ce5251f7.js → column-views.1af3ec1f.js} +2 -2
  13. package/dist/esm/{column-views.ce5251f7.js.map → column-views.1af3ec1f.js.map} +1 -1
  14. package/dist/esm/{column-views.1ef55568.js → column-views.2a0010a3.js} +3 -3
  15. package/dist/esm/{column-views.1ef55568.js.map → column-views.2a0010a3.js.map} +1 -1
  16. package/dist/esm/{column-views.f35c4621.js → column-views.334c3947.js} +2 -2
  17. package/dist/esm/{column-views.f35c4621.js.map → column-views.334c3947.js.map} +1 -1
  18. package/dist/esm/{column-views.c93b63db.js → column-views.337b40a2.js} +3 -3
  19. package/dist/esm/{column-views.c93b63db.js.map → column-views.337b40a2.js.map} +1 -1
  20. package/dist/esm/{column-views.633c42a3.js → column-views.33d35a44.js} +25 -3
  21. package/dist/esm/column-views.33d35a44.js.map +1 -0
  22. package/dist/esm/{column-views.c1e507e6.js → column-views.362aae9a.js} +2 -2
  23. package/dist/esm/{column-views.c1e507e6.js.map → column-views.362aae9a.js.map} +1 -1
  24. package/dist/esm/{column-views.083fb787.js → column-views.4252a555.js} +5 -5
  25. package/dist/esm/{column-views.083fb787.js.map → column-views.4252a555.js.map} +1 -1
  26. package/dist/esm/{column-views.99cb1c41.js → column-views.45c70ba4.js} +3 -3
  27. package/dist/esm/{column-views.99cb1c41.js.map → column-views.45c70ba4.js.map} +1 -1
  28. package/dist/esm/{column-views.40d3688c.js → column-views.47b7d9ca.js} +2 -2
  29. package/dist/esm/{column-views.40d3688c.js.map → column-views.47b7d9ca.js.map} +1 -1
  30. package/dist/esm/{column-views.b4e1236d.js → column-views.47ca059d.js} +3 -3
  31. package/dist/esm/column-views.47ca059d.js.map +1 -0
  32. package/dist/esm/{column-views.3090f246.js → column-views.636d6553.js} +2 -2
  33. package/dist/esm/{column-views.3090f246.js.map → column-views.636d6553.js.map} +1 -1
  34. package/dist/esm/{column-views.a94e99a2.js → column-views.64f6ddd3.js} +2 -2
  35. package/dist/esm/{column-views.a94e99a2.js.map → column-views.64f6ddd3.js.map} +1 -1
  36. package/dist/esm/{column-views.88436022.js → column-views.6519a353.js} +2 -2
  37. package/dist/esm/{column-views.88436022.js.map → column-views.6519a353.js.map} +1 -1
  38. package/dist/esm/{column-views.18655508.js → column-views.6cff6659.js} +4 -4
  39. package/dist/esm/{column-views.18655508.js.map → column-views.6cff6659.js.map} +1 -1
  40. package/dist/esm/{column-views.fedccce9.js → column-views.70387120.js} +2 -2
  41. package/dist/esm/{column-views.fedccce9.js.map → column-views.70387120.js.map} +1 -1
  42. package/dist/esm/{column-views.3ae8f23d.js → column-views.74837922.js} +2 -2
  43. package/dist/esm/{column-views.3ae8f23d.js.map → column-views.74837922.js.map} +1 -1
  44. package/dist/esm/{column-views.e885211d.js → column-views.7bfb4318.js} +2 -2
  45. package/dist/esm/{column-views.e885211d.js.map → column-views.7bfb4318.js.map} +1 -1
  46. package/dist/esm/{column-views.f56e604d.js → column-views.7dc53f1b.js} +4 -4
  47. package/dist/esm/{column-views.f56e604d.js.map → column-views.7dc53f1b.js.map} +1 -1
  48. package/dist/esm/{column-views.ab2cc6cb.js → column-views.85df21ec.js} +11 -10
  49. package/dist/esm/column-views.85df21ec.js.map +1 -0
  50. package/dist/esm/{column-views.4e9b8594.js → column-views.87c589b7.js} +2 -2
  51. package/dist/esm/{column-views.4e9b8594.js.map → column-views.87c589b7.js.map} +1 -1
  52. package/dist/esm/{column-views.77322764.js → column-views.8da2b857.js} +2 -2
  53. package/dist/esm/{column-views.77322764.js.map → column-views.8da2b857.js.map} +1 -1
  54. package/dist/esm/{column-views.b957dc19.js → column-views.8fb37de7.js} +2 -2
  55. package/dist/esm/{column-views.b957dc19.js.map → column-views.8fb37de7.js.map} +1 -1
  56. package/dist/esm/{column-views.91c18fe3.js → column-views.9512c5d5.js} +10 -10
  57. package/dist/esm/{column-views.91c18fe3.js.map → column-views.9512c5d5.js.map} +1 -1
  58. package/dist/esm/{column-views.85d57d04.js → column-views.9905b91c.js} +4 -4
  59. package/dist/esm/{column-views.85d57d04.js.map → column-views.9905b91c.js.map} +1 -1
  60. package/dist/esm/{column-views.275ba52b.js → column-views.a4f394fe.js} +2 -2
  61. package/dist/esm/{column-views.275ba52b.js.map → column-views.a4f394fe.js.map} +1 -1
  62. package/dist/esm/{column-views.6f0d4f3a.js → column-views.b7cf0da2.js} +2 -2
  63. package/dist/esm/{column-views.6f0d4f3a.js.map → column-views.b7cf0da2.js.map} +1 -1
  64. package/dist/esm/{column-views.d4e50f74.js → column-views.c47dba5f.js} +3 -3
  65. package/dist/esm/{column-views.d4e50f74.js.map → column-views.c47dba5f.js.map} +1 -1
  66. package/dist/esm/{column-views.5ec7294d.js → column-views.c750a6df.js} +3 -3
  67. package/dist/esm/{column-views.5ec7294d.js.map → column-views.c750a6df.js.map} +1 -1
  68. package/dist/esm/{column-views.fc4860bd.js → column-views.cb1cc9f2.js} +4 -4
  69. package/dist/esm/{column-views.fc4860bd.js.map → column-views.cb1cc9f2.js.map} +1 -1
  70. package/dist/esm/{column-views.f904e6d7.js → column-views.ce000969.js} +3 -3
  71. package/dist/esm/{column-views.f904e6d7.js.map → column-views.ce000969.js.map} +1 -1
  72. package/dist/esm/{column-views.ee2fd38f.js → column-views.d7740949.js} +3 -3
  73. package/dist/esm/{column-views.ee2fd38f.js.map → column-views.d7740949.js.map} +1 -1
  74. package/dist/esm/{column-views.088a0274.js → column-views.d7e6bf67.js} +2 -2
  75. package/dist/esm/{column-views.088a0274.js.map → column-views.d7e6bf67.js.map} +1 -1
  76. package/dist/esm/{column-views.e6882667.js → column-views.dac0a3bb.js} +5 -5
  77. package/dist/esm/{column-views.e6882667.js.map → column-views.dac0a3bb.js.map} +1 -1
  78. package/dist/esm/{column-views.11353c2c.js → column-views.e13a0a76.js} +4 -4
  79. package/dist/esm/{column-views.11353c2c.js.map → column-views.e13a0a76.js.map} +1 -1
  80. package/dist/esm/{column-views.5e830e7c.js → column-views.ea08f667.js} +8 -8
  81. package/dist/esm/{column-views.5e830e7c.js.map → column-views.ea08f667.js.map} +1 -1
  82. package/dist/esm/{column-views.dd2d5a6d.js → column-views.ebb5f280.js} +5 -5
  83. package/dist/esm/{column-views.dd2d5a6d.js.map → column-views.ebb5f280.js.map} +1 -1
  84. package/dist/esm/{column-views.bc83a85d.js → column-views.fe42d2fc.js} +2 -2
  85. package/dist/esm/{column-views.bc83a85d.js.map → column-views.fe42d2fc.js.map} +1 -1
  86. package/dist/esm/index.d.ts.map +1 -1
  87. package/dist/esm/index.js +11 -11
  88. package/dist/node/column-views.048fdcaf.js +2 -0
  89. package/dist/node/column-views.048fdcaf.js.map +1 -0
  90. package/dist/node/{column-views.796fc1de.js → column-views.04a72b35.js} +2 -2
  91. package/dist/node/{column-views.796fc1de.js.map → column-views.04a72b35.js.map} +1 -1
  92. package/dist/node/{column-views.66663668.js → column-views.0af5912d.js} +2 -2
  93. package/dist/node/{column-views.66663668.js.map → column-views.0af5912d.js.map} +1 -1
  94. package/dist/node/{column-views.eecdc727.js → column-views.0d254fd3.js} +2 -2
  95. package/dist/node/{column-views.eecdc727.js.map → column-views.0d254fd3.js.map} +1 -1
  96. package/dist/node/{column-views.54f7a243.js → column-views.109cb0c8.js} +2 -2
  97. package/dist/node/{column-views.54f7a243.js.map → column-views.109cb0c8.js.map} +1 -1
  98. package/dist/node/column-views.133855e6.js +2 -0
  99. package/dist/node/column-views.133855e6.js.map +1 -0
  100. package/dist/node/{column-views.f4063bc8.js → column-views.15b5cecc.js} +2 -2
  101. package/dist/node/{column-views.f4063bc8.js.map → column-views.15b5cecc.js.map} +1 -1
  102. package/dist/node/{column-views.6f0cb059.js → column-views.183745c0.js} +2 -2
  103. package/dist/node/{column-views.6f0cb059.js.map → column-views.183745c0.js.map} +1 -1
  104. package/dist/node/{column-views.080781ca.js → column-views.2e2158f5.js} +2 -2
  105. package/dist/node/{column-views.080781ca.js.map → column-views.2e2158f5.js.map} +1 -1
  106. package/dist/node/{column-views.f93b4175.js → column-views.306acd3f.js} +2 -2
  107. package/dist/node/{column-views.f93b4175.js.map → column-views.306acd3f.js.map} +1 -1
  108. package/dist/node/{column-views.0818254f.js → column-views.31153f29.js} +2 -2
  109. package/dist/node/{column-views.0818254f.js.map → column-views.31153f29.js.map} +1 -1
  110. package/dist/node/{column-views.6051e986.js → column-views.31da008b.js} +2 -2
  111. package/dist/node/{column-views.6051e986.js.map → column-views.31da008b.js.map} +1 -1
  112. package/dist/node/column-views.40e758b3.js +2 -0
  113. package/dist/node/column-views.40e758b3.js.map +1 -0
  114. package/dist/node/{column-views.ffbffec7.js → column-views.4a28d695.js} +2 -2
  115. package/dist/node/{column-views.ffbffec7.js.map → column-views.4a28d695.js.map} +1 -1
  116. package/dist/node/{column-views.4d8fc443.js → column-views.5950c8eb.js} +2 -2
  117. package/dist/node/{column-views.4d8fc443.js.map → column-views.5950c8eb.js.map} +1 -1
  118. package/dist/node/{column-views.d30231cb.js → column-views.5987bc26.js} +2 -2
  119. package/dist/node/{column-views.d30231cb.js.map → column-views.5987bc26.js.map} +1 -1
  120. package/dist/node/{column-views.784bac2a.js → column-views.5bb858c9.js} +2 -2
  121. package/dist/node/{column-views.784bac2a.js.map → column-views.5bb858c9.js.map} +1 -1
  122. package/dist/node/{column-views.fe7a5452.js → column-views.5cbada24.js} +2 -2
  123. package/dist/node/{column-views.fe7a5452.js.map → column-views.5cbada24.js.map} +1 -1
  124. package/dist/node/{column-views.8c00beb4.js → column-views.5fcd2be6.js} +2 -2
  125. package/dist/node/{column-views.8c00beb4.js.map → column-views.5fcd2be6.js.map} +1 -1
  126. package/dist/node/{column-views.bdf05ed4.js → column-views.78b2d234.js} +2 -2
  127. package/dist/node/{column-views.bdf05ed4.js.map → column-views.78b2d234.js.map} +1 -1
  128. package/dist/node/{column-views.5908556a.js → column-views.8bee789c.js} +2 -2
  129. package/dist/node/{column-views.5908556a.js.map → column-views.8bee789c.js.map} +1 -1
  130. package/dist/node/{column-views.18e86c2d.js → column-views.90c36c0b.js} +2 -2
  131. package/dist/node/{column-views.18e86c2d.js.map → column-views.90c36c0b.js.map} +1 -1
  132. package/dist/node/{column-views.87d31e0a.js → column-views.a2476e39.js} +2 -2
  133. package/dist/node/{column-views.87d31e0a.js.map → column-views.a2476e39.js.map} +1 -1
  134. package/dist/node/{column-views.39b71a38.js → column-views.a8f5ee28.js} +2 -2
  135. package/dist/node/{column-views.39b71a38.js.map → column-views.a8f5ee28.js.map} +1 -1
  136. package/dist/node/{column-views.5f3f8ccf.js → column-views.ad60c02f.js} +2 -2
  137. package/dist/node/{column-views.5f3f8ccf.js.map → column-views.ad60c02f.js.map} +1 -1
  138. package/dist/node/{column-views.72c3c6e7.js → column-views.add5e42b.js} +2 -2
  139. package/dist/node/{column-views.72c3c6e7.js.map → column-views.add5e42b.js.map} +1 -1
  140. package/dist/node/{column-views.4d573ded.js → column-views.b2e5f823.js} +2 -2
  141. package/dist/node/{column-views.4d573ded.js.map → column-views.b2e5f823.js.map} +1 -1
  142. package/dist/node/{column-views.64fc40d6.js → column-views.b57e5e6e.js} +2 -2
  143. package/dist/node/{column-views.64fc40d6.js.map → column-views.b57e5e6e.js.map} +1 -1
  144. package/dist/node/{column-views.a596b1f5.js → column-views.ba9108fe.js} +2 -2
  145. package/dist/node/column-views.ba9108fe.js.map +1 -0
  146. package/dist/node/{column-views.b6613ab0.js → column-views.c16a19fb.js} +2 -2
  147. package/dist/node/{column-views.b6613ab0.js.map → column-views.c16a19fb.js.map} +1 -1
  148. package/dist/node/{column-views.74fcfb9c.js → column-views.c3097d9a.js} +2 -2
  149. package/dist/node/{column-views.74fcfb9c.js.map → column-views.c3097d9a.js.map} +1 -1
  150. package/dist/node/{column-views.fa5ee6de.js → column-views.c4c15e2b.js} +2 -2
  151. package/dist/node/{column-views.fa5ee6de.js.map → column-views.c4c15e2b.js.map} +1 -1
  152. package/dist/node/{column-views.58b336f1.js → column-views.c651b684.js} +2 -2
  153. package/dist/node/{column-views.58b336f1.js.map → column-views.c651b684.js.map} +1 -1
  154. package/dist/node/{column-views.447008d0.js → column-views.cf41a6d7.js} +2 -2
  155. package/dist/node/{column-views.447008d0.js.map → column-views.cf41a6d7.js.map} +1 -1
  156. package/dist/node/{column-views.5fd6e11a.js → column-views.d22bf15c.js} +2 -2
  157. package/dist/node/{column-views.5fd6e11a.js.map → column-views.d22bf15c.js.map} +1 -1
  158. package/dist/node/{column-views.5c02450b.js → column-views.d737de1e.js} +2 -2
  159. package/dist/node/{column-views.5c02450b.js.map → column-views.d737de1e.js.map} +1 -1
  160. package/dist/node/{column-views.0d48f51d.js → column-views.da902c44.js} +2 -2
  161. package/dist/node/{column-views.0d48f51d.js.map → column-views.da902c44.js.map} +1 -1
  162. package/dist/node/{column-views.003e0c17.js → column-views.e0e20136.js} +2 -2
  163. package/dist/node/{column-views.003e0c17.js.map → column-views.e0e20136.js.map} +1 -1
  164. package/dist/node/{column-views.7e895e1a.js → column-views.ec0087a2.js} +2 -2
  165. package/dist/node/{column-views.7e895e1a.js.map → column-views.ec0087a2.js.map} +1 -1
  166. package/dist/node/{column-views.d86e6c7d.js → column-views.fb3ed7cc.js} +2 -2
  167. package/dist/node/{column-views.d86e6c7d.js.map → column-views.fb3ed7cc.js.map} +1 -1
  168. package/dist/node/{column-views.94c8ce3e.js → column-views.fc4c2c61.js} +2 -2
  169. package/dist/node/{column-views.94c8ce3e.js.map → column-views.fc4c2c61.js.map} +1 -1
  170. package/dist/node/column-views.fcb243a2.js +2 -0
  171. package/dist/node/column-views.fcb243a2.js.map +1 -0
  172. package/dist/node/index.js +1 -1
  173. package/dist/node/index.js.map +1 -1
  174. package/package.json +4 -4
  175. package/src/correlation-chart/stories/correlation-chart.stories.ts +1 -24
  176. package/src/correlation-chart/stories/utils.ts +24 -0
  177. package/src/facets/measurements/sgp.ts +10 -3
  178. package/src/maps/_shared/styles.ts +12 -2
  179. package/src/maps/column-navigation/mapbox/index.ts +1 -0
  180. package/src/prepare-units/composite-scale.ts +9 -1
  181. package/src/prepare-units/helpers.ts +2 -2
  182. package/src/unit-details/panel.ts +15 -7
  183. package/dist/esm/column-views.1b5bf0c6.js.map +0 -1
  184. package/dist/esm/column-views.633c42a3.js.map +0 -1
  185. package/dist/esm/column-views.ab2cc6cb.js.map +0 -1
  186. package/dist/esm/column-views.af4278f0.js.map +0 -1
  187. package/dist/esm/column-views.b4e1236d.js.map +0 -1
  188. package/dist/node/column-views.021a6961.js +0 -2
  189. package/dist/node/column-views.021a6961.js.map +0 -1
  190. package/dist/node/column-views.139b0855.js +0 -2
  191. package/dist/node/column-views.139b0855.js.map +0 -1
  192. package/dist/node/column-views.375529b1.js +0 -2
  193. package/dist/node/column-views.375529b1.js.map +0 -1
  194. package/dist/node/column-views.5e73411d.js +0 -2
  195. package/dist/node/column-views.5e73411d.js.map +0 -1
  196. package/dist/node/column-views.a596b1f5.js.map +0 -1
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["<anon>","packages/column-views/src/prepare-units/helpers.ts"],"sourcesContent":["import \"./column-views.dbb4a46b.js\";\nimport {group as $lOZ4A$group} from \"d3-array\";\nimport {ColumnAxisType as $lOZ4A$ColumnAxisType} from \"@macrostrat/column-components\";\nimport {compareAgeRanges as $lOZ4A$compareAgeRanges, AgeRangeRelationship as $lOZ4A$AgeRangeRelationship} from \"@macrostrat/stratigraphy-utils\";\n\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\n\nvar $iWhRv = parcelRequire(\"iWhRv\");\n\nconst $57278f42f24b59e5$var$dt = 0.001;\nfunction $57278f42f24b59e5$export$55543e159517d62d(section, axisType = (0, $lOZ4A$ColumnAxisType).AGE) {\n /** Preprocess units to add overlapping units and columns. */ let units = section.units;\n let divisions = units.map((...args)=>$57278f42f24b59e5$var$extendDivision(...args, axisType));\n for (let d of divisions){\n const overlappingUnits = divisions.filter((u)=>d.overlappingUnits.includes(u.unit_id));\n // Overlapping columns\n const columns = overlappingUnits.map((d)=>d.column);\n if (columns.includes(d.column)) {\n let col = 0;\n // Go through columns to find a better index\n while(columns.includes(col))col++;\n d.column = col;\n }\n // If unit overlaps the edges of a section, set the clip positions\n const [b_pos, t_pos] = (0, $iWhRv.getUnitHeightRange)(d, axisType);\n if (axisType == (0, $lOZ4A$ColumnAxisType).AGE) {\n if (b_pos > section.b_age) d.b_clip_pos = section.b_age;\n if (t_pos < section.t_age) d.t_clip_pos = section.t_age;\n }\n if (axisType == (0, $lOZ4A$ColumnAxisType).DEPTH) {\n if (b_pos > section.b_pos) d.b_clip_pos = section.b_pos;\n if (t_pos < section.t_pos) d.t_clip_pos = section.t_pos;\n }\n // if (axisType == ColumnAxisType.HEIGHT) {\n // if (b_pos < section.b_pos) {\n // d.b_clip_pos = section.b_pos;\n // }\n // if (t_pos > section.t_pos) {\n // d.t_clip_pos = section.t_pos;\n // }\n // }\n }\n return divisions;\n}\nfunction $57278f42f24b59e5$var$extendDivision(unit, i, divisions, axisType = (0, $lOZ4A$ColumnAxisType).AGE) {\n // TODO: make this configurable\n let tolerance = 0.001; // 1 kyr tolerance for age columns\n if (axisType != (0, $lOZ4A$ColumnAxisType).AGE) tolerance = 0.01; // 1cm tolerance for height/depth columns\n const overlappingUnits = divisions.filter((d)=>d.unit_id != unit.unit_id && (0, $iWhRv.unitsOverlap)(unit, d, axisType, tolerance));\n const u_pos = (0, $iWhRv.getUnitHeightRange)(unit, axisType);\n const bottomOverlap = overlappingUnits.some((d)=>{\n const d_pos = (0, $iWhRv.getUnitHeightRange)(d, axisType);\n // Check if the unit is below the current unit\n return d_pos[0] < u_pos[0] + $57278f42f24b59e5$var$dt;\n });\n let column = 0;\n if (overlappingUnits.length == 1) column = 1;\n return {\n ...unit,\n bottomOverlap: bottomOverlap,\n column: column,\n overlappingUnits: overlappingUnits.map((d)=>d.unit_id)\n };\n}\nfunction $57278f42f24b59e5$export$eeade20e3eee4638(units, axisType = (0, $lOZ4A$ColumnAxisType).AGE) {\n /** Group units into sections by section_id.\n * This works for large-scale Macrostrat columns, where units are grouped by section_id.\n * */ let groups = Array.from((0, $lOZ4A$group)(units, (d)=>d.section_id));\n const unitComparator = (0, $iWhRv.createUnitSorter)(axisType);\n const groups1 = groups.map(([section_id, sectionUnits])=>{\n const [b_age, t_age] = $57278f42f24b59e5$export$8093438ec3e4c6fd(sectionUnits);\n const [b_pos, t_pos] = $57278f42f24b59e5$export$483b05c497fd70c6(sectionUnits, axisType);\n // sort units by position\n sectionUnits.sort(unitComparator);\n return {\n section_id: section_id,\n t_age: t_age,\n b_age: b_age,\n b_pos: b_pos,\n t_pos: t_pos,\n units: sectionUnits\n };\n });\n // Sort sections by increasing top age, then increasing bottom age.\n // Sections have no relative ordinal position other than age...\n const compareSections = (0, $iWhRv.createUnitSorter)(axisType);\n groups1.sort(compareSections);\n return groups1;\n}\nfunction $57278f42f24b59e5$export$bb26cdbde9c8c08b(units, axisType = (0, $lOZ4A$ColumnAxisType).AGE) {\n /** Group units into sections by overlap.\n * This creates \"synthetic\" sections that correspond to packages bound by scale gaps.\n * This is most useful in the height and depth domains, where gaps (e.g., missing core) are\n * common.\n * */ // Start with each unit as its own \"section\", and progressively merge...\n const sectionList = [];\n for (const unit of units){\n // Check if the unit overlaps with any existing section\n const heightRange = (0, $iWhRv.getUnitHeightRange)(unit, axisType);\n let section = sectionList.find((s)=>(0, $lOZ4A$compareAgeRanges)(heightRange, s.heightRange) !== (0, $lOZ4A$AgeRangeRelationship).Disjoint);\n if (section == null) // No overlap, create a new section\n sectionList.push({\n heightRange: heightRange,\n units: [\n unit\n ]\n });\n else {\n // Overlap, merge the unit into the section\n section.units.push(unit);\n // Update the height range\n if (axisType == (0, $lOZ4A$ColumnAxisType).DEPTH || axisType == (0, $lOZ4A$ColumnAxisType).AGE) section.heightRange = [\n Math.max(section.heightRange[0], heightRange[0]),\n Math.min(section.heightRange[1], heightRange[1])\n ];\n else section.heightRange = [\n Math.min(section.heightRange[0], heightRange[0]),\n Math.max(section.heightRange[1], heightRange[1])\n ];\n }\n }\n // We should have a section for each unit, now we can convert to SectionInfo\n // Ages have to be really actually ages, not heights\n return sectionList.map((section, i)=>{\n const [b_age, t_age] = $57278f42f24b59e5$export$8093438ec3e4c6fd(section.units);\n const [b_pos, t_pos] = $57278f42f24b59e5$export$483b05c497fd70c6(section.units, axisType);\n return {\n // Negative section IDs are used to indicate that these are synthetic sections\n section_id: -i,\n t_age: t_age,\n b_age: b_age,\n t_pos: t_pos,\n b_pos: b_pos,\n units: section.units\n };\n });\n}\nfunction $57278f42f24b59e5$export$483b05c497fd70c6(units, axisType) {\n /** Get the overall position range of a set of units. */ const t_positions = units.map((d)=>{\n switch(axisType){\n case (0, $lOZ4A$ColumnAxisType).AGE:\n return d.t_age;\n case (0, $lOZ4A$ColumnAxisType).DEPTH:\n case (0, $lOZ4A$ColumnAxisType).HEIGHT:\n case (0, $lOZ4A$ColumnAxisType).ORDINAL:\n return d.t_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n const b_positions = units.map((d)=>{\n switch(axisType){\n case (0, $lOZ4A$ColumnAxisType).AGE:\n return d.b_age;\n case (0, $lOZ4A$ColumnAxisType).DEPTH:\n case (0, $lOZ4A$ColumnAxisType).HEIGHT:\n case (0, $lOZ4A$ColumnAxisType).ORDINAL:\n return d.b_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n if (axisType == (0, $lOZ4A$ColumnAxisType).AGE || axisType == (0, $lOZ4A$ColumnAxisType).DEPTH) return [\n Math.max(...b_positions),\n Math.min(...t_positions)\n ];\n else return [\n Math.min(...b_positions),\n Math.max(...t_positions)\n ];\n}\nfunction $57278f42f24b59e5$export$8093438ec3e4c6fd(units) {\n /** Get the overall age range of a set of units. */ return $57278f42f24b59e5$export$483b05c497fd70c6(units, (0, $lOZ4A$ColumnAxisType).AGE);\n}\nfunction $57278f42f24b59e5$export$e7bb744b9be37f3d(sections) {\n /** Columns can have sections that overlap in time. Here, we merge overlapping\n * sections into a single section to correctly render gap-bound packages.\n */ const [firstSection, ...rest] = sections;\n const newSections = [\n firstSection\n ];\n for (const section of rest){\n const lastSection = newSections[newSections.length - 1];\n if (lastSection.b_age < section.t_age || lastSection.t_age > section.b_age) {\n // No overlap, add the section as normal\n newSections.push(section);\n continue;\n }\n // Overlap, merge the sections\n lastSection.section_id = [\n ...(0, $iWhRv.ensureArray)(lastSection.section_id),\n ...(0, $iWhRv.ensureArray)(section.section_id)\n ];\n lastSection.units.push(...section.units);\n lastSection.b_age = Math.max(lastSection.b_age, section.b_age);\n lastSection.t_age = Math.min(lastSection.t_age, section.t_age);\n }\n return newSections;\n}\nfunction $57278f42f24b59e5$export$47e05aac3f0b77d4(unit) {\n /** Preprocess a single unit for a \"section\" column type.\n * This mostly handles vagaries of eODP-style columns.\n * */ let b_pos = unit.b_pos;\n let t_pos = unit.t_pos;\n let unit_name = unit.unit_name;\n // eODP columns sometimes have overlapping core sections, which are encoded in the name field\n // Match eODP section names\n const match = unit.unit_name.match(/^(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?): (.+)/);\n if (match) {\n // These values should already be set if we've used the show_positions flag\n t_pos ?? (t_pos = (0, $iWhRv.ensureRealFloat)(match[1]));\n b_pos ?? (b_pos = (0, $iWhRv.ensureRealFloat)(match[3]));\n unit_name = match[5];\n }\n return {\n ...unit,\n b_pos: (0, $iWhRv.ensureRealFloat)(b_pos),\n t_pos: (0, $iWhRv.ensureRealFloat)(t_pos),\n unit_name: unit_name\n };\n}\n\n\nexport {$57278f42f24b59e5$export$55543e159517d62d as preprocessUnits, $57278f42f24b59e5$export$eeade20e3eee4638 as groupUnitsIntoSectionsBySectionID, $57278f42f24b59e5$export$8093438ec3e4c6fd as getSectionAgeRange, $57278f42f24b59e5$export$483b05c497fd70c6 as getSectionPosRange, $57278f42f24b59e5$export$bb26cdbde9c8c08b as groupUnitsIntoSectionsByOverlap, $57278f42f24b59e5$export$e7bb744b9be37f3d as mergeOverlappingSections, $57278f42f24b59e5$export$47e05aac3f0b77d4 as preprocessSectionUnit};\n//# sourceMappingURL=column-views.021a6961.js.map\n","import type { BaseUnit, UnitLong } from \"@macrostrat/api-types\";\nimport { group } from \"d3-array\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n createUnitSorter,\n ensureArray,\n ensureRealFloat,\n getUnitHeightRange,\n unitsOverlap,\n} from \"./utils\";\nimport {\n AgeRangeRelationship,\n compareAgeRanges,\n} from \"@macrostrat/stratigraphy-utils\";\nimport type { ExtUnit, SectionInfo, StratigraphicPackage } from \"./types\";\n\nconst dt = 0.001;\n\nexport function preprocessUnits<T extends UnitLong = UnitLong>(\n section: SectionInfo<T>,\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit[] {\n /** Preprocess units to add overlapping units and columns. */\n let units = section.units;\n\n let divisions = units.map((...args) => extendDivision(...args, axisType));\n for (let d of divisions) {\n const overlappingUnits = divisions.filter((u) =>\n d.overlappingUnits.includes(u.unit_id),\n );\n\n // Overlapping columns\n const columns = overlappingUnits.map((d) => d.column);\n\n if (columns.includes(d.column)) {\n let col = 0;\n // Go through columns to find a better index\n while (columns.includes(col)) {\n col++;\n }\n d.column = col;\n }\n\n // If unit overlaps the edges of a section, set the clip positions\n const [b_pos, t_pos] = getUnitHeightRange(d, axisType);\n if (axisType == ColumnAxisType.AGE) {\n if (b_pos > section.b_age) {\n d.b_clip_pos = section.b_age;\n }\n if (t_pos < section.t_age) {\n d.t_clip_pos = section.t_age;\n }\n }\n if (axisType == ColumnAxisType.DEPTH) {\n if (b_pos > section.b_pos) {\n d.b_clip_pos = section.b_pos;\n }\n if (t_pos < section.t_pos) {\n d.t_clip_pos = section.t_pos;\n }\n }\n // if (axisType == ColumnAxisType.HEIGHT) {\n // if (b_pos < section.b_pos) {\n // d.b_clip_pos = section.b_pos;\n // }\n // if (t_pos > section.t_pos) {\n // d.t_clip_pos = section.t_pos;\n // }\n // }\n }\n\n return divisions;\n}\n\nfunction extendDivision(\n unit: UnitLong,\n i: number,\n divisions: UnitLong[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): ExtUnit {\n // TODO: make this configurable\n let tolerance = 0.001; // 1 kyr tolerance for age columns\n if (axisType != ColumnAxisType.AGE) {\n tolerance = 0.01; // 1cm tolerance for height/depth columns\n }\n\n const overlappingUnits = divisions.filter(\n (d) =>\n d.unit_id != unit.unit_id && unitsOverlap(unit, d, axisType, tolerance),\n );\n const u_pos = getUnitHeightRange(unit, axisType);\n const bottomOverlap = overlappingUnits.some((d) => {\n const d_pos = getUnitHeightRange(d, axisType);\n // Check if the unit is below the current unit\n return d_pos[0] < u_pos[0] + dt;\n });\n let column = 0;\n if (overlappingUnits.length == 1) {\n column = 1;\n }\n\n return {\n ...unit,\n bottomOverlap,\n column,\n overlappingUnits: overlappingUnits.map((d) => d.unit_id),\n };\n}\n\nexport function groupUnitsIntoSectionsBySectionID<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by section_id.\n * This works for large-scale Macrostrat columns, where units are grouped by section_id.\n * */\n let groups = Array.from(group(units, (d) => d.section_id));\n const unitComparator = createUnitSorter(axisType);\n\n const groups1 = groups.map(([section_id, sectionUnits]) => {\n const [b_age, t_age] = getSectionAgeRange(sectionUnits);\n const [b_pos, t_pos] = getSectionPosRange(sectionUnits, axisType);\n\n // sort units by position\n sectionUnits.sort(unitComparator);\n return { section_id, t_age, b_age, b_pos, t_pos, units: sectionUnits };\n });\n // Sort sections by increasing top age, then increasing bottom age.\n // Sections have no relative ordinal position other than age...\n const compareSections = createUnitSorter(axisType) as (\n a: StratigraphicPackage,\n b: StratigraphicPackage,\n ) => number;\n groups1.sort(compareSections);\n return groups1;\n}\n\ninterface WorkingSection {\n units: UnitLong[];\n // Position or age\n heightRange?: [number, number];\n}\n\nexport function groupUnitsIntoSectionsByOverlap<T extends UnitLong>(\n units: T[],\n axisType: ColumnAxisType = ColumnAxisType.AGE,\n): SectionInfo<T>[] {\n /** Group units into sections by overlap.\n * This creates \"synthetic\" sections that correspond to packages bound by scale gaps.\n * This is most useful in the height and depth domains, where gaps (e.g., missing core) are\n * common.\n * */\n // Start with each unit as its own \"section\", and progressively merge...\n const sectionList: WorkingSection[] = [];\n for (const unit of units) {\n // Check if the unit overlaps with any existing section\n const heightRange = getUnitHeightRange(unit, axisType);\n let section: WorkingSection | undefined = sectionList.find(\n (s) =>\n compareAgeRanges(heightRange, s.heightRange) !==\n AgeRangeRelationship.Disjoint,\n );\n if (section == null) {\n // No overlap, create a new section\n sectionList.push({\n heightRange,\n units: [unit],\n });\n } else {\n // Overlap, merge the unit into the section\n section.units.push(unit);\n // Update the height range\n if (axisType == ColumnAxisType.DEPTH || axisType == ColumnAxisType.AGE) {\n section.heightRange = [\n Math.max(section.heightRange[0], heightRange[0]),\n Math.min(section.heightRange[1], heightRange[1]),\n ];\n } else {\n section.heightRange = [\n Math.min(section.heightRange[0], heightRange[0]),\n Math.max(section.heightRange[1], heightRange[1]),\n ];\n }\n }\n }\n // We should have a section for each unit, now we can convert to SectionInfo\n // Ages have to be really actually ages, not heights\n\n return sectionList.map((section, i) => {\n const [b_age, t_age] = getSectionAgeRange(section.units);\n const [b_pos, t_pos] = getSectionPosRange(section.units, axisType);\n return {\n // Negative section IDs are used to indicate that these are synthetic sections\n section_id: -i,\n t_age,\n b_age,\n t_pos,\n b_pos,\n units: section.units as T[],\n };\n });\n}\n\nexport function getSectionPosRange(\n units: BaseUnit[],\n axisType: ColumnAxisType,\n): [number, number] {\n /** Get the overall position range of a set of units. */\n const t_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.t_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.t_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n const b_positions = units.map((d) => {\n switch (axisType) {\n case ColumnAxisType.AGE:\n return d.b_age;\n case ColumnAxisType.DEPTH:\n case ColumnAxisType.HEIGHT:\n case ColumnAxisType.ORDINAL:\n return d.b_pos;\n default:\n throw new Error(`Unknown axis type: ${axisType}`);\n }\n });\n if (axisType == ColumnAxisType.AGE || axisType == ColumnAxisType.DEPTH) {\n return [Math.max(...b_positions), Math.min(...t_positions)];\n } else {\n return [Math.min(...b_positions), Math.max(...t_positions)];\n }\n}\n\nexport function getSectionAgeRange(units: BaseUnit[]): [number, number] {\n /** Get the overall age range of a set of units. */\n return getSectionPosRange(units, ColumnAxisType.AGE);\n}\n\nexport function mergeOverlappingSections<T extends UnitLong>(\n sections: SectionInfo<T>[],\n): SectionInfo<T>[] {\n /** Columns can have sections that overlap in time. Here, we merge overlapping\n * sections into a single section to correctly render gap-bound packages.\n */\n const [firstSection, ...rest] = sections;\n const newSections = [firstSection];\n for (const section of rest) {\n const lastSection = newSections[newSections.length - 1];\n if (\n lastSection.b_age < section.t_age ||\n lastSection.t_age > section.b_age\n ) {\n // No overlap, add the section as normal\n newSections.push(section);\n continue;\n }\n\n // Overlap, merge the sections\n lastSection.section_id = [\n ...ensureArray(lastSection.section_id),\n ...ensureArray(section.section_id),\n ];\n lastSection.units.push(...section.units);\n lastSection.b_age = Math.max(lastSection.b_age, section.b_age);\n lastSection.t_age = Math.min(lastSection.t_age, section.t_age);\n }\n return newSections;\n}\n\nexport function preprocessSectionUnit(unit: UnitLong): UnitLong {\n /** Preprocess a single unit for a \"section\" column type.\n * This mostly handles vagaries of eODP-style columns.\n * */\n\n let b_pos = unit.b_pos;\n let t_pos = unit.t_pos;\n\n let unit_name = unit.unit_name;\n\n // eODP columns sometimes have overlapping core sections, which are encoded in the name field\n // Match eODP section names\n const match = unit.unit_name.match(/^(\\d+(\\.\\d+)?)-(\\d+(\\.\\d+)?): (.+)/);\n\n if (match) {\n // These values should already be set if we've used the show_positions flag\n t_pos ??= ensureRealFloat(match[1]);\n b_pos ??= ensureRealFloat(match[3]);\n unit_name = match[5];\n }\n\n return {\n ...unit,\n b_pos: ensureRealFloat(b_pos),\n t_pos: ensureRealFloat(t_pos),\n unit_name,\n };\n}\n"],"names":["group","$lOZ4A$group","ColumnAxisType","$lOZ4A$ColumnAxisType","compareAgeRanges","$lOZ4A$compareAgeRanges","AgeRangeRelationship","$lOZ4A$AgeRangeRelationship","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$iWhRv","$57278f42f24b59e5$export$55543e159517d62d","section","axisType","AGE","divisions","units","map","args","$57278f42f24b59e5$var$extendDivision","unit","i","tolerance","overlappingUnits","filter","d","unit_id","unitsOverlap","u_pos","getUnitHeightRange","bottomOverlap","some","d_pos","column","length","columns","u","includes","col","b_pos","t_pos","b_age","b_clip_pos","t_age","t_clip_pos","DEPTH","$57278f42f24b59e5$export$eeade20e3eee4638","groups","Array","from","section_id","unitComparator","createUnitSorter","groups1","sectionUnits","$57278f42f24b59e5$export$8093438ec3e4c6fd","$57278f42f24b59e5$export$483b05c497fd70c6","sort","compareSections","$57278f42f24b59e5$export$bb26cdbde9c8c08b","sectionList","heightRange","find","s","Disjoint","push","Math","max","min","t_positions","HEIGHT","ORDINAL","b_positions","$57278f42f24b59e5$export$e7bb744b9be37f3d","sections","firstSection","rest","newSections","lastSection","ensureArray","$57278f42f24b59e5$export$47e05aac3f0b77d4","unit_name","match","ensureRealFloat","preprocessUnits","groupUnitsIntoSectionsBySectionID","getSectionAgeRange","getSectionPosRange","groupUnitsIntoSectionsByOverlap","mergeOverlappingSections","preprocessSectionUnit"],"version":3,"file":"column-views.021a6961.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import{getCSSVariable as e}from"@macrostrat/color-utils";import{buildGeoJSONSource as o}from"@macrostrat/mapbox-utils";function l(l){let t=l??e("--text-subtle-color","black");return{sources:{columns:o()},version:8,layers:[{id:"columns-fill",type:"fill",source:"columns",paint:{"fill-color":t,"fill-opacity":["case",["boolean",["feature-state","selected"],!1],.5,["boolean",["feature-state","hover"],!1],.3,.1]}},{id:"columns-line",type:"line",source:"columns",paint:{"line-color":t,"line-width":2,"line-opacity":.5}},{id:"columns-points",type:"circle",source:"columns",paint:{"circle-radius":4,"circle-color":t,"circle-opacity":["case",["boolean",["feature-state","selected"],!1],1,["boolean",["feature-state","hover"],!1],.7,.5]},filter:["==","$type","Point"]}]}}Object.defineProperty({},"buildColumnsStyle",{get:()=>l,set:void 0,enumerable:!0,configurable:!0});export{l as buildColumnsStyle};
2
- //# sourceMappingURL=column-views.139b0855.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,O,kB,C,K,yB,A,Q,sB,C,K,0B,CCIO,SAAS,EAAkB,CAAa,EAC7C,IAAM,EAAc,GAAS,AAAA,EAAe,sBAAuB,SACnE,MAAO,CACL,QAAS,CACP,QAAS,AAAA,GACX,EACA,QAAS,EACT,OAAQ,CACN,CACE,GAAI,eACJ,KAAM,OACN,OAAQ,UACR,MAAO,CACL,aAAc,EACd,eAAgB,CACd,OACA,CAAC,UAAW,CAAC,gBAAiB,WAAW,CAAE,CAAA,EAAM,CACjD,GACA,CAAC,UAAW,CAAC,gBAAiB,QAAQ,CAAE,CAAA,EAAM,CAC9C,GACA,GACD,AACH,CACF,EACA,CACE,GAAI,eACJ,KAAM,OACN,OAAQ,UACR,MAAO,CACL,aAAc,EACd,aAAc,EACd,eAAgB,EAClB,CACF,EACA,CACE,GAAI,iBACJ,KAAM,SACN,OAAQ,UACR,MAAO,CACL,gBAAiB,EACjB,eAAgB,EAChB,iBAAkB,CAChB,OACA,CAAC,UAAW,CAAC,gBAAiB,WAAW,CAAE,CAAA,EAAM,CACjD,EACA,CAAC,UAAW,CAAC,gBAAiB,QAAQ,CAAE,CAAA,EAAM,CAC9C,GACA,GACD,AACH,EACA,OAAQ,CAAC,KAAM,QAAS,QAAQ,AAClC,EACD,AACH,CACF,C,O,c,C,C,E,oB,C,I,I,E,I,K,E,W,C,E,a,C,C,U,K,iB","sources":["<anon>","packages/column-views/src/maps/_shared/styles.ts"],"sourcesContent":["import {getCSSVariable as $aUK8S$getCSSVariable} from \"@macrostrat/color-utils\";\nimport {buildGeoJSONSource as $aUK8S$buildGeoJSONSource} from \"@macrostrat/mapbox-utils\";\n\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\nvar $25e107971dfb4328$exports = {};\n\n$parcel$export($25e107971dfb4328$exports, \"buildColumnsStyle\", () => $25e107971dfb4328$export$d2995719c3a4ae17);\n\n\nfunction $25e107971dfb4328$export$d2995719c3a4ae17(color) {\n const columnColor = color ?? (0, $aUK8S$getCSSVariable)(\"--text-subtle-color\", \"black\");\n return {\n sources: {\n columns: (0, $aUK8S$buildGeoJSONSource)()\n },\n version: 8,\n layers: [\n {\n id: \"columns-fill\",\n type: \"fill\",\n source: \"columns\",\n paint: {\n \"fill-color\": columnColor,\n \"fill-opacity\": [\n \"case\",\n [\n \"boolean\",\n [\n \"feature-state\",\n \"selected\"\n ],\n false\n ],\n 0.5,\n [\n \"boolean\",\n [\n \"feature-state\",\n \"hover\"\n ],\n false\n ],\n 0.3,\n 0.1\n ]\n }\n },\n {\n id: \"columns-line\",\n type: \"line\",\n source: \"columns\",\n paint: {\n \"line-color\": columnColor,\n \"line-width\": 2,\n \"line-opacity\": 0.5\n }\n },\n {\n id: \"columns-points\",\n type: \"circle\",\n source: \"columns\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": columnColor,\n \"circle-opacity\": [\n \"case\",\n [\n \"boolean\",\n [\n \"feature-state\",\n \"selected\"\n ],\n false\n ],\n 1,\n [\n \"boolean\",\n [\n \"feature-state\",\n \"hover\"\n ],\n false\n ],\n 0.7,\n 0.5\n ]\n },\n filter: [\n \"==\",\n \"$type\",\n \"Point\"\n ]\n }\n ]\n };\n}\n\n\nexport {$25e107971dfb4328$export$d2995719c3a4ae17 as buildColumnsStyle};\n//# sourceMappingURL=column-views.139b0855.js.map\n","import { getCSSVariable } from \"@macrostrat/color-utils\";\nimport { buildGeoJSONSource } from \"@macrostrat/mapbox-utils\";\nimport type { Style } from \"mapbox-gl\";\n\nexport function buildColumnsStyle(color: string): Style {\n const columnColor = color ?? getCSSVariable(\"--text-subtle-color\", \"black\");\n return {\n sources: {\n columns: buildGeoJSONSource(),\n },\n version: 8,\n layers: [\n {\n id: \"columns-fill\",\n type: \"fill\",\n source: \"columns\",\n paint: {\n \"fill-color\": columnColor,\n \"fill-opacity\": [\n \"case\",\n [\"boolean\", [\"feature-state\", \"selected\"], false],\n 0.5,\n [\"boolean\", [\"feature-state\", \"hover\"], false],\n 0.3,\n 0.1,\n ],\n },\n },\n {\n id: \"columns-line\",\n type: \"line\",\n source: \"columns\",\n paint: {\n \"line-color\": columnColor,\n \"line-width\": 2,\n \"line-opacity\": 0.5,\n },\n },\n {\n id: \"columns-points\",\n type: \"circle\",\n source: \"columns\",\n paint: {\n \"circle-radius\": 4,\n \"circle-color\": columnColor,\n \"circle-opacity\": [\n \"case\",\n [\"boolean\", [\"feature-state\", \"selected\"], false],\n 1,\n [\"boolean\", [\"feature-state\", \"hover\"], false],\n 0.7,\n 0.5,\n ],\n },\n filter: [\"==\", \"$type\", \"Point\"],\n },\n ],\n };\n}\n"],"names":["getCSSVariable","$aUK8S$getCSSVariable","buildGeoJSONSource","$aUK8S$buildGeoJSONSource","$25e107971dfb4328$export$d2995719c3a4ae17","color","columnColor","sources","columns","version","layers","id","type","source","paint","filter","Object","defineProperty","get","set","s","enumerable","configurable","buildColumnsStyle"],"version":3,"file":"column-views.139b0855.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.54f7a243.js";import"./column-views.5c02450b.js";import e from"@macrostrat/hyper";import{useAPIResult as t}from"@macrostrat/ui-components";var n=globalThis,r={},a={},o=n.parcelRequirea149;null==o&&((o=function(e){if(e in r)return r[e].exports;if(e in a){var t=a[e];delete a[e];var n={id:e,exports:{}};return r[e]=n,t.call(n.exports,n,n.exports),n.exports}var o=Error("Cannot find module '"+e+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(e,t){a[e]=t},n.parcelRequirea149=o),o.register,Object.defineProperty({},"SGPMeasurementsColumn",{get:()=>s,set:void 0,enumerable:!0,configurable:!0});var l=o("kIQUG"),u=o("wtIgl");function s({columnID:n}){let r=function({col_id:e}){return t("https://dev.macrostrat.org/api/pg/sgp_unit_matches",{col_id:`eq.${e}`},e=>e)}({col_id:n}),{axisType:a,units:o}=(0,u.useMacrostratColumnData)(),s=(0,u.useCompositeScale)();if(null==r||null==o||null==s)return null;let c=function(e,t,n,r){let a=e.map(e=>{let t=e.sgp_samples;if(null==t||0===t.length)return null;let a=(0,l.standardizeMeasurementHeight)({unit_id:e.unit_id},n,r);return null==a?null:(t.sort((e,t)=>e.id-t.id),{...a,data:t,id:e.unit_id})}).filter(Boolean);return(0,l.groupNotesByPixelDistance)(a,t,r,5)}(r,s,o,a);return e(l.BaseMeasurementsColumn,{data:c,noteComponent:i,focusedNoteComponent:i})}function i(t){let{note:n,focused:r}=t,a=n?.data;return null==a||0===a.length?null:e(l.TruncatedList,{className:"sgp-samples",data:a,itemRenderer:t=>e("span",t.data.name),maxItems:r?1/0:5})}export{s as SGPMeasurementsColumn};
2
- //# sourceMappingURL=column-views.375529b1.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,Q,M,mB,A,Q,gB,C,K,2B,C,I,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,O,c,C,C,E,wB,C,I,I,E,I,K,E,W,C,E,a,C,C,G,I,E,E,S,E,E,SCgCO,SAAS,EAAsB,CAAA,SAAE,CAAQ,CAAE,EAChD,IAAM,EAA+B,AAjBvC,SAAoB,CAAA,OAAE,CAAM,CAAE,EAC5B,OAAO,AAAA,EACL,qDACA,CACE,OAAQ,CAAC,GAAG,EAAE,EAAA,CAAQ,AACxB,EACA,AAAC,GAAM,EAEX,EASkD,CAAE,OAAQ,CAAS,GAC7D,CAAA,SAAE,CAAQ,CAAA,MAAE,CAAK,CAAE,CAAG,AAAA,CAAA,EAAA,EAAA,uBAAsB,AAAtB,IACtB,EAAQ,AAAA,CAAA,EAAA,EAAA,iBAAgB,AAAhB,IAEd,GAAI,AAAQ,MAAR,GAAgB,AAAS,MAAT,GAAiB,AAAS,MAAT,EAAe,OAAO,KAE3D,IAAM,EAAQ,AAuBhB,SACE,CAAqB,CACrB,CAA2B,CAC3B,CAAiB,CACjB,CAAwB,EAGxB,IAAM,EAAK,EACR,GAAG,CAAC,AAAC,IACJ,IAAM,EAAO,EAAO,WAAW,CAC/B,GAAI,AAAQ,MAAR,GAAgB,AAAgB,IAAhB,EAAK,MAAM,CAAQ,OAAO,KAC9C,IAAM,EAAa,AAAA,CAAA,EAAA,EAAA,4BAA2B,AAA3B,EACjB,CAAE,QAAS,EAAO,OAAO,AAAC,EAC1B,EACA,UAEF,AAAI,AAAc,MAAd,EAA2B,MAC/B,EAAK,IAAI,CAAC,CAAC,EAAG,IAAM,EAAE,EAAE,CAAG,EAAE,EAAE,EACxB,CACL,GAAG,CAAU,CACb,KAAA,EACA,GAAI,EAAO,OAAO,AACpB,EACF,GACC,MAAM,CAAC,SAEV,MAAO,AAAA,CAAA,EAAA,EAAA,yBAAwB,AAAxB,EAA0B,EAAI,EAAO,EAAU,EACxD,EAlD+B,EAAM,EAAO,EAAO,GAEjD,OAAO,AAAA,EAAE,EAAA,sBAAqB,CAAG,CAC/B,KAAM,EACN,cAAe,EACf,qBAAsB,CACxB,EACF,CAEA,SAAS,EAAe,CAAsC,EAC5D,GAAM,CAAA,KAAE,CAAI,CAAA,QAAE,CAAO,CAAE,CAAG,EACpB,EAAc,GAAM,YAE1B,AAAI,AAAe,MAAf,GAAuB,AAAuB,IAAvB,EAAY,MAAM,CAAe,KAErD,AAAA,EAAE,EAAA,aAAY,CAAG,CACtB,UAAW,cACX,KAAM,EACN,aAAc,AAAC,GAAM,AAAA,EAAE,OAAQ,EAAE,IAAI,CAAC,IAAI,EAC1C,SAAU,EAAU,IAAW,CACjC,EACF,Q,K,qB","sources":["<anon>","packages/column-views/src/facets/measurements/sgp.ts"],"sourcesContent":["import \"./column-views.54f7a243.js\";\nimport \"./column-views.5c02450b.js\";\nimport $lw8jS$macrostrathyper from \"@macrostrat/hyper\";\nimport {useAPIResult as $lw8jS$useAPIResult} from \"@macrostrat/ui-components\";\n\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $48680a4cd2abcbe4$exports = {};\n\n$parcel$export($48680a4cd2abcbe4$exports, \"SGPMeasurementsColumn\", () => $48680a4cd2abcbe4$export$c49cf57576706bab);\n\n\n\nvar $kIQUG = parcelRequire(\"kIQUG\");\n\nvar $wtIgl = parcelRequire(\"wtIgl\");\nfunction $48680a4cd2abcbe4$var$useSGPData({ col_id: col_id }) {\n return (0, $lw8jS$useAPIResult)(\"https://dev.macrostrat.org/api/pg/sgp_unit_matches\", {\n col_id: `eq.${col_id}`\n }, (d)=>d);\n}\nfunction $48680a4cd2abcbe4$export$c49cf57576706bab({ columnID: columnID }) {\n const data = $48680a4cd2abcbe4$var$useSGPData({\n col_id: columnID\n });\n const { axisType: axisType, units: units } = (0, $wtIgl.useMacrostratColumnData)();\n const scale = (0, $wtIgl.useCompositeScale)();\n if (data == null || units == null || scale == null) return null;\n const data1 = $48680a4cd2abcbe4$var$prepareSGPData(data, scale, units, axisType);\n return (0, $lw8jS$macrostrathyper)((0, $kIQUG.BaseMeasurementsColumn), {\n data: data1,\n noteComponent: $48680a4cd2abcbe4$var$SGPSamplesNote,\n focusedNoteComponent: $48680a4cd2abcbe4$var$SGPSamplesNote\n });\n}\nfunction $48680a4cd2abcbe4$var$SGPSamplesNote(props) {\n const { note: note, focused: focused } = props;\n const sgp_samples = note?.data;\n if (sgp_samples == null || sgp_samples.length === 0) return null;\n return (0, $lw8jS$macrostrathyper)((0, $kIQUG.TruncatedList), {\n className: \"sgp-samples\",\n data: sgp_samples,\n itemRenderer: (p)=>(0, $lw8jS$macrostrathyper)(\"span\", p.data.name),\n maxItems: focused ? Infinity : 5\n });\n}\nfunction $48680a4cd2abcbe4$var$prepareSGPData(data, scale, units, axisType) {\n // Find matching units for samples\n const d1 = data.map((sample)=>{\n const data = sample.sgp_samples;\n if (data == null || data.length === 0) return null;\n const heightData = (0, $kIQUG.standardizeMeasurementHeight)({\n unit_id: sample.unit_id\n }, units, axisType);\n if (heightData == null) return null;\n data.sort((a, b)=>a.id - b.id);\n return {\n ...heightData,\n data: data,\n id: sample.unit_id\n };\n }).filter(Boolean);\n return (0, $kIQUG.groupNotesByPixelDistance)(d1, scale, axisType, 5);\n}\n\n\nexport {$48680a4cd2abcbe4$export$c49cf57576706bab as SGPMeasurementsColumn};\n//# sourceMappingURL=column-views.375529b1.js.map\n","import h from \"@macrostrat/hyper\";\nimport { useAPIResult } from \"@macrostrat/ui-components\";\nimport {\n BaseMeasurementsColumn,\n groupNotesByPixelDistance,\n standardizeMeasurementHeight,\n TruncatedList,\n} from \"./base\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { ColumnAxisType } from \"@macrostrat/column-components\";\nimport {\n useCompositeScale,\n useMacrostratColumnData,\n} from \"../../data-provider\";\nimport type { CompositeColumnScale } from \"../../prepare-units\";\n\nfunction useSGPData({ col_id }) {\n return useAPIResult(\n \"https://dev.macrostrat.org/api/pg/sgp_unit_matches\",\n {\n col_id: `eq.${col_id}`,\n },\n (d) => d,\n );\n}\n\ninterface SGPSampleData {\n col_id: number;\n unit_id: number;\n sgp_samples: { name: string; id: number }[];\n}\n\nexport function SGPMeasurementsColumn({ columnID }) {\n const data: SGPSampleData[] | null = useSGPData({ col_id: columnID });\n const { axisType, units } = useMacrostratColumnData();\n const scale = useCompositeScale();\n\n if (data == null || units == null || scale == null) return null;\n\n const data1 = prepareSGPData(data, scale, units, axisType);\n\n return h(BaseMeasurementsColumn, {\n data: data1,\n noteComponent: SGPSamplesNote,\n focusedNoteComponent: SGPSamplesNote,\n });\n}\n\nfunction SGPSamplesNote(props: { note: any; focused: boolean }) {\n const { note, focused } = props;\n const sgp_samples = note?.data;\n\n if (sgp_samples == null || sgp_samples.length === 0) return null;\n\n return h(TruncatedList, {\n className: \"sgp-samples\",\n data: sgp_samples,\n itemRenderer: (p) => h(\"span\", p.data.name),\n maxItems: focused ? Infinity : 5,\n });\n}\n\nfunction prepareSGPData(\n data: SGPSampleData[],\n scale: CompositeColumnScale,\n units: UnitLong[],\n axisType: ColumnAxisType,\n) {\n // Find matching units for samples\n const d1 = data\n .map((sample) => {\n const data = sample.sgp_samples;\n if (data == null || data.length === 0) return null;\n const heightData = standardizeMeasurementHeight(\n { unit_id: sample.unit_id },\n units,\n axisType,\n );\n if (heightData == null) return null;\n data.sort((a, b) => a.id - b.id);\n return {\n ...heightData,\n data,\n id: sample.unit_id,\n };\n })\n .filter(Boolean);\n\n return groupNotesByPixelDistance(d1, scale, axisType, 5);\n}\n"],"names":["$lw8jS$macrostrathyper","useAPIResult","$lw8jS$useAPIResult","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","Object","defineProperty","get","$48680a4cd2abcbe4$export$c49cf57576706bab","set","s","enumerable","configurable","$kIQUG","$wtIgl","columnID","data","$48680a4cd2abcbe4$var$useSGPData","col_id","d","axisType","units","useMacrostratColumnData","scale","useCompositeScale","data1","$48680a4cd2abcbe4$var$prepareSGPData","d1","map","sample","sgp_samples","length","heightData","standardizeMeasurementHeight","unit_id","sort","a","b","filter","Boolean","groupNotesByPixelDistance","BaseMeasurementsColumn","noteComponent","$48680a4cd2abcbe4$var$SGPSamplesNote","focusedNoteComponent","props","note","focused","TruncatedList","className","itemRenderer","p","name","maxItems","Infinity","SGPMeasurementsColumn"],"version":3,"file":"column-views.375529b1.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- import"./column-views.e2562224.js";import"./column-views.5c02450b.js";import"./column-views.080781ca.js";import"./column-views.bdf05ed4.js";import e from"@macrostrat/hyper";import{JSONView as t}from"@macrostrat/ui-components";import{Button as n,ButtonGroup as a}from"@blueprintjs/core";import{useState as i,useMemo as l}from"react";import{LithologyTagFeature as o,DataField as r,Parenthetical as s,Value as u,LithologyList as c,EnvironmentsList as m,ItemList as d,IntervalTag as f}from"@macrostrat/data-components";import p from"classnames";function g(e,t,n,a){Object.defineProperty(e,t,{get:n,set:a,enumerable:!0,configurable:!0})}var _,h=globalThis,b={},v={},k=h.parcelRequirea149;null==k&&((k=function(e){if(e in b)return b[e].exports;if(e in v){var t=v[e];delete v[e];var n={id:e,exports:{}};return b[e]=n,t.call(n.exports,n,n.exports),n.exports}var a=Error("Cannot find module '"+e+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(e,t){v[e]=t},h.parcelRequirea149=k),k.register;var C={};g(C,"UnitDetailsPanel",()=>$),g(C,"LegendPanelHeader",()=>S),g(C,"UnitDetailsFeature",()=>I),g(C,"Duration",()=>T),g(C,"ReferencesField",()=>j),g(C,"Identifier",()=>O),g(C,"AgeLabel",()=>R),g(C,"ClickableText",()=>P);var D=k("lMX1H"),N=k("wtIgl"),x=k("lgTAP"),F=k("jiUaC");let y=e.styled(D&&D.__esModule?D.default:D);function $({unit:e,onClose:a,className:l,features:o=new Set(["adjacent-units","outcrop-type","json-toggle","depth-range"]),lithologyFeatures:r,actions:s,hiddenActions:u=null,onSelectUnit:c,onClickItem:m}){let[d,f]=i(!1),g=null;g=d?y(t,{data:e,showRoot:!1}):y(w,{unit:e,features:o,lithologyFeatures:r,onClickItem:m,onSelectUnit:c});let _=(0,F.defaultNameFunction)(e);return o.has("json-toggle")&&(u=y([y(n,{icon:"code",small:!0,minimal:!0,key:"json-view-toggle",className:p("json-view-toggle",{enabled:f}),onClick(e){f(!d),e.stopPropagation()}}),u])),y("div.unit-details-panel",{className:l},[y(S,{onClose:a,title:_,id:e.unit_id,actions:s,hiddenActions:u}),y("div.unit-details-content-holder",g)])}function S({title:e,id:t,onClose:i,actions:l=null,hiddenActions:o}){return y("header.legend-panel-header",[y("div.title-container",[y.if(null!=e)("h3",e),y.if(null!=o)("span.hidden-actions-container",y("div.hidden-actions",o))]),y("div.spacer"),y.if(null!=t)("code.unit-id",t),y.if(null!=l)(a,{minimal:!0},l),y.if(null!=i)(n,{icon:"cross",minimal:!0,small:!0,onClick(){i()}})])}var I=((_={}).AdjacentUnits="adjacent-units",_.Color="color",_.OutcropType="outcrop-type",_.JSONToggle="json-toggle",_.DepthRange="depth-range",_.ColumnName="column-name",_);function w({unit:e,onSelectUnit:t,lithologyFeatures:n=new Set([o.Proportion,o.Attributes]),features:a=new Set(["adjacent-units","outcrop-type"]),onClickItem:i,getItemHref:l}){var d,f,p,g,_;let h,b,v,k=(0,x.useMacrostratDefs)("lithologies"),C=(0,x.useMacrostratDefs)("environments"),D=(d=e.environ,f=C,d.map(e=>({...f?.get(e.environ_id)??{},...e}))),N=(p=e.lith??[],g=k,p.map(e=>({...g?.get(e.lith_id)??{},...e}))),F=null;if(a.has("outcrop-type")){let t=e.outcrop;"both"==t&&(t="surface and subsurface"),F=y(r,{label:"Outcrop",value:t})}let $=null,[S,I]=(h=(_=e).min_thick??0,b=_.max_thick??_.min_thick??0,v="m",0==h&&0==b?["Unknown",null]:(h<.8&&b<1.2?(h*=100,b*=100,v="cm"):h>800&&b>1200&&(h/=1e3,b/=1e3,v="km"),h==b)?[V(h),v]:[J(h,b),v]);a.has("depth-range")&&null!=e.t_pos&&null!=e.b_pos&&e.min_thick==e.max_thick&&0!=e.min_thick&&($=y(r,{unit:"m",label:e.t_pos<e.b_pos?"Depth":"Height",value:J(e.b_pos,e.t_pos),children:y(s,y(u,{value:S,unit:I}))})),$??($=y(r,{label:"Thickness",value:S,unit:I}));let w=null;return"color"in e&&a.has("color")&&(w=y("div.color-swatch",{style:{backgroundColor:e.color}})),y("div.unit-details-content",[y.if(a.has("column-name"))(U,{col_id:e.col_id}),$,y(c,{label:"Lithology",lithologies:N,features:n,getItemHref:l,onClickItem:i}),y(L,{unit:e},[y(s,y(T,{value:e.b_age-e.t_age})),y(B,{unit:e,onClickItem:i})]),y(m,{environments:D,onClickItem:i,getItemHref:l}),y.if(null!=e.strat_name_id)(H,{strat_name_id:e.strat_name_id}),F,y.if(a.has("adjacent-units"))([y(r,{label:"Above"},y(E,{units:e.units_above,onSelectUnit:t,showNames:!0})),y(r,{label:"Below"},y(E,{units:e.units_below,onSelectUnit:t,showNames:!0}))]),w,y(j,{refs:e.refs,inline:!0})])}function U({col_id:e,showIdentifier:t=!1}){let n=(0,x.useMacrostratColumnInfo)(e),a=y(O,{id:e}),i=n?.col_name;return null!=i&&(a=y("span.value",[y("span.col-name",i),y.if(t)([" ",y(s,a)])])),y(r,{label:"Column"},a)}function j({refs:e,className:t=null,...n}){return null==e||0===e.length?null:y(r,{label:"References",className:p("refs-field",t),...n},y(M,{refs:e}))}function H({strat_name_id:e,onClickItem:t}){let n=l(()=>[e],[e]),a=(0,x.useMacrostratData)("strat_names",n),i=a?.[0],o=y(O,{id:e}),s=i?.strat_name_long;null!=s&&(o=y("span.strat-name",s));let u=null!=t,c=p({clickable:u});return y(r,{label:"Stratigraphic name"},y(u?"a":"span",{className:c,onClick:n=>t(n,{strat_name_id:e})},o))}function M({refs:e}){let t=(0,x.useMacrostratData)("refs",e);return null==t||0===t.length?null:1==t.length?y(A,{data:t[0],tag:"span",key:t[0].ref_id}):y("ul.refs",t.map((e,t)=>y(A,{data:e,tag:"li",key:e.ref_id})))}function A({data:e,tag:t="p"}){return y(t,{className:"citation"},[y("span.authors",e.author),", ",y("span.year",e.pub_year),", ",y("span.title",e.ref)])}function L({unit:e,children:t}){var n;let a,i,l,[o,s,u]=(a=(n=e).b_age,i=n.t_age,l="Ma",a<.8&&i<1.2?(a*=1e3,i*=1e3,l="ka"):a>800&&i>1200&&(a/=1e3,i/=1e3,l="Ga"),[a,i,l]);return y(r,{label:"Age",value:J(o,s),unit:u},t)}function R({age:e,maximumFractionDigits:t=2,minimumFractionDigits:n=0,className:a}){var i;let l,[o,r]=(l="Ma",(i=e)<.8?(l="ka",(i*=1e3)<5&&(l="yr",i*=1e3)):i>1e3&&(l="Ga",i/=1e3),[i,l]);return y(u,{value:o.toLocaleString("en-US",{maximumFractionDigits:t,minimumFractionDigits:n}),unit:r,className:a})}function T({value:e,maximumFractionDigits:t=2,minimumFractionDigits:n=0}){let a="Myr";return e<.8?(a="kyr",(e*=1e3)<5&&(a="yr",e*=1e3)):e>1e3&&(a="Gyr",e/=1e3),y(u,{value:e.toLocaleString("en-US",{maximumFractionDigits:t,minimumFractionDigits:n}),unit:a})}function P({onClick:e,className:t,children:n}){return y(null!=e?"a":"span",{onClick:e,className:t},n)}function O({id:e,onClick:t,className:n}){return y(P,{onClick:null!=t?()=>t(e):null,className:p("identifier",n)},e)}function E({units:e,onSelectUnit:t,showNames:n=!1}){let a=(0,N.useColumnUnitsMap)(),i=l(()=>{let t=e.filter(e=>0!=e);return n?t.map(e=>{let t,n=a?.get(e);return null!=n&&(t=(0,F.defaultNameFunction)(n)),{unitID:e,colID:n?.col_id,name:t}}):t.map(e=>({unitID:e}))},[e,a]);return 0===i.length?y("span.no-units","None"):y(d,{className:"units-list"},i.map(e=>y("span.item",y(G,{...e,onSelectUnit:t}))))}function G({unitID:e,colID:t,name:n,onSelectUnit:a}){let i=l(()=>null==a?null:()=>{a(e)},[a]);return null!=n?y(P,{className:"unit-name",onClick:i},n):y(O,{className:"unit-id",onClick:i,key:e,id:e})}function B({unit:e,onClickItem:t}){let n=e.b_int_id,a=e.t_int_id,i=e.b_prop??0,l=e.t_prop??1,o=(0,x.useMacrostratDefs)("intervals"),r={...o?.get(n)??{},id:n,name:e.b_int_name},s=null,u=o?.get(a)??{},c=y(q,{value:l});(n!==a||0!==i||1!==l)&&(s=y(q,{value:i})),n===a&&(0!==i||1!==l)&&(s=y("span.joint-proportion",[s,y("span.sep","to"),c]));let m=null!=t,d=e=>{t&&t(e,r)};return y("div.interval-proportions",[y(f,{className:m?"clickable":"",onClick:m?d:void 0,interval:r,prefix:s}),y.if(n!=a)("span.discourage-break",[y("span.sep","to"),y(f,{className:m?"clickable":"",onClick:m?d:void 0,interval:{...u,id:a,name:e.t_int_name},prefix:c})])])}function q({value:e}){let t=null;if(0==e)t="base";else if(1==e)t="top";else t=(100*e).toFixed(1)+"%";return y("span.proportion",t)}function J(e,t,n=null){return null==e||null==t?null:e===t?e.toFixed(n):`${V(e,n)}\u{2013}${V(t,n)}`}function V(e,t=null){return null==t?e.toLocaleString():t>=0?e.toFixed(t):t<0?(e/Math.pow(10,-t)).toFixed(0)+"0".repeat(-t):void 0}export{$ as UnitDetailsPanel,S as LegendPanelHeader,I as UnitDetailsFeature,T as Duration,j as ReferencesField,O as Identifier,R as AgeLabel,P as ClickableText};
2
- //# sourceMappingURL=column-views.5e73411d.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,M,6C,A,O,6C,A,O,6C,A,O,6C,A,Q,M,mB,A,Q,Y,C,K,2B,A,Q,U,C,C,e,C,K,mB,A,Q,Y,C,C,W,C,K,O,A,Q,uB,C,C,a,C,C,iB,C,C,S,C,C,iB,C,C,oB,C,C,Y,C,C,e,C,K,6B,A,Q,M,Y,C,S,E,C,C,C,C,C,C,C,E,O,c,C,E,E,C,I,E,I,E,W,C,E,a,C,C,E,C,IC+IY,E,E,W,E,C,E,E,C,E,E,E,iB,A,O,I,A,C,E,S,C,E,G,K,E,O,C,C,E,C,O,C,G,K,E,C,I,E,C,C,E,A,Q,C,C,E,C,I,E,C,G,E,Q,C,C,E,O,C,C,E,C,E,E,I,C,E,O,C,E,E,O,E,E,O,A,C,I,E,A,M,uB,E,I,O,E,I,C,mB,C,C,E,Q,C,S,C,C,C,E,C,C,E,C,C,E,E,iB,C,G,E,Q,C,I,E,C,E,E,E,mB,I,G,E,E,oB,I,G,E,E,qB,I,G,E,E,W,I,G,E,E,kB,I,G,E,E,a,I,G,E,E,W,I,G,E,E,gB,I,G,I,E,E,S,E,E,S,E,E,S,E,E,SA/GZ,IAAM,EAAI,AAAA,EAAM,MAAM,C,AAAC,G,AAAA,E,U,C,AAAA,E,O,CAAA,GAchB,SAAS,EAAiB,CAAA,KAC/B,CAAI,CAAA,QACJ,CAAO,CAAA,UACP,CAAS,CAAA,SACT,EAAW,IAAI,IAAwB,C,iB,e,c,cAKtC,CAAA,CAAA,kBACD,CAAiB,CAAA,QACjB,CAAO,CAAA,cACP,EAAgB,IAAA,CAAA,aAChB,CAAY,CAAA,YACZ,CAAW,CACW,EACtB,GAAM,CAAC,EAAU,EAAY,CAAG,AAAA,EAAS,CAAA,GAErC,EAAU,KAEZ,EADE,EACQ,EAAE,EAAU,CAAE,KAAM,EAAM,SAAU,CAAA,CAAM,GAE1C,EAAE,EAAoB,CAC9B,KAAA,EACA,SAAA,EACA,kBAAA,EACA,YAAA,EACA,aAAA,CACF,GAGF,IAAI,EAAQ,AAAA,CAAA,EAAA,EAAA,mBAAkB,AAAlB,EAAoB,GAmBhC,OAjBI,EAAS,GAAG,CAAA,gBACd,CAAA,EAAgB,EAAE,CAChB,EAAE,EAAQ,CACR,KAAM,OACN,MAAO,CAAA,EACP,QAAS,CAAA,EACT,IAAK,mBACL,UAAW,AAAA,EAAW,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","sources":["<anon>","packages/column-views/src/unit-details/panel.ts"],"sourcesContent":["import \"./column-views.e2562224.js\";\nimport \"./column-views.5c02450b.js\";\nimport \"./column-views.080781ca.js\";\nimport \"./column-views.bdf05ed4.js\";\nimport $c0aFQ$macrostrathyper from \"@macrostrat/hyper\";\nimport {JSONView as $c0aFQ$JSONView} from \"@macrostrat/ui-components\";\nimport {Button as $c0aFQ$Button, ButtonGroup as $c0aFQ$ButtonGroup} from \"@blueprintjs/core\";\nimport {useState as $c0aFQ$useState, useMemo as $c0aFQ$useMemo} from \"react\";\nimport {LithologyTagFeature as $c0aFQ$LithologyTagFeature, DataField as $c0aFQ$DataField, Parenthetical as $c0aFQ$Parenthetical, Value as $c0aFQ$Value, LithologyList as $c0aFQ$LithologyList, EnvironmentsList as $c0aFQ$EnvironmentsList, ItemList as $c0aFQ$ItemList, IntervalTag as $c0aFQ$IntervalTag} from \"@macrostrat/data-components\";\nimport $c0aFQ$classnames from \"classnames\";\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$export(e, n, v, s) {\n Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $4a89f93cd5289383$exports = {};\n\n$parcel$export($4a89f93cd5289383$exports, \"UnitDetailsPanel\", () => $4a89f93cd5289383$export$fbd245232df17557);\n$parcel$export($4a89f93cd5289383$exports, \"LegendPanelHeader\", () => $4a89f93cd5289383$export$fc503c39cc5cff43);\n$parcel$export($4a89f93cd5289383$exports, \"UnitDetailsFeature\", () => $4a89f93cd5289383$export$ec297f6f9a6ccad0);\n$parcel$export($4a89f93cd5289383$exports, \"Duration\", () => $4a89f93cd5289383$export$3b11bc38611c5941);\n$parcel$export($4a89f93cd5289383$exports, \"ReferencesField\", () => $4a89f93cd5289383$export$895d4931dd696e25);\n$parcel$export($4a89f93cd5289383$exports, \"Identifier\", () => $4a89f93cd5289383$export$989167234458594d);\n$parcel$export($4a89f93cd5289383$exports, \"AgeLabel\", () => $4a89f93cd5289383$export$37ebfd237811b1eb);\n$parcel$export($4a89f93cd5289383$exports, \"ClickableText\", () => $4a89f93cd5289383$export$b6867fc5221f9f65);\n\n\nvar $lMX1H = parcelRequire(\"lMX1H\");\n\n\n\n\n\nvar $wtIgl = parcelRequire(\"wtIgl\");\nvar $lgTAP = parcelRequire(\"lgTAP\");\n\nvar $jiUaC = parcelRequire(\"jiUaC\");\n\nconst $4a89f93cd5289383$var$h = (0, $c0aFQ$macrostrathyper).styled((0, (/*@__PURE__*/$parcel$interopDefault($lMX1H))));\nfunction $4a89f93cd5289383$export$fbd245232df17557({ unit: unit, onClose: onClose, className: className, features: features = new Set([\n \"adjacent-units\",\n \"outcrop-type\",\n \"json-toggle\",\n \"depth-range\"\n]), lithologyFeatures: lithologyFeatures, actions: actions, hiddenActions: hiddenActions = null, onSelectUnit: onSelectUnit, onClickItem: onClickItem }) {\n const [showJSON, setShowJSON] = (0, $c0aFQ$useState)(false);\n let content = null;\n if (showJSON) content = $4a89f93cd5289383$var$h((0, $c0aFQ$JSONView), {\n data: unit,\n showRoot: false\n });\n else content = $4a89f93cd5289383$var$h($4a89f93cd5289383$var$UnitDetailsContent, {\n unit: unit,\n features: features,\n lithologyFeatures: lithologyFeatures,\n onClickItem: onClickItem,\n onSelectUnit: onSelectUnit\n });\n let title = (0, $jiUaC.defaultNameFunction)(unit);\n if (features.has(\"json-toggle\")) hiddenActions = $4a89f93cd5289383$var$h([\n $4a89f93cd5289383$var$h((0, $c0aFQ$Button), {\n icon: \"code\",\n small: true,\n minimal: true,\n key: \"json-view-toggle\",\n className: (0, $c0aFQ$classnames)(\"json-view-toggle\", {\n enabled: setShowJSON\n }),\n onClick (evt) {\n setShowJSON(!showJSON);\n evt.stopPropagation();\n }\n }),\n hiddenActions\n ]);\n return $4a89f93cd5289383$var$h(\"div.unit-details-panel\", {\n className: className\n }, [\n $4a89f93cd5289383$var$h($4a89f93cd5289383$export$fc503c39cc5cff43, {\n onClose: onClose,\n title: title,\n id: unit.unit_id,\n actions: actions,\n hiddenActions: hiddenActions\n }),\n $4a89f93cd5289383$var$h(\"div.unit-details-content-holder\", content)\n ]);\n}\nfunction $4a89f93cd5289383$export$fc503c39cc5cff43({ title: title, id: id, onClose: onClose, actions: actions = null, hiddenActions: hiddenActions }) {\n return $4a89f93cd5289383$var$h(\"header.legend-panel-header\", [\n $4a89f93cd5289383$var$h(\"div.title-container\", [\n $4a89f93cd5289383$var$h.if(title != null)(\"h3\", title),\n $4a89f93cd5289383$var$h.if(hiddenActions != null)(\"span.hidden-actions-container\", $4a89f93cd5289383$var$h(\"div.hidden-actions\", hiddenActions))\n ]),\n $4a89f93cd5289383$var$h(\"div.spacer\"),\n $4a89f93cd5289383$var$h.if(id != null)(\"code.unit-id\", id),\n $4a89f93cd5289383$var$h.if(actions != null)((0, $c0aFQ$ButtonGroup), {\n minimal: true\n }, actions),\n $4a89f93cd5289383$var$h.if(onClose != null)((0, $c0aFQ$Button), {\n icon: \"cross\",\n minimal: true,\n small: true,\n onClick () {\n onClose();\n }\n })\n ]);\n}\nvar $4a89f93cd5289383$export$ec297f6f9a6ccad0 = /*#__PURE__*/ function(UnitDetailsFeature) {\n UnitDetailsFeature[\"AdjacentUnits\"] = \"adjacent-units\";\n UnitDetailsFeature[\"Color\"] = \"color\";\n UnitDetailsFeature[\"OutcropType\"] = \"outcrop-type\";\n UnitDetailsFeature[\"JSONToggle\"] = \"json-toggle\";\n UnitDetailsFeature[\"DepthRange\"] = \"depth-range\";\n UnitDetailsFeature[\"ColumnName\"] = \"column-name\";\n return UnitDetailsFeature;\n}({});\nfunction $4a89f93cd5289383$var$UnitDetailsContent({ unit: unit, onSelectUnit: onSelectUnit, lithologyFeatures: lithologyFeatures = new Set([\n (0, $c0aFQ$LithologyTagFeature).Proportion,\n (0, $c0aFQ$LithologyTagFeature).Attributes\n]), features: features = new Set([\n \"adjacent-units\",\n \"outcrop-type\"\n]), onClickItem: onClickItem, getItemHref: getItemHref }) {\n const lithMap = (0, $lgTAP.useMacrostratDefs)(\"lithologies\");\n const envMap = (0, $lgTAP.useMacrostratDefs)(\"environments\");\n const environments = $4a89f93cd5289383$var$enhanceEnvironments(unit.environ, envMap);\n const lithologies = $4a89f93cd5289383$var$enhanceLithologies(unit.lith ?? [], lithMap);\n let outcropField = null;\n if (features.has(\"outcrop-type\")) {\n // Determine outcrop type\n let outcrop = unit.outcrop;\n if (outcrop == \"both\") outcrop = \"surface and subsurface\";\n outcropField = $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Outcrop\",\n value: outcrop\n });\n }\n let thicknessOrHeightRange = null;\n const [thickness, thicknessUnit] = $4a89f93cd5289383$var$getThickness(unit);\n // Proxy for actual heights in t_pos and b_pos\n if (features.has(\"depth-range\") && unit.t_pos != null && unit.b_pos != null && unit.min_thick == unit.max_thick && // We have an actual fixed height\n unit.min_thick != 0 // Not a zero thickness\n ) {\n const label = unit.t_pos < unit.b_pos ? \"Depth\" : \"Height\";\n const u1 = \"m\";\n thicknessOrHeightRange = $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n unit: u1,\n label: label,\n value: $4a89f93cd5289383$var$formatRange(unit.b_pos, unit.t_pos),\n children: $4a89f93cd5289383$var$h((0, $c0aFQ$Parenthetical), $4a89f93cd5289383$var$h((0, $c0aFQ$Value), {\n value: thickness,\n unit: thicknessUnit\n }))\n });\n }\n thicknessOrHeightRange ?? (thicknessOrHeightRange = $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Thickness\",\n value: thickness,\n unit: thicknessUnit\n }));\n /** We are trying to move away from passing the \"color\" parameter in the API */ let colorSwatch = null;\n if (\"color\" in unit && features.has(\"color\")) {\n const unit1 = unit;\n colorSwatch = $4a89f93cd5289383$var$h(\"div.color-swatch\", {\n style: {\n backgroundColor: unit1.color\n }\n });\n }\n return $4a89f93cd5289383$var$h(\"div.unit-details-content\", [\n $4a89f93cd5289383$var$h.if(features.has(\"column-name\"))($4a89f93cd5289383$var$ColumnNameField, {\n col_id: unit.col_id\n }),\n thicknessOrHeightRange,\n $4a89f93cd5289383$var$h((0, $c0aFQ$LithologyList), {\n label: \"Lithology\",\n lithologies: lithologies,\n features: lithologyFeatures,\n getItemHref: getItemHref,\n onClickItem: onClickItem\n }),\n $4a89f93cd5289383$var$h($4a89f93cd5289383$var$AgeField, {\n unit: unit\n }, [\n $4a89f93cd5289383$var$h((0, $c0aFQ$Parenthetical), $4a89f93cd5289383$var$h($4a89f93cd5289383$export$3b11bc38611c5941, {\n value: unit.b_age - unit.t_age\n })),\n $4a89f93cd5289383$var$h($4a89f93cd5289383$var$IntervalProportions, {\n unit: unit,\n onClickItem: onClickItem\n })\n ]),\n $4a89f93cd5289383$var$h((0, $c0aFQ$EnvironmentsList), {\n environments: environments,\n onClickItem: onClickItem,\n getItemHref: getItemHref\n }),\n $4a89f93cd5289383$var$h.if(unit.strat_name_id != null)($4a89f93cd5289383$var$StratNameField, {\n strat_name_id: unit.strat_name_id\n }),\n outcropField,\n $4a89f93cd5289383$var$h.if(features.has(\"adjacent-units\"))([\n $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Above\"\n }, $4a89f93cd5289383$var$h($4a89f93cd5289383$var$UnitIDList, {\n units: unit.units_above,\n onSelectUnit: onSelectUnit,\n showNames: true\n })),\n $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Below\"\n }, $4a89f93cd5289383$var$h($4a89f93cd5289383$var$UnitIDList, {\n units: unit.units_below,\n onSelectUnit: onSelectUnit,\n showNames: true\n }))\n ]),\n colorSwatch,\n $4a89f93cd5289383$var$h($4a89f93cd5289383$export$895d4931dd696e25, {\n refs: unit.refs,\n inline: true\n })\n ]);\n}\nfunction $4a89f93cd5289383$var$ColumnNameField({ col_id: col_id, showIdentifier: showIdentifier = false }) {\n const colData = (0, $lgTAP.useMacrostratColumnInfo)(col_id);\n let inner = $4a89f93cd5289383$var$h($4a89f93cd5289383$export$989167234458594d, {\n id: col_id\n });\n const name = colData?.col_name;\n if (name != null) inner = $4a89f93cd5289383$var$h(\"span.value\", [\n $4a89f93cd5289383$var$h(\"span.col-name\", name),\n $4a89f93cd5289383$var$h.if(showIdentifier)([\n \" \",\n $4a89f93cd5289383$var$h((0, $c0aFQ$Parenthetical), inner)\n ])\n ]);\n return $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Column\"\n }, inner);\n}\nfunction $4a89f93cd5289383$export$895d4931dd696e25({ refs: refs, className: className = null, ...rest }) {\n if (refs == null || refs.length === 0) return null;\n return $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"References\",\n className: (0, $c0aFQ$classnames)(\"refs-field\", className),\n ...rest\n }, $4a89f93cd5289383$var$h($4a89f93cd5289383$var$BibInfo, {\n refs: refs\n }));\n}\nfunction $4a89f93cd5289383$var$StratNameField({ strat_name_id: strat_name_id, onClickItem: onClickItem }) {\n const stratNames = (0, $c0aFQ$useMemo)(()=>[\n strat_name_id\n ], [\n strat_name_id\n ]);\n const data = (0, $lgTAP.useMacrostratData)(\"strat_names\", stratNames);\n const stratNameData = data?.[0];\n let inner = $4a89f93cd5289383$var$h($4a89f93cd5289383$export$989167234458594d, {\n id: strat_name_id\n });\n const name = stratNameData?.strat_name_long;\n if (name != null) inner = $4a89f93cd5289383$var$h(\"span.strat-name\", name);\n const clickable = onClickItem != null;\n const className = (0, $c0aFQ$classnames)({\n clickable: clickable\n });\n return $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Stratigraphic name\"\n }, $4a89f93cd5289383$var$h(clickable ? \"a\" : \"span\", {\n className: className,\n onClick: (e)=>onClickItem(e, {\n strat_name_id: strat_name_id\n })\n }, inner));\n}\nfunction $4a89f93cd5289383$var$getThickness(unit) {\n let minThickness = unit.min_thick ?? 0;\n let maxThickness = unit.max_thick ?? unit.min_thick ?? 0;\n let _unit = \"m\";\n if (minThickness == 0 && maxThickness == 0) return [\n \"Unknown\",\n null\n ];\n if (minThickness < 0.8 && maxThickness < 1.2) {\n // Convert to cm\n minThickness = minThickness * 100;\n maxThickness = maxThickness * 100;\n _unit = \"cm\";\n } else if (minThickness > 800 && maxThickness > 1200) {\n // Convert to km\n minThickness = minThickness / 1000;\n maxThickness = maxThickness / 1000;\n _unit = \"km\";\n }\n if (minThickness == maxThickness) return [\n $4a89f93cd5289383$var$formatSignificance(minThickness),\n _unit\n ];\n return [\n $4a89f93cd5289383$var$formatRange(minThickness, maxThickness),\n _unit\n ];\n}\nfunction $4a89f93cd5289383$var$ThicknessField({ unit: unit, label: label = \"Thickness\" }) {\n const [value, thicknessUnit] = $4a89f93cd5289383$var$getThickness(unit);\n return $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: label,\n value: value,\n unit: thicknessUnit\n });\n}\nfunction $4a89f93cd5289383$var$BibInfo({ refs: refs }) {\n const refData = (0, $lgTAP.useMacrostratData)(\"refs\", refs);\n if (refData == null || refData.length === 0) return null;\n if (refData.length == 1) return $4a89f93cd5289383$var$h($4a89f93cd5289383$var$Citation, {\n data: refData[0],\n tag: \"span\",\n key: refData[0].ref_id\n });\n return $4a89f93cd5289383$var$h(\"ul.refs\", refData.map((data, i)=>$4a89f93cd5289383$var$h($4a89f93cd5289383$var$Citation, {\n data: data,\n tag: \"li\",\n key: data.ref_id\n })));\n}\nfunction $4a89f93cd5289383$var$Citation({ data: data, tag: tag = \"p\" }) {\n return $4a89f93cd5289383$var$h(tag, {\n className: \"citation\"\n }, [\n $4a89f93cd5289383$var$h(\"span.authors\", data.author),\n \", \",\n $4a89f93cd5289383$var$h(\"span.year\", data.pub_year),\n \", \",\n $4a89f93cd5289383$var$h(\"span.title\", data.ref)\n ]);\n}\nfunction $4a89f93cd5289383$var$AgeField({ unit: unit, children: children }) {\n const [b_age, t_age, _unit] = $4a89f93cd5289383$var$getAgeRange(unit);\n return $4a89f93cd5289383$var$h((0, $c0aFQ$DataField), {\n label: \"Age\",\n value: $4a89f93cd5289383$var$formatRange(b_age, t_age),\n unit: _unit\n }, children);\n}\nfunction $4a89f93cd5289383$var$getAgeRange(_unit) {\n let b_age = _unit.b_age;\n let t_age = _unit.t_age;\n let unit = \"Ma\";\n if (b_age < 0.8 && t_age < 1.2) {\n b_age *= 1000;\n t_age *= 1000;\n unit = \"ka\";\n } else if (b_age > 800 && t_age > 1200) {\n b_age /= 1000;\n t_age /= 1000;\n unit = \"Ga\";\n }\n return [\n b_age,\n t_age,\n unit\n ];\n}\nfunction $4a89f93cd5289383$var$getAge(value) {\n /** Get the age value in Ma, ka, or Ga as appropriate */ let unit = \"Ma\";\n if (value < 0.8) {\n unit = \"ka\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Ga\";\n value /= 1000;\n }\n return [\n value,\n unit\n ];\n}\nfunction $4a89f93cd5289383$export$37ebfd237811b1eb({ age: age, maximumFractionDigits: maximumFractionDigits = 2, minimumFractionDigits: minimumFractionDigits = 0, className: className }) {\n /** Component to display a single age value with unit conversion from\n * Ma to ka or Ga as appropriate.\n */ const [value, unit] = $4a89f93cd5289383$var$getAge(age);\n const _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits: maximumFractionDigits,\n minimumFractionDigits: minimumFractionDigits\n });\n return $4a89f93cd5289383$var$h((0, $c0aFQ$Value), {\n value: _value,\n unit: unit,\n className: className\n });\n}\nfunction $4a89f93cd5289383$export$3b11bc38611c5941({ value: value, maximumFractionDigits: maximumFractionDigits = 2, minimumFractionDigits: minimumFractionDigits = 0 }) {\n let unit = \"Myr\";\n if (value < 0.8) {\n unit = \"kyr\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Gyr\";\n value /= 1000;\n }\n let _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits: maximumFractionDigits,\n minimumFractionDigits: minimumFractionDigits\n });\n return $4a89f93cd5289383$var$h((0, $c0aFQ$Value), {\n value: _value,\n unit: unit\n });\n}\nfunction $4a89f93cd5289383$var$enhanceEnvironments(environments, envMap) {\n return environments.map((env)=>{\n return {\n ...envMap?.get(env.environ_id) ?? {},\n ...env\n };\n });\n}\nfunction $4a89f93cd5289383$var$enhanceLithologies(lithologies, lithMap) {\n return lithologies.map((lith)=>{\n return {\n ...lithMap?.get(lith.lith_id) ?? {},\n ...lith\n };\n });\n}\nfunction $4a89f93cd5289383$export$b6867fc5221f9f65({ onClick: onClick, className: className, children: children }) {\n /** An optionally clickable text element */ const tag = onClick != null ? \"a\" : \"span\";\n return $4a89f93cd5289383$var$h(tag, {\n onClick: onClick,\n className: className\n }, children);\n}\nfunction $4a89f93cd5289383$export$989167234458594d({ id: id, onClick: onClick, className: className }) {\n /** An item that displays a numeric identifier, optionally clickable */ const _onClick = onClick != null ? ()=>onClick(id) : null;\n return $4a89f93cd5289383$var$h($4a89f93cd5289383$export$b6867fc5221f9f65, {\n onClick: _onClick,\n className: (0, $c0aFQ$classnames)(\"identifier\", className)\n }, id);\n}\nfunction $4a89f93cd5289383$var$UnitIDList({ units: units, onSelectUnit: onSelectUnit, showNames: showNames = false }) {\n const unitsMap = (0, $wtIgl.useColumnUnitsMap)();\n const extUnits = (0, $c0aFQ$useMemo)(()=>{\n const u1 = units.filter((d)=>d != 0);\n if (showNames) return u1.map((unitID)=>{\n const unitData = unitsMap?.get(unitID);\n let name = undefined;\n if (unitData != null) name = (0, $jiUaC.defaultNameFunction)(unitData);\n return {\n unitID: unitID,\n colID: unitData?.col_id,\n name: name\n };\n });\n else return u1.map((unitID)=>({\n unitID: unitID\n }));\n }, [\n units,\n unitsMap\n ]);\n if (extUnits.length === 0) return $4a89f93cd5289383$var$h(\"span.no-units\", \"None\");\n return $4a89f93cd5289383$var$h((0, $c0aFQ$ItemList), {\n className: \"units-list\"\n }, extUnits.map((info)=>$4a89f93cd5289383$var$h(\"span.item\", $4a89f93cd5289383$var$h($4a89f93cd5289383$var$UnitIdentifier, {\n ...info,\n onSelectUnit: onSelectUnit\n }))));\n}\nfunction $4a89f93cd5289383$var$UnitIdentifier({ unitID: unitID, colID: colID, name: name, onSelectUnit: onSelectUnit }) {\n const onClick = (0, $c0aFQ$useMemo)(()=>{\n if (onSelectUnit == null) return null;\n return ()=>{\n onSelectUnit(unitID);\n };\n }, [\n onSelectUnit\n ]);\n if (name != null) return $4a89f93cd5289383$var$h($4a89f93cd5289383$export$b6867fc5221f9f65, {\n className: \"unit-name\",\n onClick: onClick\n }, name);\n return $4a89f93cd5289383$var$h($4a89f93cd5289383$export$989167234458594d, {\n className: \"unit-id\",\n onClick: onClick,\n key: unitID,\n id: unitID\n });\n}\nfunction $4a89f93cd5289383$var$IntervalProportions({ unit: unit, onClickItem: onClickItem }) {\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n let b_prop = unit.b_prop ?? 0;\n let t_prop = unit.t_prop ?? 1;\n const intervalMap = (0, $lgTAP.useMacrostratDefs)(\"intervals\");\n const int0 = intervalMap?.get(i0) ?? {};\n const interval0 = {\n ...int0,\n id: i0,\n name: unit.b_int_name\n };\n let p0 = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1 = $4a89f93cd5289383$var$h($4a89f93cd5289383$var$Proportion, {\n value: t_prop\n });\n if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) // We have a single interval with undefined proportions\n p0 = $4a89f93cd5289383$var$h($4a89f93cd5289383$var$Proportion, {\n value: b_prop\n });\n if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) p0 = $4a89f93cd5289383$var$h(\"span.joint-proportion\", [\n p0,\n $4a89f93cd5289383$var$h(\"span.sep\", \"to\"),\n p1\n ]);\n const clickable = onClickItem != null;\n const handleClick = (event)=>{\n if (onClickItem) onClickItem(event, interval0);\n };\n return $4a89f93cd5289383$var$h(\"div.interval-proportions\", [\n $4a89f93cd5289383$var$h((0, $c0aFQ$IntervalTag), {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: interval0,\n prefix: p0\n }),\n $4a89f93cd5289383$var$h.if(i0 != i1)(\"span.discourage-break\", [\n $4a89f93cd5289383$var$h(\"span.sep\", \"to\"),\n $4a89f93cd5289383$var$h((0, $c0aFQ$IntervalTag), {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: {\n ...int1,\n id: i1,\n name: unit.t_int_name\n },\n prefix: p1\n })\n ])\n ]);\n}\nconst $4a89f93cd5289383$var$formatProportion = (d)=>{\n if (d == null) return null;\n return d.toFixed(1);\n};\nfunction $4a89f93cd5289383$var$Proportion({ value: value }) {\n let content = null;\n if (value == 0) content = \"base\";\n else if (value == 1) content = \"top\";\n else content = $4a89f93cd5289383$var$formatProportion(value * 100) + \"%\";\n return $4a89f93cd5289383$var$h(\"span.proportion\", content);\n}\nfunction $4a89f93cd5289383$var$formatRange(min, max, precision = null) {\n if (min == null || max == null) return null;\n if (min === max) return min.toFixed(precision);\n return `${$4a89f93cd5289383$var$formatSignificance(min, precision)}\\u{2013}${$4a89f93cd5289383$var$formatSignificance(max, precision)}`;\n}\nfunction $4a89f93cd5289383$var$formatSignificance(value, precision = null) {\n // Format to preserve a reasonable number of significant figures\n // this could be done with an easier algorithm, probably:\n if (precision == null) return value.toLocaleString();\n if (precision >= 0) return value.toFixed(precision);\n if (precision < 0) return (value / Math.pow(10, -precision)).toFixed(0) + \"0\".repeat(-precision);\n}\n\n\nexport {$4a89f93cd5289383$export$fbd245232df17557 as UnitDetailsPanel, $4a89f93cd5289383$export$fc503c39cc5cff43 as LegendPanelHeader, $4a89f93cd5289383$export$ec297f6f9a6ccad0 as UnitDetailsFeature, $4a89f93cd5289383$export$3b11bc38611c5941 as Duration, $4a89f93cd5289383$export$895d4931dd696e25 as ReferencesField, $4a89f93cd5289383$export$989167234458594d as Identifier, $4a89f93cd5289383$export$37ebfd237811b1eb as AgeLabel, $4a89f93cd5289383$export$b6867fc5221f9f65 as ClickableText};\n//# sourceMappingURL=column-views.5e73411d.js.map\n","import hyper from \"@macrostrat/hyper\";\nimport styles from \"./panel.module.sass\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { Button, ButtonGroup } from \"@blueprintjs/core\";\nimport { ReactNode, useMemo, useState } from \"react\";\nimport {\n DataField,\n EnvironmentsList,\n IntervalShort,\n IntervalTag,\n ItemList,\n LithologyList,\n LithologyTagFeature,\n Parenthetical,\n Value,\n} from \"@macrostrat/data-components\";\nimport {\n useColumnUnitsMap,\n useMacrostratColumnInfo,\n useMacrostratData,\n useMacrostratDefs,\n} from \"../data-provider\";\nimport type {\n Environment,\n UnitLong,\n UnitLongFull,\n Lithology,\n Interval,\n} from \"@macrostrat/api-types\";\nimport { defaultNameFunction } from \"../units/names\";\nimport classNames from \"classnames\";\n\nconst h = hyper.styled(styles);\n\nexport interface UnitDetailsPanelProps {\n unit: any;\n onClose?: any;\n className?: string;\n actions?: ReactNode;\n hiddenActions?: ReactNode;\n features?: Set<UnitDetailsFeature>;\n lithologyFeatures?: Set<LithologyTagFeature>;\n onSelectUnit?: (unitID: number) => void;\n onClickItem?: MacrostratItemClickHandler;\n}\n\nexport function UnitDetailsPanel({\n unit,\n onClose,\n className,\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n UnitDetailsFeature.JSONToggle,\n UnitDetailsFeature.DepthRange,\n ]),\n lithologyFeatures,\n actions,\n hiddenActions = null,\n onSelectUnit,\n onClickItem,\n}: UnitDetailsPanelProps) {\n const [showJSON, setShowJSON] = useState(false);\n\n let content = null;\n if (showJSON) {\n content = h(JSONView, { data: unit, showRoot: false });\n } else {\n content = h(UnitDetailsContent, {\n unit,\n features,\n lithologyFeatures,\n onClickItem,\n onSelectUnit,\n });\n }\n\n let title = defaultNameFunction(unit);\n\n if (features.has(UnitDetailsFeature.JSONToggle)) {\n hiddenActions = h([\n h(Button, {\n icon: \"code\",\n small: true,\n minimal: true,\n key: \"json-view-toggle\",\n className: classNames(\"json-view-toggle\", { enabled: setShowJSON }),\n onClick(evt) {\n setShowJSON(!showJSON);\n evt.stopPropagation();\n },\n }),\n hiddenActions,\n ]);\n }\n\n return h(\"div.unit-details-panel\", { className }, [\n h(LegendPanelHeader, {\n onClose,\n title,\n id: unit.unit_id,\n actions,\n hiddenActions,\n }),\n h(\"div.unit-details-content-holder\", content),\n ]);\n}\n\nexport function LegendPanelHeader({\n title,\n id,\n onClose,\n actions = null,\n hiddenActions,\n}: {\n title?: string | null;\n id?: number | null;\n onClose?: () => void;\n actions?: ReactNode | null;\n hiddenActions?: ReactNode | null;\n}) {\n return h(\"header.legend-panel-header\", [\n h(\"div.title-container\", [\n h.if(title != null)(\"h3\", title),\n h.if(hiddenActions != null)(\n \"span.hidden-actions-container\",\n h(\"div.hidden-actions\", hiddenActions),\n ),\n ]),\n h(\"div.spacer\"),\n h.if(id != null)(\"code.unit-id\", id),\n h.if(actions != null)(ButtonGroup, { minimal: true }, actions),\n h.if(onClose != null)(Button, {\n icon: \"cross\",\n minimal: true,\n small: true,\n onClick() {\n onClose();\n },\n }),\n ]);\n}\n\nexport enum UnitDetailsFeature {\n AdjacentUnits = \"adjacent-units\",\n Color = \"color\",\n OutcropType = \"outcrop-type\",\n JSONToggle = \"json-toggle\",\n DepthRange = \"depth-range\",\n ColumnName = \"column-name\",\n}\n\nexport type MacrostratItemClickHandler = (\n event: MouseEvent,\n item:\n | Lithology\n | Environment\n | UnitLong\n | Interval\n | { strat_name_id: number },\n) => void;\n\nfunction UnitDetailsContent({\n unit,\n onSelectUnit,\n lithologyFeatures = new Set([\n LithologyTagFeature.Proportion,\n LithologyTagFeature.Attributes,\n ]),\n features = new Set<UnitDetailsFeature>([\n UnitDetailsFeature.AdjacentUnits,\n UnitDetailsFeature.OutcropType,\n ]),\n onClickItem,\n getItemHref,\n}: {\n unit: UnitLong;\n onSelectUnit?: (unitID: number) => void;\n lithologyFeatures?: Set<LithologyTagFeature>;\n features?: Set<UnitDetailsFeature>;\n onClickItem?: MacrostratItemClickHandler;\n getItemHref?: (item: Lithology | Environment | UnitLong) => string | null;\n}) {\n const lithMap = useMacrostratDefs(\"lithologies\");\n const envMap = useMacrostratDefs(\"environments\");\n\n const environments = enhanceEnvironments(unit.environ, envMap);\n const lithologies = enhanceLithologies(unit.lith ?? [], lithMap);\n\n let outcropField = null;\n if (features.has(UnitDetailsFeature.OutcropType)) {\n // Determine outcrop type\n let outcrop = unit.outcrop;\n if (outcrop == \"both\") {\n outcrop = \"surface and subsurface\";\n }\n outcropField = h(DataField, {\n label: \"Outcrop\",\n value: outcrop,\n });\n }\n\n let thicknessOrHeightRange = null;\n const [thickness, thicknessUnit] = getThickness(unit);\n // Proxy for actual heights in t_pos and b_pos\n if (\n features.has(UnitDetailsFeature.DepthRange) &&\n unit.t_pos != null &&\n unit.b_pos != null &&\n unit.min_thick == unit.max_thick && // We have an actual fixed height\n unit.min_thick != 0 // Not a zero thickness\n ) {\n const label = unit.t_pos < unit.b_pos ? \"Depth\" : \"Height\";\n const u1 = \"m\";\n\n thicknessOrHeightRange = h(DataField, {\n unit: u1,\n label,\n value: formatRange(unit.b_pos, unit.t_pos),\n children: h(\n Parenthetical,\n h(Value, { value: thickness, unit: thicknessUnit }),\n ),\n });\n }\n thicknessOrHeightRange ??= h(DataField, {\n label: \"Thickness\",\n value: thickness,\n unit: thicknessUnit,\n });\n\n /** We are trying to move away from passing the \"color\" parameter in the API */\n let colorSwatch: ReactNode = null;\n if (\"color\" in unit && features.has(UnitDetailsFeature.Color)) {\n const unit1 = unit as UnitLongFull;\n colorSwatch = h(\"div.color-swatch\", {\n style: { backgroundColor: unit1.color },\n });\n }\n\n return h(\"div.unit-details-content\", [\n h.if(features.has(UnitDetailsFeature.ColumnName))(ColumnNameField, {\n col_id: unit.col_id,\n }),\n thicknessOrHeightRange,\n h(LithologyList, {\n label: \"Lithology\",\n lithologies,\n features: lithologyFeatures,\n getItemHref,\n onClickItem,\n }),\n h(AgeField, { unit }, [\n h(Parenthetical, h(Duration, { value: unit.b_age - unit.t_age })),\n h(IntervalProportions, {\n unit,\n onClickItem,\n }),\n ]),\n h(EnvironmentsList, {\n environments,\n onClickItem,\n getItemHref,\n }),\n h.if(unit.strat_name_id != null)(StratNameField, {\n strat_name_id: unit.strat_name_id,\n }),\n outcropField,\n h.if(features.has(UnitDetailsFeature.AdjacentUnits))([\n h(\n DataField,\n { label: \"Above\" },\n h(UnitIDList, {\n units: unit.units_above,\n onSelectUnit,\n showNames: true,\n }),\n ),\n h(\n DataField,\n { label: \"Below\" },\n h(UnitIDList, {\n units: unit.units_below,\n onSelectUnit,\n showNames: true,\n }),\n ),\n ]),\n colorSwatch,\n h(ReferencesField, { refs: unit.refs, inline: true }),\n ]);\n}\n\nfunction ColumnNameField({\n col_id,\n showIdentifier = false,\n}: {\n col_id: number;\n showIdentifier?: boolean;\n}) {\n const colData = useMacrostratColumnInfo(col_id);\n let inner: any = h(Identifier, { id: col_id });\n const name = colData?.col_name;\n if (name != null) {\n inner = h(\"span.value\", [\n h(\"span.col-name\", name),\n h.if(showIdentifier)([\" \", h(Parenthetical, inner)]),\n ]);\n }\n\n return h(\n DataField,\n {\n label: \"Column\",\n },\n inner,\n );\n}\n\nexport function ReferencesField({ refs, className = null, ...rest }) {\n if (refs == null || refs.length === 0) {\n return null;\n }\n\n return h(\n DataField,\n {\n label: \"References\",\n className: classNames(\"refs-field\", className),\n ...rest,\n },\n h(BibInfo, { refs }),\n );\n}\n\nfunction StratNameField({\n strat_name_id,\n onClickItem,\n}: {\n strat_name_id: number;\n onClickItem?: (event: MouseEvent, item: { strat_name_id: number }) => void;\n}) {\n const stratNames = useMemo(() => [strat_name_id], [strat_name_id]);\n const data = useMacrostratData(\"strat_names\", stratNames);\n const stratNameData = data?.[0];\n let inner: any = h(Identifier, { id: strat_name_id });\n const name = stratNameData?.strat_name_long;\n if (name != null) {\n inner = h(\"span.strat-name\", name);\n }\n\n const clickable = onClickItem != null;\n\n const className = classNames({\n clickable,\n });\n\n return h(\n DataField,\n {\n label: \"Stratigraphic name\",\n },\n h(\n clickable ? \"a\" : \"span\",\n {\n className,\n onClick: (e) => onClickItem(e, { strat_name_id }),\n },\n inner,\n ),\n );\n}\n\nfunction getThickness(unit): [string, string] {\n let minThickness = unit.min_thick ?? 0;\n let maxThickness = unit.max_thick ?? unit.min_thick ?? 0;\n let _unit = \"m\";\n\n if (minThickness == 0 && maxThickness == 0) {\n return [\"Unknown\", null];\n }\n\n if (minThickness < 0.8 && maxThickness < 1.2) {\n // Convert to cm\n minThickness = minThickness * 100;\n maxThickness = maxThickness * 100;\n _unit = \"cm\";\n } else if (minThickness > 800 && maxThickness > 1200) {\n // Convert to km\n minThickness = minThickness / 1000;\n maxThickness = maxThickness / 1000;\n _unit = \"km\";\n }\n\n if (minThickness == maxThickness) {\n return [formatSignificance(minThickness), _unit];\n }\n\n return [formatRange(minThickness, maxThickness), _unit];\n}\n\nfunction ThicknessField({ unit, label = \"Thickness\" }) {\n const [value, thicknessUnit] = getThickness(unit);\n return h(DataField, {\n label,\n value,\n unit: thicknessUnit,\n });\n}\n\nfunction BibInfo({ refs }) {\n const refData = useMacrostratData(\"refs\", refs);\n\n if (refData == null || refData.length === 0) {\n return null;\n }\n\n if (refData.length == 1) {\n return h(Citation, {\n data: refData[0],\n tag: \"span\",\n key: refData[0].ref_id,\n });\n }\n\n return h(\n \"ul.refs\",\n refData.map((data, i) =>\n h(Citation, { data, tag: \"li\", key: data.ref_id }),\n ),\n );\n}\n\nfunction Citation({ data, tag = \"p\" }) {\n return h(tag, { className: \"citation\" }, [\n h(\"span.authors\", data.author),\n \", \",\n h(\"span.year\", data.pub_year),\n \", \",\n h(\"span.title\", data.ref),\n ]);\n}\n\nfunction AgeField({ unit, children }) {\n const [b_age, t_age, _unit] = getAgeRange(unit);\n\n return h(\n DataField,\n {\n label: \"Age\",\n value: formatRange(b_age, t_age),\n unit: _unit,\n },\n children,\n );\n}\n\nfunction getAgeRange(_unit) {\n let b_age = _unit.b_age;\n let t_age = _unit.t_age;\n let unit = \"Ma\";\n\n if (b_age < 0.8 && t_age < 1.2) {\n b_age *= 1000;\n t_age *= 1000;\n unit = \"ka\";\n } else if (b_age > 800 && t_age > 1200) {\n b_age /= 1000;\n t_age /= 1000;\n unit = \"Ga\";\n }\n\n return [b_age, t_age, unit];\n}\n\nfunction getAge(value) {\n /** Get the age value in Ma, ka, or Ga as appropriate */\n let unit = \"Ma\";\n if (value < 0.8) {\n unit = \"ka\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Ga\";\n value /= 1000;\n }\n\n return [value, unit];\n}\n\nexport function AgeLabel({\n age,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n className,\n}: {\n age: number;\n className?: string;\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n}) {\n /** Component to display a single age value with unit conversion from\n * Ma to ka or Ga as appropriate.\n */\n const [value, unit] = getAge(age);\n\n const _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit, className });\n}\n\nexport function Duration({\n value,\n maximumFractionDigits = 2,\n minimumFractionDigits = 0,\n}) {\n let unit = \"Myr\";\n if (value < 0.8) {\n unit = \"kyr\";\n value *= 1000;\n if (value < 5) {\n unit = \"yr\";\n value *= 1000;\n }\n } else if (value > 1000) {\n unit = \"Gyr\";\n value /= 1000;\n }\n\n let _value = value.toLocaleString(\"en-US\", {\n maximumFractionDigits,\n minimumFractionDigits,\n });\n\n return h(Value, { value: _value, unit });\n}\n\nfunction enhanceEnvironments(\n environments: Partial<Environment>[],\n envMap: Map<number, Environment>,\n) {\n return environments.map((env) => {\n return {\n ...(envMap?.get(env.environ_id) ?? {}),\n ...env,\n };\n });\n}\n\nfunction enhanceLithologies(\n lithologies: Partial<UnitLong[\"lith\"]>,\n lithMap: Map<number, any>,\n) {\n return lithologies.map((lith) => {\n return {\n ...(lithMap?.get(lith.lith_id) ?? {}), // get lithology details\n ...lith, // override with the unit's specific lithology data\n };\n });\n}\n\nexport function ClickableText({\n onClick,\n className,\n children,\n}: {\n onClick: () => void;\n className?: string;\n children: ReactNode;\n}) {\n /** An optionally clickable text element */\n const tag = onClick != null ? \"a\" : \"span\";\n return h(tag, { onClick, className }, children);\n}\n\nexport function Identifier({\n id,\n onClick,\n className,\n}: {\n id: number | string;\n onClick?: (id: number | string) => void;\n className?: string;\n}) {\n /** An item that displays a numeric identifier, optionally clickable */\n const _onClick = onClick != null ? () => onClick(id) : null;\n\n return h(\n ClickableText,\n {\n onClick: _onClick,\n className: classNames(\"identifier\", className),\n },\n id,\n );\n}\n\ntype UnitInfo = {\n unitID: number;\n colID?: number;\n name?: string;\n};\n\nfunction UnitIDList({ units, onSelectUnit, showNames = false }) {\n const unitsMap = useColumnUnitsMap();\n\n const extUnits: UnitInfo[] = useMemo(() => {\n const u1 = units.filter((d) => d != 0);\n if (showNames) {\n return u1.map((unitID) => {\n const unitData = unitsMap?.get(unitID);\n let name: string = undefined;\n if (unitData != null) {\n name = defaultNameFunction(unitData);\n }\n return {\n unitID,\n colID: unitData?.col_id,\n name,\n };\n });\n } else {\n return u1.map((unitID) => ({ unitID }));\n }\n }, [units, unitsMap]);\n\n if (extUnits.length === 0) {\n return h(\"span.no-units\", \"None\");\n }\n\n return h(\n ItemList,\n { className: \"units-list\" },\n extUnits.map((info) =>\n h(\"span.item\", h(UnitIdentifier, { ...info, onSelectUnit })),\n ),\n );\n}\n\nfunction UnitIdentifier({\n unitID,\n colID,\n name,\n onSelectUnit,\n}: UnitInfo & { onSelectUnit?: (unitID: number) => void }) {\n const onClick = useMemo(() => {\n if (onSelectUnit == null) return null;\n return () => {\n onSelectUnit(unitID);\n };\n }, [onSelectUnit]);\n\n if (name != null) {\n return h(\n ClickableText,\n {\n className: \"unit-name\",\n onClick,\n },\n name,\n );\n }\n\n return h(Identifier, {\n className: \"unit-id\",\n onClick,\n key: unitID,\n id: unitID,\n });\n}\n\nfunction IntervalProportions({ unit, onClickItem }) {\n const i0 = unit.b_int_id;\n const i1 = unit.t_int_id;\n let b_prop = unit.b_prop ?? 0;\n let t_prop = unit.t_prop ?? 1;\n\n const intervalMap = useMacrostratDefs(\"intervals\");\n const int0 = intervalMap?.get(i0) ?? {};\n\n const interval0: IntervalShort = {\n ...int0,\n id: i0,\n name: unit.b_int_name,\n };\n\n let p0: ReactNode = null;\n const int1 = intervalMap?.get(i1) ?? {};\n const p1: ReactNode = h(Proportion, { value: t_prop });\n\n if (i0 !== i1 || b_prop !== 0 || t_prop !== 1) {\n // We have a single interval with undefined proportions\n p0 = h(Proportion, { value: b_prop });\n }\n\n if (i0 === i1 && (b_prop !== 0 || t_prop !== 1)) {\n p0 = h(\"span.joint-proportion\", [p0, h(\"span.sep\", \"to\"), p1]);\n }\n\n const clickable = onClickItem != null;\n\n const handleClick = (event: MouseEvent) => {\n if (onClickItem) {\n onClickItem(event, interval0);\n }\n };\n\n return h(\"div.interval-proportions\", [\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: interval0,\n prefix: p0,\n }),\n h.if(i0 != i1)(\"span.discourage-break\", [\n h(\"span.sep\", \"to\"),\n h(IntervalTag, {\n className: clickable ? \"clickable\" : \"\",\n onClick: clickable ? handleClick : undefined,\n interval: {\n ...int1,\n id: i1,\n name: unit.t_int_name,\n },\n prefix: p1,\n }),\n ]),\n ]);\n}\n\nconst formatProportion = (d) => {\n if (d == null) return null;\n return d.toFixed(1);\n};\n\nfunction Proportion({ value }) {\n let content = null;\n if (value == 0) {\n content = \"base\";\n } else if (value == 1) {\n content = \"top\";\n } else {\n content = formatProportion(value * 100) + \"%\";\n }\n\n return h(\"span.proportion\", content);\n}\n\nfunction formatRange(min, max, precision = null) {\n if (min == null || max == null) return null;\n if (min === max) {\n return min.toFixed(precision);\n }\n\n return `${formatSignificance(min, precision)}–${formatSignificance(\n max,\n precision,\n )}`;\n}\n\nfunction formatSignificance(value, precision = null) {\n // Format to preserve a reasonable number of significant figures\n // this could be done with an easier algorithm, probably:\n\n if (precision == null) {\n return value.toLocaleString();\n }\n if (precision >= 0) {\n return value.toFixed(precision);\n }\n if (precision < 0) {\n return (\n (value / Math.pow(10, -precision)).toFixed(0) + \"0\".repeat(-precision)\n );\n }\n}\n"],"names":["$c0aFQ$macrostrathyper","JSONView","$c0aFQ$JSONView","Button","$c0aFQ$Button","ButtonGroup","$c0aFQ$ButtonGroup","useState","$c0aFQ$useState","useMemo","$c0aFQ$useMemo","LithologyTagFeature","$c0aFQ$LithologyTagFeature","DataField","$c0aFQ$DataField","Parenthetical","$c0aFQ$Parenthetical","Value","$c0aFQ$Value","LithologyList","$c0aFQ$LithologyList","EnvironmentsList","$c0aFQ$EnvironmentsList","ItemList","$c0aFQ$ItemList","IntervalTag","$c0aFQ$IntervalTag","$c0aFQ$classnames","$parcel$export","e","n","v","s","Object","defineProperty","get","set","enumerable","configurable","UnitDetailsFeature","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$4a89f93cd5289383$exports","$4a89f93cd5289383$export$fbd245232df17557","$4a89f93cd5289383$export$fc503c39cc5cff43","$4a89f93cd5289383$export$ec297f6f9a6ccad0","$4a89f93cd5289383$export$3b11bc38611c5941","$4a89f93cd5289383$export$895d4931dd696e25","$4a89f93cd5289383$export$989167234458594d","$4a89f93cd5289383$export$37ebfd237811b1eb","$4a89f93cd5289383$export$b6867fc5221f9f65","$lMX1H","$wtIgl","$lgTAP","$jiUaC","$4a89f93cd5289383$var$h","styled","a","__esModule","default","unit","onClose","className","features","Set","lithologyFeatures","actions","hiddenActions","onSelectUnit","onClickItem","showJSON","setShowJSON","content","data","showRoot","$4a89f93cd5289383$var$UnitDetailsContent","title","defaultNameFunction","has","icon","small","minimal","key","enabled","onClick","evt","stopPropagation","unit_id","if","Proportion","Attributes","getItemHref","environments","envMap","lithologies","lithMap","minThickness","maxThickness","_unit","useMacrostratDefs","environ","map","env","environ_id","lith","lith_id","outcropField","outcrop","label","value","thicknessOrHeightRange","thickness","thicknessUnit","min_thick","max_thick","$4a89f93cd5289383$var$formatSignificance","$4a89f93cd5289383$var$formatRange","t_pos","b_pos","children","colorSwatch","style","backgroundColor","unit1","color","$4a89f93cd5289383$var$ColumnNameField","col_id","$4a89f93cd5289383$var$AgeField","b_age","t_age","$4a89f93cd5289383$var$IntervalProportions","strat_name_id","$4a89f93cd5289383$var$StratNameField","$4a89f93cd5289383$var$UnitIDList","units","units_above","showNames","units_below","refs","inline","showIdentifier","colData","useMacrostratColumnInfo","inner","name","col_name","rest","length","$4a89f93cd5289383$var$BibInfo","stratNames","useMacrostratData","stratNameData","strat_name_long","clickable","refData","$4a89f93cd5289383$var$Citation","tag","ref_id","i","author","pub_year","ref","age","maximumFractionDigits","minimumFractionDigits","toLocaleString","unitsMap","useColumnUnitsMap","extUnits","u1","filter","d","unitID","unitData","colID","info","$4a89f93cd5289383$var$UnitIdentifier","i0","b_int_id","i1","t_int_id","b_prop","t_prop","intervalMap","interval0","b_int_name","p0","int1","p1","$4a89f93cd5289383$var$Proportion","handleClick","event","undefined","interval","prefix","t_int_name","$4a89f93cd5289383$var$formatProportion","toFixed","min","max","precision","Math","pow","repeat","UnitDetailsPanel","LegendPanelHeader","Duration","ReferencesField","Identifier","AgeLabel","ClickableText"],"version":3,"file":"column-views.5e73411d.js.map","sourceRoot":"../../../../"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["<anon>","packages/column-views/src/prepare-units/composite-scale.ts"],"sourcesContent":["import \"./column-views.dbb4a46b.js\";\nimport \"./column-views.5a9331a9.js\";\nimport \"./column-views.7f9c7448.js\";\nimport {ColumnAxisType as $d6XP3$ColumnAxisType} from \"@macrostrat/column-components\";\nimport {scaleLinear as $d6XP3$scaleLinear} from \"d3-scale\";\n\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequirea149\"];\n\nif (parcelRequire == null) {\n parcelRequire = function(id) {\n if (id in $parcel$modules) {\n return $parcel$modules[id].exports;\n }\n if (id in $parcel$inits) {\n var init = $parcel$inits[id];\n delete $parcel$inits[id];\n var module = {id: id, exports: {}};\n $parcel$modules[id] = module;\n init.call(module.exports, module, module.exports);\n return module.exports;\n }\n var err = new Error(\"Cannot find module '\" + id + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n };\n\n parcelRequire.register = function register(id, init) {\n $parcel$inits[id] = init;\n };\n\n $parcel$global[\"parcelRequirea149\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\nvar $iWhRv = parcelRequire(\"iWhRv\");\n\n\nvar $dcPBY = parcelRequire(\"dcPBY\");\n\nvar $76iYI = parcelRequire(\"76iYI\");\nfunction $8054a162cb094378$export$e7184dd8bb3302ed(inputScales, unconformityHeight) {\n /** Finalize the heights of sections, including the heights of unconformities\n * between them.\n */ let totalHeight = unconformityHeight / 2;\n let lastSectionTopHeight = 0;\n const packages2 = [];\n for (const group of inputScales){\n const { domain: domain, scale: scale } = group;\n const [b_age, t_age] = domain;\n const key = `package-${b_age}-${t_age}`;\n packages2.push({\n ...$8054a162cb094378$export$d6235b492bceb8c5(group, totalHeight),\n key: key,\n offset: totalHeight,\n // Unconformity height above this particular section\n paddingTop: totalHeight - lastSectionTopHeight\n });\n const pixelHeight = Math.abs(scale(b_age) - scale(t_age));\n lastSectionTopHeight = totalHeight + pixelHeight;\n totalHeight = lastSectionTopHeight + unconformityHeight;\n }\n totalHeight += unconformityHeight / 2;\n return {\n totalHeight: totalHeight,\n sections: packages2\n };\n}\nfunction $8054a162cb094378$export$67442a0f5bef147b(sections, unconformityHeight) {\n /** Finalize the heights of sections, including the heights of unconformities\n * between them.\n */ const sectionScales = sections.map((d)=>d.scaleInfo);\n const { totalHeight: totalHeight, sections: packages } = $8054a162cb094378$export$e7184dd8bb3302ed(sectionScales, unconformityHeight);\n // This could perhaps be simplified.\n const sections1 = [];\n for(const i in sections){\n const group = sections[i];\n const scaleInfo = packages[i];\n sections1.push({\n ...group,\n key: scaleInfo.key,\n scaleInfo: scaleInfo\n });\n }\n return {\n totalHeight: totalHeight,\n sections: sections1\n };\n}\nfunction $8054a162cb094378$export$7d3f3129a1a4b84e(sections, opts) {\n return sections.map((group)=>{\n return $8054a162cb094378$var$addScaleToSection(group, opts);\n });\n}\nfunction $8054a162cb094378$var$addScaleToSection(group, opts) {\n const { t_age: t_age, b_age: b_age, t_pos: t_pos, b_pos: b_pos, units: units } = group;\n let _range = null;\n // if t_age and b_age are set for a group, use them to define the range...\n if (opts.axisType == (0, $d6XP3$ColumnAxisType).AGE) _range = [\n b_age,\n t_age\n ];\n else _range = [\n b_pos,\n t_pos\n ];\n const scaleInfo = $8054a162cb094378$var$buildSectionScale(units, {\n ...opts,\n domain: _range\n });\n return {\n ...group,\n scaleInfo: scaleInfo\n };\n}\nfunction $8054a162cb094378$var$buildSectionScale(data, opts) {\n const { targetUnitHeight: targetUnitHeight = 20, minPixelScale: minPixelScale = 0.2, axisType: axisType, minSectionHeight: minSectionHeight, scale: scale, hybridScale: hybridScale } = opts;\n const domain = opts.domain ?? $8054a162cb094378$var$findSectionHeightRange(data, axisType);\n const dAge = Math.abs(domain[0] - domain[1]);\n let _pixelScale = opts.pixelScale;\n let pixelHeight;\n if (hybridScale != null) {\n /** In an equidistant surfaces scale, we want to determine the heights of surfaces\n * and then distribute units evenly between them.\n * This is somewhat like an ordinal scale\n */ if (hybridScale.type === (0, $76iYI.HybridScaleType).EquidistantSurfaces) _pixelScale ?? (_pixelScale = targetUnitHeight);\n return (0, $dcPBY.buildHybridScale)(hybridScale, data, domain, {\n pixelOffset: 0,\n pixelScale: _pixelScale\n });\n }\n if (scale == null) {\n if (_pixelScale == null) {\n const avgAgeRange = $8054a162cb094378$var$findAverageUnitHeight(data, axisType);\n // Get pixel height necessary to render average unit at target height\n _pixelScale = Math.max(targetUnitHeight / avgAgeRange, minPixelScale);\n // OLD METHOD that cares about overall section height vs. individual unit height\n // 0.2 pixel per myr is the floor scale\n //const targetHeight = targetUnitHeight * data.length;\n // 1 pixel per myr is the floor scale\n //_pixelScale = Math.max(targetHeight / dAge, minPixelScale);\n }\n let height = dAge * _pixelScale;\n // If height is less than minSectionHeight, set it to minSectionHeight\n const _minSectionHeight = minSectionHeight ?? targetUnitHeight ?? 0;\n pixelHeight = Math.max(height, _minSectionHeight);\n _pixelScale = pixelHeight / dAge;\n } else // If a scale is provided, use it to compute pixel height\n pixelHeight = Math.abs(scale(domain[0]) - scale(domain[1]));\n return $8054a162cb094378$export$d6235b492bceb8c5({\n scale: scale,\n domain: domain,\n pixelHeight: pixelHeight,\n pixelScale: _pixelScale\n }, 0);\n}\nfunction $8054a162cb094378$export$d6235b492bceb8c5(def, offset = 0) {\n /** Build a section scale */ // Domain should be oriented from bottom to top, but scale is oriented from top to bottom\n const { domain: domain, pixelScale: pixelScale, pixelHeight: pixelHeight, scale: scale, heightScale: heightScale } = def;\n if (scale == null && pixelScale == null) throw new Error(\"Either scale or pixelScale must be provided\");\n let _scale;\n if (scale == null) _scale = (0, $d6XP3$scaleLinear)().domain([\n domain[1],\n domain[0]\n ]).range([\n offset,\n pixelHeight + offset\n ]);\n else {\n const domain0 = scale.domain();\n const range0 = scale.range();\n _scale = scale.copy().domain(domain0).range(range0.map((d)=>d + offset));\n }\n _scale.clamp();\n let _heightScale = null;\n if (heightScale != null) {\n // Adjust height scale as well\n const range0 = scale.range();\n _heightScale = heightScale.copy().range(range0.map((d)=>d + offset));\n _heightScale.clamp();\n }\n return {\n domain: domain,\n pixelScale: pixelScale,\n pixelHeight: pixelHeight,\n scale: _scale,\n // Internal details for hybrid scales. TODO: improve this\n heightScale: _heightScale\n };\n}\nfunction $8054a162cb094378$var$findSectionHeightRange(data, axisType) {\n if (axisType == null) throw new Error(\"Axis type is not set\");\n if (axisType === (0, $d6XP3$ColumnAxisType).AGE) {\n const t_age = Math.min(...data.map((d)=>d.t_age));\n const b_age = Math.max(...data.map((d)=>d.b_age));\n return [\n b_age,\n t_age\n ];\n } else if (axisType == (0, $d6XP3$ColumnAxisType).DEPTH || axisType == (0, $d6XP3$ColumnAxisType).ORDINAL) {\n const t_pos = Math.min(...data.map((d)=>d.t_pos));\n const b_pos = Math.max(...data.map((d)=>d.b_pos));\n return [\n b_pos,\n t_pos\n ];\n } else if (axisType == (0, $d6XP3$ColumnAxisType).HEIGHT) {\n const t_pos = Math.max(...data.map((d)=>d.t_pos));\n const b_pos = Math.min(...data.map((d)=>d.b_pos));\n return [\n b_pos,\n t_pos\n ];\n }\n}\nfunction $8054a162cb094378$var$findAverageUnitHeight(data, axisType) {\n const unitHeights = data.map((d)=>{\n const [b_pos, t_pos] = (0, $iWhRv.getUnitHeightRange)(d, axisType);\n return Math.abs(b_pos - t_pos);\n });\n return unitHeights.reduce((a, b)=>a + b, 0) / unitHeights.length;\n}\nfunction $8054a162cb094378$export$3ada7641926a616d(sections, interpolateUnconformities = false) {\n /** Create a scale that works across multiple packages */ const scales = [];\n let lastScale = null;\n for (const section of sections){\n const _scale = section.scaleInfo.scale.copy().clamp(true);\n scales.push(_scale);\n if (lastScale != null && interpolateUnconformities) {\n // Add a new scale that interpolates between lastScale and _scale\n const lastDomain = lastScale.domain();\n const lastRange = lastScale.range();\n const currentDomain = _scale.domain();\n const currentRange = _scale.range();\n const interpScale = (0, $d6XP3$scaleLinear)().domain([\n lastDomain[lastDomain.length - 1],\n currentDomain[0]\n ]).range([\n lastRange[lastRange.length - 1],\n currentRange[0]\n ]).clamp(true);\n scales.push(interpScale);\n }\n lastScale = _scale;\n }\n const scale = (age)=>{\n for (const s of scales){\n const domain = s.domain();\n if (age >= domain[0] && age <= domain[domain.length - 1]) return s(age);\n }\n return null;\n };\n scale.copy = ()=>{\n return $8054a162cb094378$export$3ada7641926a616d(sections, interpolateUnconformities);\n };\n scale.domain = ()=>{\n /** Return the domain of the scale */ const vals = sections.flatMap((d)=>d.scaleInfo.domain);\n if (vals[0] < vals[vals.length - 1]) // age axes\n return [\n Math.min(...vals),\n Math.max(...vals)\n ];\n // Normal axes like height\n return [\n Math.max(...vals),\n Math.min(...vals)\n ];\n };\n scale.invert = (pixelHeight)=>{\n /** Invert the scale to get the age at a given pixel height */ // Iterate through the sections to find the correct one\n for (const scale of scales){\n const range = scale.range();\n if (pixelHeight > Math.min(...range) && pixelHeight <= Math.max(...range)) {\n console.log(\"Inverting scale at pixel height\", pixelHeight);\n return scale.invert(pixelHeight);\n }\n }\n return null;\n };\n scale.clamp = (clamp)=>{\n /** Clamp all constituent scales */ for (const s of scales)s.clamp(clamp);\n };\n return scale;\n}\nfunction $8054a162cb094378$export$edbf01b435c75274(sections, threshold, opts) {\n const newSections = [];\n let currentSection = null;\n for (const nextSection of sections){\n if (currentSection == null) {\n currentSection = nextSection;\n continue;\n }\n let heights;\n let pxHeights;\n if (opts.axisType !== (0, $d6XP3$ColumnAxisType).AGE) heights = [\n nextSection.t_pos,\n currentSection.b_pos\n ];\n else heights = [\n nextSection.t_age,\n currentSection.b_age\n ];\n const _diff = (vals)=>{\n return Math.abs(vals[0] - vals[1]);\n };\n pxHeights = [\n _diff(heights.map(nextSection.scaleInfo.scale)),\n _diff(heights.map(currentSection.scaleInfo.scale))\n ];\n const pxHeight = Math.min(...pxHeights);\n if (pxHeight < threshold) {\n let t_pos;\n let b_pos;\n if (opts.axisType == (0, $d6XP3$ColumnAxisType).AGE || opts.axisType == (0, $d6XP3$ColumnAxisType).DEPTH) {\n t_pos = Math.min(currentSection.t_pos, nextSection.t_pos);\n b_pos = Math.max(currentSection.b_pos, nextSection.b_pos);\n } else {\n t_pos = Math.max(currentSection.t_pos, nextSection.t_pos);\n b_pos = Math.min(currentSection.b_pos, nextSection.b_pos);\n }\n // We need to merge the sections\n const compositeSection0 = {\n units: [\n ...currentSection.units,\n ...nextSection.units\n ],\n section_id: [\n ...(0, $iWhRv.ensureArray)(currentSection.section_id),\n ...(0, $iWhRv.ensureArray)(nextSection.section_id)\n ],\n t_age: Math.min(currentSection.t_age, nextSection.t_age),\n b_age: Math.max(currentSection.b_age, nextSection.b_age),\n t_pos: t_pos,\n b_pos: b_pos\n };\n currentSection = $8054a162cb094378$var$addScaleToSection(compositeSection0, opts);\n } else {\n // We need to keep the section\n newSections.push(currentSection);\n currentSection = nextSection;\n }\n }\n if (currentSection != null) newSections.push(currentSection);\n return newSections;\n}\n\n\nexport {$8054a162cb094378$export$e7184dd8bb3302ed as buildCompositeScaleInfo, $8054a162cb094378$export$d6235b492bceb8c5 as createPackageScale, $8054a162cb094378$export$67442a0f5bef147b as finalizeSectionHeights, $8054a162cb094378$export$7d3f3129a1a4b84e as computeSectionHeights, $8054a162cb094378$export$3ada7641926a616d as createCompositeScale, $8054a162cb094378$export$edbf01b435c75274 as collapseUnconformitiesByPixelHeight};\n//# sourceMappingURL=column-views.a596b1f5.js.map\n","import { ColumnAxisType } from \"@macrostrat/column-components\";\nimport { ensureArray, getUnitHeightRange } from \"./utils\";\nimport { ScaleContinuousNumeric, scaleLinear } from \"d3-scale\";\nimport { UnitLong } from \"@macrostrat/api-types\";\nimport { buildHybridScale } from \"./dynamic-scales\";\nimport { ExtUnit, HybridScaleType, SectionInfo } from \"./types\";\nimport type {\n ColumnScaleOptions,\n CompositeColumnData,\n CompositeScaleData,\n PackageLayoutData,\n PackageScaleInfo,\n PackageScaleLayoutData,\n SectionScaleOptions,\n} from \"./types\";\n\n// Composite scale information augmented with units in each package\n\nexport function buildCompositeScaleInfo(\n inputScales: PackageScaleInfo[],\n unconformityHeight: number,\n): CompositeScaleData {\n /** Finalize the heights of sections, including the heights of unconformities\n * between them.\n */\n\n let totalHeight = unconformityHeight / 2;\n let lastSectionTopHeight = 0;\n\n const packages2: PackageScaleLayoutData[] = [];\n for (const group of inputScales) {\n const { domain, scale } = group;\n const [b_age, t_age] = domain;\n const key = `package-${b_age}-${t_age}`;\n\n packages2.push({\n ...createPackageScale(group, totalHeight),\n key,\n offset: totalHeight,\n // Unconformity height above this particular section\n paddingTop: totalHeight - lastSectionTopHeight,\n });\n\n const pixelHeight = Math.abs(scale(b_age) - scale(t_age));\n lastSectionTopHeight = totalHeight + pixelHeight;\n totalHeight = lastSectionTopHeight + unconformityHeight;\n }\n totalHeight += unconformityHeight / 2;\n return {\n totalHeight,\n sections: packages2,\n };\n}\n\nexport function finalizeSectionHeights<T extends UnitLong>(\n sections: SectionInfoWithScale<T>[],\n unconformityHeight: number,\n): CompositeColumnData<T> {\n /** Finalize the heights of sections, including the heights of unconformities\n * between them.\n */\n\n const sectionScales = sections.map((d) => d.scaleInfo);\n\n const { totalHeight, sections: packages } = buildCompositeScaleInfo(\n sectionScales,\n unconformityHeight,\n );\n\n // This could perhaps be simplified.\n const sections1: PackageLayoutData<T>[] = [];\n for (const i in sections) {\n const group = sections[i];\n const scaleInfo = packages[i];\n sections1.push({\n ...group,\n key: scaleInfo.key,\n scaleInfo,\n });\n }\n return {\n totalHeight,\n sections: sections1,\n };\n}\n\nexport interface SectionInfoWithScale<\n T extends UnitLong = ExtUnit,\n> extends SectionInfo<T> {\n scaleInfo: PackageScaleInfo;\n}\n\nexport function computeSectionHeights<T extends UnitLong>(\n sections: SectionInfo<T>[],\n opts: ColumnScaleOptions,\n): SectionInfoWithScale<T>[] {\n return sections.map((group) => {\n return addScaleToSection<T>(group, opts);\n });\n}\n\nfunction addScaleToSection<T extends UnitLong = ExtUnit>(\n group: SectionInfo<T>,\n opts: ColumnScaleOptions,\n): SectionInfoWithScale<T> {\n const { t_age, b_age, t_pos, b_pos, units } = group;\n let _range = null;\n // if t_age and b_age are set for a group, use them to define the range...\n if (opts.axisType == ColumnAxisType.AGE) {\n _range = [b_age, t_age];\n } else {\n _range = [b_pos, t_pos];\n }\n\n const scaleInfo = buildSectionScale<T>(units, {\n ...opts,\n domain: _range,\n });\n\n return {\n ...group,\n scaleInfo,\n };\n}\n\nfunction buildSectionScale<T extends UnitLong>(\n data: T[],\n opts: SectionScaleOptions,\n): PackageScaleInfo {\n const {\n targetUnitHeight = 20,\n minPixelScale = 0.2,\n axisType,\n minSectionHeight,\n scale,\n hybridScale,\n } = opts;\n const domain = opts.domain ?? findSectionHeightRange(data, axisType);\n\n const dAge = Math.abs(domain[0] - domain[1]);\n\n let _pixelScale = opts.pixelScale;\n let pixelHeight: number;\n\n if (hybridScale != null) {\n /** In an equidistant surfaces scale, we want to determine the heights of surfaces\n * and then distribute units evenly between them.\n * This is somewhat like an ordinal scale\n */\n if (hybridScale.type === HybridScaleType.EquidistantSurfaces) {\n _pixelScale ??= targetUnitHeight;\n }\n\n return buildHybridScale(hybridScale, data, domain, {\n pixelOffset: 0,\n pixelScale: _pixelScale,\n });\n }\n\n if (scale == null) {\n if (_pixelScale == null) {\n const avgAgeRange = findAverageUnitHeight(data, axisType);\n // Get pixel height necessary to render average unit at target height\n _pixelScale = Math.max(targetUnitHeight / avgAgeRange, minPixelScale);\n\n // OLD METHOD that cares about overall section height vs. individual unit height\n // 0.2 pixel per myr is the floor scale\n //const targetHeight = targetUnitHeight * data.length;\n // 1 pixel per myr is the floor scale\n //_pixelScale = Math.max(targetHeight / dAge, minPixelScale);\n }\n\n let height = dAge * _pixelScale;\n // If height is less than minSectionHeight, set it to minSectionHeight\n const _minSectionHeight = minSectionHeight ?? targetUnitHeight ?? 0;\n pixelHeight = Math.max(height, _minSectionHeight);\n _pixelScale = pixelHeight / dAge;\n } else {\n // If a scale is provided, use it to compute pixel height\n pixelHeight = Math.abs(scale(domain[0]) - scale(domain[1]));\n }\n\n return createPackageScale(\n { scale, domain, pixelHeight, pixelScale: _pixelScale },\n 0,\n );\n}\n\nexport function createPackageScale(\n def: PackageScaleInfo,\n offset: number = 0,\n): PackageScaleInfo {\n /** Build a section scale */\n // Domain should be oriented from bottom to top, but scale is oriented from top to bottom\n const { domain, pixelScale, pixelHeight, scale, heightScale } = def;\n\n if (scale == null && pixelScale == null) {\n throw new Error(\"Either scale or pixelScale must be provided\");\n }\n\n let _scale: ScaleContinuousNumeric<number, number>;\n if (scale == null) {\n _scale = scaleLinear()\n .domain([domain[1], domain[0]])\n .range([offset, pixelHeight + offset]);\n } else {\n const domain0 = scale.domain();\n const range0 = scale.range();\n _scale = scale\n .copy()\n .domain(domain0)\n .range(range0.map((d) => d + offset));\n }\n\n _scale.clamp();\n\n let _heightScale = null;\n if (heightScale != null) {\n // Adjust height scale as well\n const range0 = scale.range();\n _heightScale = heightScale.copy().range(range0.map((d) => d + offset));\n _heightScale.clamp();\n }\n\n return {\n domain,\n pixelScale,\n pixelHeight,\n scale: _scale,\n // Internal details for hybrid scales. TODO: improve this\n heightScale: _heightScale,\n };\n}\n\nfunction findSectionHeightRange(\n data: UnitLong[],\n axisType: ColumnAxisType,\n): [number, number] {\n if (axisType == null) {\n throw new Error(\"Axis type is not set\");\n }\n if (axisType === ColumnAxisType.AGE) {\n const t_age = Math.min(...data.map((d) => d.t_age));\n const b_age = Math.max(...data.map((d) => d.b_age));\n return [b_age, t_age];\n } else if (\n axisType == ColumnAxisType.DEPTH ||\n axisType == ColumnAxisType.ORDINAL\n ) {\n const t_pos = Math.min(...data.map((d) => d.t_pos));\n const b_pos = Math.max(...data.map((d) => d.b_pos));\n return [b_pos, t_pos];\n } else if (axisType == ColumnAxisType.HEIGHT) {\n const t_pos = Math.max(...data.map((d) => d.t_pos));\n const b_pos = Math.min(...data.map((d) => d.b_pos));\n return [b_pos, t_pos];\n }\n}\n\nfunction findAverageUnitHeight(\n data: UnitLong[],\n axisType: ColumnAxisType,\n): number {\n const unitHeights = data.map((d) => {\n const [b_pos, t_pos] = getUnitHeightRange(d, axisType);\n return Math.abs(b_pos - t_pos);\n });\n return unitHeights.reduce((a, b) => a + b, 0) / unitHeights.length;\n}\n\nexport interface CompositeColumnScale {\n (age: number): number | null;\n copy(): CompositeColumnScale;\n domain(): [number, number];\n invert(pixelHeight: number): number | null;\n clamp(clamp: boolean): void;\n}\n\nexport function createCompositeScale(\n sections: PackageLayoutData[],\n interpolateUnconformities: boolean = false,\n): CompositeColumnScale {\n /** Create a scale that works across multiple packages */\n\n const scales: ScaleContinuousNumeric<number, number>[] = [];\n\n let lastScale: ScaleContinuousNumeric<number, number> | null = null;\n for (const section of sections) {\n const _scale = section.scaleInfo.scale.copy().clamp(true);\n scales.push(_scale);\n if (lastScale != null && interpolateUnconformities) {\n // Add a new scale that interpolates between lastScale and _scale\n const lastDomain = lastScale.domain();\n const lastRange = lastScale.range();\n const currentDomain = _scale.domain();\n const currentRange = _scale.range();\n\n const interpScale = scaleLinear()\n .domain([lastDomain[lastDomain.length - 1], currentDomain[0]])\n .range([lastRange[lastRange.length - 1], currentRange[0]])\n .clamp(true);\n scales.push(interpScale);\n }\n lastScale = _scale;\n }\n\n const scale: CompositeColumnScale = (age) => {\n for (const s of scales) {\n const domain = s.domain();\n if (age >= domain[0] && age <= domain[domain.length - 1]) {\n return s(age);\n }\n }\n return null;\n };\n\n scale.copy = () => {\n return createCompositeScale(sections, interpolateUnconformities);\n };\n\n scale.domain = () => {\n /** Return the domain of the scale */\n const vals = sections.flatMap((d) => d.scaleInfo.domain);\n if (vals[0] < vals[vals.length - 1]) {\n // age axes\n return [Math.min(...vals), Math.max(...vals)];\n }\n // Normal axes like height\n return [Math.max(...vals), Math.min(...vals)];\n };\n\n scale.invert = (pixelHeight) => {\n /** Invert the scale to get the age at a given pixel height */\n // Iterate through the sections to find the correct one\n for (const scale of scales) {\n const range = scale.range();\n if (\n pixelHeight > Math.min(...range) &&\n pixelHeight <= Math.max(...range)\n ) {\n console.log(\"Inverting scale at pixel height\", pixelHeight);\n return scale.invert(pixelHeight);\n }\n }\n return null;\n };\n\n scale.clamp = (clamp: boolean) => {\n /** Clamp all constituent scales */\n for (const s of scales) {\n s.clamp(clamp);\n }\n };\n\n return scale;\n}\n\n/** Collapse sections separated by unconformities that are smaller than a given pixel height. */\nexport function collapseUnconformitiesByPixelHeight<T extends UnitLong>(\n sections: SectionInfoWithScale<T>[],\n threshold: number,\n opts: ColumnScaleOptions,\n): SectionInfoWithScale<T>[] {\n const newSections = [];\n let currentSection: SectionInfoWithScale<T> | null = null;\n for (const nextSection of sections) {\n if (currentSection == null) {\n currentSection = nextSection;\n continue;\n }\n let heights: [number, number];\n let pxHeights: [number, number];\n if (opts.axisType !== ColumnAxisType.AGE) {\n heights = [nextSection.t_pos, currentSection.b_pos];\n } else {\n heights = [nextSection.t_age, currentSection.b_age];\n }\n\n const _diff = (vals: number[]) => {\n return Math.abs(vals[0] - vals[1]);\n };\n\n pxHeights = [\n _diff(heights.map(nextSection.scaleInfo.scale)),\n _diff(heights.map(currentSection.scaleInfo.scale)),\n ];\n\n const pxHeight = Math.min(...pxHeights);\n\n if (pxHeight < threshold) {\n let t_pos: number;\n let b_pos: number;\n if (\n opts.axisType == ColumnAxisType.AGE ||\n opts.axisType == ColumnAxisType.DEPTH\n ) {\n t_pos = Math.min(currentSection.t_pos, nextSection.t_pos);\n b_pos = Math.max(currentSection.b_pos, nextSection.b_pos);\n } else {\n t_pos = Math.max(currentSection.t_pos, nextSection.t_pos);\n b_pos = Math.min(currentSection.b_pos, nextSection.b_pos);\n }\n\n // We need to merge the sections\n const compositeSection0: SectionInfo<T> = {\n units: [...currentSection.units, ...nextSection.units],\n section_id: [\n ...ensureArray(currentSection.section_id),\n ...ensureArray(nextSection.section_id),\n ],\n t_age: Math.min(currentSection.t_age, nextSection.t_age),\n b_age: Math.max(currentSection.b_age, nextSection.b_age),\n t_pos,\n b_pos,\n };\n\n currentSection = addScaleToSection(compositeSection0, opts);\n } else {\n // We need to keep the section\n newSections.push(currentSection);\n currentSection = nextSection;\n }\n }\n if (currentSection != null) {\n newSections.push(currentSection);\n }\n\n return newSections;\n}\n"],"names":["ColumnAxisType","$d6XP3$ColumnAxisType","scaleLinear","$d6XP3$scaleLinear","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$iWhRv","$dcPBY","$76iYI","$8054a162cb094378$export$e7184dd8bb3302ed","inputScales","unconformityHeight","totalHeight","lastSectionTopHeight","packages2","group","domain","scale","b_age","t_age","key","push","$8054a162cb094378$export$d6235b492bceb8c5","offset","paddingTop","Math","abs","sections","$8054a162cb094378$export$67442a0f5bef147b","packages","map","d","scaleInfo","sections1","i","$8054a162cb094378$export$7d3f3129a1a4b84e","opts","$8054a162cb094378$var$addScaleToSection","t_pos","b_pos","units","_range","axisType","AGE","$8054a162cb094378$var$buildSectionScale","data","pixelHeight","targetUnitHeight","minPixelScale","minSectionHeight","hybridScale","$8054a162cb094378$var$findSectionHeightRange","min","max","DEPTH","ORDINAL","HEIGHT","dAge","_pixelScale","pixelScale","type","HybridScaleType","EquidistantSurfaces","buildHybridScale","pixelOffset","$8054a162cb094378$var$findAverageUnitHeight","unitHeights","getUnitHeightRange","reduce","a","b","length","def","_scale","heightScale","range","domain0","range0","copy","clamp","_heightScale","$8054a162cb094378$export$3ada7641926a616d","interpolateUnconformities","scales","lastScale","section","lastDomain","lastRange","currentDomain","currentRange","interpScale","age","s","vals","flatMap","invert","console","log","$8054a162cb094378$export$edbf01b435c75274","threshold","newSections","currentSection","nextSection","heights","_diff","pxHeight","section_id","ensureArray","buildCompositeScaleInfo","createPackageScale","finalizeSectionHeights","computeSectionHeights","createCompositeScale","collapseUnconformitiesByPixelHeight"],"version":3,"file":"column-views.a596b1f5.js.map","sourceRoot":"../../../../"}