@mailwoman/react 9.4.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/About.tsx +87 -71
- package/lib/common/index.ts +22 -0
- package/lib/index.ts +4 -99
- package/lib/map/BackendControl.tsx +7 -3
- package/lib/map/CompareToggle.tsx +3 -2
- package/lib/map/Geocoder.tsx +48 -28
- package/lib/map/GeocoderControls.tsx +258 -99
- package/lib/map/MapChipRow.tsx +77 -0
- package/lib/map/MapCompass.tsx +77 -0
- package/lib/map/MapControlStack.tsx +98 -0
- package/lib/map/MapFooter.tsx +115 -0
- package/lib/map/MapProgressBar.tsx +58 -0
- package/lib/map/MapSearchBar.tsx +68 -0
- package/lib/map/MapSheet.tsx +62 -0
- package/lib/map/index.ts +19 -0
- package/lib/map/types.ts +18 -4
- package/lib/map/useMapBearing.ts +56 -0
- package/lib/map/useMapLabelPick.ts +123 -0
- package/lib/pipeline/index.ts +36 -0
- package/lib/pipeline/useParsePipeline.ts +29 -18
- package/lib/poi/index.ts +39 -0
- package/lib/runtime/index.ts +16 -0
- package/out/common/About.d.ts +13 -4
- package/out/common/About.d.ts.map +1 -1
- package/out/common/About.js +5 -2
- package/out/common/About.js.map +1 -1
- package/out/common/index.d.ts +22 -0
- package/out/common/index.d.ts.map +1 -0
- package/out/common/index.js +15 -0
- package/out/common/index.js.map +1 -0
- package/out/index.d.ts +4 -59
- package/out/index.d.ts.map +1 -1
- package/out/index.js +4 -36
- package/out/index.js.map +1 -1
- package/out/map/BackendControl.d.ts.map +1 -1
- package/out/map/BackendControl.js +1 -1
- package/out/map/BackendControl.js.map +1 -1
- package/out/map/CompareToggle.d.ts.map +1 -1
- package/out/map/CompareToggle.js +1 -1
- package/out/map/CompareToggle.js.map +1 -1
- package/out/map/Geocoder.d.ts +11 -1
- package/out/map/Geocoder.d.ts.map +1 -1
- package/out/map/Geocoder.js +26 -26
- package/out/map/Geocoder.js.map +1 -1
- package/out/map/GeocoderControls.d.ts +29 -11
- package/out/map/GeocoderControls.d.ts.map +1 -1
- package/out/map/GeocoderControls.js +65 -16
- package/out/map/GeocoderControls.js.map +1 -1
- package/out/map/MapChipRow.d.ts +47 -0
- package/out/map/MapChipRow.d.ts.map +1 -0
- package/out/map/MapChipRow.js +12 -0
- package/out/map/MapChipRow.js.map +1 -0
- package/out/map/MapCompass.d.ts +42 -0
- package/out/map/MapCompass.d.ts.map +1 -0
- package/out/map/MapCompass.js +11 -0
- package/out/map/MapCompass.js.map +1 -0
- package/out/map/MapControlStack.d.ts +57 -0
- package/out/map/MapControlStack.d.ts.map +1 -0
- package/out/map/MapControlStack.js +15 -0
- package/out/map/MapControlStack.js.map +1 -0
- package/out/map/MapFooter.d.ts +40 -0
- package/out/map/MapFooter.d.ts.map +1 -0
- package/out/map/MapFooter.js +51 -0
- package/out/map/MapFooter.js.map +1 -0
- package/out/map/MapProgressBar.d.ts +34 -0
- package/out/map/MapProgressBar.d.ts.map +1 -0
- package/out/map/MapProgressBar.js +8 -0
- package/out/map/MapProgressBar.js.map +1 -0
- package/out/map/MapSearchBar.d.ts +49 -0
- package/out/map/MapSearchBar.d.ts.map +1 -0
- package/out/map/MapSearchBar.js +6 -0
- package/out/map/MapSearchBar.js.map +1 -0
- package/out/map/MapSheet.d.ts +32 -0
- package/out/map/MapSheet.d.ts.map +1 -0
- package/out/map/MapSheet.js +33 -0
- package/out/map/MapSheet.js.map +1 -0
- package/out/map/OverlayLayers.js +1 -1
- package/out/map/ResolvedPlaceLayers.js +1 -1
- package/out/map/ResultPanel.js +1 -1
- package/out/map/fake-runtime.js.map +1 -1
- package/out/map/index.d.ts +17 -0
- package/out/map/index.d.ts.map +1 -1
- package/out/map/index.js +10 -0
- package/out/map/index.js.map +1 -1
- package/out/map/map-debug.d.ts.map +1 -1
- package/out/map/map-debug.js.map +1 -1
- package/out/map/types.d.ts +20 -4
- package/out/map/types.d.ts.map +1 -1
- package/out/map/useMapBearing.d.ts +28 -0
- package/out/map/useMapBearing.d.ts.map +1 -0
- package/out/map/useMapBearing.js +35 -0
- package/out/map/useMapBearing.js.map +1 -0
- package/out/map/useMapLabelPick.d.ts +23 -0
- package/out/map/useMapLabelPick.d.ts.map +1 -0
- package/out/map/useMapLabelPick.js +104 -0
- package/out/map/useMapLabelPick.js.map +1 -0
- package/out/pipeline/CandidatePicker.js +1 -1
- package/out/pipeline/PipelineExplorer.js +1 -1
- package/out/pipeline/QueryForm.js +1 -1
- package/out/pipeline/ResolvedPlace.js +1 -1
- package/out/pipeline/TimingPanel.js +1 -1
- package/out/pipeline/index.d.ts +33 -0
- package/out/pipeline/index.d.ts.map +1 -0
- package/out/pipeline/index.js +21 -0
- package/out/pipeline/index.js.map +1 -0
- package/out/pipeline/useParsePipeline.d.ts +5 -2
- package/out/pipeline/useParsePipeline.d.ts.map +1 -1
- package/out/pipeline/useParsePipeline.js +6 -2
- package/out/pipeline/useParsePipeline.js.map +1 -1
- package/out/poi/LiveResultsBlock.js +1 -1
- package/out/poi/POIExplorer.js +1 -1
- package/out/poi/SubjectPanel.js +1 -1
- package/out/poi/index.d.ts +23 -0
- package/out/poi/index.d.ts.map +1 -0
- package/out/poi/index.js +15 -0
- package/out/poi/index.js.map +1 -0
- package/out/poi/runtime.d.ts.map +1 -1
- package/out/runtime/index.d.ts +9 -0
- package/out/runtime/index.d.ts.map +1 -0
- package/out/runtime/index.js +8 -0
- package/out/runtime/index.js.map +1 -0
- package/package.json +87 -6
- package/styleframe.config.ts +9 -1
- package/styles.css +948 -26
- package/tokens/index.css +2 -1
- package/tokens/tokens.json +7 -0
- package/tokens/tokens.resolver.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapSheet.d.ts","sourceRoot":"","sources":["../../lib/map/MapSheet.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAA;AAIjD,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,QAAQ,EAAE,SAAS,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,aAAa,GAAG,SAAS,CA0B1F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* @copyright Sister Software
|
|
4
|
+
* @license AGPL-3.0
|
|
5
|
+
* @author Teffen Ellis, et al.
|
|
6
|
+
*
|
|
7
|
+
* `<MapSheet>` — a side panel over the map: a title, a close button, and content.
|
|
8
|
+
*
|
|
9
|
+
* The close button is not optional. On a wide screen the control that opened the sheet stays visible beside it and
|
|
10
|
+
* could close it again, but on a phone the sheet is the whole panel and covers that control — so a sheet without its
|
|
11
|
+
* own close is a sheet a phone cannot dismiss. One component carries it so the four sheets in these apps cannot
|
|
12
|
+
* disagree about that.
|
|
13
|
+
*
|
|
14
|
+
* Escape closes it too, because a panel over the whole screen is a modal in every way that matters to someone
|
|
15
|
+
* holding a keyboard.
|
|
16
|
+
*
|
|
17
|
+
* NODE-SAFE: pure React, no maplibre.
|
|
18
|
+
*/
|
|
19
|
+
import { useEffect } from "react";
|
|
20
|
+
import { cx } from "#common/cx";
|
|
21
|
+
export function MapSheet({ title, onClose, children, className }) {
|
|
22
|
+
useEffect(() => {
|
|
23
|
+
const onKeyDown = (event) => {
|
|
24
|
+
if (event.key === "Escape") {
|
|
25
|
+
onClose();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
document.addEventListener("keydown", onKeyDown);
|
|
29
|
+
return () => document.removeEventListener("keydown", onKeyDown);
|
|
30
|
+
}, [onClose]);
|
|
31
|
+
return (_jsxs("aside", { className: cx("mw-map-sheet mw-map-sheet--side", className), "aria-label": title, children: [_jsxs("div", { className: "mw-map-sheet__header", children: [_jsx("h2", { className: "mw-map-sheet__title", children: title }), _jsx("button", { type: "button", className: "mw-map-sheet__close", "aria-label": `Close ${title}`, onClick: onClose, children: _jsx("span", { "aria-hidden": "true", children: "\u00D7" }) })] }), _jsx("div", { className: "mw-map-sheet__body", children: children })] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=MapSheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapSheet.js","sourceRoot":"","sources":["../../lib/map/MapSheet.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAkB,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjD,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAA;AAe/B,MAAM,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAiB;IAC9E,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,SAAS,GAAG,CAAC,KAAoB,EAAE,EAAE;YAC1C,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,EAAE,CAAA;YACV,CAAC;QACF,CAAC,CAAA;QAED,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE/C,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAChE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;IAEb,OAAO,CACN,iBAAO,SAAS,EAAE,EAAE,CAAC,iCAAiC,EAAE,SAAS,CAAC,gBAAc,KAAK,aACpF,eAAK,SAAS,EAAC,sBAAsB,aACpC,aAAI,SAAS,EAAC,qBAAqB,YAAE,KAAK,GAAM,EAEhD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,qBAAqB,gBAAa,SAAS,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,YACnG,8BAAkB,MAAM,uBAAS,GACzB,IACJ,EAEN,cAAK,SAAS,EAAC,oBAAoB,YAAE,QAAQ,GAAO,IAC7C,CACR,CAAA;AACF,CAAC"}
|
package/out/map/OverlayLayers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { PlaceMarker } from "./PlaceMarker.js";
|
|
3
3
|
import { ResultCamera } from "./ResultCamera.js";
|
|
4
4
|
import { ResultOverlay } from "./ResultOverlay.js";
|
package/out/map/ResultPanel.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { buildParsePayload } from "#pipeline/copy";
|
|
3
3
|
import { CopyButton } from "../common/CopyButton.js";
|
|
4
4
|
import { KindBadge } from "../common/KindBadge.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fake-runtime.js","sourceRoot":"","sources":["../../lib/map/fake-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC7C,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC;CAC5F,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC7C,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;IAC5C,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE;IAC/C,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE;CAC1C,CAAA;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,
|
|
1
|
+
{"version":3,"file":"fake-runtime.js","sourceRoot":"","sources":["../../lib/map/fake-runtime.ts"],"names":[],"mappings":"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"}
|
package/out/map/index.d.ts
CHANGED
|
@@ -13,6 +13,23 @@
|
|
|
13
13
|
*/
|
|
14
14
|
export { MapCanvas } from "./MapCanvas.tsx";
|
|
15
15
|
export type { MapCanvasExtraProps, MapCanvasProps, MapCanvasStyle } from "./MapCanvas.tsx";
|
|
16
|
+
export { MapChipRow } from "./MapChipRow.tsx";
|
|
17
|
+
export type { MapChip, MapChipRowProps } from "./MapChipRow.tsx";
|
|
18
|
+
export { MapCompass } from "./MapCompass.tsx";
|
|
19
|
+
export type { MapCompassProps } from "./MapCompass.tsx";
|
|
20
|
+
export { useMapBearing } from "./useMapBearing.ts";
|
|
21
|
+
export type { UseMapBearing } from "./useMapBearing.ts";
|
|
22
|
+
export { useMapLabelPick } from "./useMapLabelPick.ts";
|
|
23
|
+
export { MapControlButton, MapControlGroup, MapControlStack } from "./MapControlStack.tsx";
|
|
24
|
+
export type { MapControlButtonProps, MapControlGroupProps, MapControlStackProps } from "./MapControlStack.tsx";
|
|
25
|
+
export { MapFooter } from "./MapFooter.tsx";
|
|
26
|
+
export type { MapFooterProps } from "./MapFooter.tsx";
|
|
27
|
+
export { MapProgressBar } from "./MapProgressBar.tsx";
|
|
28
|
+
export type { MapProgressBarProps } from "./MapProgressBar.tsx";
|
|
29
|
+
export { MapSheet } from "./MapSheet.tsx";
|
|
30
|
+
export type { MapSheetProps } from "./MapSheet.tsx";
|
|
31
|
+
export { MapSearchBar } from "./MapSearchBar.tsx";
|
|
32
|
+
export type { MapSearchBarProps } from "./MapSearchBar.tsx";
|
|
16
33
|
export type { CompareContext, GeocoderPanels, GeocoderRuntime, InferenceBackend, LngLatTuple, MapBias, OverlaySpec, ResultContext, Suggestion, VersionOption, } from "#map/types";
|
|
17
34
|
export { approxCircleGeometry, bboxToBounds, geomBounds, radiusCircleGeometry } from "#map/geometry";
|
|
18
35
|
export type { BoundsTuple, PlaceBBox, PlaceGeometry } from "#map/geometry";
|
package/out/map/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/map/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,mBAAmB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/map/index.ts"],"names":[],"mappings":"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"}
|
package/out/map/index.js
CHANGED
|
@@ -12,6 +12,16 @@
|
|
|
12
12
|
* `maplibre-gl/dist/maplibre-gl.css` + `@mailwoman/react/styles.css` itself.
|
|
13
13
|
*/
|
|
14
14
|
export { MapCanvas } from "./MapCanvas.js";
|
|
15
|
+
// ── Map chrome (node-safe presentation; the host supplies the input and reads its own map) ──
|
|
16
|
+
export { MapChipRow } from "./MapChipRow.js";
|
|
17
|
+
export { MapCompass } from "./MapCompass.js";
|
|
18
|
+
export { useMapBearing } from "./useMapBearing.js";
|
|
19
|
+
export { useMapLabelPick } from "./useMapLabelPick.js";
|
|
20
|
+
export { MapControlButton, MapControlGroup, MapControlStack } from "./MapControlStack.js";
|
|
21
|
+
export { MapFooter } from "./MapFooter.js";
|
|
22
|
+
export { MapProgressBar } from "./MapProgressBar.js";
|
|
23
|
+
export { MapSheet } from "./MapSheet.js";
|
|
24
|
+
export { MapSearchBar } from "./MapSearchBar.js";
|
|
15
25
|
// ── Pure geometry + render spec (node-safe; no react-map-gl at runtime) ──────
|
|
16
26
|
export { approxCircleGeometry, bboxToBounds, geomBounds, radiusCircleGeometry } from "#map/geometry";
|
|
17
27
|
export { cameraToViewState, computeMapPlaceRenderSpec } from "#map/place-render";
|
package/out/map/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/map/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/map/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAG3C,+FAA+F;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAkB,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAElD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAA;AAE1F,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AAErD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AAgBjD,gFAAgF;AAChF,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEpG,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAA;AAEhF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,gFAAgF;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA2B,CAAA;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAoB,CAAA;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAGnD,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAwB,CAAA;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAQhE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-debug.d.ts","sourceRoot":"","sources":["../../lib/map/map-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAElE,MAAM,WAAW,uBAAuB;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,qBAAa,gBAAiB,YAAW,QAAQ;;IAChD,SAAgB,SAAS,EAAE,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"map-debug.d.ts","sourceRoot":"","sources":["../../lib/map/map-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAElE,MAAM,WAAW,uBAAuB;IACvC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAA;CAC1B;AAED,qBAAa,gBAAiB,YAAW,QAAQ;;IAChD,SAAgB,SAAS,EAAE,WAAW,CAAA;IAGtC,YAAY,EAAE,SAAS,EAAE,QAAwB,EAAE,GAAE,uBAA4B,EAQhF;IAEM,KAAK,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAE3C;IAEM,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAEvC;IAEM,kBAAkB,IAAI,eAAe,CAE3C;CACD"}
|
package/out/map/map-debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map-debug.js","sourceRoot":"","sources":["../../lib/map/map-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,OAAO,gBAAgB;IACZ,SAAS,CAAa;IAC7B,SAAS,CAAiB;IAEnC,YAAY,EAAE,SAAS,EAAE,QAAQ,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"map-debug.js","sourceRoot":"","sources":["../../lib/map/map-debug.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgBH,MAAM,OAAO,gBAAgB;IACZ,SAAS,CAAa;IAC7B,SAAS,CAAiB;IAEnC,YAAY,EAAE,SAAS,EAAE,QAAQ,GAAG,aAAa,EAAE,GAA4B,EAAE;QAChF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAE9C,IAAI,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAEM,KAAK,CAAC,IAAiB;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;IAEM,QAAQ,CAAC,IAAiB;QAChC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAA;IACxB,CAAC;IAEM,kBAAkB;QACxB,OAAO,IAAI,CAAC,SAAS,CAAA;IACtB,CAAC;CACD"}
|
package/out/map/types.d.ts
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import type { ParseResult, ResolvedPlaceView } from "@mailwoman/core/pipeline/client-result";
|
|
18
18
|
import type { ReactNode } from "react";
|
|
19
|
-
import type { LayerSpecification, SourceSpecification } from "react-map-gl/maplibre";
|
|
19
|
+
import type { LayerSpecification, MapInstance, SourceSpecification } from "react-map-gl/maplibre";
|
|
20
20
|
import type { LngLat, ResolvedMapPlace } from "#map/place-render";
|
|
21
21
|
import type { PipelineRuntime } from "#pipeline/types";
|
|
22
22
|
import type { MapCanvasStyle } from "./MapCanvas.tsx";
|
|
@@ -243,13 +243,19 @@ export interface GeocoderPanels {
|
|
|
243
243
|
*/
|
|
244
244
|
extras?: (result: ParseResult) => ReactNode;
|
|
245
245
|
/**
|
|
246
|
-
* Rendered just above the result block (present or empty)
|
|
247
|
-
*
|
|
248
|
-
*
|
|
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.
|
|
249
250
|
*/
|
|
250
251
|
aboveResult?: (context: {
|
|
251
252
|
result: ParseResult | null;
|
|
252
253
|
}) => ReactNode;
|
|
254
|
+
/**
|
|
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.
|
|
257
|
+
*/
|
|
258
|
+
developerExtras?: ReactNode;
|
|
253
259
|
/**
|
|
254
260
|
* Replace the package's default {@link ResultPanel} entirely. When provided, the host renders its own result block
|
|
255
261
|
* (span highlight, timing, hierarchy, precision detail, calibrated confidences) from the {@link ResultContext}. Absent
|
|
@@ -277,6 +283,16 @@ export interface GeocoderPanels {
|
|
|
277
283
|
* Extra map controls mounted as `<MapCanvas>` children (host's DebugControl / LayerToggle via `useControl`).
|
|
278
284
|
*/
|
|
279
285
|
mapControls?: ReactNode;
|
|
286
|
+
/**
|
|
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.
|
|
292
|
+
*/
|
|
293
|
+
layers?: (context: {
|
|
294
|
+
map: MapInstance | null;
|
|
295
|
+
}) => ReactNode;
|
|
280
296
|
/**
|
|
281
297
|
* A permalink control for the current address (host's PermalinkButton).
|
|
282
298
|
*/
|
package/out/map/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAC5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../lib/map/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
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.
|
|
15
|
+
*/
|
|
16
|
+
import type { MapInstance } from "react-map-gl/maplibre";
|
|
17
|
+
export interface UseMapBearing {
|
|
18
|
+
/**
|
|
19
|
+
* Degrees off north, as MapLibre reports it. Zero while there is no map.
|
|
20
|
+
*/
|
|
21
|
+
bearing: number;
|
|
22
|
+
/**
|
|
23
|
+
* Rotate the map back to north. A no-op while there is no map.
|
|
24
|
+
*/
|
|
25
|
+
resetNorth: () => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function useMapBearing(map: MapInstance | null): UseMapBearing;
|
|
28
|
+
//# sourceMappingURL=useMapBearing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMapBearing.d.ts","sourceRoot":"","sources":["../../lib/map/useMapBearing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,MAAM,WAAW,aAAa;IAC7B;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAA;CACtB;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,GAAG,aAAa,CAyBpE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
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.
|
|
15
|
+
*/
|
|
16
|
+
import { useCallback, useSyncExternalStore } from "react";
|
|
17
|
+
export function useMapBearing(map) {
|
|
18
|
+
const subscribe = useCallback((onChange) => {
|
|
19
|
+
if (!map)
|
|
20
|
+
return () => undefined;
|
|
21
|
+
map.on("rotate", onChange);
|
|
22
|
+
map.on("move", onChange);
|
|
23
|
+
return () => {
|
|
24
|
+
map.off("rotate", onChange);
|
|
25
|
+
map.off("move", onChange);
|
|
26
|
+
};
|
|
27
|
+
}, [map]);
|
|
28
|
+
// The server snapshot is the same reading: there is no map during a server render, and north is what a compass
|
|
29
|
+
// shows when it has nothing to report.
|
|
30
|
+
const readBearing = useCallback(() => map?.getBearing() ?? 0, [map]);
|
|
31
|
+
const bearing = useSyncExternalStore(subscribe, readBearing, () => 0);
|
|
32
|
+
const resetNorth = useCallback(() => map?.easeTo({ bearing: 0, pitch: 0 }), [map]);
|
|
33
|
+
return { bearing, resetNorth };
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=useMapBearing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMapBearing.js","sourceRoot":"","sources":["../../lib/map/useMapBearing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAczD,MAAM,UAAU,aAAa,CAAC,GAAuB;IACpD,MAAM,SAAS,GAAG,WAAW,CAC5B,CAAC,QAAoB,EAAE,EAAE;QACxB,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAA;QAEhC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC1B,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAExB,OAAO,GAAG,EAAE;YACX,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YAC3B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC1B,CAAC,CAAA;IACF,CAAC,EACD,CAAC,GAAG,CAAC,CACL,CAAA;IAED,+GAA+G;IAC/G,uCAAuC;IACvC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAEpE,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;IAErE,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;IAElF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `useMapLabelPick` — clicking a place label on the map searches for it, the way the reference map apps behave.
|
|
7
|
+
*
|
|
8
|
+
* A label on a map looks like a link, so a visitor clicks it. Without this the click reaches the map's pan handler
|
|
9
|
+
* and nothing happens, which reads as the label being decoration.
|
|
10
|
+
*
|
|
11
|
+
* It reads the label's OWN name from the rendered feature rather than reverse-geocoding the click point: the name
|
|
12
|
+
* is what the visitor pointed at, and a lookup by coordinate answers whatever is nearest instead, which on a dense
|
|
13
|
+
* basemap is regularly not the thing under the cursor.
|
|
14
|
+
*
|
|
15
|
+
* THE QUERY IS SCOPED, AND THE HOVER QUERY IS THROTTLED. `queryRenderedFeatures` with no `layers` walks the whole
|
|
16
|
+
* style: measured at 64.3 ms per call returning 4,819 features over the 79-layer basemap at zoom 14 in Manhattan,
|
|
17
|
+
* against 4.9 ms and 44 features scoped to that style's 11 label layers. At one call per pointer move the unscoped
|
|
18
|
+
* form is the map's whole frame budget, so the layer list is resolved once per style and the hover query runs at
|
|
19
|
+
* most once per animation frame. The click query is not throttled — there is one of those per click.
|
|
20
|
+
*/
|
|
21
|
+
import type { MapInstance } from "react-map-gl/maplibre";
|
|
22
|
+
export declare function useMapLabelPick(map: MapInstance | null, onPick: (name: string) => void): void;
|
|
23
|
+
//# sourceMappingURL=useMapLabelPick.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMapLabelPick.d.ts","sourceRoot":"","sources":["../../lib/map/useMapLabelPick.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAsB,MAAM,uBAAuB,CAAA;AA2C5E,wBAAgB,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAyD7F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*
|
|
6
|
+
* `useMapLabelPick` — clicking a place label on the map searches for it, the way the reference map apps behave.
|
|
7
|
+
*
|
|
8
|
+
* A label on a map looks like a link, so a visitor clicks it. Without this the click reaches the map's pan handler
|
|
9
|
+
* and nothing happens, which reads as the label being decoration.
|
|
10
|
+
*
|
|
11
|
+
* It reads the label's OWN name from the rendered feature rather than reverse-geocoding the click point: the name
|
|
12
|
+
* is what the visitor pointed at, and a lookup by coordinate answers whatever is nearest instead, which on a dense
|
|
13
|
+
* basemap is regularly not the thing under the cursor.
|
|
14
|
+
*
|
|
15
|
+
* THE QUERY IS SCOPED, AND THE HOVER QUERY IS THROTTLED. `queryRenderedFeatures` with no `layers` walks the whole
|
|
16
|
+
* style: measured at 64.3 ms per call returning 4,819 features over the 79-layer basemap at zoom 14 in Manhattan,
|
|
17
|
+
* against 4.9 ms and 44 features scoped to that style's 11 label layers. At one call per pointer move the unscoped
|
|
18
|
+
* form is the map's whole frame budget, so the layer list is resolved once per style and the hover query runs at
|
|
19
|
+
* most once per animation frame. The click query is not throttled — there is one of those per click.
|
|
20
|
+
*/
|
|
21
|
+
import { useEffect, useEffectEvent } from "react";
|
|
22
|
+
/**
|
|
23
|
+
* The layers whose features carry a place name. Protomaps names its label layers `<theme>_label` and its settlement
|
|
24
|
+
* layers `places_*`; anything else in the style is geometry, not a label a visitor can read and point at.
|
|
25
|
+
*/
|
|
26
|
+
const LABEL_LAYER = /_label|^places_/;
|
|
27
|
+
/**
|
|
28
|
+
* Properties a label carries its text under, in the order they are trusted. `name` is protomaps' own; the localized
|
|
29
|
+
* variants appear on styles built for a specific script.
|
|
30
|
+
*/
|
|
31
|
+
const NAME_KEYS = ["name", "name:en", "name_en"];
|
|
32
|
+
/**
|
|
33
|
+
* The style's label layers, by id.
|
|
34
|
+
*
|
|
35
|
+
* A style with none answers an EMPTY ARRAY, and the caller must treat that as "no labels to pick" rather than passing
|
|
36
|
+
* it to `queryRenderedFeatures` — an empty `layers` option is not the same as an absent one there, and the difference
|
|
37
|
+
* between "this style has no labels" and "query everything" is the 64 ms this hook exists to avoid.
|
|
38
|
+
*/
|
|
39
|
+
function labelLayerIDs(map) {
|
|
40
|
+
const layers = map.getStyle()?.layers ?? [];
|
|
41
|
+
return layers.map((layer) => layer.id).filter((id) => LABEL_LAYER.test(id));
|
|
42
|
+
}
|
|
43
|
+
function labelNameAt(map, point, layers) {
|
|
44
|
+
if (!layers.length)
|
|
45
|
+
return null;
|
|
46
|
+
// `queryRenderedFeatures` answers in paint order with the topmost first, which is the label drawn over the others
|
|
47
|
+
// and therefore the one a click landed on.
|
|
48
|
+
for (const feature of map.queryRenderedFeatures(point, { layers })) {
|
|
49
|
+
for (const key of NAME_KEYS) {
|
|
50
|
+
const value = feature.properties?.[key];
|
|
51
|
+
if (typeof value === "string" && value.trim())
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
export function useMapLabelPick(map, onPick) {
|
|
58
|
+
// The subscription depends on the MAP alone. `useGeocode` returns a fresh object every render, so a callback built
|
|
59
|
+
// from it is new every render too — with `onPick` in the dependency list these map listeners were torn down and
|
|
60
|
+
// re-added on every keystroke in the search field. `useEffectEvent` is the shape for exactly this: an event
|
|
61
|
+
// handler that always sees the latest props without being a reactive dependency.
|
|
62
|
+
const pick = useEffectEvent((name) => onPick(name));
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (!map)
|
|
65
|
+
return;
|
|
66
|
+
// Recomputed when the style swaps (a theme change, a version switch) and not once per pointer move.
|
|
67
|
+
let layers = labelLayerIDs(map);
|
|
68
|
+
const readLayers = () => {
|
|
69
|
+
layers = labelLayerIDs(map);
|
|
70
|
+
};
|
|
71
|
+
const onClick = (event) => {
|
|
72
|
+
const name = labelNameAt(map, event.point, layers);
|
|
73
|
+
if (name) {
|
|
74
|
+
pick(name);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
let frame = 0;
|
|
78
|
+
const onMove = (event) => {
|
|
79
|
+
if (frame)
|
|
80
|
+
return;
|
|
81
|
+
frame = requestAnimationFrame(() => {
|
|
82
|
+
frame = 0;
|
|
83
|
+
const canvas = map.getCanvas();
|
|
84
|
+
// The drag cursor belongs to the pan gesture; overriding it mid-drag would fight the map for the pointer.
|
|
85
|
+
if (canvas.style.cursor === "grabbing")
|
|
86
|
+
return;
|
|
87
|
+
canvas.style.cursor = labelNameAt(map, event.point, layers) ? "pointer" : "";
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
map.on("styledata", readLayers);
|
|
91
|
+
map.on("click", onClick);
|
|
92
|
+
map.on("mousemove", onMove);
|
|
93
|
+
return () => {
|
|
94
|
+
if (frame) {
|
|
95
|
+
cancelAnimationFrame(frame);
|
|
96
|
+
}
|
|
97
|
+
map.off("styledata", readLayers);
|
|
98
|
+
map.off("click", onClick);
|
|
99
|
+
map.off("mousemove", onMove);
|
|
100
|
+
map.getCanvas().style.cursor = "";
|
|
101
|
+
};
|
|
102
|
+
}, [map]);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=useMapLabelPick.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMapLabelPick.js","sourceRoot":"","sources":["../../lib/map/useMapLabelPick.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cx } from "#common/cx";
|
|
3
3
|
export function CandidatePicker({ candidates, selectedIndex, onSelect }) {
|
|
4
4
|
return (_jsxs("div", { className: "mw-candidates", children: [_jsxs("h2", { children: ["Other candidates (", candidates.length - 1, ")"] }), _jsx("ol", { className: "mw-candidates__list", children: candidates.map((candidate, i) => (_jsx("li", { children: _jsxs("button", { type: "button", className: cx("mw-candidates__btn", { "mw-candidates__btn--active": i === selectedIndex }), onClick: () => onSelect(i), title: `${candidate.placetype} • WOF ${candidate.id} • score ${candidate.score.toFixed(3)}`, children: [_jsxs("span", { className: "mw-candidates__rank", children: ["#", i + 1] }), _jsx("span", { className: "mw-candidates__name", children: candidate.name }), _jsxs("span", { className: "mw-candidates__meta", children: [candidate.placetype, " \u00B7 ", candidate.score.toFixed(2)] })] }) }, `${candidate.id}-${i}`))) })] }));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { buildParsePayload } from "#pipeline/copy";
|
|
3
3
|
import { PIPELINE_DEFAULT_ADDRESS, PIPELINE_PRESETS } from "#pipeline/presets";
|
|
4
4
|
import { useParsePipeline } from "#pipeline/useParsePipeline";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { LoadingIndicator } from "../common/LoadingIndicator.js";
|
|
3
3
|
export function QueryForm({ value, onChange, onSubmit, disabled, busy, placeholder, onKeyDown, inputProps, }) {
|
|
4
4
|
return (_jsxs("form", { className: "mw-field", onSubmit: (e) => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Fragment } from "react";
|
|
3
3
|
export function ResolvedPlace({ place, dualRoles }) {
|
|
4
4
|
return (_jsxs("div", { className: "mw-resolved", children: [_jsx("h2", { children: "Resolved place" }), _jsxs("dl", { children: [_jsx("dt", { children: "name" }), _jsx("dd", { children: place.name }), _jsx("dt", { children: "placetype" }), _jsx("dd", { children: place.placetype }), place.tier ? (_jsxs(_Fragment, { children: [_jsx("dt", { children: "precision" }), _jsx("dd", { children: place.tier === "address_point"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Pipeline explorer components, visualizers, hooks, and contracts.
|
|
6
|
+
*/
|
|
7
|
+
export { About } from "../common/About.tsx";
|
|
8
|
+
export { FailureDiagnostic } from "./FailureDiagnostic.tsx";
|
|
9
|
+
export type { FailureDiagnosticProps } from "./FailureDiagnostic.tsx";
|
|
10
|
+
export { SpanHighlight } from "./SpanHighlight.tsx";
|
|
11
|
+
export type { SpanHighlightProps } from "./SpanHighlight.tsx";
|
|
12
|
+
export { TimingPanel } from "./TimingPanel.tsx";
|
|
13
|
+
export type { TimingPanelProps } from "./TimingPanel.tsx";
|
|
14
|
+
export { TreeView } from "./TreeView.tsx";
|
|
15
|
+
export type { TreeViewProps } from "./TreeView.tsx";
|
|
16
|
+
export { CandidatePicker } from "./CandidatePicker.tsx";
|
|
17
|
+
export type { CandidatePickerProps } from "./CandidatePicker.tsx";
|
|
18
|
+
export { ComponentTable } from "./ComponentTable.tsx";
|
|
19
|
+
export type { ComponentTableProps } from "./ComponentTable.tsx";
|
|
20
|
+
export { ConfidenceCell } from "./ConfidenceCell.tsx";
|
|
21
|
+
export type { ConfidenceCellProps } from "./ConfidenceCell.tsx";
|
|
22
|
+
export { buildParsePayload } from "#pipeline/copy";
|
|
23
|
+
export { PIPELINE_DEFAULT_ADDRESS, PIPELINE_PRESETS } from "#pipeline/presets";
|
|
24
|
+
export { PipelineExplorer } from "./PipelineExplorer.tsx";
|
|
25
|
+
export type { PipelineExplorerProps } from "./PipelineExplorer.tsx";
|
|
26
|
+
export { QueryForm } from "./QueryForm.tsx";
|
|
27
|
+
export type { QueryFormProps } from "./QueryForm.tsx";
|
|
28
|
+
export { ResolvedPlace } from "./ResolvedPlace.tsx";
|
|
29
|
+
export type { ResolvedPlaceProps } from "./ResolvedPlace.tsx";
|
|
30
|
+
export type { PipelineLoadingState, PipelinePanels, PipelineRuntime } from "#pipeline/types";
|
|
31
|
+
export { useParsePipeline } from "#pipeline/useParsePipeline";
|
|
32
|
+
export type { UseParsePipeline, UseParsePipelineOptions } from "#pipeline/useParsePipeline";
|
|
33
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE7D,YAAY,EAAE,oBAAoB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAE5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAC7D,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license AGPL-3.0
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* @file Pipeline explorer components, visualizers, hooks, and contracts.
|
|
6
|
+
*/
|
|
7
|
+
export { About } from "../common/About.js";
|
|
8
|
+
export { FailureDiagnostic } from "./FailureDiagnostic.js";
|
|
9
|
+
export { SpanHighlight } from "./SpanHighlight.js";
|
|
10
|
+
export { TimingPanel } from "./TimingPanel.js";
|
|
11
|
+
export { TreeView } from "./TreeView.js";
|
|
12
|
+
export { CandidatePicker } from "./CandidatePicker.js";
|
|
13
|
+
export { ComponentTable } from "./ComponentTable.js";
|
|
14
|
+
export { ConfidenceCell } from "./ConfidenceCell.js";
|
|
15
|
+
export { buildParsePayload } from "#pipeline/copy";
|
|
16
|
+
export { PIPELINE_DEFAULT_ADDRESS, PIPELINE_PRESETS } from "#pipeline/presets";
|
|
17
|
+
export { PipelineExplorer } from "./PipelineExplorer.js";
|
|
18
|
+
export { QueryForm } from "./QueryForm.js";
|
|
19
|
+
export { ResolvedPlace } from "./ResolvedPlace.js";
|
|
20
|
+
export { useParsePipeline } from "#pipeline/useParsePipeline";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../lib/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAqB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAyB,CAAA;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAgB,CAAA;AAGzC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAuB,CAAA;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAsB,CAAA;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAwB,CAAA;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAiB,CAAA;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AAKnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA"}
|
|
@@ -31,9 +31,12 @@ export interface UseParsePipeline {
|
|
|
31
31
|
*/
|
|
32
32
|
selectedCandidate: ResolvedPlaceView | null;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Parse and resolve the current text. Safe to bind to a form's `onSubmit`.
|
|
35
|
+
*
|
|
36
|
+
* Pass `query` to submit a value the field has not re-rendered with yet — a preset press sets the text and submits in
|
|
37
|
+
* one handler, and that state update is not visible to this call.
|
|
35
38
|
*/
|
|
36
|
-
submit: () => Promise<void>;
|
|
39
|
+
submit: (query?: string) => Promise<void>;
|
|
37
40
|
/**
|
|
38
41
|
* Clear the result (used when a preset replaces the input).
|
|
39
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useParsePipeline.d.ts","sourceRoot":"","sources":["../../lib/pipeline/useParsePipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAG5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC3C
|
|
1
|
+
{"version":3,"file":"useParsePipeline.d.ts","sourceRoot":"","sources":["../../lib/pipeline/useParsePipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAG5F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,uBAAuB;IACvC,OAAO,EAAE,eAAe,CAAA;IACxB,WAAW,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,eAAe,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC;;OAEG;IACH,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAAA;IAC3C;;;;;OAKG;IACH,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC;;OAEG;IACH,KAAK,EAAE,MAAM,IAAI,CAAA;CACjB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,uBAAuB,GAAG,gBAAgB,CAqDpG"}
|
|
@@ -16,14 +16,18 @@ export function useParsePipeline({ runtime, defaultText }) {
|
|
|
16
16
|
const [result, setResult] = useState(null);
|
|
17
17
|
const [selectedCandidateIndex, setSelectedCandidateIndex] = useState(0);
|
|
18
18
|
const [parseError, setParseError] = useState(null);
|
|
19
|
-
|
|
19
|
+
// `query` exists because `setText` does not reach this closure before the call after it runs. A preset that called
|
|
20
|
+
// `setText(value)` then `submit()` parsed the PREVIOUS text — the field showed the preset and the map answered the
|
|
21
|
+
// address before it. A caller that already knows the query passes it; the field's own submit passes nothing.
|
|
22
|
+
const submit = useCallback(async (query) => {
|
|
20
23
|
if (!runtime.ready || busy)
|
|
21
24
|
return;
|
|
25
|
+
const input = query ?? text;
|
|
22
26
|
setBusy(true);
|
|
23
27
|
setParseStage(0);
|
|
24
28
|
setParseError(null);
|
|
25
29
|
try {
|
|
26
|
-
const parsed = await runtime.runParse(
|
|
30
|
+
const parsed = await runtime.runParse(input, { onStage: setParseStage });
|
|
27
31
|
setSelectedCandidateIndex(0);
|
|
28
32
|
setResult(parsed);
|
|
29
33
|
}
|