@element-editor/ui 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/AGENTS.md +1 -1
  2. package/dist/{BooleanOperations-oF0WybQP.js → BooleanOperations-CUQDHcha.js} +2 -2
  3. package/dist/{BooleanOperations-WXcmW9Vy.cjs → BooleanOperations-DrQS-3mJ.cjs} +1 -1
  4. package/dist/{DataTable-CNfB01y2.cjs → DataTable-BPtIbZh4.cjs} +1 -1
  5. package/dist/{DataTable-DNmjUwka.js → DataTable-Ce5P1HaO.js} +4 -4
  6. package/dist/{DataTablePanel-rWdaQubk.js → DataTablePanel-DqS1lhWv.js} +2 -2
  7. package/dist/{DataTablePanel-BknCxC1K.cjs → DataTablePanel-PH5qtwrD.cjs} +1 -1
  8. package/dist/EditToolbarBtn-Ch9HCLHq.cjs +3 -0
  9. package/dist/{EditToolbarBtn-SZIsnIn3.js → EditToolbarBtn-SR4xHd8G.js} +39 -39
  10. package/dist/{FeatureEditModal-CM6BObUO.cjs → FeatureEditModal-BNil19oc.cjs} +1 -1
  11. package/dist/{FeatureEditModal-BF-fGhVD.js → FeatureEditModal-DvdBiMck.js} +2 -2
  12. package/dist/{FeatureList-CQb2kTrV.js → FeatureList-DJTd3gEU.js} +2 -2
  13. package/dist/{FeatureList-Csr-anLA.cjs → FeatureList-F3BgjXro.cjs} +1 -1
  14. package/dist/{FeatureRowContextMenu-Gwq3OMEA.cjs → FeatureRowContextMenu-Bw9Z6mpN.cjs} +1 -1
  15. package/dist/{FeatureRowContextMenu-BLt7VlUU.js → FeatureRowContextMenu-Dlsk7erC.js} +2 -2
  16. package/dist/{GeoJSONModal-BPFWeaLZ.js → GeoJSONModal-BhHkqLAR.js} +3 -3
  17. package/dist/{GeoJSONModal-iwUcvrg7.cjs → GeoJSONModal-D6JBr9FA.cjs} +1 -1
  18. package/dist/{SchemaEditor-qkoYMg0C.cjs → SchemaEditor-B4L17K1e.cjs} +1 -1
  19. package/dist/{SchemaEditor-BEsKUe2p.js → SchemaEditor-ryoTgaLb.js} +1 -1
  20. package/dist/{SchemaModal-GrtgA7cH.cjs → SchemaModal-5F0HBHGS.cjs} +1 -1
  21. package/dist/{SchemaModal-9nNrgorr.js → SchemaModal-CI5i_Kxh.js} +3 -3
  22. package/dist/{SettingsModal-DTP0Xx_Z.js → SettingsModal-4OuBLPyW.js} +2 -2
  23. package/dist/{SettingsModal-6_qmRyCi.cjs → SettingsModal-au03oFaJ.cjs} +1 -1
  24. package/dist/{ShortcutsModal-CdyQlrqK.cjs → ShortcutsModal-DBE-gSUi.cjs} +1 -1
  25. package/dist/{ShortcutsModal-DwxZu71W.js → ShortcutsModal-jGmjontP.js} +3 -3
  26. package/dist/contexts/ElementEditorConfigContext.d.cts +1 -1
  27. package/dist/contexts/ElementEditorConfigContext.d.ts +1 -1
  28. package/dist/element-editor-ui.cjs +1 -1
  29. package/dist/element-editor-ui.es.js +2 -2
  30. package/dist/index-mfb91TEp.cjs +1 -0
  31. package/dist/{index-CtZterPc.js → index-rT-R0kyV.js} +947 -907
  32. package/dist/primitives.cjs +1 -1
  33. package/dist/primitives.es.js +1 -1
  34. package/dist/{useWindowFocus-D-_yEm_V.cjs → useWindowFocus-CRWNNxOL.cjs} +1 -1
  35. package/dist/{useWindowFocus-DGAWA1au.js → useWindowFocus-CroxgGOo.js} +1 -1
  36. package/package.json +2 -2
  37. package/dist/EditToolbarBtn-dpCmKnzk.cjs +0 -3
  38. package/dist/index-BKdDZ4Y9.cjs +0 -1
@@ -0,0 +1 @@
1
+ "use strict";var ar=Object.defineProperty;var ir=(r,t,n)=>t in r?ar(r,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):r[t]=n;var nt=(r,t,n)=>ir(r,typeof t!="symbol"?t+"":t,n);const l=require("react"),d=require("./useAdapterControls-BBObhzVX.cjs"),e=require("react/jsx-runtime"),Q=require("./useAccentStyle-hsGvyHZc.cjs"),$=require("@element-editor/core/internal"),Z=require("@element-editor/core"),F=require("@phosphor-icons/react"),lr=require("zustand/react/shallow"),D=require("./EditToolbarBtn-Ch9HCLHq.cjs"),te=require("clsx"),ft=require("react-dom"),cr=require("@turf/centroid"),ur=require("@turf/helpers"),mt=require("@turf/bbox");function se(r){let t=null,n=null;const s=()=>t??(t=r().then(a=>(n=a.default,a))),o=l.lazy(s);function f(a){const[p]=l.useState(()=>n??o);return l.createElement(p,a)}return Object.assign(f,{preload:s})}const pt=[];function Me(...r){for(const t of r)pt.push(t.preload)}let ot=!1;function dr(){if(ot||typeof window>"u")return;ot=!0;const r=()=>{for(const n of pt)n().catch(()=>{})},t=window.requestIdleCallback;t?t(r,{timeout:3e3}):setTimeout(r,1500)}const Ue=l.createContext(null);function ht({children:r}){const t=Q.useElementEditorConfig(),[n,s]=l.useState(()=>{const c=$.loadCustomBindings(t);return $.syncShortcutCache(c),c}),o=l.useCallback(c=>$.getEffectiveKey(c,n),[n]),f=l.useCallback((c,x)=>{const h=$.findConflict(x,c,n);if(h)return h;const y={...n,[c]:x};return s(y),$.saveCustomBindings(y,t),$.syncShortcutCache(y),null},[n,t]),a=l.useCallback(c=>{const x={...n};delete x[c],s(x),$.saveCustomBindings(x,t),$.syncShortcutCache(x)},[n,t]),p=l.useCallback(()=>{s({}),$.saveCustomBindings({},t),$.syncShortcutCache({})},[t]);return e.jsx(Ue.Provider,{value:{custom:n,getKey:o,setKey:f,resetKey:a,resetAll:p},children:r})}function fr(){return l.useContext(Ue)}function me(){const r=l.useContext(Ue);if(!r)throw new Error("useShortcutConfig must be used inside ShortcutConfigProvider");return r}const Fe=se(()=>Promise.resolve().then(()=>require("./FeatureList-F3BgjXro.cjs"))),gt=se(()=>Promise.resolve().then(()=>require("./DataTable-BPtIbZh4.cjs"))),xt=se(()=>Promise.resolve().then(()=>require("./SchemaEditor-B4L17K1e.cjs")));Me(Fe,gt,xt);function yt(){return e.jsxs("div",{className:"flex flex-col items-center justify-center gap-3 h-full text-elm-text-muted",children:[e.jsx(F.MapPinPlus,{size:40,weight:"light"}),e.jsx("p",{className:"text-sm text-center text-balance leading-snug",children:"No features yet — add a point, line, or area"})]})}const bt=()=>typeof navigator<"u"&&/Mac/.test(navigator.platform);function vt(r){const t=r==null?void 0:r.name;return{type:"error",code:t==="NotAllowedError"?"permission-denied":t==="TypeError"?"unsupported":"unknown",source:"clipboard",message:"Could not copy to the clipboard",cause:r,quiet:!0}}function wt(r,t){if(t.length===0)return r.map(s=>s.id);const n=[];for(const s of t)for(const o of r)o.groupId===s.id&&n.push(o.id);for(const s of r)s.groupId||n.push(s.id);return n}function mr(r,t){const n=[];for(const s of t)if(!s.collapsed)for(const o of r)o.groupId===s.id&&n.push(o.id);for(const s of r)s.groupId||n.push(s.id);return n}const St="data-elm-window",Te=new WeakMap;function pr(r){const t=Te.get(r);if(!(t!=null&&t.size))return!1;let n=null;for(const s of t)(!n||s.z()>n.z())&&(n=s);return n==null||n.close(),!!n}function hr(r,t,n,s,{topWindow:o=!0}={}){const{uiStore:f}=d.useGeoStore(),a=l.useRef(n),p=l.useRef(s);l.useLayoutEffect(()=>{a.current=n,p.current=s}),l.useEffect(()=>{if(!t)return;const c=document.activeElement,x={z:()=>p.current,close:()=>a.current()};let h=Te.get(f);h||Te.set(f,h=new Set),o&&h.add(x);const y=r.current;function m(S){S.key!=="Escape"||S.defaultPrevented||!(y!=null&&y.contains(S.target))||(S.preventDefault(),a.current())}return document.addEventListener("keydown",m),()=>{h.delete(x),document.removeEventListener("keydown",m);const S=document.activeElement;(!S||S===document.body||((y==null?void 0:y.contains(S))??!1)||!S.isConnected)&&(c!=null&&c.isConnected)&&c!==document.body&&c.focus({preventScroll:!0})}},[t,r,f,o])}function gr(){return new Promise(r=>{const t=document.createElement("input");t.type="file",t.accept=".geojson,.json,application/geo+json,application/json",t.style.display="none",document.body.appendChild(t);let n=!1;const s=()=>{n||(n=!0,t.remove())};t.addEventListener("change",()=>{var f;const o=((f=t.files)==null?void 0:f[0])??null;s(),r(o)},{once:!0}),t.addEventListener("cancel",()=>{s(),r(null)},{once:!0}),t.click()})}const ge=new Map;function kt(r){if(r.closest("[data-elm-portal]"))return!0;let t=r;for(;t.parentElement&&t.parentElement!==document.body;)t=t.parentElement;return t.parentElement===document.body&&(t.hasAttribute("data-elm-theme")||t.hasAttribute("data-elm-portal"))}function xr(r,t){if(!t||r.composedPath().includes(t.root))return!0;const n=document.activeElement;return!n||n===document.body||kt(n)?t.pointerInside??ge.size===1:!1}function ue(){const{uiStore:r}=d.useGeoStore();return l.useCallback(t=>xr(t,ge.get(r)),[r])}const yr=140;function br(r,t){r.querySelectorAll(`[data-elm-shortcut="${t}"]`).forEach(n=>{n.disabled||(n.setAttribute("data-pressed",""),setTimeout(()=>n.removeAttribute("data-pressed"),yr))})}const vr=["point","line","polygon","route","circle","rectangle","freehand","picker"];function wr(r){var S;const{dataStore:t,uiStore:n}=d.useGeoStore(),s=d.useEmit(),{panTo:o,fitBounds:f,setZoom:a}=d.useMapController(),p=d.useGeoJSONFileImport(),c=Q.useElementEditorConfig(),x=ue(),h=(S=fr())==null?void 0:S.custom,y=l.useRef(h);y.current=h;const m=l.useCallback(k=>y.current?$.getEffectiveKey(k,y.current):$.getCurrentKey(k),[]);l.useEffect(()=>{if(!r)return;const k=r.closest("[data-elm-theme]")??r,M={root:k,pointerInside:null};ge.set(n,M);const E=i=>{i.composedPath().includes(k)?M.pointerInside=!0:i.target instanceof Element&&kt(i.target)||(M.pointerInside=!1)};return document.addEventListener("pointerdown",E,{capture:!0,passive:!0}),()=>{ge.get(n)===M&&ge.delete(n),document.removeEventListener("pointerdown",E,{capture:!0})}},[r,n]),l.useEffect(()=>{if(!c.ui.keyboardShortcuts.enabled||!c.ui.keyboardShortcuts.mapZoom)return;function k(M){if(!(M.metaKey||M.ctrlKey)||!x(M))return;const E=M.target,i=E==null?void 0:E.tagName;if(i==="INPUT"||i==="TEXTAREA"||i==="SELECT"||E!=null&&E.isContentEditable)return;const g=M.key==="+"||M.key==="=",u=M.key==="-"||M.key==="_";if(!g&&!u||!a)return;M.preventDefault();const I=t.getState().currentZoom;a(I+(g?1:-1))}return window.addEventListener("keydown",k,{capture:!0}),()=>window.removeEventListener("keydown",k,{capture:!0})},[c.ui.keyboardShortcuts.enabled,c.ui.keyboardShortcuts.mapZoom,a,t]),l.useEffect(()=>{const k=c.ui.keyboardShortcuts.enabled;function M(i){var L;if(!k&&i.key!=="Enter"||!x(i))return;const g=t.getState(),u=n.getState(),I=u.readonly,b=w=>{var O;return br(((O=ge.get(n))==null?void 0:O.root)??document,w)},C=i.target.tagName,N=i.target,A=i.composedPath(),B=A.some(w=>{if(!(w instanceof Element))return!1;const O=w.getAttribute("role");return O==="grid"||O==="treegrid"}),v=C==="INPUT"||C==="TEXTAREA"||C==="SELECT"||N.isContentEditable||B,j=i.key.toLowerCase();if(!v&&!I&&j==="z"&&(i.metaKey||i.ctrlKey)&&!i.shiftKey){i.preventDefault(),b("undo"),g.undoStack.length>0&&(g.undo(),s({type:"undo"}));return}if(!v&&!I&&j==="z"&&(i.metaKey||i.ctrlKey)&&i.shiftKey){i.preventDefault(),b("redo"),g.redoStack.length>0&&(g.redo(),s({type:"redo"}));return}if(!v&&(i.metaKey||i.ctrlKey)&&(i.key==="a"||i.key==="A")){i.preventDefault();const w=new Set(g.groups.filter(q=>q.hidden).map(q=>q.id)),O=g.features.filter(q=>!q.hidden&&!(q.groupId&&w.has(q.groupId))).map(q=>q.id);O.length>0&&g.setSelection(O);return}if(!v&&(i.metaKey||i.ctrlKey)&&!i.shiftKey&&(i.key==="j"||i.key==="J")){i.preventDefault();const w=!u.autoExitAfterDraw;u.setAutoExitAfterDraw(w),s({type:"success",message:w?"Drawing tools will exit after each shape":"Drawing tools will stay active after each shape",description:w?"You’ll go back to select mode. Press a tool key to draw again.":"Keep drawing more shapes in a row. Press the tool key again or Esc to exit."});return}if(!v&&!I&&(i.metaKey||i.ctrlKey)&&!i.shiftKey&&(i.key==="o"||i.key==="O")){i.preventDefault(),gr().then(w=>{w&&p(w)});return}if(!v&&(i.metaKey||i.ctrlKey)&&!i.shiftKey&&(i.key==="s"||i.key==="S")){i.preventDefault();const w=g.exportGeoJSON(),O=JSON.parse(w);if(!Array.isArray(O.features)||O.features.length===0){s({type:"warning",message:"Export failed",description:"No features to export — draw or import something first."});return}const q=O.features.length;(async()=>{const R=await d.saveGeoJSONFile(w);R&&s({type:"success",message:`Exported ${R.name}`,description:`${q===1?"1 feature":`${q} features`}, ${(R.bytes/1024).toFixed(1)} KB`})})();return}if(!v&&(i.metaKey||i.ctrlKey)){if(i.key==="c"){if(g.selectedIds.length===0)return;g.copySelection().then(w=>s(w?{type:"selection:copied"}:{type:"warning",message:"Copied for pasting in this editor only",description:"The browser did not allow writing to the system clipboard."}));return}if(i.key==="d"){if(i.preventDefault(),I)return;b("duplicate");const w=g.selectedIds;if(g.duplicateSelection())if(w.length===1){const O=t.getState().features.find(q=>q.id===w[0]);s({type:"feature:duplicated",featureId:w[0],label:String((O==null?void 0:O.properties.name)||"feature")})}else s({type:"features:duplicated",count:w.length});return}if(i.key==="e"||i.key==="E"){if(g.selectedIds.length!==1)return;i.preventDefault(),u.openEditDialog(g.selectedIds[0],{focusFirstField:!0});return}if((i.key==="g"||i.key==="G")&&!I){if(i.shiftKey){if(g.selectedIds.length===0||!g.features.some(O=>g.selectedIds.includes(O.id)&&O.groupId))return;i.preventDefault(),g.ungroupSelection()}else{if(g.selectedIds.length===0)return;i.preventDefault();const w=g.groupSelection();w&&u.setAutoFocusGroupId(w)}return}}if(i.key==="Enter"){if((!v||i.metaKey||i.ctrlKey)&&u.editingMode!=="none"){if(u.editingMode==="slice-shape"){i.preventDefault(),u.commitSliceShape();return}else if(u.editingMode==="cut-hole"){i.preventDefault(),u.commitCutHole();return}else if(u.editingMode==="draw-line"&&u.lineInProgress.length>=2){i.preventDefault(),u.commitLine({});return}else if(u.editingMode==="draw-polygon"&&u.polygonInProgress.length>=3){i.preventDefault(),u.commitPolygon({});return}else if(u.editingMode==="draw-route"&&u.routeWaypoints.length>=2){i.preventDefault(),u.commitRoute();return}}if(!k)return;const O=u.editingMode==="none"||u.editingMode==="draw-rect"||u.editingMode==="draw-circle"||u.editingMode==="place-point"||u.editingMode==="draw-freehand"||u.editingMode==="pick-shape"||u.editingMode==="draw-line"&&u.lineInProgress.length<2||u.editingMode==="draw-polygon"&&u.polygonInProgress.length<3||u.editingMode==="draw-route"&&u.routeWaypoints.length<2;if(u.dialogState.type==="closed"){if(!v&&!I&&!((L=N.closest)!=null&&L.call(N,'button, a[href], [role="button"]'))&&!i.metaKey&&!i.ctrlKey&&!i.altKey&&O){const q=g.selectedIds;if(q.length===1){const R=g.features.find(W=>W.id===q[0]),T=R==null?void 0:R.geometry.type;if(T==="LineString"||T==="Polygon"||T==="MultiLineString"||T==="MultiPolygon"||T==="GeometryCollection"){i.preventDefault();const W=!u.vertexEditActive;W&&u.editingMode!=="none"&&u.setEditingMode("none"),u.setVertexEditActive(W);return}}}}}const P=A.some(w=>w instanceof Element&&w.hasAttribute("data-elm-search-open"));if(i.key==="Tab"&&!v&&u.dialogState.type==="closed"&&!P&&!i.metaKey&&!i.ctrlKey&&!i.altKey){const w=g.features;if(w.length===0)return;i.preventDefault();const O=wt(w,g.groups),q=g.selectedIds.length===1?g.selectedIds[0]:null,R=q?O.indexOf(q):-1;let T;i.shiftKey?T=R<=0?O.length-1:R-1:T=R>=O.length-1?0:R+1;const G=O[T];g.selectFeature(G);const W=w.find(H=>H.id===G);if(W)if(W.geometry.type==="Point"){const[H,X]=W.geometry.coordinates;o==null||o([X,H])}else f==null||f(W.bbox||Z.getGeometryBBox(W.geometry));return}if(!v&&!i.metaKey&&!i.ctrlKey&&!i.altKey){const w=i.key.toLowerCase();if(w===m("show-shortcuts")){i.preventDefault(),b("show-shortcuts"),u.shortcutsModalOpen?u.closeShortcutsModal():u.openShortcutsModal();return}if(c.ui.schemaEditor&&!I&&w===m("toggle-schema")){i.preventDefault(),b("toggle-schema"),u.toggleSchemaModal();return}if(c.ui.layerList&&w===m("toggle-sidebar")){i.preventDefault(),b("toggle-sidebar"),u.setSidebarOpen(!u.sidebarOpen);return}}if(!v&&u.dialogState.type!=="new-point"&&!i.metaKey&&!i.ctrlKey&&!i.altKey){const w=i.key.toLowerCase();if(c.ui.dataTable&&w===m("toggle-table")){i.preventDefault(),b("toggle-table"),u.toggleTable();return}if(c.ui.geojsonEditor&&w===m("toggle-geojson")){i.preventDefault(),b("toggle-geojson"),u.toggleCodeModal();return}if(c.ui.zoomIndicator&&w===m("set-zoom")){i.preventDefault(),b("set-zoom"),u.setZoomEditing(!0);return}if(w===m("measure")){b("measure"),u.setEditingMode(u.editingMode==="measure"?"none":"measure");return}if(I)return;if(w===m("toggle-transform")){(g.selectedIds.length===1&&g.selectedIds[0]||g.selectedIds.length>0)&&(b("toggle-transform"),u.setTransformActive(!u.transformActive),!u.transformActive&&u.editingMode!=="none"&&u.setEditingMode("none"));return}const O=u.isToolAvailable,q=R=>{u.editingMode!==R&&!g.canAddFeatures(1)||(b(R==="pick-shape"?"picker":R),u.setEditingMode(u.editingMode===R?"none":R))};for(const R of vr){const T=Q.TOOL_MODES[R];if(O(R)&&w===m(T==="pick-shape"?"picker":T)){q(T);return}}if(w===m("cut-hole")){const R=g.features.find(T=>T.id===(g.selectedIds.length===1?g.selectedIds[0]:null));R&&(R.geometry.type==="Polygon"||R.geometry.type==="MultiPolygon")&&(b("cut-hole"),u.setEditingMode(u.editingMode==="cut-hole"?"none":"cut-hole"),u.setTransformActive(!1));return}if(w===m("slice-shape")){const R=g.features.find(T=>T.id===(g.selectedIds.length===1?g.selectedIds[0]:null));R&&(R.geometry.type==="Polygon"||R.geometry.type==="MultiPolygon")&&(b("slice-shape"),u.setEditingMode(u.editingMode==="slice-shape"?"none":"slice-shape"),u.setTransformActive(!1));return}if(w===m("break-apart")){const R=g.selectedIds.length===1?g.selectedIds[0]:null,T=R?g.features.find(G=>G.id===R):null;if(T&&$.isMultiGeometry(T.geometry)){b("break-apart");const G=$.getPartCount(T.geometry);g.breakMultiGeometry(R)&&s({type:"feature:broken",featureId:R,count:G,undo:()=>t.getState().undo()})}return}}if(i.key!=="Delete"&&i.key!=="Backspace"||I||u.dialogState.type==="new-point")return;const z=g.selectedIds;if(z.length===0||v||u.vertexEditActive)return;const K=z.length,_=K===1?g.features.find(w=>w.id===z[0]):null,J=K===1?String((_==null?void 0:_.properties.name)||"Unnamed feature"):`${K} features`;i.preventDefault(),i.stopImmediatePropagation(),b("delete-selected"),g.deleteSelection(),u.closeDialog(),s(K===1?{type:"feature:deleted",featureId:z[0],label:J,undo:()=>t.getState().undo()}:{type:"features:deleted",count:K,undo:()=>t.getState().undo()})}function E(i){var b;if(!x(i))return;const g=i.target.tagName;if(g==="INPUT"||g==="TEXTAREA"||g==="SELECT"||n.getState().readonly)return;const u=(b=i.clipboardData)==null?void 0:b.getData("text");if(u)try{const C=JSON.parse(u);if(C.type==="FeatureCollection"||C.type==="Feature"){const N=C.type==="FeatureCollection"?C.features:[C];t.setState({clipboard:N}),t.getState().pasteSelection()&&s({type:"selection:pasted",count:N.length});return}}catch{}const I=t.getState().clipboard;I&&I.length>0&&t.getState().pasteSelection()&&s({type:"selection:pasted",count:I.length})}return window.addEventListener("keydown",M),window.addEventListener("paste",E),()=>{window.removeEventListener("keydown",M),window.removeEventListener("paste",E)}},[t,n,s,o,f,c,m,p]),l.useEffect(()=>{function k(M){var u;if(M.key!=="Escape"||!x(M))return;const E=M.target;if(E&&(E.tagName==="INPUT"||E.tagName==="TEXTAREA"||E.isContentEditable)||(u=E==null?void 0:E.closest)!=null&&u.call(E,`[${St}]`)||D.isContextMenuOpen())return;const i=n.getState();if(i.dialogState.type!=="closed"){i.closeDialog(),M.stopPropagation();return}if(i.editingMode==="none"){if(i.vertexEditActive){i.setVertexEditActive(!1),M.stopPropagation();return}if(i.transformActive){i.setTransformActive(!1),M.stopPropagation();return}if(t.getState().selectedIds.length>0){t.getState().selectFeature(null),M.stopPropagation();return}pr(n)&&M.stopPropagation()}}return window.addEventListener("keydown",k,{capture:!0}),()=>window.removeEventListener("keydown",k,{capture:!0})},[])}const Sr=new Set(["true","yes","y","1","on","x","✓"]),kr=new Set(["false","no","n","0","off",""]);function jt(r){const t=r.trim().toLowerCase();return Sr.has(t)?!0:kr.has(t)?!1:null}function Et(r){return typeof r=="boolean"?r:typeof r=="number"?r!==0:typeof r=="string"?jt(r)===!0:!1}function jr({fields:r,values:t,onChange:n,errors:s,autoFocusFirst:o,readonly:f}){return e.jsx("div",{className:"space-y-3",children:r.map((a,p)=>{const c=t[a.key]??"",x=s==null?void 0:s[a.key],h=o&&p===0,y=e.jsxs("label",{className:"block text-xs font-medium text-(--elm-text-muted,var(--color-gray-600)) dark:text-(--elm-text-muted,var(--color-gray-400)) mb-1",children:[a.label,a.required&&e.jsx("span",{className:"text-rose-500 ml-0.5",children:"*"})]});let m;return a.type==="boolean"?e.jsxs("div",{"data-field-key":a.key,className:"flex items-center justify-between py-1 border-b border-transparent",children:[y,e.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:Et(c),onChange:S=>n(a.key,S.target.checked),disabled:f,className:"sr-only peer"}),e.jsx("div",{className:"w-9 h-5 bg-(--elm-border-strong,var(--color-gray-200)) peer-focus-visible:ring-2 peer-focus-visible:ring-elm-focus-ring peer-focus-visible:ring-offset-2 peer-focus-visible:ring-offset-elm-surface rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-(--elm-border-strong,var(--color-gray-300)) after:border after:rounded-full after:h-4 after:w-4 after:transition-transform peer-checked:bg-primary-500 opacity-90 hover:opacity-100 disabled:opacity-50"})]}),x&&e.jsx("p",{className:"mt-1 text-xs text-rose-500 w-full basis-full",children:x})]},a.key):(a.type==="textarea"?m=e.jsx(D.Textarea,{rows:3,value:String(c),onChange:S=>n(a.key,S.target.value),autoFocus:h,error:!!x,disabled:f}):a.type==="select"?m=e.jsxs(D.SelectInput,{value:String(c),onChange:S=>n(a.key,S.target.value),autoFocus:h,error:!!x,disabled:f,children:[e.jsx("option",{value:"",children:"— select —"}),(a.options??[]).map(S=>e.jsx("option",{value:S,children:S},S))]}):a.type==="number"?m=e.jsx(D.Input,{type:"number",value:String(c),onChange:S=>n(a.key,S.target.value),autoFocus:h,error:!!x,disabled:f,min:a.min,max:a.max}):m=e.jsx(D.Input,{type:a.type,value:String(c),onChange:S=>n(a.key,S.target.value),autoFocus:h,error:!!x,disabled:f}),e.jsxs("div",{"data-field-key":a.key,children:[y,m,x&&e.jsx("p",{className:"mt-1 text-xs text-rose-500",children:x})]},a.key))})})}const xe="items-center justify-center flex-shrink-0 p-[3px] rounded-elm-control text-elm-text-secondary hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) active:scale-[0.95] disabled:text-elm-text-disabled disabled:hover:bg-transparent disabled:active:scale-100 disabled:cursor-not-allowed transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring",Ct="h-10 box-border flex items-center flex-shrink-0 border-b border-elm-border bg-elm-surface-sunken";function It(){const r=d.useUIStore(o=>o.setSidebarOpen),t=d.useUIStore(o=>o.layout==="split"),n=Q.useElementEditorConfig(),{getKey:s}=me();return t?null:e.jsx(D.Tooltip,{content:"Hide layers",shortcut:n.ui.keyboardShortcuts.enabled?e.jsx(D.KbdDark,{children:s("toggle-sidebar").toUpperCase()}):void 0,side:"bottom",children:e.jsx("button",{"aria-label":"Collapse layers panel","data-elm-shortcut":"toggle-sidebar",onClick:o=>{r(!1),o.currentTarget.blur()},className:`flex ${xe}`,children:e.jsx(F.SidebarSimple,{size:16,mirrored:!0})})})}const Er=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false)\b|\bnull\b|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,Cr="text-gray-800 dark:text-[#e06c75]",Ir="text-[#a11] dark:text-[#98c379]",Dr="text-[#164] dark:text-[#d19a66]",Nr="text-[#219] dark:text-[#d19a66]",Pr="text-[#164] dark:text-[#d19a66]";function Tr(r){const t=[];let n=0;for(const s of r.matchAll(Er)){const o=s.index;o>n&&t.push(r.slice(n,o));const[f,a,p,c]=s;a!==void 0?(t.push(e.jsx("span",{className:p?Cr:Ir,children:a},o)),p&&t.push(p)):c!==void 0?t.push(e.jsx("span",{className:Nr,children:f},o)):t.push(e.jsx("span",{className:f==="null"?Pr:Dr,children:f},o)),n=o+f.length}return n<r.length&&t.push(r.slice(n)),t}function Mr({json:r,className:t}){const n=l.useMemo(()=>Tr(r),[r]);return e.jsx("pre",{className:t,children:n})}function st(r,t){if(r.required&&(t==null||String(t).trim()===""))return`${r.label} is required`;if(r.type==="number"&&t!==void 0&&t!==null&&String(t).trim()!==""){const n=Number(t);if(!isNaN(n)){const s=r.min!==void 0,o=r.max!==void 0;if(s&&o&&(n<r.min||n>r.max))return`${r.label} must be between ${r.min} and ${r.max}`;if(s&&n<r.min)return`${r.label} must be ≥ ${r.min}`;if(o&&n>r.max)return`${r.label} must be ≤ ${r.max}`}}return null}function Dt(r,t){const n=d.useUIStore(a=>a.panelPrefs[r]),s=d.useUIStore(a=>a.setPanelPref),o=n!==null?n:t;return{open:o,toggle:()=>s(r,!o)}}function Ur(r,t,n){if(r.type==="new-point"){const s={};return t.fields.forEach(o=>{s[o.key]=""}),r.prefill&&Object.assign(s,r.prefill),s}if(r.type==="edit"){const s=n.find(o=>o.id===r.featureId);if(s)return{...s.properties}}return{}}function Nt({dialogState:r,collapsible:t=!1}){const{dataStore:n}=d.useGeoStore(),s=d.useEmit(),o=d.useUIStore(T=>T.closeDialog),f=d.useDataStore(T=>T.selectFeature),a=d.useDataStore(lr.useShallow(T=>T.getVisibleSchemas())),p=d.useDataStore(T=>T.lastUsedSchemaId),c=d.useUIStore(T=>T.readonly),{uiStore:x}=d.useGeoStore(),h=ue(),y=d.useDataStore(T=>T.features),m=l.useMemo(()=>r.type==="edit"?y.find(T=>T.id===r.featureId)??null:null,[r,y]),S=d.useDataStore(T=>T.addFeature),k=d.useDataStore(T=>T.updateFeature),M=d.useDataStore(T=>T.deleteFeature),E=d.useDataStore(T=>T.duplicateFeature),i=d.useDataStore(T=>T.getDefaultSchema),g=d.useDataStore(T=>T.setLastUsedSchemaId),u=r.type==="new-point",I=i(),[b,C]=l.useState(()=>r.type==="edit"&&(m!=null&&m.schemaId)?m.schemaId:p&&a.find(G=>G.id===p)?p:I.id),N=a.find(T=>T.id===b)??I,[A,B]=l.useState(()=>Ur(r,N,y)),[v,j]=l.useState({}),P=m==null?void 0:m.properties,z=m==null?void 0:m.schemaId,[K,_]=l.useState({editProps:P,editSchemaId:z});m&&(K.editProps!==P||K.editSchemaId!==z)&&(_({editProps:P,editSchemaId:z}),B({...P}),z&&C(z),j({}));function J(T){const G=a.find(W=>W.id===T)??I;if(u){const W={};G.fields.forEach(H=>{W[H.key]=A[H.key]??""}),B(W)}C(T),g(T),j({})}l.useEffect(()=>{if(c)return;function T(G){if((G.metaKey||G.ctrlKey)&&G.key==="Enter"&&h(G)){const W=x.getState();if(W.lineInProgress.length>0||W.polygonInProgress.length>0||W.routeWaypoints.length>0||W.freehandPoints.length>0||W.circleCenter!==null||W.rectCorner!==null)return;G.preventDefault(),L()}}return window.addEventListener("keydown",T),()=>window.removeEventListener("keydown",T)});function L(){var W;const T={};for(const H of N.fields){const X=st(H,A[H.key]);X&&(T[H.key]=X)}if(Object.keys(T).length>0){j(T);const H=(W=N.fields.find(X=>T[X.key]))==null?void 0:W.key;H&&setTimeout(()=>{var de;const X=document.querySelector(`[data-field-key="${CSS.escape(H)}"]`),ee=X==null?void 0:X.querySelector("input, textarea, select");ee==null||ee.focus(),ee&&"select"in ee&&((de=ee.select)==null||de.call(ee))},0);return}j({});const G={};for(const[H,X]of Object.entries(A))X!==""&&(G[H]=X);u&&r.type==="new-point"?S({type:"Feature",id:crypto.randomUUID(),schemaId:b,geometry:{type:"Point",coordinates:r.coords},properties:G}):m&&k(m.id,{properties:G,schemaId:b}),o()}function w(){if(!m)return;const T=String(m.properties.name||"feature"),G=m.id,W=E(G);o(),W&&s({type:"feature:duplicated",featureId:G,label:T})}function O(){if(!m)return;const T=String(m.properties.name||"Unnamed feature"),G=m.id;M(G),o(),s({type:"feature:deleted",featureId:G,label:T,undo:()=>n.getState().undo()})}const q=u?"New point":m?String(m.properties.name||"Edit feature"):"Edit feature",R=u?"point":(m==null?void 0:m.geometry.type)==="MultiPoint"?"points":(m==null?void 0:m.geometry.type)==="LineString"?"line":(m==null?void 0:m.geometry.type)==="MultiLineString"?"lines":(m==null?void 0:m.geometry.type)==="Polygon"?"area":(m==null?void 0:m.geometry.type)==="MultiPolygon"?"areas":(m==null?void 0:m.geometry.type)==="GeometryCollection"?"mixed":"point";return e.jsxs("div",{className:"flex flex-col flex-1 min-h-0",children:[e.jsxs("header",{className:"flex items-center gap-1 px-4 pt-4 pb-3 border-b border-elm-border flex-shrink-0 bg-elm-surface-sunken",children:[t&&e.jsx(It,{}),e.jsx(D.Tooltip,{content:"Back to layers",side:"bottom",children:e.jsx("button",{type:"button",onClick:()=>{o(),f(null)},"aria-label":"Back to layers",className:`flex ${xe}`,children:e.jsx(F.ArrowLeft,{size:16})})}),e.jsxs("div",{className:"flex-1 min-w-0 mx-1",children:[e.jsx("p",{className:"text-sm leading-5 font-semibold text-(--elm-text,var(--color-gray-800)) dark:text-(--elm-text,var(--color-gray-100)) truncate",children:q}),e.jsx("p",{className:"text-xs leading-4 text-elm-text-subtle capitalize",children:R})]}),m&&e.jsxs(e.Fragment,{children:[!c&&e.jsx(D.Tooltip,{content:"Duplicate",shortcut:e.jsxs("span",{className:"flex items-center gap-0.5",children:[e.jsx(D.KbdDark,{children:"⌘"}),e.jsx(D.KbdDark,{children:"D"})]}),side:"bottom",children:e.jsx("button",{type:"button",onClick:w,"aria-label":"Duplicate feature",className:`flex ${xe}`,children:e.jsx(F.CopySimple,{size:16})})}),!c&&e.jsx(D.Tooltip,{content:"Delete feature",side:"bottom",children:e.jsx("button",{type:"button",onClick:O,"aria-label":"Delete feature",className:`flex ${xe}`,children:e.jsx(F.Trash,{size:16})})})]})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto min-h-0 px-4 pt-4",children:[a.length>1&&e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:"block text-xs font-medium text-(--elm-text-muted,var(--color-gray-600)) dark:text-(--elm-text-muted,var(--color-gray-400)) mb-1",children:"Schema"}),e.jsx(D.SelectInput,{value:b,onChange:T=>J(T.target.value),disabled:c,children:a.map(T=>{var G;return e.jsxs("option",{value:T.id,children:[T.name,T.id===((G=a[0])==null?void 0:G.id)?" (default)":""]},T.id)})})]}),e.jsx(jr,{fields:N.fields,values:A,onChange:(T,G)=>{B(H=>({...H,[T]:G}));const W=N.fields.find(H=>H.key===T);if(W){const H=st(W,G);j(X=>{if(H)return{...X,[T]:H};const ee={...X};return delete ee[T],ee})}},errors:v,autoFocusFirst:!c&&(u||r.type==="edit"&&!!r.isNew||r.type==="edit"&&!!r.focusFirstField),readonly:c}),e.jsx(Rr,{dialogState:r,editFeature:m??null,values:A,schemaId:b}),e.jsx(Fr,{dialogState:r,editFeature:m??null}),e.jsx("div",{className:"-mx-4 border-t border-elm-border"})]}),!c&&e.jsx("div",{className:"px-4 py-3 border-t border-elm-border flex-shrink-0",children:e.jsxs(D.Button,{variant:"primary",onClick:L,className:"w-full py-2 rounded-elm font-medium",children:["Save",e.jsx("span",{className:"ml-auto flex items-center gap-0.5",children:bt()?e.jsxs(e.Fragment,{children:[e.jsx(D.KbdInvert,{children:"⌘"}),e.jsx(D.KbdInvert,{children:"↵"})]}):e.jsxs(e.Fragment,{children:[e.jsx(D.KbdInvert,{children:"Ctrl"}),e.jsx(D.KbdInvert,{children:"↵"})]})})]})})]})}function Fr({dialogState:r,editFeature:t}){const n=l.useMemo(()=>{if(r.type==="new-point"){const[a,p]=r.coords;return[`${p.toFixed(6)}, ${a.toFixed(6)}`]}if(!t)return[];if(t.geometry.type==="Point"){const[a,p]=t.geometry.coordinates;return[`${p.toFixed(6)}, ${a.toFixed(6)}`]}return t.geometry.type==="LineString"?t.geometry.coordinates.map(([p,c],x)=>`${x+1}. ${c.toFixed(6)}, ${p.toFixed(6)}`):t.geometry.type==="Polygon"?t.geometry.coordinates[0].slice(0,-1).map(([p,c],x)=>`${x+1}. ${c.toFixed(6)}, ${p.toFixed(6)}`):[]},[r,t]),s=n.length<=5,{open:o,toggle:f}=Dt("coordsOpen",s);return n.length===0?null:e.jsx(Pt,{label:"Coordinates",open:o,onToggle:f,children:e.jsx("div",{className:"space-y-0.5",children:n.map((a,p)=>e.jsx("p",{className:"text-xs font-elm-mono text-elm-text-muted",children:a},p))})})}function Rr({dialogState:r,editFeature:t,values:n,schemaId:s}){const o=l.useMemo(()=>{if(r.type==="new-point"){const S={};for(const[k,M]of Object.entries(n))M!==""&&(S[k]=M);return{type:"Feature",id:"(new)",schemaId:s,geometry:{type:"Point",coordinates:r.coords},properties:S}}return t??null},[r,t,n,s]),{open:f,toggle:a}=Dt("sourceOpen",!1),[p,c]=l.useState(!1),x=d.useEmit();if(!o)return null;const h=JSON.stringify(o,null,2);function y(){Promise.resolve().then(()=>navigator.clipboard.writeText(h)).then(()=>{c(!0),setTimeout(()=>c(!1),1500)},S=>x(vt(S)))}const m=e.jsx("button",{type:"button",onClick:S=>{S.stopPropagation(),y()},"aria-label":"Copy source",className:`flex items-center justify-center w-6 h-6 rounded-elm-chip hover:bg-elm-surface-hover transition-colors ${p?"text-emerald-500":"text-elm-text-disabled hover:text-(--elm-text-secondary,var(--color-gray-500)) dark:hover:text-(--elm-text-secondary,var(--color-gray-300))"}`,children:p?e.jsx(F.Check,{size:16,weight:"bold"}):e.jsx(F.Copy,{size:16})});return e.jsx(Pt,{label:"Source",open:f,onToggle:a,action:m,children:e.jsx(Mr,{json:h,className:"text-[11px] font-elm-mono text-(--elm-text-secondary,var(--color-gray-800)) dark:text-(--elm-text-secondary,var(--color-gray-300)) bg-elm-surface-sunken border border-(--elm-border-subtle,var(--color-gray-100)) dark:border-(--elm-border-subtle,var(--color-gray-700)) rounded-elm-card p-2 overflow-x-auto whitespace-pre leading-relaxed"})})}function Pt({label:r,open:t,onToggle:n,action:s,children:o}){return e.jsxs("div",{children:[e.jsx("div",{className:"-mx-4 border-t border-elm-border"}),e.jsxs("div",{className:"flex items-center h-12",children:[e.jsxs("button",{type:"button",className:"flex items-center gap-1 text-xs font-medium text-elm-text-subtle hover:text-(--elm-text-secondary,var(--color-gray-600)) dark:hover:text-(--elm-text-secondary,var(--color-gray-300)) hover:bg-elm-surface-hover rounded-elm-control -ml-2 pl-2 transition-colors flex-1 text-left h-full",onClick:n,children:[e.jsx("span",{className:"text-elm-text-subtle flex-shrink-0",children:t?e.jsx(F.CaretDown,{size:12,weight:"bold"}):e.jsx(F.CaretRight,{size:12,weight:"bold"})}),r]}),s]}),t&&e.jsx("div",{className:"pb-3",children:o})]})}const Tt="[data-elm-theme],[data-elm-theme] *{transition:none!important}";function at(r){const t=document.createElement("style");t.textContent=Tt,document.head.appendChild(t),r(),requestAnimationFrame(()=>requestAnimationFrame(()=>t.remove()))}function Mt(r,t){t==null||t.setAttribute("data-dragging","");const n=document.createElement("div");n.style.cssText=`position:fixed;inset:0;z-index:2147483647;cursor:${r}`,document.body.appendChild(n);const s=document.createElement("style");return s.textContent=Tt,document.head.appendChild(s),document.body.style.userSelect="none",()=>{t==null||t.removeAttribute("data-dragging"),n.remove(),s.remove(),document.body.style.userSelect=""}}function Ut(r,t,n,s){const o=Q.useElementEditorConfig(),[f,a]=l.useState(()=>{const x=parseInt(Z.readStorage(r,o)??"",10);return isNaN(x)?t:Math.max(n,Math.min(s,x))}),p=l.useRef(f);p.current=f;const c=l.useCallback(x=>{if(x.button!==0)return;x.preventDefault();const h=x.clientX,y=p.current,m=Mt("col-resize",x.currentTarget);function S(M){const E=Math.max(n,Math.min(s,y+(h-M.clientX)));p.current=E,a(E)}function k(){m(),Z.writeStorage(r,String(p.current),o),window.removeEventListener("mousemove",S),window.removeEventListener("mouseup",k)}window.addEventListener("mousemove",S),window.addEventListener("mouseup",k)},[r,n,s,o]);return{width:f,onHandleMouseDown:c}}function Re(r,t=!0){const{uiStore:n}=d.useGeoStore(),s=Q.useElementEditorConfig().ui.layerList,o=d.useUIStore($.sidebarTakesSpace),f=d.useUIStore(h=>h.narrow),a=d.useUIStore(h=>h.sidebarWidth),p=d.useUIStore(h=>h.codeDockWidth),x=d.useUIStore(h=>h.tableFullscreen)||f?0:(s&&o?a:0)+p;l.useLayoutEffect(()=>{var y;if(!t)return;const h=(y=r.current)==null?void 0:y.closest("[data-elm-theme]");if(h)return h.style.setProperty("--elm-panel-offset",`${x}px`),()=>{h.style.removeProperty("--elm-panel-offset")}},[r,t,x]),l.useLayoutEffect(()=>{var S;if(!t)return;const h=(S=r.current)==null?void 0:S.closest("[data-elm-theme]");if(!h)return;const y=()=>{const k=h.clientWidth;k>0&&n.getState().narrow!==k<$.NARROW_EDITOR_WIDTH&&n.getState().setNarrow(k<$.NARROW_EDITOR_WIDTH)};y();const m=new ResizeObserver(y);return m.observe(h),()=>m.disconnect()},[r,t,n])}const Ft="after:absolute after:transition-colors hover:after:bg-elm-focus-ring data-[dragging]:after:bg-elm-focus-ring",Rt=`absolute left-0 top-0 h-full w-1 z-20 cursor-col-resize after:inset-y-0 after:left-0 after:w-0.5 ${Ft}`,Ar=`absolute top-0 left-0 right-0 h-1 z-10 cursor-row-resize after:inset-x-0 after:top-0 after:h-0.5 ${Ft}`,Lr="p-1 rounded-elm-control flex items-center justify-center text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring active:scale-[0.95] disabled:cursor-not-allowed disabled:active:scale-100",zr="text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent",Br="flex items-center justify-center w-6 h-6 rounded-elm-control transition-colors bg-transparent hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-gray-200)_70%,transparent)) dark:hover:bg-(--elm-control-hover,var(--color-gray-800)) focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring disabled:cursor-not-allowed",Kr="flex items-center justify-center w-12 h-12 backdrop-blur-md border border-elm-border/80 shadow-elm-control rounded-elm transition-colors active:scale-[0.95] focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring disabled:cursor-not-allowed disabled:active:scale-100",Or="bg-elm-surface/95 hover:bg-elm-surface-hover disabled:hover:bg-elm-surface/95",it="disabled:text-elm-text-disabled",lt="text-primary-600 dark:text-primary-400",$r="text-elm-text";function pe({label:r,tooltipContent:t,shortcut:n,shortcutId:s,tooltipSide:o="top",onClick:f,active:a,expanded:p,controls:c,disabled:x,size:h="md",children:y}){const S=Q.useElementEditorConfig().ui.keyboardShortcuts.enabled?n:void 0;return e.jsx(D.Tooltip,{content:t??r,shortcut:S,side:o,children:e.jsx("button",{"aria-label":r,"data-elm-shortcut":s,"aria-pressed":p===void 0?a:void 0,"aria-expanded":p,"aria-controls":c,onClick:k=>{f(),k.detail>0&&k.currentTarget.blur()},disabled:x,className:h==="group"?`${Lr} ${a?lt:zr} ${it}`:`${h==="sm"?Br:`${Kr} ${Or}`} ${a?lt:$r} ${it}`,children:l.isValidElement(y)&&typeof y.type!="string"?l.cloneElement(y,{...a?{weight:"fill"}:{},...h==="sm"?{size:16}:{}}):y})})}const Gr=l.memo(function({footer:t}){const{dataStore:n}=d.useGeoStore(),s=d.useEmit(),o=d.useUIStore(L=>L.sidebarOpen),f=d.useUIStore(L=>L.setSidebarOpen),a=d.useUIStore(L=>L.setSidebarWidth),p=d.useUIStore(L=>L.codeDockWidth),c=d.useUIStore(L=>L.readonly),x=d.useUIStore(L=>L.layout),{width:h,onHandleMouseDown:y}=Ut("elm_panel_width",288,200,520),m=x==="split",S=l.useRef(null);Re(S);const k=d.useUIStore(L=>L.narrow)&&!m,[M,E]=l.useState(!1),i=l.useRef(!1);l.useEffect(()=>{const L=requestAnimationFrame(()=>{i.current=!0});return()=>cancelAnimationFrame(L)},[]),l.useLayoutEffect(()=>{k&&(i.current||E(!0),f(!1))},[k,f]),l.useEffect(()=>{if(!M)return;const L=requestAnimationFrame(()=>E(!1));return()=>cancelAnimationFrame(L)},[M]);const{getKey:g}=me(),u=e.jsx(D.KbdDark,{children:g("toggle-sidebar").toUpperCase()}),[I,b]=l.useState(null),C=l.useCallback(L=>b(L),[]);l.useLayoutEffect(()=>{a(h)},[h,a]);const N=d.useUIStore(L=>L.dialogState),A=N.type!=="closed",B=d.useDataStore(L=>L.features),v=d.useDataStore(L=>L.selectedIds),j=d.useDataStore(L=>L.deleteSelection),P=d.useDataStore(L=>L.clearSelection),z=d.useUIStore(L=>L.autoFocusGroupId),K=d.useUIStore(L=>L.setAutoFocusGroupId);l.useEffect(()=>{z&&K(null)},[z,K]);function _(){const L=crypto.randomUUID();n.setState(w=>({groups:[...w.groups,{id:L,name:"New group",collapsed:!1}],lastModifiedAt:Date.now()})),K(L)}const J=N.type==="edit"?`edit-${N.featureId}`:N.type;return e.jsx(e.Fragment,{children:e.jsxs("aside",{ref:S,"data-elm-layers-panel":"",className:m?"h-full w-full":k?`absolute top-0 h-full z-[600] ${o?"shadow-elm-raised":""}`:"absolute top-0 h-full z-10",style:m?void 0:k?{width:`min(${h}px, 100% - 48px)`,right:o?0:`calc(-1 * min(${h}px, 100% - 48px))`,transition:M?"none":"right 200ms ease"}:{width:h,right:o?0:-h,transition:M?"none":"right 200ms ease"},children:[!m&&!o&&e.jsx("div",{className:"absolute z-30",style:{left:-64-p,top:16},children:e.jsx(pe,{label:"Open layers panel",shortcutId:"toggle-sidebar",tooltipContent:"Show layers",shortcut:u,tooltipSide:"bottom",onClick:()=>f(!0),children:e.jsx(F.SidebarSimple,{size:24})})}),e.jsxs("div",{inert:!m&&!o,className:`h-full flex flex-col overflow-hidden bg-elm-surface ${m?"":"border-l border-elm-border/80"}`,children:[!m&&e.jsx("div",{onMouseDown:y,className:Rt,title:"Drag to resize panel"}),A&&v.length<2?e.jsx(Nt,{dialogState:N,collapsible:!0},J):e.jsxs(e.Fragment,{children:[e.jsx("header",{className:`${Ct} px-3`,children:e.jsxs("div",{className:"flex items-center justify-between h-6 w-full",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(It,{}),e.jsx("span",{className:"text-xs font-medium text-elm-text-secondary",children:"Layers"})]}),e.jsx("div",{className:"flex items-center gap-0.5",children:!c&&e.jsx(D.Tooltip,{content:"New group",side:"bottom",children:e.jsx("button",{type:"button",onClick:_,disabled:B.length===0,className:`flex ${xe}`,"aria-label":"New group",children:e.jsx(F.FolderPlus,{size:16})})})})]})}),e.jsx("div",{ref:C,className:"flex-1 overflow-y-auto min-h-0",children:e.jsx("div",{className:"px-3 py-3 flex flex-col gap-3 h-full",children:e.jsx(l.Suspense,{fallback:B.length===0?e.jsx("div",{className:"h-full",children:e.jsx(yt,{})}):null,children:e.jsx(Fe,{autoFocusGroupId:z,scrollElement:I})})})}),v.length>=2&&e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2 bg-elm-surface-sunken border-t border-elm-border flex-shrink-0",children:[e.jsxs("span",{className:"text-xs text-elm-text-secondary font-medium flex-1",children:[v.length," selected"]}),e.jsx("button",{onClick:P,className:"text-xs text-elm-text-secondary px-2 py-1 rounded-elm-control hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) transition-colors",children:"Clear"}),!c&&e.jsx("button",{onClick:()=>{const L=v.length;j(),s({type:"features:deleted",count:L,undo:()=>n.getState().undo()})},className:"text-xs text-elm-text-secondary px-2 py-1 rounded-elm-control hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) transition-colors",children:"Delete all"})]})]}),t&&e.jsx("div",{className:"flex-shrink-0 border-t border-elm-border",children:t})]})]})})});function Ae({type:r,size:t=20}){return r==="Point"||r==="MultiPoint"?e.jsx(F.MapPin,{size:t}):r==="Polygon"||r==="MultiPolygon"?e.jsx(F.Polygon,{size:t,weight:"fill"}):r==="GeometryCollection"?e.jsx(F.StackSimple,{size:t}):e.jsx(F.LineSegment,{size:t,weight:"bold"})}function At(r){switch(r){case"Point":return"Point";case"MultiPoint":return"Points";case"LineString":return"Line";case"MultiLineString":return"Lines";case"Polygon":return"Area";case"MultiPolygon":return"Areas";case"GeometryCollection":return"Mixed";default:return r}}function Lt({initialLabel:r,onCommit:t,autoFocus:n,activate:s,onEnd:o,onTab:f,disabled:a}){const[p,c]=l.useState(()=>!a&&(!!n||!!s)),[x,h]=l.useState(r),y=l.useRef(null);l.useEffect(()=>{s&&!p&&!a&&(h(r),c(!0))},[s]),l.useEffect(()=>{var i,g;p&&((i=y.current)==null||i.focus(),(g=y.current)==null||g.select())},[p]);function m(i){a||(h(i),c(!0))}function S(){const i=x.trim();i&&i!==r&&t(i),c(!1),o==null||o()}function k(){h(r),c(!1),o==null||o()}function M(i){if(i.key==="Enter"){i.preventDefault(),i.nativeEvent.stopImmediatePropagation(),S();return}if(i.key==="Escape"){i.nativeEvent.stopImmediatePropagation(),k();return}if(i.key==="Tab"&&f){i.preventDefault(),i.nativeEvent.stopImmediatePropagation();const g=x.trim();g&&g!==r&&t(g),c(!1),f(i.shiftKey?"prev":"next")}}return{isRenaming:p,startRenaming:m,inputProps:{ref:y,value:x,onChange:i=>h(i.target.value),onBlur:S,onKeyDown:M,onClick:i=>i.stopPropagation()}}}function zt(r){const t=r.properties.name;return typeof t=="string"&&t.trim()?t:At(r.geometry.type)}const Wr=l.memo(function({feature:t,isSelected:n,onRowClick:s,onRowSelectOnly:o,onRowJump:f,onEdit:a,onToggleHidden:p,containerProps:c,dragHandleProps:x,isDragging:h,innerRef:y,isMultiSelected:m,onMultiSelectToggle:S,onRangeSelect:k,isContextMenuActive:M,dragCountBadge:E,isGhosted:i,onRename:g,renameActive:u,onRenameEnd:I,onRenameTab:b,joinTop:C,joinBottom:N}){const A=l.useRef(null),B=zt(t),v=d.useUIStore(R=>R.readonly),{isRenaming:j,startRenaming:P,inputProps:z}=Lt({initialLabel:B,disabled:v,onCommit:R=>g==null?void 0:g(t.id,R),activate:u,onEnd:I,onTab:b}),K=l.useRef(null);l.useEffect(()=>()=>{K.current!==null&&clearTimeout(K.current)},[]);const _=typeof t.properties.imageUrl=="string"&&t.properties.imageUrl?t.properties.imageUrl:null,[J,L]=l.useState(!1);l.useEffect(()=>{if(L(!1),!_)return;const R=new Image;let T=!1;return R.onload=()=>{T||L(!0)},R.onerror=()=>{},R.src=_,()=>{T=!0,R.onload=null,R.onerror=null}},[_]);const w=_!==null&&J,{style:O,...q}=c??{};return e.jsx("li",{ref:R=>{A.current=R,y==null||y(R)},...q,...x,style:{listStyle:"none",opacity:i?.4:void 0,outline:"none",...O},children:e.jsxs("div",{"data-feature-id":t.id,className:te.clsx("group flex items-center gap-2 px-2 h-9 rounded-elm-control text-sm cursor-default",!h&&C&&"rounded-t-none",!h&&N&&"rounded-b-none",h?"cursor-grabbing shadow-elm-control bg-elm-surface-raised":m||n?"bg-(--elm-row-selected) hover:bg-(--elm-row-selected-hover) text-primary-700 dark:text-primary-300":t.hidden?te.clsx("text-elm-text-disabled",M?"bg-(--elm-row-hover)":"hover:bg-(--elm-row-hover)"):M?"bg-(--elm-row-hover) text-elm-text-secondary":"hover:bg-(--elm-row-hover) text-elm-text-secondary"),onClick:R=>{if(R.metaKey||R.ctrlKey){R.stopPropagation(),S==null||S(t.id);return}if(R.shiftKey){R.stopPropagation(),k==null||k(t.id);return}s(t.id)},children:[w?e.jsx("img",{src:_,alt:"",className:"w-5 h-5 rounded-elm-chip object-cover flex-shrink-0 border border-(--elm-border,var(--color-gray-200))"}):e.jsx("span",{className:te.clsx("flex-shrink-0",n||m?"text-primary-700 dark:text-primary-300":t.hidden?"text-elm-text-disabled":"text-(--elm-text-subtle,var(--color-gray-400))"),children:e.jsx(Ae,{type:t.geometry.type})}),j?e.jsx("input",{...z,className:"flex-1 min-w-0 bg-elm-surface outline-none text-sm font-normal text-elm-text-secondary border border-primary-400 rounded-elm-control px-1.5 py-0.5 leading-snug"}):e.jsx("span",{className:"flex-1 min-w-0 font-normal truncate leading-snug border border-transparent rounded-elm-control px-1.5 py-0.5",onClick:R=>{R.metaKey||R.ctrlKey||R.shiftKey||!o||!f||(R.stopPropagation(),o(t.id),K.current!==null&&(clearTimeout(K.current),K.current=null),!(R.detail>=2)&&(K.current=window.setTimeout(()=>{f(t.id),K.current=null},300)))},onDoubleClick:R=>{R.stopPropagation(),K.current!==null&&(clearTimeout(K.current),K.current=null),P(B)},children:B}),!j&&E&&E>1&&e.jsx("span",{className:"flex-shrink-0 bg-primary-500 text-white text-xs font-bold px-1.5 py-0.5 rounded-full min-w-[1.25rem] text-center leading-none",children:E}),!j&&e.jsxs("div",{className:"flex items-center gap-0.5 flex-shrink-0",children:[e.jsx("button",{onClick:R=>{R.stopPropagation(),a(t.id)},className:"text-elm-text hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) p-1 rounded-elm-control opacity-0 group-hover:opacity-100","aria-label":"Edit",children:e.jsx(F.PencilSimple,{size:16})}),e.jsx("button",{onClick:R=>{R.stopPropagation(),p(t.id)},className:te.clsx("text-elm-text hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) p-1 rounded-elm-control",t.hidden?"":"opacity-0 group-hover:opacity-100"),"aria-label":"Toggle visibility",children:t.hidden?e.jsx(F.EyeClosed,{size:16}):e.jsx(F.Eye,{size:16})})]})]})})});function _r({group:r,featureCount:t,autoFocus:n,isSelected:s,onToggleCollapse:o,onToggleHidden:f,onRename:a,onDelete:p,onSelect:c,innerRef:x,dragHandleProps:h,containerProps:y,isDragging:m}){const S=d.useUIStore(A=>A.readonly),{isRenaming:k,startRenaming:M,inputProps:E}=Lt({initialLabel:r.name,disabled:S,onCommit:a,autoFocus:n}),[i,g]=l.useState(null),u=l.useRef(null);function I(A){A.stopPropagation();const B=u.current;if(B){const v=B.getBoundingClientRect();g({x:v.right,y:v.bottom+4})}}const b=l.useRef(null);l.useEffect(()=>()=>{b.current!==null&&clearTimeout(b.current)},[]);const C={label:r.hidden?"Show on map":"Hide from map",icon:r.hidden?e.jsx(F.Eye,{size:16}):e.jsx(F.EyeClosed,{size:16}),onClick:()=>f()},N=S?[C]:[C,{label:"Rename",icon:e.jsx(F.Pencil,{size:16}),onClick:()=>M(r.name)},{separator:!0},{label:"Ungroup",icon:e.jsx(F.FolderMinus,{size:16}),onClick:()=>p("ungroup")},{label:"Delete group",icon:e.jsx(F.Trash,{size:16}),onClick:()=>p("delete-features")}];return e.jsxs(e.Fragment,{children:[i&&e.jsx(D.ContextMenu,{x:i.x,y:i.y,onClose:()=>g(null),items:N}),e.jsxs("div",{ref:x,...y,...h,className:te.clsx("group flex items-center gap-2 px-2 py-1.5 rounded-elm-control text-sm font-medium cursor-default",m?"shadow-elm-control bg-elm-surface-raised":s?"bg-(--elm-row-selected) hover:bg-(--elm-row-selected-hover) text-primary-700 dark:text-primary-300":r.hidden?"text-elm-text-disabled hover:bg-(--elm-row-hover)":"text-elm-text-secondary hover:bg-(--elm-row-hover)"),style:{outline:"none",cursor:m?"grabbing":"default",...y==null?void 0:y.style},onClick:()=>{c&&c()},onContextMenu:A=>{A.preventDefault(),g({x:A.clientX,y:A.clientY})},children:[e.jsx("span",{className:te.clsx("flex-shrink-0 cursor-pointer",r.hidden?"text-elm-text-disabled":"text-elm-text-muted"),onClick:A=>{A.stopPropagation(),o()},"aria-label":r.collapsed?"Expand group":"Collapse group",children:r.collapsed?e.jsx(F.Folder,{size:20,weight:"fill"}):e.jsx(F.FolderOpen,{size:20,weight:"fill"})}),k?e.jsx("input",{...E,className:"flex-1 min-w-0 bg-elm-surface outline-none text-sm font-medium text-elm-text-secondary border border-primary-400 rounded-elm-control px-1.5 py-0.5 leading-snug"}):e.jsx("span",{className:"flex-1 min-w-0 truncate cursor-default leading-snug border border-transparent rounded-elm-control px-1.5 py-0.5",onClick:A=>{A.stopPropagation(),!(!c||A.metaKey||A.ctrlKey||A.shiftKey)&&(b.current!==null&&(clearTimeout(b.current),b.current=null),!(A.detail>=2)&&(b.current=window.setTimeout(()=>{c(),b.current=null},300)))},onDoubleClick:A=>{A.stopPropagation(),b.current!==null&&(clearTimeout(b.current),b.current=null),M(r.name)},children:r.name}),!k&&e.jsxs("div",{className:"ml-auto flex items-center gap-1 flex-shrink-0",children:[r.hidden&&e.jsx("button",{onClick:A=>{A.stopPropagation(),f()},className:"text-elm-text p-1 rounded-elm-control hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700))","aria-label":"Show on map",children:e.jsx(F.EyeClosed,{size:16})}),e.jsx("div",{className:"opacity-0 group-hover:opacity-100",children:e.jsx(D.Tooltip,{content:"More options",children:e.jsx("button",{ref:u,onClick:I,className:"text-elm-text p-1 rounded-elm-control hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700))","aria-label":"More options",children:e.jsx(F.DotsThree,{size:16,weight:"bold"})})})}),e.jsx("span",{className:te.clsx("font-normal w-7 text-right text-sm",r.hidden?"text-elm-text-disabled":"text-elm-text-subtle"),children:t})]})]})]})}function qr({geometry:r,partIndex:t,isSelected:n,onClick:s}){const o=$.getPartGeometry(r,t),f=$.getPartLabel(r,t);return e.jsx("li",{style:{listStyle:"none"},className:"ml-5",children:e.jsxs("div",{className:te.clsx("flex items-center gap-2 px-2 h-9 rounded-elm-control text-sm cursor-default",n?"bg-(--elm-row-selected) hover:bg-(--elm-row-selected-hover) text-primary-700 dark:text-primary-300":"text-elm-text-muted hover:bg-(--elm-row-hover)"),onClick:a=>{a.stopPropagation(),s()},children:[e.jsx("span",{className:te.clsx("flex-shrink-0",n?"text-primary-700 dark:text-primary-300":"text-(--elm-text-subtle,var(--color-gray-400))"),children:e.jsx(Ae,{type:o.type})}),e.jsx("span",{className:"flex-1 min-w-0 font-normal truncate leading-snug border border-transparent rounded-elm-control px-1.5 py-0.5",children:f})]})})}const Bt="elm_code_docked";function Kt(){const r=Q.useElementEditorConfig(),[t]=l.useState(()=>Z.readStorage(Bt,r)!=="0");return t}function Ot(r){const t=Q.useElementEditorConfig(),n=d.useUIStore(h=>h.layout),s=d.useUIStore($.sidebarTakesSpace),o=d.useUIStore(h=>h.sidebarWidth),f=d.useUIStore(h=>h.tableFullscreen),a=d.useUIStore(h=>h.setCodeDockWidth),p=d.useUIStore(h=>h.narrow),c=Ut("elm_code_dock_width",420,280,900);l.useLayoutEffect(()=>{if(r)return at(()=>a(p?0:c.width)),()=>at(()=>a(0))},[r,p,c.width,a]);const x=t.ui.layerList&&s;return{...c,className:`absolute top-0 ${p?"z-[600] shadow-elm-raised":"z-10"} flex flex-col bg-elm-surface border-l border-elm-border/80 overflow-hidden ${f?"hidden":""}`,style:{right:x?o:0,bottom:n==="split"?"33.33%":0,width:p?`min(${c.width}px, 100%)`:c.width,transition:"right 200ms ease"}}}function Hr(){const r=Kt(),t=Ot(r),n=l.useRef(null);return Re(n,r),r?e.jsx("div",{ref:n,"aria-hidden":"true",className:t.className,style:t.style}):null}function Vr(){const[r,t]=l.useState(""),[n,s]=l.useState(!1),[o,f]=l.useState(!1),[a,p]=l.useState(-1),c=l.useRef(null),x=l.useRef(null),{results:h,loading:y,error:m,flush:S}=d.useNominatim(r),k=l.useRef(!1),{flyTo:M,fitBounds:E}=d.useMapController(),{dataStore:i}=d.useGeoStore(),g=ue();l.useEffect(()=>{s(r.trim().length>=2),p(-1)},[r,h]),l.useEffect(()=>{k.current=!1},[r]),l.useEffect(()=>{!k.current||y||(k.current=!1,h.length&&N(0))},[h,y]),l.useEffect(()=>{function v(j){c.current&&!c.current.contains(j.target)&&s(!1)}return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[]),l.useEffect(()=>{function v(j){var P,z;if(g(j)){if(j.key==="f"&&(j.metaKey||j.ctrlKey)&&!$t(j)){j.preventDefault(),(P=x.current)==null||P.focus();return}j.key==="Escape"&&(n||document.activeElement===x.current)&&(j.stopPropagation(),t(""),s(!1),p(-1),(z=x.current)==null||z.blur())}}return window.addEventListener("keydown",v,{capture:!0}),()=>window.removeEventListener("keydown",v,{capture:!0})},[n,g]);function u(v){M==null||M([parseFloat(v.lat),parseFloat(v.lon)],15)}function I(v){const j=parseFloat(v.lat),P=parseFloat(v.lon),z=i.getState().getDefaultSchema(),K={};for(const J of z.fields)K[J.key]=J.key==="name"?v.display_name.split(",")[0].trim():"";const _={type:"Feature",id:crypto.randomUUID(),schemaId:z.id,geometry:{type:"Point",coordinates:[P,j]},properties:K};i.getState().addFeature(_),M==null||M([j,P],15),C()}function b(v){const j=v.geojson;if(!j||j.type==="Point")return;let P;j.type==="MultiPolygon"?P={type:"Polygon",coordinates:j.coordinates.reduce((J,L)=>L[0].length>J[0].length?L:J)}:P=j;const z={type:"Feature",id:crypto.randomUUID(),schemaId:$.BOUNDARIES_SCHEMA_ID,geometry:P,properties:{name:v.display_name.split(",")[0].trim()}};i.getState().addFeature(z),E==null||E(Z.getGeometryBBox(P)),C()}function C(){t(""),s(!1),p(-1)}function N(v){p(v),u(h[v]),requestAnimationFrame(()=>{var j;return(j=x.current)==null?void 0:j.focus()})}function A(v){if(v.key==="Enter"){if(r.trim().length<2)return;if(v.preventDefault(),h.length&&!y){N(a>=0?a:0);return}k.current=!0,s(!0),S();return}h.length&&(v.key==="ArrowDown"?(v.preventDefault(),p(j=>(j+1)%h.length)):v.key==="ArrowUp"&&(v.preventDefault(),p(j=>j<=0?h.length-1:j-1)))}const B=n&&r.trim().length>=2;return{query:r,setQuery:t,setOpen:s,showDropdown:B,containerRef:c,inputRef:x,focused:o,setFocused:f,results:h,loading:y,error:m,flyToResult:u,handleAdd:I,handleAddShape:b,clear:C,activeIndex:a,setActiveIndex:p,handleInputKeyDown:A}}function $t(r){var t,n;return((n=(t=r.target)==null?void 0:t.closest)==null?void 0:n.call(t,".cm-editor"))!=null}const Jr=208,Xr={"top-left":{style:{top:16,left:16},className:"flex-col items-start"},"top-center":{style:{top:16,left:0,right:0},className:"flex-col items-center"},"top-right":{style:{top:16,right:16},className:"flex-col items-end"},"left-center":{style:{left:16,top:"50%",transform:"translateY(-50%)"},className:"flex-col items-start"},"right-center":{style:{right:16,top:"50%",transform:"translateY(-50%)"},className:"flex-col items-end"},"bottom-left":{style:{bottom:16,left:16},className:"flex-col-reverse items-start"},"bottom-center":{style:{bottom:16,left:0,right:0},className:"flex-col-reverse items-center"},"bottom-right":{style:{bottom:16,right:16},className:"flex-col-reverse items-end"}};function Zr({embedded:r}={}){const t=d.useDataStore(U=>U.features.length),n=d.useDataStore(U=>U.maxFeatures),s=n!=null&&t>=n,o=d.useEmit(),f=Q.useElementEditorConfig(),{toolbar:a}=f,p=a.direction==="vertical",c=Xr[a.position],x=d.useUIStore($.sidebarTakesSpace),h=d.useUIStore(U=>U.sidebarWidth),y=d.useUIStore(U=>U.codeDockWidth),m=d.useUIStore(U=>U.layout),S=f.ui.layerList&&x,k=a.position.startsWith("bottom"),M=a.position==="left-center"||a.position==="right-center",E=m==="split"&&k,i=m==="split"&&M,g=(()=>{let U=c.style;const V=a.position.endsWith("-right")||a.position.startsWith("right");return S?V&&(U={...U,right:h+16+y}):f.ui.layerList&&m==="panel"&&a.position==="top-right"?U={...U,right:72+y}:V&&y&&(U={...U,right:16+y}),E?U={...U,bottom:"calc(33.33% + 16px)"}:k&&(U={...U,bottom:"calc(var(--elm-table-offset, 0px) + 16px)"}),i&&(U={...U,top:"33.33%"}),U===c.style?c:{...c,style:U}})(),u=d.useUIStore(U=>U.editingMode),I=d.useUIStore(U=>U.enabledTools),b=d.useUIStore(U=>U.unavailableTools),C=d.useUIStore(U=>U.readonly),N=d.useUIStore(U=>U.setEditingMode);function A(U){if(s&&U!=="none"){o({type:"error",code:"limit-reached",source:"editor",message:$.featureLimitMessage(n)});return}N(U)}const{getKey:B}=me(),{query:v,setQuery:j,setOpen:P,showDropdown:z,containerRef:K,inputRef:_,focused:J,setFocused:L,results:w,loading:O,error:q,flyToResult:R,handleAdd:T,handleAddShape:G,clear:W,activeIndex:H,setActiveIndex:X,handleInputKeyDown:ee}=Vr(),de=l.useRef(null),ye=l.useRef(null);l.useEffect(()=>{var oe;if(r||!k)return;const U=(oe=ye.current)==null?void 0:oe.closest("[data-elm-theme]");if(!U)return;const V=()=>{var he;const fe=((he=ye.current)==null?void 0:he.offsetHeight)??0;U.style.setProperty("--elm-bottom-toolbar-offset",`${fe+8}px`)};V();const Y=new ResizeObserver(V);return ye.current&&Y.observe(ye.current),()=>{Y.disconnect(),U.style.setProperty("--elm-bottom-toolbar-offset","0px")}},[r,k]);const[ve,ae]=l.useState(!1),Oe=l.useRef(null),$e=l.useRef(null),[tr,Ge]=l.useState(!1),We=l.useRef(null);l.useLayoutEffect(()=>{var Ye,Qe;const U=We.current;if(p||!U){Ge(!1);return}const V=((Ye=K.current)==null?void 0:Ye.closest('[data-elm-edge="top"], [data-elm-edge="bottom"]'))??null,Y=V??((Qe=K.current)==null?void 0:Qe.offsetParent);if(!Y)return;const oe=we=>we.flatMap(le=>getComputedStyle(le).display==="contents"?oe([...le.children]):[le.offsetWidth]),fe=()=>{const we=oe([...U.children]).filter(Pe=>Pe>0),le=getComputedStyle(U),or=parseFloat(le.paddingLeft)+parseFloat(le.paddingRight)+parseFloat(le.borderLeftWidth)+parseFloat(le.borderRightWidth);let et=we.reduce((Pe,sr)=>Pe+sr,0)+8*Math.max(0,we.length-1)+or;const tt=U.querySelector("[data-elm-search-toggle]");tt&&(et+=Jr-tt.offsetWidth);const rt=V?V.clientWidth-(parseFloat(V.dataset.elmClearance??"")||0):Y.clientWidth-32;Ge(rt>0&&et>rt+.5)};fe();const he=new ResizeObserver(()=>fe());return he.observe(Y),he.observe(U),()=>he.disconnect()},[p,K]);const ie=p||tr,_e=l.useRef(ie);_e.current=ie,l.useEffect(()=>{ie||ae(!1)},[ie]);const qe=l.useRef(null),He=ue();function Ve(){const U=qe.current;U&&(U.style.animation="none",U.offsetWidth,U.style.animation="press-pulse 200ms ease-out")}l.useEffect(()=>{function U(V){V.key==="f"&&(V.metaKey||V.ctrlKey)&&He(V)&&!$t(V)&&(_e.current?ae(!0):Ve())}return window.addEventListener("keydown",U),()=>window.removeEventListener("keydown",U)},[He]);const rr=a.position.startsWith("right")||a.position.endsWith("-right")?"left":"right";l.useEffect(()=>{if(!ve)return;requestAnimationFrame(()=>{var Y;return(Y=_.current)==null?void 0:Y.focus()});function U(Y){var oe,fe;!((oe=Oe.current)!=null&&oe.contains(Y.target))&&!((fe=$e.current)!=null&&fe.contains(Y.target))&&ae(!1)}function V(Y){Y.key==="Escape"&&ae(!1)}return document.addEventListener("mousedown",U),document.addEventListener("keydown",V),()=>{document.removeEventListener("mousedown",U),document.removeEventListener("keydown",V)}},[ve,_]);const Se=u==="place-point",ke=u==="draw-line",je=u==="draw-polygon",Ee=u==="draw-circle",Ce=u==="draw-rect",Ie=u==="draw-route",De=u==="draw-freehand",Ne=u==="pick-shape",Je=u==="measure",re=U=>(!I||I.includes(U))&&!b.includes(U),nr=null;function Xe(U){var V;if(U.key==="Tab"&&H>=0){U.preventDefault(),(V=de.current)==null||V.focusAdd(H);return}ee(U)}function Ze(U,V){var oe;const Y=((V+U)%w.length+w.length)%w.length;X(Y),(oe=de.current)==null||oe.focusAdd(Y)}return e.jsxs("div",{ref:K,"data-elm-search-open":z?"true":void 0,className:r?"select-none":te.clsx("absolute z-[500] flex gap-2 pointer-events-none select-none",g.className),style:r?void 0:g.style,children:[e.jsxs("div",{ref:ye,className:"relative w-fit max-w-full",children:[z&&!ie&&e.jsx(D.SearchDropdown,{ref:de,results:w,loading:O,error:q,onGo:R,onAdd:C?void 0:T,onAddShape:C?void 0:G,activeIndex:H,onHoverIndex:X,onNavigate:Ze,layout:"row",className:`absolute left-0 right-0 bg-elm-surface border border-elm-border rounded-elm shadow-elm z-50 overflow-hidden pointer-events-auto ${k?"bottom-full mb-2":"top-full mt-2"}`}),e.jsxs("div",{ref:We,className:te.clsx("flex gap-2 bg-elm-surface/95 backdrop-blur-md border border-(--elm-border,color-mix(in_oklab,var(--color-black)_10%,transparent)) dark:border-(--elm-border,color-mix(in_oklab,var(--color-white)_10%,transparent)) shadow-elm rounded-elm pointer-events-auto antialiased",p?"flex-col items-center p-[7px]":"flex-row flex-wrap justify-center items-center p-[7px]"),children:[C?null:e.jsxs(e.Fragment,{children:[re("point")&&e.jsx(D.ToolButton,{active:Se,disabled:!Se&&s,onClick:()=>A(Se?"none":"place-point"),label:"Point",shortcut:B("place-point").toUpperCase(),shortcutId:"place-point",children:e.jsx(F.MapPin,{size:24})}),re("line")&&e.jsx(D.ToolButton,{active:ke,disabled:!ke&&s,onClick:()=>A(ke?"none":"draw-line"),label:"Line",shortcut:B("draw-line").toUpperCase(),shortcutId:"draw-line",children:e.jsx(F.LineSegment,{size:24})}),re("polygon")&&e.jsx(D.ToolButton,{active:je,disabled:!je&&s,onClick:()=>A(je?"none":"draw-polygon"),label:"Area",shortcut:B("draw-polygon").toUpperCase(),shortcutId:"draw-polygon",children:e.jsx(F.Polygon,{size:24})}),re("route")&&e.jsx(D.ToolButton,{active:Ie,disabled:!Ie&&s,onClick:()=>A(Ie?"none":"draw-route"),label:"Route",shortcut:B("draw-route").toUpperCase(),shortcutId:"draw-route",children:e.jsx(F.Path,{size:24})}),re("circle")&&e.jsx(D.ToolButton,{active:Ee,disabled:!Ee&&s,onClick:()=>A(Ee?"none":"draw-circle"),label:"Circle",shortcut:B("draw-circle").toUpperCase(),shortcutId:"draw-circle",children:e.jsx(F.Circle,{size:24})}),re("rectangle")&&e.jsx(D.ToolButton,{active:Ce,disabled:!Ce&&s,onClick:()=>A(Ce?"none":"draw-rect"),label:"Rectangle",shortcut:B("draw-rect").toUpperCase(),shortcutId:"draw-rect",children:e.jsx(F.Rectangle,{size:24})}),re("freehand")&&e.jsx(D.ToolButton,{active:De,disabled:!De&&s,onClick:()=>A(De?"none":"draw-freehand"),label:"Freehand",shortcut:B("draw-freehand").toUpperCase(),shortcutId:"draw-freehand",children:e.jsx(F.ScribbleLoop,{size:24})}),re("picker")&&e.jsx(D.ToolButton,{active:Ne,disabled:!Ne&&s,onClick:()=>A(Ne?"none":"pick-shape"),label:"Picker",shortcut:B("picker").toUpperCase(),shortcutId:"picker",children:e.jsx(F.HandTap,{size:24})})]}),re("measure")&&e.jsxs(e.Fragment,{children:[!C&&e.jsx(D.ToolbarDivider$1,{vertical:p}),e.jsx(D.ToolButton,{active:Je,onClick:()=>N(Je?"none":"measure"),label:"Measure",shortcut:B("measure").toUpperCase(),shortcutId:"measure",children:e.jsx(F.Ruler,{size:24})}),ie&&re("search")&&e.jsx(D.ToolbarDivider$1,{vertical:p})]}),re("search")&&!ie&&e.jsxs("div",{className:"flex items-center gap-2 pl-2.5 pr-3 py-1.5 bg-(--elm-surface-sunken,var(--color-gray-100)) dark:bg-(--elm-surface-sunken,color-mix(in_oklab,var(--color-white)_7%,transparent)) hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-gray-200)_70%,transparent)) dark:hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-white)_10%,transparent)) rounded-elm-control transition-colors w-52 focus-within:ring-1 focus-within:ring-inset focus-within:ring-(--elm-border-strong,var(--color-gray-300)) dark:focus-within:ring-(--elm-border-strong,var(--color-gray-600))",children:[e.jsxs("div",{ref:qe,className:"flex items-center gap-2 flex-1 min-w-0",children:[e.jsx(F.MagnifyingGlass,{size:14,className:"text-elm-text-subtle flex-shrink-0"}),e.jsx("input",{ref:_,type:"text",value:v,onChange:U=>j(U.target.value),onFocus:()=>{L(!0),Ve(),v.trim().length>=2&&P(!0)},onBlur:()=>L(!1),onKeyDown:Xe,placeholder:"Search places…",className:"bg-transparent text-sm text-elm-text-secondary placeholder-elm-text-muted outline-none w-full",autoComplete:"off"}),O&&e.jsx("div",{className:"w-3 h-3 border-2 border-(--elm-border-strong,var(--color-gray-300)) border-t-primary-500 rounded-full animate-spin flex-shrink-0"}),!O&&v&&e.jsx("button",{onClick:W,className:"p-1 -m-1 rounded-elm-chip text-elm-text hover:bg-(--elm-control-hover,var(--color-gray-200)) dark:hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-white)_15%,transparent)) transition-colors flex-shrink-0","aria-label":"Clear search",children:e.jsx(F.X,{size:12})})]}),!O&&!v&&e.jsxs("span",{className:te.clsx("flex items-center gap-0.5 flex-shrink-0 transition-all duration-110 ease-out",J?"opacity-0 scale-75 pointer-events-none":"opacity-100 scale-100"),children:[e.jsx(D.Kbd,{children:"⌘"}),e.jsx(D.Kbd,{children:"F"})]})]}),re("search")&&ie&&e.jsxs("div",{ref:$e,"data-elm-search-toggle":"",className:p?"relative":void 0,children:[e.jsx(D.ToolButton,{active:ve,onClick:()=>ae(U=>!U),label:"Search places",shortcut:"⌘F",children:e.jsx(F.MagnifyingGlass,{size:24})}),ve&&e.jsxs("div",{ref:Oe,className:te.clsx("absolute z-50 bg-elm-surface/97 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm pointer-events-auto antialiased flex flex-col",p?rr==="right"?"top-0 w-80 left-full ml-2":"top-0 w-80 right-full mr-2":`left-0 right-0 min-w-0 ${k?"bottom-full mb-2":"top-full mt-2"}`),children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2",children:[e.jsx(F.MagnifyingGlass,{size:16,className:"text-elm-text-subtle flex-shrink-0"}),e.jsx("input",{ref:_,type:"text",value:v,onChange:U=>j(U.target.value),onFocus:()=>{L(!0),v.trim().length>=2&&P(!0)},onBlur:()=>L(!1),onKeyDown:Xe,placeholder:"Search places…",className:"bg-transparent text-sm text-elm-text-secondary placeholder-elm-text-muted outline-none w-full",autoComplete:"off"}),O&&e.jsx("div",{className:"w-3 h-3 border-2 border-(--elm-border-strong,var(--color-gray-300)) border-t-primary-500 rounded-full animate-spin flex-shrink-0"}),!O&&v&&e.jsx("button",{onClick:W,className:"p-1 -m-1 rounded-elm-chip text-elm-text hover:bg-(--elm-control-hover,var(--color-gray-200)) dark:hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-white)_15%,transparent)) transition-colors flex-shrink-0","aria-label":"Clear search",children:e.jsx(F.X,{size:12})})]}),z&&e.jsx(D.SearchDropdown,{ref:de,results:w,loading:O,error:q,onGo:U=>{R(U),ae(!1)},onAdd:C?void 0:U=>{T(U),ae(!1)},onAddShape:C?void 0:U=>{G(U),ae(!1)},activeIndex:H,onHoverIndex:X,onNavigate:Ze,className:"border-t border-elm-border max-h-80 overflow-y-auto"})]})]})]})]}),!C&&nr]})}function ct(r){const t=[],n=s=>{for(const o of Array.from(s.children)){if(getComputedStyle(o).display==="contents"){n(o);continue}const f=o.getBoundingClientRect();if(!f.width)continue;const a=f.top+f.height/2;t.some(p=>Math.abs(p-a)<8)||t.push(a)}};return n(r),t.length}function Yr(r,t){l.useLayoutEffect(()=>{const n=r.current;if(!n)return;const s=()=>{n.style.maxWidth="";const c=ct(n);if(c<2)return;let x=0,h=n.offsetWidth;for(;h-x>1;){const y=x+h>>1;n.style.maxWidth=y+"px",ct(n)>c||n.scrollWidth>n.clientWidth?x=y:h=y}n.style.maxWidth=h+"px"};s();const o=[];for(let c=n.parentElement;c&&o.length<8&&(o.push(c),!c.hasAttribute("data-elm-theme"));c=c.parentElement);const f=new WeakMap,a=()=>{for(const c of o)f.set(c,c.clientWidth)};a();const p=new ResizeObserver(c=>{c.every(x=>f.get(x.target)===x.target.clientWidth)||(s(),a())});for(const c of o)p.observe(c);return()=>{p.disconnect(),n.style.maxWidth=""}},[r,t])}const Qr=l.lazy(()=>Promise.resolve().then(()=>require("./BooleanOperations-DrQS-3mJ.cjs")));function en(){const{dataStore:r}=d.useGeoStore(),t=d.useUIStore(j=>j.readonly),n=d.useUIStore(j=>j.transformActive),s=d.useUIStore(j=>j.setTransformActive),o=d.useUIStore(j=>j.editingMode),f=d.useUIStore(j=>j.setEditingMode),a=d.useDataStore(j=>j.selectedIds),p=a.length===1?a[0]:null,c=d.useUIStore(j=>j.closeDialog),{getKey:x}=me(),h=d.useEmit(),y=d.useDataStore(j=>{if(!p)return null;const P=j.features.find(z=>z.id===p);return(P==null?void 0:P.geometry.type)??null}),m=l.useRef(null);if(Yr(m,`${t}|${a.length}|${y}`),t)return null;const S=p!==null||a.length>0,k=y==="Polygon"||y==="MultiPolygon",M=y==="MultiPoint"||y==="MultiPolygon"||y==="MultiLineString"||y==="GeometryCollection",E=a.length===1&&y==="Point",i=S&&!E,g=k,u=$.canProcessShape(y),I=M,b=a.length>=2,C=I||b;function N(){if(a.length!==0&&r.getState().duplicateSelection())if(a.length===1){const j=r.getState().features.find(P=>P.id===a[0]);h({type:"feature:duplicated",featureId:a[0],label:String((j==null?void 0:j.properties.name)||"feature")})}else h({type:"features:duplicated",count:a.length})}function A(){if(!p||!M)return;const j=r.getState().features.find(z=>z.id===p);if(!j)return;const P=$.getPartCount(j.geometry);r.getState().breakMultiGeometry(p)&&h({type:"feature:broken",featureId:p,count:P,undo:()=>r.getState().undo()})}function B(){a.length<2||(r.getState().mergeFeatures(),h({type:"success",message:`Merged ${a.length} features`}))}function v(){if(a.length===0)return;const j=a.length,P=j===1?r.getState().features.find(K=>K.id===a[0]):null,z=j===1?String((P==null?void 0:P.properties.name)||"Unnamed feature"):`${j} features`;r.getState().deleteSelection(),c(),h(j===1?{type:"feature:deleted",featureId:a[0],label:z,undo:()=>r.getState().undo()}:{type:"features:deleted",count:j,undo:()=>r.getState().undo()})}return e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3 max-w-full pointer-events-none",children:[S&&e.jsxs("div",{ref:m,className:"flex flex-wrap items-center justify-center gap-2 max-w-full bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-2 py-2 pointer-events-auto antialiased",children:[i&&e.jsx(D.EditToolbarBtn,{label:"Transform",shortcut:e.jsx(D.KbdDark,{children:x("toggle-transform").toUpperCase()}),shortcutId:"toggle-transform",onClick:()=>{s(!n),!n&&o!=="none"&&f("none")},active:n,children:e.jsx(F.Resize,{size:24})}),i&&(u||C)&&e.jsx(D.ToolbarDivider,{}),g&&e.jsxs(e.Fragment,{children:[e.jsx(D.EditToolbarBtn,{label:"Cut hole",shortcut:e.jsx(D.KbdDark,{children:x("cut-hole").toUpperCase()}),shortcutId:"cut-hole",onClick:()=>{f(o==="cut-hole"?"none":"cut-hole"),n&&s(!1)},active:o==="cut-hole",children:e.jsx(F.Scissors,{size:24})}),e.jsx(D.EditToolbarBtn,{label:"Slice shape",shortcut:e.jsx(D.KbdDark,{children:x("slice-shape").toUpperCase()}),shortcutId:"slice-shape",onClick:()=>{f(o==="slice-shape"?"none":"slice-shape"),n&&s(!1)},active:o==="slice-shape",children:e.jsx(F.Knife,{size:24})})]}),u&&e.jsxs(e.Fragment,{children:[e.jsx(D.EditToolbarBtn,{label:"Simplify shape",onClick:()=>{f(o==="simplify-shape"?"none":"simplify-shape"),n&&s(!1)},active:o==="simplify-shape",children:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:o==="simplify-shape"?1.5:1,strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"2.5,8 5.25,3.5 8,8 10.75,12.5 13.5,8"})})}),e.jsx(D.EditToolbarBtn,{label:"Smooth shape",onClick:()=>{f(o==="smooth-shape"?"none":"smooth-shape"),n&&s(!1)},active:o==="smooth-shape",children:e.jsx(F.WaveSine,{size:24})}),e.jsx(D.EditToolbarBtn,{label:"Buffer",onClick:()=>{f(o==="buffer-shape"?"none":"buffer-shape"),n&&s(!1)},active:o==="buffer-shape",children:e.jsx(F.SquareLogo,{size:24})})]}),u&&C&&e.jsx(D.ToolbarDivider,{}),I&&e.jsx(D.EditToolbarBtn,{label:"Break apart",shortcut:e.jsx(D.KbdDark,{children:x("break-apart").toUpperCase()}),shortcutId:"break-apart",onClick:A,children:e.jsx(F.Shapes,{size:24})}),b&&e.jsx(D.EditToolbarBtn,{label:"Merge",onClick:B,children:e.jsx(F.StackPlus,{size:24})}),(i||u||C)&&e.jsx(D.ToolbarDivider,{}),e.jsx(D.EditToolbarBtn,{label:"Duplicate",shortcut:e.jsxs(e.Fragment,{children:[e.jsx(D.KbdDark,{children:"⌘"}),e.jsx(D.KbdDark,{children:"D"})]}),shortcutId:"duplicate",onClick:N,children:e.jsx(F.CopySimple,{size:24})}),e.jsx(D.EditToolbarBtn,{label:"Delete",shortcut:e.jsx(D.KbdDark,{children:Z.getFixedShortcutDisplay("delete-selected")}),shortcutId:"delete-selected",onClick:v,children:e.jsx(F.Trash,{size:24})})]}),a.length>=2&&e.jsx(l.Suspense,{fallback:null,children:e.jsx(Qr,{})})]})}const tn="calc(var(--elm-bottom-stack-offset, calc(var(--elm-table-offset, 0px) + var(--elm-bottom-toolbar-offset, 0px) + 16px)) + 58px)";function rn({mapContainer:r,count:t,onSimplify:n,onDelete:s}){const o=r.parentElement;return o?ft.createPortal(e.jsx("div",{className:"absolute left-0 right-0 z-[400] flex justify-center pointer-events-none",style:{bottom:tn},onMouseDown:f=>f.stopPropagation(),onContextMenu:f=>f.stopPropagation(),children:e.jsxs("div",{className:"flex items-center gap-2 bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-2 py-2 pointer-events-auto antialiased",children:[e.jsxs("span",{className:"px-1 text-sm text-elm-text-muted tabular-nums",children:[t," point",t!==1?"s":""," selected"]}),e.jsx(D.ToolbarDivider,{}),e.jsxs(D.EditToolbarBtn,{label:"Simplify selected points",onClick:n,disabled:t<3,children:[e.jsx(F.LineSegments,{size:24}),e.jsx("span",{className:"px-1 font-medium",children:"Simplify"})]}),e.jsxs(D.EditToolbarBtn,{label:"Delete selected points",onClick:s,children:[e.jsx(F.Trash,{size:24}),e.jsx("span",{className:"px-1 font-medium",children:"Delete"})]}),e.jsx(D.Kbd,{children:"Del"})]})}),o):null}const nn=e.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:1.2,strokeLinecap:"round",strokeLinejoin:"round",children:e.jsx("polyline",{points:"2.5,8 5.25,3.5 8,8 10.75,12.5 13.5,8"})}),on=[{mode:"cut-hole",label:"Cut hole",icon:e.jsx(F.Scissors,{size:16}),shortcut:"cut-hole"},{mode:"slice-shape",label:"Slice shape",icon:e.jsx(F.Knife,{size:16}),shortcut:"slice-shape"}],sn=[{mode:"simplify-shape",label:"Simplify shape",icon:nn},{mode:"smooth-shape",label:"Smooth shape",icon:e.jsx(F.WaveSine,{size:16})},{mode:"buffer-shape",label:"Buffer",icon:e.jsx(F.SquareLogo,{size:16})}];function an({x:r,y:t,data:n,onClose:s}){const{feature:o,requestPreciseCoords:f}=n,{dataStore:a}=d.useGeoStore(),p=d.useUIStore(N=>N.readonly),c=d.useUIStore(N=>N.transformActive),x=d.useUIStore(N=>N.setTransformActive),h=d.useUIStore(N=>N.editingMode),y=d.useUIStore(N=>N.setEditingMode),m=d.useUIStore(N=>N.closeDialog),S=d.useDataStore(N=>N.selectedIds),k=d.useEmit(),{getKey:M}=me();if(p)return null;const E=o.geometry.type,i=E==="Polygon"||E==="MultiPolygon",g=E==="MultiPoint"||E==="MultiPolygon"||E==="MultiLineString"||E==="GeometryCollection",u=S.length>=2&&S.includes(o.id);function I(N){y(h===N?"none":N),c&&x(!1)}function b(N){return e.jsx(D.KbdDark,{children:M(N).toUpperCase()})}const C=[];if(C.push({label:"Transform",icon:e.jsx(F.Resize,{size:16}),shortcut:b("toggle-transform"),onClick:()=>{x(!c),!c&&h!=="none"&&y("none")}}),$.canProcessShape(E)){C.push({separator:!0});for(const N of[...i?on:[],...sn])C.push({label:N.label,icon:N.icon,shortcut:N.shortcut?b(N.shortcut):void 0,onClick:()=>I(N.mode)})}return i&&C.push({label:"Center point",icon:e.jsx(F.DotOutline,{size:16,weight:"fill"}),onClick:()=>{var v;const N=cr.centroid(o),A=typeof((v=o.properties)==null?void 0:v.name)=="string"&&o.properties.name?o.properties.name:null,B={type:"Feature",id:crypto.randomUUID(),geometry:{type:"Point",coordinates:N.geometry.coordinates},properties:A?{name:`${A} center`}:{},groupId:o.groupId};a.getState().addFeature(B)}}),(g||u)&&(C.push({separator:!0}),g&&C.push({label:"Break apart",icon:e.jsx(F.Shapes,{size:16}),shortcut:b("break-apart"),onClick:()=>{const N=$.getPartCount(o.geometry);a.getState().breakMultiGeometry(o.id)&&k({type:"feature:broken",featureId:o.id,count:N,undo:()=>a.getState().undo()})}}),u&&C.push({label:`Merge ${S.length} features`,icon:e.jsx(F.StackPlus,{size:16}),onClick:()=>{const N=S.length;a.getState().mergeFeatures(),k({type:"success",message:`Merged ${N} features`})}})),f&&(C.push({separator:!0}),C.push({label:"Precise coordinates…",icon:e.jsx(F.Crosshair,{size:16}),onClick:f})),C.push({separator:!0}),C.push({label:u?`Delete ${S.length} features`:"Delete",icon:e.jsx(F.Trash,{size:16}),shortcut:e.jsx(D.KbdDark,{children:Z.getFixedShortcutDisplay("delete-selected")}),onClick:()=>{var B;const N=u?S.length:1,A=String(((B=o.properties)==null?void 0:B.name)||"feature");a.getState().deleteSelection(),m(),k(N===1?{type:"feature:deleted",featureId:o.id,label:A,undo:()=>a.getState().undo()}:{type:"features:deleted",count:N,undo:()=>a.getState().undo()})}}),e.jsx(D.ContextMenu,{x:r,y:t,items:C,onClose:s})}function Gt({size:r,tooltipSide:t}){const n=d.useDataStore(f=>f.undoStack.length>0),s=d.useDataStore(f=>f.undo),o=d.useEmit();return e.jsx(pe,{label:"Undo",shortcutId:"undo",shortcut:e.jsxs("span",{className:"flex items-center gap-0.5",children:[e.jsx(D.KbdDark,{children:"⌘"}),e.jsx(D.KbdDark,{children:"Z"})]}),onClick:()=>{n&&(s(),o({type:"undo"}))},disabled:!n,size:r,tooltipSide:t,children:e.jsx(F.ArrowArcLeft,{size:24})})}function Wt({size:r,tooltipSide:t}){const n=d.useDataStore(f=>f.redoStack.length>0),s=d.useDataStore(f=>f.redo),o=d.useEmit();return e.jsx(pe,{label:"Redo",shortcutId:"redo",shortcut:e.jsxs("span",{className:"flex items-center gap-0.5",children:[e.jsx(D.KbdDark,{children:"⌘"}),e.jsx(D.KbdDark,{children:"⇧"}),e.jsx(D.KbdDark,{children:"Z"})]}),onClick:()=>{n&&(s(),o({type:"redo"}))},disabled:!n,size:r,tooltipSide:t,children:e.jsx(F.ArrowArcRight,{size:24})})}function _t({direction:r="horizontal",children:t}){return e.jsx("div",{"data-elm-group":"",className:`flex bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm pointer-events-auto antialiased items-center gap-1 px-2 py-1.5 ${r==="vertical"?"flex-col":"flex-row"}`,children:t})}function ln({direction:r="vertical"}){const t=r==="vertical"?"right":"top";return e.jsxs(_t,{direction:r,children:[e.jsx(Gt,{size:"group",tooltipSide:t}),e.jsx(Wt,{size:"group",tooltipSide:t})]})}const ut="h-8 px-3 rounded-elm-control text-sm flex items-center justify-center gap-1.5 active:scale-[0.95]",ce={before:"Undo last",key:"⌫",keyName:"Backspace"},cn={before:"Hold",key:"Shift",keyName:"Shift",after:"for a square"},un=r=>typeof r=="string"?r:`${r.before} ${r.keyName} ${r.after??""}`;function dn({parts:r}){return e.jsx("ul",{"data-elm-hint":!0,"aria-label":"Drawing hints",className:"flex flex-wrap items-center justify-center gap-x-4 gap-y-1 min-w-0 px-2 m-0 list-none text-sm text-elm-text-muted",children:r.map(t=>e.jsx("li",{className:"inline-flex items-center gap-1.5 whitespace-nowrap",children:typeof t=="string"?t:e.jsxs(e.Fragment,{children:[t.before,t.key===t.keyName?e.jsx(D.Kbd,{children:t.key}):e.jsxs(e.Fragment,{children:[e.jsx("span",{"aria-hidden":"true",className:"inline-flex",children:e.jsx(D.Kbd,{children:t.key})}),e.jsx("span",{className:"sr-only",children:t.keyName})]}),t.after]})},un(t)))})}function dt(){const r=l.useRef(null);return l.useLayoutEffect(()=>{const t=r.current,n=t==null?void 0:t.parentElement;if(!t||!n)return;const s=(a,p)=>{let c=a;for(;c&&getComputedStyle(c).display==="contents";)c=p==="first"?c.firstElementChild:c.lastElementChild;const x=(c??a).getBoundingClientRect();return x.top+x.height/2},o=()=>{t.style.display="";const a=t.previousElementSibling,p=t.nextElementSibling,c=s(t,"first");(!a||!p||Math.abs(s(a,"last")-c)>4||Math.abs(s(p,"first")-c)>4)&&(t.style.display="none")};o();const f=new ResizeObserver(o);f.observe(n);for(const a of Array.from(n.children))a!==t&&f.observe(a);return()=>f.disconnect()}),e.jsx("span",{ref:r,"aria-hidden":"true",className:"flex",children:e.jsx(D.ToolbarDivider,{})})}function fn(){const{ui:r}=Q.useElementEditorConfig(),t=d.useUIStore(w=>w.editingMode),n=d.useUIStore(w=>w.lineInProgress),s=d.useUIStore(w=>w.polygonInProgress),o=d.useUIStore(w=>w.routeWaypoints),f=d.useUIStore(w=>w.routeLoading),a=d.useUIStore(w=>w.commitLine),p=d.useUIStore(w=>w.commitPolygon),c=d.useUIStore(w=>w.commitRoute),x=d.useUIStore(w=>w.commitSliceShape),h=d.useUIStore(w=>w.commitCutHole),y=d.useUIStore(w=>w.cancelDrawing),m=d.useUIStore(w=>w.circleCenter),S=d.useUIStore(w=>w.rectCorner),k=d.useUIStore(w=>w.freehandPoints),M=d.useUIStore(w=>w.freehandClosed),E=d.useUIStore(w=>w.setFreehandClosed),i=d.useUIStore(w=>w.measurePoints),g=d.useUIStore(w=>w.measureMode),u=d.useUIStore(w=>w.setMeasureMode),I=t==="draw-line"||t==="slice-shape",b=t==="draw-polygon"||t==="cut-hole",C=t==="draw-route",N=t==="draw-circle",A=t==="draw-rect",B=t==="draw-freehand",v=t==="place-point",j=t==="measure",P=t==="pick-shape";if(!(I||b||C||N||A||B||v)&&!j&&!P)return null;const K=n.length>0||s.length>0||!!m||!!S||o.length>0||k.length>0||i.length>0;function _(){if(t==="slice-shape"){if(n.length<2)return;x()}else if(t==="cut-hole"){if(s.length<3)return;h()}else if(I){if(n.length<2)return;a({})}else if(b){if(s.length<3)return;p({})}else if(C){if(o.length<2)return;c()}}const J=I?n.length>=2:b?s.length>=3:C?o.length>=2&&!f:!1,L=v?["Click to place a point"]:t==="draw-line"?n.length===0?["Click to place the first point"]:["Click to add points","Double-click to finish",ce]:t==="draw-polygon"?s.length===0?["Click to place the first point"]:s.length<3?["Click to continue",ce]:["Click to add points","Double-click to close",ce]:C?o.length===0?["Click to place the first waypoint"]:["Click to add waypoints",ce]:N?["Click and drag to size"]:A?["Click and drag to size",cn]:B?["Click and drag to draw"]:t==="slice-shape"?n.length===0?["Draw a line across the shape to slice it"]:["Click to add points","Double-click to cut",ce]:t==="cut-hole"?s.length===0?["Draw a shape inside to cut a hole"]:s.length<3?["Click to continue",ce]:["Click to add points","Double-click to cut",ce]:j?i.length===0?["Click to start measuring"]:["Click to add points","Double-click to finish",ce]:P?["Click anywhere to import a shape from the map"]:null;return e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-2 max-w-full bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-2 py-2 pointer-events-auto",children:[j&&e.jsxs(e.Fragment,{children:[e.jsx(D.EditToolbarBtn,{active:g==="distance",onClick:()=>u("distance"),label:"Measure distance",children:e.jsx(F.ArrowsHorizontal,{size:24})}),e.jsx(D.EditToolbarBtn,{active:g==="area",onClick:()=>u("area"),label:"Measure area",children:e.jsx(F.Hexagon,{size:24})})]}),t==="draw-freehand"&&e.jsx(D.EditToolbarBtn,{active:M,onClick:()=>E(!M),label:"Closed shape",children:e.jsx(F.CircleHalfTilt,{size:24,weight:M?"fill":"regular"})}),(j||t==="draw-freehand")&&e.jsx(dt,{}),r.hints&&L&&e.jsx(dn,{parts:L}),r.hints&&L&&e.jsx(dt,{}),J&&e.jsxs("button",{type:"button",onClick:_,className:`${ut} shadow-sm bg-primary-500 text-white hover:bg-primary-600`,children:[C?"Save route":t==="slice-shape"?"Slice":t==="cut-hole"?"Cut":"Finish",e.jsx(D.KbdInvert,{children:"↵"})]}),e.jsxs("button",{type:"button",onClick:y,className:`${ut} text-(--elm-text-muted,var(--color-gray-600)) dark:text-(--elm-text-muted,var(--color-gray-400)) hover:bg-elm-control-hover`,children:[K?"Cancel":"Exit",e.jsx(D.Kbd,{children:"Esc"})]})]})}function mn({size:r,tooltipSide:t}={}){const{fitBounds:n}=d.useMapController(),s=d.useEmit(),o=d.useDataStore(p=>p.features),f=d.useDataStore(p=>p.selectedIds);function a(){if(!n)return;let p=o;if(f.length>0){const c=new Set(f);p=o.filter(x=>c.has(x.id))}if(p.length===0){s({type:"warning",message:"No features on the map to zoom to"});return}try{if(p.length===1){const h=p[0];n(h.bbox||Z.getGeometryBBox(h.geometry));return}const c=ur.featureCollection(p),x=mt.bbox(c);n(x)}catch(c){s({type:"error",code:"geometry",source:"editor",message:"Failed to calculate map bounds",cause:c})}}return e.jsx(pe,{label:"Fit map to features",tooltipContent:f.length>0?"Zoom to selection":"Zoom to all features",onClick:a,size:r,tooltipSide:t,children:e.jsx(F.CornersOut,{size:24})})}const pn="flex items-center justify-center h-6 min-w-6 px-1.5 rounded-elm-control bg-transparent border border-transparent text-elm-text font-elm-mono text-xs tabular-nums select-none transition-colors focus-visible:ring-2 focus-visible:ring-elm-focus-ring",hn="flex items-center justify-center h-8 min-w-8 px-1 rounded-elm-control bg-transparent border border-transparent text-elm-text font-elm-mono text-sm tabular-nums select-none transition-colors",gn="flex items-center justify-center w-12 h-12 bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm-control rounded-elm text-elm-text font-elm-mono text-sm select-none transition-colors";function xn({minZoom:r=1,maxZoom:t=22,fractional:n=!1,size:s="md",tooltipSide:o="top"}){const f=d.useDataStore(I=>I.currentZoom),{flyTo:a,getCenter:p}=d.useMapController(),c=d.useEmit(),x=!!a&&!!p,h=d.useUIStore(I=>I.zoomEditing),y=d.useUIStore(I=>I.setZoomEditing),[m,S]=l.useState(null),k=l.useRef(null),M=l.useRef(!1),{getKey:E}=me(),i=s==="sm"?pn:s==="group"?hn:gn,g=s!=="md";l.useEffect(()=>{m!==null&&(n?Math.abs(f-m)<.05:Math.round(f)===Math.round(m))&&S(null)},[f,m,n]);function u(){var N;const I=(((N=k.current)==null?void 0:N.value)??"").trim();if(I===""){y(!1);return}const b=Number(I);if(!Number.isFinite(b)){c({type:"warning",message:`"${I}" is not a valid zoom level`});return}if(b<r||b>t){c({type:"warning",message:`Zoom must be between ${r} and ${t}`});return}if(!a||!p){c({type:"warning",message:"Map is not ready yet — try again in a moment"});return}const C=p();S(b),a([C[1],C[0]],b),y(!1)}if(h){const I=n?(m??f).toFixed(1):String(Math.round(m??f));return e.jsx("input",{ref:k,type:"text",inputMode:n?"decimal":"numeric",pattern:n?"[0-9.]*":"[0-9]*",autoFocus:!0,defaultValue:I,onFocus:b=>{const C=b.currentTarget;M.current?C.setSelectionRange(C.value.length,C.value.length):C.select(),M.current=!1},onKeyDown:b=>{b.key==="Enter"?(b.preventDefault(),u()):b.key==="Escape"&&(b.preventDefault(),y(!1))},onBlur:()=>y(!1),"aria-label":"Zoom level",className:`${i.replace(" select-none","")} text-center focus:outline-none focus:border-elm-focus-ring${g?" w-10 !bg-elm-surface":""}`})}return e.jsx(D.Tooltip,{content:x?"Set zoom level":"Map zoom level",side:o,shortcut:x?e.jsx(D.KbdDark,{children:E("set-zoom").toUpperCase()}):void 0,children:e.jsx("button",{type:"button","aria-label":x?"Set map zoom level":"Map zoom level","data-elm-shortcut":"set-zoom",onClick:()=>{x&&(M.current=!0,y(!0))},disabled:!x,className:`${i} ${x?`${g?"hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-gray-200)_70%,transparent)) dark:hover:bg-(--elm-control-hover,var(--color-gray-800))":"hover:bg-elm-surface-hover"} focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring cursor-pointer`:"cursor-default"}`,children:n?(m??f).toFixed(1):Math.round(m??f)})})}function yn({zoom:r=15,size:t,tooltipSide:n}){const{flyTo:s}=d.useMapController(),o=d.useEmit(),[f,a]=l.useState(!1);function p(){if(!navigator.geolocation){o({type:"error",code:"unsupported",source:"locate",message:"Geolocation is not supported by this browser"});return}if(!s){o({type:"warning",message:"Map is not ready yet — try again in a moment"});return}f||(a(!0),navigator.geolocation.getCurrentPosition(c=>{a(!1),s([c.coords.latitude,c.coords.longitude],r)},c=>{a(!1),o({type:"error",code:c.code===c.PERMISSION_DENIED?"permission-denied":c.code===c.TIMEOUT?"timeout":"unknown",source:"locate",cause:c,message:c.code===c.PERMISSION_DENIED?"Location access denied":"Could not determine your location"})},{timeout:1e4}))}return e.jsx(pe,{label:f?"Locating…":"Show my location",onClick:p,size:t,tooltipSide:n,children:f?e.jsx("div",{className:`${t==="sm"?"w-3.5 h-3.5":"w-5 h-5"} border-2 border-current/25 border-t-current rounded-full animate-spin`,"aria-hidden":!0}):e.jsx(F.NavigationArrow,{size:24})})}function bn(){return d.useUIStore(t=>t.readonly)?e.jsxs("div",{className:"flex items-center gap-2 px-4 py-2 bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm text-sm text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300)) pointer-events-auto antialiased select-none",children:[e.jsx(F.Eye,{size:20,weight:"duotone",className:"text-elm-text-muted"}),e.jsx("span",{children:"View-only mode"})]}):null}const vn=3e4;let ne=null;const be=new Map;function Le(r,t){ne==null||ne.terminate(),ne=null;const n=[...be.values()];be.clear();for(const s of n)clearTimeout(s.timer),s.reject(new Z.ElementEditorError(t,"geometry",r))}async function wn(){if(ne)return ne;const{default:r}=await Promise.resolve().then(()=>require("./geometryWorker-CCwg4tNC.cjs"));return ne||(ne=new r,ne.onmessage=t=>{const{id:n,ok:s,result:o,error:f}=t.data,a=be.get(n);if(a){if(be.delete(n),clearTimeout(a.timer),s&&(o!=null&&o.geometry)){a.resolve(o.geometry);return}a.reject(new Z.ElementEditorError("geometry","geometry",(f==null?void 0:f.message)||"Geometry operation failed"))}},ne.onerror=()=>Le("Geometry worker failed","geometry"),ne)}function ze(r,{timeoutMs:t=vn}={}){return wn().then(n=>new Promise((s,o)=>{const f=crypto.randomUUID(),a=setTimeout(()=>{Le(`Geometry operation timed out after ${t} ms`,"timeout")},t);be.set(f,{resolve:s,reject:o,timer:a});const p={id:f,payload:r};n.postMessage(p)}))}typeof Worker<"u"&&$.setGeometryRunner(ze);function Sn(){Le("Geometry worker disposed","unknown")}function Be(r,t){var p;const n=(p=l.useContext(d.EventContext))==null?void 0:p.emit,s=l.useRef(n);s.current=n;const o=l.useRef({seq:0,epoch:0,busy:!1,queued:null,owned:!1,onSettled:null,alive:!0}).current,f=l.useCallback(()=>{const c=o.onSettled;o.onSettled=null,c==null||c()},[o]),a=l.useCallback(c=>{const x=++o.seq,h=o.epoch;o.busy=!0,ze(c).then(y=>y,y=>{var m;return o.alive&&h===o.epoch&&((m=s.current)==null||m.call(s,{type:"error",code:y instanceof Z.ElementEditorError?y.code:"geometry",source:"geometry",message:`The ${c.type} preview failed: ${y instanceof Error?y.message:String(y)}`,cause:y,quiet:!0})),null}).then(y=>{if(o.busy=!1,!o.alive||h!==o.epoch){if(o.queued){const k=o.queued;o.queued=null,a(k)}return}const m=o.queued;o.queued=null;const S=x===o.seq;(S||m&&m.geometry===c.geometry)&&(o.owned=!0,t(y)),m?a(m):S&&f()})},[o,t,f]);return l.useEffect(()=>{if(!r){o.epoch++,o.queued=null,o.onSettled=null,o.owned&&(o.owned=!1,t(null));return}if(o.busy){o.queued=r,o.seq++;return}a(r)},[r,o,a,t]),l.useEffect(()=>(o.alive=!0,()=>{o.alive=!1,o.queued=null,o.onSettled=null}),[o]),l.useCallback(c=>{!o.busy&&!o.queued?c():o.onSettled=c},[o])}const kn=111320;function jn(r,t){const n=r*kn;if(n<1)return`<1${Z.formatLength(1,t).unit}`;const s=Z.formatLength(n,t);return`~${s.value}${s.unit}`}function En(){const r=d.useUIStore(b=>b.editingMode),t=d.useUIStore(b=>b.simplifyTolerance),n=d.useUIStore(b=>b.setSimplifyTolerance),s=d.useUIStore(b=>b.setGeometryPreview),o=d.useUIStore(b=>b.geometryPreview),f=d.useUIStore(b=>b.commitGeometryProcess),a=d.useUIStore(b=>b.cancelGeometryProcess),{units:p}=Q.useElementEditorConfig(),c={unit:p.length,display:p.display,precision:p.precision},{dataStore:x}=d.useGeoStore(),h=ue(),y=d.useDataStore(b=>b.selectedIds[0]??null),m=d.useDataStore(b=>{var C;return y?((C=b.features.find(N=>N.id===y))==null?void 0:C.geometry)??null:null}),S=d.useDataStore(b=>{var C;return y?((C=b.features.find(N=>N.id===y))==null?void 0:C._drawType)??null:null}),k=l.useMemo(()=>{if(!m||r!=="simplify-shape")return 0;try{const b=mt.bbox({type:"Feature",geometry:m,properties:{}}),C=Math.sqrt((b[2]-b[0])**2+(b[3]-b[1])**2);return(t/100)**2*C*.3}catch{return 0}},[t,m,r]),M=r==="simplify-shape",E=l.useMemo(()=>!M||!m||!$.canProcessShape(m.type)?null:{type:"simplify",geometry:m,tolerance:k},[M,m,k]),i=Be(E,s);l.useEffect(()=>()=>{x.getState(),s(null)},[s,x]);const g=m?$.countShapeVertices(m):0,u=o?$.countShapeVertices(o):g,I=g-u;return l.useEffect(()=>{if(r!=="simplify-shape")return;function b(C){h(C)&&(C.key==="Enter"&&o&&I>0?(C.preventDefault(),i(f)):C.key==="Escape"&&(C.preventDefault(),a()))}return window.addEventListener("keydown",b),()=>window.removeEventListener("keydown",b)},[r,o,I,f,a,i,h]),r!=="simplify-shape"?null:e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3 max-w-full bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-3 py-1.5 pointer-events-auto",children:[e.jsx("span",{className:"text-sm font-medium text-elm-text-secondary shrink-0",children:"Simplify"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"range",min:0,max:100,value:t,onChange:b=>n(Number(b.target.value)),className:"w-32 accent-primary-600"}),e.jsx("span",{className:"text-sm text-elm-text-muted w-16 shrink-0",children:jn(k,c)})]}),e.jsxs("div",{className:"flex items-center gap-1 text-sm text-elm-text-muted shrink-0",children:[e.jsx("span",{className:"font-elm-mono",children:g}),e.jsx("span",{children:"→"}),e.jsx("span",{className:`font-elm-mono font-medium ${I>0?"text-primary-600 dark:text-primary-400":"text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300))"}`,children:u}),I>0&&e.jsxs("span",{className:"text-xs text-primary-500",children:["(−",I,")"]}),e.jsx("span",{className:"ml-0.5",children:"points"})]}),S&&e.jsx("span",{className:"text-xs text-amber-600 dark:text-amber-400 shrink-0",children:S==="route"?"Turns this route into a plain line.":`Turns this ${S} into a plain shape.`}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx(D.Button,{variant:"ghost",onClick:a,className:"rounded-elm-control h-8 px-3 text-sm",children:"Cancel"}),e.jsx(D.Button,{variant:"primary",onClick:()=>i(f),disabled:!o||I===0,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}function Cn(){const r=d.useUIStore(g=>g.editingMode),t=d.useUIStore(g=>g.smoothIterations),n=d.useUIStore(g=>g.setSmoothIterations),s=d.useUIStore(g=>g.setGeometryPreview),o=d.useUIStore(g=>g.geometryPreview),f=d.useUIStore(g=>g.commitGeometryProcess),a=d.useUIStore(g=>g.cancelGeometryProcess),{dataStore:p}=d.useGeoStore(),c=ue(),x=d.useDataStore(g=>g.selectedIds[0]??null),h=d.useDataStore(g=>{var u;return x?((u=g.features.find(I=>I.id===x))==null?void 0:u.geometry)??null:null}),y=d.useDataStore(g=>{var u;return x?((u=g.features.find(I=>I.id===x))==null?void 0:u._drawType)??null:null}),m=r==="smooth-shape",S=l.useMemo(()=>!m||!h||!$.canProcessShape(h.type)?null:{type:"smooth",geometry:h,iterations:t},[m,h,t]),k=Be(S,s);l.useEffect(()=>()=>{p.getState(),s(null)},[s,p]);const M=h?$.countShapeVertices(h):0,E=o?$.countShapeVertices(o):M,i=E-M;return l.useEffect(()=>{if(r!=="smooth-shape")return;function g(u){c(u)&&(u.key==="Enter"&&o?(u.preventDefault(),k(f)):u.key==="Escape"&&(u.preventDefault(),a()))}return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[r,o,f,a,k,c]),r!=="smooth-shape"?null:e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3 max-w-full bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-3 py-1.5 pointer-events-auto",children:[e.jsx("span",{className:"text-sm font-medium text-elm-text-secondary shrink-0",children:"Smooth"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"range",min:1,max:5,step:1,value:t,onChange:g=>n(Number(g.target.value)),className:"w-24 accent-primary-600"}),e.jsxs("span",{className:"text-sm text-elm-text-muted w-16 shrink-0",children:[t," ",t===1?"pass":"passes"]})]}),e.jsxs("div",{className:"flex items-center gap-1 text-sm text-elm-text-muted shrink-0",children:[e.jsx("span",{className:"font-elm-mono",children:M}),e.jsx("span",{children:"→"}),e.jsx("span",{className:"font-elm-mono font-medium text-primary-600 dark:text-primary-400",children:E}),i>0&&e.jsxs("span",{className:"text-xs text-primary-500",children:["(+",i,")"]}),e.jsx("span",{className:"ml-0.5",children:"points"})]}),y&&e.jsx("span",{className:"text-xs text-amber-600 dark:text-amber-400 shrink-0",children:y==="route"?"Turns this route into a plain line.":`Turns this ${y} into a plain shape.`}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx(D.Button,{variant:"ghost",onClick:a,className:"rounded-elm-control h-8 px-3 text-sm",children:"Cancel"}),e.jsx(D.Button,{variant:"primary",onClick:()=>k(f),disabled:!o,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}const Ke=.3048,In=5280,qt=Ke*In;function Dn(r,t){switch(t){case"m":return r;case"km":return r*1e3;case"ft":return r*Ke;case"mi":return r*qt}}function Nn(r,t){switch(t){case"m":return r;case"km":return r/1e3;case"ft":return r/Ke;case"mi":return r/qt}}function Pn(){const{dataStore:r}=d.useGeoStore(),t=ue(),n=d.useUIStore(P=>P.editingMode),s=d.useUIStore(P=>P.bufferDistance),o=d.useUIStore(P=>P.setBufferDistance),f=d.useUIStore(P=>P.bufferCreateNew),a=d.useUIStore(P=>P.setBufferCreateNew),p=d.useUIStore(P=>P.setGeometryPreview),c=d.useUIStore(P=>P.geometryPreview),x=d.useUIStore(P=>P.commitBufferProcess),h=d.useUIStore(P=>P.cancelBufferProcess),{units:y}=Q.useElementEditorConfig(),m=$.resolveUnitSystem(y.length),S=l.useMemo(()=>m==="imperial"?["ft","mi"]:["m","km"],[m]),[k,M]=l.useState(!1),E=k?S[1]:S[0],[i,g]=l.useState(null);l.useEffect(()=>{var K;if(n!=="buffer-shape"){g(null);return}const P=r.getState().selectedIds[0]??null;if(!P)return;const z=((K=r.getState().features.find(_=>_.id===P))==null?void 0:K.geometry)??null;z&&$.canProcessShape(z.type)&&g(z)},[n,r]);const u=$.isLineGeometryType(i==null?void 0:i.type),I=l.useMemo(()=>i&&!(u&&s<=0)?{type:"buffer",geometry:i,distance:s}:null,[i,s,u]),b=Be(I,p);l.useEffect(()=>()=>{p(null)},[p]),l.useEffect(()=>{if(n!=="buffer-shape")return;function P(z){t(z)&&(z.key==="Enter"&&c?(z.preventDefault(),b(x)):z.key==="Escape"&&(z.preventDefault(),h()))}return window.addEventListener("keydown",P),()=>window.removeEventListener("keydown",P)},[n,c,x,h,b,t]);const C=E==="km"||E==="mi",N=Nn(s,E),A=C?Number(N.toFixed(2)):Math.round(N),B=C?.1:1;function v(P){const z=parseFloat(P);isNaN(z)||o(Math.round(Dn(z,E)))}function j(){M(P=>!P)}return n!=="buffer-shape"?null:e.jsxs("div",{className:"flex flex-wrap items-center justify-center gap-3 max-w-full bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm px-3 py-1.5 pointer-events-auto",children:[e.jsx("span",{className:"text-sm font-medium text-elm-text-secondary shrink-0",children:"Buffer"}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx("input",{type:"range",min:u?0:-500,max:2e3,step:1,value:s,onChange:P=>o(Number(P.target.value)),className:"w-28 accent-primary-600"}),e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsx("input",{type:"number",value:A,step:B,onChange:P=>v(P.target.value),className:"w-16 text-sm text-right bg-transparent border border-elm-border rounded-elm-control px-1.5 py-0.5 text-elm-text-secondary focus:outline-none focus:border-primary-500"}),e.jsx("button",{onClick:j,className:"text-xs text-primary-600 dark:text-primary-400 hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) font-medium px-1.5 py-0.5 rounded-elm-control shrink-0 transition-colors",children:E})]})]}),e.jsxs("label",{className:"flex items-center gap-1.5 cursor-pointer shrink-0 select-none",children:[e.jsx("span",{className:"text-sm text-(--elm-text-muted,var(--color-gray-600)) dark:text-(--elm-text-muted,var(--color-gray-400))",children:"New shape"}),e.jsx("div",{role:"checkbox","aria-checked":f,onClick:()=>a(!f),className:`relative w-8 h-4 rounded-full transition-colors cursor-pointer ${f?"bg-primary-500 dark:bg-primary-600":"bg-elm-border"}`,children:e.jsx("span",{className:`absolute top-0.5 w-3 h-3 bg-white rounded-full shadow-sm transition-transform ${f?"translate-x-4":"translate-x-0.5"}`})})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx(D.Button,{variant:"ghost",onClick:h,className:"rounded-elm-control h-8 px-3 text-sm",children:"Cancel"}),e.jsx(D.Button,{variant:"primary",onClick:()=>b(x),disabled:!c,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}const Tn=8,Mn={ArrowLeft:-1,ArrowRight:1,ArrowUp:-3,ArrowDown:3};function Un({options:r,value:t,onChange:n,label:s="Basemap",size:o,tooltipSide:f}){const[a,p]=l.useState(!1),[c,x]=l.useState(null),[h,y]=l.useState(!1),m=l.useRef(null),S=l.useRef(null),k=l.useId(),M=Q.useAccentStyle(),E=c!==null;l.useLayoutEffect(()=>{var B,v;const u=(v=(B=m.current)==null?void 0:B.querySelector("button"))==null?void 0:v.getBoundingClientRect(),I=S.current;if(!a||!u||!I)return;const{width:b,height:C}=I.getBoundingClientRect(),N=u.top+u.height/2>window.innerHeight/2,A=u.left+u.width/2>window.innerWidth/2;x($.placeBox(A?u.right:u.left,N?u.top:u.bottom,b,C,{x:A?"before":"after",y:N?"before":"after",gapY:Tn}))},[a,r.length]),l.useEffect(()=>{var I;if(!a||!E)return;const u=S.current;(I=(u==null?void 0:u.querySelector('[aria-pressed="true"]'))??(u==null?void 0:u.querySelector("button")))==null||I.focus()},[a,E]),l.useEffect(()=>{if(!a)return;const u=I=>{var b,C,N;I.key==="Escape"&&(I.stopImmediatePropagation(),I.preventDefault(),(b=S.current)!=null&&b.contains(document.activeElement)&&((N=(C=m.current)==null?void 0:C.querySelector("button"))==null||N.focus()),p(!1))};return window.addEventListener("keydown",u,{capture:!0}),()=>window.removeEventListener("keydown",u,{capture:!0})},[a]);const i=u=>{const I=Mn[u.key];if(!I)return;const b=Array.from(u.currentTarget.querySelectorAll("button")),C=b[b.indexOf(document.activeElement)+I];C&&(u.preventDefault(),C.focus())},g=()=>{var u,I;x(null),y(((I=(u=m.current)==null?void 0:u.closest("[data-elm-theme]"))==null?void 0:I.getAttribute("data-elm-theme"))==="dark"),p(b=>!b)};return e.jsxs("div",{ref:m,className:"contents",children:[e.jsx(pe,{label:s,onClick:g,active:a,expanded:a,controls:a?k:void 0,size:o,tooltipSide:f,children:e.jsx(F.StackSimple,{size:24})}),a&&ft.createPortal(e.jsx("div",{"data-elm-portal":!0,"data-elm-theme":h?"dark":"light",style:M,[D.CONTEXT_MENU_MARKER_ATTR]:"",children:e.jsx("div",{ref:S,id:k,role:"group","aria-label":s,className:"fixed z-[9999] w-80 max-h-[70vh] flex flex-col bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm rounded-elm antialiased",style:{left:(c==null?void 0:c.left)??0,top:(c==null?void 0:c.top)??0,visibility:c?void 0:"hidden"},children:e.jsx("div",{className:"grid grid-cols-3 gap-2 p-2 overflow-y-auto",onKeyDown:i,children:r.map(u=>{const I=u.id===t;return e.jsxs("button",{type:"button","aria-pressed":I,"aria-label":u.label,onClick:()=>n(u.id),className:`flex flex-col rounded-elm-card border transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-400/60 ${I?"border-primary-500 ring-2 ring-primary-400/40 bg-primary-50 hover:bg-primary-100 dark:bg-primary-950/40 dark:hover:bg-primary-950/60":"border-elm-border hover:border-(--elm-border-strong,var(--color-gray-400)) dark:hover:border-(--elm-border-strong,var(--color-gray-500)) bg-elm-surface hover:bg-elm-surface-hover"}`,children:[Array.isArray(u.thumbnail)?e.jsx("div",{className:"w-full h-12 flex rounded-t-elm-card overflow-hidden",children:u.thumbnail.map(b=>e.jsx("img",{src:b,alt:"",className:"w-1/2 h-full object-cover",loading:"lazy",draggable:!1},b))}):u.thumbnail?e.jsx("img",{src:u.thumbnail,alt:"",className:"w-full h-12 object-cover rounded-t-elm-card",loading:"lazy",draggable:!1}):e.jsx("div",{className:"w-full h-12 rounded-t-elm-card bg-elm-surface-hover flex items-center justify-center text-elm-text-subtle",children:e.jsx(F.StackSimple,{size:20})}),e.jsx("div",{className:`text-[11px] leading-4 tracking-tight text-center px-0.5 py-1 truncate font-medium ${I?"text-primary-700 dark:text-primary-300":"text-(--elm-text-secondary,var(--color-gray-700)) dark:text-(--elm-text-secondary,var(--color-gray-200))"}`,children:u.label})]},u.id)})})})}),document.body)]})}function Fn(r,t){const n=l.useRef(t);n.current=t,l.useEffect(()=>Z.subscribeToDataChanges(r,()=>n.current),[r])}const Rn=(r,t)=>Object.keys(r).every(n=>r[n]===t[n]);function An(r){const[t,n]=l.useState(()=>Z.readAccentPalette(r));return l.useEffect(()=>{const s=()=>{const p=Z.readAccentPalette(r);n(c=>Rn(c,p)?c:p)};let o=0;const f=()=>{o||(o=requestAnimationFrame(()=>{o=0,s()}))};s();const a=Q.watchThemeInputs((r==null?void 0:r.closest("[data-elm-theme]"))??null,f);return()=>{a(),cancelAnimationFrame(o)}},[r]),t}const Ln=[".geojson",".json","application/geo+json","application/json"];function zn(r,t){const n=r.name.toLowerCase();for(const s of t){const o=s.toLowerCase();if(o.startsWith(".")){if(n.endsWith(o))return!0}else if(o.endsWith("/*")){const f=o.slice(0,-1);if(r.type.toLowerCase().startsWith(f))return!0}else if(r.type.toLowerCase()===o)return!0}return!1}function Bn(r){const{onImport:t,onError:n,maxBytes:s=Z.DEFAULT_MAX_IMPORT_BYTES,accept:o=Ln,disabled:f=!1}=r,[a,p]=l.useState(!1),[c,x]=l.useState(!1),h=l.useRef(0),y=l.useRef(null),m=l.useRef(!0),S=l.useRef(t),k=l.useRef(n);l.useEffect(()=>{S.current=t},[t]),l.useEffect(()=>{k.current=n},[n]),l.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]);const M=l.useMemo(()=>o.join(","),[o]),E=l.useCallback(async v=>{var j,P,z,K;if(!zn(v,o)){(j=k.current)==null||j.call(k,{kind:"wrong-type",file:v});return}if(v.size>s){(P=k.current)==null||P.call(k,{kind:"too-large",bytes:v.size,maxBytes:s});return}x(!0);try{const _=await v.text();if(!m.current)return;const J=Z.parseGeoJSONText(_,{maxBytes:s});if(!m.current)return;if(!J.ok){(z=k.current)==null||z.call(k,J.error);return}S.current(J.fc,v)}catch(_){if(!m.current)return;(K=k.current)==null||K.call(k,{kind:"invalid-json",cause:_ instanceof Error?_:new Error(String(_))})}finally{m.current&&x(!1)}},[o,s]),i=l.useCallback(v=>{var j,P;f||(P=(j=v.dataTransfer)==null?void 0:j.types)!=null&&P.includes("Files")&&(v.preventDefault(),v.stopPropagation(),h.current+=1,p(!0))},[f]),g=l.useCallback(v=>{var j,P;f||(P=(j=v.dataTransfer)==null?void 0:j.types)!=null&&P.includes("Files")&&(v.preventDefault(),v.stopPropagation(),v.dataTransfer.dropEffect="copy")},[f]),u=l.useCallback(v=>{f||(v.preventDefault(),v.stopPropagation(),h.current=Math.max(0,h.current-1),h.current===0&&p(!1))},[f]),I=l.useCallback(v=>{var P,z;if(f)return;v.preventDefault(),v.stopPropagation(),h.current=0,p(!1);const j=(z=(P=v.dataTransfer)==null?void 0:P.files)==null?void 0:z[0];j&&E(j)},[f,E]),b=l.useCallback(v=>{var P;if(f)return;const j=(P=v.target.files)==null?void 0:P[0];v.target.value="",j&&E(j)},[f,E]),C=l.useCallback(v=>{y.current=v},[]),N=l.useCallback(()=>{var v;f||(v=y.current)==null||v.click()},[f]),A=l.useCallback(()=>({onDragEnter:i,onDragOver:g,onDragLeave:u,onDrop:I}),[i,g,u,I]),B=l.useCallback(()=>({type:"file",accept:M,style:{display:"none"},ref:C,onChange:b}),[M,C,b]);return{getRootProps:A,getInputProps:B,isDragActive:a,isProcessing:c,open:N}}const Kn="application/geo+json";function On(r,t){const n=typeof t=="function"?t(r):typeof t=="string"&&t.length>0?t:"features";return n.toLowerCase().endsWith(".geojson")?n:`${n}.geojson`}function $n(r){const{getFeatureCollection:t,filename:n,indent:s=2,disabled:o=!1}=r,f=l.useRef(t),a=l.useRef(r.onExport),p=l.useRef(r.onError),c=l.useRef(n),x=l.useRef(s),h=l.useRef(o);l.useEffect(()=>{f.current=t},[t]),l.useEffect(()=>{a.current=r.onExport},[r.onExport]),l.useEffect(()=>{p.current=r.onError},[r.onError]),l.useEffect(()=>{c.current=n},[n]),l.useEffect(()=>{x.current=s},[s]),l.useEffect(()=>{h.current=o},[o]);const y=l.useCallback(()=>{var i;if(h.current)return null;const E=f.current();return!E||!Array.isArray(E.features)||E.features.length===0?((i=p.current)==null||i.call(p,{kind:"empty"}),null):E},[]),m=l.useCallback(E=>{var i;try{return JSON.stringify(E,null,x.current)}catch(g){return(i=p.current)==null||i.call(p,{kind:"serialization-error",cause:g instanceof Error?g:new Error(String(g))}),null}},[]),S=l.useCallback(()=>{const E=y();return E?m(E):null},[y,m]),k=l.useCallback(()=>{const E=S();return E===null?null:new Blob([E],{type:Kn})},[S]);return{exportToFile:l.useCallback(()=>{const E=y();if(!E)return null;const i=m(E);if(i===null)return null;const g=On(E,c.current);return d.saveGeoJSONFile(i,g).then(u=>{var I;u&&((I=a.current)==null||I.call(a,E,u))}),g},[y,m]),exportToString:S,exportToBlob:k}}class Ht extends l.Component{constructor(){super(...arguments);nt(this,"state",{hasError:!1,error:null})}static getDerivedStateFromError(n){return{hasError:!0,error:n}}componentDidCatch(n){var s,o;(o=(s=this.props).onError)==null||o.call(s,new Z.ElementEditorError("crash","editor",`The editor crashed: ${(n==null?void 0:n.message)??String(n)}`,{cause:n}))}render(){var n;return this.state.hasError?e.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",width:"100%",height:"100%",padding:32,fontFamily:"var(--elm-font, system-ui, sans-serif)",background:"var(--elm-surface-sunken, #fafafa)",color:"var(--elm-text, #333)"},children:[e.jsx("p",{style:{fontSize:16,fontWeight:600,marginBottom:8},children:"Something went wrong"}),e.jsx("p",{style:{fontSize:13,color:"var(--elm-text-muted, #666)",marginBottom:16,maxWidth:420,textAlign:"center"},children:((n=this.state.error)==null?void 0:n.message)||"An unexpected error occurred in the map editor."}),e.jsx("button",{onClick:()=>this.setState({hasError:!1,error:null}),style:{padding:"8px 16px",fontSize:13,borderRadius:8,border:"1px solid var(--elm-border, #ddd)",background:"var(--elm-surface, white)",cursor:"pointer"},children:"Try again"})]}):this.props.children}}function Gn({config:r,accentColor:t,featureColor:n,onEvent:s,onError:o,toaster:f=!0,children:a}){const p=l.useMemo(()=>t||n?{...r,...t&&{accentColor:t},...n&&{featureColor:n}}:r,[r,t,n]);return e.jsx(Ht,{onError:o,children:e.jsx(Q.ElementEditorConfigProvider,{config:p,children:e.jsx(ht,{children:e.jsx(d.ThemeReportingProvider,{children:e.jsx(d.EventProvider,{onEvent:s,onError:o,toaster:f,children:e.jsx(d.MapControllerProvider,{children:a})})})})})})}const Vt=se(()=>Promise.resolve().then(()=>require("./GeoJSONModal-D6JBr9FA.cjs"))),Jt=se(()=>Promise.resolve().then(()=>require("./SchemaModal-5F0HBHGS.cjs"))),Xt=se(()=>Promise.resolve().then(()=>require("./FeatureEditModal-BNil19oc.cjs"))),Zt=se(()=>Promise.resolve().then(()=>require("./DataTablePanel-PH5qtwrD.cjs"))),Yt=se(()=>Promise.resolve().then(()=>require("./SettingsModal-au03oFaJ.cjs"))),Qt=se(()=>Promise.resolve().then(()=>require("./ShortcutsModal-DBE-gSUi.cjs")).then(r=>({default:r.ShortcutsModal})));Me(Vt,Jt,Xt,Zt,Yt,Qt);const er=se(()=>Promise.resolve().then(()=>require("./BooleanOperations-DrQS-3mJ.cjs")));Me(er);exports.ActiveDrawingToolbar=fn;exports.BasemapPicker=Un;exports.BooleanOperations=er;exports.BufferPanel=Pn;exports.CODE_DOCKED_KEY=Bt;exports.ControlGroup=_t;exports.DataTable=gt;exports.DataTablePanel=Zt;exports.EditingToolbar=en;exports.ElementEditorErrorBoundary=Ht;exports.ElementEditorUIProvider=Gn;exports.FeatureEditModal=Xt;exports.FeatureList=Fe;exports.FeatureMapContextMenu=an;exports.FeatureRow=Wr;exports.FeatureSidePanel=Nt;exports.FitBoundsButton=mn;exports.FloatingToolbar=Zr;exports.GeoJSONDockPlaceholder=Hr;exports.GeoJSONModal=Vt;exports.GeometryTypeIcon=Ae;exports.GroupRow=_r;exports.IconButton=pe;exports.LayersPanel=Gr;exports.LocateButton=yn;exports.NoFeaturesEmptyState=yt;exports.PartSubRow=qr;exports.ReadonlyBanner=bn;exports.RedoButton=Wt;exports.SchemaEditor=xt;exports.SchemaModal=Jt;exports.SettingsModal=Yt;exports.ShortcutConfigProvider=ht;exports.ShortcutsModal=Qt;exports.SimplifyPanel=En;exports.SmoothPanel=Cn;exports.UndoButton=Gt;exports.UndoRedoToolbar=ln;exports.VertexSelectionBar=rn;exports.WINDOW_ATTR=St;exports.ZoomIndicator=xn;exports.clipboardErrorEvent=vt;exports.disposeGeometryWorker=Sn;exports.featureLabel=zt;exports.geometryTypeLabel=At;exports.getTabbableFeatureIds=mr;exports.getVisualFeatureOrder=wt;exports.isMacPlatform=bt;exports.panelHeaderBar=Ct;exports.panelHeaderIconBtn=xe;exports.parseBooleanText=jt;exports.preloadEditorPanelsWhenIdle=dr;exports.readBooleanValue=Et;exports.resizeEdgeLeft=Rt;exports.resizeEdgeTop=Ar;exports.runGeometryWorkerOperation=ze;exports.startDragShield=Mt;exports.useAccentPalette=An;exports.useCodeDock=Ot;exports.useDataChangeSubscription=Fn;exports.useGeoJSONDrop=Bn;exports.useGeoJSONExport=$n;exports.useInitialCodeDocked=Kt;exports.useIsEventForEditor=ue;exports.useKeyboardShortcuts=wr;exports.usePanelOffset=Re;exports.useShortcutConfig=me;exports.useWindowEscape=hr;