@mailwoman/react 10.0.0 → 10.2.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 (389) hide show
  1. package/README.md +18 -16
  2. package/fonts.css +97 -22
  3. package/lib/common/About.tsx +10 -10
  4. package/lib/common/ClientOnly.tsx +2 -14
  5. package/lib/common/CopyButton.tsx +9 -3
  6. package/lib/common/LoadingIndicator.tsx +13 -5
  7. package/lib/common/PresetChips.tsx +11 -8
  8. package/lib/common/confidence-tiers.ts +8 -7
  9. package/lib/common/cx.ts +3 -1
  10. package/lib/common/text-tokens.ts +10 -13
  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 -18
  15. package/lib/map/AppIdentity.tsx +89 -0
  16. package/lib/map/CompareToggle.tsx +8 -31
  17. package/lib/map/DebugInfo.tsx +75 -0
  18. package/lib/map/Geocoder.tsx +65 -50
  19. package/lib/map/GeocoderControls.tsx +425 -141
  20. package/lib/map/GraticuleLayer.tsx +56 -0
  21. package/lib/map/MapCanvas.tsx +26 -13
  22. package/lib/map/MapChipRow.tsx +4 -8
  23. package/lib/map/MapCompass.tsx +18 -25
  24. package/lib/map/MapControlStack.tsx +11 -10
  25. package/lib/map/MapFooter.tsx +5 -17
  26. package/lib/map/MapProgressBar.tsx +10 -13
  27. package/lib/map/MapSearchBar.tsx +31 -17
  28. package/lib/map/MapSheet.tsx +24 -15
  29. package/lib/map/OverlayLayers.tsx +14 -3
  30. package/lib/map/PlaceAutocomplete.tsx +12 -21
  31. package/lib/map/PlaceMarker.tsx +10 -4
  32. package/lib/map/ResolvedPlaceLayers.tsx +14 -15
  33. package/lib/map/ResultCamera.tsx +10 -31
  34. package/lib/map/ResultOverlay.tsx +14 -16
  35. package/lib/map/ResultPanel.tsx +1 -20
  36. package/lib/map/VersionPicker.tsx +10 -19
  37. package/lib/map/fake-runtime.ts +46 -19
  38. package/lib/map/geometry.ts +14 -47
  39. package/lib/map/graticule.ts +80 -0
  40. package/lib/map/map-debug.ts +4 -2
  41. package/lib/map/place-render.ts +30 -62
  42. package/lib/map/types.ts +57 -116
  43. package/lib/map/useCompareState.ts +5 -4
  44. package/lib/map/useGeocode.ts +7 -5
  45. package/lib/map/useMapBearing.ts +13 -13
  46. package/lib/map/useMapLabelPick.ts +21 -30
  47. package/lib/map/useMapPlaceRender.ts +3 -7
  48. package/lib/map/usePlaceAutocomplete.ts +44 -50
  49. package/lib/map.ts +92 -0
  50. package/lib/pipeline/CandidatePicker.tsx +13 -5
  51. package/lib/pipeline/ConfidenceCell.tsx +2 -2
  52. package/lib/pipeline/FailureDiagnostic.tsx +8 -2
  53. package/lib/pipeline/PipelineExplorer.tsx +6 -3
  54. package/lib/pipeline/QueryForm.tsx +5 -2
  55. package/lib/pipeline/ResolvedPlace.tsx +2 -2
  56. package/lib/pipeline/SpanHighlight.tsx +7 -5
  57. package/lib/pipeline/TimingPanel.tsx +1 -1
  58. package/lib/pipeline/TreeView.tsx +2 -2
  59. package/lib/pipeline/copy.ts +22 -25
  60. package/lib/pipeline/presets.ts +15 -13
  61. package/lib/pipeline/types.ts +20 -17
  62. package/lib/pipeline/useParsePipeline.ts +16 -13
  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 +29 -17
  67. package/lib/poi/QueryInput.tsx +1 -1
  68. package/lib/poi/SubjectPanel.tsx +4 -3
  69. package/lib/poi/runtime.ts +14 -16
  70. package/lib/poi/types.ts +58 -47
  71. package/lib/poi/usePOISearch.ts +91 -82
  72. package/lib/poi.ts +40 -0
  73. package/lib/runtime/useReleaseRuntime.ts +122 -90
  74. package/lib/search/SearchModal.tsx +478 -0
  75. package/lib/search/search.css +282 -0
  76. package/lib/search/types.ts +68 -0
  77. package/lib/search.ts +11 -0
  78. package/out/common/About.d.ts +6 -6
  79. package/out/common/About.d.ts.map +1 -1
  80. package/out/common/About.js +1 -1
  81. package/out/common/About.js.map +1 -1
  82. package/out/common/ClientOnly.d.ts +2 -11
  83. package/out/common/ClientOnly.d.ts.map +1 -1
  84. package/out/common/ClientOnly.js +1 -13
  85. package/out/common/ClientOnly.js.map +1 -1
  86. package/out/common/CopyButton.d.ts +9 -3
  87. package/out/common/CopyButton.d.ts.map +1 -1
  88. package/out/common/CopyButton.js.map +1 -1
  89. package/out/common/LoadingIndicator.d.ts +13 -5
  90. package/out/common/LoadingIndicator.d.ts.map +1 -1
  91. package/out/common/LoadingIndicator.js.map +1 -1
  92. package/out/common/PresetChips.d.ts +11 -8
  93. package/out/common/PresetChips.d.ts.map +1 -1
  94. package/out/common/PresetChips.js.map +1 -1
  95. package/out/common/confidence-tiers.d.ts +8 -7
  96. package/out/common/confidence-tiers.d.ts.map +1 -1
  97. package/out/common/confidence-tiers.js +7 -6
  98. package/out/common/confidence-tiers.js.map +1 -1
  99. package/out/common/cx.d.ts +3 -1
  100. package/out/common/cx.d.ts.map +1 -1
  101. package/out/common/cx.js +3 -1
  102. package/out/common/cx.js.map +1 -1
  103. package/out/common/text-tokens.d.ts +6 -11
  104. package/out/common/text-tokens.d.ts.map +1 -1
  105. package/out/common/text-tokens.js +6 -3
  106. package/out/common/text-tokens.js.map +1 -1
  107. package/out/common/useBuildInfo.d.ts +27 -0
  108. package/out/common/useBuildInfo.d.ts.map +1 -0
  109. package/out/common/useBuildInfo.js +32 -0
  110. package/out/common/useBuildInfo.js.map +1 -0
  111. package/out/common/useClipboard.d.ts +1 -3
  112. package/out/common/useClipboard.d.ts.map +1 -1
  113. package/out/common/useClipboard.js +2 -11
  114. package/out/common/useClipboard.js.map +1 -1
  115. package/out/common.d.ts +22 -0
  116. package/out/common.d.ts.map +1 -0
  117. package/out/common.js +15 -0
  118. package/out/common.js.map +1 -0
  119. package/out/index.d.ts +26 -16
  120. package/out/index.d.ts.map +1 -1
  121. package/out/index.js +21 -15
  122. package/out/index.js.map +1 -1
  123. package/out/map/AppIdentity.d.ts +46 -0
  124. package/out/map/AppIdentity.d.ts.map +1 -0
  125. package/out/map/AppIdentity.js +16 -0
  126. package/out/map/AppIdentity.js.map +1 -0
  127. package/out/map/CompareToggle.d.ts +8 -31
  128. package/out/map/CompareToggle.d.ts.map +1 -1
  129. package/out/map/CompareToggle.js +4 -1
  130. package/out/map/CompareToggle.js.map +1 -1
  131. package/out/map/DebugInfo.d.ts +27 -0
  132. package/out/map/DebugInfo.d.ts.map +1 -0
  133. package/out/map/DebugInfo.js +36 -0
  134. package/out/map/DebugInfo.js.map +1 -0
  135. package/out/map/Geocoder.d.ts +41 -30
  136. package/out/map/Geocoder.d.ts.map +1 -1
  137. package/out/map/Geocoder.js +23 -37
  138. package/out/map/Geocoder.js.map +1 -1
  139. package/out/map/GeocoderControls.d.ts +15 -44
  140. package/out/map/GeocoderControls.d.ts.map +1 -1
  141. package/out/map/GeocoderControls.js +250 -39
  142. package/out/map/GeocoderControls.js.map +1 -1
  143. package/out/map/GraticuleLayer.d.ts +30 -0
  144. package/out/map/GraticuleLayer.d.ts.map +1 -0
  145. package/out/map/GraticuleLayer.js +25 -0
  146. package/out/map/GraticuleLayer.js.map +1 -0
  147. package/out/map/MapCanvas.d.ts +26 -13
  148. package/out/map/MapCanvas.d.ts.map +1 -1
  149. package/out/map/MapCanvas.js +5 -2
  150. package/out/map/MapCanvas.js.map +1 -1
  151. package/out/map/MapChipRow.d.ts +4 -8
  152. package/out/map/MapChipRow.d.ts.map +1 -1
  153. package/out/map/MapChipRow.js.map +1 -1
  154. package/out/map/MapCompass.d.ts +14 -21
  155. package/out/map/MapCompass.d.ts.map +1 -1
  156. package/out/map/MapCompass.js +5 -1
  157. package/out/map/MapCompass.js.map +1 -1
  158. package/out/map/MapControlStack.d.ts +11 -10
  159. package/out/map/MapControlStack.d.ts.map +1 -1
  160. package/out/map/MapControlStack.js +4 -1
  161. package/out/map/MapControlStack.js.map +1 -1
  162. package/out/map/MapFooter.d.ts +5 -16
  163. package/out/map/MapFooter.d.ts.map +1 -1
  164. package/out/map/MapFooter.js +0 -14
  165. package/out/map/MapFooter.js.map +1 -1
  166. package/out/map/MapProgressBar.d.ts +10 -13
  167. package/out/map/MapProgressBar.d.ts.map +1 -1
  168. package/out/map/MapProgressBar.js.map +1 -1
  169. package/out/map/MapSearchBar.d.ts +16 -17
  170. package/out/map/MapSearchBar.d.ts.map +1 -1
  171. package/out/map/MapSearchBar.js +6 -0
  172. package/out/map/MapSearchBar.js.map +1 -1
  173. package/out/map/MapSheet.d.ts +15 -12
  174. package/out/map/MapSheet.d.ts.map +1 -1
  175. package/out/map/MapSheet.js +8 -12
  176. package/out/map/MapSheet.js.map +1 -1
  177. package/out/map/OverlayLayers.d.ts +8 -2
  178. package/out/map/OverlayLayers.d.ts.map +1 -1
  179. package/out/map/OverlayLayers.js +3 -3
  180. package/out/map/OverlayLayers.js.map +1 -1
  181. package/out/map/PlaceAutocomplete.d.ts +12 -21
  182. package/out/map/PlaceAutocomplete.d.ts.map +1 -1
  183. package/out/map/PlaceAutocomplete.js +2 -1
  184. package/out/map/PlaceAutocomplete.js.map +1 -1
  185. package/out/map/PlaceMarker.d.ts +10 -4
  186. package/out/map/PlaceMarker.d.ts.map +1 -1
  187. package/out/map/PlaceMarker.js +3 -1
  188. package/out/map/PlaceMarker.js.map +1 -1
  189. package/out/map/ResolvedPlaceLayers.d.ts +14 -15
  190. package/out/map/ResolvedPlaceLayers.d.ts.map +1 -1
  191. package/out/map/ResolvedPlaceLayers.js +1 -1
  192. package/out/map/ResolvedPlaceLayers.js.map +1 -1
  193. package/out/map/ResultCamera.d.ts +10 -31
  194. package/out/map/ResultCamera.d.ts.map +1 -1
  195. package/out/map/ResultCamera.js +3 -28
  196. package/out/map/ResultCamera.js.map +1 -1
  197. package/out/map/ResultOverlay.d.ts +14 -16
  198. package/out/map/ResultOverlay.d.ts.map +1 -1
  199. package/out/map/ResultOverlay.js +1 -2
  200. package/out/map/ResultOverlay.js.map +1 -1
  201. package/out/map/ResultPanel.d.ts +1 -20
  202. package/out/map/ResultPanel.d.ts.map +1 -1
  203. package/out/map/ResultPanel.js.map +1 -1
  204. package/out/map/VersionPicker.d.ts +7 -19
  205. package/out/map/VersionPicker.d.ts.map +1 -1
  206. package/out/map/VersionPicker.js +5 -2
  207. package/out/map/VersionPicker.js.map +1 -1
  208. package/out/map/fake-runtime.d.ts +9 -11
  209. package/out/map/fake-runtime.d.ts.map +1 -1
  210. package/out/map/fake-runtime.js +45 -19
  211. package/out/map/fake-runtime.js.map +1 -1
  212. package/out/map/geometry.d.ts +13 -34
  213. package/out/map/geometry.d.ts.map +1 -1
  214. package/out/map/geometry.js +9 -34
  215. package/out/map/geometry.js.map +1 -1
  216. package/out/map/graticule.d.ts +17 -0
  217. package/out/map/graticule.d.ts.map +1 -0
  218. package/out/map/graticule.js +67 -0
  219. package/out/map/graticule.js.map +1 -0
  220. package/out/map/map-debug.d.ts +4 -2
  221. package/out/map/map-debug.d.ts.map +1 -1
  222. package/out/map/map-debug.js +1 -1
  223. package/out/map/map-debug.js.map +1 -1
  224. package/out/map/place-render.d.ts +25 -45
  225. package/out/map/place-render.d.ts.map +1 -1
  226. package/out/map/place-render.js +4 -39
  227. package/out/map/place-render.js.map +1 -1
  228. package/out/map/types.d.ts +57 -113
  229. package/out/map/types.d.ts.map +1 -1
  230. package/out/map/types.js +1 -10
  231. package/out/map/types.js.map +1 -1
  232. package/out/map/useCompareState.d.ts +5 -4
  233. package/out/map/useCompareState.d.ts.map +1 -1
  234. package/out/map/useCompareState.js +3 -3
  235. package/out/map/useCompareState.js.map +1 -1
  236. package/out/map/useGeocode.d.ts +5 -3
  237. package/out/map/useGeocode.d.ts.map +1 -1
  238. package/out/map/useGeocode.js +4 -4
  239. package/out/map/useGeocode.js.map +1 -1
  240. package/out/map/useMapBearing.d.ts +11 -11
  241. package/out/map/useMapBearing.d.ts.map +1 -1
  242. package/out/map/useMapBearing.js +6 -11
  243. package/out/map/useMapBearing.js.map +1 -1
  244. package/out/map/useMapLabelPick.d.ts +4 -14
  245. package/out/map/useMapLabelPick.d.ts.map +1 -1
  246. package/out/map/useMapLabelPick.js +21 -30
  247. package/out/map/useMapLabelPick.js.map +1 -1
  248. package/out/map/useMapPlaceRender.d.ts +3 -7
  249. package/out/map/useMapPlaceRender.d.ts.map +1 -1
  250. package/out/map/useMapPlaceRender.js +2 -6
  251. package/out/map/useMapPlaceRender.js.map +1 -1
  252. package/out/map/usePlaceAutocomplete.d.ts +30 -28
  253. package/out/map/usePlaceAutocomplete.d.ts.map +1 -1
  254. package/out/map/usePlaceAutocomplete.js +6 -33
  255. package/out/map/usePlaceAutocomplete.js.map +1 -1
  256. package/out/map.d.ts +67 -0
  257. package/out/map.d.ts.map +1 -0
  258. package/out/map.js +45 -0
  259. package/out/map.js.map +1 -0
  260. package/out/pipeline/CandidatePicker.d.ts +12 -2
  261. package/out/pipeline/CandidatePicker.d.ts.map +1 -1
  262. package/out/pipeline/CandidatePicker.js +1 -1
  263. package/out/pipeline/CandidatePicker.js.map +1 -1
  264. package/out/pipeline/ConfidenceCell.d.ts +2 -2
  265. package/out/pipeline/ConfidenceCell.d.ts.map +1 -1
  266. package/out/pipeline/ConfidenceCell.js +1 -1
  267. package/out/pipeline/FailureDiagnostic.d.ts +8 -2
  268. package/out/pipeline/FailureDiagnostic.d.ts.map +1 -1
  269. package/out/pipeline/FailureDiagnostic.js +3 -0
  270. package/out/pipeline/FailureDiagnostic.js.map +1 -1
  271. package/out/pipeline/PipelineExplorer.d.ts +6 -2
  272. package/out/pipeline/PipelineExplorer.d.ts.map +1 -1
  273. package/out/pipeline/PipelineExplorer.js +1 -1
  274. package/out/pipeline/PipelineExplorer.js.map +1 -1
  275. package/out/pipeline/QueryForm.d.ts +5 -2
  276. package/out/pipeline/QueryForm.d.ts.map +1 -1
  277. package/out/pipeline/QueryForm.js.map +1 -1
  278. package/out/pipeline/ResolvedPlace.d.ts +1 -1
  279. package/out/pipeline/ResolvedPlace.d.ts.map +1 -1
  280. package/out/pipeline/SpanHighlight.d.ts +4 -3
  281. package/out/pipeline/SpanHighlight.d.ts.map +1 -1
  282. package/out/pipeline/SpanHighlight.js +3 -2
  283. package/out/pipeline/SpanHighlight.js.map +1 -1
  284. package/out/pipeline/TimingPanel.d.ts +1 -1
  285. package/out/pipeline/TreeView.d.ts +1 -1
  286. package/out/pipeline/TreeView.js.map +1 -1
  287. package/out/pipeline/copy.d.ts +1 -1
  288. package/out/pipeline/copy.d.ts.map +1 -1
  289. package/out/pipeline/copy.js +4 -3
  290. package/out/pipeline/copy.js.map +1 -1
  291. package/out/pipeline/presets.d.ts +5 -4
  292. package/out/pipeline/presets.d.ts.map +1 -1
  293. package/out/pipeline/presets.js +15 -13
  294. package/out/pipeline/presets.js.map +1 -1
  295. package/out/pipeline/types.d.ts +20 -17
  296. package/out/pipeline/types.d.ts.map +1 -1
  297. package/out/pipeline/types.js +2 -4
  298. package/out/pipeline/types.js.map +1 -1
  299. package/out/pipeline/useParsePipeline.d.ts +14 -9
  300. package/out/pipeline/useParsePipeline.d.ts.map +1 -1
  301. package/out/pipeline/useParsePipeline.js +7 -8
  302. package/out/pipeline/useParsePipeline.js.map +1 -1
  303. package/out/pipeline.d.ts +33 -0
  304. package/out/pipeline.d.ts.map +1 -0
  305. package/out/pipeline.js +21 -0
  306. package/out/pipeline.js.map +1 -0
  307. package/out/poi/AbstainPanel.d.ts +1 -1
  308. package/out/poi/LiveResultsBlock.d.ts +2 -1
  309. package/out/poi/LiveResultsBlock.d.ts.map +1 -1
  310. package/out/poi/LiveResultsBlock.js.map +1 -1
  311. package/out/poi/POIExplorer.d.ts +22 -12
  312. package/out/poi/POIExplorer.d.ts.map +1 -1
  313. package/out/poi/POIExplorer.js +11 -10
  314. package/out/poi/POIExplorer.js.map +1 -1
  315. package/out/poi/QueryInput.d.ts +1 -1
  316. package/out/poi/SubjectPanel.d.ts +2 -2
  317. package/out/poi/SubjectPanel.d.ts.map +1 -1
  318. package/out/poi/SubjectPanel.js +2 -1
  319. package/out/poi/SubjectPanel.js.map +1 -1
  320. package/out/poi/runtime.d.ts +5 -14
  321. package/out/poi/runtime.d.ts.map +1 -1
  322. package/out/poi/runtime.js +14 -16
  323. package/out/poi/runtime.js.map +1 -1
  324. package/out/poi/types.d.ts +53 -45
  325. package/out/poi/types.d.ts.map +1 -1
  326. package/out/poi/types.js +2 -4
  327. package/out/poi/types.js.map +1 -1
  328. package/out/poi/usePOISearch.d.ts +30 -17
  329. package/out/poi/usePOISearch.d.ts.map +1 -1
  330. package/out/poi/usePOISearch.js +48 -64
  331. package/out/poi/usePOISearch.js.map +1 -1
  332. package/out/poi.d.ts +23 -0
  333. package/out/poi.d.ts.map +1 -0
  334. package/out/poi.js +15 -0
  335. package/out/poi.js.map +1 -0
  336. package/out/runtime/useReleaseRuntime.d.ts +63 -74
  337. package/out/runtime/useReleaseRuntime.d.ts.map +1 -1
  338. package/out/runtime/useReleaseRuntime.js +31 -32
  339. package/out/runtime/useReleaseRuntime.js.map +1 -1
  340. package/out/{runtime/index.d.ts → runtime.d.ts} +1 -1
  341. package/out/runtime.d.ts.map +1 -0
  342. package/out/{runtime/index.js → runtime.js} +1 -1
  343. package/out/runtime.js.map +1 -0
  344. package/out/search/SearchModal.d.ts +40 -0
  345. package/out/search/SearchModal.d.ts.map +1 -0
  346. package/out/search/SearchModal.js +255 -0
  347. package/out/search/SearchModal.js.map +1 -0
  348. package/out/search/types.d.ts +65 -0
  349. package/out/search/types.d.ts.map +1 -0
  350. package/out/search/types.js +13 -0
  351. package/out/search/types.js.map +1 -0
  352. package/out/search.d.ts +11 -0
  353. package/out/search.d.ts.map +1 -0
  354. package/out/search.js +9 -0
  355. package/out/search.js.map +1 -0
  356. package/package.json +73 -165
  357. package/styles.css +482 -266
  358. package/tokens/index.css +24 -6
  359. package/tokens/tokens.json +114 -6
  360. package/lib/common/index.ts +0 -22
  361. package/lib/map/BackendControl.tsx +0 -51
  362. package/lib/map/index.ts +0 -95
  363. package/lib/pipeline/index.ts +0 -36
  364. package/lib/poi/index.ts +0 -39
  365. package/out/common/index.d.ts +0 -22
  366. package/out/common/index.d.ts.map +0 -1
  367. package/out/common/index.js +0 -15
  368. package/out/common/index.js.map +0 -1
  369. package/out/map/BackendControl.d.ts +0 -32
  370. package/out/map/BackendControl.d.ts.map +0 -1
  371. package/out/map/BackendControl.js +0 -8
  372. package/out/map/BackendControl.js.map +0 -1
  373. package/out/map/index.d.ts +0 -69
  374. package/out/map/index.d.ts.map +0 -1
  375. package/out/map/index.js +0 -46
  376. package/out/map/index.js.map +0 -1
  377. package/out/pipeline/index.d.ts +0 -33
  378. package/out/pipeline/index.d.ts.map +0 -1
  379. package/out/pipeline/index.js +0 -21
  380. package/out/pipeline/index.js.map +0 -1
  381. package/out/poi/index.d.ts +0 -23
  382. package/out/poi/index.d.ts.map +0 -1
  383. package/out/poi/index.js +0 -15
  384. package/out/poi/index.js.map +0 -1
  385. package/out/runtime/index.d.ts.map +0 -1
  386. package/out/runtime/index.js.map +0 -1
  387. package/styleframe.config.ts +0 -329
  388. package/vitest.node.config.ts +0 -20
  389. /package/lib/{runtime/index.ts → runtime.ts} +0 -0
@@ -2,49 +2,22 @@
2
2
  * @copyright Sister Software
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
- *
6
- * `computeMapPlaceRenderSpec` — the PURE core that replaces the docs demo's ~100-line imperative
7
- * marker/bbox/camera redraw effect (`_app.tsx:601-705`). It takes an ALREADY-RESOLVED place (the async
8
- * polygon-DB fetch is a host/runtime concern — a later phase — so a crisp polygon arrives pre-fetched
9
- * as `place.geometry`) and returns a declarative render spec: the marker position(s), the outline
10
- * geometry to draw, and the camera target. No map instance, no DOM, no `react-map-gl` — so it is
11
- * node-testable (see `place-render.node.test.ts`). The declarative components in this folder render
12
- * the spec; a controlled-viewport consumer applies the camera.
13
- *
14
- * The decision cascade is a faithful, side-effect-free transcription of the imperative effect:
15
- * 1. street tier (situs / interp) → exact-radius circle, fly to a tight zoom
16
- * 2. crisp admin polygon (pre-fetched) → draw the polygon, fit its bounds
17
- * 3. anchor-centroid postcode (no bbox) → ~3 km "around here" circle, fly to zoom 11
18
- * 4. bbox with real extent → bbox-sized approximate circle, fit the bbox
19
- * 5. bare point → no outline, fly to zoom 12
20
5
  */
21
6
  import { approxCircleGeometry, bboxToBounds, geomBounds, radiusCircleGeometry } from "#map/geometry";
22
- /**
23
- * Zoom levels the imperative effect flew to, kept named so the cascade reads as intent, not magic numbers.
24
- */
25
7
  const ZOOM = {
26
8
  addressPoint: 17,
27
9
  interpolated: 15,
28
10
  postcode: 11,
29
11
  point: 12,
30
12
  };
31
- /**
32
- * Padding (px) `fitBounds` insets a fitted box by, matching the ported effect.
33
- */
34
13
  const FIT_PADDING = 40;
35
- /**
36
- * The minimum lat/lon span (degrees) a bbox must exceed to be treated as a real extent rather than a point.
37
- */
38
14
  const MIN_EXTENT_DEG = 0.001;
39
15
  /**
40
- * Map a resolved place to its declarative render spec. Pure — same input, same output, no side effects. The `place`
41
- * arrives fully resolved (crisp polygon pre-fetched into `place.geometry` when available), so this is the honest
42
- * inverse of the old redraw effect with the imperative map mutation and the async DB load removed.
16
+ * Computes the markers, outline and camera target for a resolved place without loading data,
17
+ * so the caller must put any fetched polygon in `place.geometry` first.
43
18
  */
44
19
  export function computeMapPlaceRenderSpec(place) {
45
20
  const markers = [[place.lon, place.lat]];
46
- // 1. Street tier (#377): the honest uncertainty circle (exact meter radius) + a tight zoom. Takes precedence over
47
- // the admin polygon/bbox paths — a precise point gets no admin boundary.
48
21
  if (place.tier && place.uncertaintyM != null) {
49
22
  return {
50
23
  markers,
@@ -56,7 +29,6 @@ export function computeMapPlaceRenderSpec(place) {
56
29
  },
57
30
  };
58
31
  }
59
- // 2. Crisp admin polygon (host pre-fetched it from the polygon DB) — draw the real boundary and fit it.
60
32
  if (place.geometry) {
61
33
  return {
62
34
  markers,
@@ -64,8 +36,6 @@ export function computeMapPlaceRenderSpec(place) {
64
36
  camera: { kind: "bounds", bounds: bboxToBounds(geomBounds(place.geometry)), padding: FIT_PADDING },
65
37
  };
66
38
  }
67
- // 3. Anchor-centroid postcode: no bbox, no polygon — a default ~3 km circle says "approximately here" without
68
- // inventing a boundary.
69
39
  if (!place.bbox && place.placetype === "postcode") {
70
40
  return {
71
41
  markers,
@@ -73,8 +43,6 @@ export function computeMapPlaceRenderSpec(place) {
73
43
  camera: { kind: "center", center: [place.lon, place.lat], zoom: ZOOM.postcode },
74
44
  };
75
45
  }
76
- // 4. A bbox with real extent — draw an approximate CIRCLE sized from the bbox (a rectangle would read as a wrong,
77
- // real boundary) and fit the bbox.
78
46
  const bbox = place.bbox;
79
47
  if (bbox && Math.max(bbox.maxLat - bbox.minLat, bbox.maxLon - bbox.minLon) > MIN_EXTENT_DEG) {
80
48
  return {
@@ -83,7 +51,6 @@ export function computeMapPlaceRenderSpec(place) {
83
51
  camera: { kind: "bounds", bounds: bboxToBounds(bbox), padding: FIT_PADDING },
84
52
  };
85
53
  }
86
- // 5. A bare point (no tier, no polygon, no meaningful bbox) — just a marker and a mid zoom.
87
54
  return {
88
55
  markers,
89
56
  outline: null,
@@ -91,10 +58,8 @@ export function computeMapPlaceRenderSpec(place) {
91
58
  };
92
59
  }
93
60
  /**
94
- * The DECLARATIVE camera path: reshape a `center` target into a `viewState` patch a controlled `<MapCanvas viewState>`
95
- * can apply directly (a hard jump, no animation). Returns `null` for a `bounds` target — fitting a box to the viewport
96
- * needs the map's pixel dimensions, which only the live map has, so that case is applied imperatively by
97
- * `<ResultCamera>`. Pure + node-testable.
61
+ * Converts a `center` camera target into a `viewState` patch for a controlled `<MapCanvas>`,
62
+ * returning `null` for a `bounds` target that `<ResultCamera>` must fit imperatively.
98
63
  */
99
64
  export function cameraToViewState(camera) {
100
65
  if (camera.kind !== "center")
@@ -1 +1 @@
1
- {"version":3,"file":"place-render.js","sourceRoot":"","sources":["../../lib/map/place-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"place-render.js","sourceRoot":"","sources":["../../lib/map/place-render.ts"],"names":[],"mappings":"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"}
@@ -3,16 +3,7 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * Types for the geocoder map surface. Mirrors the pipeline boundary: the package owns the UI state
7
- * machine + the declarative map, while the host injects a {@link GeocoderRuntime} that owns ONNX / httpvfs
8
- * / R2 and the composed map style. {@link GeocoderRuntime} EXTENDS {@link PipelineRuntime} so the shared
9
- * `runParse` / `parseStageLabels` / `loading` contract is reused, and adds the map-specific surface
10
- * (style, overlays, initial center, viewport bias, backend/version selection). Phase 4 adds the
11
- * `resolveMapPlace` enricher, the {@link GeocoderPanels} injection bag, and the {@link CompareContext}.
12
- *
13
- * The map-spec types are imported type-only from `react-map-gl/maplibre`; nothing here loads maplibre at
14
- * runtime, so this module stays node-safe (its concrete-value CONSUMERS — `MapCanvas`, `Geocoder` —
15
- * are the ones behind the `@mailwoman/react/map` subpath).
6
+ * Types for the geocoder map surface. Its `react-map-gl/maplibre` imports are type-only, so the module stays node-safe.
16
7
  */
17
8
  import type { ParseResult, ResolvedPlaceView } from "@mailwoman/core/pipeline/client-result";
18
9
  import type { ReactNode } from "react";
@@ -21,48 +12,33 @@ import type { LngLat, ResolvedMapPlace } from "#map/place-render";
21
12
  import type { PipelineRuntime } from "#pipeline/types";
22
13
  import type { MapCanvasStyle } from "./MapCanvas.tsx";
23
14
  /**
24
- * `[longitude, latitude]`.
15
+ * An alias for {@link LngLat}.
25
16
  *
26
- * @deprecated Alias kept for existing imports — {@link LngLat} (from `@mailwoman/react/map`) is the canonical name.
17
+ * @deprecated Alias kept for existing imports — {@link LngLat}
18
+ * (from `@mailwoman/react/map`) is the canonical name.
27
19
  */
28
20
  export type LngLatTuple = LngLat;
29
21
  /**
30
22
  * A viewport bias handed to `runParse` — the map's current center (and optionally zoom) as a soft prior.
31
23
  */
32
24
  export interface MapBias {
33
- /**
34
- * Map center as `[lon, lat]`, typically read from `map.getCenter()`.
35
- */
36
25
  center: LngLat;
37
- /**
38
- * Current zoom, if the host wants distance-aware biasing.
39
- */
40
26
  zoom?: number;
41
27
  }
42
28
  /**
43
- * A host-supplied overlay: one map `<Source>` plus one or more `<Layer>`s laid over the basemap (coverage "fog of war",
44
- * race-dots, …). The host composes the specs; the package renders them declaratively in a later phase.
29
+ * A host-supplied overlay: one map `<Source>` plus one or more `<Layer>`s laid over the basemap.
45
30
  */
46
31
  export interface OverlaySpec {
47
32
  /**
48
33
  * Stable id — used as the `<Source>` id and the layer-id prefix.
49
34
  */
50
35
  id: string;
51
- /**
52
- * The map source spec (vector/geojson/raster).
53
- */
54
36
  source: SourceSpecification;
55
- /**
56
- * The layers drawn from that source.
57
- */
58
37
  layers: LayerSpecification[];
59
38
  /**
60
- * Whether the overlay is visible initially. @default true
39
+ * @defaultValue `true`
61
40
  */
62
41
  visible?: boolean;
63
- /**
64
- * Human label for a layer-toggle control.
65
- */
66
42
  label?: string;
67
43
  }
68
44
  /**
@@ -87,45 +63,36 @@ export interface Suggestion {
87
63
  */
88
64
  export interface VersionOption {
89
65
  /**
90
- * The version tag (e.g. a git tag or model-card version).
66
+ * The version tag, such as a git tag or model-card version.
91
67
  */
92
68
  version: string;
93
69
  /**
94
- * Display label; falls back to `version`.
70
+ * Display label.
71
+ * The picker falls back to `version`.
95
72
  */
96
73
  label?: string;
97
74
  }
98
75
  /**
99
- * Which neural backend the geocoder is currently running on.
100
- */
101
- export type InferenceBackend = "webgpu" | "wasm";
102
- /**
103
- * The injected geocoder runtime. Extends {@link PipelineRuntime} (shared `runParse` / `parseStageLabels` / `loading` /
104
- * `ready`) with the map + version/backend surface the geocoder needs. The host composes `mapStyle` (via cartographer's
105
- * `StyleSpecificationComposer` + the tile-worker TileJSON), supplies the overlay specs, the initial center (from
106
- * geolocation), the FST autocomplete, and the calibrator — nothing in the package imports `@mailwoman/cartographer`,
107
- * `@mailwoman/neural`'s web loader, httpvfs, or Docusaurus.
76
+ * The injected geocoder runtime extends {@link PipelineRuntime} with the map.
77
+ * It also supplies version and backend controls.
78
+ *
79
+ * The package imports no `@mailwoman/cartographer`, `@mailwoman/neural` web loader, httpvfs, or Docusaurus.
108
80
  */
109
81
  export interface GeocoderRuntime extends PipelineRuntime {
110
82
  /**
111
83
  * The composed basemap style (URL or `StyleSpecification`).
112
84
  */
113
85
  mapStyle: MapCanvasStyle;
114
- /**
115
- * Host-supplied overlays (coverage, race-dots, …).
116
- */
117
86
  overlays?: OverlaySpec[];
118
87
  /**
119
- * Initial map center as `[lon, lat]` (the host's browser-geolocation result).
88
+ * Initial map center as `[lon, lat]`.
120
89
  */
121
90
  initialCenter: LngLat;
122
- /**
123
- * Initial zoom for the first camera.
124
- */
125
91
  initialZoom?: number;
126
92
  /**
127
- * A bias-aware parse. The geocoder feeds the current viewport center as a soft prior; when absent the host falls back
128
- * to the base {@link PipelineRuntime.runParse}. Kept separate so the shared `runParse` contract is unchanged.
93
+ * A bias-aware parse that feeds the current viewport center as a soft prior.
94
+ *
95
+ * Absent, the host falls back to {@link PipelineRuntime.runParse}.
129
96
  */
130
97
  runParseWithBias?: (input: string, bias: MapBias | null, hooks: {
131
98
  onStage: (stage: number) => void;
@@ -139,50 +106,42 @@ export interface GeocoderRuntime extends PipelineRuntime {
139
106
  */
140
107
  calibrator?: (raw: number) => number | null;
141
108
  /**
142
- * Enrich the selected candidate into the richer {@link ResolvedMapPlace} the declarative map render consumes (bbox,
143
- * street tier + uncertainty, a pre-fetched crisp polygon) — the fields that live on the host's `ResolvedHit` but not
144
- * on the shared {@link ResolvedPlaceView}. The host owns this because those extras (and the async polygon fetch in the
145
- * real runtime) are host/gazetteer concerns; the package keeps {@link ParseResult} unpolluted. Absent → the candidate
146
- * renders as a bare point (marker + a mid-zoom fly-to). Returning `null` also renders nothing.
109
+ * Enrich the selected candidate into the richer {@link ResolvedMapPlace} the declarative
110
+ * map render consumes (bbox, street tier + uncertainty, a pre-fetched crisp polygon) —
111
+ * the fields that live on the host's `ResolvedHit` but not on the shared {@link ResolvedPlaceView}.
112
+ *
113
+ * The host owns this because those extras (and the async polygon fetch in the real runtime)
114
+ * are host/gazetteer concerns.
115
+ * The package keeps {@link ParseResult} unpolluted.
116
+ *
117
+ * Absent → the candidate renders as a bare point (marker + a mid-zoom fly-to).
118
+ *
119
+ * A `null` result also renders no overlay.
147
120
  */
148
121
  resolveMapPlace?: (candidate: ResolvedPlaceView, result: ParseResult) => ResolvedMapPlace | null;
149
122
  /**
150
123
  * The selectable model bundles the version picker offers.
151
124
  */
152
125
  availableVersions?: VersionOption[];
153
- /**
154
- * The currently-selected model version.
155
- */
156
126
  selectedVersion?: string;
157
127
  /**
158
128
  * Switch the active model bundle (re-loads weights/tokenizer/gazetteer).
159
129
  */
160
130
  selectVersion?: (version: string) => void;
161
131
  /**
162
- * The backend the neural runtime resolved to (e.g. `webgpu (28 MB int8)`); free-form for the label.
132
+ * The neural runtime's backend and model size (e.g. `wasm (28 MB int8)`); free-form for the label.
163
133
  */
164
134
  activeBackend?: string;
165
- /**
166
- * Whether the CPU/WASM backend is currently forced (the controlled value for the backend toggle).
167
- */
168
- forceWASM?: boolean;
169
- /**
170
- * Force the WASM backend (opt out of WebGPU), for the backend toggle.
171
- */
172
- setForceWASM?: (forceWASM: boolean) => void;
173
135
  }
174
136
  /**
175
- * The compare-mode state a {@link GeocoderPanels.compare} render-prop receives (the second parse itself stays
176
- * host-side).
137
+ * The compare-mode state a {@link GeocoderPanels.compare} render-prop receives.
138
+ * the second parse itself stays host-side.
177
139
  */
178
140
  export interface CompareContext {
179
141
  /**
180
142
  * The current primary parse result, or `null` before the first submit.
181
143
  */
182
144
  result: ParseResult | null;
183
- /**
184
- * Whether the compare toggle is on.
185
- */
186
145
  compareMode: boolean;
187
146
  /**
188
147
  * The version selected to compare against, or `null` when none is chosen.
@@ -190,38 +149,28 @@ export interface CompareContext {
190
149
  compareVersion: string | null;
191
150
  }
192
151
  /**
193
- * The state a {@link GeocoderPanels.result} render-prop receives, so a host can render its OWN result block (a
194
- * `<ResultPanel>` with its span-highlight / timing / hierarchy / precision detail) in place of the package's default
195
- * {@link ResultPanel}. Everything the default panel needs is passed through; the candidate-selection state stays owned
196
- * by the package (`useGeocode`).
152
+ * The state a {@link GeocoderPanels.result} render-prop receives, so a host can render its own result block.
153
+ *
154
+ * The candidate-selection state stays owned by the package (`useGeocode`).
197
155
  */
198
156
  export interface ResultContext {
199
- /**
200
- * The current parse+resolve result.
201
- */
202
157
  result: ParseResult;
203
158
  /**
204
159
  * The selected candidate (falls back to the first), enriched for the resolved-place detail.
205
160
  */
206
161
  selectedCandidate: ResolvedPlaceView | null;
207
- /**
208
- * The selected candidate index, for the picker's active state.
209
- */
210
162
  selectedCandidateIndex: number;
211
- /**
212
- * Fired when a candidate in the picker is chosen.
213
- */
214
163
  onSelectCandidate: (index: number) => void;
215
164
  }
216
165
  /**
217
- * Host-injected panels for {@link Geocoder}, the map analogue of `PipelinePanels`. Each is an already-rendered
218
- * `ReactNode` (or a thunk of the parse result / compare state) so the package needs neither the heavy host visualizers
219
- * (ModelVisualizer, VersionCompare, About, PermalinkButton) nor their data types. Every field is optional — the
220
- * fake-runtime Storybook stories pass none and still render the whole geocoder.
166
+ * Host-injected panels for {@link Geocoder}, the map analogue of `PipelinePanels`.
167
+ *
168
+ * Each is an already-rendered `ReactNode` or a thunk.
169
+ * Every field is optional.
221
170
  */
222
171
  export interface GeocoderPanels {
223
172
  /**
224
- * Rendered at the top of the control panel (e.g. the host's "About this geocoder").
173
+ * Rendered at the top of the control panel, such as the host's "About this geocoder".
225
174
  */
226
175
  header?: ReactNode;
227
176
  /**
@@ -229,13 +178,13 @@ export interface GeocoderPanels {
229
178
  */
230
179
  releaseInfo?: ReactNode;
231
180
  /**
232
- * Rendered at the bottom of the control panel (e.g. a guided tour).
181
+ * Rendered at the bottom of the control panel, such as a guided tour.
233
182
  */
234
183
  footer?: ReactNode;
235
184
  /**
236
- * A device-location / proximity-bias control, rendered between the query form and the autocomplete list (the "📍 Use
237
- * my location" row). Host-owned so the geolocation permission + the bias it feeds into the host's
238
- * {@link GeocoderRuntime.runParseWithBias} stay a host concern.
185
+ * A device-location / proximity-bias control, rendered between the query form and the autocomplete list.
186
+ *
187
+ * Host-owned because the geolocation permission feeds {@link GeocoderRuntime.runParseWithBias}.
239
188
  */
240
189
  bias?: ReactNode;
241
190
  /**
@@ -243,28 +192,27 @@ export interface GeocoderPanels {
243
192
  */
244
193
  extras?: (result: ParseResult) => ReactNode;
245
194
  /**
246
- * Rendered just above the result block (present or empty), for content that reads on THIS answer.
247
- *
248
- * A control that reads on the model rather than on an address belongs in {@link developerExtras}: above the result it
249
- * is the first thing a visitor meets, and on a phone it pushes the answer below the fold.
195
+ * Rendered just above the result block for content that reads on this answer. a
196
+ * control that reads on the model belongs in {@link developerExtras}.
250
197
  */
251
198
  aboveResult?: (context: {
252
199
  result: ParseResult | null;
253
200
  }) => ReactNode;
254
201
  /**
255
- * Host controls appended to the Developer sheet — the opt-in display toggles, whose state and the renderers they
256
- * drive both belong to the host.
202
+ * Host controls appended to the Developer sheet.
203
+ * The host owns their state and renderers.
257
204
  */
258
205
  developerExtras?: ReactNode;
259
206
  /**
260
- * Replace the package's default {@link ResultPanel} entirely. When provided, the host renders its own result block
261
- * (span highlight, timing, hierarchy, precision detail, calibrated confidences) from the {@link ResultContext}. Absent
262
- * → the built-in panel renders.
207
+ * Replaces the package's default {@link ResultPanel}.
208
+ *
209
+ * When absent, the built-in panel renders.
210
+ * When provided, the host renders from {@link ResultContext}.
263
211
  */
264
212
  result?: (context: ResultContext) => ReactNode;
265
213
  /**
266
- * Rendered in place of the resolved-place panel when nothing resolved (host's FailureDiagnostic). Ignored when
267
- * {@link result} is set.
214
+ * Rendered in place of the resolved-place panel when no place resolved. ignored
215
+ * when {@link result} is set.
268
216
  */
269
217
  failure?: (result: ParseResult) => ReactNode;
270
218
  /**
@@ -272,9 +220,8 @@ export interface GeocoderPanels {
272
220
  */
273
221
  compare?: (context: CompareContext) => ReactNode;
274
222
  /**
275
- * The model-visualizer / debug drawer, mounted beside the map (host's ModelVisualizer). A render-prop so the host can
276
- * trace the CURRENT result (its input) — the package passes the live parse result; the host decides on its own
277
- * dev-mode state and returns `null` when the drawer is closed.
223
+ * The model-visualizer / debug drawer mounted beside the map, as a render-prop
224
+ * receiving the live result and returning `null` when closed.
278
225
  */
279
226
  debugDrawer?: (context: {
280
227
  result: ParseResult | null;
@@ -284,11 +231,8 @@ export interface GeocoderPanels {
284
231
  */
285
232
  mapControls?: ReactNode;
286
233
  /**
287
- * A layer control, rendered in the chrome's top column under the example chips rather than in a MapLibre corner.
288
- *
289
- * A render-prop taking the live map handle, because a layer control reads `getStyle().layers` and writes
290
- * `setLayoutProperty` — it cannot be a static node. The handle is `null` until the map instantiates, so the host
291
- * returns `null` for that first frame rather than rendering an empty control.
234
+ * A layer control rendered in the chrome's top column, as a render-prop over the
235
+ * live map handle (null until the map instantiates).
292
236
  */
293
237
  layers?: (context: {
294
238
  map: MapInstance | null;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"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"}
package/out/map/types.js CHANGED
@@ -3,16 +3,7 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * Types for the geocoder map surface. Mirrors the pipeline boundary: the package owns the UI state
7
- * machine + the declarative map, while the host injects a {@link GeocoderRuntime} that owns ONNX / httpvfs
8
- * / R2 and the composed map style. {@link GeocoderRuntime} EXTENDS {@link PipelineRuntime} so the shared
9
- * `runParse` / `parseStageLabels` / `loading` contract is reused, and adds the map-specific surface
10
- * (style, overlays, initial center, viewport bias, backend/version selection). Phase 4 adds the
11
- * `resolveMapPlace` enricher, the {@link GeocoderPanels} injection bag, and the {@link CompareContext}.
12
- *
13
- * The map-spec types are imported type-only from `react-map-gl/maplibre`; nothing here loads maplibre at
14
- * runtime, so this module stays node-safe (its concrete-value CONSUMERS — `MapCanvas`, `Geocoder` —
15
- * are the ones behind the `@mailwoman/react/map` subpath).
6
+ * Types for the geocoder map surface. Its `react-map-gl/maplibre` imports are type-only, so the module stays node-safe.
16
7
  */
17
8
  export {};
18
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -4,9 +4,9 @@
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
6
  * `useCompareState` — the small headless state machine behind the demo's compare toggle
7
- * (`_app.tsx:142-143, 1238-1305`): whether compare mode is on, and which version to compare against.
8
- * Turning compare off clears the chosen version; selecting a compare version equal to the primary is
9
- * rejected (the picker filters it out, this guards the programmatic path). The SECOND parse itself is a
7
+ * (`_app.tsx:142-143, 1238-1305`): whether compare mode is on and which version to compare against.
8
+ * The off state clears the chosen version. A selected compare version equal to the primary is
9
+ * rejected (the picker filters it out, this guards the programmatic path). The second parse itself is a
10
10
  * host concern surfaced through `panels.compare` — this hook owns only the toggle + selection.
11
11
  */
12
12
  export interface UseCompareState {
@@ -19,7 +19,8 @@ export interface UseCompareState {
19
19
  */
20
20
  compareVersion: string | null;
21
21
  /**
22
- * Flip compare mode; turning it off clears the chosen version.
22
+ * Flip compare mode.
23
+ * The off state clears the chosen version.
23
24
  */
24
25
  setCompareMode: (compareMode: boolean) => void;
25
26
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useCompareState.d.ts","sourceRoot":"","sources":["../../lib/map/useCompareState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;OAEG;IACH,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C;;OAEG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD;;OAEG;IACH,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAiBjD"}
1
+ {"version":3,"file":"useCompareState.d.ts","sourceRoot":"","sources":["../../lib/map/useCompareState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;;;OAGG;IACH,cAAc,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9C;;OAEG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACnD;;OAEG;IACH,cAAc,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD;AAED,wBAAgB,eAAe,IAAI,eAAe,CAiBjD"}
@@ -4,9 +4,9 @@
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
6
  * `useCompareState` — the small headless state machine behind the demo's compare toggle
7
- * (`_app.tsx:142-143, 1238-1305`): whether compare mode is on, and which version to compare against.
8
- * Turning compare off clears the chosen version; selecting a compare version equal to the primary is
9
- * rejected (the picker filters it out, this guards the programmatic path). The SECOND parse itself is a
7
+ * (`_app.tsx:142-143, 1238-1305`): whether compare mode is on and which version to compare against.
8
+ * The off state clears the chosen version. A selected compare version equal to the primary is
9
+ * rejected (the picker filters it out, this guards the programmatic path). The second parse itself is a
10
10
  * host concern surfaced through `panels.compare` — this hook owns only the toggle + selection.
11
11
  */
12
12
  import { useCallback, useState } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"useCompareState.js","sourceRoot":"","sources":["../../lib/map/useCompareState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAyB7C,MAAM,UAAU,eAAe;IAC9B,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC1D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEzE,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QACpD,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;IACF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,cAAsB,EAAE,EAAE;QAC7D,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAA;AAC1F,CAAC"}
1
+ {"version":3,"file":"useCompareState.js","sourceRoot":"","sources":["../../lib/map/useCompareState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AA0B7C,MAAM,UAAU,eAAe;IAC9B,MAAM,CAAC,WAAW,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC1D,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAA;IAEzE,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,IAAa,EAAE,EAAE;QACpD,mBAAmB,CAAC,IAAI,CAAC,CAAA;QAEzB,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACxB,CAAC;IACF,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,cAAsB,EAAE,EAAE;QAC7D,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACrE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAA;AAC1F,CAAC"}
@@ -3,12 +3,12 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * `useGeocode` — the parse+resolve state machine for the geocoder map. It REUSES the pipeline's
6
+ * `useGeocode` — the parse+resolve state machine for the geocoder map. It reuses the pipeline's
7
7
  * `useParsePipeline` (text / busy / stage / result / candidate selection) and layers on the two map-only
8
8
  * concerns the geocoder adds over the base explorer:
9
9
  *
10
10
  * 1. Viewport bias — when the runtime exposes `runParseWithBias`, the current map center (read through
11
- * an injected `getBias`, itself reading the `MapRef`) rides along as a soft proximity prior. The
11
+ * an injected `getBias`, itself reading the `MapRef`) supplies a soft proximity prior. The
12
12
  * bias is injected by deriving a `runParse` that binds it, so `useParsePipeline` is reused verbatim.
13
13
  * 2. The map render place — the selected candidate, enriched by the host's `resolveMapPlace` into the
14
14
  * richer {@link ResolvedMapPlace} the declarative overlays consume (bbox / tier / polygon). Absent
@@ -30,7 +30,9 @@ export interface UseGeocodeOptions {
30
30
  */
31
31
  defaultText: string;
32
32
  /**
33
- * Read the current viewport bias (the map center) at submit time. Absent → no bias.
33
+ * Read the current viewport bias (the map center) at submit time.
34
+ *
35
+ * Absent → no bias.
34
36
  */
35
37
  getBias?: () => MapBias | null;
36
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useGeocode.d.ts","sourceRoot":"","sources":["../../lib/map/useGeocode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEpF,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,OAAO,EAAE,eAAe,CAAA;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IACnD;;OAEG;IACH,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACjC;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,UAAU,CAyB3F"}
1
+ {"version":3,"file":"useGeocode.d.ts","sourceRoot":"","sources":["../../lib/map/useGeocode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAEpF,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,OAAO,EAAE,eAAe,CAAA;IACxB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAA;CAC9B;AAED,MAAM,WAAW,UAAW,SAAQ,gBAAgB;IACnD;;OAEG;IACH,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACjC;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,iBAAiB,GAAG,UAAU,CAyB3F"}
@@ -3,12 +3,12 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * `useGeocode` — the parse+resolve state machine for the geocoder map. It REUSES the pipeline's
6
+ * `useGeocode` — the parse+resolve state machine for the geocoder map. It reuses the pipeline's
7
7
  * `useParsePipeline` (text / busy / stage / result / candidate selection) and layers on the two map-only
8
8
  * concerns the geocoder adds over the base explorer:
9
9
  *
10
10
  * 1. Viewport bias — when the runtime exposes `runParseWithBias`, the current map center (read through
11
- * an injected `getBias`, itself reading the `MapRef`) rides along as a soft proximity prior. The
11
+ * an injected `getBias`, itself reading the `MapRef`) supplies a soft proximity prior. The
12
12
  * bias is injected by deriving a `runParse` that binds it, so `useParsePipeline` is reused verbatim.
13
13
  * 2. The map render place — the selected candidate, enriched by the host's `resolveMapPlace` into the
14
14
  * richer {@link ResolvedMapPlace} the declarative overlays consume (bbox / tier / polygon). Absent
@@ -20,8 +20,8 @@
20
20
  import { useMemo } from "react";
21
21
  import { useParsePipeline } from "#pipeline/useParsePipeline";
22
22
  export function useGeocode({ runtime, defaultText, getBias }) {
23
- // Bind the viewport bias into a derived `runParse` so `useParsePipeline` is reused unchanged. When the runtime has no
24
- // bias-aware parse, pass it straight through.
23
+ // Bind the viewport bias into a derived `runParse` so `useParsePipeline` is reused unchanged.
24
+ // When the runtime has no bias-aware parse, pass it straight through.
25
25
  const geoRuntime = useMemo(() => {
26
26
  const withBias = runtime.runParseWithBias;
27
27
  if (!withBias)
@@ -1 +1 @@
1
- {"version":3,"file":"useGeocode.js","sourceRoot":"","sources":["../../lib/map/useGeocode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAK/B,OAAO,EAAE,gBAAgB,EAAyB,MAAM,4BAA4B,CAAA;AAwBpF,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAqB;IAC9E,sHAAsH;IACtH,8CAA8C;IAC9C,MAAM,UAAU,GAAG,OAAO,CAAkB,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAEzC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAA;QAE7B,OAAO;YACN,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC;SACvE,CAAA;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAA;IAEvE,MAAM,QAAQ,GAAG,OAAO,CAA0B,GAAG,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhE,OAAO,OAAO,CAAC,eAAe;YAC7B,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC;YACtE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAA;IAC9B,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1D,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAA;AACjC,CAAC"}
1
+ {"version":3,"file":"useGeocode.js","sourceRoot":"","sources":["../../lib/map/useGeocode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAK/B,OAAO,EAAE,gBAAgB,EAAyB,MAAM,4BAA4B,CAAA;AA0BpF,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAqB;IAC9E,8FAA8F;IAC9F,sEAAsE;IACtE,MAAM,UAAU,GAAG,OAAO,CAAkB,GAAG,EAAE;QAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAA;QAEzC,IAAI,CAAC,QAAQ;YAAE,OAAO,OAAO,CAAA;QAE7B,OAAO;YACN,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,CAAC;SACvE,CAAA;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAEtB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAA;IAEvE,MAAM,QAAQ,GAAG,OAAO,CAA0B,GAAG,EAAE;QACtD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhE,OAAO,OAAO,CAAC,eAAe;YAC7B,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC;YACtE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAA;IAC9B,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAE1D,OAAO,EAAE,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAA;AACjC,CAAC"}
@@ -3,26 +3,26 @@
3
3
  * @license AGPL-3.0
4
4
  * @author Teffen Ellis, et al.
5
5
  *
6
- * `useMapBearing` — the map's rotation as React state, for a compass that appears off north and fades back.
7
- *
8
- * The map is an external store, so it is read through `useSyncExternalStore` rather than mirrored into state by an
9
- * effect: the bearing is a number, which makes a stable snapshot, and React tears nothing during a concurrent
10
- * render.
11
- *
12
- * It listens on `rotate` rather than `rotateend`, because the needle has to track the gesture rather than snap once
13
- * the gesture is over. `move` is subscribed too: a `flyTo` or an `easeTo` carrying a bearing rotates the map without
14
- * firing a rotate event, and a compass that misses those stays pointing north over a turned map.
6
+ * The map's rotation as React state, read through `useSyncExternalStore` and subscribed to `move` as well as `rotate`, since a `flyTo` or `easeTo` carrying a direction fires no rotate event.
15
7
  */
16
8
  import type { MapInstance } from "react-map-gl/maplibre";
9
+ /**
10
+ * The map's bearing and a callback that returns the map to north.
11
+ */
17
12
  export interface UseMapBearing {
18
13
  /**
19
- * Degrees off north, as MapLibre reports it. Zero while there is no map.
14
+ * Degrees off north, as MapLibre reports it.
15
+ * Zero while there is no map.
20
16
  */
21
17
  bearing: number;
22
18
  /**
23
- * Rotate the map back to north. A no-op while there is no map.
19
+ * Rotate the map back to north.
20
+ * A no-op while there is no map.
24
21
  */
25
22
  resetNorth: () => void;
26
23
  }
24
+ /**
25
+ * Reads the live map bearing and exposes `resetNorth`.
26
+ */
27
27
  export declare function useMapBearing(map: MapInstance | null): UseMapBearing;
28
28
  //# sourceMappingURL=useMapBearing.d.ts.map