@macrostrat/map-interface 1.3.0 → 1.3.2

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 (247) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/cjs/index.js +10 -10
  3. package/dist/cjs/{context-panel.3061a63e.js → map-interface.0e252a74.js} +3 -3
  4. package/dist/cjs/map-interface.0e252a74.js.map +1 -0
  5. package/dist/cjs/{main.module.13eb33f8.css → map-interface.1b386e07.css} +1 -1
  6. package/dist/cjs/{main.module.13eb33f8.css.map → map-interface.1b386e07.css.map} +1 -1
  7. package/dist/cjs/{header.356d9f4c.js → map-interface.1d19056e.js} +4 -4
  8. package/dist/cjs/{header.356d9f4c.js.map → map-interface.1d19056e.js.map} +1 -1
  9. package/dist/cjs/{main.module.becc2fe7.css → map-interface.26497065.css} +1 -1
  10. package/dist/cjs/{main.module.becc2fe7.css.map → map-interface.26497065.css.map} +1 -1
  11. package/dist/cjs/{main.module.a3a78b0d.js → map-interface.31742bd3.js} +1 -1
  12. package/dist/cjs/{main.module.a3a78b0d.js.map → map-interface.31742bd3.js.map} +1 -1
  13. package/dist/cjs/{expansion-panel.ef757efe.js → map-interface.354aaa39.js} +4 -4
  14. package/dist/cjs/map-interface.354aaa39.js.map +1 -0
  15. package/dist/cjs/{location-panel.c5a55484.js → map-interface.3934d6d6.js} +5 -5
  16. package/dist/cjs/{location-panel.c5a55484.js.map → map-interface.3934d6d6.js.map} +1 -1
  17. package/dist/cjs/{main.module.16d04f5b.css → map-interface.4a401c1f.css} +1 -1
  18. package/dist/cjs/{main.module.16d04f5b.css.map → map-interface.4a401c1f.css.map} +1 -1
  19. package/dist/cjs/{xray.a23f8660.js → map-interface.4c5addca.js} +2 -2
  20. package/dist/cjs/map-interface.4c5addca.js.map +1 -0
  21. package/dist/cjs/{helpers.5a745a3a.js → map-interface.5813e876.js} +2 -2
  22. package/dist/cjs/map-interface.5813e876.js.map +1 -0
  23. package/dist/cjs/{location-info.99003993.js → map-interface.64823b7c.js} +3 -3
  24. package/dist/cjs/{location-info.99003993.js.map → map-interface.64823b7c.js.map} +1 -1
  25. package/dist/cjs/{main.module.e958948e.js → map-interface.70458f75.js} +1 -1
  26. package/dist/cjs/{main.module.e958948e.js.map → map-interface.70458f75.js.map} +1 -1
  27. package/dist/cjs/{headers.d9f3e324.js → map-interface.7509f2c1.js} +3 -3
  28. package/dist/cjs/{headers.d9f3e324.js.map → map-interface.7509f2c1.js.map} +1 -1
  29. package/dist/cjs/{dev.079a11ee.js → map-interface.853e0edd.js} +5 -5
  30. package/dist/cjs/{dev.079a11ee.js.map → map-interface.853e0edd.js.map} +1 -1
  31. package/dist/cjs/{hash-string.62e84f08.js → map-interface.860fcb7e.js} +2 -2
  32. package/dist/cjs/map-interface.860fcb7e.js.map +1 -0
  33. package/dist/cjs/{controls.9d7ddc44.js → map-interface.99a048dc.js} +3 -3
  34. package/dist/cjs/{controls.9d7ddc44.js.map → map-interface.99a048dc.js.map} +1 -1
  35. package/dist/cjs/{main.module.e392b038.js → map-interface.a9fe0f5d.js} +1 -1
  36. package/dist/cjs/{main.module.e392b038.js.map → map-interface.a9fe0f5d.js.map} +1 -1
  37. package/dist/cjs/{main.module.ccec47df.js → map-interface.abe5fe65.js} +1 -1
  38. package/dist/cjs/{main.module.ccec47df.js.map → map-interface.abe5fe65.js.map} +1 -1
  39. package/dist/cjs/{main.module.338867af.css → map-interface.adb45df9.css} +1 -1
  40. package/dist/cjs/{main.module.338867af.css.map → map-interface.adb45df9.css.map} +1 -1
  41. package/dist/cjs/{main.module.e872989b.css → map-interface.ae4c52a6.css} +1 -1
  42. package/dist/cjs/{main.module.e872989b.css.map → map-interface.ae4c52a6.css.map} +1 -1
  43. package/dist/cjs/{container.fc5b1a23.js → map-interface.bda26b27.js} +4 -4
  44. package/dist/cjs/{container.fc5b1a23.js.map → map-interface.bda26b27.js.map} +1 -1
  45. package/dist/cjs/{main.module.0bbfa859.js → map-interface.cd485bb4.js} +1 -1
  46. package/dist/cjs/{main.module.0bbfa859.js.map → map-interface.cd485bb4.js.map} +1 -1
  47. package/dist/cjs/{utils.09cef979.js → map-interface.dfaad4a1.js} +1 -1
  48. package/dist/cjs/{utils.09cef979.js.map → map-interface.dfaad4a1.js.map} +1 -1
  49. package/dist/cjs/{map-view.e031052e.js → map-interface.e7194f92.js} +7 -5
  50. package/dist/cjs/map-interface.e7194f92.js.map +1 -0
  51. package/dist/cjs/{vector-tile-features.77121785.js → map-interface.e9bcd5c0.js} +6 -6
  52. package/dist/cjs/map-interface.e9bcd5c0.js.map +1 -0
  53. package/dist/cjs/{map-page.3c65558b.js → map-interface.f1eec151.js} +13 -12
  54. package/dist/cjs/map-interface.f1eec151.js.map +1 -0
  55. package/dist/cjs/{tile-extent.06a4b2ed.js → map-interface.f8826069.js} +12 -17
  56. package/dist/cjs/map-interface.f8826069.js.map +1 -0
  57. package/dist/cjs/{utils.26f02633.js → map-interface.ffb109ef.js} +1 -1
  58. package/dist/cjs/{utils.26f02633.js.map → map-interface.ffb109ef.js.map} +1 -1
  59. package/dist/esm/index.d.ts +43 -28
  60. package/dist/esm/index.d.ts.map +1 -1
  61. package/dist/esm/index.js +10 -10
  62. package/dist/esm/{main.module.58922c04.js → map-interface.01826888.js} +1 -1
  63. package/dist/esm/{main.module.58922c04.js.map → map-interface.01826888.js.map} +1 -1
  64. package/dist/esm/{main.module.504d756b.js → map-interface.065737fe.js} +1 -1
  65. package/dist/esm/{main.module.504d756b.js.map → map-interface.065737fe.js.map} +1 -1
  66. package/dist/esm/{context-panel.5dae1a8c.js → map-interface.0b1aa8f2.js} +4 -4
  67. package/dist/esm/map-interface.0b1aa8f2.js.map +1 -0
  68. package/dist/esm/{xray.c0663c25.js → map-interface.1843c708.js} +2 -2
  69. package/dist/esm/map-interface.1843c708.js.map +1 -0
  70. package/dist/esm/{headers.32db7784.js → map-interface.1db44824.js} +4 -4
  71. package/dist/esm/{headers.32db7784.js.map → map-interface.1db44824.js.map} +1 -1
  72. package/dist/esm/map-interface.22ea3934.js +41 -0
  73. package/dist/esm/map-interface.22ea3934.js.map +1 -0
  74. package/dist/esm/{dev.3d88888b.js → map-interface.25a708b1.js} +5 -5
  75. package/dist/esm/{dev.3d88888b.js.map → map-interface.25a708b1.js.map} +1 -1
  76. package/dist/esm/{container.1c2aa81d.js → map-interface.27587c50.js} +5 -5
  77. package/dist/esm/{container.1c2aa81d.js.map → map-interface.27587c50.js.map} +1 -1
  78. package/dist/esm/{utils.d40349f0.js → map-interface.3033c825.js} +1 -1
  79. package/dist/esm/{utils.d40349f0.js.map → map-interface.3033c825.js.map} +1 -1
  80. package/dist/esm/{location-info.4b39fdfc.js → map-interface.3ef9d0ae.js} +3 -3
  81. package/dist/esm/{location-info.4b39fdfc.js.map → map-interface.3ef9d0ae.js.map} +1 -1
  82. package/dist/esm/{expansion-panel.465b822f.js → map-interface.3f07937e.js} +5 -5
  83. package/dist/esm/map-interface.3f07937e.js.map +1 -0
  84. package/dist/esm/{helpers.d32a342a.js → map-interface.45814073.js} +2 -2
  85. package/dist/esm/map-interface.45814073.js.map +1 -0
  86. package/dist/esm/{main.module.9c57cc95.js → map-interface.473f1f2b.js} +1 -1
  87. package/dist/esm/{main.module.9c57cc95.js.map → map-interface.473f1f2b.js.map} +1 -1
  88. package/dist/esm/{controls.8efb9074.js → map-interface.50edfdfd.js} +4 -4
  89. package/dist/esm/{controls.8efb9074.js.map → map-interface.50edfdfd.js.map} +1 -1
  90. package/dist/esm/{vector-tile-features.53b48d66.js → map-interface.786d6e58.js} +7 -7
  91. package/dist/esm/map-interface.786d6e58.js.map +1 -0
  92. package/dist/esm/{main.module.5eb366de.js → map-interface.957e414c.js} +1 -1
  93. package/dist/esm/{main.module.5eb366de.js.map → map-interface.957e414c.js.map} +1 -1
  94. package/dist/esm/{map-view.d1c5b113.js → map-interface.9ce3d553.js} +8 -6
  95. package/dist/esm/map-interface.9ce3d553.js.map +1 -0
  96. package/dist/esm/{utils.122d1f2d.js → map-interface.c4fa120d.js} +1 -1
  97. package/dist/esm/{utils.122d1f2d.js.map → map-interface.c4fa120d.js.map} +1 -1
  98. package/dist/esm/{main.module.303f6d99.js → map-interface.c99b53b6.js} +1 -1
  99. package/dist/esm/{main.module.303f6d99.js.map → map-interface.c99b53b6.js.map} +1 -1
  100. package/dist/esm/{header.a3da6906.js → map-interface.e1493866.js} +5 -5
  101. package/dist/esm/{header.a3da6906.js.map → map-interface.e1493866.js.map} +1 -1
  102. package/dist/esm/{hash-string.836601b2.js → map-interface.e50c290f.js} +2 -2
  103. package/dist/esm/{hash-string.836601b2.js.map → map-interface.e50c290f.js.map} +1 -1
  104. package/dist/esm/{location-panel.c9942d88.js → map-interface.e5349e97.js} +6 -6
  105. package/dist/esm/{location-panel.c9942d88.js.map → map-interface.e5349e97.js.map} +1 -1
  106. package/dist/esm/{map-page.660a1723.js → map-interface.f4e2f84e.js} +14 -13
  107. package/dist/esm/map-interface.f4e2f84e.js.map +1 -0
  108. package/dist/node/index.js +1 -1
  109. package/dist/node/index.js.map +1 -1
  110. package/dist/node/{main.module.2d51c752.css → map-interface.07882229.css} +1 -1
  111. package/dist/node/map-interface.07882229.css.map +1 -0
  112. package/dist/node/map-interface.10f5ef81.js +2 -0
  113. package/dist/node/map-interface.10f5ef81.js.map +1 -0
  114. package/dist/node/map-interface.1a5eecac.js +2 -0
  115. package/dist/node/map-interface.1a5eecac.js.map +1 -0
  116. package/dist/node/{main.module.8a9943af.css → map-interface.1be49df8.css} +1 -1
  117. package/dist/node/map-interface.1be49df8.css.map +1 -0
  118. package/dist/node/map-interface.20c346ba.js +2 -0
  119. package/dist/node/map-interface.20c346ba.js.map +1 -0
  120. package/dist/node/map-interface.2d12b35c.js +2 -0
  121. package/dist/node/map-interface.2d12b35c.js.map +1 -0
  122. package/dist/node/map-interface.3ea55e0c.js +2 -0
  123. package/dist/node/map-interface.3ea55e0c.js.map +1 -0
  124. package/dist/node/map-interface.42a4b05a.js +2 -0
  125. package/dist/node/map-interface.42a4b05a.js.map +1 -0
  126. package/dist/node/{main.module.29a15f3d.css → map-interface.42ef081d.css} +1 -1
  127. package/dist/node/map-interface.42ef081d.css.map +1 -0
  128. package/dist/node/map-interface.47b81f95.js +2 -0
  129. package/dist/node/map-interface.47b81f95.js.map +1 -0
  130. package/dist/node/map-interface.55fa679c.js +2 -0
  131. package/dist/node/map-interface.55fa679c.js.map +1 -0
  132. package/dist/node/map-interface.62b147ce.js +2 -0
  133. package/dist/node/map-interface.62b147ce.js.map +1 -0
  134. package/dist/node/map-interface.713361a4.js +2 -0
  135. package/dist/node/map-interface.713361a4.js.map +1 -0
  136. package/dist/node/map-interface.722387fb.js +2 -0
  137. package/dist/node/map-interface.722387fb.js.map +1 -0
  138. package/dist/node/map-interface.83fa8028.js +2 -0
  139. package/dist/node/map-interface.83fa8028.js.map +1 -0
  140. package/dist/node/map-interface.971af4bc.js +2 -0
  141. package/dist/node/map-interface.971af4bc.js.map +1 -0
  142. package/dist/node/map-interface.992dea73.js +2 -0
  143. package/dist/node/map-interface.992dea73.js.map +1 -0
  144. package/dist/node/map-interface.b14f08e8.js +2 -0
  145. package/dist/node/map-interface.b14f08e8.js.map +1 -0
  146. package/dist/node/map-interface.bc0fb98b.js +2 -0
  147. package/dist/node/map-interface.bc0fb98b.js.map +1 -0
  148. package/dist/node/{main.module.3943144e.css → map-interface.bd78832e.css} +1 -1
  149. package/dist/node/map-interface.bd78832e.css.map +1 -0
  150. package/dist/node/map-interface.cf540298.js +2 -0
  151. package/dist/node/map-interface.cf540298.js.map +1 -0
  152. package/dist/node/{main.module.91a06e96.css → map-interface.d2fce135.css} +1 -1
  153. package/dist/node/map-interface.d2fce135.css.map +1 -0
  154. package/dist/node/map-interface.d92b296e.js +2 -0
  155. package/dist/node/map-interface.d92b296e.js.map +1 -0
  156. package/dist/node/map-interface.d9814996.js +2 -0
  157. package/dist/node/map-interface.d9814996.js.map +1 -0
  158. package/dist/node/map-interface.e0032d67.js +2 -0
  159. package/dist/node/map-interface.e0032d67.js.map +1 -0
  160. package/dist/node/map-interface.eb663cae.js +2 -0
  161. package/dist/node/map-interface.eb663cae.js.map +1 -0
  162. package/dist/node/map-interface.ed6b5586.js +2 -0
  163. package/dist/node/map-interface.ed6b5586.js.map +1 -0
  164. package/dist/node/map-interface.f4d2a5eb.js +2 -0
  165. package/dist/node/map-interface.f4d2a5eb.js.map +1 -0
  166. package/package.json +9 -9
  167. package/src/container.ts +3 -3
  168. package/src/context-panel/index.ts +8 -8
  169. package/src/dev/map-page.ts +5 -4
  170. package/src/dev/tile-extent.ts +17 -18
  171. package/src/dev/vector-tile-features.ts +11 -7
  172. package/src/dev/xray.ts +7 -3
  173. package/src/expansion-panel/headers.ts +1 -1
  174. package/src/expansion-panel/index.ts +4 -4
  175. package/src/helpers.ts +12 -5
  176. package/src/location-info/hash-string.ts +2 -2
  177. package/src/location-panel/header.ts +3 -3
  178. package/src/map-view.ts +5 -3
  179. package/dist/cjs/context-panel.3061a63e.js.map +0 -1
  180. package/dist/cjs/expansion-panel.ef757efe.js.map +0 -1
  181. package/dist/cjs/hash-string.62e84f08.js.map +0 -1
  182. package/dist/cjs/helpers.5a745a3a.js.map +0 -1
  183. package/dist/cjs/map-page.3c65558b.js.map +0 -1
  184. package/dist/cjs/map-view.e031052e.js.map +0 -1
  185. package/dist/cjs/tile-extent.06a4b2ed.js.map +0 -1
  186. package/dist/cjs/vector-tile-features.77121785.js.map +0 -1
  187. package/dist/cjs/xray.a23f8660.js.map +0 -1
  188. package/dist/esm/context-panel.5dae1a8c.js.map +0 -1
  189. package/dist/esm/expansion-panel.465b822f.js.map +0 -1
  190. package/dist/esm/helpers.d32a342a.js.map +0 -1
  191. package/dist/esm/map-page.660a1723.js.map +0 -1
  192. package/dist/esm/map-view.d1c5b113.js.map +0 -1
  193. package/dist/esm/tile-extent.ca526996.js +0 -46
  194. package/dist/esm/tile-extent.ca526996.js.map +0 -1
  195. package/dist/esm/vector-tile-features.53b48d66.js.map +0 -1
  196. package/dist/esm/xray.c0663c25.js.map +0 -1
  197. package/dist/node/container.ab523076.js +0 -2
  198. package/dist/node/container.ab523076.js.map +0 -1
  199. package/dist/node/context-panel.0ae29ecf.js +0 -2
  200. package/dist/node/context-panel.0ae29ecf.js.map +0 -1
  201. package/dist/node/controls.511f309b.js +0 -2
  202. package/dist/node/controls.511f309b.js.map +0 -1
  203. package/dist/node/dev.709287ba.js +0 -2
  204. package/dist/node/dev.709287ba.js.map +0 -1
  205. package/dist/node/expansion-panel.62240ee3.js +0 -2
  206. package/dist/node/expansion-panel.62240ee3.js.map +0 -1
  207. package/dist/node/hash-string.3fc8ceb0.js +0 -2
  208. package/dist/node/hash-string.3fc8ceb0.js.map +0 -1
  209. package/dist/node/header.98a4cf12.js +0 -2
  210. package/dist/node/header.98a4cf12.js.map +0 -1
  211. package/dist/node/headers.2581f6d9.js +0 -2
  212. package/dist/node/headers.2581f6d9.js.map +0 -1
  213. package/dist/node/helpers.6bda171f.js +0 -2
  214. package/dist/node/helpers.6bda171f.js.map +0 -1
  215. package/dist/node/location-info.db66c3fb.js +0 -2
  216. package/dist/node/location-info.db66c3fb.js.map +0 -1
  217. package/dist/node/location-panel.dd1d2b37.js +0 -2
  218. package/dist/node/location-panel.dd1d2b37.js.map +0 -1
  219. package/dist/node/main.module.29a15f3d.css.map +0 -1
  220. package/dist/node/main.module.2d51c752.css.map +0 -1
  221. package/dist/node/main.module.3943144e.css.map +0 -1
  222. package/dist/node/main.module.3a8fef67.js +0 -2
  223. package/dist/node/main.module.3a8fef67.js.map +0 -1
  224. package/dist/node/main.module.434acaf9.js +0 -2
  225. package/dist/node/main.module.434acaf9.js.map +0 -1
  226. package/dist/node/main.module.5d5ab665.js +0 -2
  227. package/dist/node/main.module.5d5ab665.js.map +0 -1
  228. package/dist/node/main.module.7c928a6f.js +0 -2
  229. package/dist/node/main.module.7c928a6f.js.map +0 -1
  230. package/dist/node/main.module.8a9943af.css.map +0 -1
  231. package/dist/node/main.module.91a06e96.css.map +0 -1
  232. package/dist/node/main.module.e200d631.js +0 -2
  233. package/dist/node/main.module.e200d631.js.map +0 -1
  234. package/dist/node/map-page.a9602658.js +0 -2
  235. package/dist/node/map-page.a9602658.js.map +0 -1
  236. package/dist/node/map-view.663640da.js +0 -2
  237. package/dist/node/map-view.663640da.js.map +0 -1
  238. package/dist/node/tile-extent.28db5d2c.js +0 -2
  239. package/dist/node/tile-extent.28db5d2c.js.map +0 -1
  240. package/dist/node/utils.274d0452.js +0 -2
  241. package/dist/node/utils.274d0452.js.map +0 -1
  242. package/dist/node/utils.dd92f725.js +0 -2
  243. package/dist/node/utils.dd92f725.js.map +0 -1
  244. package/dist/node/vector-tile-features.b5a23b71.js +0 -2
  245. package/dist/node/vector-tile-features.b5a23b71.js.map +0 -1
  246. package/dist/node/xray.bce11e7b.js +0 -2
  247. package/dist/node/xray.bce11e7b.js.map +0 -1
@@ -61,12 +61,12 @@ function CopyLinkButton({ itemName, children, onClick, ...rest }) {
61
61
  icon: "error",
62
62
  timeout: 1000,
63
63
  });
64
- }
64
+ },
65
65
  );
66
66
  },
67
67
  ...rest,
68
68
  },
69
- children ?? "Copy link"
69
+ children ?? "Copy link",
70
70
  );
71
71
  }
72
72
 
@@ -127,6 +127,6 @@ export function InfoDrawerHeader(props: InfoDrawerHeaderProps) {
127
127
  icon: "cross",
128
128
  onClick: onClose,
129
129
  }),
130
- ]
130
+ ],
131
131
  );
132
132
  }
package/src/map-view.ts CHANGED
@@ -45,7 +45,7 @@ export interface MapViewProps extends MapboxCoreOptions {
45
45
  mapPosition?: MapPosition;
46
46
  initializeMap?: (
47
47
  container: HTMLElement,
48
- args: MapboxOptionsExt
48
+ args: MapboxOptionsExt,
49
49
  ) => mapboxgl.Map;
50
50
  onMapLoaded?: (map: mapboxgl.Map) => void;
51
51
  onStyleLoaded?: (map: mapboxgl.Map) => void;
@@ -73,6 +73,8 @@ function defaultInitializeMap(container, args: MapboxOptionsExt = {}) {
73
73
  logoPosition: "bottom-left",
74
74
  trackResize: true,
75
75
  antialias: true,
76
+ // This is a legacy option for Mapbox GL v2
77
+ // @ts-ignore
76
78
  optimizeForTerrain: true,
77
79
  ...rest,
78
80
  });
@@ -234,7 +236,7 @@ export function MapView(props: MapViewProps) {
234
236
  "is-rotated": mapIsRotated ?? false,
235
237
  "is-3d-available": mapUse3D ?? false,
236
238
  },
237
- `${_projection}-projection`
239
+ `${_projection}-projection`,
238
240
  );
239
241
 
240
242
  const parentClassName = classNames({
@@ -258,7 +260,7 @@ export function MapView(props: MapViewProps) {
258
260
  }),
259
261
  h(MapTerrainManager, { mapUse3D, terrainSourceID, style }),
260
262
  children,
261
- ]
263
+ ],
262
264
  );
263
265
  }
264
266
 
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,0BAAI,CAAA,GAAA,gDAAI,EAAE,MAAM,CAAC,CAAA,GAAA,mDAAK;AAE5B,MAAM,uCAAiB,wBAAE,CAAA,GAAA,8BAAM,GAAG;IAAE,MAAM;AAAG;AAEtC,SAAS,0CAAc,aAC5B,YAAY,gBACZ,OAAO,UACP,SAAS,cACT,QAAQ,YACR,OAAO,eACP,KAAK,EACN;IACC,OAAO,wBAAE,CAAA,GAAA,6BAAK,GAAG;QACf,WAAW;QACX,MAAM,YAAY,uCAAiB;eACnC;QACA,SAAS;iBACT;QACA,QAAQ,UAAU,CAAC;eACnB;IACF;AACF;AAEO,SAAS,0CAAiB,KAAK;IACpC,MAAM,YAAY,CAAA,GAAA,yCAAW,EAAE,CAAC,IAAM,EAAE,SAAS;IACjD,OAAO,wBAAE,2CAAe;QAAE,GAAG,KAAK;mBAAE;IAAU;AAChD;AAgBO,SAAS,0CAAe,aAC7B,SAAS,YACT,QAAQ,iBACR,gBAAgB,aAChB,QAAQ,qBACR,gBAAgB,oBAChB,eAAe,cACf,MAAM,SACN,KAAK,SACL,QAAQ,CAAC,GACW;IACpB,IAAI,gBAAwC;IAC5C,IAAI,gBAAgB,MAClB,gBAAgB,wBAAE,qBAAqB;IAGzC,IAAI,iBAAyC;IAC7C,IAAI,SAAS,QAAQ,kBAAkB;QACrC,IAAI,OAAO,UAAU,UACnB,iBAAiB,wBAAE,CAAA,GAAA,2BAAG,GAAG;YAAE,SAAS;YAAM,WAAW;QAAK,GAAG;aAE7D,iBAAiB;;IAIrB,IAAI,kBAAkB,MACpB,iBAAiB,wBAAE;QAAC;QAAgB,wBAAE,CAAA,GAAA,oCAAK;KAAG;IAGhD,OAAO,wBAAE,wBAAwB;mBAAE;QAAW,OAAO;mBAAE;QAAM;IAAE,GAAG;QAChE,wBAAE,qBAAqB;YACrB,wBACE,CAAA,GAAA,6BAAK,GACL;gBACE,WAAW;gBACX,OAAO;4BAAE;oBAAQ,GAAG,KAAK;gBAAC;YAC5B,GACA;gBAAC;gBAAgB;gBAAU;aAAc;SAE5C;QACD,wBAAE,EAAE,CAAC,iBAAiB,MACpB,CAAA,GAAA,2BAAG,GACH;YAAE,WAAW;QAAgB,GAC7B;KAEH;AACH","sources":["packages/map-interface/src/context-panel/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { Navbar, Button, Spinner, Card, Text } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMapStatus } from \"@macrostrat/mapbox-react\";\nimport { Spacer } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\nconst spinnerElement = h(Spinner, { size: 16 });\n\nexport function LoadingButton({\n isLoading = false,\n onClick,\n active = false,\n large = true,\n icon = \"menu\",\n style,\n}) {\n return h(Button, {\n className: \"loading-button\",\n icon: isLoading ? spinnerElement : icon,\n large,\n minimal: true,\n onClick,\n active: active && !isLoading,\n style,\n });\n}\n\nexport function MapLoadingButton(props) {\n const isLoading = useMapStatus((s) => s.isLoading);\n return h(LoadingButton, { ...props, isLoading });\n}\n\ntype AnyChildren = React.ReactNode;\n\nexport interface FloatingNavbarProps {\n className?: string;\n children?: AnyChildren;\n headerElement?: AnyChildren;\n title?: AnyChildren;\n statusElement?: AnyChildren;\n rightElement?: AnyChildren;\n height?: number | string;\n width?: number | string;\n style?: object;\n}\n\nexport function FloatingNavbar({\n className,\n children,\n headerElement = null,\n title = null,\n statusElement = null,\n rightElement = null,\n height,\n width,\n style = {},\n}: FloatingNavbarProps) {\n let _rightElement: React.ReactNode | null = null;\n if (rightElement != null) {\n _rightElement = h(\"div.right-element\", rightElement);\n }\n\n let _headerElement: React.ReactNode | null = headerElement;\n if (title != null && _headerElement == null) {\n if (typeof title === \"string\") {\n _headerElement = h(Text, { tagName: \"h2\", ellipsize: true }, title);\n } else {\n _headerElement = title;\n }\n }\n\n if (_headerElement != null) {\n _headerElement = h([_headerElement, h(Spacer)]);\n }\n\n return h(\"div.searchbar-holder\", { className, style: { width } }, [\n h(\"div.navbar-holder\", [\n h(\n Navbar,\n {\n className: \"searchbar navbar panel\",\n style: { height, ...style },\n },\n [_headerElement, children, _rightElement]\n ),\n ]),\n h.if(statusElement != null)(\n Card,\n { className: \"status-tongue\" },\n statusElement\n ),\n ]);\n}\n"],"names":[],"version":3,"file":"context-panel.3061a63e.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,0BAAI,CAAA,GAAA,gDAAI,EAAE,MAAM,CAAC,CAAA,GAAA,mDAAK;AAE5B,SAAS,0CAAsB,KAAK;IAClC,MAAM,YAAE,QAAQ,YAAE,QAAQ,YAAE,QAAQ,aAAE,SAAS,SAAE,KAAK,kBAAE,cAAc,EAAE,GACtE;IACF,MAAM,OAAO,WAAW,eAAe;IACvC,OAAO,wBACL,CAAA,GAAA,sCAAW,GACX;QACE,WAAW,CAAA,GAAA,2CAAS,EAAE,0BAA0B;QAChD,SAAS;eACT;QACA,WAAW;IACb,GACA;QAAC;QAAU,wBAAE,CAAA,GAAA,2BAAG,GAAG;kBAAE;YAAM,WAAW;QAAuB;KAAG;AAEpE;AAEA,SAAS,yCAAmB,KAAK;IAC/B,IAAI,SACF,KAAK,kBACL,iBAAiB,gBACjB,QAAQ,YACR,QAAQ,YACR,QAAQ,YACR,WAAW,KAAO,kBAClB,gBAAgB,iBAChB,SAAS,EACV,GAAG;IACJ,MAAM,CAAC,QAAQ,QAAQ,GAAG,CAAA,GAAA,qBAAO,EAAE,YAAY;IAE/C,MAAM,YAAY;QAChB;QACA,QAAQ,CAAC;IACX;IAEA,OAAO,wBACL,4BACA;QACE,WAAW,CAAA,GAAA,2CAAS,EAAE,WAAW;YAC/B,UAAU;YACV,WAAW,CAAC;QACd;IACF,GACA;QACE,wBACE,2CACA;YACE,UAAU;YACV,UAAU;mBACV;4BACA;QACF,GACA,wBAAE,oCAAoC;YACpC,wBAAE,gCAAgC;YAClC;YACA;SACD;QAEH,wBAAE,CAAA,GAAA,+BAAO,GAAG;oBAAE;QAAO,GAAG,wBAAE,0BAA0B,MAAM;KAC3D;AAEL;AAEO,SAAS,0CAAiB,KAAK;IACpC,IAAI,SAAE,KAAK,YAAE,QAAQ,aAAE,SAAS,iBAAE,gBAAgB,MAAM,GAAG;IAC3D,OAAO,wBAAE,0BAA0B;mBAAE;IAAU,GAAG;QAChD,wBAAE,qBAAqB,MAAM,iBAAiB,wBAAE,MAAM;QACtD,wBAAE,qBAAqB,MAAM;KAC9B;AACH;AAEA,SAAS,0CAAe,KAAK;IAC3B,OAAO,wBAAE,0CAAoB;QAC3B,GAAG,KAAK;QACR,WAAW;IACb;AACF;AAEA,SAAS,0CAAkB,KAAK;IAC9B,OAAO,wBAAE,0CAAoB;QAC3B,GAAG,KAAK;QACR,WAAW;QACX,gBAAgB;IAClB;AACF;AAEA,SAAS,0CAAuB,KAAK;IACnC,IAAI,SAAE,KAAK,YAAE,QAAQ,SAAE,KAAK,iBAAE,aAAa,aAAE,SAAS,EAAE,GAAG;IAC3D,MAAM,CAAC,QAAQ,UAAU,GAAG,CAAA,GAAA,qBAAO,EAAE;IACrC,kBAAkB,wBAAE;QAAC,wBAAE,aAAa;QAAQ;KAAM;IAClD,OAAO,wBAAE,0BAA0B;mBAAE;IAAU,GAAG;QAChD,wBAAE,+BAA+B;YAC/B,wBAAE,iCAAiC;YACnC,wBAAE,iCAAiC;gBACjC,wBAAE,CAAA,GAAA,6BAAK,GAAG;oBACR,OAAO;oBACP,SAAS;oBACT,QAAQ;oBACR,SAAS,IAAM,UAAU,CAAC;oBAC1B,MAAM;gBACR;aACD;SACF;QACD,wBACE,CAAA,GAAA,+BAAO,GACP;oBAAE;QAAO,GACT,wBAAE,mCAAmC,MAAM;KAE9C;AACH;AAEA,SAAS,0CAAc,SAAE,KAAK,aAAE,SAAS,YAAE,QAAQ,EAAE;IACnD,OAAO,wBAAE,sBAAsB;mBAAE;IAAU,GAAG;QAC5C,wBAAE,qCAAqC;QACvC,wBAAE,mCAAmC,MAAM;KAC5C;AACH","sources":["packages/map-interface/src/expansion-panel/index.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { Collapse, Icon } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport classNames from \"classnames\";\nimport { Button } from \"@blueprintjs/core\";\nimport { PanelSubhead } from \"./headers\";\n\nconst h = hyper.styled(styles);\n\nfunction ExpansionPanelSummary(props) {\n const { expanded, children, onChange, className, title, titleComponent } =\n props;\n const icon = expanded ? \"chevron-up\" : \"chevron-down\";\n return h(\n PanelSubhead,\n {\n className: classNames(\"expansion-panel-header\", className),\n onClick: onChange,\n title,\n component: titleComponent,\n },\n [children, h(Icon, { icon, className: \"expansion-panel-icon\" })]\n );\n}\n\nfunction ExpansionPanelBase(props) {\n let {\n title,\n titleComponent = \"h3\",\n children,\n expanded,\n helpText,\n onChange = () => {},\n sideComponent = null,\n className,\n } = props;\n const [isOpen, setOpen] = useState(expanded || false);\n\n const onChange_ = () => {\n onChange();\n setOpen(!isOpen);\n };\n\n return h(\n \"div.expansion-panel-base\",\n {\n className: classNames(className, {\n expanded: isOpen,\n collapsed: !isOpen,\n }),\n },\n [\n h(\n ExpansionPanelSummary,\n {\n onChange: onChange_,\n expanded: isOpen,\n title,\n titleComponent,\n },\n h(\"div.expansion-summary-title-help\", [\n h(\"span.expansion-panel-subtext\", helpText),\n \" \",\n sideComponent,\n ])\n ),\n h(Collapse, { isOpen }, h(\"div.expansion-children\", null, children)),\n ]\n );\n}\n\nexport function InfoPanelSection(props) {\n let { title, children, className, headerElement = null } = props;\n return h(\"div.info-panel-section\", { className }, [\n h(\"div.panel-subhead\", null, headerElement ?? h(\"h3\", title)),\n h(\"div.panel-content\", null, children),\n ]);\n}\n\nfunction ExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel\",\n });\n}\n\nfunction SubExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel sub-expansion-panel\",\n titleComponent: \"h4\",\n });\n}\n\nfunction ExpandableDetailsPanel(props) {\n let { title, children, value, headerElement, className } = props;\n const [isOpen, setIsOpen] = useState(false);\n headerElement ??= h([h(\"div.title\", title), value]);\n return h(\"div.expandable-details\", { className }, [\n h(\"div.expandable-details-main\", [\n h(\"div.expandable-details-header\", headerElement),\n h(\"div.expandable-details-toggle\", [\n h(Button, {\n small: true,\n minimal: true,\n active: isOpen,\n onClick: () => setIsOpen(!isOpen),\n icon: \"more\",\n }),\n ]),\n ]),\n h(\n Collapse,\n { isOpen },\n h(\"div.expandable-details-children\", null, children)\n ),\n ]);\n}\n\nfunction ExpansionBody({ title, className, children }) {\n return h(\"div.expansion-body\", { className }, [\n h(\"div.expansion-panel-detail-header\", title),\n h(\"div.expansion-panel-detail-body\", null, children),\n ]);\n}\n\nexport {\n ExpansionPanel,\n ExpansionPanelSummary,\n ExpandableDetailsPanel,\n SubExpansionPanel,\n ExpansionBody,\n PanelSubhead,\n};\n"],"names":[],"version":3,"file":"expansion-panel.ef757efe.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;AAgBO,SAAS,0CACd,IAAwB,EACxB,WAA+B;IAE/B,MAAM,MAAM,aAAa;IACzB,IAAI,OAAO,MAAM;IACjB,MAAM,OAAO,YAAY,MAAM,EAAE;IAEjC,KAAK,CAAC,GAAG,CAAA,GAAA,oDAAsB,EAAE,IAAI,GAAG,EAAE;IAC1C,KAAK,CAAC,GAAG,CAAA,GAAA,oDAAsB,EAAE,IAAI,GAAG,EAAE;IAE1C,IAAI,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,QAAQ,MAChD,KAAK,CAAC,GAAG,CAAA,GAAA,8BAAG,EAAE;SACT,IAAI,IAAI,QAAQ,IAAI;QACzB,IAAI,IAAI,QAAQ,GAAG,MACjB,KAAK,CAAC,GAAG,CAAA,GAAA,8BAAG,EAAE,IAAI,QAAQ,GAAG,QAAQ;aAErC,KAAK,CAAC,GAAG,CAAA,GAAA,gCAAK,EAAE,IAAI,QAAQ,IAAI;;IAGpC,IAAI,IAAI,OAAO,IAAI,GAAG;QACpB,IAAI,KAAK,IAAI,OAAO;QACpB,IAAI,KAAK,GAAG,MAAM;QAClB,KAAK,CAAC,GAAG,CAAA,GAAA,gCAAK,EAAE;IAClB;IACA,IAAI,IAAI,KAAK,IAAI,GACf,KAAK,CAAC,GAAG,CAAA,GAAA,gCAAK,EAAE,IAAI,KAAK;AAE7B;AAEA,SAAS,2BAAK,CAA6B;IACzC,IAAI,MAAM,OAAO,CAAC,IAChB,IAAI,CAAC,CAAC,EAAE;IAEV,OAAO,WAAW,EAAE,QAAQ;AAC9B;AAEO,SAAS,0CACd,QAA6B,EAC7B,cAA6B;IAE7B,MAAM,KACJ,IAAI,gBAAgB,OAAO,MAC3B,IAAI,gBAAgB,OAAO,MAC3B,mEAAmE;IACnE,IAAI,kBAAkB,OAAO,IAAI,MACjC,IAAI,MACJ,IAAI,GACL,GAAG;IAEJ,MAAM,MAAM,2BAAK;IACjB,MAAM,MAAM,2BAAK;IAEjB,IAAI,WAAW;IACf,IAAI,OAAO;IACX,MAAM,KAAK,EAAE,QAAQ;IACrB,IAAI,GAAG,QAAQ,CAAC,OACd,WAAW,2BAAK,GAAG,SAAS,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM;SAC7C,IAAI,GAAG,QAAQ,CAAC,MACrB,WAAW,2BAAK,GAAG,SAAS,CAAC,GAAG,GAAG,MAAM,GAAG;SAE5C,OAAO,2BAAK;IAEd,MAAM,UAAU,2BAAK;IACrB,MAAM,QAAQ,2BAAK;IAEnB,IAAI,SAAS;IACb,IAAI,WAAW,KAAK,SAAS,KAAK,QAAQ,MACxC,SAAS;aACP;aACA;cACA;IACF;IAGF,OAAO;QACL,QAAQ;YACN,KAAK,2BAAK;YACV,KAAK,2BAAK;sBACV;YACA,SAAS,2BAAK;YACd,OAAO,2BAAK;QACd;gBACA;IACF;AACF","sources":["packages/map-interface/src/location-info/hash-string.ts"],"sourcesContent":["import {\n LatLng,\n MapPosition,\n formatCoordForZoomLevel,\n} from \"@macrostrat/mapbox-utils\";\nimport { ParsedQuery } from \"query-string\";\nimport { fmt1, fmt2, fmtInt } from \"./utils\";\n\ninterface LocationHashParams {\n x?: string;\n y?: string;\n z?: string;\n a?: string;\n e?: string;\n}\n\nexport function applyMapPositionToHash(\n args: LocationHashParams,\n mapPosition: MapPosition | null\n) {\n const pos = mapPosition?.camera;\n if (pos == null) return;\n const zoom = mapPosition.target?.zoom;\n\n args.x = formatCoordForZoomLevel(pos.lng, zoom);\n args.y = formatCoordForZoomLevel(pos.lat, zoom);\n\n if (pos.bearing == 0 && pos.pitch == 0 && zoom != null) {\n args.z = fmt1(zoom);\n } else if (pos.altitude != null) {\n if (pos.altitude > 5000) {\n args.z = fmt2(pos.altitude / 1000) + \"km\";\n } else {\n args.z = fmtInt(pos.altitude) + \"m\";\n }\n }\n if (pos.bearing != 0) {\n let az = pos.bearing;\n if (az < 0) az += 360;\n args.a = fmtInt(az);\n }\n if (pos.pitch != 0) {\n args.e = fmtInt(pos.pitch);\n }\n}\n\nfunction _fmt(x: string | number | string[]) {\n if (Array.isArray(x)) {\n x = x[0];\n }\n return parseFloat(x.toString());\n}\n\nexport function getMapPositionForHash(\n hashData: ParsedQuery<string>,\n centerPosition: LatLng | null\n): MapPosition {\n const {\n x = centerPosition?.lng ?? 0,\n y = centerPosition?.lat ?? 0,\n // Different default for zoom depending on whether we have a marker\n z = centerPosition != null ? 7 : 2,\n a = 0,\n e = 0,\n } = hashData;\n\n const lng = _fmt(x);\n const lat = _fmt(y);\n\n let altitude = null;\n let zoom = null;\n const _z = z.toString();\n if (_z.endsWith(\"km\")) {\n altitude = _fmt(_z.substring(0, _z.length - 2)) * 1000;\n } else if (_z.endsWith(\"m\")) {\n altitude = _fmt(_z.substring(0, _z.length - 1));\n } else {\n zoom = _fmt(z);\n }\n const bearing = _fmt(a);\n const pitch = _fmt(e);\n\n let target = undefined;\n if (bearing == 0 && pitch == 0 && zoom != null) {\n target = {\n lat,\n lng,\n zoom,\n };\n }\n\n return {\n camera: {\n lng: _fmt(x),\n lat: _fmt(y),\n altitude,\n bearing: _fmt(a),\n pitch: _fmt(e),\n },\n target,\n };\n}\n"],"names":[],"version":3,"file":"hash-string.62e84f08.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/helpers.ts"],"sourcesContent":["import {\n useMapRef,\n useMapEaseTo,\n useMapDispatch,\n useMapStatus,\n useMapInitialized,\n} from \"@macrostrat/mapbox-react\";\nimport { useMemo, useRef } from \"react\";\nimport { debounce } from \"underscore\";\nimport useResizeObserver from \"use-resize-observer\";\n\nimport { getMapPosition } from \"@macrostrat/mapbox-utils\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { getMapPadding, useMapMarker } from \"./utils\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\n\nexport function MapResizeManager({ containerRef }) {\n const mapRef = useMapRef();\n\n const debouncedResize = useRef(\n debounce(() => {\n mapRef.current?.resize();\n }, 100)\n );\n\n useResizeObserver({\n ref: containerRef,\n onResize: debouncedResize.current,\n });\n\n return null;\n}\n\ninterface MapPaddingManagerProps {\n containerRef: React.RefObject<HTMLDivElement>;\n parentRef: React.RefObject<HTMLDivElement>;\n infoMarkerPosition: mapboxgl.LngLatLike;\n debounceTime?: number;\n}\n\nexport function MapPaddingManager({\n containerRef,\n parentRef,\n infoMarkerPosition,\n debounceTime = 200,\n}: MapPaddingManagerProps) {\n const mapRef = useMapRef();\n\n const [padding, setPadding] = useState(\n getMapPadding(containerRef, parentRef)\n );\n\n const _updateMapPadding = useCallback(() => {\n const newPadding = getMapPadding(containerRef, parentRef);\n setPadding(newPadding);\n }, [containerRef.current, parentRef.current]);\n\n const updateMapPadding = useMemo(\n () => debounce(_updateMapPadding, debounceTime),\n [_updateMapPadding, debounceTime]\n );\n\n useEffect(() => {\n const map = mapRef.current;\n if (map == null) return;\n // Update map padding on load\n updateMapPadding();\n }, [mapRef.current]);\n\n useResizeObserver({\n ref: parentRef,\n onResize(sz) {\n updateMapPadding();\n },\n round(n) {\n return Math.round(n);\n },\n });\n\n // Ideally, we would not have to do this when we know the infobox is loaded\n useMapEaseTo({ center: infoMarkerPosition, padding });\n\n return null;\n}\n\nexport function MapMovedReporter({ onMapMoved = null }) {\n const mapRef = useMapRef();\n const dispatch = useMapDispatch();\n const isInitialized = useMapInitialized();\n\n const mapMovedCallback = useCallback(() => {\n const map = mapRef.current;\n if (map == null) return;\n const mapPosition = getMapPosition(map);\n dispatch({ type: \"map-moved\", payload: mapPosition });\n onMapMoved?.(mapPosition, map);\n }, [onMapMoved, dispatch, isInitialized]);\n\n useEffect(() => {\n // Get the current value of the map. Useful for gradually moving away\n // from class component\n const map = mapRef.current;\n if (map == null) return;\n // Update the URI when the map moves\n mapMovedCallback();\n const cb = debounce(mapMovedCallback, 100);\n map.on(\"moveend\", cb);\n return () => {\n map?.off(\"moveend\", cb);\n };\n }, [mapMovedCallback]);\n return null;\n}\n\nexport function MapLoadingReporter({\n ignoredSources,\n onMapLoading = null,\n onMapIdle = null,\n mapIsLoading,\n}) {\n const mapRef = useMapRef();\n const loadingRef = useRef(false);\n const dispatch = useMapDispatch();\n const isInitialized = useMapInitialized();\n\n useEffect(() => {\n const map = mapRef.current;\n const mapIsLoading = loadingRef.current;\n if (map == null) return;\n\n let didSendLoading = false;\n\n const loadingCallback = (evt) => {\n if (ignoredSources.includes(evt.sourceId) || mapIsLoading) return;\n if (didSendLoading) return;\n onMapLoading?.(evt);\n dispatch({ type: \"set-loading\", payload: true });\n loadingRef.current = true;\n didSendLoading = true;\n };\n const idleCallback = (evt) => {\n if (!mapIsLoading) return;\n dispatch({ type: \"set-loading\", payload: false });\n loadingRef.current = false;\n onMapIdle?.(evt);\n };\n map.on(\"sourcedataloading\", loadingCallback);\n map.on(\"idle\", idleCallback);\n return () => {\n map?.off(\"sourcedataloading\", loadingCallback);\n map?.off(\"idle\", idleCallback);\n };\n }, [ignoredSources, mapIsLoading, isInitialized]);\n return null;\n}\n\nexport function MapMarker({ position, setPosition, centerMarker = true }) {\n const mapRef = useMapRef();\n const markerRef = useRef(null);\n const isInitialized = useMapInitialized();\n\n useMapMarker(mapRef, markerRef, position);\n\n useEffect(() => {\n const map = mapRef.current;\n if (map == null || setPosition == null) return;\n\n const handleMapClick = (event: mapboxgl.MapMouseEvent) => {\n setPosition(event.lngLat, event, mapRef.current);\n // We should integrate this with the \"easeToCenter\" hook\n if (centerMarker) {\n mapRef.current?.flyTo({ center: event.lngLat, duration: 800 });\n }\n };\n\n map.on(\"click\", handleMapClick);\n\n return () => {\n map?.off(\"click\", handleMapClick);\n };\n }, [setPosition, isInitialized]);\n\n return null;\n}\n\nexport function useBasicMapStyle(\n opts: {\n styleType?: \"macrostrat\" | \"standard\";\n } = {}\n) {\n const { styleType } = opts;\n const inDarkMode = useInDarkMode();\n\n const props = useMemo(() => {\n return { styleType, inDarkMode };\n }, [styleType, inDarkMode]);\n\n return getBasicMapStyle(props);\n}\n\nexport function getBasicMapStyle(opts: {\n styleType?: \"macrostrat\" | \"standard\";\n inDarkMode?: boolean;\n}) {\n const { styleType = \"macrostrat\", inDarkMode = false } = opts ?? {};\n\n if (styleType == \"macrostrat\") {\n return inDarkMode\n ? \"mapbox://styles/jczaplewski/cl5uoqzzq003614o6url9ou9z?optimize=true\"\n : \"mapbox://styles/jczaplewski/clatdbkw4002q14lov8zx0bm0?optimize=true\";\n } else {\n return inDarkMode\n ? \"mapbox://styles/mapbox/dark-v10\"\n : \"mapbox://styles/mapbox/light-v10\";\n }\n}\n\nexport const useBasicStylePair = useBasicMapStyle;\n"],"names":[],"version":3,"file":"helpers.5a745a3a.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/dev/map-page.ts"],"sourcesContent":["// Import other components\nimport { Switch } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport { Spacer, useDarkMode, useStoredState } from \"@macrostrat/ui-components\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useCallback, useState, useEffect } from \"react\";\nimport { buildInspectorStyle } from \"./xray\";\nimport { MapAreaContainer, PanelCard } from \"../container\";\nimport { FloatingNavbar, MapLoadingButton } from \"../context-panel\";\nimport { MapMarker, useBasicMapStyle } from \"../helpers\";\nimport { LocationPanel } from \"../location-panel\";\nimport { MapView } from \"../map-view\";\nimport styles from \"./main.module.sass\";\nimport { TileExtentLayer } from \"./tile-extent\";\nimport {\n FeaturePanel,\n FeatureSelectionHandler,\n TileInfo,\n} from \"./vector-tile-features\";\nimport { MapPosition } from \"@macrostrat/mapbox-utils\";\n\nexport const h = hyper.styled(styles);\n\nexport function MapInspectorV2({\n title = \"Map inspector\",\n headerElement = null,\n transformRequest = null,\n mapPosition = null,\n mapboxToken = null,\n overlayStyle = null,\n controls = null,\n children = null,\n style,\n bounds = null,\n focusedSource = null,\n focusedSourceTitle = null,\n fitViewport = true,\n styleType = \"macrostrat\",\n}: {\n headerElement?: React.ReactNode;\n transformRequest?: mapboxgl.TransformRequestFunction;\n title?: string;\n style?: mapboxgl.Style | string;\n controls?: React.ReactNode;\n children?: React.ReactNode;\n mapboxToken?: string;\n overlayStyle?: mapboxgl.Style | string;\n focusedSource?: string;\n focusedSourceTitle?: string;\n projection?: string;\n mapPosition?: MapPosition;\n bounds?: [number, number, number, number];\n fitViewport?: boolean;\n styleType?: \"standard\" | \"macrostrat\";\n}) {\n /* We apply a custom style to the panel container when we are interacting\n with the search bar, so that we can block map interactions until search\n bar focus is lost.\n We also apply a custom style when the infodrawer is open so we can hide\n the search bar on mobile platforms\n */\n\n const dark = useDarkMode();\n const isEnabled = dark?.isEnabled;\n\n if (mapboxToken != null) {\n mapboxgl.accessToken = mapboxToken;\n }\n\n style ??= useBasicMapStyle({ styleType });\n\n const [isOpen, setOpen] = useState(false);\n\n const [state, setState] = useStoredState(\"macrostrat:dev-map-page\", {\n showTileExtent: false,\n xRay: false,\n });\n const { showTileExtent, xRay } = state;\n\n const [actualStyle, setActualStyle] = useState(null);\n\n useEffect(() => {\n buildInspectorStyle(style, overlayStyle, {\n mapboxToken,\n inDarkMode: isEnabled,\n xRay,\n }).then(setActualStyle);\n }, [style, xRay, mapboxToken, isEnabled, overlayStyle]);\n\n const [inspectPosition, setInspectPosition] =\n useState<mapboxgl.LngLat | null>(null);\n\n const [data, setData] = useState(null);\n\n const onSelectPosition = useCallback((position: mapboxgl.LngLat) => {\n setInspectPosition(position);\n }, []);\n\n let detailElement = null;\n if (inspectPosition != null) {\n detailElement = h(\n LocationPanel,\n {\n onClose() {\n setInspectPosition(null);\n },\n position: inspectPosition,\n },\n [\n h(TileInfo, {\n feature: data?.[0] ?? null,\n showExtent: showTileExtent,\n setShowExtent() {\n setState({ ...state, showTileExtent: !showTileExtent });\n },\n }),\n h(FeaturePanel, { features: data, focusedSource, focusedSourceTitle }),\n ]\n );\n }\n\n let tile = null;\n if (showTileExtent && data?.[0] != null) {\n let f = data[0];\n tile = { x: f._x, y: f._y, z: f._z };\n }\n\n return h(\n MapAreaContainer,\n {\n navbar: h(FloatingNavbar, {\n rightElement: h(MapLoadingButton, {\n large: true,\n active: isOpen,\n onClick: () => setOpen(!isOpen),\n style: {\n marginRight: \"-5px\",\n },\n }),\n headerElement,\n title,\n }),\n contextPanel: h(PanelCard, [\n controls,\n h(Switch, {\n checked: xRay,\n label: \"X-ray mode\",\n onChange() {\n setState({ ...state, xRay: !xRay });\n },\n }),\n ]),\n detailPanel: detailElement,\n contextPanelOpen: isOpen,\n fitViewport,\n },\n h(\n MapView,\n {\n style: actualStyle,\n transformRequest,\n mapPosition,\n projection: { name: \"globe\" },\n mapboxToken,\n bounds,\n },\n [\n h(FeatureSelectionHandler, {\n selectedLocation: inspectPosition,\n setFeatures: setData,\n }),\n h(MapMarker, {\n position: inspectPosition,\n setPosition: onSelectPosition,\n }),\n h(TileExtentLayer, { tile, color: isEnabled ? \"white\" : \"black\" }),\n children,\n ]\n )\n );\n}\n\nfunction MapInspector(props) {\n const { children, controls, ...rest } = props;\n /** Compatibility wrapper for MapInspectorV2 */\n // React warning about this legacy usage\n console.warn(\"MapInspector is deprecated. Use MapInspectorV2 instead\");\n\n return h(MapInspectorV2, {\n ...rest,\n controls: [children, controls],\n });\n}\n\n// Legacy export\nexport const DevMapPage = MapInspector;\n"],"names":[],"version":3,"file":"map-page.3c65558b.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAM,0BAAI,CAAA,GAAA,gDAAI,EAAE,MAAM,CAAC,CAAA,GAAA,mDAAK;AAmC5B,SAAS,2CAAqB,SAAS,EAAE,OAAyB,CAAC,CAAC;IAClE,MAAM,eAAE,WAAW,EAAE,GAAG,MAAM,GAAG;IAEjC,MAAM,MAAM,IAAI,CAAA,GAAA,yCAAO,EAAE,GAAG,CAAC;mBAC3B;QACA,SAAS;QACT,cAAc;QACd,aAAa;QACb,WAAW;QACX,oBAAoB;QACpB,GAAG,IAAI;IACT;IAEA,IAAI,eAAe;IACnB,IAAI,gBAAgB,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,MAChE,oEAAoE;IACpE,eAAe;IAGjB,2BAA2B;IAC3B,IAAI,gBAAgB,MAClB,CAAA,GAAA,2CAAa,EAAE,KAAK;IAGtB,OAAO;AACT;AAEA,MAAM,2CAAkC;IACtC,QAAQ;QACN,KAAK;QACL,KAAK;QACL,UAAU;IACZ;AACF;AAEO,SAAS,0CAAQ,KAAmB;IACzC,IAAI,mBAAE,eAAe,EAAE,GAAG;IAC1B,MAAM,iBACJ,gBAAgB,aAChB,KAAK,eACL,WAAW,iBACX,gBAAgB,sDAChB,QAAQ,eACR,WAAW,eACX,aAAa;IACb,WAAW,sBACX,kBAAkB,oBAClB,gBAAgB,cAChB,UAAU,eACV,cAAc,qBACd,gBAAgB,kBAChB,aAAa,kBACb,aAAa,sBACb,aAAa,kBACb,cAAc,EACd,GAAG,MACJ,GAAG;IACJ,IAAI,eACF,oBAAoB;IAGtB,MAAM,eAAe,eAAe;IAEpC,IAAI,gBAAgB,MAClB,CAAA,GAAA,yCAAO,EAAE,WAAW,GAAG;IAGzB,MAAM,WAAW,CAAA,GAAA,2CAAa;IAC9B,IAAI,SAAS,CAAA,GAAA,sCAAQ;IACrB,MAAM,MAAM,CAAA,GAAA,mBAAK;IACjB,MAAM,YAAY,CAAA,GAAA,mBAAK;IAEvB,MAAM,CAAC,WAAW,aAAa,GAAG,CAAA,GAAA,qBAAO,EAAkB;IAC3D,MAAM,gBAAgB,CAAA,GAAA,yCAAW,EAAE,CAAC,QAAU,MAAM,aAAa;IAEjE,CAAA,GAAA,sBAAQ,EAAE;QACR,gCAAgC,GAChC,IAAI,aAAa,MAAM;QACvB,IAAI,MAAM,OAAO,OAAO;QAExB;;;;;;KAMC,GACD,qEAAqE;QACrE,MAAM,iBACJ,OAAO,OAAO,cAAc,CAAA,GAAA,2CAAa,EAAE;QAC7C,MAAM,YAAE,QAAQ,EAAE,GAAG,CAAA,GAAA,wCAAU,EAAE;QAEjC,IAAI,WAA2B;QAE/B,MAAM,gBAAgB,MAAM,aAAa,IAAI,EAAE;QAE/C,IAAI,cAAc,MAAM,GAAG,GACzB,WAAW,CAAA,GAAA,wCAAU,EAAE,aAAa;QAGtC,IAAI,UAAU;YACZ,0DAA0D;YAC1D,MAAM,eAAe,CAAA,GAAA,oDAAsB,EAAE,UAAU;YACvD,WAAW,CAAA,GAAA,wCAAU,EAAE,UAAU;QACnC;QAEA,IAAI,kBAAkB,MACpB,WAAW,eAAe;QAG5B,IAAI,OAAO,MAAM;YACf,QAAQ,GAAG,CAAC,iBAAiB;YAC7B,SAAS;gBAAE,MAAM;gBAAoB,SAAS;YAAM;YACpD,IAAI,QAAQ,CAAC;QACf,OAAO;YACL,QAAQ,GAAG,CAAC,oBAAoB;YAChC,MAAM,MAAM,cAAc,IAAI,OAAO,EAAE;gBACrC,OAAO;4BACP;6BACA;kCACA;gBACA,GAAG,IAAI;YACT;YACA,SAAS;gBAAE,MAAM;gBAAW,SAAS;YAAI;YACzC,IAAI,UAAU,CAAC,CAAA,GAAA,uCAAY,EAAE,KAAK,YAAY;gBAAE,SAAS;YAAM;YAC/D,cAAc;QAChB;IACF,GAAG;QAAC;QAAW;QAAe;KAAe;IAE7C;sEACoE,GACpE,CAAA,GAAA,sBAAQ,EAAE;QACR,IAAI,eAAe;QACnB,MAAM,WAAW,YAAY;YAC3B,MAAM,MAAM,OAAO,OAAO;YAC1B,IAAI,OAAO,MAAM;YACjB,IAAI,IAAI,aAAa,IAAI;gBACvB,oDAAoD;gBACpD,SAAS;oBAAE,MAAM;oBAAoB,SAAS;gBAAK;gBACnD,gBAAgB;gBAChB,cAAc;YAChB;QACF,GAAG;QACH,OAAO,IAAM,cAAc;IAC7B,GAAG;QAAC;KAAc;IAElB,CAAA,GAAA,4CAAa,EAAE;QACb,gCAAgC,GAChC,IAAI;QACJ,IAAI,OAAO,UAAU,UACnB,WAAW,MAAM,CAAA,GAAA,2CAAa,EAAE,OAAO;YACrC,cAAc,CAAA,GAAA,yCAAO,EAAE,WAAW;QACpC;aAEA,WAAW;QAEb,aAAa;IACf,GAAG;QAAC;KAAM;IAEV,MAAM,uBAAuB,CAAA,GAAA,2CAAa;IAC1C,MAAM,YAAE,QAAQ,gBAAE,YAAY,EAAE,GAAG,CAAA,GAAA,wCAAU,EAAE;IAE/C,qBAAqB;IACrB,MAAM,cAAc,OAAO,OAAO,EAAE,iBAAiB,QAAQ;IAE7D,MAAM,YAAY,CAAA,GAAA,2CAAS,EACzB;QACE,cAAc,gBAAgB;QAC9B,mBAAmB,YAAY;IACjC,GACA,GAAG,YAAY,WAAW,CAAC;IAG7B,MAAM,kBAAkB,CAAA,GAAA,2CAAS,EAAE;oBACjC;IACF;IAEA,OAAO,wBACL,oCACA;QAAE,KAAK;QAAW,WAAW;IAAgB,GAC7C;QACE,wBAAE,sBAAsB;iBAAE;uBAAK;QAAU;QACzC,wBAAE,CAAA,GAAA,4CAAiB,GAAG;YACpB,gBAAgB;gBAAC;gBAAmB;aAAwB;QAC9D;QACA,wBAAE,CAAA,GAAA,0CAAe,GAAG;wBAAE;QAAW;QACjC,wBAAE,CAAA,GAAA,0CAAe,GAAG;YAAE,cAAc;QAAI;QACxC,wBAAE,CAAA,GAAA,2CAAgB,GAAG;YACnB,cAAc;uBACd;gCACA;QACF;QACA,wBAAE,2CAAmB;sBAAE;6BAAU;mBAAiB;QAAM;QACxD;KACD;AAEL;AAEO,SAAS,0CAAkB,YAChC,QAAQ,mBACR,eAAe,SACf,KAAK,EAKN;IACC,CAAA,GAAA,yCAAW,EAAE,UAAU;IAEvB,OAAO;AACT","sources":["packages/map-interface/src/map-view.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n useMapRef,\n useMapDispatch,\n useMapPosition,\n use3DTerrain,\n getTerrainLayerForStyle,\n useMapStatus,\n} from \"@macrostrat/mapbox-react\";\nimport {\n mapViewInfo,\n MapPosition,\n setMapPosition,\n getMapPosition,\n getMapboxStyle,\n mergeStyles,\n} from \"@macrostrat/mapbox-utils\";\nimport classNames from \"classnames\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styles from \"./main.module.sass\";\nimport {\n MapLoadingReporter,\n MapMovedReporter,\n MapPaddingManager,\n MapResizeManager,\n} from \"./helpers\";\nimport \"mapbox-gl/dist/mapbox-gl.css\";\nimport { getMapPadding } from \"./utils\";\nimport { useAsyncEffect } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\ntype MapboxCoreOptions = Omit<mapboxgl.MapboxOptions, \"container\">;\n\nexport interface MapViewProps extends MapboxCoreOptions {\n showLineSymbols?: boolean;\n children?: React.ReactNode;\n mapboxToken?: string;\n // Deprecated\n accessToken?: string;\n terrainSourceID?: string;\n enableTerrain?: boolean;\n infoMarkerPosition?: mapboxgl.LngLatLike;\n mapPosition?: MapPosition;\n initializeMap?: (\n container: HTMLElement,\n args: MapboxOptionsExt\n ) => mapboxgl.Map;\n onMapLoaded?: (map: mapboxgl.Map) => void;\n onStyleLoaded?: (map: mapboxgl.Map) => void;\n onMapMoved?: (mapPosition: MapPosition, map: mapboxgl.Map) => void;\n /** This map sets its own viewport, rather than being positioned by a parent.\n * This is a hack to ensure that the map can overflow its \"safe area\" when false */\n standalone?: boolean;\n /** Overlay styles to apply to the map: a list of mapbox style objects or fragments to\n * overlay on top of the main map style at runtime */\n overlayStyles?: Partial<mapboxgl.Style>[];\n /** A function to transform the map style before it is loaded */\n transformStyle?: (style: mapboxgl.Style) => mapboxgl.Style;\n}\n\nexport interface MapboxOptionsExt extends MapboxCoreOptions {\n mapPosition?: MapPosition;\n}\n\nfunction defaultInitializeMap(container, args: MapboxOptionsExt = {}) {\n const { mapPosition, ...rest } = args;\n\n const map = new mapboxgl.Map({\n container,\n maxZoom: 18,\n logoPosition: \"bottom-left\",\n trackResize: true,\n antialias: true,\n optimizeForTerrain: true,\n ...rest,\n });\n\n let _mapPosition = mapPosition;\n if (_mapPosition == null && rest.center == null && rest.bounds == null) {\n // If no map positioning information is provided, we use the default\n _mapPosition = defaultMapPosition;\n }\n\n // set initial map position\n if (_mapPosition != null) {\n setMapPosition(map, _mapPosition);\n }\n\n return map;\n}\n\nconst defaultMapPosition: MapPosition = {\n camera: {\n lat: 34,\n lng: -120,\n altitude: 300000,\n },\n};\n\nexport function MapView(props: MapViewProps) {\n let { terrainSourceID } = props;\n const {\n enableTerrain = true,\n style,\n mapPosition,\n initializeMap = defaultInitializeMap,\n children,\n mapboxToken,\n // Deprecated\n accessToken,\n infoMarkerPosition,\n transformRequest,\n projection,\n onMapLoaded = null,\n onStyleLoaded = null,\n onMapMoved = null,\n standalone = false,\n overlayStyles,\n transformStyle,\n ...rest\n } = props;\n if (enableTerrain) {\n terrainSourceID ??= \"mapbox-3d-dem\";\n }\n\n const _mapboxToken = mapboxToken ?? accessToken;\n\n if (_mapboxToken != null) {\n mapboxgl.accessToken = _mapboxToken;\n }\n\n const dispatch = useMapDispatch();\n let mapRef = useMapRef();\n const ref = useRef<HTMLDivElement>();\n const parentRef = useRef<HTMLDivElement>();\n\n const [baseStyle, setBaseStyle] = useState<mapboxgl.Style>(null);\n const isStyleLoaded = useMapStatus((state) => state.isStyleLoaded);\n\n useEffect(() => {\n /** Manager to update map style */\n if (baseStyle == null) return;\n let map = mapRef.current;\n\n /** If we can, we try to update the map style with terrain information\n * immediately, before the style is loaded. This allows us to avoid a\n * flash of the map without terrain.\n *\n * To do this, we need to estimate the map position before load, which\n * doesn't always work.\n */\n // We either get the map position directly from the map or from props\n const estMapPosition: MapPosition | null =\n map == null ? mapPosition : getMapPosition(map);\n const { mapUse3D } = mapViewInfo(estMapPosition);\n\n let newStyle: mapboxgl.Style = baseStyle;\n\n const overlayStyles = props.overlayStyles ?? [];\n\n if (overlayStyles.length > 0) {\n newStyle = mergeStyles(newStyle, ...overlayStyles);\n }\n\n if (mapUse3D) {\n // We can update the style with terrain layers immediately\n const terrainStyle = getTerrainLayerForStyle(newStyle, terrainSourceID);\n newStyle = mergeStyles(newStyle, terrainStyle);\n }\n\n if (transformStyle != null) {\n newStyle = transformStyle(newStyle);\n }\n\n if (map != null) {\n console.log(\"Setting style\", newStyle);\n dispatch({ type: \"set-style-loaded\", payload: false });\n map.setStyle(newStyle);\n } else {\n console.log(\"Initializing map\", newStyle);\n const map = initializeMap(ref.current, {\n style: newStyle,\n projection,\n mapPosition,\n transformRequest,\n ...rest,\n });\n dispatch({ type: \"set-map\", payload: map });\n map.setPadding(getMapPadding(ref, parentRef), { animate: false });\n onMapLoaded?.(map);\n }\n }, [baseStyle, overlayStyles, transformStyle]);\n\n /** Check back every 0.1 seconds to see if the map has loaded.\n * We do it this way because mapboxgl loading events are unreliable */\n useEffect(() => {\n if (isStyleLoaded) return;\n const interval = setInterval(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (map.isStyleLoaded()) {\n // Wait a tick before setting the style loaded state\n dispatch({ type: \"set-style-loaded\", payload: true });\n onStyleLoaded?.(map);\n clearInterval(interval);\n }\n }, 50);\n return () => clearInterval(interval);\n }, [isStyleLoaded]);\n\n useAsyncEffect(async () => {\n /** Manager to update map style */\n let newStyle: mapboxgl.Style;\n if (typeof style === \"string\") {\n newStyle = await getMapboxStyle(style, {\n access_token: mapboxgl.accessToken,\n });\n } else {\n newStyle = style;\n }\n setBaseStyle(newStyle);\n }, [style]);\n\n const _computedMapPosition = useMapPosition();\n const { mapUse3D, mapIsRotated } = mapViewInfo(_computedMapPosition);\n\n // Get map projection\n const _projection = mapRef.current?.getProjection()?.name ?? \"mercator\";\n\n const className = classNames(\n {\n \"is-rotated\": mapIsRotated ?? false,\n \"is-3d-available\": mapUse3D ?? false,\n },\n `${_projection}-projection`\n );\n\n const parentClassName = classNames({\n standalone,\n });\n\n return h(\n \"div.map-view-container.main-view\",\n { ref: parentRef, className: parentClassName },\n [\n h(\"div.mapbox-map#map\", { ref, className }),\n h(MapLoadingReporter, {\n ignoredSources: [\"elevationMarker\", \"crossSectionEndpoints\"],\n }),\n h(MapMovedReporter, { onMapMoved }),\n h(MapResizeManager, { containerRef: ref }),\n h(MapPaddingManager, {\n containerRef: ref,\n parentRef,\n infoMarkerPosition,\n }),\n h(MapTerrainManager, { mapUse3D, terrainSourceID, style }),\n children,\n ]\n );\n}\n\nexport function MapTerrainManager({\n mapUse3D,\n terrainSourceID,\n style,\n}: {\n mapUse3D?: boolean;\n terrainSourceID?: string;\n style?: mapboxgl.Style | string;\n}) {\n use3DTerrain(mapUse3D, terrainSourceID);\n\n return null;\n}\n"],"names":[],"version":3,"file":"map-view.e031052e.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;AAMO,SAAS,0CAAgB,QAC9B,IAAI,SACJ,QAAQ,OAIT;IACC,MAAM,gBAAgB,CAAA,GAAA,wBAAU,EAC9B,CAAC,KAAK;QACJ,MAAM,QAAQ,IAAI,QAAQ;QAC1B,IAAI,MAAM,MAAM,IAAI,MAAM;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAM,EAAE,EAAE,IAAI;QAClD,IAAI,OAAO,MACT,OAAO,IAAI,QAAQ,CAAC;QAEtB,MAAM,KAAE,CAAC,KAAE,CAAC,KAAE,CAAC,EAAE,GAAG;QACpB,MAAM,SAAS,CAAA,GAAA,mCAAY,EAAE;YAAC;YAAG;YAAG;SAAE;QACtC,MAAM,SAAS;YACb,MAAM;YACN,MAAM;QACR;QACA,MAAM,QAAQ;YACZ,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,OAAO;gBACL,cAAc;gBACd,cAAc;YAChB;QACF;QACA,MAAM,OAAO,CAAC,cAAc,GAAG;QAC/B,MAAM,MAAM,CAAC,IAAI,CAAC;QAClB,IAAI,QAAQ,CAAC;IACf,GACA;QAAC;KAAM;IAET,MAAM,MAAM,CAAA,GAAA,sCAAQ;IACpB,CAAA,GAAA,mDAAqB,EAAE,KAAK,MAAM;IAClC,OAAO;AACT","sources":["packages/map-interface/src/dev/tile-extent.ts"],"sourcesContent":["import { useMapConditionalStyle, useMapRef } from \"@macrostrat/mapbox-react\";\nimport { tileToGeoJSON } from \"@mapbox/tilebelt\";\nimport { useCallback } from \"react\";\n\ntype TileIndex = { x: number; y: number; z: number };\n\nexport function TileExtentLayer({\n tile,\n color = \"red\",\n}: {\n tile: TileIndex | null;\n color?: string;\n}) {\n const styleCallback = useCallback(\n (map, val: TileIndex) => {\n const style = map.getStyle();\n if (style.layers == null) return;\n style.layers = style.layers.filter((l) => l.id != \"tile-extent\");\n if (val == null) {\n return map.setStyle(style);\n }\n const { x, y, z } = val;\n const extent = tileToGeoJSON([x, y, z]);\n const source = {\n type: \"geojson\",\n data: extent,\n };\n const layer = {\n id: \"tile-extent\",\n type: \"line\",\n source: \"tile-extent\",\n paint: {\n \"line-color\": color,\n \"line-width\": 2,\n },\n };\n style.sources[\"tile-extent\"] = source;\n style.layers.push(layer);\n map.setStyle(style);\n },\n [color]\n );\n const map = useMapRef();\n useMapConditionalStyle(map, tile, styleCallback);\n return null;\n}\n"],"names":[],"version":3,"file":"tile-extent.06a4b2ed.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"../expansion-panel\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({ features, focusedSource = null }) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ]\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ]\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n })\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature }))\n );\n}\n"],"names":[],"version":3,"file":"vector-tile-features.77121785.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;AAWO,eAAe,0CACpB,SAA0B,EAC1B,SAAsB,IAAI;IAE1B,MAAM,cACJ,aAAa,cACb,QAAQ,kCACR,WAAW,eACX,WAAW,EACZ,GAAG;IACJ,MAAM,QAAQ,MAAM,CAAA,GAAA,2CAAa,EAAE,WAAW;QAAE,cAAc;IAAY;IAC1E,MAAM,UAAU,eAAe,OAAO,IAAI,CAAC,MAAM,OAAO;IAExD,IAAI,SAAS,EAAE;IACf,KAAK,IAAI,SAAS,MAAM,MAAM,CAAE;QAC9B,IAAI,CAAC,QAAQ,QAAQ,CAAC,MAAM,MAAM,GAAG;YACnC,OAAO,IAAI,CAAC;YACZ;QACF;QACA,IAAI,WAAW,2CAAqB,OAAO,OAAO;QAClD,IAAI,YAAY,MACd,OAAO,IAAI,CAAC;IAEhB;IAEA,OAAO;QACL,GAAG,KAAK;gBACR;IACF;AACF;AAEA,SAAS,2CAAqB,KAAK,EAAE,KAAK,EAAE,UAAU;IACpD,MAAM,IAAI,CAAA,GAAA,yCAAY,EAAE;IACxB,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QACxC,IAAI,CAAC,YACH,OAAO,CAAA,GAAA,wCAAW,EAAE,EAAE,MAAM,CAAC,IAAI,QAAQ,KAAK,CAAC;QAEjD,OAAO,CAAA,GAAA,wCAAW,EAAE,EAAE,KAAK,CAAC,SAAS,MAAM,CAAC;IAC9C;IAEA,IAAI,MAAM,IAAI,IAAI,cAChB,OAAO;IAGT,IAAI,WAAW;QAAE,GAAG,KAAK;IAAC;IAE1B,QAAQ,GAAG,CAAC,UAAU;IAEtB,IAAI,MAAM,IAAI,IAAI,QAChB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU;QACxB,sBAAsB,UAAU;IAClC;SACK,IAAI,MAAM,IAAI,IAAI,QACvB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU,KAAK;QAC7B,cAAc;IAChB;SACK,IAAI,MAAM,IAAI,IAAI,UACvB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU,GAAG;QAC3B,mBAAmB;IACrB;SACK,IAAI,MAAM,IAAI,IAAI,UACvB,SAAS,KAAK,GAAG;QACf,gBAAgB,UAAU,KAAK;QAC/B,uBAAuB,UAAU,KAAK;QACtC,iBAAiB;IACnB;IAGF,OAAO;AACT;AAMO,eAAe,0CACpB,SAAkC,EAClC,eAA+C,IAAI,EACnD,SAAgC,CAAC,CAAC;IAElC,MAAM,eACJ,WAAW,QACX,OAAO,OACP,aAAa,YAAY,EACzB,GAAG,MACJ,GAAG;IACJ,IAAI,cAAc;IAClB,IAAI,QAAQ,MAAM,CAAA,GAAA,2CAAa,EAAE,WAAW;QAC1C,cAAc;IAChB;IAEA,IAAI,gBAAgB,MAAM;QACxB,MAAM,UAAU,MAAM,CAAA,GAAA,2CAAa,EAAE,cAAc;YACjD,cAAc;QAChB;QACA,QAAQ,CAAA,GAAA,wCAAU,EAAE,OAAO;QAC3B,gBAAgB,OAAO,IAAI,CAAC,QAAQ,OAAO;IAC7C;IAEA,IAAI,MAAM;QACR,8DAA8D;QAC9D,gBAAgB,OAAO,IAAI,CAAC,MAAM,OAAO;QAEzC,QAAQ,MAAM,0CAAe,OAAO;YAAE,GAAG,IAAI;yBAAE;yBAAa;QAAY;IAC1E;IACA,OAAO;AACT","sources":["packages/map-interface/src/dev/xray.ts"],"sourcesContent":["import { getMapboxStyle, mergeStyles } from \"@macrostrat/mapbox-utils\";\nimport { asChromaColor, toRGBAString } from \"@macrostrat/color-utils\";\nimport mapboxgl from \"mapbox-gl\";\n\ninterface XRayOptions {\n color?: string;\n inDarkMode?: boolean;\n mapboxToken?: string;\n xRaySources?: string[];\n}\n\nexport async function buildXRayStyle(\n baseStyle: string | object,\n params: XRayOptions = null\n) {\n const {\n inDarkMode = false,\n color = \"rgb(74, 242, 161)\",\n mapboxToken,\n xRaySources,\n } = params;\n const style = await getMapboxStyle(baseStyle, { access_token: mapboxToken });\n const sources = xRaySources ?? Object.keys(style.sources);\n\n let layers = [];\n for (let layer of style.layers) {\n if (!sources.includes(layer.source)) {\n layers.push(layer);\n continue;\n }\n let newLayer = transformMapboxLayer(layer, color, inDarkMode);\n if (newLayer != null) {\n layers.push(newLayer);\n }\n }\n\n return {\n ...style,\n layers,\n };\n}\n\nfunction transformMapboxLayer(layer, color, inDarkMode) {\n const c = asChromaColor(color);\n const xRayColor = (opacity = 1, darken = 0) => {\n if (!inDarkMode) {\n return toRGBAString(c.darken(2 - darken).alpha(opacity));\n }\n return toRGBAString(c.alpha(opacity).darken(darken));\n };\n\n if (layer.type == \"background\") {\n return null;\n }\n\n let newLayer = { ...layer };\n\n console.log(xRayColor(0.5));\n\n if (layer.type == \"fill\") {\n newLayer.paint = {\n \"fill-color\": xRayColor(0.1),\n \"fill-outline-color\": xRayColor(0.5),\n };\n } else if (layer.type == \"line\") {\n newLayer.paint = {\n \"line-color\": xRayColor(0.5, 0),\n \"line-width\": 1.5,\n };\n } else if (layer.type == \"symbol\") {\n newLayer.paint = {\n \"text-color\": xRayColor(1, -0.5),\n \"text-halo-color\": \"#000\",\n };\n } else if (layer.type == \"circle\") {\n newLayer.paint = {\n \"circle-color\": xRayColor(0.5, 0),\n \"circle-stroke-color\": xRayColor(0.5, 1),\n \"circle-radius\": 2,\n };\n }\n\n return newLayer;\n}\n\ntype InspectorStyleOptions = XRayOptions & {\n xRay?: boolean;\n};\n\nexport async function buildInspectorStyle(\n baseStyle: mapboxgl.Style | string,\n overlayStyle: mapboxgl.Style | string | null = null,\n params: InspectorStyleOptions = {}\n) {\n const {\n mapboxToken,\n xRay = false,\n xRaySources: _xRaySources,\n ...rest\n } = params;\n let xRaySources = _xRaySources;\n let style = await getMapboxStyle(baseStyle, {\n access_token: mapboxToken,\n });\n\n if (overlayStyle != null) {\n const overlay = await getMapboxStyle(overlayStyle, {\n access_token: mapboxToken,\n });\n style = mergeStyles(style, overlay);\n xRaySources ??= Object.keys(overlay.sources);\n }\n\n if (xRay) {\n // If we haven't specified sources, then we'll use all of them\n xRaySources ??= Object.keys(style.sources);\n\n style = await buildXRayStyle(style, { ...rest, mapboxToken, xRaySources });\n }\n return style;\n}\n"],"names":[],"version":3,"file":"xray.a23f8660.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;AAOA,MAAM,0BAAI,CAAA,GAAA,sBAAI,EAAE,MAAM,CAAC,CAAA,GAAA,sEAAK;AAE5B,MAAM,uCAAiB,wBAAE,CAAA,GAAA,cAAM,GAAG;IAAE,MAAM;AAAG;AAEtC,SAAS,0CAAc,aAC5B,YAAY,gBACZ,OAAO,UACP,SAAS,cACT,QAAQ,YACR,OAAO,eACP,KAAK,EACN;IACC,OAAO,wBAAE,CAAA,GAAA,aAAK,GAAG;QACf,WAAW;QACX,MAAM,YAAY,uCAAiB;eACnC;QACA,SAAS;iBACT;QACA,QAAQ,UAAU,CAAC;eACnB;IACF;AACF;AAEO,SAAS,0CAAiB,KAAK;IACpC,MAAM,YAAY,CAAA,GAAA,mBAAW,EAAE,CAAC,IAAM,EAAE,SAAS;IACjD,OAAO,wBAAE,2CAAe;QAAE,GAAG,KAAK;mBAAE;IAAU;AAChD;AAgBO,SAAS,0CAAe,aAC7B,SAAS,YACT,QAAQ,iBACR,gBAAgB,aAChB,QAAQ,qBACR,gBAAgB,oBAChB,eAAe,cACf,MAAM,SACN,KAAK,SACL,QAAQ,CAAC,GACW;IACpB,IAAI,gBAAwC;IAC5C,IAAI,gBAAgB,MAClB,gBAAgB,wBAAE,qBAAqB;IAGzC,IAAI,iBAAyC;IAC7C,IAAI,SAAS,QAAQ,kBAAkB;QACrC,IAAI,OAAO,UAAU,UACnB,iBAAiB,wBAAE,CAAA,GAAA,WAAG,GAAG;YAAE,SAAS;YAAM,WAAW;QAAK,GAAG;aAE7D,iBAAiB;;IAIrB,IAAI,kBAAkB,MACpB,iBAAiB,wBAAE;QAAC;QAAgB,wBAAE,CAAA,GAAA,aAAK;KAAG;IAGhD,OAAO,wBAAE,wBAAwB;mBAAE;QAAW,OAAO;mBAAE;QAAM;IAAE,GAAG;QAChE,wBAAE,qBAAqB;YACrB,wBACE,CAAA,GAAA,aAAK,GACL;gBACE,WAAW;gBACX,OAAO;4BAAE;oBAAQ,GAAG,KAAK;gBAAC;YAC5B,GACA;gBAAC;gBAAgB;gBAAU;aAAc;SAE5C;QACD,wBAAE,EAAE,CAAC,iBAAiB,MACpB,CAAA,GAAA,WAAG,GACH;YAAE,WAAW;QAAgB,GAC7B;KAEH;AACH","sources":["packages/map-interface/src/context-panel/index.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { Navbar, Button, Spinner, Card, Text } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMapStatus } from \"@macrostrat/mapbox-react\";\nimport { Spacer } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\nconst spinnerElement = h(Spinner, { size: 16 });\n\nexport function LoadingButton({\n isLoading = false,\n onClick,\n active = false,\n large = true,\n icon = \"menu\",\n style,\n}) {\n return h(Button, {\n className: \"loading-button\",\n icon: isLoading ? spinnerElement : icon,\n large,\n minimal: true,\n onClick,\n active: active && !isLoading,\n style,\n });\n}\n\nexport function MapLoadingButton(props) {\n const isLoading = useMapStatus((s) => s.isLoading);\n return h(LoadingButton, { ...props, isLoading });\n}\n\ntype AnyChildren = React.ReactNode;\n\nexport interface FloatingNavbarProps {\n className?: string;\n children?: AnyChildren;\n headerElement?: AnyChildren;\n title?: AnyChildren;\n statusElement?: AnyChildren;\n rightElement?: AnyChildren;\n height?: number | string;\n width?: number | string;\n style?: object;\n}\n\nexport function FloatingNavbar({\n className,\n children,\n headerElement = null,\n title = null,\n statusElement = null,\n rightElement = null,\n height,\n width,\n style = {},\n}: FloatingNavbarProps) {\n let _rightElement: React.ReactNode | null = null;\n if (rightElement != null) {\n _rightElement = h(\"div.right-element\", rightElement);\n }\n\n let _headerElement: React.ReactNode | null = headerElement;\n if (title != null && _headerElement == null) {\n if (typeof title === \"string\") {\n _headerElement = h(Text, { tagName: \"h2\", ellipsize: true }, title);\n } else {\n _headerElement = title;\n }\n }\n\n if (_headerElement != null) {\n _headerElement = h([_headerElement, h(Spacer)]);\n }\n\n return h(\"div.searchbar-holder\", { className, style: { width } }, [\n h(\"div.navbar-holder\", [\n h(\n Navbar,\n {\n className: \"searchbar navbar panel\",\n style: { height, ...style },\n },\n [_headerElement, children, _rightElement]\n ),\n ]),\n h.if(statusElement != null)(\n Card,\n { className: \"status-tongue\" },\n statusElement\n ),\n ]);\n}\n"],"names":[],"version":3,"file":"context-panel.5dae1a8c.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;AAQA,MAAM,0BAAI,CAAA,GAAA,sBAAI,EAAE,MAAM,CAAC,CAAA,GAAA,sEAAK;AAE5B,SAAS,0CAAsB,KAAK;IAClC,MAAM,YAAE,QAAQ,YAAE,QAAQ,YAAE,QAAQ,aAAE,SAAS,SAAE,KAAK,kBAAE,cAAc,EAAE,GACtE;IACF,MAAM,OAAO,WAAW,eAAe;IACvC,OAAO,wBACL,CAAA,GAAA,yCAAW,GACX;QACE,WAAW,CAAA,GAAA,iBAAS,EAAE,0BAA0B;QAChD,SAAS;eACT;QACA,WAAW;IACb,GACA;QAAC;QAAU,wBAAE,CAAA,GAAA,WAAG,GAAG;kBAAE;YAAM,WAAW;QAAuB;KAAG;AAEpE;AAEA,SAAS,yCAAmB,KAAK;IAC/B,IAAI,SACF,KAAK,kBACL,iBAAiB,gBACjB,QAAQ,YACR,QAAQ,YACR,QAAQ,YACR,WAAW,KAAO,kBAClB,gBAAgB,iBAChB,SAAS,EACV,GAAG;IACJ,MAAM,CAAC,QAAQ,QAAQ,GAAG,CAAA,GAAA,eAAO,EAAE,YAAY;IAE/C,MAAM,YAAY;QAChB;QACA,QAAQ,CAAC;IACX;IAEA,OAAO,wBACL,4BACA;QACE,WAAW,CAAA,GAAA,iBAAS,EAAE,WAAW;YAC/B,UAAU;YACV,WAAW,CAAC;QACd;IACF,GACA;QACE,wBACE,2CACA;YACE,UAAU;YACV,UAAU;mBACV;4BACA;QACF,GACA,wBAAE,oCAAoC;YACpC,wBAAE,gCAAgC;YAClC;YACA;SACD;QAEH,wBAAE,CAAA,GAAA,eAAO,GAAG;oBAAE;QAAO,GAAG,wBAAE,0BAA0B,MAAM;KAC3D;AAEL;AAEO,SAAS,0CAAiB,KAAK;IACpC,IAAI,SAAE,KAAK,YAAE,QAAQ,aAAE,SAAS,iBAAE,gBAAgB,MAAM,GAAG;IAC3D,OAAO,wBAAE,0BAA0B;mBAAE;IAAU,GAAG;QAChD,wBAAE,qBAAqB,MAAM,iBAAiB,wBAAE,MAAM;QACtD,wBAAE,qBAAqB,MAAM;KAC9B;AACH;AAEA,SAAS,0CAAe,KAAK;IAC3B,OAAO,wBAAE,0CAAoB;QAC3B,GAAG,KAAK;QACR,WAAW;IACb;AACF;AAEA,SAAS,0CAAkB,KAAK;IAC9B,OAAO,wBAAE,0CAAoB;QAC3B,GAAG,KAAK;QACR,WAAW;QACX,gBAAgB;IAClB;AACF;AAEA,SAAS,0CAAuB,KAAK;IACnC,IAAI,SAAE,KAAK,YAAE,QAAQ,SAAE,KAAK,iBAAE,aAAa,aAAE,SAAS,EAAE,GAAG;IAC3D,MAAM,CAAC,QAAQ,UAAU,GAAG,CAAA,GAAA,eAAO,EAAE;IACrC,kBAAkB,wBAAE;QAAC,wBAAE,aAAa;QAAQ;KAAM;IAClD,OAAO,wBAAE,0BAA0B;mBAAE;IAAU,GAAG;QAChD,wBAAE,+BAA+B;YAC/B,wBAAE,iCAAiC;YACnC,wBAAE,iCAAiC;gBACjC,wBAAE,CAAA,GAAA,aAAK,GAAG;oBACR,OAAO;oBACP,SAAS;oBACT,QAAQ;oBACR,SAAS,IAAM,UAAU,CAAC;oBAC1B,MAAM;gBACR;aACD;SACF;QACD,wBACE,CAAA,GAAA,eAAO,GACP;oBAAE;QAAO,GACT,wBAAE,mCAAmC,MAAM;KAE9C;AACH;AAEA,SAAS,0CAAc,SAAE,KAAK,aAAE,SAAS,YAAE,QAAQ,EAAE;IACnD,OAAO,wBAAE,sBAAsB;mBAAE;IAAU,GAAG;QAC5C,wBAAE,qCAAqC;QACvC,wBAAE,mCAAmC,MAAM;KAC5C;AACH","sources":["packages/map-interface/src/expansion-panel/index.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { Collapse, Icon } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport classNames from \"classnames\";\nimport { Button } from \"@blueprintjs/core\";\nimport { PanelSubhead } from \"./headers\";\n\nconst h = hyper.styled(styles);\n\nfunction ExpansionPanelSummary(props) {\n const { expanded, children, onChange, className, title, titleComponent } =\n props;\n const icon = expanded ? \"chevron-up\" : \"chevron-down\";\n return h(\n PanelSubhead,\n {\n className: classNames(\"expansion-panel-header\", className),\n onClick: onChange,\n title,\n component: titleComponent,\n },\n [children, h(Icon, { icon, className: \"expansion-panel-icon\" })]\n );\n}\n\nfunction ExpansionPanelBase(props) {\n let {\n title,\n titleComponent = \"h3\",\n children,\n expanded,\n helpText,\n onChange = () => {},\n sideComponent = null,\n className,\n } = props;\n const [isOpen, setOpen] = useState(expanded || false);\n\n const onChange_ = () => {\n onChange();\n setOpen(!isOpen);\n };\n\n return h(\n \"div.expansion-panel-base\",\n {\n className: classNames(className, {\n expanded: isOpen,\n collapsed: !isOpen,\n }),\n },\n [\n h(\n ExpansionPanelSummary,\n {\n onChange: onChange_,\n expanded: isOpen,\n title,\n titleComponent,\n },\n h(\"div.expansion-summary-title-help\", [\n h(\"span.expansion-panel-subtext\", helpText),\n \" \",\n sideComponent,\n ])\n ),\n h(Collapse, { isOpen }, h(\"div.expansion-children\", null, children)),\n ]\n );\n}\n\nexport function InfoPanelSection(props) {\n let { title, children, className, headerElement = null } = props;\n return h(\"div.info-panel-section\", { className }, [\n h(\"div.panel-subhead\", null, headerElement ?? h(\"h3\", title)),\n h(\"div.panel-content\", null, children),\n ]);\n}\n\nfunction ExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel\",\n });\n}\n\nfunction SubExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel sub-expansion-panel\",\n titleComponent: \"h4\",\n });\n}\n\nfunction ExpandableDetailsPanel(props) {\n let { title, children, value, headerElement, className } = props;\n const [isOpen, setIsOpen] = useState(false);\n headerElement ??= h([h(\"div.title\", title), value]);\n return h(\"div.expandable-details\", { className }, [\n h(\"div.expandable-details-main\", [\n h(\"div.expandable-details-header\", headerElement),\n h(\"div.expandable-details-toggle\", [\n h(Button, {\n small: true,\n minimal: true,\n active: isOpen,\n onClick: () => setIsOpen(!isOpen),\n icon: \"more\",\n }),\n ]),\n ]),\n h(\n Collapse,\n { isOpen },\n h(\"div.expandable-details-children\", null, children)\n ),\n ]);\n}\n\nfunction ExpansionBody({ title, className, children }) {\n return h(\"div.expansion-body\", { className }, [\n h(\"div.expansion-panel-detail-header\", title),\n h(\"div.expansion-panel-detail-body\", null, children),\n ]);\n}\n\nexport {\n ExpansionPanel,\n ExpansionPanelSummary,\n ExpandableDetailsPanel,\n SubExpansionPanel,\n ExpansionBody,\n PanelSubhead,\n};\n"],"names":[],"version":3,"file":"expansion-panel.465b822f.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/helpers.ts"],"sourcesContent":["import {\n useMapRef,\n useMapEaseTo,\n useMapDispatch,\n useMapStatus,\n useMapInitialized,\n} from \"@macrostrat/mapbox-react\";\nimport { useMemo, useRef } from \"react\";\nimport { debounce } from \"underscore\";\nimport useResizeObserver from \"use-resize-observer\";\n\nimport { getMapPosition } from \"@macrostrat/mapbox-utils\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { getMapPadding, useMapMarker } from \"./utils\";\nimport { useInDarkMode } from \"@macrostrat/ui-components\";\n\nexport function MapResizeManager({ containerRef }) {\n const mapRef = useMapRef();\n\n const debouncedResize = useRef(\n debounce(() => {\n mapRef.current?.resize();\n }, 100)\n );\n\n useResizeObserver({\n ref: containerRef,\n onResize: debouncedResize.current,\n });\n\n return null;\n}\n\ninterface MapPaddingManagerProps {\n containerRef: React.RefObject<HTMLDivElement>;\n parentRef: React.RefObject<HTMLDivElement>;\n infoMarkerPosition: mapboxgl.LngLatLike;\n debounceTime?: number;\n}\n\nexport function MapPaddingManager({\n containerRef,\n parentRef,\n infoMarkerPosition,\n debounceTime = 200,\n}: MapPaddingManagerProps) {\n const mapRef = useMapRef();\n\n const [padding, setPadding] = useState(\n getMapPadding(containerRef, parentRef)\n );\n\n const _updateMapPadding = useCallback(() => {\n const newPadding = getMapPadding(containerRef, parentRef);\n setPadding(newPadding);\n }, [containerRef.current, parentRef.current]);\n\n const updateMapPadding = useMemo(\n () => debounce(_updateMapPadding, debounceTime),\n [_updateMapPadding, debounceTime]\n );\n\n useEffect(() => {\n const map = mapRef.current;\n if (map == null) return;\n // Update map padding on load\n updateMapPadding();\n }, [mapRef.current]);\n\n useResizeObserver({\n ref: parentRef,\n onResize(sz) {\n updateMapPadding();\n },\n round(n) {\n return Math.round(n);\n },\n });\n\n // Ideally, we would not have to do this when we know the infobox is loaded\n useMapEaseTo({ center: infoMarkerPosition, padding });\n\n return null;\n}\n\nexport function MapMovedReporter({ onMapMoved = null }) {\n const mapRef = useMapRef();\n const dispatch = useMapDispatch();\n const isInitialized = useMapInitialized();\n\n const mapMovedCallback = useCallback(() => {\n const map = mapRef.current;\n if (map == null) return;\n const mapPosition = getMapPosition(map);\n dispatch({ type: \"map-moved\", payload: mapPosition });\n onMapMoved?.(mapPosition, map);\n }, [onMapMoved, dispatch, isInitialized]);\n\n useEffect(() => {\n // Get the current value of the map. Useful for gradually moving away\n // from class component\n const map = mapRef.current;\n if (map == null) return;\n // Update the URI when the map moves\n mapMovedCallback();\n const cb = debounce(mapMovedCallback, 100);\n map.on(\"moveend\", cb);\n return () => {\n map?.off(\"moveend\", cb);\n };\n }, [mapMovedCallback]);\n return null;\n}\n\nexport function MapLoadingReporter({\n ignoredSources,\n onMapLoading = null,\n onMapIdle = null,\n mapIsLoading,\n}) {\n const mapRef = useMapRef();\n const loadingRef = useRef(false);\n const dispatch = useMapDispatch();\n const isInitialized = useMapInitialized();\n\n useEffect(() => {\n const map = mapRef.current;\n const mapIsLoading = loadingRef.current;\n if (map == null) return;\n\n let didSendLoading = false;\n\n const loadingCallback = (evt) => {\n if (ignoredSources.includes(evt.sourceId) || mapIsLoading) return;\n if (didSendLoading) return;\n onMapLoading?.(evt);\n dispatch({ type: \"set-loading\", payload: true });\n loadingRef.current = true;\n didSendLoading = true;\n };\n const idleCallback = (evt) => {\n if (!mapIsLoading) return;\n dispatch({ type: \"set-loading\", payload: false });\n loadingRef.current = false;\n onMapIdle?.(evt);\n };\n map.on(\"sourcedataloading\", loadingCallback);\n map.on(\"idle\", idleCallback);\n return () => {\n map?.off(\"sourcedataloading\", loadingCallback);\n map?.off(\"idle\", idleCallback);\n };\n }, [ignoredSources, mapIsLoading, isInitialized]);\n return null;\n}\n\nexport function MapMarker({ position, setPosition, centerMarker = true }) {\n const mapRef = useMapRef();\n const markerRef = useRef(null);\n const isInitialized = useMapInitialized();\n\n useMapMarker(mapRef, markerRef, position);\n\n useEffect(() => {\n const map = mapRef.current;\n if (map == null || setPosition == null) return;\n\n const handleMapClick = (event: mapboxgl.MapMouseEvent) => {\n setPosition(event.lngLat, event, mapRef.current);\n // We should integrate this with the \"easeToCenter\" hook\n if (centerMarker) {\n mapRef.current?.flyTo({ center: event.lngLat, duration: 800 });\n }\n };\n\n map.on(\"click\", handleMapClick);\n\n return () => {\n map?.off(\"click\", handleMapClick);\n };\n }, [setPosition, isInitialized]);\n\n return null;\n}\n\nexport function useBasicMapStyle(\n opts: {\n styleType?: \"macrostrat\" | \"standard\";\n } = {}\n) {\n const { styleType } = opts;\n const inDarkMode = useInDarkMode();\n\n const props = useMemo(() => {\n return { styleType, inDarkMode };\n }, [styleType, inDarkMode]);\n\n return getBasicMapStyle(props);\n}\n\nexport function getBasicMapStyle(opts: {\n styleType?: \"macrostrat\" | \"standard\";\n inDarkMode?: boolean;\n}) {\n const { styleType = \"macrostrat\", inDarkMode = false } = opts ?? {};\n\n if (styleType == \"macrostrat\") {\n return inDarkMode\n ? \"mapbox://styles/jczaplewski/cl5uoqzzq003614o6url9ou9z?optimize=true\"\n : \"mapbox://styles/jczaplewski/clatdbkw4002q14lov8zx0bm0?optimize=true\";\n } else {\n return inDarkMode\n ? \"mapbox://styles/mapbox/dark-v10\"\n : \"mapbox://styles/mapbox/light-v10\";\n }\n}\n\nexport const useBasicStylePair = useBasicMapStyle;\n"],"names":[],"version":3,"file":"helpers.d32a342a.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/dev/map-page.ts"],"sourcesContent":["// Import other components\nimport { Switch } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport { Spacer, useDarkMode, useStoredState } from \"@macrostrat/ui-components\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useCallback, useState, useEffect } from \"react\";\nimport { buildInspectorStyle } from \"./xray\";\nimport { MapAreaContainer, PanelCard } from \"../container\";\nimport { FloatingNavbar, MapLoadingButton } from \"../context-panel\";\nimport { MapMarker, useBasicMapStyle } from \"../helpers\";\nimport { LocationPanel } from \"../location-panel\";\nimport { MapView } from \"../map-view\";\nimport styles from \"./main.module.sass\";\nimport { TileExtentLayer } from \"./tile-extent\";\nimport {\n FeaturePanel,\n FeatureSelectionHandler,\n TileInfo,\n} from \"./vector-tile-features\";\nimport { MapPosition } from \"@macrostrat/mapbox-utils\";\n\nexport const h = hyper.styled(styles);\n\nexport function MapInspectorV2({\n title = \"Map inspector\",\n headerElement = null,\n transformRequest = null,\n mapPosition = null,\n mapboxToken = null,\n overlayStyle = null,\n controls = null,\n children = null,\n style,\n bounds = null,\n focusedSource = null,\n focusedSourceTitle = null,\n fitViewport = true,\n styleType = \"macrostrat\",\n}: {\n headerElement?: React.ReactNode;\n transformRequest?: mapboxgl.TransformRequestFunction;\n title?: string;\n style?: mapboxgl.Style | string;\n controls?: React.ReactNode;\n children?: React.ReactNode;\n mapboxToken?: string;\n overlayStyle?: mapboxgl.Style | string;\n focusedSource?: string;\n focusedSourceTitle?: string;\n projection?: string;\n mapPosition?: MapPosition;\n bounds?: [number, number, number, number];\n fitViewport?: boolean;\n styleType?: \"standard\" | \"macrostrat\";\n}) {\n /* We apply a custom style to the panel container when we are interacting\n with the search bar, so that we can block map interactions until search\n bar focus is lost.\n We also apply a custom style when the infodrawer is open so we can hide\n the search bar on mobile platforms\n */\n\n const dark = useDarkMode();\n const isEnabled = dark?.isEnabled;\n\n if (mapboxToken != null) {\n mapboxgl.accessToken = mapboxToken;\n }\n\n style ??= useBasicMapStyle({ styleType });\n\n const [isOpen, setOpen] = useState(false);\n\n const [state, setState] = useStoredState(\"macrostrat:dev-map-page\", {\n showTileExtent: false,\n xRay: false,\n });\n const { showTileExtent, xRay } = state;\n\n const [actualStyle, setActualStyle] = useState(null);\n\n useEffect(() => {\n buildInspectorStyle(style, overlayStyle, {\n mapboxToken,\n inDarkMode: isEnabled,\n xRay,\n }).then(setActualStyle);\n }, [style, xRay, mapboxToken, isEnabled, overlayStyle]);\n\n const [inspectPosition, setInspectPosition] =\n useState<mapboxgl.LngLat | null>(null);\n\n const [data, setData] = useState(null);\n\n const onSelectPosition = useCallback((position: mapboxgl.LngLat) => {\n setInspectPosition(position);\n }, []);\n\n let detailElement = null;\n if (inspectPosition != null) {\n detailElement = h(\n LocationPanel,\n {\n onClose() {\n setInspectPosition(null);\n },\n position: inspectPosition,\n },\n [\n h(TileInfo, {\n feature: data?.[0] ?? null,\n showExtent: showTileExtent,\n setShowExtent() {\n setState({ ...state, showTileExtent: !showTileExtent });\n },\n }),\n h(FeaturePanel, { features: data, focusedSource, focusedSourceTitle }),\n ]\n );\n }\n\n let tile = null;\n if (showTileExtent && data?.[0] != null) {\n let f = data[0];\n tile = { x: f._x, y: f._y, z: f._z };\n }\n\n return h(\n MapAreaContainer,\n {\n navbar: h(FloatingNavbar, {\n rightElement: h(MapLoadingButton, {\n large: true,\n active: isOpen,\n onClick: () => setOpen(!isOpen),\n style: {\n marginRight: \"-5px\",\n },\n }),\n headerElement,\n title,\n }),\n contextPanel: h(PanelCard, [\n controls,\n h(Switch, {\n checked: xRay,\n label: \"X-ray mode\",\n onChange() {\n setState({ ...state, xRay: !xRay });\n },\n }),\n ]),\n detailPanel: detailElement,\n contextPanelOpen: isOpen,\n fitViewport,\n },\n h(\n MapView,\n {\n style: actualStyle,\n transformRequest,\n mapPosition,\n projection: { name: \"globe\" },\n mapboxToken,\n bounds,\n },\n [\n h(FeatureSelectionHandler, {\n selectedLocation: inspectPosition,\n setFeatures: setData,\n }),\n h(MapMarker, {\n position: inspectPosition,\n setPosition: onSelectPosition,\n }),\n h(TileExtentLayer, { tile, color: isEnabled ? \"white\" : \"black\" }),\n children,\n ]\n )\n );\n}\n\nfunction MapInspector(props) {\n const { children, controls, ...rest } = props;\n /** Compatibility wrapper for MapInspectorV2 */\n // React warning about this legacy usage\n console.warn(\"MapInspector is deprecated. Use MapInspectorV2 instead\");\n\n return h(MapInspectorV2, {\n ...rest,\n controls: [children, controls],\n });\n}\n\n// Legacy export\nexport const DevMapPage = MapInspector;\n"],"names":[],"version":3,"file":"map-page.660a1723.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/map-view.ts"],"sourcesContent":["import hyper from \"@macrostrat/hyper\";\nimport {\n useMapRef,\n useMapDispatch,\n useMapPosition,\n use3DTerrain,\n getTerrainLayerForStyle,\n useMapStatus,\n} from \"@macrostrat/mapbox-react\";\nimport {\n mapViewInfo,\n MapPosition,\n setMapPosition,\n getMapPosition,\n getMapboxStyle,\n mergeStyles,\n} from \"@macrostrat/mapbox-utils\";\nimport classNames from \"classnames\";\nimport mapboxgl from \"mapbox-gl\";\nimport { useEffect, useRef, useState } from \"react\";\nimport styles from \"./main.module.sass\";\nimport {\n MapLoadingReporter,\n MapMovedReporter,\n MapPaddingManager,\n MapResizeManager,\n} from \"./helpers\";\nimport \"mapbox-gl/dist/mapbox-gl.css\";\nimport { getMapPadding } from \"./utils\";\nimport { useAsyncEffect } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\ntype MapboxCoreOptions = Omit<mapboxgl.MapboxOptions, \"container\">;\n\nexport interface MapViewProps extends MapboxCoreOptions {\n showLineSymbols?: boolean;\n children?: React.ReactNode;\n mapboxToken?: string;\n // Deprecated\n accessToken?: string;\n terrainSourceID?: string;\n enableTerrain?: boolean;\n infoMarkerPosition?: mapboxgl.LngLatLike;\n mapPosition?: MapPosition;\n initializeMap?: (\n container: HTMLElement,\n args: MapboxOptionsExt\n ) => mapboxgl.Map;\n onMapLoaded?: (map: mapboxgl.Map) => void;\n onStyleLoaded?: (map: mapboxgl.Map) => void;\n onMapMoved?: (mapPosition: MapPosition, map: mapboxgl.Map) => void;\n /** This map sets its own viewport, rather than being positioned by a parent.\n * This is a hack to ensure that the map can overflow its \"safe area\" when false */\n standalone?: boolean;\n /** Overlay styles to apply to the map: a list of mapbox style objects or fragments to\n * overlay on top of the main map style at runtime */\n overlayStyles?: Partial<mapboxgl.Style>[];\n /** A function to transform the map style before it is loaded */\n transformStyle?: (style: mapboxgl.Style) => mapboxgl.Style;\n}\n\nexport interface MapboxOptionsExt extends MapboxCoreOptions {\n mapPosition?: MapPosition;\n}\n\nfunction defaultInitializeMap(container, args: MapboxOptionsExt = {}) {\n const { mapPosition, ...rest } = args;\n\n const map = new mapboxgl.Map({\n container,\n maxZoom: 18,\n logoPosition: \"bottom-left\",\n trackResize: true,\n antialias: true,\n optimizeForTerrain: true,\n ...rest,\n });\n\n let _mapPosition = mapPosition;\n if (_mapPosition == null && rest.center == null && rest.bounds == null) {\n // If no map positioning information is provided, we use the default\n _mapPosition = defaultMapPosition;\n }\n\n // set initial map position\n if (_mapPosition != null) {\n setMapPosition(map, _mapPosition);\n }\n\n return map;\n}\n\nconst defaultMapPosition: MapPosition = {\n camera: {\n lat: 34,\n lng: -120,\n altitude: 300000,\n },\n};\n\nexport function MapView(props: MapViewProps) {\n let { terrainSourceID } = props;\n const {\n enableTerrain = true,\n style,\n mapPosition,\n initializeMap = defaultInitializeMap,\n children,\n mapboxToken,\n // Deprecated\n accessToken,\n infoMarkerPosition,\n transformRequest,\n projection,\n onMapLoaded = null,\n onStyleLoaded = null,\n onMapMoved = null,\n standalone = false,\n overlayStyles,\n transformStyle,\n ...rest\n } = props;\n if (enableTerrain) {\n terrainSourceID ??= \"mapbox-3d-dem\";\n }\n\n const _mapboxToken = mapboxToken ?? accessToken;\n\n if (_mapboxToken != null) {\n mapboxgl.accessToken = _mapboxToken;\n }\n\n const dispatch = useMapDispatch();\n let mapRef = useMapRef();\n const ref = useRef<HTMLDivElement>();\n const parentRef = useRef<HTMLDivElement>();\n\n const [baseStyle, setBaseStyle] = useState<mapboxgl.Style>(null);\n const isStyleLoaded = useMapStatus((state) => state.isStyleLoaded);\n\n useEffect(() => {\n /** Manager to update map style */\n if (baseStyle == null) return;\n let map = mapRef.current;\n\n /** If we can, we try to update the map style with terrain information\n * immediately, before the style is loaded. This allows us to avoid a\n * flash of the map without terrain.\n *\n * To do this, we need to estimate the map position before load, which\n * doesn't always work.\n */\n // We either get the map position directly from the map or from props\n const estMapPosition: MapPosition | null =\n map == null ? mapPosition : getMapPosition(map);\n const { mapUse3D } = mapViewInfo(estMapPosition);\n\n let newStyle: mapboxgl.Style = baseStyle;\n\n const overlayStyles = props.overlayStyles ?? [];\n\n if (overlayStyles.length > 0) {\n newStyle = mergeStyles(newStyle, ...overlayStyles);\n }\n\n if (mapUse3D) {\n // We can update the style with terrain layers immediately\n const terrainStyle = getTerrainLayerForStyle(newStyle, terrainSourceID);\n newStyle = mergeStyles(newStyle, terrainStyle);\n }\n\n if (transformStyle != null) {\n newStyle = transformStyle(newStyle);\n }\n\n if (map != null) {\n console.log(\"Setting style\", newStyle);\n dispatch({ type: \"set-style-loaded\", payload: false });\n map.setStyle(newStyle);\n } else {\n console.log(\"Initializing map\", newStyle);\n const map = initializeMap(ref.current, {\n style: newStyle,\n projection,\n mapPosition,\n transformRequest,\n ...rest,\n });\n dispatch({ type: \"set-map\", payload: map });\n map.setPadding(getMapPadding(ref, parentRef), { animate: false });\n onMapLoaded?.(map);\n }\n }, [baseStyle, overlayStyles, transformStyle]);\n\n /** Check back every 0.1 seconds to see if the map has loaded.\n * We do it this way because mapboxgl loading events are unreliable */\n useEffect(() => {\n if (isStyleLoaded) return;\n const interval = setInterval(() => {\n const map = mapRef.current;\n if (map == null) return;\n if (map.isStyleLoaded()) {\n // Wait a tick before setting the style loaded state\n dispatch({ type: \"set-style-loaded\", payload: true });\n onStyleLoaded?.(map);\n clearInterval(interval);\n }\n }, 50);\n return () => clearInterval(interval);\n }, [isStyleLoaded]);\n\n useAsyncEffect(async () => {\n /** Manager to update map style */\n let newStyle: mapboxgl.Style;\n if (typeof style === \"string\") {\n newStyle = await getMapboxStyle(style, {\n access_token: mapboxgl.accessToken,\n });\n } else {\n newStyle = style;\n }\n setBaseStyle(newStyle);\n }, [style]);\n\n const _computedMapPosition = useMapPosition();\n const { mapUse3D, mapIsRotated } = mapViewInfo(_computedMapPosition);\n\n // Get map projection\n const _projection = mapRef.current?.getProjection()?.name ?? \"mercator\";\n\n const className = classNames(\n {\n \"is-rotated\": mapIsRotated ?? false,\n \"is-3d-available\": mapUse3D ?? false,\n },\n `${_projection}-projection`\n );\n\n const parentClassName = classNames({\n standalone,\n });\n\n return h(\n \"div.map-view-container.main-view\",\n { ref: parentRef, className: parentClassName },\n [\n h(\"div.mapbox-map#map\", { ref, className }),\n h(MapLoadingReporter, {\n ignoredSources: [\"elevationMarker\", \"crossSectionEndpoints\"],\n }),\n h(MapMovedReporter, { onMapMoved }),\n h(MapResizeManager, { containerRef: ref }),\n h(MapPaddingManager, {\n containerRef: ref,\n parentRef,\n infoMarkerPosition,\n }),\n h(MapTerrainManager, { mapUse3D, terrainSourceID, style }),\n children,\n ]\n );\n}\n\nexport function MapTerrainManager({\n mapUse3D,\n terrainSourceID,\n style,\n}: {\n mapUse3D?: boolean;\n terrainSourceID?: string;\n style?: mapboxgl.Style | string;\n}) {\n use3DTerrain(mapUse3D, terrainSourceID);\n\n return null;\n}\n"],"names":[],"version":3,"file":"map-view.d1c5b113.js.map"}
@@ -1,46 +0,0 @@
1
- import {useMapRef as $edFMK$useMapRef, useMapConditionalStyle as $edFMK$useMapConditionalStyle} from "@macrostrat/mapbox-react";
2
- import {tileToGeoJSON as $edFMK$tileToGeoJSON} from "@mapbox/tilebelt";
3
- import {useCallback as $edFMK$useCallback} from "react";
4
-
5
-
6
-
7
-
8
- function $1d4d29ef2725aa16$export$86c09739b12f23cd({ tile: tile, color: color = "red" }) {
9
- const styleCallback = (0, $edFMK$useCallback)((map, val)=>{
10
- const style = map.getStyle();
11
- if (style.layers == null) return;
12
- style.layers = style.layers.filter((l)=>l.id != "tile-extent");
13
- if (val == null) return map.setStyle(style);
14
- const { x: x, y: y, z: z } = val;
15
- const extent = (0, $edFMK$tileToGeoJSON)([
16
- x,
17
- y,
18
- z
19
- ]);
20
- const source = {
21
- type: "geojson",
22
- data: extent
23
- };
24
- const layer = {
25
- id: "tile-extent",
26
- type: "line",
27
- source: "tile-extent",
28
- paint: {
29
- "line-color": color,
30
- "line-width": 2
31
- }
32
- };
33
- style.sources["tile-extent"] = source;
34
- style.layers.push(layer);
35
- map.setStyle(style);
36
- }, [
37
- color
38
- ]);
39
- const map = (0, $edFMK$useMapRef)();
40
- (0, $edFMK$useMapConditionalStyle)(map, tile, styleCallback);
41
- return null;
42
- }
43
-
44
-
45
- export {$1d4d29ef2725aa16$export$86c09739b12f23cd as TileExtentLayer};
46
- //# sourceMappingURL=tile-extent.ca526996.js.map
@@ -1 +0,0 @@
1
- {"mappings":";;;;;;;AAMO,SAAS,0CAAgB,QAC9B,IAAI,SACJ,QAAQ,OAIT;IACC,MAAM,gBAAgB,CAAA,GAAA,kBAAU,EAC9B,CAAC,KAAK;QACJ,MAAM,QAAQ,IAAI,QAAQ;QAC1B,IAAI,MAAM,MAAM,IAAI,MAAM;QAC1B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAM,EAAE,EAAE,IAAI;QAClD,IAAI,OAAO,MACT,OAAO,IAAI,QAAQ,CAAC;QAEtB,MAAM,KAAE,CAAC,KAAE,CAAC,KAAE,CAAC,EAAE,GAAG;QACpB,MAAM,SAAS,CAAA,GAAA,oBAAY,EAAE;YAAC;YAAG;YAAG;SAAE;QACtC,MAAM,SAAS;YACb,MAAM;YACN,MAAM;QACR;QACA,MAAM,QAAQ;YACZ,IAAI;YACJ,MAAM;YACN,QAAQ;YACR,OAAO;gBACL,cAAc;gBACd,cAAc;YAChB;QACF;QACA,MAAM,OAAO,CAAC,cAAc,GAAG;QAC/B,MAAM,MAAM,CAAC,IAAI,CAAC;QAClB,IAAI,QAAQ,CAAC;IACf,GACA;QAAC;KAAM;IAET,MAAM,MAAM,CAAA,GAAA,gBAAQ;IACpB,CAAA,GAAA,6BAAqB,EAAE,KAAK,MAAM;IAClC,OAAO;AACT","sources":["packages/map-interface/src/dev/tile-extent.ts"],"sourcesContent":["import { useMapConditionalStyle, useMapRef } from \"@macrostrat/mapbox-react\";\nimport { tileToGeoJSON } from \"@mapbox/tilebelt\";\nimport { useCallback } from \"react\";\n\ntype TileIndex = { x: number; y: number; z: number };\n\nexport function TileExtentLayer({\n tile,\n color = \"red\",\n}: {\n tile: TileIndex | null;\n color?: string;\n}) {\n const styleCallback = useCallback(\n (map, val: TileIndex) => {\n const style = map.getStyle();\n if (style.layers == null) return;\n style.layers = style.layers.filter((l) => l.id != \"tile-extent\");\n if (val == null) {\n return map.setStyle(style);\n }\n const { x, y, z } = val;\n const extent = tileToGeoJSON([x, y, z]);\n const source = {\n type: \"geojson\",\n data: extent,\n };\n const layer = {\n id: \"tile-extent\",\n type: \"line\",\n source: \"tile-extent\",\n paint: {\n \"line-color\": color,\n \"line-width\": 2,\n },\n };\n style.sources[\"tile-extent\"] = source;\n style.layers.push(layer);\n map.setStyle(style);\n },\n [color]\n );\n const map = useMapRef();\n useMapConditionalStyle(map, tile, styleCallback);\n return null;\n}\n"],"names":[],"version":3,"file":"tile-extent.ca526996.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":"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","sources":["packages/map-interface/src/dev/vector-tile-features.ts"],"sourcesContent":["import { Spinner, Switch, Button, Intent } from \"@blueprintjs/core\";\nimport { useMapRef, useMapStatus } from \"@macrostrat/mapbox-react\";\nimport mapboxgl from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { JSONView } from \"@macrostrat/ui-components\";\nimport { group } from \"d3-array\";\nimport { ExpansionPanel } from \"../expansion-panel\";\n\nconst h = hyper.styled(styles);\n\nexport function FeatureProperties({ data, ...rest }) {\n // Instead of managing hover state with CSS, we use a state variable,\n // so that the button re-renders when the state changes\n const [showControls, setShowControls] = useState(false);\n const onMouseEnter = useCallback(() => setShowControls(true), []);\n const onMouseLeave = useCallback(() => setShowControls(false), []);\n\n return h(\"div.feature-properties\", { onMouseEnter, onMouseLeave }, [\n h.if(showControls)(\"div.controls\", h(CopyJSONButton, { data })),\n h(JSONView, {\n data,\n hideRoot: true,\n ...rest,\n }),\n ]);\n}\n\nexport function FeatureRecord({ feature }) {\n const props = feature.properties;\n return h(\"div.feature-record\", [\n h.if(Object.keys(props).length > 0)(FeatureProperties, { data: props }),\n ]);\n}\n\nfunction CopyJSONButton({ data }) {\n const [copied, setCopied] = useState(false);\n return h(Button, {\n icon: copied ? \"tick\" : \"clipboard\",\n intent: copied ? Intent.SUCCESS : Intent.NONE,\n minimal: true,\n small: true,\n onClick() {\n navigator.clipboard.writeText(JSON.stringify(data, null, 2));\n setCopied(true);\n },\n });\n}\n\n/** This component wraps queryRenderedFeatures to get features at a given location */\nexport function FeatureSelectionHandler({\n selectedLocation,\n setFeatures,\n radius = 2,\n}: {\n selectedLocation: mapboxgl.LngLat;\n setFeatures: (features: mapboxgl.MapboxGeoJSONFeature[]) => void;\n radius?: number;\n}) {\n const mapRef = useMapRef();\n const isLoading = useMapStatus((s) => s.isLoading);\n const isInitialized = useMapStatus((s) => s.isInitialized);\n const prevLocation = useRef(null);\n const prevFeatures = useRef([]);\n\n useEffect(() => {\n const map = mapRef?.current;\n if (map == null) return;\n if (selectedLocation == null) {\n setFeatures(null);\n return;\n }\n\n if (!isInitialized) return;\n\n const hasPreviouslyLoadedFeatures = prevFeatures.current.length > 0;\n\n const locationMemo = JSON.stringify(selectedLocation);\n if (locationMemo == prevLocation.current && hasPreviouslyLoadedFeatures)\n return;\n\n prevLocation.current = locationMemo;\n\n // Don't update if the location hasn't changed\n //if (selectedLocation == prevLocation) return;\n\n const r = radius;\n const pt = map.project(selectedLocation);\n\n const bbox: [mapboxgl.PointLike, mapboxgl.PointLike] = [\n [pt.x - r, pt.y - r],\n [pt.x + r, pt.y + r],\n ];\n const features = map.queryRenderedFeatures(bbox);\n prevFeatures.current = features ?? [];\n setFeatures(features);\n }, [isInitialized, selectedLocation, isLoading]);\n\n return null;\n}\n\nfunction FeatureHeader({ feature }) {\n return h(\"div.feature-header\", [\n h(\"h3\", [\n h(KeyValue, { label: \"Source\", value: feature.source }),\n h(KeyValue, { label: \"Source layer\", value: feature.sourceLayer }),\n ]),\n ]);\n}\n\nfunction KeyValue({ label, value }) {\n return h(\"span.key-value\", [h(\"span.key\", label), h(\"code.value\", value)]);\n}\n\nfunction LoadingAwareFeatureSet({ features, sourceID }) {\n const map = useMapRef();\n if (map?.current == null) return null;\n const [isLoaded, setIsLoaded] = useState(false);\n\n const sourceFeatures = features.filter((d) => d.source == \"burwell\");\n\n useEffect(() => {\n if (sourceFeatures.length > 0) {\n setIsLoaded(true);\n return;\n }\n\n const isLoaded = map.current.isSourceLoaded(sourceID);\n setIsLoaded(isLoaded);\n if (!isLoaded) {\n map.current.once(\"sourcedata\", (e) => {\n if (e.sourceId == sourceID) {\n setIsLoaded(true);\n }\n });\n }\n }, [map.current, sourceID, sourceFeatures.length]);\n\n if (!isLoaded) return h(Spinner);\n return h(Features, { features: sourceFeatures });\n}\n\nexport function TileInfo({ feature, showExtent, setShowExtent }) {\n if (feature == null) return null;\n const size = feature._vectorTileFeature._pbf.length;\n return h(\"div.tile-info\", [\n h(\"h3\", \"Tile\"),\n h(\"div.tile-index\", [\n h(KeyValue, { label: \"x\", value: feature._x }),\n h(KeyValue, { label: \"y\", value: feature._y }),\n h(KeyValue, { label: \"z\", value: feature._z }),\n ]),\n h(\"div.spacer\"),\n h(KeyValue, { label: \"Size\", value: formatSize(size) }),\n h(Switch, {\n label: \"Show extent\",\n alignIndicator: \"right\",\n checked: showExtent,\n onChange() {\n setShowExtent(!showExtent);\n },\n }),\n ]);\n}\n\nfunction formatSize(size: number) {\n if (size > 1000000)\n return h(UnitNumber, { value: size / 1000000, unit: \"Mb\" });\n if (size > 1000) return h(UnitNumber, { value: size / 1000, unit: \"Kb\" });\n return `${size} bytes`;\n}\n\nfunction UnitNumber({ value, unit, precision = 1 }) {\n return h(\"span.unit-number\", [\n h(\"span.number\", value.toFixed(precision)),\n h(\"span.unit\", unit),\n ]);\n}\n\nexport function FeaturePanel({ features, focusedSource = null }) {\n if (features == null) return null;\n\n let focusedSourcePanel = null;\n let filteredFeatures = features;\n let title = \"Features\";\n\n if (focusedSource != null) {\n title = \"Basemap features\";\n focusedSourcePanel = h(\n ExpansionPanel,\n {\n title: \"Macrostrat features\",\n className: \"macrostrat-features\",\n expanded: true,\n },\n [\n h(LoadingAwareFeatureSet, {\n features,\n sourceID: focusedSource,\n }),\n ]\n );\n filteredFeatures = features.filter((d) => d.source != focusedSource);\n }\n\n return h(\"div.feature-panel\", [\n focusedSourcePanel,\n h(\n ExpansionPanel,\n { title, className: \"basemap-features\", expanded: focusedSource == null },\n [\n h(FeatureGroups, {\n features: filteredFeatures,\n }),\n ]\n ),\n ]);\n}\n\nfunction FeatureGroups({ features }) {\n /** Group features by source and sourceLayer */\n if (features == null) return null;\n\n const groups = group(features, (d) => `${d.source} - ${d.sourceLayer}`);\n\n return h(\n \"div.feature-groups\",\n Array.from(groups).map(([key, features]) => {\n return h(\"div.feature-group\", [\n h(FeatureHeader, { feature: features[0] }),\n h(Features, { features }),\n ]);\n })\n );\n}\n\nexport function Features({ features }) {\n return h(\n \"div.features\",\n features.map((feature, i) => h(FeatureRecord, { key: i, feature }))\n );\n}\n"],"names":[],"version":3,"file":"vector-tile-features.53b48d66.js.map"}
@@ -1 +0,0 @@
1
- {"mappings":";;;;;AAWO,eAAe,0CACpB,SAA0B,EAC1B,SAAsB,IAAI;IAE1B,MAAM,cACJ,aAAa,cACb,QAAQ,kCACR,WAAW,eACX,WAAW,EACZ,GAAG;IACJ,MAAM,QAAQ,MAAM,CAAA,GAAA,qBAAa,EAAE,WAAW;QAAE,cAAc;IAAY;IAC1E,MAAM,UAAU,eAAe,OAAO,IAAI,CAAC,MAAM,OAAO;IAExD,IAAI,SAAS,EAAE;IACf,KAAK,IAAI,SAAS,MAAM,MAAM,CAAE;QAC9B,IAAI,CAAC,QAAQ,QAAQ,CAAC,MAAM,MAAM,GAAG;YACnC,OAAO,IAAI,CAAC;YACZ;QACF;QACA,IAAI,WAAW,2CAAqB,OAAO,OAAO;QAClD,IAAI,YAAY,MACd,OAAO,IAAI,CAAC;IAEhB;IAEA,OAAO;QACL,GAAG,KAAK;gBACR;IACF;AACF;AAEA,SAAS,2CAAqB,KAAK,EAAE,KAAK,EAAE,UAAU;IACpD,MAAM,IAAI,CAAA,GAAA,oBAAY,EAAE;IACxB,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QACxC,IAAI,CAAC,YACH,OAAO,CAAA,GAAA,mBAAW,EAAE,EAAE,MAAM,CAAC,IAAI,QAAQ,KAAK,CAAC;QAEjD,OAAO,CAAA,GAAA,mBAAW,EAAE,EAAE,KAAK,CAAC,SAAS,MAAM,CAAC;IAC9C;IAEA,IAAI,MAAM,IAAI,IAAI,cAChB,OAAO;IAGT,IAAI,WAAW;QAAE,GAAG,KAAK;IAAC;IAE1B,QAAQ,GAAG,CAAC,UAAU;IAEtB,IAAI,MAAM,IAAI,IAAI,QAChB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU;QACxB,sBAAsB,UAAU;IAClC;SACK,IAAI,MAAM,IAAI,IAAI,QACvB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU,KAAK;QAC7B,cAAc;IAChB;SACK,IAAI,MAAM,IAAI,IAAI,UACvB,SAAS,KAAK,GAAG;QACf,cAAc,UAAU,GAAG;QAC3B,mBAAmB;IACrB;SACK,IAAI,MAAM,IAAI,IAAI,UACvB,SAAS,KAAK,GAAG;QACf,gBAAgB,UAAU,KAAK;QAC/B,uBAAuB,UAAU,KAAK;QACtC,iBAAiB;IACnB;IAGF,OAAO;AACT;AAMO,eAAe,0CACpB,SAAkC,EAClC,eAA+C,IAAI,EACnD,SAAgC,CAAC,CAAC;IAElC,MAAM,eACJ,WAAW,QACX,OAAO,OACP,aAAa,YAAY,EACzB,GAAG,MACJ,GAAG;IACJ,IAAI,cAAc;IAClB,IAAI,QAAQ,MAAM,CAAA,GAAA,qBAAa,EAAE,WAAW;QAC1C,cAAc;IAChB;IAEA,IAAI,gBAAgB,MAAM;QACxB,MAAM,UAAU,MAAM,CAAA,GAAA,qBAAa,EAAE,cAAc;YACjD,cAAc;QAChB;QACA,QAAQ,CAAA,GAAA,kBAAU,EAAE,OAAO;QAC3B,gBAAgB,OAAO,IAAI,CAAC,QAAQ,OAAO;IAC7C;IAEA,IAAI,MAAM;QACR,8DAA8D;QAC9D,gBAAgB,OAAO,IAAI,CAAC,MAAM,OAAO;QAEzC,QAAQ,MAAM,0CAAe,OAAO;YAAE,GAAG,IAAI;yBAAE;yBAAa;QAAY;IAC1E;IACA,OAAO;AACT","sources":["packages/map-interface/src/dev/xray.ts"],"sourcesContent":["import { getMapboxStyle, mergeStyles } from \"@macrostrat/mapbox-utils\";\nimport { asChromaColor, toRGBAString } from \"@macrostrat/color-utils\";\nimport mapboxgl from \"mapbox-gl\";\n\ninterface XRayOptions {\n color?: string;\n inDarkMode?: boolean;\n mapboxToken?: string;\n xRaySources?: string[];\n}\n\nexport async function buildXRayStyle(\n baseStyle: string | object,\n params: XRayOptions = null\n) {\n const {\n inDarkMode = false,\n color = \"rgb(74, 242, 161)\",\n mapboxToken,\n xRaySources,\n } = params;\n const style = await getMapboxStyle(baseStyle, { access_token: mapboxToken });\n const sources = xRaySources ?? Object.keys(style.sources);\n\n let layers = [];\n for (let layer of style.layers) {\n if (!sources.includes(layer.source)) {\n layers.push(layer);\n continue;\n }\n let newLayer = transformMapboxLayer(layer, color, inDarkMode);\n if (newLayer != null) {\n layers.push(newLayer);\n }\n }\n\n return {\n ...style,\n layers,\n };\n}\n\nfunction transformMapboxLayer(layer, color, inDarkMode) {\n const c = asChromaColor(color);\n const xRayColor = (opacity = 1, darken = 0) => {\n if (!inDarkMode) {\n return toRGBAString(c.darken(2 - darken).alpha(opacity));\n }\n return toRGBAString(c.alpha(opacity).darken(darken));\n };\n\n if (layer.type == \"background\") {\n return null;\n }\n\n let newLayer = { ...layer };\n\n console.log(xRayColor(0.5));\n\n if (layer.type == \"fill\") {\n newLayer.paint = {\n \"fill-color\": xRayColor(0.1),\n \"fill-outline-color\": xRayColor(0.5),\n };\n } else if (layer.type == \"line\") {\n newLayer.paint = {\n \"line-color\": xRayColor(0.5, 0),\n \"line-width\": 1.5,\n };\n } else if (layer.type == \"symbol\") {\n newLayer.paint = {\n \"text-color\": xRayColor(1, -0.5),\n \"text-halo-color\": \"#000\",\n };\n } else if (layer.type == \"circle\") {\n newLayer.paint = {\n \"circle-color\": xRayColor(0.5, 0),\n \"circle-stroke-color\": xRayColor(0.5, 1),\n \"circle-radius\": 2,\n };\n }\n\n return newLayer;\n}\n\ntype InspectorStyleOptions = XRayOptions & {\n xRay?: boolean;\n};\n\nexport async function buildInspectorStyle(\n baseStyle: mapboxgl.Style | string,\n overlayStyle: mapboxgl.Style | string | null = null,\n params: InspectorStyleOptions = {}\n) {\n const {\n mapboxToken,\n xRay = false,\n xRaySources: _xRaySources,\n ...rest\n } = params;\n let xRaySources = _xRaySources;\n let style = await getMapboxStyle(baseStyle, {\n access_token: mapboxToken,\n });\n\n if (overlayStyle != null) {\n const overlay = await getMapboxStyle(overlayStyle, {\n access_token: mapboxToken,\n });\n style = mergeStyles(style, overlay);\n xRaySources ??= Object.keys(overlay.sources);\n }\n\n if (xRay) {\n // If we haven't specified sources, then we'll use all of them\n xRaySources ??= Object.keys(style.sources);\n\n style = await buildXRayStyle(style, { ...rest, mapboxToken, xRaySources });\n }\n return style;\n}\n"],"names":[],"version":3,"file":"xray.c0663c25.js.map"}
@@ -1,2 +0,0 @@
1
- require("./main.module.7c928a6f.js"),require("./main.module.91a06e96.css"),require("./controls.511f309b.js");var e=require("@macrostrat/hyper");function r(e){return e&&e.__esModule?e.default:e}require("classnames"),require("transition-hook"),require("@macrostrat/mapbox-react"),require("@macrostrat/ui-components"),require("@macrostrat/mapbox-utils"),require("@blueprintjs/core");var i={};i=new URL("main.module.7c928a6f.js","file:"+__filename).toString(),new URL("controls.511f309b.js","file:"+__filename).toString(),r(e).styled(r(i));
2
- //# sourceMappingURL=container.ab523076.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,Q,8C,Q,+C,Q,2C,I,E,Q,qB,S,E,C,E,O,G,E,U,C,E,O,C,C,C,Q,c,Q,mB,Q,4B,Q,6B,Q,4B,Q,qB,I,E,C,EEAA,EAAiB,IAAA,IAAoB,2CAAA,QAAA,YAA4C,QAAQ,GCAxE,IAAA,IAAoB,wCAAA,QAAA,YAAyC,QAAQ,GFiB5E,AAAA,AAAA,EAAA,GAAM,MAAM,CAAC,EAAA","sources":["<anon>","packages/map-interface/src/container.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-d62d2349645b8f4c.js","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-a05b7f3aef7398d8.js"],"sourcesContent":["require(\"./main.module.7c928a6f.js\");\nrequire(\"./main.module.91a06e96.css\");\nrequire(\"./controls.511f309b.js\");\nvar $lAyW8$macrostrathyper = require(\"@macrostrat/hyper\");\nvar $lAyW8$classnames = require(\"classnames\");\nvar $lAyW8$transitionhook = require(\"transition-hook\");\nvar $lAyW8$macrostratmapboxreact = require(\"@macrostrat/mapbox-react\");\nvar $lAyW8$macrostratuicomponents = require(\"@macrostrat/ui-components\");\nvar $lAyW8$macrostratmapboxutils = require(\"@macrostrat/mapbox-utils\");\nvar $lAyW8$blueprintjscore = require(\"@blueprintjs/core\");\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nvar $14b8bde8ee648c70$exports = {};\n$14b8bde8ee648c70$exports = new URL(\"main.module.7c928a6f.js\", \"file:\" + __filename).toString();\n\n\n\n\n\n\nvar $df60ba5b782d207f$exports = {};\n$df60ba5b782d207f$exports = new URL(\"controls.511f309b.js\", \"file:\" + __filename).toString();\n\n\n\n\nconst $4661d95a4b848918$var$h = (0, ($parcel$interopDefault($lAyW8$macrostrathyper))).styled((0, (/*@__PURE__*/$parcel$interopDefault($14b8bde8ee648c70$exports))));\nconst $4661d95a4b848918$export$ec68dd77edbe678b = (props)=>$4661d95a4b848918$var$h((0, $lAyW8$blueprintjscore.Card), {\n ...props,\n className: (0, ($parcel$interopDefault($lAyW8$classnames)))(\"panel-card\", props.className)\n });\nvar $4661d95a4b848918$export$612ca936d3ed4784 = /*#__PURE__*/ function(DetailPanelStyle) {\n DetailPanelStyle[\"FIXED\"] = \"fixed\";\n DetailPanelStyle[\"FLOATING\"] = \"floating\";\n return DetailPanelStyle;\n}({});\nconst $4661d95a4b848918$export$9fa5da0bcfd0a290 = (props)=>$4661d95a4b848918$var$h($4661d95a4b848918$var$MapProviders, $4661d95a4b848918$var$h($4661d95a4b848918$var$_MapAreaContainer, props));\nfunction $4661d95a4b848918$var$_MapAreaContainer({ children: children, className: className, navbar: navbar, contextPanel: contextPanel = null, detailPanel: detailPanel = null, detailPanelOpen: detailPanelOpen, contextPanelOpen: contextPanelOpen = true, bottomPanel: bottomPanel = null, mainPanel: mainPanel, mapControls: mapControls = $4661d95a4b848918$var$h((0, $df60ba5b782d207f$exports.MapBottomControls)), contextStackProps: contextStackProps = null, detailStackProps: detailStackProps = null, detailPanelStyle: detailPanelStyle = \"floating\", fitViewport: fitViewport = true, showPanelOutlines: showPanelOutlines = false, preventMapInteraction: preventMapInteraction = false, ...rest }) {\n const _detailPanelOpen = detailPanelOpen ?? detailPanel != null;\n const contextPanelTrans = (0, $lAyW8$transitionhook.useTransition)(contextPanelOpen, 800);\n const detailPanelTrans = (0, $lAyW8$transitionhook.useTransition)(_detailPanelOpen, 800);\n /*- We apply a custom style to the panel container when we are interacting\n with the search bar, so that we can block map interactions until search\n bar focus is lost.\n - We also apply a custom style when the infodrawer is open so we can hide\n the search bar on mobile platforms\n - These styles are doubly applied so we can have both namespaced and\n outside-accessible styles for each case.\n */ const mainUIClassNames = (0, ($parcel$interopDefault($lAyW8$classnames)))(\"map-container\", className, `detail-panel-${detailPanelStyle}`, `context-panel-${contextPanelTrans.stage}`, `map-context-${contextPanelTrans.stage}`, `detail-panel-${detailPanelTrans.stage}`, `map-detail-${detailPanelTrans.stage}`, {\n \"detail-panel-open\": _detailPanelOpen,\n \"map-context-open\": contextPanelOpen,\n \"show-panel-outlines\": showPanelOutlines,\n \"fit-viewport\": fitViewport\n });\n const mapControlsExt = $4661d95a4b848918$var$h([\n $4661d95a4b848918$var$h((0, $lAyW8$macrostratmapboxreact.ZoomControl), {\n className: \"zoom-control\"\n }),\n $4661d95a4b848918$var$h(\"div.spacer\"),\n mapControls\n ]);\n const detailStackExt = $4661d95a4b848918$var$h(\"div.detail-stack.infodrawer-container\", detailStackProps, [\n $4661d95a4b848918$var$h(\"div.detail-panel-holder\", null, detailPanel),\n $4661d95a4b848918$var$h.if(detailPanelStyle == \"floating\")([\n mapControlsExt\n ])\n ]);\n let contextStack = null;\n if (navbar != null || contextPanel != null) contextStack = $4661d95a4b848918$var$h($4661d95a4b848918$var$ContextStack, {\n navbar: navbar,\n ...contextStackProps\n }, [\n $4661d95a4b848918$var$h.if(contextPanelTrans.shouldMount)([\n contextPanel\n ])\n ]);\n return $4661d95a4b848918$var$h($4661d95a4b848918$export$fa395a37c3898ae3, {\n className: mainUIClassNames\n }, [\n $4661d95a4b848918$var$h(\"div.main-row\", [\n $4661d95a4b848918$var$h(\"div.map-ui\", {\n ...rest\n }, [\n contextStack,\n //h(MapView),\n children ?? mainPanel,\n $4661d95a4b848918$var$h.if(detailPanelStyle == \"floating\")([\n detailStackExt\n ]),\n $4661d95a4b848918$var$h.if(detailPanelStyle == \"fixed\")(\"div.map-control-stack\", mapControlsExt)\n ]),\n $4661d95a4b848918$var$h.if(detailPanelStyle == \"fixed\")([\n detailStackExt\n ])\n ]),\n $4661d95a4b848918$var$h(\"div.bottom\", null, bottomPanel)\n ]);\n}\nfunction $4661d95a4b848918$var$ContextStack(props) {\n const { adaptiveWidth: adaptiveWidth, navbar: navbar, children: children, ...rest } = props;\n const props1 = (0, $lAyW8$macrostrathyper.addClassNames)(rest, {\n \"adaptive-width\": adaptiveWidth\n });\n return $4661d95a4b848918$var$h(\"div.context-stack\", props1, [\n navbar,\n $4661d95a4b848918$var$h(\"div.context-panel-holder\", null, children),\n $4661d95a4b848918$var$h(\"div.spacer\")\n ]);\n}\nconst $4661d95a4b848918$var$MapProviders = ({ children: children })=>$4661d95a4b848918$var$h((0, $lAyW8$macrostratuicomponents.ToasterContext), $4661d95a4b848918$var$h((0, $lAyW8$macrostratmapboxreact.MapboxMapProvider), children));\nfunction $4661d95a4b848918$export$fa395a37c3898ae3({ className: className, children: children }) {\n const mapPosition = (0, $lAyW8$macrostratmapboxreact.useMapPosition)();\n if (mapPosition != null) {\n const { mapIsRotated: mapIsRotated, mapUse3D: mapUse3D, mapIsGlobal: mapIsGlobal } = (0, $lAyW8$macrostratmapboxutils.mapViewInfo)(mapPosition);\n className = (0, ($parcel$interopDefault($lAyW8$classnames)))(className, {\n \"map-is-rotated\": mapIsRotated,\n \"map-3d-available\": mapUse3D,\n \"map-is-global\": mapIsGlobal\n });\n }\n return $4661d95a4b848918$var$h(\"div\", {\n className: className\n }, children);\n} //const _MapPage = compose(HotkeysProvider, MapPage);\n\n\n//# sourceMappingURL=container.ab523076.js.map\n","import hyper, { addClassNames } from \"@macrostrat/hyper\";\nimport { HTMLDivProps } from \"@blueprintjs/core\";\nimport styles from \"./main.module.sass\";\nimport classNames from \"classnames\";\nimport { useTransition } from \"transition-hook\";\nimport {\n MapboxMapProvider,\n ZoomControl,\n useMapPosition,\n} from \"@macrostrat/mapbox-react\";\nimport { ToasterContext } from \"@macrostrat/ui-components\";\nimport { MapBottomControls } from \"./controls\";\nimport { mapViewInfo, MapPosition } from \"@macrostrat/mapbox-utils\";\nimport { Card } from \"@blueprintjs/core\";\n\nimport { ReactNode } from \"react\";\n\nconst h = hyper.styled(styles);\n\ntype AnyElement = React.ReactNode | React.ReactElement | React.ReactFragment;\n\nexport const PanelCard = (props) =>\n h(Card, { ...props, className: classNames(\"panel-card\", props.className) });\n\ninterface ContextStackProps extends HTMLDivProps {\n adaptiveWidth: boolean;\n navbar: AnyElement;\n}\n\nexport enum DetailPanelStyle {\n FIXED = \"fixed\",\n FLOATING = \"floating\",\n}\n\nexport const MapAreaContainer = (props) =>\n h(MapProviders, h(_MapAreaContainer, props));\n\ninterface MapAreaContainerProps {\n navbar: AnyElement;\n children?: AnyElement;\n mapControls?: AnyElement;\n contextPanel?: AnyElement;\n contextStack?: AnyElement;\n mainPanel?: AnyElement;\n detailPanel?: AnyElement;\n bottomPanel?: AnyElement;\n className?: string;\n detailPanelOpen?: boolean;\n contextPanelOpen?: boolean;\n contextStackProps?: ContextStackProps;\n detailStackProps?: HTMLDivProps;\n detailPanelStyle: DetailPanelStyle;\n fitViewport?: boolean;\n showPanelOutlines?: boolean;\n preventMapInteraction?: boolean;\n}\n\nfunction _MapAreaContainer({\n children,\n className,\n navbar,\n contextPanel = null,\n detailPanel = null,\n detailPanelOpen,\n contextPanelOpen = true,\n bottomPanel = null,\n mainPanel,\n mapControls = h(MapBottomControls),\n contextStackProps = null,\n detailStackProps = null,\n detailPanelStyle = DetailPanelStyle.FLOATING,\n fitViewport = true,\n showPanelOutlines = false,\n preventMapInteraction = false,\n ...rest\n}: MapAreaContainerProps) {\n const _detailPanelOpen = detailPanelOpen ?? detailPanel != null;\n const contextPanelTrans = useTransition(contextPanelOpen, 800);\n const detailPanelTrans = useTransition(_detailPanelOpen, 800);\n\n /*- We apply a custom style to the panel container when we are interacting\n with the search bar, so that we can block map interactions until search\n bar focus is lost.\n - We also apply a custom style when the infodrawer is open so we can hide\n the search bar on mobile platforms\n - These styles are doubly applied so we can have both namespaced and\n outside-accessible styles for each case.\n */\n const mainUIClassNames = classNames(\n \"map-container\",\n className,\n `detail-panel-${detailPanelStyle}`,\n `context-panel-${contextPanelTrans.stage}`,\n `map-context-${contextPanelTrans.stage}`,\n `detail-panel-${detailPanelTrans.stage}`,\n `map-detail-${detailPanelTrans.stage}`,\n {\n \"detail-panel-open\": _detailPanelOpen,\n \"map-context-open\": contextPanelOpen,\n \"show-panel-outlines\": showPanelOutlines,\n \"fit-viewport\": fitViewport,\n }\n );\n\n const mapControlsExt = h([\n h(ZoomControl, { className: \"zoom-control\" }),\n h(\"div.spacer\"),\n mapControls,\n ]);\n\n const detailStackExt = h(\n \"div.detail-stack.infodrawer-container\",\n detailStackProps,\n [\n h(\"div.detail-panel-holder\", null, detailPanel),\n h.if(detailPanelStyle == DetailPanelStyle.FLOATING)([mapControlsExt]),\n ]\n );\n\n let contextStack = null;\n if (navbar != null || contextPanel != null) {\n contextStack = h(ContextStack, { navbar, ...contextStackProps }, [\n h.if(contextPanelTrans.shouldMount)([contextPanel]),\n ]);\n }\n\n return h(MapStyledContainer, { className: mainUIClassNames }, [\n h(\"div.main-row\", [\n h(\"div.map-ui\", { ...rest }, [\n contextStack,\n //h(MapView),\n children ?? mainPanel,\n h.if(detailPanelStyle == DetailPanelStyle.FLOATING)([detailStackExt]),\n h.if(detailPanelStyle == DetailPanelStyle.FIXED)(\n \"div.map-control-stack\",\n mapControlsExt\n ),\n ]),\n h.if(detailPanelStyle == DetailPanelStyle.FIXED)([detailStackExt]),\n ]),\n h(\"div.bottom\", null, bottomPanel),\n ]);\n}\n\nfunction ContextStack(props: ContextStackProps) {\n const { adaptiveWidth, navbar, children, ...rest } = props;\n const props1 = addClassNames(rest, { \"adaptive-width\": adaptiveWidth });\n return h(\"div.context-stack\", props1, [\n navbar,\n h(\"div.context-panel-holder\", null, children),\n h(\"div.spacer\"),\n ]);\n}\n\nconst MapProviders = ({ children }) =>\n h(ToasterContext, h(MapboxMapProvider, children));\n\ninterface MapContainerProps {\n className?: string;\n children?: ReactNode;\n}\n\nexport function MapStyledContainer({ className, children }: MapContainerProps) {\n const mapPosition = useMapPosition();\n if (mapPosition != null) {\n const { mapIsRotated, mapUse3D, mapIsGlobal } = mapViewInfo(mapPosition);\n className = classNames(className, {\n \"map-is-rotated\": mapIsRotated,\n \"map-3d-available\": mapUse3D,\n \"map-is-global\": mapIsGlobal,\n });\n }\n\n return h(\"div\", { className }, children);\n}\n\n//const _MapPage = compose(HotkeysProvider, MapPage);\n","module.exports = new __parcel__URL__(\"main.module.7c928a6f.js\").toString();","module.exports = new __parcel__URL__(\"controls.511f309b.js\").toString();"],"names":["require","$lAyW8$macrostrathyper","$parcel$interopDefault","a","__esModule","default","$14b8bde8ee648c70$exports","URL","__filename","toString","styled"],"version":3,"file":"container.ab523076.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- require("./main.module.8a9943af.css"),require("./main.module.e200d631.js");var e=require("@blueprintjs/core"),r=require("@macrostrat/hyper");function a(e){return e&&e.__esModule?e.default:e}require("@macrostrat/mapbox-react"),require("@macrostrat/ui-components");var i={};i=new URL("main.module.8a9943af.css","file:"+__filename).toString(),a(r).styled(a(i))(e.Spinner,{size:16});
2
- //# sourceMappingURL=context-panel.0ae29ecf.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,Q,+C,Q,8C,I,E,Q,qB,E,Q,qB,S,E,C,E,O,G,E,U,C,E,O,C,C,C,Q,4B,Q,6B,I,E,C,EEAA,EAAiB,IAAA,IAAoB,4CAAA,QAAA,YAA6C,QAAQ,GDSnE,AAFb,AAAA,AAAA,EAAA,GAAM,MAAM,CAAC,EAAA,IAEE,EAAA,OAAM,CAAG,CAAE,KAAM,EAAG","sources":["<anon>","packages/map-interface/src/context-panel/index.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-7d2d42ad16b9364e.js"],"sourcesContent":["require(\"./main.module.8a9943af.css\");\nrequire(\"./main.module.e200d631.js\");\nvar $14Taq$blueprintjscore = require(\"@blueprintjs/core\");\nvar $14Taq$macrostrathyper = require(\"@macrostrat/hyper\");\nvar $14Taq$macrostratmapboxreact = require(\"@macrostrat/mapbox-react\");\nvar $14Taq$macrostratuicomponents = require(\"@macrostrat/ui-components\");\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n\nvar $e988a53ec4c6f1a8$exports = {};\n$e988a53ec4c6f1a8$exports = new URL(\"main.module.8a9943af.css\", \"file:\" + __filename).toString();\n\n\n\n\nconst $8c3698ca3fcf939f$var$h = (0, ($parcel$interopDefault($14Taq$macrostrathyper))).styled((0, (/*@__PURE__*/$parcel$interopDefault($e988a53ec4c6f1a8$exports))));\nconst $8c3698ca3fcf939f$var$spinnerElement = $8c3698ca3fcf939f$var$h((0, $14Taq$blueprintjscore.Spinner), {\n size: 16\n});\nfunction $8c3698ca3fcf939f$export$4ec83e90d030b2f3({ isLoading: isLoading = false, onClick: onClick, active: active = false, large: large = true, icon: icon = \"menu\", style: style }) {\n return $8c3698ca3fcf939f$var$h((0, $14Taq$blueprintjscore.Button), {\n className: \"loading-button\",\n icon: isLoading ? $8c3698ca3fcf939f$var$spinnerElement : icon,\n large: large,\n minimal: true,\n onClick: onClick,\n active: active && !isLoading,\n style: style\n });\n}\nfunction $8c3698ca3fcf939f$export$9e3bae3c08bde368(props) {\n const isLoading = (0, $14Taq$macrostratmapboxreact.useMapStatus)((s)=>s.isLoading);\n return $8c3698ca3fcf939f$var$h($8c3698ca3fcf939f$export$4ec83e90d030b2f3, {\n ...props,\n isLoading: isLoading\n });\n}\nfunction $8c3698ca3fcf939f$export$a8cc0062d02a3841({ className: className, children: children, headerElement: headerElement = null, title: title = null, statusElement: statusElement = null, rightElement: rightElement = null, height: height, width: width, style: style = {} }) {\n let _rightElement = null;\n if (rightElement != null) _rightElement = $8c3698ca3fcf939f$var$h(\"div.right-element\", rightElement);\n let _headerElement = headerElement;\n if (title != null && _headerElement == null) {\n if (typeof title === \"string\") _headerElement = $8c3698ca3fcf939f$var$h((0, $14Taq$blueprintjscore.Text), {\n tagName: \"h2\",\n ellipsize: true\n }, title);\n else _headerElement = title;\n }\n if (_headerElement != null) _headerElement = $8c3698ca3fcf939f$var$h([\n _headerElement,\n $8c3698ca3fcf939f$var$h((0, $14Taq$macrostratuicomponents.Spacer))\n ]);\n return $8c3698ca3fcf939f$var$h(\"div.searchbar-holder\", {\n className: className,\n style: {\n width: width\n }\n }, [\n $8c3698ca3fcf939f$var$h(\"div.navbar-holder\", [\n $8c3698ca3fcf939f$var$h((0, $14Taq$blueprintjscore.Navbar), {\n className: \"searchbar navbar panel\",\n style: {\n height: height,\n ...style\n }\n }, [\n _headerElement,\n children,\n _rightElement\n ])\n ]),\n $8c3698ca3fcf939f$var$h.if(statusElement != null)((0, $14Taq$blueprintjscore.Card), {\n className: \"status-tongue\"\n }, statusElement)\n ]);\n}\n\n\n//# sourceMappingURL=context-panel.0ae29ecf.js.map\n","import { useMemo } from \"react\";\nimport { Navbar, Button, Spinner, Card, Text } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport { useMapStatus } from \"@macrostrat/mapbox-react\";\nimport { Spacer } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\nconst spinnerElement = h(Spinner, { size: 16 });\n\nexport function LoadingButton({\n isLoading = false,\n onClick,\n active = false,\n large = true,\n icon = \"menu\",\n style,\n}) {\n return h(Button, {\n className: \"loading-button\",\n icon: isLoading ? spinnerElement : icon,\n large,\n minimal: true,\n onClick,\n active: active && !isLoading,\n style,\n });\n}\n\nexport function MapLoadingButton(props) {\n const isLoading = useMapStatus((s) => s.isLoading);\n return h(LoadingButton, { ...props, isLoading });\n}\n\ntype AnyChildren = React.ReactNode;\n\nexport interface FloatingNavbarProps {\n className?: string;\n children?: AnyChildren;\n headerElement?: AnyChildren;\n title?: AnyChildren;\n statusElement?: AnyChildren;\n rightElement?: AnyChildren;\n height?: number | string;\n width?: number | string;\n style?: object;\n}\n\nexport function FloatingNavbar({\n className,\n children,\n headerElement = null,\n title = null,\n statusElement = null,\n rightElement = null,\n height,\n width,\n style = {},\n}: FloatingNavbarProps) {\n let _rightElement: React.ReactNode | null = null;\n if (rightElement != null) {\n _rightElement = h(\"div.right-element\", rightElement);\n }\n\n let _headerElement: React.ReactNode | null = headerElement;\n if (title != null && _headerElement == null) {\n if (typeof title === \"string\") {\n _headerElement = h(Text, { tagName: \"h2\", ellipsize: true }, title);\n } else {\n _headerElement = title;\n }\n }\n\n if (_headerElement != null) {\n _headerElement = h([_headerElement, h(Spacer)]);\n }\n\n return h(\"div.searchbar-holder\", { className, style: { width } }, [\n h(\"div.navbar-holder\", [\n h(\n Navbar,\n {\n className: \"searchbar navbar panel\",\n style: { height, ...style },\n },\n [_headerElement, children, _rightElement]\n ),\n ]),\n h.if(statusElement != null)(\n Card,\n { className: \"status-tongue\" },\n statusElement\n ),\n ]);\n}\n","module.exports = new __parcel__URL__(\"main.module.8a9943af.css\").toString();"],"names":["require","$14Taq$blueprintjscore","$14Taq$macrostrathyper","$parcel$interopDefault","a","__esModule","default","$e988a53ec4c6f1a8$exports","URL","__filename","toString","$8c3698ca3fcf939f$var$h","styled","Spinner","size"],"version":3,"file":"context-panel.0ae29ecf.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- require("./main.module.7c928a6f.js"),require("./main.module.91a06e96.css"),require("react"),require("mapbox-gl");var r=require("@macrostrat/hyper");function e(r){return r&&r.__esModule?r.default:r}require("@macrostrat/mapbox-react"),require("@macrostrat/ui-components");var t=globalThis,a={},i={},o=t.parcelRequire94c2;null==o&&((o=function(r){if(r in a)return a[r].exports;if(r in i){var e=i[r];delete i[r];var t={id:r,exports:{}};return a[r]=t,e.call(t.exports,t,t.exports),t.exports}var o=Error("Cannot find module '"+r+"'");throw o.code="MODULE_NOT_FOUND",o}).register=function(r,e){i[r]=e},t.parcelRequire94c2=o),o.register;var u=o("6ULxP");e(r).styled(e(u));
2
- //# sourceMappingURL=controls.511f309b.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,Q,8C,Q,+C,Q,S,Q,a,I,E,Q,qB,S,E,C,E,O,G,E,U,C,E,O,C,C,C,Q,4B,Q,6B,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,I,E,E,SCcU,AAAA,AAAA,EAAA,GAAM,MAAM,CAAC,EAAA","sources":["<anon>","packages/map-interface/src/controls.ts"],"sourcesContent":["require(\"./main.module.7c928a6f.js\");\nrequire(\"./main.module.91a06e96.css\");\nvar $kbh3o$react = require(\"react\");\nvar $kbh3o$mapboxgl = require(\"mapbox-gl\");\nvar $kbh3o$macrostrathyper = require(\"@macrostrat/hyper\");\nvar $kbh3o$macrostratmapboxreact = require(\"@macrostrat/mapbox-react\");\nvar $kbh3o$macrostratuicomponents = require(\"@macrostrat/ui-components\");\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire94c2\"];\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[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\n\n\n\n\nvar $6ULxP = parcelRequire(\"6ULxP\");\n\n\nconst $7a11e3c77fefb3c4$var$h = (0, ($parcel$interopDefault($kbh3o$macrostrathyper))).styled((0, (/*@__PURE__*/$parcel$interopDefault($6ULxP))));\nfunction $7a11e3c77fefb3c4$var$ScaleControl(props) {\n const optionsRef = (0, $kbh3o$react.useRef)({\n maxWidth: 200,\n unit: \"metric\"\n });\n return $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratmapboxreact.MapControlWrapper), {\n className: \"map-scale-control\",\n control: (0, $kbh3o$mapboxgl.ScaleControl),\n options: optionsRef.current,\n ...props\n });\n}\nfunction $7a11e3c77fefb3c4$var$GeolocationControl(props) {\n const optionsRef = (0, $kbh3o$react.useRef)({\n showAccuracyCircle: true,\n showUserLocation: true,\n trackUserLocation: true,\n positionOptions: {\n enableHighAccuracy: true\n }\n });\n return $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratmapboxreact.MapControlWrapper), {\n control: (0, $kbh3o$mapboxgl.GeolocateControl),\n options: optionsRef.current,\n ...props\n });\n}\nfunction $7a11e3c77fefb3c4$export$db1a2e058a06fb5c({ children: children }) {\n const { isInitialized: isInitialized } = (0, $kbh3o$macrostratmapboxreact.useMapStatus)();\n if (!isInitialized) return null;\n return $7a11e3c77fefb3c4$var$h(\"div.map-controls\", [\n $7a11e3c77fefb3c4$var$h($7a11e3c77fefb3c4$var$ScaleControl),\n $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratmapboxreact.ThreeDControl), {\n className: \"map-3d-control\"\n }),\n $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratmapboxreact.CompassControl), {\n className: \"compass-control\"\n }),\n $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratmapboxreact.GlobeControl), {\n className: \"globe-control\"\n }),\n $7a11e3c77fefb3c4$var$h($7a11e3c77fefb3c4$var$GeolocationControl, {\n className: \"geolocation-control\"\n }),\n // If we have global development tools enabled, show the button\n $7a11e3c77fefb3c4$var$h((0, $kbh3o$macrostratuicomponents.DevToolsButtonSlot), {\n className: \"map-control\"\n }),\n children\n ]);\n}\n\n\n//# sourceMappingURL=controls.511f309b.js.map\n","import { useRef } from \"react\";\nimport { GeolocateControl } from \"mapbox-gl\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport {\n CompassControl,\n GlobeControl,\n ThreeDControl,\n MapControlWrapper,\n useMapStatus,\n} from \"@macrostrat/mapbox-react\";\nimport { ScaleControl as BaseScaleControl } from \"mapbox-gl\";\nimport { DevToolsButtonSlot } from \"@macrostrat/ui-components\";\n\nconst h = hyper.styled(styles);\n\nfunction ScaleControl(props) {\n const optionsRef = useRef({\n maxWidth: 200,\n unit: \"metric\",\n });\n return h(MapControlWrapper, {\n className: \"map-scale-control\",\n control: BaseScaleControl,\n options: optionsRef.current,\n ...props,\n });\n}\n\nfunction GeolocationControl(props) {\n const optionsRef = useRef({\n showAccuracyCircle: true,\n showUserLocation: true,\n trackUserLocation: true,\n positionOptions: {\n enableHighAccuracy: true,\n },\n });\n return h(MapControlWrapper, {\n control: GeolocateControl,\n options: optionsRef.current,\n ...props,\n });\n}\n\nexport function MapBottomControls({ children }) {\n const { isInitialized } = useMapStatus();\n\n if (!isInitialized) {\n return null;\n }\n\n return h(\"div.map-controls\", [\n h(ScaleControl),\n h(ThreeDControl, { className: \"map-3d-control\" }),\n h(CompassControl, { className: \"compass-control\" }),\n h(GlobeControl, { className: \"globe-control\" }),\n h(GeolocationControl, { className: \"geolocation-control\" }),\n // If we have global development tools enabled, show the button\n h(DevToolsButtonSlot, { className: \"map-control\" }),\n children,\n ]);\n}\n"],"names":["require","$kbh3o$macrostrathyper","$parcel$interopDefault","a","__esModule","default","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","$6ULxP","styled"],"version":3,"file":"controls.511f309b.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- require("./map-page.a9602658.js"),require("./tile-extent.28db5d2c.js"),require("./vector-tile-features.b5a23b71.js"),require("./xray.bce11e7b.js");var e=globalThis,r={},i={},t=e.parcelRequire94c2;null==t&&((t=function(e){if(e in r)return r[e].exports;if(e in i){var t=i[e];delete i[e];var a={id:e,exports:{}};return r[e]=a,t.call(a.exports,a,a.exports),a.exports}var c=Error("Cannot find module '"+e+"'");throw c.code="MODULE_NOT_FOUND",c}).register=function(e,r){i[e]=r},e.parcelRequire94c2=t),t.register,new URL("map-page.a9602658.js","file:"+__filename).toString(),t("2DICz"),t("gnyJS"),t("2mAQJ");
2
- //# sourceMappingURL=dev.709287ba.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,Q,2C,Q,8C,Q,uD,Q,uC,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,CEAiB,IAAA,IAAoB,wCAAA,QAAA,YAAyC,QAAQ,G,E,S,E,S,E","sources":["<anon>","packages/map-interface/src/dev/index.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-f14b5173fc324a77.js"],"sourcesContent":["require(\"./map-page.a9602658.js\");\nrequire(\"./tile-extent.28db5d2c.js\");\nrequire(\"./vector-tile-features.b5a23b71.js\");\nrequire(\"./xray.bce11e7b.js\");\n\n\n var $parcel$global = globalThis;\n \nvar $parcel$modules = {};\nvar $parcel$inits = {};\n\nvar parcelRequire = $parcel$global[\"parcelRequire94c2\"];\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[\"parcelRequire94c2\"] = parcelRequire;\n}\n\nvar parcelRegister = parcelRequire.register;\nvar $dc6a786c8b10a4e8$exports = {};\n$dc6a786c8b10a4e8$exports = new URL(\"map-page.a9602658.js\", \"file:\" + __filename).toString();\n\n\nparcelRequire(\"2DICz\");\nparcelRequire(\"gnyJS\");\nparcelRequire(\"2mAQJ\");\n\n\n//# sourceMappingURL=dev.709287ba.js.map\n","export * from \"./map-page\";\nexport * from \"./tile-extent\";\nexport * from \"./vector-tile-features\";\nexport * from \"./xray\";\n","module.exports = new __parcel__URL__(\"map-page.a9602658.js\").toString();"],"names":["require","$parcel$global","globalThis","$parcel$modules","$parcel$inits","parcelRequire","id","exports","init","module","call","err","Error","code","register","URL","__filename","toString"],"version":3,"file":"dev.709287ba.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- require("./main.module.5d5ab665.js"),require("./main.module.2d51c752.css"),require("./headers.2581f6d9.js"),require("react"),require("@blueprintjs/core");var e=require("@macrostrat/hyper");function r(e){return e&&e.__esModule?e.default:e}require("classnames");var a={};a=new URL("main.module.5d5ab665.js","file:"+__filename).toString(),new URL("headers.2581f6d9.js","file:"+__filename).toString(),r(e).styled(r(a));
2
- //# sourceMappingURL=expansion-panel.62240ee3.js.map
@@ -1 +0,0 @@
1
- {"mappings":"A,Q,8C,Q,+C,Q,0C,Q,S,Q,qB,I,E,Q,qB,S,E,C,E,O,G,E,U,C,E,O,C,C,C,Q,c,I,E,C,EEAA,EAAiB,IAAA,IAAoB,2CAAA,QAAA,YAA4C,QAAQ,GCAxE,IAAA,IAAoB,uCAAA,QAAA,YAAwC,QAAQ,GFQ3E,AAAA,AAAA,EAAA,GAAM,MAAM,CAAC,EAAA","sources":["<anon>","packages/map-interface/src/expansion-panel/index.ts","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-7acf631d60d17746.js","../../../../.yarn/berry/cache/@parcel-runtime-js-npm-2.13.3-f44fec8492-10c0.zip/node_modules/@parcel/runtime-js/lib/runtime-c25cf7ef94cb29eb.js"],"sourcesContent":["require(\"./main.module.5d5ab665.js\");\nrequire(\"./main.module.2d51c752.css\");\nrequire(\"./headers.2581f6d9.js\");\nvar $i8XZZ$react = require(\"react\");\nvar $i8XZZ$blueprintjscore = require(\"@blueprintjs/core\");\nvar $i8XZZ$macrostrathyper = require(\"@macrostrat/hyper\");\nvar $i8XZZ$classnames = require(\"classnames\");\n\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\n\n\nvar $2f4ada350b141b39$exports = {};\n$2f4ada350b141b39$exports = new URL(\"main.module.5d5ab665.js\", \"file:\" + __filename).toString();\n\n\n\nvar $33bf588cfa90d114$exports = {};\n$33bf588cfa90d114$exports = new URL(\"headers.2581f6d9.js\", \"file:\" + __filename).toString();\n\n\nconst $15797e7a878e886f$var$h = (0, ($parcel$interopDefault($i8XZZ$macrostrathyper))).styled((0, (/*@__PURE__*/$parcel$interopDefault($2f4ada350b141b39$exports))));\nfunction $15797e7a878e886f$export$cea00a9d724d5a32(props) {\n const { expanded: expanded, children: children, onChange: onChange, className: className, title: title, titleComponent: titleComponent } = props;\n const icon = expanded ? \"chevron-up\" : \"chevron-down\";\n return $15797e7a878e886f$var$h((0, $33bf588cfa90d114$exports.PanelSubhead), {\n className: (0, ($parcel$interopDefault($i8XZZ$classnames)))(\"expansion-panel-header\", className),\n onClick: onChange,\n title: title,\n component: titleComponent\n }, [\n children,\n $15797e7a878e886f$var$h((0, $i8XZZ$blueprintjscore.Icon), {\n icon: icon,\n className: \"expansion-panel-icon\"\n })\n ]);\n}\nfunction $15797e7a878e886f$var$ExpansionPanelBase(props) {\n let { title: title, titleComponent: titleComponent = \"h3\", children: children, expanded: expanded, helpText: helpText, onChange: onChange = ()=>{}, sideComponent: sideComponent = null, className: className } = props;\n const [isOpen, setOpen] = (0, $i8XZZ$react.useState)(expanded || false);\n const onChange_ = ()=>{\n onChange();\n setOpen(!isOpen);\n };\n return $15797e7a878e886f$var$h(\"div.expansion-panel-base\", {\n className: (0, ($parcel$interopDefault($i8XZZ$classnames)))(className, {\n expanded: isOpen,\n collapsed: !isOpen\n })\n }, [\n $15797e7a878e886f$var$h($15797e7a878e886f$export$cea00a9d724d5a32, {\n onChange: onChange_,\n expanded: isOpen,\n title: title,\n titleComponent: titleComponent\n }, $15797e7a878e886f$var$h(\"div.expansion-summary-title-help\", [\n $15797e7a878e886f$var$h(\"span.expansion-panel-subtext\", helpText),\n \" \",\n sideComponent\n ])),\n $15797e7a878e886f$var$h((0, $i8XZZ$blueprintjscore.Collapse), {\n isOpen: isOpen\n }, $15797e7a878e886f$var$h(\"div.expansion-children\", null, children))\n ]);\n}\nfunction $15797e7a878e886f$export$39c134eb0b07cf0e(props) {\n let { title: title, children: children, className: className, headerElement: headerElement = null } = props;\n return $15797e7a878e886f$var$h(\"div.info-panel-section\", {\n className: className\n }, [\n $15797e7a878e886f$var$h(\"div.panel-subhead\", null, headerElement ?? $15797e7a878e886f$var$h(\"h3\", title)),\n $15797e7a878e886f$var$h(\"div.panel-content\", null, children)\n ]);\n}\nfunction $15797e7a878e886f$export$40e646e38e6ed100(props) {\n return $15797e7a878e886f$var$h($15797e7a878e886f$var$ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel\"\n });\n}\nfunction $15797e7a878e886f$export$d7160281aff7c3b8(props) {\n return $15797e7a878e886f$var$h($15797e7a878e886f$var$ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel sub-expansion-panel\",\n titleComponent: \"h4\"\n });\n}\nfunction $15797e7a878e886f$export$44ad9ff780615135(props) {\n let { title: title, children: children, value: value, headerElement: headerElement, className: className } = props;\n const [isOpen, setIsOpen] = (0, $i8XZZ$react.useState)(false);\n headerElement ?? (headerElement = $15797e7a878e886f$var$h([\n $15797e7a878e886f$var$h(\"div.title\", title),\n value\n ]));\n return $15797e7a878e886f$var$h(\"div.expandable-details\", {\n className: className\n }, [\n $15797e7a878e886f$var$h(\"div.expandable-details-main\", [\n $15797e7a878e886f$var$h(\"div.expandable-details-header\", headerElement),\n $15797e7a878e886f$var$h(\"div.expandable-details-toggle\", [\n $15797e7a878e886f$var$h((0, $i8XZZ$blueprintjscore.Button), {\n small: true,\n minimal: true,\n active: isOpen,\n onClick: ()=>setIsOpen(!isOpen),\n icon: \"more\"\n })\n ])\n ]),\n $15797e7a878e886f$var$h((0, $i8XZZ$blueprintjscore.Collapse), {\n isOpen: isOpen\n }, $15797e7a878e886f$var$h(\"div.expandable-details-children\", null, children))\n ]);\n}\nfunction $15797e7a878e886f$export$263416b670b3f129({ title: title, className: className, children: children }) {\n return $15797e7a878e886f$var$h(\"div.expansion-body\", {\n className: className\n }, [\n $15797e7a878e886f$var$h(\"div.expansion-panel-detail-header\", title),\n $15797e7a878e886f$var$h(\"div.expansion-panel-detail-body\", null, children)\n ]);\n}\n\n\n//# sourceMappingURL=expansion-panel.62240ee3.js.map\n","import { useState } from \"react\";\nimport { Collapse, Icon } from \"@blueprintjs/core\";\nimport hyper from \"@macrostrat/hyper\";\nimport styles from \"./main.module.sass\";\nimport classNames from \"classnames\";\nimport { Button } from \"@blueprintjs/core\";\nimport { PanelSubhead } from \"./headers\";\n\nconst h = hyper.styled(styles);\n\nfunction ExpansionPanelSummary(props) {\n const { expanded, children, onChange, className, title, titleComponent } =\n props;\n const icon = expanded ? \"chevron-up\" : \"chevron-down\";\n return h(\n PanelSubhead,\n {\n className: classNames(\"expansion-panel-header\", className),\n onClick: onChange,\n title,\n component: titleComponent,\n },\n [children, h(Icon, { icon, className: \"expansion-panel-icon\" })]\n );\n}\n\nfunction ExpansionPanelBase(props) {\n let {\n title,\n titleComponent = \"h3\",\n children,\n expanded,\n helpText,\n onChange = () => {},\n sideComponent = null,\n className,\n } = props;\n const [isOpen, setOpen] = useState(expanded || false);\n\n const onChange_ = () => {\n onChange();\n setOpen(!isOpen);\n };\n\n return h(\n \"div.expansion-panel-base\",\n {\n className: classNames(className, {\n expanded: isOpen,\n collapsed: !isOpen,\n }),\n },\n [\n h(\n ExpansionPanelSummary,\n {\n onChange: onChange_,\n expanded: isOpen,\n title,\n titleComponent,\n },\n h(\"div.expansion-summary-title-help\", [\n h(\"span.expansion-panel-subtext\", helpText),\n \" \",\n sideComponent,\n ])\n ),\n h(Collapse, { isOpen }, h(\"div.expansion-children\", null, children)),\n ]\n );\n}\n\nexport function InfoPanelSection(props) {\n let { title, children, className, headerElement = null } = props;\n return h(\"div.info-panel-section\", { className }, [\n h(\"div.panel-subhead\", null, headerElement ?? h(\"h3\", title)),\n h(\"div.panel-content\", null, children),\n ]);\n}\n\nfunction ExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel\",\n });\n}\n\nfunction SubExpansionPanel(props) {\n return h(ExpansionPanelBase, {\n ...props,\n className: \"expansion-panel sub-expansion-panel\",\n titleComponent: \"h4\",\n });\n}\n\nfunction ExpandableDetailsPanel(props) {\n let { title, children, value, headerElement, className } = props;\n const [isOpen, setIsOpen] = useState(false);\n headerElement ??= h([h(\"div.title\", title), value]);\n return h(\"div.expandable-details\", { className }, [\n h(\"div.expandable-details-main\", [\n h(\"div.expandable-details-header\", headerElement),\n h(\"div.expandable-details-toggle\", [\n h(Button, {\n small: true,\n minimal: true,\n active: isOpen,\n onClick: () => setIsOpen(!isOpen),\n icon: \"more\",\n }),\n ]),\n ]),\n h(\n Collapse,\n { isOpen },\n h(\"div.expandable-details-children\", null, children)\n ),\n ]);\n}\n\nfunction ExpansionBody({ title, className, children }) {\n return h(\"div.expansion-body\", { className }, [\n h(\"div.expansion-panel-detail-header\", title),\n h(\"div.expansion-panel-detail-body\", null, children),\n ]);\n}\n\nexport {\n ExpansionPanel,\n ExpansionPanelSummary,\n ExpandableDetailsPanel,\n SubExpansionPanel,\n ExpansionBody,\n PanelSubhead,\n};\n","module.exports = new __parcel__URL__(\"main.module.5d5ab665.js\").toString();","module.exports = new __parcel__URL__(\"headers.2581f6d9.js\").toString();"],"names":["require","$i8XZZ$macrostrathyper","$parcel$interopDefault","a","__esModule","default","$2f4ada350b141b39$exports","URL","__filename","toString","styled"],"version":3,"file":"expansion-panel.62240ee3.js.map","sourceRoot":"../../../../"}
@@ -1,2 +0,0 @@
1
- require("./utils.274d0452.js"),require("@macrostrat/mapbox-utils");var r=globalThis,e={},t={},i=r.parcelRequire94c2;null==i&&((i=function(r){if(r in e)return e[r].exports;if(r in t){var i=t[r];delete t[r];var o={id:r,exports:{}};return e[r]=o,i.call(o.exports,o,o.exports),o.exports}var a=Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}).register=function(r,e){t[r]=e},r.parcelRequire94c2=i),i.register,i("h1r1l");
2
- //# sourceMappingURL=hash-string.3fc8ceb0.js.map