@element-editor/ui 0.0.0-stage → 0.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.
- package/AGENTS.md +65 -0
- package/LICENSE +21 -0
- package/README.md +46 -2
- package/dist/BooleanOperations-WXcmW9Vy.cjs +1 -0
- package/dist/BooleanOperations-oF0WybQP.js +111 -0
- package/dist/DataTable-CNfB01y2.cjs +2 -0
- package/dist/DataTable-DNmjUwka.js +510 -0
- package/dist/DataTablePanel-BknCxC1K.cjs +1 -0
- package/dist/DataTablePanel-rWdaQubk.js +208 -0
- package/dist/EditToolbarBtn-SZIsnIn3.js +378 -0
- package/dist/EditToolbarBtn-dpCmKnzk.cjs +3 -0
- package/dist/FeatureEditModal-BF-fGhVD.js +77 -0
- package/dist/FeatureEditModal-CM6BObUO.cjs +1 -0
- package/dist/FeatureList-CQb2kTrV.js +520 -0
- package/dist/FeatureList-Csr-anLA.cjs +1 -0
- package/dist/FeatureRowContextMenu-BLt7VlUU.js +130 -0
- package/dist/FeatureRowContextMenu-Gwq3OMEA.cjs +1 -0
- package/dist/GeoJSONModal-BPFWeaLZ.js +886 -0
- package/dist/GeoJSONModal-iwUcvrg7.cjs +9 -0
- package/dist/SchemaEditor-BEsKUe2p.js +293 -0
- package/dist/SchemaEditor-qkoYMg0C.cjs +1 -0
- package/dist/SchemaModal-9nNrgorr.js +95 -0
- package/dist/SchemaModal-GrtgA7cH.cjs +1 -0
- package/dist/SettingsModal-6_qmRyCi.cjs +1 -0
- package/dist/SettingsModal-DTP0Xx_Z.js +237 -0
- package/dist/ShortcutsModal-CdyQlrqK.cjs +1 -0
- package/dist/ShortcutsModal-DwxZu71W.js +299 -0
- package/dist/components/ActiveDrawingToolbar.d.cts +1 -0
- package/dist/components/ActiveDrawingToolbar.d.ts +1 -0
- package/dist/components/BasemapPicker.d.cts +26 -0
- package/dist/components/BasemapPicker.d.ts +26 -0
- package/dist/components/BooleanOperations.d.cts +1 -0
- package/dist/components/BooleanOperations.d.ts +1 -0
- package/dist/components/BufferPanel.d.cts +1 -0
- package/dist/components/BufferPanel.d.ts +1 -0
- package/dist/components/DataTable.d.cts +9 -0
- package/dist/components/DataTable.d.ts +9 -0
- package/dist/components/DataTablePanel.d.cts +10 -0
- package/dist/components/DataTablePanel.d.ts +10 -0
- package/dist/components/EditingToolbar.d.cts +1 -0
- package/dist/components/EditingToolbar.d.ts +1 -0
- package/dist/components/ElementEditorErrorBoundary.d.cts +28 -0
- package/dist/components/ElementEditorErrorBoundary.d.ts +28 -0
- package/dist/components/ElementEditorUIProvider.d.cts +50 -0
- package/dist/components/ElementEditorUIProvider.d.ts +50 -0
- package/dist/components/FeatureMapContextMenu.d.cts +23 -0
- package/dist/components/FeatureMapContextMenu.d.ts +23 -0
- package/dist/components/FitBoundsButton.d.cts +6 -0
- package/dist/components/FitBoundsButton.d.ts +6 -0
- package/dist/components/FloatingToolbar.d.cts +3 -0
- package/dist/components/FloatingToolbar.d.ts +3 -0
- package/dist/components/LocateButton.d.cts +11 -0
- package/dist/components/LocateButton.d.ts +11 -0
- package/dist/components/ReadonlyBanner.d.cts +1 -0
- package/dist/components/ReadonlyBanner.d.ts +1 -0
- package/dist/components/ShortcutsModal.d.cts +1 -0
- package/dist/components/ShortcutsModal.d.ts +1 -0
- package/dist/components/SimplifyPanel.d.cts +1 -0
- package/dist/components/SimplifyPanel.d.ts +1 -0
- package/dist/components/SmoothPanel.d.cts +1 -0
- package/dist/components/SmoothPanel.d.ts +1 -0
- package/dist/components/UndoRedoToolbar.d.cts +20 -0
- package/dist/components/UndoRedoToolbar.d.ts +20 -0
- package/dist/components/VertexSelectionBar.d.cts +12 -0
- package/dist/components/VertexSelectionBar.d.ts +12 -0
- package/dist/components/ZoomIndicator.d.cts +15 -0
- package/dist/components/ZoomIndicator.d.ts +15 -0
- package/dist/components/dialogs/DynamicFieldRenderer.d.cts +11 -0
- package/dist/components/dialogs/DynamicFieldRenderer.d.ts +11 -0
- package/dist/components/dialogs/SettingsModal.d.cts +1 -0
- package/dist/components/dialogs/SettingsModal.d.ts +1 -0
- package/dist/components/lazyParts.d.cts +12 -0
- package/dist/components/lazyParts.d.ts +12 -0
- package/dist/components/sidebar/FeatureEditModal.d.cts +6 -0
- package/dist/components/sidebar/FeatureEditModal.d.ts +6 -0
- package/dist/components/sidebar/FeatureList.d.cts +4 -0
- package/dist/components/sidebar/FeatureList.d.ts +4 -0
- package/dist/components/sidebar/FeatureRow.d.cts +38 -0
- package/dist/components/sidebar/FeatureRow.d.ts +38 -0
- package/dist/components/sidebar/FeatureRowContextMenu.d.cts +12 -0
- package/dist/components/sidebar/FeatureRowContextMenu.d.ts +12 -0
- package/dist/components/sidebar/FeatureSidePanel.d.cts +8 -0
- package/dist/components/sidebar/FeatureSidePanel.d.ts +8 -0
- package/dist/components/sidebar/GeoJSONModal.d.cts +5 -0
- package/dist/components/sidebar/GeoJSONModal.d.ts +5 -0
- package/dist/components/sidebar/GroupRow.d.cts +21 -0
- package/dist/components/sidebar/GroupRow.d.ts +21 -0
- package/dist/components/sidebar/HideLayersToggle.d.cts +2 -0
- package/dist/components/sidebar/HideLayersToggle.d.ts +2 -0
- package/dist/components/sidebar/LayersPanel.d.cts +5 -0
- package/dist/components/sidebar/LayersPanel.d.ts +5 -0
- package/dist/components/sidebar/PartSubRow.d.cts +9 -0
- package/dist/components/sidebar/PartSubRow.d.ts +9 -0
- package/dist/components/sidebar/SchemaEditor.d.cts +4 -0
- package/dist/components/sidebar/SchemaEditor.d.ts +4 -0
- package/dist/components/sidebar/SchemaModal.d.cts +5 -0
- package/dist/components/sidebar/SchemaModal.d.ts +5 -0
- package/dist/components/sidebar/codeDock.d.cts +21 -0
- package/dist/components/sidebar/codeDock.d.ts +21 -0
- package/dist/components/ui/Button.d.cts +9 -0
- package/dist/components/ui/Button.d.ts +9 -0
- package/dist/components/ui/CloseButton.d.cts +6 -0
- package/dist/components/ui/CloseButton.d.ts +6 -0
- package/dist/components/ui/ContextMenu.d.cts +28 -0
- package/dist/components/ui/ContextMenu.d.ts +28 -0
- package/dist/components/ui/EditToolbarBtn.d.cts +13 -0
- package/dist/components/ui/EditToolbarBtn.d.ts +13 -0
- package/dist/components/ui/ElementToaster.d.cts +3 -0
- package/dist/components/ui/ElementToaster.d.ts +3 -0
- package/dist/components/ui/GeometryTypeIcon.d.cts +7 -0
- package/dist/components/ui/GeometryTypeIcon.d.ts +7 -0
- package/dist/components/ui/IconButton.d.cts +28 -0
- package/dist/components/ui/IconButton.d.ts +28 -0
- package/dist/components/ui/Input.d.cts +14 -0
- package/dist/components/ui/Input.d.ts +14 -0
- package/dist/components/ui/JsonCode.d.cts +4 -0
- package/dist/components/ui/JsonCode.d.ts +4 -0
- package/dist/components/ui/Kbd.d.cts +16 -0
- package/dist/components/ui/Kbd.d.ts +16 -0
- package/dist/components/ui/NoFeaturesEmptyState.d.cts +1 -0
- package/dist/components/ui/NoFeaturesEmptyState.d.ts +1 -0
- package/dist/components/ui/SearchDropdown.d.cts +28 -0
- package/dist/components/ui/SearchDropdown.d.ts +28 -0
- package/dist/components/ui/ToolButton.d.cts +19 -0
- package/dist/components/ui/ToolButton.d.ts +19 -0
- package/dist/components/ui/Tooltip.d.cts +12 -0
- package/dist/components/ui/Tooltip.d.ts +12 -0
- package/dist/components/ui/panelHeader.d.cts +2 -0
- package/dist/components/ui/panelHeader.d.ts +2 -0
- package/dist/components/ui/resizeEdge.d.cts +4 -0
- package/dist/components/ui/resizeEdge.d.ts +4 -0
- package/dist/contexts/ElementEditorConfigContext.d.cts +351 -0
- package/dist/contexts/ElementEditorConfigContext.d.ts +351 -0
- package/dist/contexts/EventContext.d.cts +69 -0
- package/dist/contexts/EventContext.d.ts +69 -0
- package/dist/contexts/MapControllerContext.d.cts +24 -0
- package/dist/contexts/MapControllerContext.d.ts +24 -0
- package/dist/contexts/ShortcutConfigContext.d.cts +16 -0
- package/dist/contexts/ShortcutConfigContext.d.ts +16 -0
- package/dist/contexts/ThemeContext.d.cts +12 -0
- package/dist/contexts/ThemeContext.d.ts +12 -0
- package/dist/element-editor-ui.cjs +1 -0
- package/dist/element-editor-ui.es.js +102 -0
- package/dist/geometryWorker-CCwg4tNC.cjs +1 -0
- package/dist/geometryWorker-DgQCFSmD.js +25 -0
- package/dist/hooks/dragShield.d.cts +7 -0
- package/dist/hooks/dragShield.d.ts +7 -0
- package/dist/hooks/themeInputs.d.cts +14 -0
- package/dist/hooks/themeInputs.d.ts +14 -0
- package/dist/hooks/useAccentPalette.d.cts +15 -0
- package/dist/hooks/useAccentPalette.d.ts +15 -0
- package/dist/hooks/useAccentStyle.d.cts +39 -0
- package/dist/hooks/useAccentStyle.d.ts +39 -0
- package/dist/hooks/useAdapterControls.d.cts +280 -0
- package/dist/hooks/useAdapterControls.d.ts +280 -0
- package/dist/hooks/useBalancedWrap.d.cts +8 -0
- package/dist/hooks/useBalancedWrap.d.ts +8 -0
- package/dist/hooks/useContextMenu.d.cts +11 -0
- package/dist/hooks/useContextMenu.d.ts +11 -0
- package/dist/hooks/useDataChangeSubscription.d.cts +9 -0
- package/dist/hooks/useDataChangeSubscription.d.ts +9 -0
- package/dist/hooks/useDragWindow.d.cts +9 -0
- package/dist/hooks/useDragWindow.d.ts +9 -0
- package/dist/hooks/useFocusTrap.d.cts +7 -0
- package/dist/hooks/useFocusTrap.d.ts +7 -0
- package/dist/hooks/useGeoJSONDrop.d.cts +40 -0
- package/dist/hooks/useGeoJSONDrop.d.ts +40 -0
- package/dist/hooks/useGeoJSONExport.d.cts +69 -0
- package/dist/hooks/useGeoJSONExport.d.ts +69 -0
- package/dist/hooks/useGeoJSONFileImport.d.cts +24 -0
- package/dist/hooks/useGeoJSONFileImport.d.ts +24 -0
- package/dist/hooks/useInlineRename.d.cts +26 -0
- package/dist/hooks/useInlineRename.d.ts +26 -0
- package/dist/hooks/useJumpToFeature.d.cts +3 -0
- package/dist/hooks/useJumpToFeature.d.ts +3 -0
- package/dist/hooks/useKeyboardShortcuts.d.cts +9 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +9 -0
- package/dist/hooks/useNominatim.d.cts +24 -0
- package/dist/hooks/useNominatim.d.ts +24 -0
- package/dist/hooks/usePanelOffset.d.cts +14 -0
- package/dist/hooks/usePanelOffset.d.ts +14 -0
- package/dist/hooks/useResizablePanel.d.cts +4 -0
- package/dist/hooks/useResizablePanel.d.ts +4 -0
- package/dist/hooks/useRootTokens.d.cts +27 -0
- package/dist/hooks/useRootTokens.d.ts +27 -0
- package/dist/hooks/useSearchState.d.cts +23 -0
- package/dist/hooks/useSearchState.d.ts +23 -0
- package/dist/hooks/useServiceAttribution.d.cts +13 -0
- package/dist/hooks/useServiceAttribution.d.ts +13 -0
- package/dist/hooks/useWindowEscape.d.cts +25 -0
- package/dist/hooks/useWindowEscape.d.ts +25 -0
- package/dist/hooks/useWindowFocus.d.cts +4 -0
- package/dist/hooks/useWindowFocus.d.ts +4 -0
- package/dist/hooks/useWorkerGeometryPreview.d.cts +22 -0
- package/dist/hooks/useWorkerGeometryPreview.d.ts +22 -0
- package/dist/index-BKdDZ4Y9.cjs +1 -0
- package/dist/index-CtZterPc.js +3165 -0
- package/dist/index.d.cts +89 -0
- package/dist/index.d.ts +89 -0
- package/dist/internal.cjs +1 -0
- package/dist/internal.d.cts +16 -0
- package/dist/internal.d.ts +16 -0
- package/dist/internal.es.js +42 -0
- package/dist/primitives.cjs +1 -0
- package/dist/primitives.d.cts +19 -0
- package/dist/primitives.d.ts +19 -0
- package/dist/primitives.es.js +17 -0
- package/dist/store/StoreContext.d.cts +17 -0
- package/dist/store/StoreContext.d.ts +17 -0
- package/dist/types/events.d.cts +95 -0
- package/dist/types/events.d.ts +95 -0
- package/dist/useAccentStyle-CPo2XqAn.js +412 -0
- package/dist/useAccentStyle-hsGvyHZc.cjs +1 -0
- package/dist/useAdapterControls-BBObhzVX.cjs +1 -0
- package/dist/useAdapterControls-DVjkwRZ_.js +691 -0
- package/dist/useContextMenu-DJ2Cti85.js +10 -0
- package/dist/useContextMenu-DbxMvb1s.cjs +1 -0
- package/dist/useFocusTrap-BBjPCfDR.cjs +1 -0
- package/dist/useFocusTrap-CKxKT8De.js +25 -0
- package/dist/useJumpToFeature-Bdz2hqOC.js +16 -0
- package/dist/useJumpToFeature-LwjxGzfy.cjs +1 -0
- package/dist/useWindowFocus-D-_yEm_V.cjs +1 -0
- package/dist/useWindowFocus-DGAWA1au.js +80 -0
- package/dist/utils/booleanValue.d.cts +4 -0
- package/dist/utils/booleanValue.d.ts +4 -0
- package/dist/utils/clipboardError.d.cts +3 -0
- package/dist/utils/clipboardError.d.ts +3 -0
- package/dist/utils/download.d.cts +42 -0
- package/dist/utils/download.d.ts +42 -0
- package/dist/utils/geojsonDocument.d.cts +168 -0
- package/dist/utils/geojsonDocument.d.ts +168 -0
- package/dist/utils/geometryWorkerClient.d.cts +6 -0
- package/dist/utils/geometryWorkerClient.d.ts +6 -0
- package/dist/utils/layerOrder.d.cts +9 -0
- package/dist/utils/layerOrder.d.ts +9 -0
- package/dist/utils/lazyWithPreload.d.cts +24 -0
- package/dist/utils/lazyWithPreload.d.ts +24 -0
- package/dist/utils/lineSmooth.d.cts +7 -0
- package/dist/utils/lineSmooth.d.ts +7 -0
- package/dist/utils/platform.d.cts +2 -0
- package/dist/utils/platform.d.ts +2 -0
- package/dist/workers/geometryWorker.d.cts +1 -0
- package/dist/workers/geometryWorker.d.ts +1 -0
- package/package.json +133 -3
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
import { createContext as w, useState as B, useEffect as J, useContext as T, useCallback as U, useRef as q, useMemo as $, useLayoutEffect as Q } from "react";
|
|
2
|
+
import { jsx as _ } from "react/jsx-runtime";
|
|
3
|
+
import { readPersisted as X, writePersisted as z } from "@element-editor/core";
|
|
4
|
+
import { warnOnce as L } from "@element-editor/core/internal";
|
|
5
|
+
const g = { attributes: !0, attributeFilter: ["style", "class", "data-elm-theme"] }, tt = { attributes: !0, attributeFilter: ["style", "class"] }, et = { childList: !0, subtree: !0, characterData: !0, attributes: !0, attributeFilter: ["href", "media", "disabled"] }, st = /* @__PURE__ */ new Set([
|
|
6
|
+
"--elm-panel-offset",
|
|
7
|
+
"--elm-table-offset",
|
|
8
|
+
"--elm-bottom-row-height",
|
|
9
|
+
"--elm-bottom-stack-offset",
|
|
10
|
+
"--elm-bottom-toolbar-offset",
|
|
11
|
+
"--elm-left-center-shift",
|
|
12
|
+
"--elm-right-center-shift"
|
|
13
|
+
]), M = (t) => {
|
|
14
|
+
if (!(t instanceof HTMLElement)) return "";
|
|
15
|
+
let e = `${t.className}|${t.getAttribute("data-elm-theme") ?? ""}`;
|
|
16
|
+
for (const s of t.style) !st.has(s) && !s.startsWith("transition") && (e += `;${s}:${t.style.getPropertyValue(s)}`);
|
|
17
|
+
return e;
|
|
18
|
+
};
|
|
19
|
+
function rt(t, e) {
|
|
20
|
+
const s = (u) => {
|
|
21
|
+
u.target instanceof HTMLLinkElement && e();
|
|
22
|
+
};
|
|
23
|
+
let r = M(t);
|
|
24
|
+
const a = new MutationObserver((u) => {
|
|
25
|
+
const i = r;
|
|
26
|
+
r = M(t), !(r === i && u.every((m) => m.target === t)) && e();
|
|
27
|
+
});
|
|
28
|
+
return t && a.observe(t, g), a.observe(document.documentElement, tt), a.observe(document.head, et), document.addEventListener("load", s, !0), () => {
|
|
29
|
+
a.disconnect(), document.removeEventListener("load", s, !0);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const ot = [
|
|
33
|
+
"--elm-font",
|
|
34
|
+
"--elm-font-mono",
|
|
35
|
+
"--elm-radius",
|
|
36
|
+
"--elm-radius-control",
|
|
37
|
+
"--elm-shadow",
|
|
38
|
+
"--elm-shadow-raised",
|
|
39
|
+
"--elm-shadow-control",
|
|
40
|
+
"--elm-surface",
|
|
41
|
+
"--elm-surface-raised",
|
|
42
|
+
"--elm-surface-sunken",
|
|
43
|
+
"--elm-surface-hover",
|
|
44
|
+
"--elm-control-hover",
|
|
45
|
+
"--elm-text",
|
|
46
|
+
"--elm-text-secondary",
|
|
47
|
+
"--elm-text-muted",
|
|
48
|
+
"--elm-text-subtle",
|
|
49
|
+
"--elm-text-disabled",
|
|
50
|
+
"--elm-border",
|
|
51
|
+
"--elm-border-subtle",
|
|
52
|
+
"--elm-border-strong",
|
|
53
|
+
"--elm-focus-ring",
|
|
54
|
+
"--elm-tooltip",
|
|
55
|
+
"--elm-tooltip-text"
|
|
56
|
+
], at = [
|
|
57
|
+
...ot,
|
|
58
|
+
"--elm-accent",
|
|
59
|
+
...[50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950].map((t) => `--elm-primary-${t}`)
|
|
60
|
+
];
|
|
61
|
+
function K(t) {
|
|
62
|
+
if (!t) return;
|
|
63
|
+
const e = getComputedStyle(t);
|
|
64
|
+
let s;
|
|
65
|
+
for (const r of at) {
|
|
66
|
+
const a = e.getPropertyValue(r).trim();
|
|
67
|
+
a && ((s ?? (s = {}))[r] = a);
|
|
68
|
+
}
|
|
69
|
+
return s;
|
|
70
|
+
}
|
|
71
|
+
const nt = (t, e) => {
|
|
72
|
+
if (t === e) return !0;
|
|
73
|
+
if (!t || !e) return !1;
|
|
74
|
+
const s = Object.keys(t);
|
|
75
|
+
return s.length === Object.keys(e).length && s.every((r) => t[r] === e[r]);
|
|
76
|
+
};
|
|
77
|
+
function vt(t) {
|
|
78
|
+
const [e, s] = B(void 0);
|
|
79
|
+
return J(() => {
|
|
80
|
+
if (!t) {
|
|
81
|
+
s(void 0);
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
const r = () => {
|
|
85
|
+
const m = K(t);
|
|
86
|
+
s((n) => nt(n, m) ? n : m);
|
|
87
|
+
};
|
|
88
|
+
let a = 0;
|
|
89
|
+
const u = () => {
|
|
90
|
+
a || (a = requestAnimationFrame(() => {
|
|
91
|
+
a = 0, r();
|
|
92
|
+
}));
|
|
93
|
+
};
|
|
94
|
+
r();
|
|
95
|
+
const i = rt(t, u);
|
|
96
|
+
return () => {
|
|
97
|
+
i(), cancelAnimationFrame(a);
|
|
98
|
+
};
|
|
99
|
+
}, [t]), e;
|
|
100
|
+
}
|
|
101
|
+
const ut = w(void 0), N = /* @__PURE__ */ new WeakMap();
|
|
102
|
+
function kt(t, e) {
|
|
103
|
+
if (!e) return;
|
|
104
|
+
const s = (e instanceof HTMLElement ? e.className + "|" + e.getAttribute("data-elm-theme") + "|" + (e.getAttribute("style") ?? "") : "") + "|" + document.documentElement.className + "|" + (document.documentElement.getAttribute("style") ?? ""), r = N.get(t);
|
|
105
|
+
if (r && r.root === e && r.key === s) return;
|
|
106
|
+
const a = K(e) ?? {};
|
|
107
|
+
for (const u of (r == null ? void 0 : r.names) ?? []) u in a || t.style.removeProperty(u);
|
|
108
|
+
for (const [u, i] of Object.entries(a)) t.style.setProperty(u, i);
|
|
109
|
+
N.set(t, { root: e, key: s, names: Object.keys(a) });
|
|
110
|
+
}
|
|
111
|
+
const Ct = {
|
|
112
|
+
point: "place-point",
|
|
113
|
+
line: "draw-line",
|
|
114
|
+
polygon: "draw-polygon",
|
|
115
|
+
route: "draw-route",
|
|
116
|
+
circle: "draw-circle",
|
|
117
|
+
rectangle: "draw-rect",
|
|
118
|
+
freehand: "draw-freehand",
|
|
119
|
+
picker: "pick-shape",
|
|
120
|
+
measure: "measure"
|
|
121
|
+
}, C = [
|
|
122
|
+
"topLeft",
|
|
123
|
+
"topCenter",
|
|
124
|
+
"topRight",
|
|
125
|
+
"leftCenter",
|
|
126
|
+
"rightCenter",
|
|
127
|
+
"bottomLeft",
|
|
128
|
+
"bottomCenter",
|
|
129
|
+
"bottomRight",
|
|
130
|
+
"statusLeft",
|
|
131
|
+
"statusRight"
|
|
132
|
+
], V = (t) => (t && typeof t == "object" && (Object.values(t).forEach(V), Object.freeze(t)), t), H = V({
|
|
133
|
+
topCenter: ["toolbar"],
|
|
134
|
+
leftCenter: [{ group: ["undo", "redo"] }],
|
|
135
|
+
bottomLeft: ["basemap", "fitBounds", "locate", "zoomIndicator", "table", "schema", "geojson", "settings", "keyboard", "applyChanges"]
|
|
136
|
+
});
|
|
137
|
+
function f(t) {
|
|
138
|
+
const e = [];
|
|
139
|
+
for (const s of t)
|
|
140
|
+
s === "separator" && (e.length === 0 || e[e.length - 1] === "separator") || e.push(s);
|
|
141
|
+
return e[e.length - 1] === "separator" && e.pop(), e;
|
|
142
|
+
}
|
|
143
|
+
function Lt(t, e, s) {
|
|
144
|
+
switch (t) {
|
|
145
|
+
case "fitBounds":
|
|
146
|
+
return e.zoomToAll;
|
|
147
|
+
case "locate":
|
|
148
|
+
return e.locateButton;
|
|
149
|
+
case "zoomIndicator":
|
|
150
|
+
return e.zoomIndicator;
|
|
151
|
+
case "table":
|
|
152
|
+
return e.dataTable;
|
|
153
|
+
case "schema":
|
|
154
|
+
return e.schemaEditor && !s.readonly;
|
|
155
|
+
case "geojson":
|
|
156
|
+
return e.geojsonEditor;
|
|
157
|
+
case "settings":
|
|
158
|
+
return e.settings;
|
|
159
|
+
case "keyboard":
|
|
160
|
+
return e.keyboardShortcuts.show;
|
|
161
|
+
case "applyChanges":
|
|
162
|
+
return s.canSubmit && !s.readonly;
|
|
163
|
+
case "undo":
|
|
164
|
+
case "redo":
|
|
165
|
+
return !s.readonly;
|
|
166
|
+
// nothing to undo when nothing can be edited
|
|
167
|
+
case "basemap":
|
|
168
|
+
return s.hasBasemaps;
|
|
169
|
+
default:
|
|
170
|
+
return !0;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
function Tt(t, e) {
|
|
174
|
+
const s = [];
|
|
175
|
+
for (const r of t)
|
|
176
|
+
if (typeof r == "object") {
|
|
177
|
+
const a = f(r.group.filter((u) => u === "separator" || e(u)));
|
|
178
|
+
a.length && s.push({ group: a });
|
|
179
|
+
} else (r === "separator" || e(r)) && s.push(r);
|
|
180
|
+
return f(s);
|
|
181
|
+
}
|
|
182
|
+
function lt(t) {
|
|
183
|
+
return t === !1 ? { enabled: !1, show: !1, mapZoom: !1 } : t === !0 || t === void 0 ? { enabled: !0, show: !0, mapZoom: !1 } : { enabled: t.enabled ?? !0, show: t.show ?? !0, mapZoom: t.mapZoom ?? !1 };
|
|
184
|
+
}
|
|
185
|
+
const A = /* @__PURE__ */ new Set([
|
|
186
|
+
"toolbar",
|
|
187
|
+
"undo",
|
|
188
|
+
"redo",
|
|
189
|
+
"fitBounds",
|
|
190
|
+
"locate",
|
|
191
|
+
"zoomIndicator",
|
|
192
|
+
"table",
|
|
193
|
+
"schema",
|
|
194
|
+
"geojson",
|
|
195
|
+
"settings",
|
|
196
|
+
"keyboard",
|
|
197
|
+
"applyChanges",
|
|
198
|
+
"attribution",
|
|
199
|
+
"basemap"
|
|
200
|
+
]), S = (t) => t === "statusLeft" || t === "statusRight", j = (t) => !!t && typeof t == "object" && Array.isArray(t.group);
|
|
201
|
+
function it(t, e, s) {
|
|
202
|
+
return A.has(t) ? (t === "toolbar" || t === "basemap") && s ? `'${t}' can't go in a group` : S(e) && (t === "toolbar" || t === "applyChanges") ? `'${t}' can't go in the status bar` : t === "attribution" && !S(e) ? "'attribution' can only go in statusLeft or statusRight" : null : `'${t}' is not a control`;
|
|
203
|
+
}
|
|
204
|
+
const R = (t) => Array.isArray(t) ? { items: t } : {
|
|
205
|
+
items: Array.isArray(t == null ? void 0 : t.items) ? t.items : [],
|
|
206
|
+
direction: t == null ? void 0 : t.direction
|
|
207
|
+
};
|
|
208
|
+
function mt(t) {
|
|
209
|
+
const e = /* @__PURE__ */ new Map(), s = {};
|
|
210
|
+
for (const r of C) {
|
|
211
|
+
const a = R(t[r]), u = S(r) ? "horizontal" : a.direction || (r === "leftCenter" || r === "rightCenter" ? "vertical" : "horizontal"), i = (o) => {
|
|
212
|
+
const l = e.get(o);
|
|
213
|
+
return l ? l === r ? `'${o}' is listed twice in ${r}; keeping the first one` : `'${o}' is in both ${l} and ${r}; keeping ${l} (the first in slot order). To move one control without relisting the defaults, use withLayout({ move: { ${o}: '${r}' } })` : null;
|
|
214
|
+
}, m = (o, l) => {
|
|
215
|
+
const p = o === "separator" ? l || S(r) ? null : "'separator' only goes inside a group or in the status bar (there's nothing to draw it on over the map); put it inside a { group: [...] }" : typeof o != "string" ? j(o) ? "groups can't be nested" : `${JSON.stringify(o)} is not a control, 'separator' or { group: [...] }` : it(o, r, l) ?? i(o);
|
|
216
|
+
return p ? (L(`${r}:${p}`, `config.ui.layout.${r}: ${p}. Ignoring it.`), !1) : (o !== "separator" && e.set(o, r), !0);
|
|
217
|
+
}, n = [];
|
|
218
|
+
for (const o of a.items)
|
|
219
|
+
if (j(o)) {
|
|
220
|
+
const l = f(o.group.filter((p) => m(p, !0)));
|
|
221
|
+
l.length && n.push({ group: l });
|
|
222
|
+
} else m(o, !1) && n.push(o);
|
|
223
|
+
s[r] = { items: f(n), direction: u };
|
|
224
|
+
}
|
|
225
|
+
return s;
|
|
226
|
+
}
|
|
227
|
+
function St(t, e = H) {
|
|
228
|
+
const s = Object.entries(t.move ?? {}), r = new Set(t.hide ?? []);
|
|
229
|
+
for (const n of [...s.map(([o]) => o), ...r])
|
|
230
|
+
A.has(n) || L(`withLayout:${n}`, `withLayout: '${n}' is not a control. Ignoring it.`);
|
|
231
|
+
const a = /* @__PURE__ */ new Set([...r, ...s.map(([n]) => n)]), u = (n) => !(typeof n == "string" && a.has(n)), i = {}, m = (n, o, l) => {
|
|
232
|
+
i[n] = Array.isArray(o) || o === void 0 ? l : { ...o, items: l };
|
|
233
|
+
};
|
|
234
|
+
for (const n of C) {
|
|
235
|
+
const o = e[n];
|
|
236
|
+
if (o === void 0) continue;
|
|
237
|
+
const l = R(o).items.flatMap((p) => {
|
|
238
|
+
if (!j(p)) return u(p) ? [p] : [];
|
|
239
|
+
const c = f(p.group.filter(u));
|
|
240
|
+
return c.length ? [{ group: c }] : [];
|
|
241
|
+
});
|
|
242
|
+
m(n, o, f(l));
|
|
243
|
+
}
|
|
244
|
+
for (const [n, o] of s) {
|
|
245
|
+
if (!A.has(n)) continue;
|
|
246
|
+
if (r.has(n)) {
|
|
247
|
+
L(`withLayout:both:${n}`, `withLayout: '${n}' is both moved and hidden; hiding it.`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const { slot: l, at: p = "end" } = typeof o == "string" ? { slot: o } : o ?? {};
|
|
251
|
+
if (!C.includes(l)) {
|
|
252
|
+
L(`withLayout:slot:${String(l)}`, `withLayout: '${String(l)}' is not a slot (moving '${n}'). Ignoring it.`);
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const c = i[l], h = [...R(c).items];
|
|
256
|
+
m(l, c, p === "start" ? [n, ...h] : [...h, n]);
|
|
257
|
+
}
|
|
258
|
+
return i;
|
|
259
|
+
}
|
|
260
|
+
function wt(t, e) {
|
|
261
|
+
const s = new Set(C.flatMap((i) => t[i].items.flatMap((m) => typeof m == "object" ? m.group : [m]))), r = [];
|
|
262
|
+
!e.readonly && (e.tools === null || e.tools.length > 0) && !s.has("toolbar") && r.push(`'toolbar' isn't placed, so the drawing tools are ${e.shortcuts ? "reachable only by keyboard shortcut" : "unreachable"}. Put it in a map slot (withLayout({ move: { toolbar: 'topCenter' } })), or set readonly / tools: [] if that's on purpose`), e.canSubmit && !e.readonly && !s.has("applyChanges") && r.push("onSubmit is set but 'applyChanges' isn't placed, so users can't submit. Place it, or call ref.submit() yourself");
|
|
263
|
+
const u = ["undo", "redo"].filter((i) => !s.has(i));
|
|
264
|
+
return !e.readonly && !e.shortcuts && u.length && r.push(`${u.map((i) => `'${i}'`).join(" and ")} ${u.length > 1 ? "aren't" : "isn't"} placed and keyboard shortcuts are off, so users can't ${u.join(" or ")}`), r;
|
|
265
|
+
}
|
|
266
|
+
const pt = {
|
|
267
|
+
topLeft: "top-left",
|
|
268
|
+
topCenter: "top-center",
|
|
269
|
+
topRight: "top-right",
|
|
270
|
+
leftCenter: "left-center",
|
|
271
|
+
rightCenter: "right-center",
|
|
272
|
+
bottomLeft: "bottom-left",
|
|
273
|
+
bottomCenter: "bottom-center",
|
|
274
|
+
bottomRight: "bottom-right"
|
|
275
|
+
};
|
|
276
|
+
function Y(t) {
|
|
277
|
+
var r, a, u, i, m, n, o, l, p, c, h, v, k, d, y, b, P, I;
|
|
278
|
+
const e = mt(((r = t == null ? void 0 : t.ui) == null ? void 0 : r.layout) ?? H), s = C.find((G) => e[G].items.includes("toolbar"));
|
|
279
|
+
return {
|
|
280
|
+
mode: (t == null ? void 0 : t.mode) ?? "system",
|
|
281
|
+
persistKey: (t == null ? void 0 : t.persistKey) || void 0,
|
|
282
|
+
persist: (t == null ? void 0 : t.persist) ?? !0,
|
|
283
|
+
network: (t == null ? void 0 : t.network) ?? {},
|
|
284
|
+
accentColor: (t == null ? void 0 : t.accentColor) || void 0,
|
|
285
|
+
featureColor: (t == null ? void 0 : t.featureColor) || void 0,
|
|
286
|
+
tools: (t == null ? void 0 : t.tools) ?? "all",
|
|
287
|
+
ui: {
|
|
288
|
+
hints: ((a = t == null ? void 0 : t.ui) == null ? void 0 : a.hints) ?? !0,
|
|
289
|
+
dataTable: ((u = t == null ? void 0 : t.ui) == null ? void 0 : u.dataTable) ?? !0,
|
|
290
|
+
layerList: ((i = t == null ? void 0 : t.ui) == null ? void 0 : i.layerList) ?? !0,
|
|
291
|
+
schemaEditor: ((m = t == null ? void 0 : t.ui) == null ? void 0 : m.schemaEditor) ?? !0,
|
|
292
|
+
geojsonEditor: ((n = t == null ? void 0 : t.ui) == null ? void 0 : n.geojsonEditor) ?? !0,
|
|
293
|
+
geojsonEditorOpen: (((o = t == null ? void 0 : t.ui) == null ? void 0 : o.geojsonEditor) ?? !0) && (((l = t == null ? void 0 : t.ui) == null ? void 0 : l.geojsonEditorOpen) ?? !1),
|
|
294
|
+
settings: ((p = t == null ? void 0 : t.ui) == null ? void 0 : p.settings) ?? !0,
|
|
295
|
+
zoomToAll: ((c = t == null ? void 0 : t.ui) == null ? void 0 : c.zoomToAll) ?? !0,
|
|
296
|
+
zoomIndicator: ((h = t == null ? void 0 : t.ui) == null ? void 0 : h.zoomIndicator) ?? !0,
|
|
297
|
+
locateButton: ((v = t == null ? void 0 : t.ui) == null ? void 0 : v.locateButton) ?? !0,
|
|
298
|
+
keyboardShortcuts: lt((k = t == null ? void 0 : t.ui) == null ? void 0 : k.keyboardShortcuts),
|
|
299
|
+
layout: e
|
|
300
|
+
},
|
|
301
|
+
toolbar: {
|
|
302
|
+
position: s && pt[s] || "top-center",
|
|
303
|
+
direction: ((d = t == null ? void 0 : t.toolbar) == null ? void 0 : d.direction) ?? "horizontal"
|
|
304
|
+
},
|
|
305
|
+
units: {
|
|
306
|
+
length: ((y = t == null ? void 0 : t.units) == null ? void 0 : y.length) ?? "auto",
|
|
307
|
+
area: ((b = t == null ? void 0 : t.units) == null ? void 0 : b.area) ?? "auto",
|
|
308
|
+
display: ((P = t == null ? void 0 : t.units) == null ? void 0 : P.display) ?? "human",
|
|
309
|
+
precision: ((I = t == null ? void 0 : t.units) == null ? void 0 : I.precision) ?? 2
|
|
310
|
+
}
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
const Z = w(Y()), x = w({
|
|
314
|
+
override: {},
|
|
315
|
+
setUnits: () => {
|
|
316
|
+
},
|
|
317
|
+
resetUnits: () => {
|
|
318
|
+
}
|
|
319
|
+
}), E = "elm_units", O = 1;
|
|
320
|
+
function D(t) {
|
|
321
|
+
return t === "metric" || t === "imperial" || t === "auto";
|
|
322
|
+
}
|
|
323
|
+
function dt(t) {
|
|
324
|
+
if (!t || typeof t != "object") return null;
|
|
325
|
+
const e = t, s = {};
|
|
326
|
+
return D(e.length) && (s.length = e.length), D(e.area) && (s.area = e.area), (e.display === "human" || e.display === "raw") && (s.display = e.display), typeof e.precision == "number" && e.precision >= 0 && e.precision <= 6 && (s.precision = e.precision), s;
|
|
327
|
+
}
|
|
328
|
+
function Et({
|
|
329
|
+
config: t,
|
|
330
|
+
children: e
|
|
331
|
+
}) {
|
|
332
|
+
var h, v, k;
|
|
333
|
+
const s = t == null ? void 0 : t.persistKey, r = t == null ? void 0 : t.persist, [a, u] = B(
|
|
334
|
+
() => X(E, O, dt, { persistKey: s, persist: r }) ?? {}
|
|
335
|
+
), i = U((d) => {
|
|
336
|
+
u((y) => {
|
|
337
|
+
const b = typeof d == "function" ? d(y) : { ...y, ...d };
|
|
338
|
+
return z(E, O, b, { persistKey: s, persist: r }), b;
|
|
339
|
+
});
|
|
340
|
+
}, [s, r]), m = U(() => {
|
|
341
|
+
u({}), z(E, O, {}, { persistKey: s, persist: r });
|
|
342
|
+
}, [s, r]), n = JSON.stringify(t ?? null), o = q((h = t == null ? void 0 : t.network) == null ? void 0 : h.fetch);
|
|
343
|
+
o.current = (v = t == null ? void 0 : t.network) == null ? void 0 : v.fetch;
|
|
344
|
+
const l = !!((k = t == null ? void 0 : t.network) != null && k.fetch), p = $(() => {
|
|
345
|
+
const d = Y(t);
|
|
346
|
+
return l && (d.network = { ...d.network, fetch: (y, b) => o.current(y, b) }), {
|
|
347
|
+
...d,
|
|
348
|
+
units: {
|
|
349
|
+
length: a.length ?? d.units.length,
|
|
350
|
+
area: a.area ?? d.units.area,
|
|
351
|
+
display: a.display ?? d.units.display,
|
|
352
|
+
precision: a.precision ?? d.units.precision
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
}, [n, a, l]), c = $(
|
|
356
|
+
() => ({ override: a, setUnits: i, resetUnits: m }),
|
|
357
|
+
[a, i, m]
|
|
358
|
+
);
|
|
359
|
+
return /* @__PURE__ */ _(Z.Provider, { value: p, children: /* @__PURE__ */ _(x.Provider, { value: c, children: e }) });
|
|
360
|
+
}
|
|
361
|
+
function W() {
|
|
362
|
+
return T(Z);
|
|
363
|
+
}
|
|
364
|
+
function Ot() {
|
|
365
|
+
return T(x);
|
|
366
|
+
}
|
|
367
|
+
const ct = w(void 0);
|
|
368
|
+
function F(t) {
|
|
369
|
+
return t ? { "--elm-accent": t } : void 0;
|
|
370
|
+
}
|
|
371
|
+
function $t() {
|
|
372
|
+
const t = W().accentColor, e = T(ut), s = T(ct);
|
|
373
|
+
return $(
|
|
374
|
+
() => e || s ? { ...F(t), ...e, ...s } : F(t),
|
|
375
|
+
[t, e, s]
|
|
376
|
+
);
|
|
377
|
+
}
|
|
378
|
+
function At(t) {
|
|
379
|
+
const e = W().accentColor;
|
|
380
|
+
Q(() => {
|
|
381
|
+
if (!t || !e) return;
|
|
382
|
+
const s = t.closest("[data-elm-theme]") ?? t;
|
|
383
|
+
if (s.style.getPropertyValue("--elm-accent") !== e)
|
|
384
|
+
return s.style.setProperty("--elm-accent", e), () => {
|
|
385
|
+
s.style.getPropertyValue("--elm-accent") === e && s.style.removeProperty("--elm-accent");
|
|
386
|
+
};
|
|
387
|
+
}, [t, e]);
|
|
388
|
+
}
|
|
389
|
+
export {
|
|
390
|
+
H as D,
|
|
391
|
+
Et as E,
|
|
392
|
+
C as L,
|
|
393
|
+
ct as R,
|
|
394
|
+
ot as T,
|
|
395
|
+
ut as a,
|
|
396
|
+
kt as b,
|
|
397
|
+
mt as c,
|
|
398
|
+
vt as d,
|
|
399
|
+
$t as e,
|
|
400
|
+
Ct as f,
|
|
401
|
+
F as g,
|
|
402
|
+
Y as h,
|
|
403
|
+
Lt as i,
|
|
404
|
+
At as j,
|
|
405
|
+
Ot as k,
|
|
406
|
+
wt as l,
|
|
407
|
+
St as m,
|
|
408
|
+
K as r,
|
|
409
|
+
W as u,
|
|
410
|
+
Tt as v,
|
|
411
|
+
rt as w
|
|
412
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const c=require("react"),x=require("react/jsx-runtime"),S=require("@element-editor/core"),E=require("@element-editor/core/internal"),J={attributes:!0,attributeFilter:["style","class","data-elm-theme"]},Q={attributes:!0,attributeFilter:["style","class"]},X={childList:!0,subtree:!0,characterData:!0,attributes:!0,attributeFilter:["href","media","disabled"]},g=new Set(["--elm-panel-offset","--elm-table-offset","--elm-bottom-row-height","--elm-bottom-stack-offset","--elm-bottom-toolbar-offset","--elm-left-center-shift","--elm-right-center-shift"]),N=t=>{if(!(t instanceof HTMLElement))return"";let e=`${t.className}|${t.getAttribute("data-elm-theme")??""}`;for(const s of t.style)!g.has(s)&&!s.startsWith("transition")&&(e+=`;${s}:${t.style.getPropertyValue(s)}`);return e};function V(t,e){const s=u=>{u.target instanceof HTMLLinkElement&&e()};let r=N(t);const n=new MutationObserver(u=>{const i=r;r=N(t),!(r===i&&u.every(m=>m.target===t))&&e()});return t&&n.observe(t,J),n.observe(document.documentElement,Q),n.observe(document.head,X),document.addEventListener("load",s,!0),()=>{n.disconnect(),document.removeEventListener("load",s,!0)}}const K=["--elm-font","--elm-font-mono","--elm-radius","--elm-radius-control","--elm-shadow","--elm-shadow-raised","--elm-shadow-control","--elm-surface","--elm-surface-raised","--elm-surface-sunken","--elm-surface-hover","--elm-control-hover","--elm-text","--elm-text-secondary","--elm-text-muted","--elm-text-subtle","--elm-text-disabled","--elm-border","--elm-border-subtle","--elm-border-strong","--elm-focus-ring","--elm-tooltip","--elm-tooltip-text"],tt=[...K,"--elm-accent",...[50,100,200,300,400,500,600,700,800,900,950].map(t=>`--elm-primary-${t}`)];function P(t){if(!t)return;const e=getComputedStyle(t);let s;for(const r of tt){const n=e.getPropertyValue(r).trim();n&&((s??(s={}))[r]=n)}return s}const et=(t,e)=>{if(t===e)return!0;if(!t||!e)return!1;const s=Object.keys(t);return s.length===Object.keys(e).length&&s.every(r=>t[r]===e[r])};function st(t){const[e,s]=c.useState(void 0);return c.useEffect(()=>{if(!t){s(void 0);return}const r=()=>{const m=P(t);s(a=>et(a,m)?a:m)};let n=0;const u=()=>{n||(n=requestAnimationFrame(()=>{n=0,r()}))};r();const i=V(t,u);return()=>{i(),cancelAnimationFrame(n)}},[t]),e}const B=c.createContext(void 0),D=new WeakMap;function rt(t,e){if(!e)return;const s=(e instanceof HTMLElement?e.className+"|"+e.getAttribute("data-elm-theme")+"|"+(e.getAttribute("style")??""):"")+"|"+document.documentElement.className+"|"+(document.documentElement.getAttribute("style")??""),r=D.get(t);if(r&&r.root===e&&r.key===s)return;const n=P(e)??{};for(const u of(r==null?void 0:r.names)??[])u in n||t.style.removeProperty(u);for(const[u,i]of Object.entries(n))t.style.setProperty(u,i);D.set(t,{root:e,key:s,names:Object.keys(n)})}const ot={point:"place-point",line:"draw-line",polygon:"draw-polygon",route:"draw-route",circle:"draw-circle",rectangle:"draw-rect",freehand:"draw-freehand",picker:"pick-shape",measure:"measure"},T=["topLeft","topCenter","topRight","leftCenter","rightCenter","bottomLeft","bottomCenter","bottomRight","statusLeft","statusRight"],H=t=>(t&&typeof t=="object"&&(Object.values(t).forEach(H),Object.freeze(t)),t),U=H({topCenter:["toolbar"],leftCenter:[{group:["undo","redo"]}],bottomLeft:["basemap","fitBounds","locate","zoomIndicator","table","schema","geojson","settings","keyboard","applyChanges"]});function f(t){const e=[];for(const s of t)s==="separator"&&(e.length===0||e[e.length-1]==="separator")||e.push(s);return e[e.length-1]==="separator"&&e.pop(),e}function nt(t,e,s){switch(t){case"fitBounds":return e.zoomToAll;case"locate":return e.locateButton;case"zoomIndicator":return e.zoomIndicator;case"table":return e.dataTable;case"schema":return e.schemaEditor&&!s.readonly;case"geojson":return e.geojsonEditor;case"settings":return e.settings;case"keyboard":return e.keyboardShortcuts.show;case"applyChanges":return s.canSubmit&&!s.readonly;case"undo":case"redo":return!s.readonly;case"basemap":return s.hasBasemaps;default:return!0}}function at(t,e){const s=[];for(const r of t)if(typeof r=="object"){const n=f(r.group.filter(u=>u==="separator"||e(u)));n.length&&s.push({group:n})}else(r==="separator"||e(r))&&s.push(r);return f(s)}function ut(t){return t===!1?{enabled:!1,show:!1,mapZoom:!1}:t===!0||t===void 0?{enabled:!0,show:!0,mapZoom:!1}:{enabled:t.enabled??!0,show:t.show??!0,mapZoom:t.mapZoom??!1}}const A=new Set(["toolbar","undo","redo","fitBounds","locate","zoomIndicator","table","schema","geojson","settings","keyboard","applyChanges","attribution","basemap"]),O=t=>t==="statusLeft"||t==="statusRight",$=t=>!!t&&typeof t=="object"&&Array.isArray(t.group);function lt(t,e,s){return A.has(t)?(t==="toolbar"||t==="basemap")&&s?`'${t}' can't go in a group`:O(e)&&(t==="toolbar"||t==="applyChanges")?`'${t}' can't go in the status bar`:t==="attribution"&&!O(e)?"'attribution' can only go in statusLeft or statusRight":null:`'${t}' is not a control`}const R=t=>Array.isArray(t)?{items:t}:{items:Array.isArray(t==null?void 0:t.items)?t.items:[],direction:t==null?void 0:t.direction};function Y(t){const e=new Map,s={};for(const r of T){const n=R(t[r]),u=O(r)?"horizontal":n.direction||(r==="leftCenter"||r==="rightCenter"?"vertical":"horizontal"),i=o=>{const l=e.get(o);return l?l===r?`'${o}' is listed twice in ${r}; keeping the first one`:`'${o}' is in both ${l} and ${r}; keeping ${l} (the first in slot order). To move one control without relisting the defaults, use withLayout({ move: { ${o}: '${r}' } })`:null},m=(o,l)=>{const p=o==="separator"?l||O(r)?null:"'separator' only goes inside a group or in the status bar (there's nothing to draw it on over the map); put it inside a { group: [...] }":typeof o!="string"?$(o)?"groups can't be nested":`${JSON.stringify(o)} is not a control, 'separator' or { group: [...] }`:lt(o,r,l)??i(o);return p?(E.warnOnce(`${r}:${p}`,`config.ui.layout.${r}: ${p}. Ignoring it.`),!1):(o!=="separator"&&e.set(o,r),!0)},a=[];for(const o of n.items)if($(o)){const l=f(o.group.filter(p=>m(p,!0)));l.length&&a.push({group:l})}else m(o,!1)&&a.push(o);s[r]={items:f(a),direction:u}}return s}function it(t,e=U){const s=Object.entries(t.move??{}),r=new Set(t.hide??[]);for(const a of[...s.map(([o])=>o),...r])A.has(a)||E.warnOnce(`withLayout:${a}`,`withLayout: '${a}' is not a control. Ignoring it.`);const n=new Set([...r,...s.map(([a])=>a)]),u=a=>!(typeof a=="string"&&n.has(a)),i={},m=(a,o,l)=>{i[a]=Array.isArray(o)||o===void 0?l:{...o,items:l}};for(const a of T){const o=e[a];if(o===void 0)continue;const l=R(o).items.flatMap(p=>{if(!$(p))return u(p)?[p]:[];const h=f(p.group.filter(u));return h.length?[{group:h}]:[]});m(a,o,f(l))}for(const[a,o]of s){if(!A.has(a))continue;if(r.has(a)){E.warnOnce(`withLayout:both:${a}`,`withLayout: '${a}' is both moved and hidden; hiding it.`);continue}const{slot:l,at:p="end"}=typeof o=="string"?{slot:o}:o??{};if(!T.includes(l)){E.warnOnce(`withLayout:slot:${String(l)}`,`withLayout: '${String(l)}' is not a slot (moving '${a}'). Ignoring it.`);continue}const h=i[l],y=[...R(h).items];m(l,h,p==="start"?[a,...y]:[...y,a])}return i}function mt(t,e){const s=new Set(T.flatMap(i=>t[i].items.flatMap(m=>typeof m=="object"?m.group:[m]))),r=[];!e.readonly&&(e.tools===null||e.tools.length>0)&&!s.has("toolbar")&&r.push(`'toolbar' isn't placed, so the drawing tools are ${e.shortcuts?"reachable only by keyboard shortcut":"unreachable"}. Put it in a map slot (withLayout({ move: { toolbar: 'topCenter' } })), or set readonly / tools: [] if that's on purpose`),e.canSubmit&&!e.readonly&&!s.has("applyChanges")&&r.push("onSubmit is set but 'applyChanges' isn't placed, so users can't submit. Place it, or call ref.submit() yourself");const u=["undo","redo"].filter(i=>!s.has(i));return!e.readonly&&!e.shortcuts&&u.length&&r.push(`${u.map(i=>`'${i}'`).join(" and ")} ${u.length>1?"aren't":"isn't"} placed and keyboard shortcuts are off, so users can't ${u.join(" or ")}`),r}const ct={topLeft:"top-left",topCenter:"top-center",topRight:"top-right",leftCenter:"left-center",rightCenter:"right-center",bottomLeft:"bottom-left",bottomCenter:"bottom-center",bottomRight:"bottom-right"};function _(t){var r,n,u,i,m,a,o,l,p,h,y,v,L,d,b,C,M,z;const e=Y(((r=t==null?void 0:t.ui)==null?void 0:r.layout)??U),s=T.find(W=>e[W].items.includes("toolbar"));return{mode:(t==null?void 0:t.mode)??"system",persistKey:(t==null?void 0:t.persistKey)||void 0,persist:(t==null?void 0:t.persist)??!0,network:(t==null?void 0:t.network)??{},accentColor:(t==null?void 0:t.accentColor)||void 0,featureColor:(t==null?void 0:t.featureColor)||void 0,tools:(t==null?void 0:t.tools)??"all",ui:{hints:((n=t==null?void 0:t.ui)==null?void 0:n.hints)??!0,dataTable:((u=t==null?void 0:t.ui)==null?void 0:u.dataTable)??!0,layerList:((i=t==null?void 0:t.ui)==null?void 0:i.layerList)??!0,schemaEditor:((m=t==null?void 0:t.ui)==null?void 0:m.schemaEditor)??!0,geojsonEditor:((a=t==null?void 0:t.ui)==null?void 0:a.geojsonEditor)??!0,geojsonEditorOpen:(((o=t==null?void 0:t.ui)==null?void 0:o.geojsonEditor)??!0)&&(((l=t==null?void 0:t.ui)==null?void 0:l.geojsonEditorOpen)??!1),settings:((p=t==null?void 0:t.ui)==null?void 0:p.settings)??!0,zoomToAll:((h=t==null?void 0:t.ui)==null?void 0:h.zoomToAll)??!0,zoomIndicator:((y=t==null?void 0:t.ui)==null?void 0:y.zoomIndicator)??!0,locateButton:((v=t==null?void 0:t.ui)==null?void 0:v.locateButton)??!0,keyboardShortcuts:ut((L=t==null?void 0:t.ui)==null?void 0:L.keyboardShortcuts),layout:e},toolbar:{position:s&&ct[s]||"top-center",direction:((d=t==null?void 0:t.toolbar)==null?void 0:d.direction)??"horizontal"},units:{length:((b=t==null?void 0:t.units)==null?void 0:b.length)??"auto",area:((C=t==null?void 0:t.units)==null?void 0:C.area)??"auto",display:((M=t==null?void 0:t.units)==null?void 0:M.display)??"human",precision:((z=t==null?void 0:t.units)==null?void 0:z.precision)??2}}}const q=c.createContext(_()),Z=c.createContext({override:{},setUnits:()=>{},resetUnits:()=>{}}),k="elm_units",w=1;function F(t){return t==="metric"||t==="imperial"||t==="auto"}function pt(t){if(!t||typeof t!="object")return null;const e=t,s={};return F(e.length)&&(s.length=e.length),F(e.area)&&(s.area=e.area),(e.display==="human"||e.display==="raw")&&(s.display=e.display),typeof e.precision=="number"&&e.precision>=0&&e.precision<=6&&(s.precision=e.precision),s}function dt({config:t,children:e}){var y,v,L;const s=t==null?void 0:t.persistKey,r=t==null?void 0:t.persist,[n,u]=c.useState(()=>S.readPersisted(k,w,pt,{persistKey:s,persist:r})??{}),i=c.useCallback(d=>{u(b=>{const C=typeof d=="function"?d(b):{...b,...d};return S.writePersisted(k,w,C,{persistKey:s,persist:r}),C})},[s,r]),m=c.useCallback(()=>{u({}),S.writePersisted(k,w,{},{persistKey:s,persist:r})},[s,r]),a=JSON.stringify(t??null),o=c.useRef((y=t==null?void 0:t.network)==null?void 0:y.fetch);o.current=(v=t==null?void 0:t.network)==null?void 0:v.fetch;const l=!!((L=t==null?void 0:t.network)!=null&&L.fetch),p=c.useMemo(()=>{const d=_(t);return l&&(d.network={...d.network,fetch:(b,C)=>o.current(b,C)}),{...d,units:{length:n.length??d.units.length,area:n.area??d.units.area,display:n.display??d.units.display,precision:n.precision??d.units.precision}}},[a,n,l]),h=c.useMemo(()=>({override:n,setUnits:i,resetUnits:m}),[n,i,m]);return x.jsx(q.Provider,{value:p,children:x.jsx(Z.Provider,{value:h,children:e})})}function I(){return c.useContext(q)}function ht(){return c.useContext(Z)}const G=c.createContext(void 0);function j(t){return t?{"--elm-accent":t}:void 0}function yt(){const t=I().accentColor,e=c.useContext(B),s=c.useContext(G);return c.useMemo(()=>e||s?{...j(t),...e,...s}:j(t),[t,e,s])}function bt(t){const e=I().accentColor;c.useLayoutEffect(()=>{if(!t||!e)return;const s=t.closest("[data-elm-theme]")??t;if(s.style.getPropertyValue("--elm-accent")!==e)return s.style.setProperty("--elm-accent",e),()=>{s.style.getPropertyValue("--elm-accent")===e&&s.style.removeProperty("--elm-accent")}},[t,e])}exports.DEFAULT_LAYOUT=U;exports.ElementEditorConfigProvider=dt;exports.LAYOUT_SLOTS=T;exports.RootCssVarsContext=G;exports.RootTokensContext=B;exports.THEME_TOKENS=K;exports.TOOL_MODES=ot;exports.accentStyle=j;exports.applyRootTokens=rt;exports.isControlVisible=nt;exports.layoutGaps=mt;exports.readRootTokens=P;exports.resolveConfig=_;exports.resolveLayout=Y;exports.useAccentStyle=yt;exports.useApplyAccentToRoot=bt;exports.useElementEditorConfig=I;exports.useRootTokens=st;exports.useUnitsOverride=ht;exports.visibleLayoutEntries=at;exports.watchThemeInputs=V;exports.withLayout=it;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const n=require("react"),k=require("@element-editor/core"),C=require("@element-editor/core/internal"),U=require("./useAccentStyle-hsGvyHZc.cjs"),I=require("react/jsx-runtime"),me=require("zustand"),B=require("sonner"),ne=n.createContext("light"),ge=()=>n.useContext(ne),pe=n.createContext(null),he=n.createContext(null);function Oe({children:e}){const[t,s]=n.useState("light"),[a,c]=n.useState(void 0);return I.jsx(pe.Provider,{value:s,children:I.jsx(he.Provider,{value:c,children:I.jsx(ne.Provider,{value:t,children:I.jsx(U.RootTokensContext.Provider,{value:a,children:e})})})})}function Te(e){const t=n.useContext(pe),s=n.useContext(he),a=U.useRootTokens(s&&e?e.closest("[data-elm-theme]"):null);n.useLayoutEffect(()=>{s==null||s(a)},[s,a]),n.useLayoutEffect(()=>{if(!t||!e)return;const c=e.closest("[data-elm-theme]");if(!c){C.warnOnce("adapter-no-theme-root",'The map container is not inside an element with a `data-elm-theme` attribute, so the editor UI renders unstyled and keyboard shortcuts are off. Wrap the map and the editor UI in one element: <div data-elm-theme="light" style={{ position: \'relative\', height: 600 }}>…</div> ("dark" for dark mode).');return}const l=()=>t(c.getAttribute("data-elm-theme")==="dark"?"dark":"light");l();const u=new MutationObserver(l);return u.observe(c,{attributes:!0,attributeFilter:["data-elm-theme"]}),()=>u.disconnect()},[t,e])}const Fe={success:null,info:null,warning:null,error:null},Re="ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji",Ie={light:{"--normal-bg":"var(--elm-surface, #ffffff)","--normal-border":"var(--elm-border, rgb(0 0 0 / 0.1))","--normal-text":"var(--elm-text, #171717)"},dark:{"--normal-bg":"var(--elm-surface, #171717)","--normal-border":"var(--elm-border, rgb(255 255 255 / 0.1))","--normal-text":"var(--elm-text, #fafafa)"}},Ne={"--border-radius":"calc(var(--elm-radius-control, 6px) + 2px)",fontFamily:`var(--elm-font, ${Re})`},$e={light:"!text-(--elm-text-muted,#737373)",dark:"!text-(--elm-text-muted,#a3a3a3)"};function Se(e){var l,u,h;const t=ge(),s=U.useAccentStyle(),{toastOptions:a,style:c}=e;return I.jsx(B.Toaster,{theme:t,icons:Fe,...e,style:{...s,...Ie[t],...Ne,...c},toastOptions:{...a,classNames:{...a==null?void 0:a.classNames,toast:`!p-[11px] ${((l=a==null?void 0:a.classNames)==null?void 0:l.toast)??""}`,title:`!font-normal ${((u=a==null?void 0:a.classNames)==null?void 0:u.title)??""}`,description:`${$e[t]} ${((h=a==null?void 0:a.classNames)==null?void 0:h.description)??""}`}}})}const je=new Set(["feature:broken","selection:copied","selection:pasted","error","warning","success"]);function Ae(e){switch(e.type){case"feature:deleted":return`Deleted "${e.label}"`;case"features:deleted":return`Deleted ${e.count} features`;case"feature:duplicated":return`Duplicated "${e.label}"`;case"features:duplicated":return`Duplicated ${e.count} features`;case"feature:broken":return`Broken into ${e.count} features`;case"selection:copied":return"Selection copied";case"selection:pasted":return e.count===1?"Feature pasted":`${e.count} features pasted`;case"undo":return"Undone";case"redo":return"Redone";case"error":return e.message;case"warning":return e.message;case"success":return e.message;default:return null}}const J=n.createContext(null),ye=n.createContext(null);function Me({onEvent:e,onError:t,toaster:s=!1,children:a}){const c=n.useRef(e);c.current=e;const l=n.useRef(t);l.current=t;const u=n.useContext(J),h=n.useRef(u);h.current=u;const[y,T]=n.useState(""),b=n.useRef(!!e),w=n.useRef(!!u&&!e&&!s),N=n.useId(),d=s&&!b.current?`elm-toaster-${N}`:void 0,p=w.current?u==null?void 0:u.toasterId:d,_=b.current||w.current&&!!(u!=null&&u.managed),x=n.useCallback($=>{var A;let g=$;if($.type==="error"){const{cause:D,featureId:M,quiet:L,error:q,...v}=$,Z=q??new k.ElementEditorError(v.code,v.source,v.description?`${v.message}: ${v.description}`:v.message,{cause:D,featureId:M});let F;try{F=(A=l.current)==null?void 0:A.call(l,Z)}catch(G){console.error(G)}if(F===!1||L)return;g=typeof F=="string"?{...v,message:F,description:void 0}:{...v,error:Z}}if(w.current&&h.current){h.current.emit(g);return}if(g.type==="error"){const{error:D,...M}=g;g=M}const j=Ae(g);if(j&&(c.current||!je.has(g.type))&&(T(""),requestAnimationFrame(()=>T(j))),c.current){c.current(g);return}const E={toasterId:p,description:g.description};switch(g.type){case"feature:deleted":case"features:deleted":case"feature:duplicated":case"features:duplicated":break;case"feature:broken":B.toast.success(`Broken into ${g.count} features`,{...E,action:{label:"Undo",onClick:g.undo},duration:5e3});break;case"selection:copied":B.toast.success("Copied selection",E);break;case"selection:pasted":B.toast.success(g.count===1?"Pasted feature":`Pasted ${g.count} features`,E);break;case"undo":case"redo":break;case"error":B.toast.error(g.message,E);break;case"warning":B.toast.warning(g.message,E);break;case"success":B.toast.success(g.message,E);break}},[p]),P=n.useContext(ye);n.useEffect(()=>{if(P)return P(($,g)=>x({type:"error",code:$.code,source:$.source,message:$.message,error:$,quiet:g==null?void 0:g.quiet})),()=>P(null)},[P,x]);const z=n.useMemo(()=>({emit:x,managed:_,toasterId:p}),[x,_,p]);return I.jsxs(J.Provider,{value:z,children:[a,d&&I.jsx(Se,{id:d,position:"bottom-right"}),I.jsx("div",{"aria-live":"polite","aria-atomic":"true",role:"status",style:{position:"absolute",width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:0},children:y})]})}function be(){const e=n.useContext(J);if(!e)throw new Error("useEmit must be used within EventProvider");return e.emit}function Pe(){var e;return((e=n.useContext(J))==null?void 0:e.managed)??!1}function De(){var e;return(e=n.useContext(J))==null?void 0:e.toasterId}function Ge(){var e;return(e=n.useContext(J))==null?void 0:e.emit}const ee=new WeakSet,K=n.createContext(null);function Ue({children:e}){var y;const t=n.useRef(null),s=n.useRef(null),a=(y=n.useContext(J))==null?void 0:y.emit,c=n.useRef(a);c.current=a;const l=n.useCallback(T=>{s.current=T},[]),u=U.useElementEditorConfig(),h=u.ui.geojsonEditorOpen;if(!t.current){const T=(d,p)=>{s.current?s.current(d,p):c.current?c.current({type:"error",code:d.code,source:d.source,message:d.message,error:d,quiet:p==null?void 0:p.quiet}):p!=null&&p.quiet||B.toast.error(d.message)},b={persistKey:u.persistKey,persist:u.persist},w=k.createDataStore({onError:T,persist:b}),N=k.createUIStore(w,{onError:T,persist:b});if(h){N.setState({codeModalOpen:!0}),ee.add(N);const d=N.subscribe(p=>{p.codeModalOpen||(ee.delete(N),d())})}t.current={dataStore:w,uiStore:N}}return I.jsx(K.Provider,{value:t.current,children:I.jsx(ye.Provider,{value:l,children:e})})}function we(e){const t=n.useContext(K);if(!t)throw new Error("useDataStore must be used within GeoStoreProvider");return me.useStore(t.dataStore,e)}function W(e){const t=n.useContext(K);if(!t)throw new Error("useUIStore must be used within GeoStoreProvider");return me.useStore(t.uiStore,e)}function oe(){const e=n.useContext(K);if(!e)throw new Error("useGeoStore must be used within GeoStoreProvider");return e}const Ee=n.createContext({flyTo:null,panTo:null,fitBounds:null,getCenter:null,setZoom:null,getZoomBounds:null}),Ce=()=>{},te=n.createContext(Ce);function Je({children:e}){const[t,s]=n.useState({flyTo:null,panTo:null,fitBounds:null,getCenter:null,setZoom:null,getZoomBounds:null});return n.useContext(te)!==Ce?I.jsx(I.Fragment,{children:e}):I.jsx(te.Provider,{value:s,children:I.jsx(Ee.Provider,{value:t,children:e})})}function ae(){return n.useContext(Ee)}function Le(){return n.useContext(te)}function se(e,t="features.geojson"){const s=t.toLowerCase().endsWith(".geojson")?t:`${t}.geojson`,a=new Blob([e],{type:"application/geo+json"}),c=URL.createObjectURL(a),l=document.createElement("a");return l.href=c,l.download=s,l.rel="noopener",document.body.appendChild(l),l.click(),document.body.removeChild(l),URL.revokeObjectURL(c),{name:s,bytes:a.size}}async function Be(e,t="features.geojson"){const s=t.toLowerCase().endsWith(".geojson")?t:`${t}.geojson`,a=new Blob([e],{type:"application/geo+json"}),c=window;if(typeof c.showSaveFilePicker=="function")try{const l=await c.showSaveFilePicker({suggestedName:s,types:[{description:"GeoJSON",accept:{"application/geo+json":[".geojson",".json"]}}]}),u=await l.createWritable();return await u.write(a),await u.close(),{name:l.name||s,bytes:a.size}}catch(l){if(l instanceof Error&&l.name==="AbortError")return null}return se(e,t),null}async function _e(e,t,s){let a;try{a=await e.text()}catch(l){return{ok:!1,code:"unknown",reason:"The file could not be read",cause:l}}const c=k.parseGeoJSONText(a);if(!c.ok){const l=c.error;return l.kind==="too-large"?{ok:!1,code:"too-large",reason:`The file is over the ${Math.round(l.maxBytes/1024/1024)} MB import limit`}:l.kind==="invalid-json"?{ok:!1,code:"invalid-data",reason:`Not valid JSON (${l.cause.message})`,cause:l.cause}:{ok:!1,code:"invalid-data",reason:"Not a FeatureCollection"}}try{const{skipped:l,duplicates:u}=t(c.fc,"replace");return{ok:!0,count:s(),skipped:l,duplicates:u}}catch(l){return{ok:!1,code:"invalid-data",reason:l instanceof Error?l.message:"Not a FeatureCollection",cause:l}}}function qe(){const{dataStore:e,uiStore:t}=oe(),s=be(),{fitBounds:a}=ae();return n.useCallback(async c=>{if(t.getState().readonly)return;if(!/\.(geo)?json$/i.test(c.name)&&!/json/i.test(c.type)){s({type:"error",code:"invalid-data",source:"import",message:"Import failed",description:`${c.name} is not a .geojson or .json file`});return}const l=e.getState(),u=await _e(c,l.importGeoJSON,()=>e.getState().features.length);if(!u.ok){s({type:"error",code:u.code,source:"import",message:"Import failed",description:u.reason,cause:u.cause});return}const{features:h,schemas:y,groups:T}=e.getState(),b=k.getFeatureCollectionBBox({type:"FeatureCollection",metadata:{schemas:y,groups:T},features:h});b&&(a==null||a(b)),s({type:"success",message:`Loaded ${c.name}`,description:u.count===1?"1 feature":`${u.count} features`});const w=u.skipped+u.duplicates;w>0&&s({type:"warning",message:`Skipped ${w===1?"1 feature":`${w} features`} from ${c.name}`,description:[u.skipped>0&&`${u.skipped} with a missing or unsupported geometry`,u.duplicates>0&&`${u.duplicates} with a repeated id`].filter(Boolean).join(", ")})},[e,t,s,a])}const Ze=400,ve="https://nominatim.openstreetmap.org/search",ze='Geocoding by <a href="https://nominatim.org/" target="_blank" rel="noopener">Nominatim</a>';function He(e){return e instanceof k.ElementEditorError?e:e instanceof SyntaxError?new k.ElementEditorError("invalid-data","search","Search service sent an answer that could not be read. Try again later.",{cause:e}):new k.ElementEditorError("network","search","Search unavailable. Check your connection.",{cause:e})}function We(e){const t=C.httpErrorCode(e),s=t==="rate-limited"?"Too many searches — wait a moment and try again.":t==="busy"?"Search service is busy — try again in a moment.":`Search failed (HTTP ${e}). Try again later.`;return new k.ElementEditorError(t,"search",s)}function Ke(e){var _;const[t,s]=n.useState([]),[a,c]=n.useState(!1),[l,u]=n.useState(null),h=n.useRef(null),y=n.useRef(null),T=(_=n.useContext(J))==null?void 0:_.emit,b=n.useRef(T);b.current=T;const{network:w}=U.useElementEditorConfig(),N=n.useRef(w);N.current=w;const d=n.useRef(null);n.useEffect(()=>{const x=e.trim();if(x.length<2){s([]),c(!1),u(null);return}c(!0),u(null),y.current&&clearTimeout(y.current);const P=async()=>{var z,$;d.current=null,y.current&&clearTimeout(y.current),(z=h.current)==null||z.abort(),h.current=new AbortController;try{const{nominatim:g,fetch:j=fetch}=N.current,E=g||{},A=new URLSearchParams({q:x,format:"json",limit:"6",addressdetails:"0",polygon_geojson:"1",...E.email&&{email:E.email}}),D=E.url??ve,M=await j(`${D}${D.includes("?")?"&":"?"}${A}`,{signal:h.current.signal});if(!M.ok)throw We(M.status);const L=await M.json(),q=new Set,v=new Set,Z=L.filter(F=>{const G=`${F.lat},${F.lon}`;return q.has(F.display_name)||v.has(G)?!1:(q.add(F.display_name),v.add(G),!0)});s(Z),u(null)}catch(g){if(g instanceof Error&&g.name==="AbortError")return;const j=He(g);u(j.message),($=b.current)==null||$.call(b,{type:"error",code:j.code,source:"search",message:j.message,error:j,quiet:!0}),s([])}finally{c(!1)}};return d.current=P,y.current=setTimeout(P,Ze),()=>{d.current=null,y.current&&clearTimeout(y.current)}},[e]),n.useEffect(()=>()=>{var x;(x=h.current)==null||x.abort(),y.current&&clearTimeout(y.current)},[]);const p=n.useCallback(()=>{var x;(x=d.current)==null||x.call(d)},[]);return{results:t,loading:a,error:l,flush:p}}const ie=(e,t)=>Object.is(e,t)||Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((s,a)=>Object.is(s,t[a]));function ke(e,t){return[...e.routing===!1?["route"]:[],...e.nominatim===!1?["search"]:[],...e.overpass===!1&&t==="leaflet"?["picker"]:[]]}function H(e,t,s){const a=n.useRef({has:!1,value:e});a.current.has||(a.current={has:!0,value:e},e!==void 0&&!ie(s(),e)&&t(e)),n.useLayoutEffect(()=>{ie(a.current.value,e)||(a.current={has:!0,value:e},t(e))})}const Ve=["properties","geometry","schemaId","hidden"];function le(e,t){const s=e;if(!s||typeof s!="object")return C.warnOnce(`ref-${t}-patch`,`${t}: a patch must be an object; it was skipped.`),null;const a={};for(const c of Ve)s[c]!==void 0&&(a[c]=s[c]);return a.geometry!==void 0&&!k.isGeometry(a.geometry)?(C.warnOnce(`ref-${t}-geometry`,`${t}: patch.geometry is not a valid GeoJSON geometry; the patch was skipped.`),null):a.properties!==void 0&&(typeof a.properties!="object"||a.properties===null||Array.isArray(a.properties))?(C.warnOnce(`ref-${t}-properties`,`${t}: patch.properties must be an object; the patch was skipped.`),null):a}function Q(e,t){C.warnOnce(`ref-${e}-unknown`,`${e}: no feature with id ${t.slice(0,3).map(s=>JSON.stringify(s)).join(", ")}${t.length>3?", …":""}; skipped.`)}function re(e){const{_validation:t,...s}=e;return s}function Ye(e,t){const s=new Map(e.features.map(u=>[u.id,u])),a=new Set(e.groups.filter(u=>u.hidden).map(u=>u.id)),c=[],l=[];for(const u of new Set(t)){const h=s.get(u);h&&!h.hidden&&!(h.groupId&&a.has(h.groupId))?c.push(h):l.push(u)}return{keep:c,dropped:l}}function Qe(e){const t=e;return(t==null?void 0:t.type)==="Feature"?{type:"FeatureCollection",features:[t]}:t}const Xe=Object.fromEntries(Object.entries(U.TOOL_MODES).map(([e,t])=>[t,e])),X=e=>Xe[e]??null;function de(e){const t=new Map(e.schemas.map(c=>[c.id,c])),s=e.schemas[0]??e.getDefaultSchema(),a={};for(const c of e.features){const l=c.schemaId&&t.get(c.schemaId)||s,u=k.validateFeature(c,l).errors;u.length>0&&(a[c.id]=u)}return a}function fe(e){return{type:"FeatureCollection",metadata:{schemas:e.schemas,groups:e.groups},features:e.features.map(re)}}const et=e=>e.features.length===0&&e.undoStack.length===0&&e.redoStack.length===0;function tt(e,t){if(e===t)return!0;const s=e==null?void 0:e.features,a=t==null?void 0:t.features;return!Array.isArray(s)||!Array.isArray(a)?!1:s===a||s.length===a.length&&s.every((c,l)=>{var u;return(c==null?void 0:c.id)===((u=a[l])==null?void 0:u.id)})}function rt(e){const{initialData:t,schema:s,onChange:a,onSubmit:c,onValidationError:l,onFeatureAdd:u,onFeatureUpdate:h,onFeatureDelete:y,onSelectionChange:T,onFeatureSelect:b,onZoomChange:w,onToolChange:N}=e,{dataStore:d,uiStore:p}=oe(),_=W(r=>r.setReadonly),x=W(r=>r.setEnabledTools),P=we(r=>r.setMaxFeatures),z=W(r=>r.setLayout),$=W(r=>r.setUnavailableTools),{network:g}=U.useElementEditorConfig(),j=ae(),E=n.useRef(j);E.current=j;const A=n.useRef(!1),D=n.useRef({});D.current={onChange:a,onFeatureAdd:u,onFeatureUpdate:h,onFeatureDelete:y,onSelectionChange:T},n.useEffect(()=>k.subscribeToDataChanges(d,()=>A.current?{onSelectionChange:D.current.onSelectionChange}:D.current),[d]),H(e.readonly,r=>_(r??!1),()=>p.getState().readonly),H(e.tools,r=>x(r??null),()=>p.getState().enabledTools),H(e.maxFeatures,P,()=>d.getState().maxFeatures),H(e.layout,r=>z(r??"panel"),()=>p.getState().layout),H(e.engine&&ke(g,e.engine),r=>$(r??[]),()=>p.getState().unavailableTools),n.useEffect(()=>{s&&d.setState(r=>r.schemas.find(o=>o.id===s.id)?r:{schemas:[...r.schemas,s]})},[s,d]);const M=(r,o)=>{o!==0&&p.getState().reportError(new k.ElementEditorError("invalid-data","import",`${o} feature${o===1?"":"s"} in ${r} had no usable geometry (null or an unknown type) and ${o===1?"was":"were"} left out.`))},L=n.useRef(!1),q=n.useRef(t),v=n.useRef(e.onInitialDataApplied);v.current=e.onInitialDataApplied;const Z=(r,o)=>{var f;const i=Qe(r);A.current=!0;try{const{skipped:m}=d.getState().importGeoJSON(i,"replace",{undoable:!1});A.current=!1,M("initialData",m),L.current=d.getState().features.length>0,(f=v.current)==null||f.call(v,i,o)}catch(m){const S=`initialData is not a valid FeatureCollection (${m instanceof Error?m.message:String(m)}). The editor started empty.`;console.error(`[element-editor] ${S}`),p.getState().reportError(new k.ElementEditorError("invalid-data","import",S,{cause:m}))}finally{A.current=!1}};n.useEffect(()=>{t&&Z(t,!1)},[]),n.useEffect(()=>{const r=q.current;if(tt(r,t)||(q.current=t,!t&&!L.current))return;if(t&&!L.current&&et(d.getState())){Z(t,!0);return}const o=L.current||!t;C.warnOnce(o?"initialData-changed":"initialData-after-edit",o?"`initialData` changed after the editor loaded its data; the change was ignored (`initialData` is the starting data). To replace the data, call `ref.current.setFeatureCollection(data, { silent: true })`, or remount the editor with a new `key` (e.g. key={projectId}).":"`initialData` arrived after the user started editing; it was ignored so their edits are kept. Render the editor once the data is there, call `ref.current.setFeatureCollection(data, { silent: true })`, or remount it with a new `key`.")},[t]);const F=n.useRef(c),G=n.useRef(l),V=n.useRef(w),ce=n.useRef(b);n.useEffect(()=>{F.current=c},[c]),n.useEffect(()=>{G.current=l},[l]),n.useEffect(()=>{V.current=w},[w]),n.useEffect(()=>{ce.current=b},[b]),n.useEffect(()=>d.subscribe((r,o)=>{var i;r.currentZoom!==o.currentZoom&&((i=V.current)==null||i.call(V,r.currentZoom))}),[d]),n.useEffect(()=>d.subscribe((r,o)=>{const i=ce.current;if(!i)return;const f=r.selectedIds.length===1?r.selectedIds[0]:null,m=o.selectedIds.length===1?o.selectedIds[0]:null,S=f?r.features.find(O=>O.id===f)??null:null,R=m?o.features.find(O=>O.id===m)??null:null;S!==R&&i(S)}),[d]);const Y=n.useRef(N);return Y.current=N,n.useEffect(()=>p.subscribe((r,o)=>{var f;if(r.editingMode===o.editingMode)return;const i=X(r.editingMode);i!==X(o.editingMode)&&((f=Y.current)==null||f.call(Y,i))}),[p]),n.useMemo(()=>({getFeatureCollection:()=>fe(d.getState()),getFeature:r=>{const o=d.getState().features.find(i=>i.id===r);return o?re(o):null},setFeatureCollection:(r,o)=>{A.current=!!(o!=null&&o.silent);try{const{skipped:i}=d.getState().importGeoJSON(r,"replace",{undoable:(o==null?void 0:o.undoable)!==!1});M("the data passed to setFeatureCollection",i)}finally{A.current=!1}},exportGeoJSON:()=>d.getState().exportGeoJSON(),exportAs:r=>{r==="geojson"&&se(d.getState().exportGeoJSON())},importGeoJSON:(r,o="replace")=>d.getState().importGeoJSON(r,o),updateFeatures:(r,o)=>{if(!Array.isArray(r)){C.warnOnce("ref-updateFeatures-array","updateFeatures: expected an array of { id, patch }.");return}const i=d.getState(),f=new Set(i.features.map(R=>R.id)),m=[],S=[];for(const R of r){const O=le(R==null?void 0:R.patch,"updateFeatures");if(O){if(!f.has(R.id)){S.push(String(R.id));continue}m.push({id:R.id,patch:O})}}S.length&&Q("updateFeatures",S),m.length&&i.updateFeatures(m,{undoable:(o==null?void 0:o.undoable)??!0})},addFeature:(r,o)=>{const i=r;if(!i||typeof i!="object"||!k.isGeometry(i.geometry))return C.warnOnce("ref-addFeature-geometry","addFeature: the feature needs a valid GeoJSON geometry; nothing was added."),null;const f=d.getState(),m=i.id!==void 0&&i.id!==null&&String(i.id)!==""?String(i.id):crypto.randomUUID();if(f.features.some(xe=>xe.id===m))return C.warnOnce("ref-addFeature-duplicate",`addFeature: a feature with id ${JSON.stringify(m)} already exists; nothing was added.`),null;const{_validation:S,bbox:R,...O}=i,ue=f.addFeature({...O,type:"Feature",id:m,properties:i.properties??{}},{programmatic:!0,undoable:o==null?void 0:o.undoable});return ue&&re(ue)},updateFeature:(r,o,i)=>{const f=le(o,"updateFeature");if(!f)return!1;const m=d.getState();return m.features.some(S=>S.id===r)?(m.updateFeatures([{id:r,patch:f}],{undoable:(i==null?void 0:i.undoable)??!0}),!0):(Q("updateFeature",[String(r)]),!1)},removeFeatures:(r,o)=>{if(!Array.isArray(r))return C.warnOnce("ref-removeFeatures-array","removeFeatures: expected an array of ids."),0;const i=d.getState(),f=new Set(i.features.map(S=>S.id)),m=r.filter(S=>!f.has(S));return m.length&&Q("removeFeatures",m.map(String)),i.deleteFeatures(r,{undoable:o==null?void 0:o.undoable})},getSelection:()=>[...d.getState().selectedIds],select:(r,o)=>{var S,R;if(!Array.isArray(r)){C.warnOnce("ref-select-array","select: expected an array of feature ids.");return}const i=d.getState(),{keep:f,dropped:m}=Ye(i,r);if(m.length&&C.warnOnce("ref-select-dropped",`select: left out ${m.slice(0,3).map(O=>JSON.stringify(O)).join(", ")}${m.length>3?", …":""}: unknown ids or hidden features (a group id isn't selectable; select its features).`),f.length===0?i.clearSelection():f.length===1?i.selectFeature(f[0].id):i.setSelection(f.map(O=>O.id)),o!=null&&o.fit&&f.length>0){const O=k.getFeatureCollectionBBox({type:"FeatureCollection",features:f});O&&((R=(S=E.current).fitBounds)==null||R.call(S,O))}},setTool:r=>{const o=p.getState();if(r===null)return o.setEditingMode("none"),!0;const i=r!=="search"&&Object.prototype.hasOwnProperty.call(U.TOOL_MODES,r)?U.TOOL_MODES[r]:null;return i?o.readonly&&r!=="measure"?(C.warnOnce("ref-setTool-readonly",`setTool(${JSON.stringify(r)}): the editor is readonly; only 'measure' is available.`),!1):o.isToolAvailable(r)?o.editingMode===i?!0:r!=="measure"&&!d.getState().canAddFeatures(1)?!1:(o.setEditingMode(i),!0):(C.warnOnce(`ref-setTool-disabled-${r}`,`setTool: ${JSON.stringify(r)} is not in the \`tools\` list${o.unavailableTools.includes(r)?" (config.network turns it off)":""}.`),!1):(C.warnOnce(`ref-setTool-${String(r)}`,`setTool: ${JSON.stringify(r)} is not a drawing tool${r==="search"?" (search is a box in the toolbar, not a tool)":""}.`),!1)},getTool:()=>X(p.getState().editingMode),canUndo:()=>d.getState().undoStack.length>0,canRedo:()=>d.getState().redoStack.length>0,validate:()=>{const r=de(d.getState());return{valid:Object.keys(r).length===0,errors:r}},getMap:()=>{var r,o;return((o=(r=E.current).getMap)==null?void 0:o.call(r))??null},flyTo:(r,o)=>{var f,m;const i=C.normalizeFlyToTarget(r,o);i&&((m=(f=E.current).flyTo)==null||m.call(f,[i.center[1],i.center[0]],i.zoom))},setZoom:r=>{const o=E.current.setZoom;return o?(o(r),!0):!1},fitBounds:r=>{var o,i;return(i=(o=E.current).fitBounds)==null?void 0:i.call(o,r)},submit:()=>{var i,f;const r=d.getState(),o=de(r);return Object.keys(o).length>0?((i=G.current)==null||i.call(G,o),!1):((f=F.current)==null||f.call(F,fe(r)),!0)},undo:()=>d.getState().undo(),redo:()=>d.getState().redo(),clearSelection:()=>d.getState().clearSelection()}),[d,p])}exports.ElementToaster=Se;exports.EventContext=J;exports.EventProvider=Me;exports.GeoStoreProvider=Ue;exports.MapControllerProvider=Je;exports.NOMINATIM_ATTRIBUTION=ze;exports.NOMINATIM_URL=ve;exports.StoreContext=K;exports.ThemeContext=ne;exports.ThemeReportingProvider=Oe;exports.inspectorOpenedOnLoad=ee;exports.networkUnavailableTools=ke;exports.saveGeoJSONFile=Be;exports.triggerGeoJSONDownload=se;exports.useAdapterControls=rt;exports.useDataStore=we;exports.useEmit=be;exports.useGeoJSONFileImport=qe;exports.useGeoStore=oe;exports.useIsManaged=Pe;exports.useMapController=ae;exports.useNominatim=Ke;exports.useOptionalEmit=Ge;exports.useReportThemeFromRoot=Te;exports.useSetMapController=Le;exports.useTheme=ge;exports.useToasterId=De;exports.useUIStore=W;
|