@mailwoman/react 9.4.0 → 10.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/README.md +17 -16
  2. package/fonts.css +97 -22
  3. package/lib/common/About.tsx +87 -71
  4. package/lib/common/ClientOnly.tsx +2 -14
  5. package/lib/common/CopyButton.tsx +3 -1
  6. package/lib/common/LoadingIndicator.tsx +4 -2
  7. package/lib/common/PresetChips.tsx +9 -8
  8. package/lib/common/confidence-tiers.ts +7 -6
  9. package/lib/common/cx.ts +3 -1
  10. package/lib/common/text-tokens.ts +7 -4
  11. package/lib/common/useBuildInfo.ts +54 -0
  12. package/lib/common/useClipboard.ts +2 -11
  13. package/lib/common.ts +22 -0
  14. package/lib/index.ts +27 -112
  15. package/lib/map/AppIdentity.tsx +85 -0
  16. package/lib/map/BackendControl.tsx +16 -13
  17. package/lib/map/CompareToggle.tsx +11 -33
  18. package/lib/map/DebugInfo.tsx +88 -0
  19. package/lib/map/Geocoder.tsx +92 -58
  20. package/lib/map/GeocoderControls.tsx +582 -127
  21. package/lib/map/GraticuleLayer.tsx +54 -0
  22. package/lib/map/MapCanvas.tsx +23 -12
  23. package/lib/map/MapChipRow.tsx +73 -0
  24. package/lib/map/MapCompass.tsx +68 -0
  25. package/lib/map/MapControlStack.tsx +97 -0
  26. package/lib/map/MapFooter.tsx +101 -0
  27. package/lib/map/MapProgressBar.tsx +55 -0
  28. package/lib/map/MapSearchBar.tsx +82 -0
  29. package/lib/map/MapSheet.tsx +71 -0
  30. package/lib/map/OverlayLayers.tsx +1 -1
  31. package/lib/map/PlaceAutocomplete.tsx +10 -21
  32. package/lib/map/PlaceMarker.tsx +4 -2
  33. package/lib/map/ResolvedPlaceLayers.tsx +5 -14
  34. package/lib/map/ResultCamera.tsx +8 -31
  35. package/lib/map/ResultOverlay.tsx +2 -12
  36. package/lib/map/ResultPanel.tsx +1 -20
  37. package/lib/map/VersionPicker.tsx +10 -19
  38. package/lib/map/fake-runtime.ts +10 -12
  39. package/lib/map/geometry.ts +14 -47
  40. package/lib/map/graticule.ts +80 -0
  41. package/lib/map/map-debug.ts +1 -1
  42. package/lib/map/place-render.ts +28 -60
  43. package/lib/map/types.ts +65 -97
  44. package/lib/map/useCompareState.ts +5 -4
  45. package/lib/map/useGeocode.ts +7 -5
  46. package/lib/map/useMapBearing.ts +56 -0
  47. package/lib/map/useMapLabelPick.ts +114 -0
  48. package/lib/map/useMapPlaceRender.ts +2 -6
  49. package/lib/map/usePlaceAutocomplete.ts +44 -50
  50. package/lib/map.ts +95 -0
  51. package/lib/pipeline/CandidatePicker.tsx +13 -5
  52. package/lib/pipeline/ConfidenceCell.tsx +1 -1
  53. package/lib/pipeline/FailureDiagnostic.tsx +8 -2
  54. package/lib/pipeline/QueryForm.tsx +5 -2
  55. package/lib/pipeline/ResolvedPlace.tsx +1 -1
  56. package/lib/pipeline/SpanHighlight.tsx +7 -5
  57. package/lib/pipeline/TimingPanel.tsx +1 -1
  58. package/lib/pipeline/TreeView.tsx +1 -1
  59. package/lib/pipeline/copy.ts +22 -25
  60. package/lib/pipeline/presets.ts +15 -13
  61. package/lib/pipeline/types.ts +21 -14
  62. package/lib/pipeline/useParsePipeline.ts +38 -24
  63. package/lib/pipeline.ts +36 -0
  64. package/lib/poi/AbstainPanel.tsx +1 -1
  65. package/lib/poi/LiveResultsBlock.tsx +2 -1
  66. package/lib/poi/POIExplorer.tsx +24 -15
  67. package/lib/poi/QueryInput.tsx +1 -1
  68. package/lib/poi/SubjectPanel.tsx +4 -3
  69. package/lib/poi/runtime.ts +5 -16
  70. package/lib/poi/types.ts +39 -27
  71. package/lib/poi/usePOISearch.ts +39 -44
  72. package/lib/poi.ts +39 -0
  73. package/lib/runtime/useReleaseRuntime.ts +125 -74
  74. package/lib/runtime.ts +16 -0
  75. package/lib/search/SearchModal.tsx +317 -0
  76. package/lib/search/search.css +144 -0
  77. package/lib/search/types.ts +67 -0
  78. package/lib/search.ts +11 -0
  79. package/out/common/About.d.ts +13 -4
  80. package/out/common/About.d.ts.map +1 -1
  81. package/out/common/About.js +5 -2
  82. package/out/common/About.js.map +1 -1
  83. package/out/common/ClientOnly.d.ts +2 -11
  84. package/out/common/ClientOnly.d.ts.map +1 -1
  85. package/out/common/ClientOnly.js +1 -13
  86. package/out/common/ClientOnly.js.map +1 -1
  87. package/out/common/CopyButton.d.ts +3 -1
  88. package/out/common/CopyButton.d.ts.map +1 -1
  89. package/out/common/CopyButton.js.map +1 -1
  90. package/out/common/LoadingIndicator.d.ts +4 -2
  91. package/out/common/LoadingIndicator.d.ts.map +1 -1
  92. package/out/common/LoadingIndicator.js.map +1 -1
  93. package/out/common/PresetChips.d.ts +9 -8
  94. package/out/common/PresetChips.d.ts.map +1 -1
  95. package/out/common/PresetChips.js.map +1 -1
  96. package/out/common/confidence-tiers.d.ts +7 -6
  97. package/out/common/confidence-tiers.d.ts.map +1 -1
  98. package/out/common/confidence-tiers.js +7 -6
  99. package/out/common/confidence-tiers.js.map +1 -1
  100. package/out/common/cx.d.ts +3 -1
  101. package/out/common/cx.d.ts.map +1 -1
  102. package/out/common/cx.js +3 -1
  103. package/out/common/cx.js.map +1 -1
  104. package/out/common/text-tokens.d.ts +4 -3
  105. package/out/common/text-tokens.d.ts.map +1 -1
  106. package/out/common/text-tokens.js +6 -3
  107. package/out/common/text-tokens.js.map +1 -1
  108. package/out/common/useBuildInfo.d.ts +27 -0
  109. package/out/common/useBuildInfo.d.ts.map +1 -0
  110. package/out/common/useBuildInfo.js +32 -0
  111. package/out/common/useBuildInfo.js.map +1 -0
  112. package/out/common/useClipboard.d.ts +1 -3
  113. package/out/common/useClipboard.d.ts.map +1 -1
  114. package/out/common/useClipboard.js +2 -11
  115. package/out/common/useClipboard.js.map +1 -1
  116. package/out/common.d.ts +22 -0
  117. package/out/common.d.ts.map +1 -0
  118. package/out/common.js +15 -0
  119. package/out/common.js.map +1 -0
  120. package/out/index.d.ts +26 -71
  121. package/out/index.d.ts.map +1 -1
  122. package/out/index.js +21 -47
  123. package/out/index.js.map +1 -1
  124. package/out/map/AppIdentity.d.ts +42 -0
  125. package/out/map/AppIdentity.d.ts.map +1 -0
  126. package/out/map/AppIdentity.js +16 -0
  127. package/out/map/AppIdentity.js.map +1 -0
  128. package/out/map/BackendControl.d.ts +9 -10
  129. package/out/map/BackendControl.d.ts.map +1 -1
  130. package/out/map/BackendControl.js +2 -2
  131. package/out/map/BackendControl.js.map +1 -1
  132. package/out/map/CompareToggle.d.ts +8 -31
  133. package/out/map/CompareToggle.d.ts.map +1 -1
  134. package/out/map/CompareToggle.js +5 -2
  135. package/out/map/CompareToggle.js.map +1 -1
  136. package/out/map/DebugInfo.d.ts +34 -0
  137. package/out/map/DebugInfo.d.ts.map +1 -0
  138. package/out/map/DebugInfo.js +39 -0
  139. package/out/map/DebugInfo.js.map +1 -0
  140. package/out/map/Geocoder.d.ts +47 -26
  141. package/out/map/Geocoder.d.ts.map +1 -1
  142. package/out/map/Geocoder.js +34 -50
  143. package/out/map/Geocoder.js.map +1 -1
  144. package/out/map/GeocoderControls.d.ts +23 -33
  145. package/out/map/GeocoderControls.d.ts.map +1 -1
  146. package/out/map/GeocoderControls.js +277 -16
  147. package/out/map/GeocoderControls.js.map +1 -1
  148. package/out/map/GraticuleLayer.d.ts +28 -0
  149. package/out/map/GraticuleLayer.d.ts.map +1 -0
  150. package/out/map/GraticuleLayer.js +25 -0
  151. package/out/map/GraticuleLayer.js.map +1 -0
  152. package/out/map/MapCanvas.d.ts +23 -12
  153. package/out/map/MapCanvas.d.ts.map +1 -1
  154. package/out/map/MapCanvas.js +5 -2
  155. package/out/map/MapCanvas.js.map +1 -1
  156. package/out/map/MapChipRow.d.ts +43 -0
  157. package/out/map/MapChipRow.d.ts.map +1 -0
  158. package/out/map/MapChipRow.js +12 -0
  159. package/out/map/MapChipRow.js.map +1 -0
  160. package/out/map/MapCompass.d.ts +33 -0
  161. package/out/map/MapCompass.d.ts.map +1 -0
  162. package/out/map/MapCompass.js +15 -0
  163. package/out/map/MapCompass.js.map +1 -0
  164. package/out/map/MapControlStack.d.ts +56 -0
  165. package/out/map/MapControlStack.d.ts.map +1 -0
  166. package/out/map/MapControlStack.js +18 -0
  167. package/out/map/MapControlStack.js.map +1 -0
  168. package/out/map/MapFooter.d.ts +27 -0
  169. package/out/map/MapFooter.d.ts.map +1 -0
  170. package/out/map/MapFooter.js +37 -0
  171. package/out/map/MapFooter.js.map +1 -0
  172. package/out/map/MapProgressBar.d.ts +31 -0
  173. package/out/map/MapProgressBar.d.ts.map +1 -0
  174. package/out/map/MapProgressBar.js +8 -0
  175. package/out/map/MapProgressBar.js.map +1 -0
  176. package/out/map/MapSearchBar.d.ts +48 -0
  177. package/out/map/MapSearchBar.d.ts.map +1 -0
  178. package/out/map/MapSearchBar.js +12 -0
  179. package/out/map/MapSearchBar.js.map +1 -0
  180. package/out/map/MapSheet.d.ts +35 -0
  181. package/out/map/MapSheet.d.ts.map +1 -0
  182. package/out/map/MapSheet.js +29 -0
  183. package/out/map/MapSheet.js.map +1 -0
  184. package/out/map/OverlayLayers.d.ts +1 -1
  185. package/out/map/OverlayLayers.js +2 -2
  186. package/out/map/PlaceAutocomplete.d.ts +10 -21
  187. package/out/map/PlaceAutocomplete.d.ts.map +1 -1
  188. package/out/map/PlaceAutocomplete.js +2 -1
  189. package/out/map/PlaceAutocomplete.js.map +1 -1
  190. package/out/map/PlaceMarker.d.ts +4 -2
  191. package/out/map/PlaceMarker.d.ts.map +1 -1
  192. package/out/map/PlaceMarker.js +3 -1
  193. package/out/map/PlaceMarker.js.map +1 -1
  194. package/out/map/ResolvedPlaceLayers.d.ts +5 -14
  195. package/out/map/ResolvedPlaceLayers.d.ts.map +1 -1
  196. package/out/map/ResolvedPlaceLayers.js +2 -2
  197. package/out/map/ResolvedPlaceLayers.js.map +1 -1
  198. package/out/map/ResultCamera.d.ts +8 -31
  199. package/out/map/ResultCamera.d.ts.map +1 -1
  200. package/out/map/ResultCamera.js +3 -28
  201. package/out/map/ResultCamera.js.map +1 -1
  202. package/out/map/ResultOverlay.d.ts +2 -12
  203. package/out/map/ResultOverlay.d.ts.map +1 -1
  204. package/out/map/ResultOverlay.js +1 -2
  205. package/out/map/ResultOverlay.js.map +1 -1
  206. package/out/map/ResultPanel.d.ts +1 -20
  207. package/out/map/ResultPanel.d.ts.map +1 -1
  208. package/out/map/ResultPanel.js +1 -1
  209. package/out/map/ResultPanel.js.map +1 -1
  210. package/out/map/VersionPicker.d.ts +7 -19
  211. package/out/map/VersionPicker.d.ts.map +1 -1
  212. package/out/map/VersionPicker.js +5 -2
  213. package/out/map/VersionPicker.js.map +1 -1
  214. package/out/map/fake-runtime.d.ts +9 -11
  215. package/out/map/fake-runtime.d.ts.map +1 -1
  216. package/out/map/fake-runtime.js +9 -12
  217. package/out/map/fake-runtime.js.map +1 -1
  218. package/out/map/geometry.d.ts +13 -34
  219. package/out/map/geometry.d.ts.map +1 -1
  220. package/out/map/geometry.js +9 -34
  221. package/out/map/geometry.js.map +1 -1
  222. package/out/map/graticule.d.ts +17 -0
  223. package/out/map/graticule.d.ts.map +1 -0
  224. package/out/map/graticule.js +67 -0
  225. package/out/map/graticule.js.map +1 -0
  226. package/out/map/map-debug.d.ts +1 -1
  227. package/out/map/map-debug.d.ts.map +1 -1
  228. package/out/map/map-debug.js +1 -1
  229. package/out/map/map-debug.js.map +1 -1
  230. package/out/map/place-render.d.ts +23 -43
  231. package/out/map/place-render.d.ts.map +1 -1
  232. package/out/map/place-render.js +4 -39
  233. package/out/map/place-render.js.map +1 -1
  234. package/out/map/types.d.ts +67 -95
  235. package/out/map/types.d.ts.map +1 -1
  236. package/out/map/types.js +1 -10
  237. package/out/map/types.js.map +1 -1
  238. package/out/map/useCompareState.d.ts +5 -4
  239. package/out/map/useCompareState.d.ts.map +1 -1
  240. package/out/map/useCompareState.js +3 -3
  241. package/out/map/useCompareState.js.map +1 -1
  242. package/out/map/useGeocode.d.ts +5 -3
  243. package/out/map/useGeocode.d.ts.map +1 -1
  244. package/out/map/useGeocode.js +4 -4
  245. package/out/map/useGeocode.js.map +1 -1
  246. package/out/map/useMapBearing.d.ts +28 -0
  247. package/out/map/useMapBearing.d.ts.map +1 -0
  248. package/out/map/useMapBearing.js +30 -0
  249. package/out/map/useMapBearing.js.map +1 -0
  250. package/out/map/useMapLabelPick.d.ts +13 -0
  251. package/out/map/useMapLabelPick.d.ts.map +1 -0
  252. package/out/map/useMapLabelPick.js +95 -0
  253. package/out/map/useMapLabelPick.js.map +1 -0
  254. package/out/map/useMapPlaceRender.d.ts +2 -6
  255. package/out/map/useMapPlaceRender.d.ts.map +1 -1
  256. package/out/map/useMapPlaceRender.js +2 -6
  257. package/out/map/useMapPlaceRender.js.map +1 -1
  258. package/out/map/usePlaceAutocomplete.d.ts +30 -28
  259. package/out/map/usePlaceAutocomplete.d.ts.map +1 -1
  260. package/out/map/usePlaceAutocomplete.js +6 -33
  261. package/out/map/usePlaceAutocomplete.js.map +1 -1
  262. package/out/map.d.ts +69 -0
  263. package/out/map.d.ts.map +1 -0
  264. package/out/map.js +46 -0
  265. package/out/map.js.map +1 -0
  266. package/out/pipeline/CandidatePicker.d.ts +12 -2
  267. package/out/pipeline/CandidatePicker.d.ts.map +1 -1
  268. package/out/pipeline/CandidatePicker.js +2 -2
  269. package/out/pipeline/CandidatePicker.js.map +1 -1
  270. package/out/pipeline/ConfidenceCell.d.ts +1 -1
  271. package/out/pipeline/ConfidenceCell.js +1 -1
  272. package/out/pipeline/FailureDiagnostic.d.ts +8 -2
  273. package/out/pipeline/FailureDiagnostic.d.ts.map +1 -1
  274. package/out/pipeline/FailureDiagnostic.js +3 -0
  275. package/out/pipeline/FailureDiagnostic.js.map +1 -1
  276. package/out/pipeline/PipelineExplorer.js +1 -1
  277. package/out/pipeline/QueryForm.d.ts +5 -2
  278. package/out/pipeline/QueryForm.d.ts.map +1 -1
  279. package/out/pipeline/QueryForm.js +1 -1
  280. package/out/pipeline/QueryForm.js.map +1 -1
  281. package/out/pipeline/ResolvedPlace.js +1 -1
  282. package/out/pipeline/SpanHighlight.d.ts +4 -3
  283. package/out/pipeline/SpanHighlight.d.ts.map +1 -1
  284. package/out/pipeline/SpanHighlight.js +3 -2
  285. package/out/pipeline/SpanHighlight.js.map +1 -1
  286. package/out/pipeline/TimingPanel.d.ts +1 -1
  287. package/out/pipeline/TimingPanel.js +1 -1
  288. package/out/pipeline/TreeView.d.ts +1 -1
  289. package/out/pipeline/copy.d.ts +1 -1
  290. package/out/pipeline/copy.d.ts.map +1 -1
  291. package/out/pipeline/copy.js +4 -3
  292. package/out/pipeline/copy.js.map +1 -1
  293. package/out/pipeline/presets.d.ts +5 -4
  294. package/out/pipeline/presets.d.ts.map +1 -1
  295. package/out/pipeline/presets.js +15 -13
  296. package/out/pipeline/presets.js.map +1 -1
  297. package/out/pipeline/types.d.ts +21 -14
  298. package/out/pipeline/types.d.ts.map +1 -1
  299. package/out/pipeline/types.js +2 -4
  300. package/out/pipeline/types.js.map +1 -1
  301. package/out/pipeline/useParsePipeline.d.ts +15 -7
  302. package/out/pipeline/useParsePipeline.d.ts.map +1 -1
  303. package/out/pipeline/useParsePipeline.js +10 -7
  304. package/out/pipeline/useParsePipeline.js.map +1 -1
  305. package/out/pipeline.d.ts +33 -0
  306. package/out/pipeline.d.ts.map +1 -0
  307. package/out/pipeline.js +21 -0
  308. package/out/pipeline.js.map +1 -0
  309. package/out/poi/AbstainPanel.d.ts +1 -1
  310. package/out/poi/LiveResultsBlock.d.ts +2 -1
  311. package/out/poi/LiveResultsBlock.d.ts.map +1 -1
  312. package/out/poi/LiveResultsBlock.js +1 -1
  313. package/out/poi/LiveResultsBlock.js.map +1 -1
  314. package/out/poi/POIExplorer.d.ts +22 -12
  315. package/out/poi/POIExplorer.d.ts.map +1 -1
  316. package/out/poi/POIExplorer.js +10 -9
  317. package/out/poi/POIExplorer.js.map +1 -1
  318. package/out/poi/QueryInput.d.ts +1 -1
  319. package/out/poi/SubjectPanel.d.ts +2 -2
  320. package/out/poi/SubjectPanel.d.ts.map +1 -1
  321. package/out/poi/SubjectPanel.js +3 -2
  322. package/out/poi/SubjectPanel.js.map +1 -1
  323. package/out/poi/runtime.d.ts +5 -14
  324. package/out/poi/runtime.d.ts.map +1 -1
  325. package/out/poi/runtime.js +5 -16
  326. package/out/poi/runtime.js.map +1 -1
  327. package/out/poi/types.d.ts +39 -27
  328. package/out/poi/types.d.ts.map +1 -1
  329. package/out/poi/types.js +2 -4
  330. package/out/poi/types.js.map +1 -1
  331. package/out/poi/usePOISearch.d.ts +28 -17
  332. package/out/poi/usePOISearch.d.ts.map +1 -1
  333. package/out/poi/usePOISearch.js +6 -32
  334. package/out/poi/usePOISearch.js.map +1 -1
  335. package/out/poi.d.ts +23 -0
  336. package/out/poi.d.ts.map +1 -0
  337. package/out/poi.js +15 -0
  338. package/out/poi.js.map +1 -0
  339. package/out/runtime/useReleaseRuntime.d.ts +64 -65
  340. package/out/runtime/useReleaseRuntime.d.ts.map +1 -1
  341. package/out/runtime/useReleaseRuntime.js +31 -26
  342. package/out/runtime/useReleaseRuntime.js.map +1 -1
  343. package/out/runtime.d.ts +9 -0
  344. package/out/runtime.d.ts.map +1 -0
  345. package/out/runtime.js +8 -0
  346. package/out/runtime.js.map +1 -0
  347. package/out/search/SearchModal.d.ts +33 -0
  348. package/out/search/SearchModal.d.ts.map +1 -0
  349. package/out/search/SearchModal.js +187 -0
  350. package/out/search/SearchModal.js.map +1 -0
  351. package/out/search/types.d.ts +64 -0
  352. package/out/search/types.d.ts.map +1 -0
  353. package/out/search/types.js +13 -0
  354. package/out/search/types.js.map +1 -0
  355. package/out/search.d.ts +11 -0
  356. package/out/search.d.ts.map +1 -0
  357. package/out/search.js +9 -0
  358. package/out/search.js.map +1 -0
  359. package/package.json +132 -133
  360. package/styles.css +1340 -202
  361. package/tokens/index.css +26 -7
  362. package/tokens/tokens.json +121 -6
  363. package/tokens/tokens.resolver.json +1 -1
  364. package/lib/map/index.ts +0 -76
  365. package/out/map/index.d.ts +0 -52
  366. package/out/map/index.d.ts.map +0 -1
  367. package/out/map/index.js +0 -36
  368. package/out/map/index.js.map +0 -1
  369. package/styleframe.config.ts +0 -321
  370. package/vitest.node.config.ts +0 -20
@@ -3,63 +3,45 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  * @copyright Sister Software
4
4
  * @license AGPL-3.0
5
5
  * @author Teffen Ellis, et al.
6
- *
7
- * `<Geocoder>` — the WHOLE geocoder, composed. It is the map analogue of `PipelineExplorer`
8
- * and takes the SAME DI shape: an injected {@link GeocoderRuntime} (the host owns ONNX / httpvfs / R2 /
9
- * the composed map style) plus a {@link GeocoderPanels} bag (the host's ModelVisualizer / VersionCompare /
10
- * About / Permalink). Everything here is composition + a `ClientOnly` boundary:
11
- *
12
- * - the floating {@link GeocoderControls} panel (version / compare / backend / query+autocomplete / result),
13
- * - the declarative {@link MapCanvas} with the phase-2 overlays ({@link OverlayLayers}) and the
14
- * resolved-place marker/outline/camera ({@link ResolvedPlaceLayers}) driven by the parse state,
15
- * - the hooks that wire them: {@link useGeocode} (parse + viewport bias + map place),
16
- * {@link usePlaceAutocomplete}, {@link useCompareState}.
17
- *
18
- * Because it pulls {@link MapCanvas} (→ `react-map-gl` → `maplibre-gl`, WebGL + DOM at import), it lives on
19
- * the `@mailwoman/react/map` subpath ONLY — never the package root. The whole thing renders in Storybook
20
- * over a fake runtime (offline stub style + canned geocode) with no network, no ONNX, no gazetteer.
21
6
  */
22
- import { useCallback, useEffect, useRef } from "react";
7
+ import { useCallback, useEffect, useRef, useState } from "react";
23
8
  import { useCompareState } from "#map/useCompareState";
24
9
  import { useGeocode } from "#map/useGeocode";
25
10
  import { useMapPlaceRender } from "#map/useMapPlaceRender";
26
11
  import { usePlaceAutocomplete } from "#map/usePlaceAutocomplete";
27
12
  import { ClientOnly } from "../common/ClientOnly.js";
28
13
  import { GeocoderControls } from "./GeocoderControls.js";
14
+ import { GraticuleLayer } from "./GraticuleLayer.js";
29
15
  import { MapCanvas } from "./MapCanvas.js";
30
16
  import { OverlayLayers } from "./OverlayLayers.js";
31
17
  import { ResolvedPlaceLayers } from "./ResolvedPlaceLayers.js";
32
- function GeocoderInner({ runtime, panels, defaultAddress, presets, minBiasZoom, applyResultCamera, }) {
18
+ function GeocoderInner({ runtime, panels, defaultAddress, presets, minBiasZoom, applyResultCamera, developer, initialQuery, onSubmitQuery, }) {
33
19
  const mapRef = useRef(null);
34
- // TEST INJECTION POINT: the e2e viewport-bias suite drives the REAL map (pan + zoom past the bias threshold)
35
- // before submitting, and a browser test cannot reach a React ref — so the live map handle is
36
- // republished on `globalThis.__mailwomanMapCanvas`. The ref fills only after react-map-gl instantiates
37
- // the map, hence the short poll; cleared on unmount so a torn-down geocoder never leaves a stale
38
- // handle behind.
39
- useEffect(() => {
40
- const host = globalThis;
41
- const timer = setInterval(() => {
42
- const map = mapRef.current?.getMap();
43
- if (map) {
44
- host.__mailwomanMapCanvas = map;
45
- clearInterval(timer);
46
- }
47
- }, 250);
48
- return () => {
49
- clearInterval(timer);
50
- delete host.__mailwomanMapCanvas;
51
- };
20
+ // The controls render outside `<MapCanvas>` and cannot call `useMap()`.
21
+ // The map is kept in state so they re-render when it loads.
22
+ const [map, setMap] = useState(null);
23
+ // The graticule is inserted before the first non-background layer, so it draws under the data layers.
24
+ const [baseLayerID, setBaseLayerID] = useState(undefined);
25
+ const onMapLoad = useCallback((event) => {
26
+ // Browser tests read the map from this global.
27
+ ;
28
+ globalThis.__mailwomanMapCanvas = event.target;
29
+ setMap(event.target);
30
+ const layers = event.target.getStyle()?.layers ?? [];
31
+ setBaseLayerID(layers.find((layer) => layer.type !== "background")?.id);
32
+ }, []);
33
+ useEffect(() => () => {
34
+ setMap(null);
35
+ delete globalThis.__mailwomanMapCanvas;
52
36
  }, []);
53
- // Read the viewport bias at submit time — through the map handle, never a threaded state value, so granting/zooming
54
- // mid-session doesn't re-create the parse callback. Below the min-bias zoom, a whole-globe center is noise → null.
55
37
  const getBias = useCallback(() => {
56
- const map = mapRef.current?.getMap();
57
- if (!map)
38
+ const live = mapRef.current?.getMap();
39
+ if (!live)
58
40
  return null;
59
- const zoom = map.getZoom();
41
+ const zoom = live.getZoom();
60
42
  if (zoom < minBiasZoom)
61
43
  return null;
62
- const center = map.getCenter();
44
+ const center = live.getCenter();
63
45
  return { center: [center.lng, center.lat], zoom };
64
46
  }, [minBiasZoom]);
65
47
  const geocode = useGeocode({ runtime, defaultText: defaultAddress, getBias });
@@ -80,19 +62,21 @@ function GeocoderInner({ runtime, panels, defaultAddress, presets, minBiasZoom,
80
62
  latitude: runtime.initialCenter[1],
81
63
  zoom: runtime.initialZoom ?? 3,
82
64
  }, style: { width: "100%", height: "100%" },
83
- // One compact attribution pill (the map's own default is a wide, always-open "MapLibre | © …" bar), no
84
- // maplibre wordmark logo.
85
- mapProps: { attributionControl: { compact: true }, maplibreLogo: false }, children: [_jsx(OverlayLayers, { overlays: runtime.overlays }), _jsx(ResolvedPlaceLayers, { spec: spec, applyCamera: applyResultCamera }), panels.mapControls] }) }), _jsx(GeocoderControls, { runtime: runtime, geocode: geocode, autocomplete: autocomplete, compare: compare, panels: panels, presets: presets, placeholder: defaultAddress, onSelectVersion: onSelectVersion, onForceWASMChange: onForceWASMChange }), panels.debugDrawer ? panels.debugDrawer({ result: geocode.result }) : null] }));
65
+ // The attribution is compact.
66
+ // The MapLibre logo is hidden.
67
+ mapProps: { attributionControl: { compact: true }, maplibreLogo: false, onLoad: onMapLoad }, children: [_jsx(GraticuleLayer, { beforeID: baseLayerID }), _jsx(OverlayLayers, { overlays: runtime.overlays }), _jsx(ResolvedPlaceLayers, { spec: spec, applyCamera: applyResultCamera }), panels.mapControls] }) }), _jsx(GeocoderControls, { runtime: runtime, geocode: geocode, autocomplete: autocomplete, compare: compare, panels: panels, presets: presets, placeholder: defaultAddress, initialQuery: initialQuery, map: map, onSubmitQuery: onSubmitQuery, onSelectVersion: onSelectVersion, onForceWASMChange: onForceWASMChange, developer: developer }), panels.debugDrawer ? panels.debugDrawer({ result: geocode.result }) : null] }));
86
68
  }
87
- /**
88
- * Stable empty defaults — a fresh `{}`/`[]` per render would churn every downstream memo dep.
89
- */
69
+ // These defaults are module constants so each render sees the same reference and memo dependencies stay stable.
90
70
  const NO_PANELS = {};
91
71
  const NO_PRESETS = [];
92
72
  /**
93
- * The composed geocoder, behind a `ClientOnly` SSR boundary (the map is intrinsically a client component).
73
+ * Renders the map and search controls as one geocoder.
74
+ * It also renders host panels.
75
+ *
76
+ * It renders only on the client because MapLibre needs browser APIs.
77
+ * Import it from `@mailwoman/react/map`.
94
78
  */
95
- export function Geocoder({ runtime, panels = NO_PANELS, defaultAddress = "", presets = NO_PRESETS, minBiasZoom = 4, applyResultCamera = true, }) {
96
- return (_jsx(ClientOnly, { fallback: _jsx("div", { className: "mw-geocoder-demo", children: _jsx("p", { children: "Loading the geocoder\u2026" }) }), children: () => (_jsx(GeocoderInner, { runtime: runtime, panels: panels, defaultAddress: defaultAddress, presets: presets, minBiasZoom: minBiasZoom, applyResultCamera: applyResultCamera })) }));
79
+ export function Geocoder({ runtime, panels = NO_PANELS, defaultAddress = "", presets = NO_PRESETS, minBiasZoom = 4, applyResultCamera = true, developer = false, initialQuery = null, onSubmitQuery, }) {
80
+ return (_jsx(ClientOnly, { fallback: _jsx("div", { className: "mw-geocoder-demo", children: _jsx("p", { children: "Loading the geocoder\u2026" }) }), children: () => (_jsx(GeocoderInner, { runtime: runtime, panels: panels, defaultAddress: defaultAddress, presets: presets, minBiasZoom: minBiasZoom, applyResultCamera: applyResultCamera, developer: developer, initialQuery: initialQuery, onSubmitQuery: onSubmitQuery })) }));
97
81
  }
98
82
  //# sourceMappingURL=Geocoder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Geocoder.js","sourceRoot":"","sources":["../../lib/map/Geocoder.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAkB,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAItE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAA0B,CAAA;AAErD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAwB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAA;AAuC/D,SAAS,aAAa,CAAC,EACtB,OAAO,EACP,MAAM,EACN,cAAc,EACd,OAAO,EACP,WAAW,EACX,iBAAiB,GACG;IACpB,MAAM,MAAM,GAAG,MAAM,CAAS,IAAI,CAAC,CAAA;IAEnC,6GAA6G;IAC7G,6FAA6F;IAC7F,uGAAuG;IACvG,iGAAiG;IACjG,iBAAiB;IACjB,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,GAAG,UAAqE,CAAA;QAElF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;YAEpC,IAAI,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,oBAAoB,GAAG,GAAG,CAAA;gBAC/B,aAAa,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;QACF,CAAC,EAAE,GAAG,CAAC,CAAA;QAEP,OAAO,GAAG,EAAE;YACX,aAAa,CAAC,KAAK,CAAC,CAAA;YACpB,OAAO,IAAI,CAAC,oBAAoB,CAAA;QACjC,CAAC,CAAA;IACF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,oHAAoH;IACpH,mHAAmH;IACnH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAmB,EAAE;QAChD,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;QAEpC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QACrB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAA;QAE1B,IAAI,IAAI,GAAG,WAAW;YAAE,OAAO,IAAI,CAAA;QACnC,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAA;QAE9B,OAAO,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAA;IAClD,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;IAEjB,MAAM,OAAO,GAAG,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG,eAAe,EAAE,CAAA;IAEjC,MAAM,YAAY,GAAG,oBAAoB,CAAC;QACzC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,YAAY,EAAE,OAAO,CAAC,YAAY;KAClC,CAAC,CAAA;IAEF,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAEhD,MAAM,eAAe,GAAG,WAAW,CAClC,CAAC,OAAe,EAAE,EAAE;QACnB,OAAO,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAA;QAChC,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,CAAC,CAClB,CAAA;IAED,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,SAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAE3G,OAAO,CACN,eAAK,SAAS,EAAC,kBAAkB,aAChC,cAAK,SAAS,EAAC,uBAAuB,YACrC,MAAC,SAAS,IACT,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE;wBACjB,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;wBACnC,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;wBAClC,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;qBAC9B,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;oBACxC,uGAAuG;oBACvG,0BAA0B;oBAC1B,QAAQ,EAAE,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,aAExE,KAAC,aAAa,IAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAI,EAC7C,KAAC,mBAAmB,IAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,GAAI,EAClE,MAAM,CAAC,WAAW,IACR,GACP,EAEN,KAAC,gBAAgB,IAChB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,cAAc,EAC3B,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,GACnC,EAED,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IACtE,CACN,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,SAAS,GAAmB,EAAE,CAAA;AACpC,MAAM,UAAU,GAA0B,EAAE,CAAA;AAE5C;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,EACxB,OAAO,EACP,MAAM,GAAG,SAAS,EAClB,cAAc,GAAG,EAAE,EACnB,OAAO,GAAG,UAAU,EACpB,WAAW,GAAG,CAAC,EACf,iBAAiB,GAAG,IAAI,GACT;IACf,OAAO,CACN,KAAC,UAAU,IACV,QAAQ,EACP,cAAK,SAAS,EAAC,kBAAkB,YAChC,qDAA4B,GACvB,YAGN,GAAG,EAAE,CAAC,CACN,KAAC,aAAa,IACb,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,GACnC,CACF,GACW,CACb,CAAA;AACF,CAAC"}
1
+ {"version":3,"file":"Geocoder.js","sourceRoot":"","sources":["../../lib/map/Geocoder.tsx"],"names":[],"mappings":"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"}
@@ -2,62 +2,52 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
- *
6
- * `<GeocoderControls>` — the geocoder's floating control panel, assembled from the geocoder-specific units
7
- * (VersionPicker / CompareToggle / BackendControl / PlaceAutocomplete / ResultPanel) and the REUSED
8
- * pipeline units (QueryForm / PresetChips / LoadingIndicator). It reads the injected {@link GeocoderRuntime}
9
- * for ready/version/backend/loading state and threads the {@link useGeocode} + {@link usePlaceAutocomplete}
10
- * + {@link useCompareState} hooks into the controls. Host-specific visualizers arrive via {@link GeocoderPanels}.
11
- *
12
- * NODE-SAFE: pure React + the shared/geocoder units, no maplibre. It rides `@mailwoman/react/map` as a
13
- * geocoder-specific control, not for WebGL.
14
5
  */
15
- import type { ReactNode } from "react";
6
+ import { type ReactNode } from "react";
7
+ import type { MapInstance } from "react-map-gl/maplibre";
16
8
  import type { GeocoderPanels, GeocoderRuntime } from "#map/types";
17
9
  import type { UseCompareState } from "#map/useCompareState";
18
10
  import type { UseGeocode } from "#map/useGeocode";
19
11
  import type { UsePlaceAutocomplete } from "#map/usePlaceAutocomplete";
20
- import { type Preset } from "../common/PresetChips.tsx";
12
+ import type { Preset } from "../common/PresetChips.tsx";
13
+ /**
14
+ * Props for {@linkcode GeocoderControls}.
15
+ */
21
16
  export interface GeocoderControlsProps {
22
- /**
23
- * The injected geocoder runtime.
24
- */
25
17
  runtime: GeocoderRuntime;
26
- /**
27
- * The parse+resolve state machine.
28
- */
29
18
  geocode: UseGeocode;
30
- /**
31
- * The place-autocomplete combobox state.
32
- */
33
19
  autocomplete: UsePlaceAutocomplete;
34
- /**
35
- * The compare-mode state.
36
- */
37
20
  compare: UseCompareState;
38
21
  /**
39
- * Host-injected panels (about, release blurb, compare, permalink, extras, failure).
22
+ * A query from the URL to run once the runtime is ready.
40
23
  */
24
+ initialQuery?: string | null;
41
25
  panels: GeocoderPanels;
42
- /**
43
- * Example chips.
44
- */
45
26
  presets: ReadonlyArray<Preset>;
46
27
  /**
47
- * Input placeholder.
28
+ * The input placeholder.
29
+ *
30
+ * The field also selects its value on focus while it still equals this text.
48
31
  */
49
32
  placeholder: string;
33
+ map?: MapInstance | null;
50
34
  /**
51
- * Select a model version (the composed geocoder also clears a now-colliding compare selection).
35
+ * Called before each user-initiated query, so the host can write the query to its URL.
52
36
  */
37
+ onSubmitQuery?: (query: string) => void;
53
38
  onSelectVersion: (version: string) => void;
39
+ onForceWASMChange: (forceWASM: boolean) => void;
54
40
  /**
55
- * Toggle the forced WASM backend.
41
+ * Whether the developer panel starts open.
42
+ *
43
+ * @default false
56
44
  */
57
- onForceWASMChange: (forceWASM: boolean) => void;
45
+ developer?: boolean;
58
46
  }
59
47
  /**
60
- * The floating control panel.
48
+ * Renders the search and result panels, map control rail and side sheets over the map.
49
+ *
50
+ * On narrow screens, users can drag the search panel between bottom-drawer detents.
61
51
  */
62
- export declare function GeocoderControls({ runtime, geocode, autocomplete, compare, panels, presets, placeholder, onSelectVersion, onForceWASMChange, }: GeocoderControlsProps): ReactNode;
52
+ export declare function GeocoderControls({ runtime, geocode, autocomplete, compare, panels, presets, placeholder, map, initialQuery, onSubmitQuery, onSelectVersion, onForceWASMChange, developer, }: GeocoderControlsProps): ReactNode;
63
53
  //# sourceMappingURL=GeocoderControls.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeocoderControls.d.ts","sourceRoot":"","sources":["../../lib/map/GeocoderControls.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGrE,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAQpE,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,OAAO,EAAE,eAAe,CAAA;IACxB;;OAEG;IACH,OAAO,EAAE,UAAU,CAAA;IACnB;;OAEG;IACH,YAAY,EAAE,oBAAoB,CAAA;IAClC;;OAEG;IACH,OAAO,EAAE,eAAe,CAAA;IACxB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAA;IACtB;;OAEG;IACH,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C;;OAEG;IACH,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;CAC/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAChC,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,eAAe,EACf,iBAAiB,GACjB,EAAE,qBAAqB,GAAG,SAAS,CA6GnC"}
1
+ {"version":3,"file":"GeocoderControls.d.ts","sourceRoot":"","sources":["../../lib/map/GeocoderControls.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAA;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAGrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAcvD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,eAAe,CAAA;IACxB,OAAO,EAAE,UAAU,CAAA;IACnB,YAAY,EAAE,oBAAoB,CAAA;IAClC,OAAO,EAAE,eAAe,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC9B;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IACxB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAoBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,EAChC,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,MAAM,EACN,OAAO,EACP,WAAW,EACX,GAAU,EACV,YAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,SAAiB,GACjB,EAAE,qBAAqB,GAAG,SAAS,CA+hBnC"}
@@ -1,30 +1,291 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useMapBearing } from "#map/useMapBearing";
4
+ import { useMapLabelPick } from "#map/useMapLabelPick";
2
5
  import { LoadingIndicator } from "../common/LoadingIndicator.js";
3
- import { PresetChips } from "../common/PresetChips.js";
4
- import { QueryForm } from "../pipeline/QueryForm.js";
5
6
  import { BackendControl } from "./BackendControl.js";
6
7
  import { CompareToggle } from "./CompareToggle.js";
8
+ import { DebugInfo } from "./DebugInfo.js";
9
+ import { MapChipRow } from "./MapChipRow.js";
10
+ import { MapCompass } from "./MapCompass.js";
11
+ import { MapControlButton, MapControlGroup, MapControlStack } from "./MapControlStack.js";
12
+ import { MapProgressBar } from "./MapProgressBar.js";
13
+ import { MapSearchBar, SearchGlyph } from "./MapSearchBar.js";
14
+ import { MapSheet, SheetClose } from "./MapSheet.js";
7
15
  import { PlaceAutocomplete } from "./PlaceAutocomplete.js";
8
16
  import { ResultPanel } from "./ResultPanel.js";
9
17
  import { VersionPicker } from "./VersionPicker.js";
10
18
  /**
11
- * The floating control panel.
19
+ * The media query for the bottom-drawer layout.
20
+ * It must match the breakpoint in `styles.css`.
12
21
  */
13
- export function GeocoderControls({ runtime, geocode, autocomplete, compare, panels, presets, placeholder, onSelectVersion, onForceWASMChange, }) {
22
+ const DRAWER_LAYOUT = "(max-width: 600px)";
23
+ /**
24
+ * The pointer travel, in px, that turns a press on the header into a drag instead of a tap.
25
+ */
26
+ const DRAG_TRAVEL_PX = 3;
27
+ /**
28
+ * The downward travel, in px, that turns a pull at the top of the panel's scroll into a drawer drag.
29
+ */
30
+ const OVERSCROLL_PROMOTE_PX = 8;
31
+ /**
32
+ * Renders the search and result panels, map control rail and side sheets over the map.
33
+ *
34
+ * On narrow screens, users can drag the search panel between bottom-drawer detents.
35
+ */
36
+ export function GeocoderControls({ runtime, geocode, autocomplete, compare, panels, presets, placeholder, map = null, initialQuery = null, onSubmitQuery, onSelectVersion, onForceWASMChange, developer = false, }) {
14
37
  const versions = runtime.availableVersions ?? [];
15
38
  const { busy, result, selectedCandidate } = geocode;
16
39
  const loading = runtime.loading;
17
40
  const errorMessage = geocode.parseError ?? runtime.errorMessage ?? null;
18
- return (_jsxs("section", { className: "mw-demo-controls", children: [panels.header, panels.releaseInfo, _jsx(VersionPicker, { versions: versions, selected: runtime.selectedVersion ?? null, onSelect: onSelectVersion, disabled: busy }), _jsx(BackendControl, { activeBackend: runtime.activeBackend, forceWASM: runtime.forceWASM ?? false, onForceWASMChange: onForceWASMChange }), _jsx(CompareToggle, { versions: versions, primaryVersion: runtime.selectedVersion ?? null, compareMode: compare.compareMode, onCompareModeChange: compare.setCompareMode, compareVersion: compare.compareVersion, onCompareVersionChange: compare.setCompareVersion, disabled: busy }), _jsx(QueryForm, { value: geocode.text, onChange: geocode.setText, onSubmit: geocode.submit, disabled: !runtime.ready, busy: busy, placeholder: placeholder, onKeyDown: autocomplete.onInputKeyDown, inputProps: autocomplete.inputProps }), panels.bias, _jsx(PlaceAutocomplete, { suggestions: autocomplete.suggestions, activeIndex: autocomplete.activeIndex, onPick: autocomplete.pick, onHover: autocomplete.setActiveIndex, listboxID: autocomplete.listboxID, optionID: autocomplete.optionID }), _jsx(PresetChips, { presets: presets, disabled: !runtime.ready || busy, onPick: (value) => {
19
- geocode.setText(value);
20
- geocode.reset();
21
- }, trailing: panels.permalink ? panels.permalink(geocode.text) : null }), loading && !runtime.ready ? (_jsx(LoadingIndicator, { mode: "staged", steps: loading.stepLabels.length ? loading.stepLabels : undefined, activeStep: loading.stepIndex, label: loading.progress })) : null, errorMessage ? _jsx("p", { className: "mw-error", children: errorMessage }) : null, panels.aboveResult ? panels.aboveResult({ result }) : null, busy ? (_jsx("div", { className: "mw-result", children: _jsx(LoadingIndicator, { mode: "staged", steps: runtime.parseStageLabels, activeStep: geocode.parseStage }) })) : result ? (panels.result ? (panels.result({
22
- result,
23
- selectedCandidate,
24
- selectedCandidateIndex: geocode.selectedCandidateIndex,
25
- onSelectCandidate: geocode.selectCandidate,
26
- })) : (_jsx(ResultPanel, { result: result, selectedCandidate: selectedCandidate, selectedCandidateIndex: geocode.selectedCandidateIndex, onSelectCandidate: geocode.selectCandidate, extras: panels.extras, failure: panels.failure }))) : null, panels.compare
27
- ? panels.compare({ result, compareMode: compare.compareMode, compareVersion: compare.compareVersion })
28
- : null, panels.footer] }));
41
+ // Only one side sheet is open at a time, because two would stack on the same edge.
42
+ const [openSheet, setOpenSheet] = useState(developer ? "developer" : null);
43
+ // This flag hides the result panel until the next query resets it.
44
+ const [resultDismissed, setResultDismissed] = useState(false);
45
+ // The drawer height is in px.
46
+ // A `null` height leaves the size to the stylesheet.
47
+ const sheetRef = useRef(null);
48
+ const [sheetHeight, setSheetHeight] = useState(null);
49
+ const sheetDragRef = useRef(null);
50
+ // The detents are computed on each call, so a rotated or resized viewport needs no resize listener.
51
+ const sheetDetents = useCallback(() => {
52
+ const viewport = window.innerHeight;
53
+ return {
54
+ medium: viewport * 0.52,
55
+ large: viewport * 0.88,
56
+ floor: viewport * 0.15,
57
+ // A drag released below this height dismisses the result.
58
+ dismissBelow: viewport * 0.28,
59
+ // At or below this height, the drawer counts as collapsed.
60
+ // The control rail then returns.
61
+ collapsedBelow: viewport * 0.2,
62
+ };
63
+ }, []);
64
+ // This ref holds a pull that started at the top of the panel's scroll.
65
+ // It becomes a drag after `OVERSCROLL_PROMOTE_PX` of downward travel.
66
+ const overscrollRef = useRef(null);
67
+ // Drag gestures apply only in the drawer layout.
68
+ // The desktop column is sized by its content.
69
+ const isDrawerLayout = () => globalThis.window !== undefined && globalThis.matchMedia(DRAWER_LAYOUT).matches;
70
+ const beginSheetDrag = useCallback((clientY, pointerId) => {
71
+ const sheet = sheetRef.current;
72
+ if (!sheet)
73
+ return;
74
+ sheet.setPointerCapture(pointerId);
75
+ sheetDragRef.current = { startY: clientY, startHeight: sheet.getBoundingClientRect().height, moved: false };
76
+ }, []);
77
+ // The whole header is the grab target, except the search input and the close button.
78
+ const onHeaderPointerDown = useCallback((event) => {
79
+ if (!isDrawerLayout())
80
+ return;
81
+ if (event.target instanceof Element && event.target.closest("input, .mw-map-sheet__close"))
82
+ return;
83
+ beginSheetDrag(event.clientY, event.pointerId);
84
+ }, [beginSheetDrag]);
85
+ const onGripPointerMove = useCallback((event) => {
86
+ const drag = sheetDragRef.current;
87
+ if (!drag)
88
+ return;
89
+ // An upward drag makes the drawer taller, so the delta is inverted against the pointer's y.
90
+ const delta = drag.startY - event.clientY;
91
+ if (Math.abs(delta) > DRAG_TRAVEL_PX) {
92
+ drag.moved = true;
93
+ }
94
+ const { floor, large } = sheetDetents();
95
+ setSheetHeight(Math.min(large, Math.max(floor, drag.startHeight + delta)));
96
+ }, [sheetDetents]);
97
+ // A tap, keyboard activation of the handle and the handle's `aria-expanded` state
98
+ // all use this midpoint to select the drawer detent.
99
+ const detentMidpoint = useCallback(() => {
100
+ const { medium, large } = sheetDetents();
101
+ return (medium + large) / 2;
102
+ }, [sheetDetents]);
103
+ const atLargeDetent = () => sheetHeight !== null && sheetHeight > detentMidpoint();
104
+ const toggleDetent = useCallback(() => {
105
+ const { medium, large } = sheetDetents();
106
+ const current = sheetRef.current?.getBoundingClientRect().height ?? medium;
107
+ setSheetHeight(current > detentMidpoint() ? medium : large);
108
+ }, [sheetDetents, detentMidpoint]);
109
+ const onGripPointerUp = useCallback(() => {
110
+ const drag = sheetDragRef.current;
111
+ if (!drag)
112
+ return;
113
+ sheetDragRef.current = null;
114
+ const { medium, large, dismissBelow } = sheetDetents();
115
+ const midpoint = (medium + large) / 2;
116
+ const current = sheetRef.current?.getBoundingClientRect().height ?? medium;
117
+ // A press without travel counts as a tap.
118
+ // It toggles between the two detents.
119
+ if (!drag.moved) {
120
+ toggleDetent();
121
+ return;
122
+ }
123
+ if (current < dismissBelow) {
124
+ setResultDismissed(true);
125
+ setSheetHeight(null);
126
+ return;
127
+ }
128
+ setSheetHeight(current > midpoint ? large : medium);
129
+ }, [sheetDetents, toggleDetent]);
130
+ // A downward pull on a panel scrolled to its top drags the drawer down.
131
+ // This handler only arms the pull; `onPanelPointerMove` promotes it, so taps
132
+ // and upward scrolls are unaffected.
133
+ const onPanelPointerDown = useCallback((event) => {
134
+ if (!isDrawerLayout())
135
+ return;
136
+ if (sheetDragRef.current)
137
+ return;
138
+ const sheet = sheetRef.current;
139
+ if (!sheet || sheet.scrollTop > 0)
140
+ return;
141
+ if (event.target instanceof Element && event.target.closest(".mw-map-panel__header"))
142
+ return;
143
+ overscrollRef.current = { startY: event.clientY, pointerId: event.pointerId };
144
+ }, []);
145
+ const onPanelPointerMove = useCallback((event) => {
146
+ if (sheetDragRef.current) {
147
+ onGripPointerMove(event);
148
+ return;
149
+ }
150
+ const armed = overscrollRef.current;
151
+ if (!armed || armed.pointerId !== event.pointerId)
152
+ return;
153
+ const sheet = sheetRef.current;
154
+ if (!sheet)
155
+ return;
156
+ if (sheet.scrollTop > 0) {
157
+ overscrollRef.current = null;
158
+ return;
159
+ }
160
+ if (event.clientY - armed.startY < OVERSCROLL_PROMOTE_PX)
161
+ return;
162
+ overscrollRef.current = null;
163
+ // The drag starts from the pull's origin, so the drawer does not jump by the threshold.
164
+ sheetDragRef.current = { startY: armed.startY, startHeight: sheet.getBoundingClientRect().height, moved: true };
165
+ sheet.setPointerCapture(event.pointerId);
166
+ onGripPointerMove(event);
167
+ }, [onGripPointerMove]);
168
+ const onPanelPointerUp = useCallback(() => {
169
+ overscrollRef.current = null;
170
+ onGripPointerUp();
171
+ }, [onGripPointerUp]);
172
+ const { bearing, resetNorth } = useMapBearing(map);
173
+ const toggleSheet = (name) => setOpenSheet((current) => (current === name ? null : name));
174
+ const closeSheet = useCallback(() => setOpenSheet(null), []);
175
+ // Every user-initiated query goes through this function, so `onSubmitQuery` fires from one place.
176
+ const runQuery = useCallback((query) => {
177
+ // A new query shows the result panel again at its default height.
178
+ setResultDismissed(false);
179
+ setSheetHeight(null);
180
+ onSubmitQuery?.(query);
181
+ void geocode.submit(query);
182
+ }, [onSubmitQuery, geocode]);
183
+ // The initial query waits for `runtime.ready` because the parse pipeline drops
184
+ // a submit made before the model loads.
185
+ // The ref makes it run once, so a later render cannot overwrite the user's own query.
186
+ const autoRanInitialQuery = useRef(false);
187
+ useEffect(() => {
188
+ if (autoRanInitialQuery.current)
189
+ return;
190
+ if (!initialQuery || !runtime.ready)
191
+ return;
192
+ autoRanInitialQuery.current = true;
193
+ // This calls `geocode.submit` directly because the query is already in the URL.
194
+ void geocode.submit(initialQuery);
195
+ }, [initialQuery, runtime.ready, geocode]);
196
+ // A drawer-breakpoint crossing clears any dragged height.
197
+ // The height could clip the desktop column.
198
+ useEffect(() => {
199
+ const query = globalThis.matchMedia(DRAWER_LAYOUT);
200
+ const onChange = () => setSheetHeight(null);
201
+ query.addEventListener("change", onChange);
202
+ return () => query.removeEventListener("change", onChange);
203
+ }, []);
204
+ // A user pan, zoom, or rotate shrinks the drawer to its floor detent without dismissing the result.
205
+ // Programmatic camera moves, such as the fly-to after a query, have no `originalEvent` and are ignored.
206
+ useEffect(() => {
207
+ if (!map)
208
+ return;
209
+ const collapse = (event) => {
210
+ if (!event.originalEvent)
211
+ return;
212
+ if (!isDrawerLayout())
213
+ return;
214
+ const { floor } = sheetDetents();
215
+ setSheetHeight((current) => (current !== null && current <= floor ? current : floor));
216
+ };
217
+ map.on("dragstart", collapse);
218
+ map.on("zoomstart", collapse);
219
+ map.on("rotatestart", collapse);
220
+ return () => {
221
+ map.off("dragstart", collapse);
222
+ map.off("zoomstart", collapse);
223
+ map.off("rotatestart", collapse);
224
+ };
225
+ }, [map, sheetDetents]);
226
+ // Escape dismisses the result only while no side sheet is open.
227
+ // `MapSheet` also listens for Escape on the document, so one keystroke would otherwise close both.
228
+ useEffect(() => {
229
+ if (openSheet)
230
+ return;
231
+ const onKeyDown = (event) => {
232
+ if (event.key === "Escape") {
233
+ setResultDismissed(true);
234
+ }
235
+ };
236
+ document.addEventListener("keydown", onKeyDown);
237
+ return () => document.removeEventListener("keydown", onKeyDown);
238
+ }, [openSheet]);
239
+ // A map-label click searches for its name.
240
+ const pickLabel = useCallback((name) => {
241
+ geocode.setText(name);
242
+ geocode.reset();
243
+ runQuery(name);
244
+ }, [geocode, runQuery]);
245
+ useMapLabelPick(map, pickLabel);
246
+ const chips = presets.map((preset) => ({ label: preset.label, value: preset.value }));
247
+ // The model download does not open the result panel.
248
+ // The progress bar reports it instead.
249
+ const showSheet = Boolean(busy || result || errorMessage) && !resultDismissed;
250
+ // The control rail hides while the drawer is raised above its collapsed height.
251
+ const drawerRaised = showSheet &&
252
+ (sheetHeight === null || (globalThis.window !== undefined && sheetHeight > sheetDetents().collapsedBelow));
253
+ const bundleLoading = Boolean(loading && !runtime.ready);
254
+ const steps = loading?.stepLabels.length ?? 0;
255
+ // The model downloads during the first step.
256
+ // While bytes arrive, the bar follows the byte fraction scaled into the first step's share,
257
+ // so it does not move backwards when step progress takes over.
258
+ const stepFraction = steps ? ((loading?.stepIndex ?? 0) + 1) / steps : null;
259
+ const byteFraction = loading?.byteFraction;
260
+ const fraction = typeof byteFraction === "number" && steps ? (byteFraction * 1) / steps : (byteFraction ?? stepFraction);
261
+ return (_jsxs(_Fragment, { children: [_jsx(MapProgressBar, { active: bundleLoading, fraction: fraction, label: "Loading the geocoder" }), _jsxs("section", { className: "mw-map-panel", "aria-label": "Search and results", ref: sheetRef, onPointerDown: onPanelPointerDown, onPointerMove: onPanelPointerMove, onPointerUp: onPanelPointerUp, onPointerCancel: onPanelPointerUp, ...(sheetHeight === null ? {} : { style: { maxHeight: `${Math.round(sheetHeight)}px` } }), children: [_jsxs("div", { className: "mw-map-panel__header", onPointerDown: onHeaderPointerDown, children: [_jsxs("div", { className: "mw-map-panel__grip", children: [showSheet ? (_jsx("button", { type: "button", className: "mw-map-sheet__handle", "aria-label": "Resize the panel", "aria-expanded": atLargeDetent(),
262
+ // The header handles pointer gestures.
263
+ // A click with `detail === 0` comes from the keyboard,
264
+ // so only that toggles the detent here.
265
+ onClick: (event) => {
266
+ if (event.detail !== 0)
267
+ return;
268
+ toggleDetent();
269
+ } })) : null, showSheet ? (_jsx(SheetClose, { label: "Close the result", className: "mw-map-sheet__close--floating", onClose: () => setResultDismissed(true) })) : null] }), _jsx("form", { className: "mw-map-panel__search", onSubmit: (event) => {
270
+ event.preventDefault();
271
+ runQuery(geocode.text);
272
+ }, children: _jsx(MapSearchBar, { label: "Search addresses", leading: _jsx(SearchGlyph, {}), busy: busy, children: _jsx("input", { id: "mw-pipeline-input", type: "search", "aria-label": "Address", value: geocode.text, onChange: (event) => geocode.setText(event.target.value),
273
+ // Focus selects the value only while it equals the placeholder, so typing replaces it.
274
+ onFocus: (event) => {
275
+ if (placeholder && event.currentTarget.value === placeholder) {
276
+ event.currentTarget.select();
277
+ }
278
+ }, disabled: !runtime.ready, placeholder: placeholder, onKeyDown: autocomplete.onInputKeyDown, ...autocomplete.inputProps }) }) })] }), _jsx(PlaceAutocomplete, { suggestions: autocomplete.suggestions, activeIndex: autocomplete.activeIndex, onPick: autocomplete.pick, onHover: autocomplete.setActiveIndex, listboxID: autocomplete.listboxID, optionID: autocomplete.optionID }), _jsx(MapChipRow, { chips: chips, label: "Example addresses", activeValue: geocode.text, disabled: !runtime.ready || busy, onPick: (value) => {
279
+ geocode.setText(value);
280
+ geocode.reset();
281
+ runQuery(value);
282
+ } }), panels.bias, showSheet ? (_jsxs("div", { className: "mw-map-panel__result", children: [errorMessage ? _jsx("p", { className: "mw-error", children: errorMessage }) : null, panels.aboveResult ? panels.aboveResult({ result }) : null, busy ? (_jsx("div", { className: "mw-result", children: _jsx(LoadingIndicator, { mode: "staged", steps: runtime.parseStageLabels, activeStep: geocode.parseStage }) })) : result ? (panels.result ? (panels.result({
283
+ result,
284
+ selectedCandidate,
285
+ selectedCandidateIndex: geocode.selectedCandidateIndex,
286
+ onSelectCandidate: geocode.selectCandidate,
287
+ })) : (_jsx(ResultPanel, { result: result, selectedCandidate: selectedCandidate, selectedCandidateIndex: geocode.selectedCandidateIndex, onSelectCandidate: geocode.selectCandidate, extras: panels.extras, failure: panels.failure }))) : null, panels.compare
288
+ ? panels.compare({ result, compareMode: compare.compareMode, compareVersion: compare.compareVersion })
289
+ : null, panels.permalink ? _jsx("div", { className: "mw-map-sheet__actions", children: panels.permalink(geocode.text) }) : null] })) : null] }), _jsxs(MapControlStack, { label: "Map controls", className: drawerRaised ? "mw-map-control-stack--drawer-open" : undefined, children: [_jsxs(MapControlGroup, { children: [_jsx(MapControlButton, { label: "About this geocoder", active: openSheet === "about", onPress: () => toggleSheet("about"), children: _jsx("span", { "aria-hidden": "true", children: "i" }) }), panels.layers ? (_jsx(MapControlButton, { label: "Map layers", active: openSheet === "layers", onPress: () => toggleSheet("layers"), children: _jsx("span", { "aria-hidden": "true", children: "\u2261" }) })) : null, _jsx(MapControlButton, { label: "Developer controls", active: openSheet === "developer", onPress: () => toggleSheet("developer"), children: _jsx("span", { "aria-hidden": "true", children: "\u2699" }) })] }), _jsx(MapControlGroup, { className: "mw-map-control-group--compass", children: _jsx(MapCompass, { bearing: bearing, onResetNorth: resetNorth }) })] }), openSheet === "about" ? (_jsx(MapSheet, { title: "About", onClose: closeSheet, children: panels.header })) : null, openSheet === "layers" ? (_jsx(MapSheet, { title: "Layers", onClose: closeSheet, children: panels.layers?.({ map }) })) : null, openSheet === "developer" ? (_jsxs(MapSheet, { title: "Developer", onClose: closeSheet, children: [panels.releaseInfo ? (_jsxs("div", { className: "mw-map-sheet__row", children: [_jsx("span", { className: "mw-map-sheet__label", children: "This release" }), panels.releaseInfo] })) : null, _jsx("div", { className: "mw-map-sheet__row", children: _jsx(VersionPicker, { versions: versions, selected: runtime.selectedVersion ?? null, onSelect: onSelectVersion, disabled: busy }) }), _jsx("div", { className: "mw-map-sheet__row", children: _jsx(BackendControl, { activeBackend: runtime.activeBackend, forceWASM: runtime.forceWASM ?? false, onForceWASMChange: onForceWASMChange }) }), _jsxs("div", { className: "mw-map-sheet__row", children: [_jsx("span", { className: "mw-map-sheet__label", children: "Debug info" }), _jsx(DebugInfo, { activeBackend: runtime.activeBackend, forceWASM: runtime.forceWASM, selectedVersion: runtime.selectedVersion, ready: runtime.ready })] }), _jsx("div", { className: "mw-map-sheet__row", children: _jsx(CompareToggle, { versions: versions, primaryVersion: runtime.selectedVersion ?? null, compareMode: compare.compareMode, onCompareModeChange: compare.setCompareMode, compareVersion: compare.compareVersion, onCompareVersionChange: compare.setCompareVersion, disabled: busy }) }), panels.developerExtras] })) : null, panels.footer] }));
29
290
  }
30
291
  //# sourceMappingURL=GeocoderControls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeocoderControls.js","sourceRoot":"","sources":["../../lib/map/GeocoderControls.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeocoderControls.js","sourceRoot":"","sources":["../../lib/map/GeocoderControls.tsx"],"names":[],"mappings":"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"}