@element-editor/ui 0.0.0-stage → 0.2.1

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 (244) hide show
  1. package/AGENTS.md +65 -0
  2. package/LICENSE +21 -0
  3. package/README.md +46 -2
  4. package/dist/BooleanOperations-BRO7NHUY.js +111 -0
  5. package/dist/BooleanOperations-C2uOHRu3.cjs +1 -0
  6. package/dist/DataTable-B-2VjBEz.cjs +2 -0
  7. package/dist/DataTable-CS-3dIqY.js +510 -0
  8. package/dist/DataTablePanel-58LwzXQR.cjs +1 -0
  9. package/dist/DataTablePanel-DDFUmMaM.js +208 -0
  10. package/dist/EditToolbarBtn-Ch9HCLHq.cjs +3 -0
  11. package/dist/EditToolbarBtn-SR4xHd8G.js +378 -0
  12. package/dist/FeatureEditModal-Cc8N6vei.cjs +1 -0
  13. package/dist/FeatureEditModal-Dr10p3nE.js +77 -0
  14. package/dist/FeatureList-Bo9w9nre.js +520 -0
  15. package/dist/FeatureList-VRYesXCq.cjs +1 -0
  16. package/dist/FeatureRowContextMenu-CtBqdC1j.cjs +1 -0
  17. package/dist/FeatureRowContextMenu-DCUIiDwc.js +130 -0
  18. package/dist/GeoJSONModal-BV9Tamf4.js +886 -0
  19. package/dist/GeoJSONModal-Dd-nBufy.cjs +9 -0
  20. package/dist/SchemaEditor-B4L17K1e.cjs +1 -0
  21. package/dist/SchemaEditor-ryoTgaLb.js +293 -0
  22. package/dist/SchemaModal-DvMbWskS.js +95 -0
  23. package/dist/SchemaModal-gAuDkd-L.cjs +1 -0
  24. package/dist/SettingsModal-BScVTjpn.js +237 -0
  25. package/dist/SettingsModal-CqaSFxxR.cjs +1 -0
  26. package/dist/ShortcutsModal-D1Y2bGT8.cjs +1 -0
  27. package/dist/ShortcutsModal-ozuS2Ysb.js +299 -0
  28. package/dist/components/ActiveDrawingToolbar.d.cts +1 -0
  29. package/dist/components/ActiveDrawingToolbar.d.ts +1 -0
  30. package/dist/components/BasemapPicker.d.cts +26 -0
  31. package/dist/components/BasemapPicker.d.ts +26 -0
  32. package/dist/components/BooleanOperations.d.cts +1 -0
  33. package/dist/components/BooleanOperations.d.ts +1 -0
  34. package/dist/components/BufferPanel.d.cts +1 -0
  35. package/dist/components/BufferPanel.d.ts +1 -0
  36. package/dist/components/DataTable.d.cts +9 -0
  37. package/dist/components/DataTable.d.ts +9 -0
  38. package/dist/components/DataTablePanel.d.cts +10 -0
  39. package/dist/components/DataTablePanel.d.ts +10 -0
  40. package/dist/components/EditingToolbar.d.cts +1 -0
  41. package/dist/components/EditingToolbar.d.ts +1 -0
  42. package/dist/components/ElementEditorErrorBoundary.d.cts +28 -0
  43. package/dist/components/ElementEditorErrorBoundary.d.ts +28 -0
  44. package/dist/components/ElementEditorUIProvider.d.cts +50 -0
  45. package/dist/components/ElementEditorUIProvider.d.ts +50 -0
  46. package/dist/components/FeatureMapContextMenu.d.cts +23 -0
  47. package/dist/components/FeatureMapContextMenu.d.ts +23 -0
  48. package/dist/components/FitBoundsButton.d.cts +6 -0
  49. package/dist/components/FitBoundsButton.d.ts +6 -0
  50. package/dist/components/FloatingToolbar.d.cts +3 -0
  51. package/dist/components/FloatingToolbar.d.ts +3 -0
  52. package/dist/components/LocateButton.d.cts +11 -0
  53. package/dist/components/LocateButton.d.ts +11 -0
  54. package/dist/components/ReadonlyBanner.d.cts +1 -0
  55. package/dist/components/ReadonlyBanner.d.ts +1 -0
  56. package/dist/components/ShortcutsModal.d.cts +1 -0
  57. package/dist/components/ShortcutsModal.d.ts +1 -0
  58. package/dist/components/SimplifyPanel.d.cts +1 -0
  59. package/dist/components/SimplifyPanel.d.ts +1 -0
  60. package/dist/components/SmoothPanel.d.cts +1 -0
  61. package/dist/components/SmoothPanel.d.ts +1 -0
  62. package/dist/components/UndoRedoToolbar.d.cts +20 -0
  63. package/dist/components/UndoRedoToolbar.d.ts +20 -0
  64. package/dist/components/VertexSelectionBar.d.cts +12 -0
  65. package/dist/components/VertexSelectionBar.d.ts +12 -0
  66. package/dist/components/ZoomIndicator.d.cts +15 -0
  67. package/dist/components/ZoomIndicator.d.ts +15 -0
  68. package/dist/components/dialogs/DynamicFieldRenderer.d.cts +11 -0
  69. package/dist/components/dialogs/DynamicFieldRenderer.d.ts +11 -0
  70. package/dist/components/dialogs/SettingsModal.d.cts +1 -0
  71. package/dist/components/dialogs/SettingsModal.d.ts +1 -0
  72. package/dist/components/lazyParts.d.cts +12 -0
  73. package/dist/components/lazyParts.d.ts +12 -0
  74. package/dist/components/sidebar/FeatureEditModal.d.cts +6 -0
  75. package/dist/components/sidebar/FeatureEditModal.d.ts +6 -0
  76. package/dist/components/sidebar/FeatureList.d.cts +4 -0
  77. package/dist/components/sidebar/FeatureList.d.ts +4 -0
  78. package/dist/components/sidebar/FeatureRow.d.cts +38 -0
  79. package/dist/components/sidebar/FeatureRow.d.ts +38 -0
  80. package/dist/components/sidebar/FeatureRowContextMenu.d.cts +12 -0
  81. package/dist/components/sidebar/FeatureRowContextMenu.d.ts +12 -0
  82. package/dist/components/sidebar/FeatureSidePanel.d.cts +8 -0
  83. package/dist/components/sidebar/FeatureSidePanel.d.ts +8 -0
  84. package/dist/components/sidebar/GeoJSONModal.d.cts +5 -0
  85. package/dist/components/sidebar/GeoJSONModal.d.ts +5 -0
  86. package/dist/components/sidebar/GroupRow.d.cts +21 -0
  87. package/dist/components/sidebar/GroupRow.d.ts +21 -0
  88. package/dist/components/sidebar/HideLayersToggle.d.cts +2 -0
  89. package/dist/components/sidebar/HideLayersToggle.d.ts +2 -0
  90. package/dist/components/sidebar/LayersPanel.d.cts +5 -0
  91. package/dist/components/sidebar/LayersPanel.d.ts +5 -0
  92. package/dist/components/sidebar/PartSubRow.d.cts +9 -0
  93. package/dist/components/sidebar/PartSubRow.d.ts +9 -0
  94. package/dist/components/sidebar/SchemaEditor.d.cts +4 -0
  95. package/dist/components/sidebar/SchemaEditor.d.ts +4 -0
  96. package/dist/components/sidebar/SchemaModal.d.cts +5 -0
  97. package/dist/components/sidebar/SchemaModal.d.ts +5 -0
  98. package/dist/components/sidebar/codeDock.d.cts +21 -0
  99. package/dist/components/sidebar/codeDock.d.ts +21 -0
  100. package/dist/components/ui/Button.d.cts +9 -0
  101. package/dist/components/ui/Button.d.ts +9 -0
  102. package/dist/components/ui/CloseButton.d.cts +6 -0
  103. package/dist/components/ui/CloseButton.d.ts +6 -0
  104. package/dist/components/ui/ContextMenu.d.cts +28 -0
  105. package/dist/components/ui/ContextMenu.d.ts +28 -0
  106. package/dist/components/ui/EditToolbarBtn.d.cts +13 -0
  107. package/dist/components/ui/EditToolbarBtn.d.ts +13 -0
  108. package/dist/components/ui/ElementToaster.d.cts +3 -0
  109. package/dist/components/ui/ElementToaster.d.ts +3 -0
  110. package/dist/components/ui/GeometryTypeIcon.d.cts +7 -0
  111. package/dist/components/ui/GeometryTypeIcon.d.ts +7 -0
  112. package/dist/components/ui/IconButton.d.cts +28 -0
  113. package/dist/components/ui/IconButton.d.ts +28 -0
  114. package/dist/components/ui/Input.d.cts +14 -0
  115. package/dist/components/ui/Input.d.ts +14 -0
  116. package/dist/components/ui/JsonCode.d.cts +4 -0
  117. package/dist/components/ui/JsonCode.d.ts +4 -0
  118. package/dist/components/ui/Kbd.d.cts +16 -0
  119. package/dist/components/ui/Kbd.d.ts +16 -0
  120. package/dist/components/ui/NoFeaturesEmptyState.d.cts +1 -0
  121. package/dist/components/ui/NoFeaturesEmptyState.d.ts +1 -0
  122. package/dist/components/ui/SearchDropdown.d.cts +28 -0
  123. package/dist/components/ui/SearchDropdown.d.ts +28 -0
  124. package/dist/components/ui/ToolButton.d.cts +19 -0
  125. package/dist/components/ui/ToolButton.d.ts +19 -0
  126. package/dist/components/ui/Tooltip.d.cts +12 -0
  127. package/dist/components/ui/Tooltip.d.ts +12 -0
  128. package/dist/components/ui/panelHeader.d.cts +2 -0
  129. package/dist/components/ui/panelHeader.d.ts +2 -0
  130. package/dist/components/ui/resizeEdge.d.cts +4 -0
  131. package/dist/components/ui/resizeEdge.d.ts +4 -0
  132. package/dist/contexts/ElementEditorConfigContext.d.cts +351 -0
  133. package/dist/contexts/ElementEditorConfigContext.d.ts +351 -0
  134. package/dist/contexts/EventContext.d.cts +69 -0
  135. package/dist/contexts/EventContext.d.ts +69 -0
  136. package/dist/contexts/MapControllerContext.d.cts +24 -0
  137. package/dist/contexts/MapControllerContext.d.ts +24 -0
  138. package/dist/contexts/ShortcutConfigContext.d.cts +16 -0
  139. package/dist/contexts/ShortcutConfigContext.d.ts +16 -0
  140. package/dist/contexts/ThemeContext.d.cts +12 -0
  141. package/dist/contexts/ThemeContext.d.ts +12 -0
  142. package/dist/element-editor-ui.cjs +1 -0
  143. package/dist/element-editor-ui.es.js +102 -0
  144. package/dist/geometryWorker-CCwg4tNC.cjs +1 -0
  145. package/dist/geometryWorker-DgQCFSmD.js +25 -0
  146. package/dist/hooks/dragShield.d.cts +7 -0
  147. package/dist/hooks/dragShield.d.ts +7 -0
  148. package/dist/hooks/themeInputs.d.cts +14 -0
  149. package/dist/hooks/themeInputs.d.ts +14 -0
  150. package/dist/hooks/useAccentPalette.d.cts +15 -0
  151. package/dist/hooks/useAccentPalette.d.ts +15 -0
  152. package/dist/hooks/useAccentStyle.d.cts +39 -0
  153. package/dist/hooks/useAccentStyle.d.ts +39 -0
  154. package/dist/hooks/useAdapterControls.d.cts +280 -0
  155. package/dist/hooks/useAdapterControls.d.ts +280 -0
  156. package/dist/hooks/useBalancedWrap.d.cts +8 -0
  157. package/dist/hooks/useBalancedWrap.d.ts +8 -0
  158. package/dist/hooks/useContextMenu.d.cts +11 -0
  159. package/dist/hooks/useContextMenu.d.ts +11 -0
  160. package/dist/hooks/useDataChangeSubscription.d.cts +9 -0
  161. package/dist/hooks/useDataChangeSubscription.d.ts +9 -0
  162. package/dist/hooks/useDragWindow.d.cts +9 -0
  163. package/dist/hooks/useDragWindow.d.ts +9 -0
  164. package/dist/hooks/useFocusTrap.d.cts +7 -0
  165. package/dist/hooks/useFocusTrap.d.ts +7 -0
  166. package/dist/hooks/useGeoJSONDrop.d.cts +40 -0
  167. package/dist/hooks/useGeoJSONDrop.d.ts +40 -0
  168. package/dist/hooks/useGeoJSONExport.d.cts +69 -0
  169. package/dist/hooks/useGeoJSONExport.d.ts +69 -0
  170. package/dist/hooks/useGeoJSONFileImport.d.cts +24 -0
  171. package/dist/hooks/useGeoJSONFileImport.d.ts +24 -0
  172. package/dist/hooks/useInlineRename.d.cts +26 -0
  173. package/dist/hooks/useInlineRename.d.ts +26 -0
  174. package/dist/hooks/useJumpToFeature.d.cts +3 -0
  175. package/dist/hooks/useJumpToFeature.d.ts +3 -0
  176. package/dist/hooks/useKeyboardShortcuts.d.cts +9 -0
  177. package/dist/hooks/useKeyboardShortcuts.d.ts +9 -0
  178. package/dist/hooks/useNominatim.d.cts +24 -0
  179. package/dist/hooks/useNominatim.d.ts +24 -0
  180. package/dist/hooks/usePanelOffset.d.cts +14 -0
  181. package/dist/hooks/usePanelOffset.d.ts +14 -0
  182. package/dist/hooks/useResizablePanel.d.cts +4 -0
  183. package/dist/hooks/useResizablePanel.d.ts +4 -0
  184. package/dist/hooks/useRootTokens.d.cts +27 -0
  185. package/dist/hooks/useRootTokens.d.ts +27 -0
  186. package/dist/hooks/useSearchState.d.cts +23 -0
  187. package/dist/hooks/useSearchState.d.ts +23 -0
  188. package/dist/hooks/useServiceAttribution.d.cts +13 -0
  189. package/dist/hooks/useServiceAttribution.d.ts +13 -0
  190. package/dist/hooks/useWindowEscape.d.cts +25 -0
  191. package/dist/hooks/useWindowEscape.d.ts +25 -0
  192. package/dist/hooks/useWindowFocus.d.cts +4 -0
  193. package/dist/hooks/useWindowFocus.d.ts +4 -0
  194. package/dist/hooks/useWorkerGeometryPreview.d.cts +22 -0
  195. package/dist/hooks/useWorkerGeometryPreview.d.ts +22 -0
  196. package/dist/index-CILw1Du5.js +3165 -0
  197. package/dist/index-DG4wEjGj.cjs +1 -0
  198. package/dist/index.d.cts +89 -0
  199. package/dist/index.d.ts +89 -0
  200. package/dist/internal.cjs +1 -0
  201. package/dist/internal.d.cts +16 -0
  202. package/dist/internal.d.ts +16 -0
  203. package/dist/internal.es.js +42 -0
  204. package/dist/primitives.cjs +1 -0
  205. package/dist/primitives.d.cts +19 -0
  206. package/dist/primitives.d.ts +19 -0
  207. package/dist/primitives.es.js +17 -0
  208. package/dist/store/StoreContext.d.cts +17 -0
  209. package/dist/store/StoreContext.d.ts +17 -0
  210. package/dist/types/events.d.cts +95 -0
  211. package/dist/types/events.d.ts +95 -0
  212. package/dist/useAccentStyle-CPo2XqAn.js +412 -0
  213. package/dist/useAccentStyle-hsGvyHZc.cjs +1 -0
  214. package/dist/useAdapterControls-BBObhzVX.cjs +1 -0
  215. package/dist/useAdapterControls-DVjkwRZ_.js +691 -0
  216. package/dist/useContextMenu-DJ2Cti85.js +10 -0
  217. package/dist/useContextMenu-DbxMvb1s.cjs +1 -0
  218. package/dist/useFocusTrap-BBjPCfDR.cjs +1 -0
  219. package/dist/useFocusTrap-CKxKT8De.js +25 -0
  220. package/dist/useJumpToFeature-Bdz2hqOC.js +16 -0
  221. package/dist/useJumpToFeature-LwjxGzfy.cjs +1 -0
  222. package/dist/useWindowFocus-DuQVjnHE.js +80 -0
  223. package/dist/useWindowFocus-EemgNOuz.cjs +1 -0
  224. package/dist/utils/booleanValue.d.cts +4 -0
  225. package/dist/utils/booleanValue.d.ts +4 -0
  226. package/dist/utils/clipboardError.d.cts +3 -0
  227. package/dist/utils/clipboardError.d.ts +3 -0
  228. package/dist/utils/download.d.cts +42 -0
  229. package/dist/utils/download.d.ts +42 -0
  230. package/dist/utils/geojsonDocument.d.cts +168 -0
  231. package/dist/utils/geojsonDocument.d.ts +168 -0
  232. package/dist/utils/geometryWorkerClient.d.cts +6 -0
  233. package/dist/utils/geometryWorkerClient.d.ts +6 -0
  234. package/dist/utils/layerOrder.d.cts +9 -0
  235. package/dist/utils/layerOrder.d.ts +9 -0
  236. package/dist/utils/lazyWithPreload.d.cts +24 -0
  237. package/dist/utils/lazyWithPreload.d.ts +24 -0
  238. package/dist/utils/lineSmooth.d.cts +7 -0
  239. package/dist/utils/lineSmooth.d.ts +7 -0
  240. package/dist/utils/platform.d.cts +2 -0
  241. package/dist/utils/platform.d.ts +2 -0
  242. package/dist/workers/geometryWorker.d.cts +1 -0
  243. package/dist/workers/geometryWorker.d.ts +1 -0
  244. package/package.json +133 -3
@@ -0,0 +1 @@
1
+ "use strict";var nr=Object.defineProperty;var sr=(r,t,o)=>t in r?nr(r,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):r[t]=o;var rt=(r,t,o)=>sr(r,typeof t!="symbol"?t+"":t,o);const i=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"),ar=require("zustand/react/shallow"),D=require("./EditToolbarBtn-Ch9HCLHq.cjs"),te=require("clsx"),ut=require("react-dom"),lr=require("@turf/centroid"),ir=require("@turf/helpers"),dt=require("@turf/bbox");function se(r){let t=null,o=null;const s=()=>t??(t=r().then(a=>(o=a.default,a))),n=i.lazy(s);function f(a){const[p]=i.useState(()=>o??n);return i.createElement(p,a)}return Object.assign(f,{preload:s})}const ft=[];function Te(...r){for(const t of r)ft.push(t.preload)}let ot=!1;function cr(){if(ot||typeof window>"u")return;ot=!0;const r=()=>{for(const o of ft)o().catch(()=>{})},t=window.requestIdleCallback;t?t(r,{timeout:3e3}):setTimeout(r,1500)}const Me=i.createContext(null);function mt({children:r}){const t=Q.useElementEditorConfig(),[o,s]=i.useState(()=>{const u=$.loadCustomBindings(t);return $.syncShortcutCache(u),u}),n=i.useCallback(u=>$.getEffectiveKey(u,o),[o]),f=i.useCallback((u,b)=>{const h=$.findConflict(b,u,o);if(h)return h;const x={...o,[u]:b};return s(x),$.saveCustomBindings(x,t),$.syncShortcutCache(x),null},[o,t]),a=i.useCallback(u=>{const b={...o};delete b[u],s(b),$.saveCustomBindings(b,t),$.syncShortcutCache(b)},[o,t]),p=i.useCallback(()=>{s({}),$.saveCustomBindings({},t),$.syncShortcutCache({})},[t]);return e.jsx(Me.Provider,{value:{custom:o,getKey:n,setKey:f,resetKey:a,resetAll:p},children:r})}function ur(){return i.useContext(Me)}function fe(){const r=i.useContext(Me);if(!r)throw new Error("useShortcutConfig must be used inside ShortcutConfigProvider");return r}const Ue=se(()=>Promise.resolve().then(()=>require("./FeatureList-VRYesXCq.cjs"))),pt=se(()=>Promise.resolve().then(()=>require("./DataTable-B-2VjBEz.cjs"))),ht=se(()=>Promise.resolve().then(()=>require("./SchemaEditor-B4L17K1e.cjs")));Te(Ue,pt,ht);function gt(){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 xt=()=>typeof navigator<"u"&&/Mac/.test(navigator.platform);function yt(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 bt(r,t){if(t.length===0)return r.map(s=>s.id);const o=[];for(const s of t)for(const n of r)n.groupId===s.id&&o.push(n.id);for(const s of r)s.groupId||o.push(s.id);return o}function dr(r,t){const o=[];for(const s of t)if(!s.collapsed)for(const n of r)n.groupId===s.id&&o.push(n.id);for(const s of r)s.groupId||o.push(s.id);return o}const vt="data-elm-window",Pe=new WeakMap;function fr(r){const t=Pe.get(r);if(!(t!=null&&t.size))return!1;let o=null;for(const s of t)(!o||s.z()>o.z())&&(o=s);return o==null||o.close(),!!o}function mr(r,t,o,s,{topWindow:n=!0}={}){const{uiStore:f}=d.useGeoStore(),a=i.useRef(o),p=i.useRef(s);i.useLayoutEffect(()=>{a.current=o,p.current=s}),i.useEffect(()=>{if(!t)return;const u=document.activeElement,b={z:()=>p.current,close:()=>a.current()};let h=Pe.get(f);h||Pe.set(f,h=new Set),n&&h.add(b);const x=r.current;function m(S){S.key!=="Escape"||S.defaultPrevented||!(x!=null&&x.contains(S.target))||(S.preventDefault(),a.current())}return document.addEventListener("keydown",m),()=>{h.delete(b),document.removeEventListener("keydown",m);const S=document.activeElement;(!S||S===document.body||((x==null?void 0:x.contains(S))??!1)||!S.isConnected)&&(u!=null&&u.isConnected)&&u!==document.body&&u.focus({preventScroll:!0})}},[t,r,f,n])}function pr(){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 o=!1;const s=()=>{o||(o=!0,t.remove())};t.addEventListener("change",()=>{var f;const n=((f=t.files)==null?void 0:f[0])??null;s(),r(n)},{once:!0}),t.addEventListener("cancel",()=>{s(),r(null)},{once:!0}),t.click()})}const he=new Map;function wt(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 hr(r,t){if(!t||r.composedPath().includes(t.root))return!0;const o=document.activeElement;return!o||o===document.body||wt(o)?t.pointerInside??he.size===1:!1}function ce(){const{uiStore:r}=d.useGeoStore();return i.useCallback(t=>hr(t,he.get(r)),[r])}const gr=140;function xr(r,t){r.querySelectorAll(`[data-elm-shortcut="${t}"]`).forEach(o=>{o.disabled||(o.setAttribute("data-pressed",""),setTimeout(()=>o.removeAttribute("data-pressed"),gr))})}const yr=["point","line","polygon","route","circle","rectangle","freehand","picker"];function br(r){var S;const{dataStore:t,uiStore:o}=d.useGeoStore(),s=d.useEmit(),{panTo:n,fitBounds:f,setZoom:a}=d.useMapController(),p=d.useGeoJSONFileImport(),u=Q.useElementEditorConfig(),b=ce(),h=(S=ur())==null?void 0:S.custom,x=i.useRef(h);x.current=h;const m=i.useCallback(k=>x.current?$.getEffectiveKey(k,x.current):$.getCurrentKey(k),[]);i.useEffect(()=>{if(!r)return;const k=r.closest("[data-elm-theme]")??r,M={root:k,pointerInside:null};he.set(o,M);const E=l=>{l.composedPath().includes(k)?M.pointerInside=!0:l.target instanceof Element&&wt(l.target)||(M.pointerInside=!1)};return document.addEventListener("pointerdown",E,{capture:!0,passive:!0}),()=>{he.get(o)===M&&he.delete(o),document.removeEventListener("pointerdown",E,{capture:!0})}},[r,o]),i.useEffect(()=>{if(!u.ui.keyboardShortcuts.enabled||!u.ui.keyboardShortcuts.mapZoom)return;function k(M){if(!(M.metaKey||M.ctrlKey)||!b(M))return;const E=M.target,l=E==null?void 0:E.tagName;if(l==="INPUT"||l==="TEXTAREA"||l==="SELECT"||E!=null&&E.isContentEditable)return;const g=M.key==="+"||M.key==="=",c=M.key==="-"||M.key==="_";if(!g&&!c||!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})},[u.ui.keyboardShortcuts.enabled,u.ui.keyboardShortcuts.mapZoom,a,t]),i.useEffect(()=>{const k=u.ui.keyboardShortcuts.enabled;function M(l){var L;if(!k&&l.key!=="Enter"||!b(l))return;const g=t.getState(),c=o.getState(),I=c.readonly,y=w=>{var O;return xr(((O=he.get(o))==null?void 0:O.root)??document,w)},C=l.target.tagName,N=l.target,A=l.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=l.key.toLowerCase();if(!v&&!I&&j==="z"&&(l.metaKey||l.ctrlKey)&&!l.shiftKey){l.preventDefault(),y("undo"),g.undoStack.length>0&&(g.undo(),s({type:"undo"}));return}if(!v&&!I&&j==="z"&&(l.metaKey||l.ctrlKey)&&l.shiftKey){l.preventDefault(),y("redo"),g.redoStack.length>0&&(g.redo(),s({type:"redo"}));return}if(!v&&(l.metaKey||l.ctrlKey)&&(l.key==="a"||l.key==="A")){l.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&&(l.metaKey||l.ctrlKey)&&!l.shiftKey&&(l.key==="j"||l.key==="J")){l.preventDefault();const w=!c.autoExitAfterDraw;c.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&&(l.metaKey||l.ctrlKey)&&!l.shiftKey&&(l.key==="o"||l.key==="O")){l.preventDefault(),pr().then(w=>{w&&p(w)});return}if(!v&&(l.metaKey||l.ctrlKey)&&!l.shiftKey&&(l.key==="s"||l.key==="S")){l.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&&(l.metaKey||l.ctrlKey)){if(l.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(l.key==="d"){if(l.preventDefault(),I)return;y("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(l.key==="e"||l.key==="E"){if(g.selectedIds.length!==1)return;l.preventDefault(),c.openEditDialog(g.selectedIds[0],{focusFirstField:!0});return}if((l.key==="g"||l.key==="G")&&!I){if(l.shiftKey){if(g.selectedIds.length===0||!g.features.some(O=>g.selectedIds.includes(O.id)&&O.groupId))return;l.preventDefault(),g.ungroupSelection()}else{if(g.selectedIds.length===0)return;l.preventDefault();const w=g.groupSelection();w&&c.setAutoFocusGroupId(w)}return}}if(l.key==="Enter"){if((!v||l.metaKey||l.ctrlKey)&&c.editingMode!=="none"){if(c.editingMode==="slice-shape"){l.preventDefault(),c.commitSliceShape();return}else if(c.editingMode==="cut-hole"){l.preventDefault(),c.commitCutHole();return}else if(c.editingMode==="draw-line"&&c.lineInProgress.length>=2){l.preventDefault(),c.commitLine({});return}else if(c.editingMode==="draw-polygon"&&c.polygonInProgress.length>=3){l.preventDefault(),c.commitPolygon({});return}else if(c.editingMode==="draw-route"&&c.routeWaypoints.length>=2){l.preventDefault(),c.commitRoute();return}}if(!k)return;const O=c.editingMode==="none"||c.editingMode==="draw-rect"||c.editingMode==="draw-circle"||c.editingMode==="place-point"||c.editingMode==="draw-freehand"||c.editingMode==="pick-shape"||c.editingMode==="draw-line"&&c.lineInProgress.length<2||c.editingMode==="draw-polygon"&&c.polygonInProgress.length<3||c.editingMode==="draw-route"&&c.routeWaypoints.length<2;if(c.dialogState.type==="closed"){if(!v&&!I&&!((L=N.closest)!=null&&L.call(N,'button, a[href], [role="button"]'))&&!l.metaKey&&!l.ctrlKey&&!l.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"){l.preventDefault();const W=!c.vertexEditActive;W&&c.editingMode!=="none"&&c.setEditingMode("none"),c.setVertexEditActive(W);return}}}}}const P=A.some(w=>w instanceof Element&&w.hasAttribute("data-elm-search-open"));if(l.key==="Tab"&&!v&&c.dialogState.type==="closed"&&!P&&!l.metaKey&&!l.ctrlKey&&!l.altKey){const w=g.features;if(w.length===0)return;l.preventDefault();const O=bt(w,g.groups),q=g.selectedIds.length===1?g.selectedIds[0]:null,R=q?O.indexOf(q):-1;let T;l.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;n==null||n([X,H])}else f==null||f(W.bbox||Z.getGeometryBBox(W.geometry));return}if(!v&&!l.metaKey&&!l.ctrlKey&&!l.altKey){const w=l.key.toLowerCase();if(w===m("show-shortcuts")){l.preventDefault(),y("show-shortcuts"),c.shortcutsModalOpen?c.closeShortcutsModal():c.openShortcutsModal();return}if(u.ui.schemaEditor&&!I&&w===m("toggle-schema")){l.preventDefault(),y("toggle-schema"),c.toggleSchemaModal();return}if(u.ui.layerList&&w===m("toggle-sidebar")){l.preventDefault(),y("toggle-sidebar"),c.setSidebarOpen(!c.sidebarOpen);return}}if(!v&&c.dialogState.type!=="new-point"&&!l.metaKey&&!l.ctrlKey&&!l.altKey){const w=l.key.toLowerCase();if(u.ui.dataTable&&w===m("toggle-table")){l.preventDefault(),y("toggle-table"),c.toggleTable();return}if(u.ui.geojsonEditor&&w===m("toggle-geojson")){l.preventDefault(),y("toggle-geojson"),c.toggleCodeModal();return}if(u.ui.zoomIndicator&&w===m("set-zoom")){l.preventDefault(),y("set-zoom"),c.setZoomEditing(!0);return}if(w===m("measure")){y("measure"),c.setEditingMode(c.editingMode==="measure"?"none":"measure");return}if(I)return;if(w===m("toggle-transform")){(g.selectedIds.length===1&&g.selectedIds[0]||g.selectedIds.length>0)&&(y("toggle-transform"),c.setTransformActive(!c.transformActive),!c.transformActive&&c.editingMode!=="none"&&c.setEditingMode("none"));return}const O=c.isToolAvailable,q=R=>{c.editingMode!==R&&!g.canAddFeatures(1)||(y(R==="pick-shape"?"picker":R),c.setEditingMode(c.editingMode===R?"none":R))};for(const R of yr){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")&&(y("cut-hole"),c.setEditingMode(c.editingMode==="cut-hole"?"none":"cut-hole"),c.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")&&(y("slice-shape"),c.setEditingMode(c.editingMode==="slice-shape"?"none":"slice-shape"),c.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)){y("break-apart");const G=$.getPartCount(T.geometry);g.breakMultiGeometry(R)&&s({type:"feature:broken",featureId:R,count:G,undo:()=>t.getState().undo()})}return}}if(l.key!=="Delete"&&l.key!=="Backspace"||I||c.dialogState.type==="new-point")return;const z=g.selectedIds;if(z.length===0||v||c.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`;l.preventDefault(),l.stopImmediatePropagation(),y("delete-selected"),g.deleteSelection(),c.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(l){var y;if(!b(l))return;const g=l.target.tagName;if(g==="INPUT"||g==="TEXTAREA"||g==="SELECT"||o.getState().readonly)return;const c=(y=l.clipboardData)==null?void 0:y.getData("text");if(c)try{const C=JSON.parse(c);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,o,s,n,f,u,m,p]),i.useEffect(()=>{function k(M){var c;if(M.key!=="Escape"||!b(M))return;const E=M.target;if(E&&(E.tagName==="INPUT"||E.tagName==="TEXTAREA"||E.isContentEditable)||(c=E==null?void 0:E.closest)!=null&&c.call(E,`[${vt}]`)||D.isContextMenuOpen())return;const l=o.getState();if(l.dialogState.type!=="closed"){l.closeDialog(),M.stopPropagation();return}if(l.editingMode==="none"){if(l.vertexEditActive){l.setVertexEditActive(!1),M.stopPropagation();return}if(l.transformActive){l.setTransformActive(!1),M.stopPropagation();return}if(t.getState().selectedIds.length>0){t.getState().selectFeature(null),M.stopPropagation();return}fr(o)&&M.stopPropagation()}}return window.addEventListener("keydown",k,{capture:!0}),()=>window.removeEventListener("keydown",k,{capture:!0})},[])}const vr=new Set(["true","yes","y","1","on","x","✓"]),wr=new Set(["false","no","n","0","off",""]);function St(r){const t=r.trim().toLowerCase();return vr.has(t)?!0:wr.has(t)?!1:null}function kt(r){return typeof r=="boolean"?r:typeof r=="number"?r!==0:typeof r=="string"?St(r)===!0:!1}function Sr({fields:r,values:t,onChange:o,errors:s,autoFocusFirst:n,readonly:f}){return e.jsx("div",{className:"space-y-3",children:r.map((a,p)=>{const u=t[a.key]??"",b=s==null?void 0:s[a.key],h=n&&p===0,x=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:[x,e.jsxs("label",{className:"relative inline-flex items-center cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:kt(u),onChange:S=>o(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"})]}),b&&e.jsx("p",{className:"mt-1 text-xs text-rose-500 w-full basis-full",children:b})]},a.key):(a.type==="textarea"?m=e.jsx(D.Textarea,{rows:3,value:String(u),onChange:S=>o(a.key,S.target.value),autoFocus:h,error:!!b,disabled:f}):a.type==="select"?m=e.jsxs(D.SelectInput,{value:String(u),onChange:S=>o(a.key,S.target.value),autoFocus:h,error:!!b,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(u),onChange:S=>o(a.key,S.target.value),autoFocus:h,error:!!b,disabled:f,min:a.min,max:a.max}):m=e.jsx(D.Input,{type:a.type,value:String(u),onChange:S=>o(a.key,S.target.value),autoFocus:h,error:!!b,disabled:f}),e.jsxs("div",{"data-field-key":a.key,children:[x,m,b&&e.jsx("p",{className:"mt-1 text-xs text-rose-500",children:b})]},a.key))})})}const ge="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",jt="h-10 box-border flex items-center flex-shrink-0 border-b border-elm-border bg-elm-surface-sunken";function Et(){const r=d.useUIStore(n=>n.setSidebarOpen),t=d.useUIStore(n=>n.layout==="split"),o=Q.useElementEditorConfig(),{getKey:s}=fe();return t?null:e.jsx(D.Tooltip,{content:"Hide layers",shortcut:o.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:n=>{r(!1),n.currentTarget.blur()},className:`flex ${ge}`,children:e.jsx(F.SidebarSimple,{size:16,mirrored:!0})})})}const kr=/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false)\b|\bnull\b|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g,jr="text-gray-800 dark:text-[#e06c75]",Er="text-[#a11] dark:text-[#98c379]",Cr="text-[#164] dark:text-[#d19a66]",Ir="text-[#219] dark:text-[#d19a66]",Dr="text-[#164] dark:text-[#d19a66]";function Nr(r){const t=[];let o=0;for(const s of r.matchAll(kr)){const n=s.index;n>o&&t.push(r.slice(o,n));const[f,a,p,u]=s;a!==void 0?(t.push(e.jsx("span",{className:p?jr:Er,children:a},n)),p&&t.push(p)):u!==void 0?t.push(e.jsx("span",{className:Ir,children:f},n)):t.push(e.jsx("span",{className:f==="null"?Dr:Cr,children:f},n)),o=n+f.length}return o<r.length&&t.push(r.slice(o)),t}function Pr({json:r,className:t}){const o=i.useMemo(()=>Nr(r),[r]);return e.jsx("pre",{className:t,children:o})}function nt(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 o=Number(t);if(!isNaN(o)){const s=r.min!==void 0,n=r.max!==void 0;if(s&&n&&(o<r.min||o>r.max))return`${r.label} must be between ${r.min} and ${r.max}`;if(s&&o<r.min)return`${r.label} must be ≥ ${r.min}`;if(n&&o>r.max)return`${r.label} must be ≤ ${r.max}`}}return null}function Ct(r,t){const o=d.useUIStore(a=>a.panelPrefs[r]),s=d.useUIStore(a=>a.setPanelPref),n=o!==null?o:t;return{open:n,toggle:()=>s(r,!n)}}function Tr(r,t,o){if(r.type==="new-point"){const s={};return t.fields.forEach(n=>{s[n.key]=""}),r.prefill&&Object.assign(s,r.prefill),s}if(r.type==="edit"){const s=o.find(n=>n.id===r.featureId);if(s)return{...s.properties}}return{}}function It({dialogState:r,collapsible:t=!1}){const{dataStore:o}=d.useGeoStore(),s=d.useEmit(),n=d.useUIStore(T=>T.closeDialog),f=d.useDataStore(T=>T.selectFeature),a=d.useDataStore(ar.useShallow(T=>T.getVisibleSchemas())),p=d.useDataStore(T=>T.lastUsedSchemaId),u=d.useUIStore(T=>T.readonly),{uiStore:b}=d.useGeoStore(),h=ce(),x=d.useDataStore(T=>T.features),m=i.useMemo(()=>r.type==="edit"?x.find(T=>T.id===r.featureId)??null:null,[r,x]),S=d.useDataStore(T=>T.addFeature),k=d.useDataStore(T=>T.updateFeature),M=d.useDataStore(T=>T.deleteFeature),E=d.useDataStore(T=>T.duplicateFeature),l=d.useDataStore(T=>T.getDefaultSchema),g=d.useDataStore(T=>T.setLastUsedSchemaId),c=r.type==="new-point",I=l(),[y,C]=i.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===y)??I,[A,B]=i.useState(()=>Tr(r,N,x)),[v,j]=i.useState({}),P=m==null?void 0:m.properties,z=m==null?void 0:m.schemaId,[K,_]=i.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(c){const W={};G.fields.forEach(H=>{W[H.key]=A[H.key]??""}),B(W)}C(T),g(T),j({})}i.useEffect(()=>{if(u)return;function T(G){if((G.metaKey||G.ctrlKey)&&G.key==="Enter"&&h(G)){const W=b.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=nt(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 ue;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&&((ue=ee.select)==null||ue.call(ee))},0);return}j({});const G={};for(const[H,X]of Object.entries(A))X!==""&&(G[H]=X);c&&r.type==="new-point"?S({type:"Feature",id:crypto.randomUUID(),schemaId:y,geometry:{type:"Point",coordinates:r.coords},properties:G}):m&&k(m.id,{properties:G,schemaId:y}),n()}function w(){if(!m)return;const T=String(m.properties.name||"feature"),G=m.id,W=E(G);n(),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),n(),s({type:"feature:deleted",featureId:G,label:T,undo:()=>o.getState().undo()})}const q=c?"New point":m?String(m.properties.name||"Edit feature"):"Edit feature",R=c?"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(Et,{}),e.jsx(D.Tooltip,{content:"Back to layers",side:"bottom",children:e.jsx("button",{type:"button",onClick:()=>{n(),f(null)},"aria-label":"Back to layers",className:`flex ${ge}`,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:[!u&&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 ${ge}`,children:e.jsx(F.CopySimple,{size:16})})}),!u&&e.jsx(D.Tooltip,{content:"Delete feature",side:"bottom",children:e.jsx("button",{type:"button",onClick:O,"aria-label":"Delete feature",className:`flex ${ge}`,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:y,onChange:T=>J(T.target.value),disabled:u,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(Sr,{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=nt(W,G);j(X=>{if(H)return{...X,[T]:H};const ee={...X};return delete ee[T],ee})}},errors:v,autoFocusFirst:!u&&(c||r.type==="edit"&&!!r.isNew||r.type==="edit"&&!!r.focusFirstField),readonly:u}),e.jsx(Ur,{dialogState:r,editFeature:m??null,values:A,schemaId:y}),e.jsx(Mr,{dialogState:r,editFeature:m??null}),e.jsx("div",{className:"-mx-4 border-t border-elm-border"})]}),!u&&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:xt()?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 Mr({dialogState:r,editFeature:t}){const o=i.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,u],b)=>`${b+1}. ${u.toFixed(6)}, ${p.toFixed(6)}`):t.geometry.type==="Polygon"?t.geometry.coordinates[0].slice(0,-1).map(([p,u],b)=>`${b+1}. ${u.toFixed(6)}, ${p.toFixed(6)}`):[]},[r,t]),s=o.length<=5,{open:n,toggle:f}=Ct("coordsOpen",s);return o.length===0?null:e.jsx(Dt,{label:"Coordinates",open:n,onToggle:f,children:e.jsx("div",{className:"space-y-0.5",children:o.map((a,p)=>e.jsx("p",{className:"text-xs font-elm-mono text-elm-text-muted",children:a},p))})})}function Ur({dialogState:r,editFeature:t,values:o,schemaId:s}){const n=i.useMemo(()=>{if(r.type==="new-point"){const S={};for(const[k,M]of Object.entries(o))M!==""&&(S[k]=M);return{type:"Feature",id:"(new)",schemaId:s,geometry:{type:"Point",coordinates:r.coords},properties:S}}return t??null},[r,t,o,s]),{open:f,toggle:a}=Ct("sourceOpen",!1),[p,u]=i.useState(!1),b=d.useEmit();if(!n)return null;const h=JSON.stringify(n,null,2);function x(){Promise.resolve().then(()=>navigator.clipboard.writeText(h)).then(()=>{u(!0),setTimeout(()=>u(!1),1500)},S=>b(yt(S)))}const m=e.jsx("button",{type:"button",onClick:S=>{S.stopPropagation(),x()},"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(Dt,{label:"Source",open:f,onToggle:a,action:m,children:e.jsx(Pr,{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 Dt({label:r,open:t,onToggle:o,action:s,children:n}){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:o,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:n})]})}const Nt="[data-elm-theme],[data-elm-theme] *{transition:none!important}";function st(r){const t=document.createElement("style");t.textContent=Nt,document.head.appendChild(t),r(),requestAnimationFrame(()=>requestAnimationFrame(()=>t.remove()))}function Pt(r,t){t==null||t.setAttribute("data-dragging","");const o=document.createElement("div");o.style.cssText=`position:fixed;inset:0;z-index:2147483647;cursor:${r}`,document.body.appendChild(o);const s=document.createElement("style");return s.textContent=Nt,document.head.appendChild(s),document.body.style.userSelect="none",()=>{t==null||t.removeAttribute("data-dragging"),o.remove(),s.remove(),document.body.style.userSelect=""}}function Tt(r,t,o,s){const n=Q.useElementEditorConfig(),[f,a]=i.useState(()=>{const b=parseInt(Z.readStorage(r,n)??"",10);return isNaN(b)?t:Math.max(o,Math.min(s,b))}),p=i.useRef(f);p.current=f;const u=i.useCallback(b=>{if(b.button!==0)return;b.preventDefault();const h=b.clientX,x=p.current,m=Pt("col-resize",b.currentTarget);function S(M){const E=Math.max(o,Math.min(s,x+(h-M.clientX)));p.current=E,a(E)}function k(){m(),Z.writeStorage(r,String(p.current),n),window.removeEventListener("mousemove",S),window.removeEventListener("mouseup",k)}window.addEventListener("mousemove",S),window.addEventListener("mouseup",k)},[r,o,s,n]);return{width:f,onHandleMouseDown:u}}function Fe(r,t=!0){const{uiStore:o}=d.useGeoStore(),s=Q.useElementEditorConfig().ui.layerList,n=d.useUIStore($.sidebarTakesSpace),f=d.useUIStore(h=>h.narrow),a=d.useUIStore(h=>h.sidebarWidth),p=d.useUIStore(h=>h.codeDockWidth),b=d.useUIStore(h=>h.tableFullscreen)||f?0:(s&&n?a:0)+p;i.useLayoutEffect(()=>{var x;if(!t)return;const h=(x=r.current)==null?void 0:x.closest("[data-elm-theme]");if(h)return h.style.setProperty("--elm-panel-offset",`${b}px`),()=>{h.style.removeProperty("--elm-panel-offset")}},[r,t,b]),i.useLayoutEffect(()=>{var S;if(!t)return;const h=(S=r.current)==null?void 0:S.closest("[data-elm-theme]");if(!h)return;const x=()=>{const k=h.clientWidth;k>0&&o.getState().narrow!==k<$.NARROW_EDITOR_WIDTH&&o.getState().setNarrow(k<$.NARROW_EDITOR_WIDTH)};x();const m=new ResizeObserver(x);return m.observe(h),()=>m.disconnect()},[r,t,o])}const Mt="after:absolute after:transition-colors hover:after:bg-elm-focus-ring data-[dragging]:after:bg-elm-focus-ring",Ut=`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 ${Mt}`,Fr=`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 ${Mt}`,Rr="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",Ar="text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent",Lr="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",zr="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",Br="bg-elm-surface/95 hover:bg-elm-surface-hover disabled:hover:bg-elm-surface/95",at="disabled:text-elm-text-disabled",lt="text-primary-600 dark:text-primary-400",Kr="text-elm-text";function me({label:r,tooltipContent:t,shortcut:o,shortcutId:s,tooltipSide:n="top",onClick:f,active:a,expanded:p,controls:u,disabled:b,size:h="md",children:x}){const S=Q.useElementEditorConfig().ui.keyboardShortcuts.enabled?o:void 0;return e.jsx(D.Tooltip,{content:t??r,shortcut:S,side:n,children:e.jsx("button",{"aria-label":r,"data-elm-shortcut":s,"aria-pressed":p===void 0?a:void 0,"aria-expanded":p,"aria-controls":u,onClick:k=>{f(),k.detail>0&&k.currentTarget.blur()},disabled:b,className:h==="group"?`${Rr} ${a?lt:Ar} ${at}`:`${h==="sm"?Lr:`${zr} ${Br}`} ${a?lt:Kr} ${at}`,children:i.isValidElement(x)&&typeof x.type!="string"?i.cloneElement(x,{...a?{weight:"fill"}:{},...h==="sm"?{size:16}:{}}):x})})}const Or=i.memo(function({footer:t}){const{dataStore:o}=d.useGeoStore(),s=d.useEmit(),n=d.useUIStore(L=>L.sidebarOpen),f=d.useUIStore(L=>L.setSidebarOpen),a=d.useUIStore(L=>L.setSidebarWidth),p=d.useUIStore(L=>L.codeDockWidth),u=d.useUIStore(L=>L.readonly),b=d.useUIStore(L=>L.layout),{width:h,onHandleMouseDown:x}=Tt("elm_panel_width",288,200,520),m=b==="split",S=i.useRef(null);Fe(S);const k=d.useUIStore(L=>L.narrow)&&!m,[M,E]=i.useState(!1),l=i.useRef(!1);i.useEffect(()=>{const L=requestAnimationFrame(()=>{l.current=!0});return()=>cancelAnimationFrame(L)},[]),i.useLayoutEffect(()=>{k&&(l.current||E(!0),f(!1))},[k,f]),i.useEffect(()=>{if(!M)return;const L=requestAnimationFrame(()=>E(!1));return()=>cancelAnimationFrame(L)},[M]);const{getKey:g}=fe(),c=e.jsx(D.KbdDark,{children:g("toggle-sidebar").toUpperCase()}),[I,y]=i.useState(null),C=i.useCallback(L=>y(L),[]);i.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);i.useEffect(()=>{z&&K(null)},[z,K]);function _(){const L=crypto.randomUUID();o.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] ${n?"shadow-elm-raised":""}`:"absolute top-0 h-full z-10",style:m?void 0:k?{width:`min(${h}px, 100% - 48px)`,right:n?0:`calc(-1 * min(${h}px, 100% - 48px))`,transition:M?"none":"right 200ms ease"}:{width:h,right:n?0:-h,transition:M?"none":"right 200ms ease"},children:[!m&&!n&&e.jsx("div",{className:"absolute z-30",style:{left:-64-p,top:16},children:e.jsx(me,{label:"Open layers panel",shortcutId:"toggle-sidebar",tooltipContent:"Show layers",shortcut:c,tooltipSide:"bottom",onClick:()=>f(!0),children:e.jsx(F.SidebarSimple,{size:24})})}),e.jsxs("div",{inert:!m&&!n,className:`h-full flex flex-col overflow-hidden bg-elm-surface ${m?"":"border-l border-elm-border/80"}`,children:[!m&&e.jsx("div",{onMouseDown:x,className:Ut,title:"Drag to resize panel"}),A&&v.length<2?e.jsx(It,{dialogState:N,collapsible:!0},J):e.jsxs(e.Fragment,{children:[e.jsx("header",{className:`${jt} 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(Et,{}),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:!u&&e.jsx(D.Tooltip,{content:"New group",side:"bottom",children:e.jsx("button",{type:"button",onClick:_,disabled:B.length===0,className:`flex ${ge}`,"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(i.Suspense,{fallback:B.length===0?e.jsx("div",{className:"h-full",children:e.jsx(gt,{})}):null,children:e.jsx(Ue,{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"}),!u&&e.jsx("button",{onClick:()=>{const L=v.length;j(),s({type:"features:deleted",count:L,undo:()=>o.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 Re({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 Ft(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 Rt({initialLabel:r,onCommit:t,autoFocus:o,activate:s,onEnd:n,onTab:f,disabled:a}){const[p,u]=i.useState(()=>!a&&(!!o||!!s)),[b,h]=i.useState(r),x=i.useRef(null);i.useEffect(()=>{s&&!p&&!a&&(h(r),u(!0))},[s]),i.useEffect(()=>{var l,g;p&&((l=x.current)==null||l.focus(),(g=x.current)==null||g.select())},[p]);function m(l){a||(h(l),u(!0))}function S(){const l=b.trim();l&&l!==r&&t(l),u(!1),n==null||n()}function k(){h(r),u(!1),n==null||n()}function M(l){if(l.key==="Enter"){l.preventDefault(),l.nativeEvent.stopImmediatePropagation(),S();return}if(l.key==="Escape"){l.nativeEvent.stopImmediatePropagation(),k();return}if(l.key==="Tab"&&f){l.preventDefault(),l.nativeEvent.stopImmediatePropagation();const g=b.trim();g&&g!==r&&t(g),u(!1),f(l.shiftKey?"prev":"next")}}return{isRenaming:p,startRenaming:m,inputProps:{ref:x,value:b,onChange:l=>h(l.target.value),onBlur:S,onKeyDown:M,onClick:l=>l.stopPropagation()}}}function At(r){const t=r.properties.name;return typeof t=="string"&&t.trim()?t:Ft(r.geometry.type)}const $r=i.memo(function({feature:t,isSelected:o,onRowClick:s,onRowSelectOnly:n,onRowJump:f,onEdit:a,onToggleHidden:p,containerProps:u,dragHandleProps:b,isDragging:h,innerRef:x,isMultiSelected:m,onMultiSelectToggle:S,onRangeSelect:k,isContextMenuActive:M,dragCountBadge:E,isGhosted:l,onRename:g,renameActive:c,onRenameEnd:I,onRenameTab:y,joinTop:C,joinBottom:N}){const A=i.useRef(null),B=At(t),v=d.useUIStore(R=>R.readonly),{isRenaming:j,startRenaming:P,inputProps:z}=Rt({initialLabel:B,disabled:v,onCommit:R=>g==null?void 0:g(t.id,R),activate:c,onEnd:I,onTab:y}),K=i.useRef(null);i.useEffect(()=>()=>{K.current!==null&&clearTimeout(K.current)},[]);const _=typeof t.properties.imageUrl=="string"&&t.properties.imageUrl?t.properties.imageUrl:null,[J,L]=i.useState(!1);i.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}=u??{};return e.jsx("li",{ref:R=>{A.current=R,x==null||x(R)},...q,...b,style:{listStyle:"none",opacity:l?.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||o?"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",o||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(Re,{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||!n||!f||(R.stopPropagation(),n(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 Gr({group:r,featureCount:t,autoFocus:o,isSelected:s,onToggleCollapse:n,onToggleHidden:f,onRename:a,onDelete:p,onSelect:u,innerRef:b,dragHandleProps:h,containerProps:x,isDragging:m}){const S=d.useUIStore(A=>A.readonly),{isRenaming:k,startRenaming:M,inputProps:E}=Rt({initialLabel:r.name,disabled:S,onCommit:a,autoFocus:o}),[l,g]=i.useState(null),c=i.useRef(null);function I(A){A.stopPropagation();const B=c.current;if(B){const v=B.getBoundingClientRect();g({x:v.right,y:v.bottom+4})}}const y=i.useRef(null);i.useEffect(()=>()=>{y.current!==null&&clearTimeout(y.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:[l&&e.jsx(D.ContextMenu,{x:l.x,y:l.y,onClose:()=>g(null),items:N}),e.jsxs("div",{ref:b,...x,...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",...x==null?void 0:x.style},onClick:()=>{u&&u()},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(),n()},"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(),!(!u||A.metaKey||A.ctrlKey||A.shiftKey)&&(y.current!==null&&(clearTimeout(y.current),y.current=null),!(A.detail>=2)&&(y.current=window.setTimeout(()=>{u(),y.current=null},300)))},onDoubleClick:A=>{A.stopPropagation(),y.current!==null&&(clearTimeout(y.current),y.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:c,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 Wr({geometry:r,partIndex:t,isSelected:o,onClick:s}){const n=$.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",o?"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",o?"text-primary-700 dark:text-primary-300":"text-(--elm-text-subtle,var(--color-gray-400))"),children:e.jsx(Re,{type:n.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 Lt="elm_code_docked";function zt(){const r=Q.useElementEditorConfig(),[t]=i.useState(()=>Z.readStorage(Lt,r)!=="0");return t}function Bt(r){const t=Q.useElementEditorConfig(),o=d.useUIStore(h=>h.layout),s=d.useUIStore($.sidebarTakesSpace),n=d.useUIStore(h=>h.sidebarWidth),f=d.useUIStore(h=>h.tableFullscreen),a=d.useUIStore(h=>h.setCodeDockWidth),p=d.useUIStore(h=>h.narrow),u=Tt("elm_code_dock_width",420,280,900);i.useLayoutEffect(()=>{if(r)return st(()=>a(p?0:u.width)),()=>st(()=>a(0))},[r,p,u.width,a]);const b=t.ui.layerList&&s;return{...u,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:b?n:0,bottom:o==="split"?"33.33%":0,width:p?`min(${u.width}px, 100%)`:u.width,transition:"right 200ms ease"}}}function _r(){const r=zt(),t=Bt(r),o=i.useRef(null);return Fe(o,r),r?e.jsx("div",{ref:o,"aria-hidden":"true",className:t.className,style:t.style}):null}function qr(){const[r,t]=i.useState(""),[o,s]=i.useState(!1),[n,f]=i.useState(!1),[a,p]=i.useState(-1),u=i.useRef(null),b=i.useRef(null),{results:h,loading:x,error:m,flush:S}=d.useNominatim(r),k=i.useRef(!1),{flyTo:M,fitBounds:E}=d.useMapController(),{dataStore:l}=d.useGeoStore(),g=ce();i.useEffect(()=>{s(r.trim().length>=2),p(-1)},[r,h]),i.useEffect(()=>{k.current=!1},[r]),i.useEffect(()=>{!k.current||x||(k.current=!1,h.length&&N(0))},[h,x]),i.useEffect(()=>{function v(j){u.current&&!u.current.contains(j.target)&&s(!1)}return document.addEventListener("mousedown",v),()=>document.removeEventListener("mousedown",v)},[]),i.useEffect(()=>{function v(j){var P,z;if(g(j)){if(j.key==="f"&&(j.metaKey||j.ctrlKey)&&!Kt(j)){j.preventDefault(),(P=b.current)==null||P.focus();return}j.key==="Escape"&&(o||document.activeElement===b.current)&&(j.stopPropagation(),t(""),s(!1),p(-1),(z=b.current)==null||z.blur())}}return window.addEventListener("keydown",v,{capture:!0}),()=>window.removeEventListener("keydown",v,{capture:!0})},[o,g]);function c(v){M==null||M([parseFloat(v.lat),parseFloat(v.lon)],15)}function I(v){const j=parseFloat(v.lat),P=parseFloat(v.lon),z=l.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};l.getState().addFeature(_),M==null||M([j,P],15),C()}function y(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()}};l.getState().addFeature(z),E==null||E(Z.getGeometryBBox(P)),C()}function C(){t(""),s(!1),p(-1)}function N(v){p(v),c(h[v]),requestAnimationFrame(()=>{var j;return(j=b.current)==null?void 0:j.focus()})}function A(v){if(v.key==="Enter"){if(r.trim().length<2)return;if(v.preventDefault(),h.length&&!x){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=o&&r.trim().length>=2;return{query:r,setQuery:t,setOpen:s,showDropdown:B,containerRef:u,inputRef:b,focused:n,setFocused:f,results:h,loading:x,error:m,flyToResult:c,handleAdd:I,handleAddShape:y,clear:C,activeIndex:a,setActiveIndex:p,handleInputKeyDown:A}}function Kt(r){var t,o;return((o=(t=r.target)==null?void 0:t.closest)==null?void 0:o.call(t,".cm-editor"))!=null}const Hr=208,Vr={"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 Jr({embedded:r}={}){const t=d.useDataStore(U=>U.features.length),o=d.useDataStore(U=>U.maxFeatures),s=o!=null&&t>=o,n=d.useEmit(),f=Q.useElementEditorConfig(),{toolbar:a}=f,p=a.direction==="vertical",u=Vr[a.position],b=d.useUIStore($.sidebarTakesSpace),h=d.useUIStore(U=>U.sidebarWidth),x=d.useUIStore(U=>U.codeDockWidth),m=d.useUIStore(U=>U.layout),S=f.ui.layerList&&b,k=a.position.startsWith("bottom"),M=a.position==="left-center"||a.position==="right-center",E=m==="split"&&k,l=m==="split"&&M,g=(()=>{let U=u.style;const V=a.position.endsWith("-right")||a.position.startsWith("right");return S?V&&(U={...U,right:h+16+x}):f.ui.layerList&&m==="panel"&&a.position==="top-right"?U={...U,right:72+x}:V&&x&&(U={...U,right:16+x}),E?U={...U,bottom:"calc(33.33% + 16px)"}:k&&(U={...U,bottom:"calc(var(--elm-table-offset, 0px) + 16px)"}),l&&(U={...U,top:"33.33%"}),U===u.style?u:{...u,style:U}})(),c=d.useUIStore(U=>U.editingMode),I=d.useUIStore(U=>U.enabledTools),y=d.useUIStore(U=>U.unavailableTools),C=d.useUIStore(U=>U.readonly),N=d.useUIStore(U=>U.setEditingMode);function A(U){if(s&&U!=="none"){n({type:"error",code:"limit-reached",source:"editor",message:$.featureLimitMessage(o)});return}N(U)}const{getKey:B}=fe(),{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}=qr(),ue=i.useRef(null),xe=i.useRef(null);i.useEffect(()=>{var ne;if(r||!k)return;const U=(ne=xe.current)==null?void 0:ne.closest("[data-elm-theme]");if(!U)return;const V=()=>{var pe;const de=((pe=xe.current)==null?void 0:pe.offsetHeight)??0;U.style.setProperty("--elm-bottom-toolbar-offset",`${de+8}px`)};V();const Y=new ResizeObserver(V);return xe.current&&Y.observe(xe.current),()=>{Y.disconnect(),U.style.setProperty("--elm-bottom-toolbar-offset","0px")}},[r,k]);const[be,ae]=i.useState(!1),Ke=i.useRef(null),Oe=i.useRef(null),[Qt,$e]=i.useState(!1),Ge=i.useRef(null);i.useLayoutEffect(()=>{var Ze,Ye;const U=Ge.current;if(p||!U){$e(!1);return}const V=((Ze=K.current)==null?void 0:Ze.closest('[data-elm-edge="top"], [data-elm-edge="bottom"]'))??null,Y=V??((Ye=K.current)==null?void 0:Ye.offsetParent);if(!Y)return;const ne=ve=>ve.flatMap(ie=>getComputedStyle(ie).display==="contents"?ne([...ie.children]):[ie.offsetWidth]),de=()=>{const ve=ne([...U.children]).filter(Ne=>Ne>0),ie=getComputedStyle(U),rr=parseFloat(ie.paddingLeft)+parseFloat(ie.paddingRight)+parseFloat(ie.borderLeftWidth)+parseFloat(ie.borderRightWidth);let Qe=ve.reduce((Ne,or)=>Ne+or,0)+8*Math.max(0,ve.length-1)+rr;const et=U.querySelector("[data-elm-search-toggle]");et&&(Qe+=Hr-et.offsetWidth);const tt=V?V.clientWidth-(parseFloat(V.dataset.elmClearance??"")||0):Y.clientWidth-32;$e(tt>0&&Qe>tt+.5)};de();const pe=new ResizeObserver(()=>de());return pe.observe(Y),pe.observe(U),()=>pe.disconnect()},[p,K]);const le=p||Qt,We=i.useRef(le);We.current=le,i.useEffect(()=>{le||ae(!1)},[le]);const _e=i.useRef(null),qe=ce();function He(){const U=_e.current;U&&(U.style.animation="none",U.offsetWidth,U.style.animation="press-pulse 200ms ease-out")}i.useEffect(()=>{function U(V){V.key==="f"&&(V.metaKey||V.ctrlKey)&&qe(V)&&!Kt(V)&&(We.current?ae(!0):He())}return window.addEventListener("keydown",U),()=>window.removeEventListener("keydown",U)},[qe]);const er=a.position.startsWith("right")||a.position.endsWith("-right")?"left":"right";i.useEffect(()=>{if(!be)return;requestAnimationFrame(()=>{var Y;return(Y=_.current)==null?void 0:Y.focus()});function U(Y){var ne,de;!((ne=Ke.current)!=null&&ne.contains(Y.target))&&!((de=Oe.current)!=null&&de.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)}},[be,_]);const we=c==="place-point",Se=c==="draw-line",ke=c==="draw-polygon",je=c==="draw-circle",Ee=c==="draw-rect",Ce=c==="draw-route",Ie=c==="draw-freehand",De=c==="pick-shape",Ve=c==="measure",re=U=>(!I||I.includes(U))&&!y.includes(U),tr=null;function Je(U){var V;if(U.key==="Tab"&&H>=0){U.preventDefault(),(V=ue.current)==null||V.focusAdd(H);return}ee(U)}function Xe(U,V){var ne;const Y=((V+U)%w.length+w.length)%w.length;X(Y),(ne=ue.current)==null||ne.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:xe,className:"relative w-fit max-w-full",children:[z&&!le&&e.jsx(D.SearchDropdown,{ref:ue,results:w,loading:O,error:q,onGo:R,onAdd:C?void 0:T,onAddShape:C?void 0:G,activeIndex:H,onHoverIndex:X,onNavigate:Xe,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:Ge,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:we,disabled:!we&&s,onClick:()=>A(we?"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:Se,disabled:!Se&&s,onClick:()=>A(Se?"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:ke,disabled:!ke&&s,onClick:()=>A(ke?"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:Ce,disabled:!Ce&&s,onClick:()=>A(Ce?"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:je,disabled:!je&&s,onClick:()=>A(je?"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:Ee,disabled:!Ee&&s,onClick:()=>A(Ee?"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:Ie,disabled:!Ie&&s,onClick:()=>A(Ie?"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:De,disabled:!De&&s,onClick:()=>A(De?"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:Ve,onClick:()=>N(Ve?"none":"measure"),label:"Measure",shortcut:B("measure").toUpperCase(),shortcutId:"measure",children:e.jsx(F.Ruler,{size:24})}),le&&re("search")&&e.jsx(D.ToolbarDivider$1,{vertical:p})]}),re("search")&&!le&&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:_e,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),He(),v.trim().length>=2&&P(!0)},onBlur:()=>L(!1),onKeyDown:Je,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")&&le&&e.jsxs("div",{ref:Oe,"data-elm-search-toggle":"",className:p?"relative":void 0,children:[e.jsx(D.ToolButton,{active:be,onClick:()=>ae(U=>!U),label:"Search places",shortcut:"⌘F",children:e.jsx(F.MagnifyingGlass,{size:24})}),be&&e.jsxs("div",{ref:Ke,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?er==="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:Je,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:ue,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:Xe,className:"border-t border-elm-border max-h-80 overflow-y-auto"})]})]})]})]}),!C&&tr]})}function it(r){const t=[],o=s=>{for(const n of Array.from(s.children)){if(getComputedStyle(n).display==="contents"){o(n);continue}const f=n.getBoundingClientRect();if(!f.width)continue;const a=f.top+f.height/2;t.some(p=>Math.abs(p-a)<8)||t.push(a)}};return o(r),t.length}function Xr(r,t){i.useLayoutEffect(()=>{const o=r.current;if(!o)return;const s=()=>{o.style.maxWidth="";const u=it(o);if(u<2)return;let b=0,h=o.offsetWidth;for(;h-b>1;){const x=b+h>>1;o.style.maxWidth=x+"px",it(o)>u||o.scrollWidth>o.clientWidth?b=x:h=x}o.style.maxWidth=h+"px"};s();const n=[];for(let u=o.parentElement;u&&n.length<8&&(n.push(u),!u.hasAttribute("data-elm-theme"));u=u.parentElement);const f=new WeakMap,a=()=>{for(const u of n)f.set(u,u.clientWidth)};a();const p=new ResizeObserver(u=>{u.every(b=>f.get(b.target)===b.target.clientWidth)||(s(),a())});for(const u of n)p.observe(u);return()=>{p.disconnect(),o.style.maxWidth=""}},[r,t])}const Zr=i.lazy(()=>Promise.resolve().then(()=>require("./BooleanOperations-C2uOHRu3.cjs")));function Yr(){const{dataStore:r}=d.useGeoStore(),t=d.useUIStore(j=>j.readonly),o=d.useUIStore(j=>j.transformActive),s=d.useUIStore(j=>j.setTransformActive),n=d.useUIStore(j=>j.editingMode),f=d.useUIStore(j=>j.setEditingMode),a=d.useDataStore(j=>j.selectedIds),p=a.length===1?a[0]:null,u=d.useUIStore(j=>j.closeDialog),{getKey:b}=fe(),h=d.useEmit(),x=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=i.useRef(null);if(Xr(m,`${t}|${a.length}|${x}`),t)return null;const S=p!==null||a.length>0,k=x==="Polygon"||x==="MultiPolygon",M=x==="MultiPoint"||x==="MultiPolygon"||x==="MultiLineString"||x==="GeometryCollection",E=a.length===1&&x==="Point",l=S&&!E,g=k,c=$.canProcessShape(x),I=M,y=a.length>=2,C=I||y;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(),u(),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:[l&&e.jsx(D.EditToolbarBtn,{label:"Transform",shortcut:e.jsx(D.KbdDark,{children:b("toggle-transform").toUpperCase()}),shortcutId:"toggle-transform",onClick:()=>{s(!o),!o&&n!=="none"&&f("none")},active:o,children:e.jsx(F.Resize,{size:24})}),l&&(c||C)&&e.jsx(D.ToolbarDivider,{}),g&&e.jsxs(e.Fragment,{children:[e.jsx(D.EditToolbarBtn,{label:"Cut hole",shortcut:e.jsx(D.KbdDark,{children:b("cut-hole").toUpperCase()}),shortcutId:"cut-hole",onClick:()=>{f(n==="cut-hole"?"none":"cut-hole"),o&&s(!1)},active:n==="cut-hole",children:e.jsx(F.Scissors,{size:24})}),e.jsx(D.EditToolbarBtn,{label:"Slice shape",shortcut:e.jsx(D.KbdDark,{children:b("slice-shape").toUpperCase()}),shortcutId:"slice-shape",onClick:()=>{f(n==="slice-shape"?"none":"slice-shape"),o&&s(!1)},active:n==="slice-shape",children:e.jsx(F.Knife,{size:24})})]}),c&&e.jsxs(e.Fragment,{children:[e.jsx(D.EditToolbarBtn,{label:"Simplify shape",onClick:()=>{f(n==="simplify-shape"?"none":"simplify-shape"),o&&s(!1)},active:n==="simplify-shape",children:e.jsx("svg",{width:"24",height:"24",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:n==="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(n==="smooth-shape"?"none":"smooth-shape"),o&&s(!1)},active:n==="smooth-shape",children:e.jsx(F.WaveSine,{size:24})}),e.jsx(D.EditToolbarBtn,{label:"Buffer",onClick:()=>{f(n==="buffer-shape"?"none":"buffer-shape"),o&&s(!1)},active:n==="buffer-shape",children:e.jsx(F.SquareLogo,{size:24})})]}),c&&C&&e.jsx(D.ToolbarDivider,{}),I&&e.jsx(D.EditToolbarBtn,{label:"Break apart",shortcut:e.jsx(D.KbdDark,{children:b("break-apart").toUpperCase()}),shortcutId:"break-apart",onClick:A,children:e.jsx(F.Shapes,{size:24})}),y&&e.jsx(D.EditToolbarBtn,{label:"Merge",onClick:B,children:e.jsx(F.StackPlus,{size:24})}),(l||c||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(i.Suspense,{fallback:null,children:e.jsx(Zr,{})})]})}const Qr="calc(var(--elm-bottom-stack-offset, calc(var(--elm-table-offset, 0px) + var(--elm-bottom-toolbar-offset, 0px) + 16px)) + 58px)";function eo({mapContainer:r,count:t,onSimplify:o,onDelete:s}){const n=r.parentElement;return n?ut.createPortal(e.jsx("div",{className:"absolute left-0 right-0 z-[400] flex justify-center pointer-events-none",style:{bottom:Qr},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:o,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"})]})}),n):null}const to=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"})}),ro=[{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"}],oo=[{mode:"simplify-shape",label:"Simplify shape",icon:to},{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 no({x:r,y:t,data:o,onClose:s}){const{feature:n,requestPreciseCoords:f}=o,{dataStore:a}=d.useGeoStore(),p=d.useUIStore(N=>N.readonly),u=d.useUIStore(N=>N.transformActive),b=d.useUIStore(N=>N.setTransformActive),h=d.useUIStore(N=>N.editingMode),x=d.useUIStore(N=>N.setEditingMode),m=d.useUIStore(N=>N.closeDialog),S=d.useDataStore(N=>N.selectedIds),k=d.useEmit(),{getKey:M}=fe();if(p)return null;const E=n.geometry.type,l=E==="Polygon"||E==="MultiPolygon",g=E==="MultiPoint"||E==="MultiPolygon"||E==="MultiLineString"||E==="GeometryCollection",c=S.length>=2&&S.includes(n.id);function I(N){x(h===N?"none":N),u&&b(!1)}function y(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:y("toggle-transform"),onClick:()=>{b(!u),!u&&h!=="none"&&x("none")}}),$.canProcessShape(E)){C.push({separator:!0});for(const N of[...l?ro:[],...oo])C.push({label:N.label,icon:N.icon,shortcut:N.shortcut?y(N.shortcut):void 0,onClick:()=>I(N.mode)})}return l&&C.push({label:"Center point",icon:e.jsx(F.DotOutline,{size:16,weight:"fill"}),onClick:()=>{var v;const N=lr.centroid(n),A=typeof((v=n.properties)==null?void 0:v.name)=="string"&&n.properties.name?n.properties.name:null,B={type:"Feature",id:crypto.randomUUID(),geometry:{type:"Point",coordinates:N.geometry.coordinates},properties:A?{name:`${A} center`}:{},groupId:n.groupId};a.getState().addFeature(B)}}),(g||c)&&(C.push({separator:!0}),g&&C.push({label:"Break apart",icon:e.jsx(F.Shapes,{size:16}),shortcut:y("break-apart"),onClick:()=>{const N=$.getPartCount(n.geometry);a.getState().breakMultiGeometry(n.id)&&k({type:"feature:broken",featureId:n.id,count:N,undo:()=>a.getState().undo()})}}),c&&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:c?`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=c?S.length:1,A=String(((B=n.properties)==null?void 0:B.name)||"feature");a.getState().deleteSelection(),m(),k(N===1?{type:"feature:deleted",featureId:n.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 Ot({size:r,tooltipSide:t}){const o=d.useDataStore(f=>f.undoStack.length>0),s=d.useDataStore(f=>f.undo),n=d.useEmit();return e.jsx(me,{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:()=>{o&&(s(),n({type:"undo"}))},disabled:!o,size:r,tooltipSide:t,children:e.jsx(F.ArrowArcLeft,{size:24})})}function $t({size:r,tooltipSide:t}){const o=d.useDataStore(f=>f.redoStack.length>0),s=d.useDataStore(f=>f.redo),n=d.useEmit();return e.jsx(me,{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:()=>{o&&(s(),n({type:"redo"}))},disabled:!o,size:r,tooltipSide:t,children:e.jsx(F.ArrowArcRight,{size:24})})}function Gt({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 so({direction:r="vertical"}){const t=r==="vertical"?"right":"top";return e.jsxs(Gt,{direction:r,children:[e.jsx(Ot,{size:"group",tooltipSide:t}),e.jsx($t,{size:"group",tooltipSide:t})]})}const ct="h-8 px-3 rounded-elm-control text-sm flex items-center justify-center gap-1.5 active:scale-[0.95]";function ao(){const{ui:r}=Q.useElementEditorConfig(),t=d.useUIStore(w=>w.editingMode),o=d.useUIStore(w=>w.lineInProgress),s=d.useUIStore(w=>w.polygonInProgress),n=d.useUIStore(w=>w.routeWaypoints),f=d.useUIStore(w=>w.routeLoading),a=d.useUIStore(w=>w.commitLine),p=d.useUIStore(w=>w.commitPolygon),u=d.useUIStore(w=>w.commitRoute),b=d.useUIStore(w=>w.commitSliceShape),h=d.useUIStore(w=>w.commitCutHole),x=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),l=d.useUIStore(w=>w.measurePoints),g=d.useUIStore(w=>w.measureMode),c=d.useUIStore(w=>w.setMeasureMode),I=t==="draw-line"||t==="slice-shape",y=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||y||C||N||A||B||v)&&!j&&!P)return null;const K=o.length>0||s.length>0||!!m||!!S||n.length>0||k.length>0||l.length>0;function _(){if(t==="slice-shape"){if(o.length<2)return;b()}else if(t==="cut-hole"){if(s.length<3)return;h()}else if(I){if(o.length<2)return;a({})}else if(y){if(s.length<3)return;p({})}else if(C){if(n.length<2)return;u()}}const J=I?o.length>=2:y?s.length>=3:C?n.length>=2&&!f:!1,L=v?"Click to place a point":t==="draw-line"?o.length===0?"Click to place the first point":"Click to add points · Double-click to finish · ⌫ undo last":t==="draw-polygon"?s.length===0?"Click to place the first point":s.length<3?"Click to continue · ⌫ undo last":"Click to add points · Double-click to close · ⌫ undo last":C?n.length===0?"Click to place the first waypoint":"Click to add waypoints · ⌫ undo last":N?"Click and drag to size":A?"Click and drag to size · Hold Shift for square":B?"Click and drag to draw":t==="slice-shape"?o.length===0?"Draw a line across the shape to slice it":"Click to add points · Double-click to cut · ⌫ undo last":t==="cut-hole"?s.length===0?"Draw a shape inside to cut a hole":s.length<3?"Click to continue · ⌫ undo last":"Click to add points · Double-click to cut · ⌫ undo last":j?l.length===0?"Click to start measuring":"Click to add points · Double-click to finish · ⌫ undo last":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:()=>c("distance"),label:"Measure distance",children:e.jsx(F.ArrowsHorizontal,{size:24})}),e.jsx(D.EditToolbarBtn,{active:g==="area",onClick:()=>c("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(D.ToolbarDivider,{}),r.hints&&L&&e.jsx("span",{className:"text-sm text-elm-text-muted px-2",children:L}),r.hints&&L&&e.jsx(D.ToolbarDivider,{}),J&&e.jsxs("button",{type:"button",onClick:_,className:`${ct} 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:x,className:`${ct} 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 lo({size:r,tooltipSide:t}={}){const{fitBounds:o}=d.useMapController(),s=d.useEmit(),n=d.useDataStore(p=>p.features),f=d.useDataStore(p=>p.selectedIds);function a(){if(!o)return;let p=n;if(f.length>0){const u=new Set(f);p=n.filter(b=>u.has(b.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];o(h.bbox||Z.getGeometryBBox(h.geometry));return}const u=ir.featureCollection(p),b=dt.bbox(u);o(b)}catch(u){s({type:"error",code:"geometry",source:"editor",message:"Failed to calculate map bounds",cause:u})}}return e.jsx(me,{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 io="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",co="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",uo="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 fo({minZoom:r=1,maxZoom:t=22,fractional:o=!1,size:s="md",tooltipSide:n="top"}){const f=d.useDataStore(I=>I.currentZoom),{flyTo:a,getCenter:p}=d.useMapController(),u=d.useEmit(),b=!!a&&!!p,h=d.useUIStore(I=>I.zoomEditing),x=d.useUIStore(I=>I.setZoomEditing),[m,S]=i.useState(null),k=i.useRef(null),M=i.useRef(!1),{getKey:E}=fe(),l=s==="sm"?io:s==="group"?co:uo,g=s!=="md";i.useEffect(()=>{m!==null&&(o?Math.abs(f-m)<.05:Math.round(f)===Math.round(m))&&S(null)},[f,m,o]);function c(){var N;const I=(((N=k.current)==null?void 0:N.value)??"").trim();if(I===""){x(!1);return}const y=Number(I);if(!Number.isFinite(y)){u({type:"warning",message:`"${I}" is not a valid zoom level`});return}if(y<r||y>t){u({type:"warning",message:`Zoom must be between ${r} and ${t}`});return}if(!a||!p){u({type:"warning",message:"Map is not ready yet — try again in a moment"});return}const C=p();S(y),a([C[1],C[0]],y),x(!1)}if(h){const I=o?(m??f).toFixed(1):String(Math.round(m??f));return e.jsx("input",{ref:k,type:"text",inputMode:o?"decimal":"numeric",pattern:o?"[0-9.]*":"[0-9]*",autoFocus:!0,defaultValue:I,onFocus:y=>{const C=y.currentTarget;M.current?C.setSelectionRange(C.value.length,C.value.length):C.select(),M.current=!1},onKeyDown:y=>{y.key==="Enter"?(y.preventDefault(),c()):y.key==="Escape"&&(y.preventDefault(),x(!1))},onBlur:()=>x(!1),"aria-label":"Zoom level",className:`${l.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:b?"Set zoom level":"Map zoom level",side:n,shortcut:b?e.jsx(D.KbdDark,{children:E("set-zoom").toUpperCase()}):void 0,children:e.jsx("button",{type:"button","aria-label":b?"Set map zoom level":"Map zoom level","data-elm-shortcut":"set-zoom",onClick:()=>{b&&(M.current=!0,x(!0))},disabled:!b,className:`${l} ${b?`${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:o?(m??f).toFixed(1):Math.round(m??f)})})}function mo({zoom:r=15,size:t,tooltipSide:o}){const{flyTo:s}=d.useMapController(),n=d.useEmit(),[f,a]=i.useState(!1);function p(){if(!navigator.geolocation){n({type:"error",code:"unsupported",source:"locate",message:"Geolocation is not supported by this browser"});return}if(!s){n({type:"warning",message:"Map is not ready yet — try again in a moment"});return}f||(a(!0),navigator.geolocation.getCurrentPosition(u=>{a(!1),s([u.coords.latitude,u.coords.longitude],r)},u=>{a(!1),n({type:"error",code:u.code===u.PERMISSION_DENIED?"permission-denied":u.code===u.TIMEOUT?"timeout":"unknown",source:"locate",cause:u,message:u.code===u.PERMISSION_DENIED?"Location access denied":"Could not determine your location"})},{timeout:1e4}))}return e.jsx(me,{label:f?"Locating…":"Show my location",onClick:p,size:t,tooltipSide:o,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 po(){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 ho=3e4;let oe=null;const ye=new Map;function Ae(r,t){oe==null||oe.terminate(),oe=null;const o=[...ye.values()];ye.clear();for(const s of o)clearTimeout(s.timer),s.reject(new Z.ElementEditorError(t,"geometry",r))}async function go(){if(oe)return oe;const{default:r}=await Promise.resolve().then(()=>require("./geometryWorker-CCwg4tNC.cjs"));return oe||(oe=new r,oe.onmessage=t=>{const{id:o,ok:s,result:n,error:f}=t.data,a=ye.get(o);if(a){if(ye.delete(o),clearTimeout(a.timer),s&&(n!=null&&n.geometry)){a.resolve(n.geometry);return}a.reject(new Z.ElementEditorError("geometry","geometry",(f==null?void 0:f.message)||"Geometry operation failed"))}},oe.onerror=()=>Ae("Geometry worker failed","geometry"),oe)}function Le(r,{timeoutMs:t=ho}={}){return go().then(o=>new Promise((s,n)=>{const f=crypto.randomUUID(),a=setTimeout(()=>{Ae(`Geometry operation timed out after ${t} ms`,"timeout")},t);ye.set(f,{resolve:s,reject:n,timer:a});const p={id:f,payload:r};o.postMessage(p)}))}typeof Worker<"u"&&$.setGeometryRunner(Le);function xo(){Ae("Geometry worker disposed","unknown")}function ze(r,t){var p;const o=(p=i.useContext(d.EventContext))==null?void 0:p.emit,s=i.useRef(o);s.current=o;const n=i.useRef({seq:0,epoch:0,busy:!1,queued:null,owned:!1,onSettled:null,alive:!0}).current,f=i.useCallback(()=>{const u=n.onSettled;n.onSettled=null,u==null||u()},[n]),a=i.useCallback(u=>{const b=++n.seq,h=n.epoch;n.busy=!0,Le(u).then(x=>x,x=>{var m;return n.alive&&h===n.epoch&&((m=s.current)==null||m.call(s,{type:"error",code:x instanceof Z.ElementEditorError?x.code:"geometry",source:"geometry",message:`The ${u.type} preview failed: ${x instanceof Error?x.message:String(x)}`,cause:x,quiet:!0})),null}).then(x=>{if(n.busy=!1,!n.alive||h!==n.epoch){if(n.queued){const k=n.queued;n.queued=null,a(k)}return}const m=n.queued;n.queued=null;const S=b===n.seq;(S||m&&m.geometry===u.geometry)&&(n.owned=!0,t(x)),m?a(m):S&&f()})},[n,t,f]);return i.useEffect(()=>{if(!r){n.epoch++,n.queued=null,n.onSettled=null,n.owned&&(n.owned=!1,t(null));return}if(n.busy){n.queued=r,n.seq++;return}a(r)},[r,n,a,t]),i.useEffect(()=>(n.alive=!0,()=>{n.alive=!1,n.queued=null,n.onSettled=null}),[n]),i.useCallback(u=>{!n.busy&&!n.queued?u():n.onSettled=u},[n])}const yo=111320;function bo(r,t){const o=r*yo;if(o<1)return`<1${Z.formatLength(1,t).unit}`;const s=Z.formatLength(o,t);return`~${s.value}${s.unit}`}function vo(){const r=d.useUIStore(y=>y.editingMode),t=d.useUIStore(y=>y.simplifyTolerance),o=d.useUIStore(y=>y.setSimplifyTolerance),s=d.useUIStore(y=>y.setGeometryPreview),n=d.useUIStore(y=>y.geometryPreview),f=d.useUIStore(y=>y.commitGeometryProcess),a=d.useUIStore(y=>y.cancelGeometryProcess),{units:p}=Q.useElementEditorConfig(),u={unit:p.length,display:p.display,precision:p.precision},{dataStore:b}=d.useGeoStore(),h=ce(),x=d.useDataStore(y=>y.selectedIds[0]??null),m=d.useDataStore(y=>{var C;return x?((C=y.features.find(N=>N.id===x))==null?void 0:C.geometry)??null:null}),S=d.useDataStore(y=>{var C;return x?((C=y.features.find(N=>N.id===x))==null?void 0:C._drawType)??null:null}),k=i.useMemo(()=>{if(!m||r!=="simplify-shape")return 0;try{const y=dt.bbox({type:"Feature",geometry:m,properties:{}}),C=Math.sqrt((y[2]-y[0])**2+(y[3]-y[1])**2);return(t/100)**2*C*.3}catch{return 0}},[t,m,r]),M=r==="simplify-shape",E=i.useMemo(()=>!M||!m||!$.canProcessShape(m.type)?null:{type:"simplify",geometry:m,tolerance:k},[M,m,k]),l=ze(E,s);i.useEffect(()=>()=>{b.getState(),s(null)},[s,b]);const g=m?$.countShapeVertices(m):0,c=n?$.countShapeVertices(n):g,I=g-c;return i.useEffect(()=>{if(r!=="simplify-shape")return;function y(C){h(C)&&(C.key==="Enter"&&n&&I>0?(C.preventDefault(),l(f)):C.key==="Escape"&&(C.preventDefault(),a()))}return window.addEventListener("keydown",y),()=>window.removeEventListener("keydown",y)},[r,n,I,f,a,l,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:y=>o(Number(y.target.value)),className:"w-32 accent-primary-600"}),e.jsx("span",{className:"text-sm text-elm-text-muted w-16 shrink-0",children:bo(k,u)})]}),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:c}),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:()=>l(f),disabled:!n||I===0,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}function wo(){const r=d.useUIStore(g=>g.editingMode),t=d.useUIStore(g=>g.smoothIterations),o=d.useUIStore(g=>g.setSmoothIterations),s=d.useUIStore(g=>g.setGeometryPreview),n=d.useUIStore(g=>g.geometryPreview),f=d.useUIStore(g=>g.commitGeometryProcess),a=d.useUIStore(g=>g.cancelGeometryProcess),{dataStore:p}=d.useGeoStore(),u=ce(),b=d.useDataStore(g=>g.selectedIds[0]??null),h=d.useDataStore(g=>{var c;return b?((c=g.features.find(I=>I.id===b))==null?void 0:c.geometry)??null:null}),x=d.useDataStore(g=>{var c;return b?((c=g.features.find(I=>I.id===b))==null?void 0:c._drawType)??null:null}),m=r==="smooth-shape",S=i.useMemo(()=>!m||!h||!$.canProcessShape(h.type)?null:{type:"smooth",geometry:h,iterations:t},[m,h,t]),k=ze(S,s);i.useEffect(()=>()=>{p.getState(),s(null)},[s,p]);const M=h?$.countShapeVertices(h):0,E=n?$.countShapeVertices(n):M,l=E-M;return i.useEffect(()=>{if(r!=="smooth-shape")return;function g(c){u(c)&&(c.key==="Enter"&&n?(c.preventDefault(),k(f)):c.key==="Escape"&&(c.preventDefault(),a()))}return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[r,n,f,a,k,u]),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=>o(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}),l>0&&e.jsxs("span",{className:"text-xs text-primary-500",children:["(+",l,")"]}),e.jsx("span",{className:"ml-0.5",children:"points"})]}),x&&e.jsx("span",{className:"text-xs text-amber-600 dark:text-amber-400 shrink-0",children:x==="route"?"Turns this route into a plain line.":`Turns this ${x} 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:!n,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}const Be=.3048,So=5280,Wt=Be*So;function ko(r,t){switch(t){case"m":return r;case"km":return r*1e3;case"ft":return r*Be;case"mi":return r*Wt}}function jo(r,t){switch(t){case"m":return r;case"km":return r/1e3;case"ft":return r/Be;case"mi":return r/Wt}}function Eo(){const{dataStore:r}=d.useGeoStore(),t=ce(),o=d.useUIStore(P=>P.editingMode),s=d.useUIStore(P=>P.bufferDistance),n=d.useUIStore(P=>P.setBufferDistance),f=d.useUIStore(P=>P.bufferCreateNew),a=d.useUIStore(P=>P.setBufferCreateNew),p=d.useUIStore(P=>P.setGeometryPreview),u=d.useUIStore(P=>P.geometryPreview),b=d.useUIStore(P=>P.commitBufferProcess),h=d.useUIStore(P=>P.cancelBufferProcess),{units:x}=Q.useElementEditorConfig(),m=$.resolveUnitSystem(x.length),S=i.useMemo(()=>m==="imperial"?["ft","mi"]:["m","km"],[m]),[k,M]=i.useState(!1),E=k?S[1]:S[0],[l,g]=i.useState(null);i.useEffect(()=>{var K;if(o!=="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)},[o,r]);const c=$.isLineGeometryType(l==null?void 0:l.type),I=i.useMemo(()=>l&&!(c&&s<=0)?{type:"buffer",geometry:l,distance:s}:null,[l,s,c]),y=ze(I,p);i.useEffect(()=>()=>{p(null)},[p]),i.useEffect(()=>{if(o!=="buffer-shape")return;function P(z){t(z)&&(z.key==="Enter"&&u?(z.preventDefault(),y(b)):z.key==="Escape"&&(z.preventDefault(),h()))}return window.addEventListener("keydown",P),()=>window.removeEventListener("keydown",P)},[o,u,b,h,y,t]);const C=E==="km"||E==="mi",N=jo(s,E),A=C?Number(N.toFixed(2)):Math.round(N),B=C?.1:1;function v(P){const z=parseFloat(P);isNaN(z)||n(Math.round(ko(z,E)))}function j(){M(P=>!P)}return o!=="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:c?0:-500,max:2e3,step:1,value:s,onChange:P=>n(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:()=>y(b),disabled:!u,className:"rounded-elm-control h-8 px-3 text-sm",children:"Apply"})]})]})}const Co=8,Io={ArrowLeft:-1,ArrowRight:1,ArrowUp:-3,ArrowDown:3};function Do({options:r,value:t,onChange:o,label:s="Basemap",size:n,tooltipSide:f}){const[a,p]=i.useState(!1),[u,b]=i.useState(null),[h,x]=i.useState(!1),m=i.useRef(null),S=i.useRef(null),k=i.useId(),M=Q.useAccentStyle(),E=u!==null;i.useLayoutEffect(()=>{var B,v;const c=(v=(B=m.current)==null?void 0:B.querySelector("button"))==null?void 0:v.getBoundingClientRect(),I=S.current;if(!a||!c||!I)return;const{width:y,height:C}=I.getBoundingClientRect(),N=c.top+c.height/2>window.innerHeight/2,A=c.left+c.width/2>window.innerWidth/2;b($.placeBox(A?c.right:c.left,N?c.top:c.bottom,y,C,{x:A?"before":"after",y:N?"before":"after",gapY:Co}))},[a,r.length]),i.useEffect(()=>{var I;if(!a||!E)return;const c=S.current;(I=(c==null?void 0:c.querySelector('[aria-pressed="true"]'))??(c==null?void 0:c.querySelector("button")))==null||I.focus()},[a,E]),i.useEffect(()=>{if(!a)return;const c=I=>{var y,C,N;I.key==="Escape"&&(I.stopImmediatePropagation(),I.preventDefault(),(y=S.current)!=null&&y.contains(document.activeElement)&&((N=(C=m.current)==null?void 0:C.querySelector("button"))==null||N.focus()),p(!1))};return window.addEventListener("keydown",c,{capture:!0}),()=>window.removeEventListener("keydown",c,{capture:!0})},[a]);const l=c=>{const I=Io[c.key];if(!I)return;const y=Array.from(c.currentTarget.querySelectorAll("button")),C=y[y.indexOf(document.activeElement)+I];C&&(c.preventDefault(),C.focus())},g=()=>{var c,I;b(null),x(((I=(c=m.current)==null?void 0:c.closest("[data-elm-theme]"))==null?void 0:I.getAttribute("data-elm-theme"))==="dark"),p(y=>!y)};return e.jsxs("div",{ref:m,className:"contents",children:[e.jsx(me,{label:s,onClick:g,active:a,expanded:a,controls:a?k:void 0,size:n,tooltipSide:f,children:e.jsx(F.StackSimple,{size:24})}),a&&ut.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:(u==null?void 0:u.left)??0,top:(u==null?void 0:u.top)??0,visibility:u?void 0:"hidden"},children:e.jsx("div",{className:"grid grid-cols-3 gap-2 p-2 overflow-y-auto",onKeyDown:l,children:r.map(c=>{const I=c.id===t;return e.jsxs("button",{type:"button","aria-pressed":I,"aria-label":c.label,onClick:()=>o(c.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(c.thumbnail)?e.jsx("div",{className:"w-full h-12 flex rounded-t-elm-card overflow-hidden",children:c.thumbnail.map(y=>e.jsx("img",{src:y,alt:"",className:"w-1/2 h-full object-cover",loading:"lazy",draggable:!1},y))}):c.thumbnail?e.jsx("img",{src:c.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:c.label})]},c.id)})})})}),document.body)]})}function No(r,t){const o=i.useRef(t);o.current=t,i.useEffect(()=>Z.subscribeToDataChanges(r,()=>o.current),[r])}const Po=(r,t)=>Object.keys(r).every(o=>r[o]===t[o]);function To(r){const[t,o]=i.useState(()=>Z.readAccentPalette(r));return i.useEffect(()=>{const s=()=>{const p=Z.readAccentPalette(r);o(u=>Po(u,p)?u:p)};let n=0;const f=()=>{n||(n=requestAnimationFrame(()=>{n=0,s()}))};s();const a=Q.watchThemeInputs((r==null?void 0:r.closest("[data-elm-theme]"))??null,f);return()=>{a(),cancelAnimationFrame(n)}},[r]),t}const Mo=[".geojson",".json","application/geo+json","application/json"];function Uo(r,t){const o=r.name.toLowerCase();for(const s of t){const n=s.toLowerCase();if(n.startsWith(".")){if(o.endsWith(n))return!0}else if(n.endsWith("/*")){const f=n.slice(0,-1);if(r.type.toLowerCase().startsWith(f))return!0}else if(r.type.toLowerCase()===n)return!0}return!1}function Fo(r){const{onImport:t,onError:o,maxBytes:s=Z.DEFAULT_MAX_IMPORT_BYTES,accept:n=Mo,disabled:f=!1}=r,[a,p]=i.useState(!1),[u,b]=i.useState(!1),h=i.useRef(0),x=i.useRef(null),m=i.useRef(!0),S=i.useRef(t),k=i.useRef(o);i.useEffect(()=>{S.current=t},[t]),i.useEffect(()=>{k.current=o},[o]),i.useEffect(()=>(m.current=!0,()=>{m.current=!1}),[]);const M=i.useMemo(()=>n.join(","),[n]),E=i.useCallback(async v=>{var j,P,z,K;if(!Uo(v,n)){(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}b(!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&&b(!1)}},[n,s]),l=i.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=i.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]),c=i.useCallback(v=>{f||(v.preventDefault(),v.stopPropagation(),h.current=Math.max(0,h.current-1),h.current===0&&p(!1))},[f]),I=i.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]),y=i.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=i.useCallback(v=>{x.current=v},[]),N=i.useCallback(()=>{var v;f||(v=x.current)==null||v.click()},[f]),A=i.useCallback(()=>({onDragEnter:l,onDragOver:g,onDragLeave:c,onDrop:I}),[l,g,c,I]),B=i.useCallback(()=>({type:"file",accept:M,style:{display:"none"},ref:C,onChange:y}),[M,C,y]);return{getRootProps:A,getInputProps:B,isDragActive:a,isProcessing:u,open:N}}const Ro="application/geo+json";function Ao(r,t){const o=typeof t=="function"?t(r):typeof t=="string"&&t.length>0?t:"features";return o.toLowerCase().endsWith(".geojson")?o:`${o}.geojson`}function Lo(r){const{getFeatureCollection:t,filename:o,indent:s=2,disabled:n=!1}=r,f=i.useRef(t),a=i.useRef(r.onExport),p=i.useRef(r.onError),u=i.useRef(o),b=i.useRef(s),h=i.useRef(n);i.useEffect(()=>{f.current=t},[t]),i.useEffect(()=>{a.current=r.onExport},[r.onExport]),i.useEffect(()=>{p.current=r.onError},[r.onError]),i.useEffect(()=>{u.current=o},[o]),i.useEffect(()=>{b.current=s},[s]),i.useEffect(()=>{h.current=n},[n]);const x=i.useCallback(()=>{var l;if(h.current)return null;const E=f.current();return!E||!Array.isArray(E.features)||E.features.length===0?((l=p.current)==null||l.call(p,{kind:"empty"}),null):E},[]),m=i.useCallback(E=>{var l;try{return JSON.stringify(E,null,b.current)}catch(g){return(l=p.current)==null||l.call(p,{kind:"serialization-error",cause:g instanceof Error?g:new Error(String(g))}),null}},[]),S=i.useCallback(()=>{const E=x();return E?m(E):null},[x,m]),k=i.useCallback(()=>{const E=S();return E===null?null:new Blob([E],{type:Ro})},[S]);return{exportToFile:i.useCallback(()=>{const E=x();if(!E)return null;const l=m(E);if(l===null)return null;const g=Ao(E,u.current);return d.saveGeoJSONFile(l,g).then(c=>{var I;c&&((I=a.current)==null||I.call(a,E,c))}),g},[x,m]),exportToString:S,exportToBlob:k}}class _t extends i.Component{constructor(){super(...arguments);rt(this,"state",{hasError:!1,error:null})}static getDerivedStateFromError(o){return{hasError:!0,error:o}}componentDidCatch(o){var s,n;(n=(s=this.props).onError)==null||n.call(s,new Z.ElementEditorError("crash","editor",`The editor crashed: ${(o==null?void 0:o.message)??String(o)}`,{cause:o}))}render(){var o;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:((o=this.state.error)==null?void 0:o.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 zo({config:r,accentColor:t,featureColor:o,onEvent:s,onError:n,toaster:f=!0,children:a}){const p=i.useMemo(()=>t||o?{...r,...t&&{accentColor:t},...o&&{featureColor:o}}:r,[r,t,o]);return e.jsx(_t,{onError:n,children:e.jsx(Q.ElementEditorConfigProvider,{config:p,children:e.jsx(mt,{children:e.jsx(d.ThemeReportingProvider,{children:e.jsx(d.EventProvider,{onEvent:s,onError:n,toaster:f,children:e.jsx(d.MapControllerProvider,{children:a})})})})})})}const qt=se(()=>Promise.resolve().then(()=>require("./GeoJSONModal-Dd-nBufy.cjs"))),Ht=se(()=>Promise.resolve().then(()=>require("./SchemaModal-gAuDkd-L.cjs"))),Vt=se(()=>Promise.resolve().then(()=>require("./FeatureEditModal-Cc8N6vei.cjs"))),Jt=se(()=>Promise.resolve().then(()=>require("./DataTablePanel-58LwzXQR.cjs"))),Xt=se(()=>Promise.resolve().then(()=>require("./SettingsModal-CqaSFxxR.cjs"))),Zt=se(()=>Promise.resolve().then(()=>require("./ShortcutsModal-D1Y2bGT8.cjs")).then(r=>({default:r.ShortcutsModal})));Te(qt,Ht,Vt,Jt,Xt,Zt);const Yt=se(()=>Promise.resolve().then(()=>require("./BooleanOperations-C2uOHRu3.cjs")));Te(Yt);exports.ActiveDrawingToolbar=ao;exports.BasemapPicker=Do;exports.BooleanOperations=Yt;exports.BufferPanel=Eo;exports.CODE_DOCKED_KEY=Lt;exports.ControlGroup=Gt;exports.DataTable=pt;exports.DataTablePanel=Jt;exports.EditingToolbar=Yr;exports.ElementEditorErrorBoundary=_t;exports.ElementEditorUIProvider=zo;exports.FeatureEditModal=Vt;exports.FeatureList=Ue;exports.FeatureMapContextMenu=no;exports.FeatureRow=$r;exports.FeatureSidePanel=It;exports.FitBoundsButton=lo;exports.FloatingToolbar=Jr;exports.GeoJSONDockPlaceholder=_r;exports.GeoJSONModal=qt;exports.GeometryTypeIcon=Re;exports.GroupRow=Gr;exports.IconButton=me;exports.LayersPanel=Or;exports.LocateButton=mo;exports.NoFeaturesEmptyState=gt;exports.PartSubRow=Wr;exports.ReadonlyBanner=po;exports.RedoButton=$t;exports.SchemaEditor=ht;exports.SchemaModal=Ht;exports.SettingsModal=Xt;exports.ShortcutConfigProvider=mt;exports.ShortcutsModal=Zt;exports.SimplifyPanel=vo;exports.SmoothPanel=wo;exports.UndoButton=Ot;exports.UndoRedoToolbar=so;exports.VertexSelectionBar=eo;exports.WINDOW_ATTR=vt;exports.ZoomIndicator=fo;exports.clipboardErrorEvent=yt;exports.disposeGeometryWorker=xo;exports.featureLabel=At;exports.geometryTypeLabel=Ft;exports.getTabbableFeatureIds=dr;exports.getVisualFeatureOrder=bt;exports.isMacPlatform=xt;exports.panelHeaderBar=jt;exports.panelHeaderIconBtn=ge;exports.parseBooleanText=St;exports.preloadEditorPanelsWhenIdle=cr;exports.readBooleanValue=kt;exports.resizeEdgeLeft=Ut;exports.resizeEdgeTop=Fr;exports.runGeometryWorkerOperation=Le;exports.startDragShield=Pt;exports.useAccentPalette=To;exports.useCodeDock=Bt;exports.useDataChangeSubscription=No;exports.useGeoJSONDrop=Fo;exports.useGeoJSONExport=Lo;exports.useInitialCodeDocked=zt;exports.useIsEventForEditor=ce;exports.useKeyboardShortcuts=br;exports.usePanelOffset=Fe;exports.useShortcutConfig=fe;exports.useWindowEscape=mr;
@@ -0,0 +1,89 @@
1
+ export { GeoStoreProvider, StoreContext, useDataStore, useUIStore, useGeoStore } from './store/StoreContext.cjs';
2
+ export type { DataStore, UIStore } from '@element-editor/core';
3
+ export { MapControllerProvider, useMapController, useSetMapController } from './contexts/MapControllerContext.cjs';
4
+ export type { MapController } from './contexts/MapControllerContext.cjs';
5
+ export { ThemeContext, useTheme, ThemeReportingProvider, useReportThemeFromRoot } from './contexts/ThemeContext.cjs';
6
+ export type { ResolvedTheme } from './contexts/ThemeContext.cjs';
7
+ export { EventProvider, useEmit, useIsManaged, useToasterId, type EmittedEvent } from './contexts/EventContext.cjs';
8
+ export { ShortcutConfigProvider, useShortcutConfig } from './contexts/ShortcutConfigContext.cjs';
9
+ export { ElementEditorConfigProvider, useElementEditorConfig, useUnitsOverride, resolveConfig, DEFAULT_LAYOUT, withLayout } from './contexts/ElementEditorConfigContext.cjs';
10
+ export type { ElementEditorConfig, ResolvedConfig, DrawTool, ToolbarPosition, LayoutSlot, LayoutControl, RasterBasemap, LayoutGroup, LayoutEntry, LayoutSlotConfig, LayoutConfig, ResolvedLayout, MapSlot, StatusSlot, MapGroup, StatusGroup, MapEntry, StatusEntry, MapSlotConfig, StatusSlotConfig, LayoutPatch, SlotFor, UnitsOverride } from './contexts/ElementEditorConfigContext.cjs';
11
+ export type { ElementEditorEvent, ElementEditorErrorHandler } from './types/events.cjs';
12
+ export { ElementEditorError } from '@element-editor/core';
13
+ export type { ErrorCode, ErrorSource } from '@element-editor/core';
14
+ export { default as LayersPanel } from './components/sidebar/LayersPanel.cjs';
15
+ export { default as FeatureSidePanel } from './components/sidebar/FeatureSidePanel.cjs';
16
+ export { default as FeatureRow, featureLabel } from './components/sidebar/FeatureRow.cjs';
17
+ export { default as GroupRow } from './components/sidebar/GroupRow.cjs';
18
+ export { default as PartSubRow } from './components/sidebar/PartSubRow.cjs';
19
+ export { FeatureList, SchemaEditor, DataTable } from './components/lazyParts.cjs';
20
+ export declare const GeoJSONModal: typeof import('./components/sidebar/GeoJSONModal.cjs').default & {
21
+ preload: () => Promise<unknown>;
22
+ };
23
+ export { GeoJSONDockPlaceholder } from './components/sidebar/codeDock.cjs';
24
+ export declare const SchemaModal: typeof import('./components/sidebar/SchemaModal.cjs').default & {
25
+ preload: () => Promise<unknown>;
26
+ };
27
+ export declare const FeatureEditModal: typeof import('./components/sidebar/FeatureEditModal.cjs').default & {
28
+ preload: () => Promise<unknown>;
29
+ };
30
+ export declare const DataTablePanel: typeof import('./components/DataTablePanel.cjs').default & {
31
+ preload: () => Promise<unknown>;
32
+ };
33
+ export declare const SettingsModal: typeof import('./components/dialogs/SettingsModal.cjs').default & {
34
+ preload: () => Promise<unknown>;
35
+ };
36
+ export declare const ShortcutsModal: typeof import('./components/ShortcutsModal.cjs').ShortcutsModal & {
37
+ preload: () => Promise<unknown>;
38
+ };
39
+ export { preloadEditorPanelsWhenIdle } from './utils/lazyWithPreload.cjs';
40
+ export { default as FloatingToolbar } from './components/FloatingToolbar.cjs';
41
+ export { default as EditingToolbar } from './components/EditingToolbar.cjs';
42
+ export { VertexSelectionBar } from './components/VertexSelectionBar.cjs';
43
+ export { FeatureMapContextMenu } from './components/FeatureMapContextMenu.cjs';
44
+ export type { FeatureContextMenuData } from './components/FeatureMapContextMenu.cjs';
45
+ export { default as UndoRedoToolbar } from './components/UndoRedoToolbar.cjs';
46
+ export { UndoButton, RedoButton, ControlGroup } from './components/UndoRedoToolbar.cjs';
47
+ export { default as ActiveDrawingToolbar } from './components/ActiveDrawingToolbar.cjs';
48
+ export { default as FitBoundsButton } from './components/FitBoundsButton.cjs';
49
+ export { default as ZoomIndicator } from './components/ZoomIndicator.cjs';
50
+ export { default as LocateButton } from './components/LocateButton.cjs';
51
+ export { default as ReadonlyBanner } from './components/ReadonlyBanner.cjs';
52
+ export declare const BooleanOperations: typeof import('./components/BooleanOperations.cjs').default & {
53
+ preload: () => Promise<unknown>;
54
+ };
55
+ export { default as SimplifyPanel } from './components/SimplifyPanel.cjs';
56
+ export { default as SmoothPanel } from './components/SmoothPanel.cjs';
57
+ export { default as BufferPanel } from './components/BufferPanel.cjs';
58
+ export { Button } from './components/ui/Button.cjs';
59
+ export { ContextMenu, isContextMenuOpen, CONTEXT_MENU_MARKER_ATTR } from './components/ui/ContextMenu.cjs';
60
+ export { Input, Textarea, SelectInput } from './components/ui/Input.cjs';
61
+ export { Kbd, KbdDark, KbdInvert } from './components/ui/Kbd.cjs';
62
+ export { SearchDropdown } from './components/ui/SearchDropdown.cjs';
63
+ export type { SearchDropdownHandle } from './components/ui/SearchDropdown.cjs';
64
+ export { ToolButton } from './components/ui/ToolButton.cjs';
65
+ export { IconButton } from './components/ui/IconButton.cjs';
66
+ export type { IconButtonSize } from './components/ui/IconButton.cjs';
67
+ export { BasemapPicker } from './components/BasemapPicker.cjs';
68
+ export type { BasemapPickerOption, BasemapPickerProps } from './components/BasemapPicker.cjs';
69
+ export { Tooltip } from './components/ui/Tooltip.cjs';
70
+ export type { TooltipSide } from './components/ui/Tooltip.cjs';
71
+ export { ElementToaster } from './components/ui/ElementToaster.cjs';
72
+ export { EditToolbarBtn, ToolbarDivider } from './components/ui/EditToolbarBtn.cjs';
73
+ export { useKeyboardShortcuts, useIsEventForEditor } from './hooks/useKeyboardShortcuts.cjs';
74
+ export { useDataChangeSubscription } from './hooks/useDataChangeSubscription.cjs';
75
+ export { useNominatim } from './hooks/useNominatim.cjs';
76
+ export type { NominatimResult } from './hooks/useNominatim.cjs';
77
+ export { useAccentPalette } from './hooks/useAccentPalette.cjs';
78
+ export { useAccentStyle, useApplyAccentToRoot, accentStyle } from './hooks/useAccentStyle.cjs';
79
+ export { useGeoJSONDrop } from './hooks/useGeoJSONDrop.cjs';
80
+ export type { UseGeoJSONDropOptions, UseGeoJSONDropReturn, GeoJSONDropError } from './hooks/useGeoJSONDrop.cjs';
81
+ export { useGeoJSONExport } from './hooks/useGeoJSONExport.cjs';
82
+ export type { UseGeoJSONExportOptions, UseGeoJSONExportReturn, GeoJSONExportError } from './hooks/useGeoJSONExport.cjs';
83
+ export { useAdapterControls } from './hooks/useAdapterControls.cjs';
84
+ export type { UseAdapterControlsOptions, ElementEditorImperativeAPI, MutationOptions, SetFeatureCollectionOptions, ValidationReport, ImportResult } from './hooks/useAdapterControls.cjs';
85
+ export { triggerGeoJSONDownload, saveGeoJSONFile } from './utils/download.cjs';
86
+ export { runGeometryWorkerOperation, disposeGeometryWorker } from './utils/geometryWorkerClient.cjs';
87
+ export { ElementEditorErrorBoundary } from './components/ElementEditorErrorBoundary.cjs';
88
+ export { ElementEditorUIProvider } from './components/ElementEditorUIProvider.cjs';
89
+ export type { ElementEditorUIProviderProps } from './components/ElementEditorUIProvider.cjs';
@@ -0,0 +1,89 @@
1
+ export { GeoStoreProvider, StoreContext, useDataStore, useUIStore, useGeoStore } from './store/StoreContext.js';
2
+ export type { DataStore, UIStore } from '@element-editor/core';
3
+ export { MapControllerProvider, useMapController, useSetMapController } from './contexts/MapControllerContext.js';
4
+ export type { MapController } from './contexts/MapControllerContext.js';
5
+ export { ThemeContext, useTheme, ThemeReportingProvider, useReportThemeFromRoot } from './contexts/ThemeContext.js';
6
+ export type { ResolvedTheme } from './contexts/ThemeContext.js';
7
+ export { EventProvider, useEmit, useIsManaged, useToasterId, type EmittedEvent } from './contexts/EventContext.js';
8
+ export { ShortcutConfigProvider, useShortcutConfig } from './contexts/ShortcutConfigContext.js';
9
+ export { ElementEditorConfigProvider, useElementEditorConfig, useUnitsOverride, resolveConfig, DEFAULT_LAYOUT, withLayout } from './contexts/ElementEditorConfigContext.js';
10
+ export type { ElementEditorConfig, ResolvedConfig, DrawTool, ToolbarPosition, LayoutSlot, LayoutControl, RasterBasemap, LayoutGroup, LayoutEntry, LayoutSlotConfig, LayoutConfig, ResolvedLayout, MapSlot, StatusSlot, MapGroup, StatusGroup, MapEntry, StatusEntry, MapSlotConfig, StatusSlotConfig, LayoutPatch, SlotFor, UnitsOverride } from './contexts/ElementEditorConfigContext.js';
11
+ export type { ElementEditorEvent, ElementEditorErrorHandler } from './types/events.js';
12
+ export { ElementEditorError } from '@element-editor/core';
13
+ export type { ErrorCode, ErrorSource } from '@element-editor/core';
14
+ export { default as LayersPanel } from './components/sidebar/LayersPanel.js';
15
+ export { default as FeatureSidePanel } from './components/sidebar/FeatureSidePanel.js';
16
+ export { default as FeatureRow, featureLabel } from './components/sidebar/FeatureRow.js';
17
+ export { default as GroupRow } from './components/sidebar/GroupRow.js';
18
+ export { default as PartSubRow } from './components/sidebar/PartSubRow.js';
19
+ export { FeatureList, SchemaEditor, DataTable } from './components/lazyParts.js';
20
+ export declare const GeoJSONModal: typeof import('./components/sidebar/GeoJSONModal.js').default & {
21
+ preload: () => Promise<unknown>;
22
+ };
23
+ export { GeoJSONDockPlaceholder } from './components/sidebar/codeDock.js';
24
+ export declare const SchemaModal: typeof import('./components/sidebar/SchemaModal.js').default & {
25
+ preload: () => Promise<unknown>;
26
+ };
27
+ export declare const FeatureEditModal: typeof import('./components/sidebar/FeatureEditModal.js').default & {
28
+ preload: () => Promise<unknown>;
29
+ };
30
+ export declare const DataTablePanel: typeof import('./components/DataTablePanel.js').default & {
31
+ preload: () => Promise<unknown>;
32
+ };
33
+ export declare const SettingsModal: typeof import('./components/dialogs/SettingsModal.js').default & {
34
+ preload: () => Promise<unknown>;
35
+ };
36
+ export declare const ShortcutsModal: typeof import('./components/ShortcutsModal.js').ShortcutsModal & {
37
+ preload: () => Promise<unknown>;
38
+ };
39
+ export { preloadEditorPanelsWhenIdle } from './utils/lazyWithPreload.js';
40
+ export { default as FloatingToolbar } from './components/FloatingToolbar.js';
41
+ export { default as EditingToolbar } from './components/EditingToolbar.js';
42
+ export { VertexSelectionBar } from './components/VertexSelectionBar.js';
43
+ export { FeatureMapContextMenu } from './components/FeatureMapContextMenu.js';
44
+ export type { FeatureContextMenuData } from './components/FeatureMapContextMenu.js';
45
+ export { default as UndoRedoToolbar } from './components/UndoRedoToolbar.js';
46
+ export { UndoButton, RedoButton, ControlGroup } from './components/UndoRedoToolbar.js';
47
+ export { default as ActiveDrawingToolbar } from './components/ActiveDrawingToolbar.js';
48
+ export { default as FitBoundsButton } from './components/FitBoundsButton.js';
49
+ export { default as ZoomIndicator } from './components/ZoomIndicator.js';
50
+ export { default as LocateButton } from './components/LocateButton.js';
51
+ export { default as ReadonlyBanner } from './components/ReadonlyBanner.js';
52
+ export declare const BooleanOperations: typeof import('./components/BooleanOperations.js').default & {
53
+ preload: () => Promise<unknown>;
54
+ };
55
+ export { default as SimplifyPanel } from './components/SimplifyPanel.js';
56
+ export { default as SmoothPanel } from './components/SmoothPanel.js';
57
+ export { default as BufferPanel } from './components/BufferPanel.js';
58
+ export { Button } from './components/ui/Button.js';
59
+ export { ContextMenu, isContextMenuOpen, CONTEXT_MENU_MARKER_ATTR } from './components/ui/ContextMenu.js';
60
+ export { Input, Textarea, SelectInput } from './components/ui/Input.js';
61
+ export { Kbd, KbdDark, KbdInvert } from './components/ui/Kbd.js';
62
+ export { SearchDropdown } from './components/ui/SearchDropdown.js';
63
+ export type { SearchDropdownHandle } from './components/ui/SearchDropdown.js';
64
+ export { ToolButton } from './components/ui/ToolButton.js';
65
+ export { IconButton } from './components/ui/IconButton.js';
66
+ export type { IconButtonSize } from './components/ui/IconButton.js';
67
+ export { BasemapPicker } from './components/BasemapPicker.js';
68
+ export type { BasemapPickerOption, BasemapPickerProps } from './components/BasemapPicker.js';
69
+ export { Tooltip } from './components/ui/Tooltip.js';
70
+ export type { TooltipSide } from './components/ui/Tooltip.js';
71
+ export { ElementToaster } from './components/ui/ElementToaster.js';
72
+ export { EditToolbarBtn, ToolbarDivider } from './components/ui/EditToolbarBtn.js';
73
+ export { useKeyboardShortcuts, useIsEventForEditor } from './hooks/useKeyboardShortcuts.js';
74
+ export { useDataChangeSubscription } from './hooks/useDataChangeSubscription.js';
75
+ export { useNominatim } from './hooks/useNominatim.js';
76
+ export type { NominatimResult } from './hooks/useNominatim.js';
77
+ export { useAccentPalette } from './hooks/useAccentPalette.js';
78
+ export { useAccentStyle, useApplyAccentToRoot, accentStyle } from './hooks/useAccentStyle.js';
79
+ export { useGeoJSONDrop } from './hooks/useGeoJSONDrop.js';
80
+ export type { UseGeoJSONDropOptions, UseGeoJSONDropReturn, GeoJSONDropError } from './hooks/useGeoJSONDrop.js';
81
+ export { useGeoJSONExport } from './hooks/useGeoJSONExport.js';
82
+ export type { UseGeoJSONExportOptions, UseGeoJSONExportReturn, GeoJSONExportError } from './hooks/useGeoJSONExport.js';
83
+ export { useAdapterControls } from './hooks/useAdapterControls.js';
84
+ export type { UseAdapterControlsOptions, ElementEditorImperativeAPI, MutationOptions, SetFeatureCollectionOptions, ValidationReport, ImportResult } from './hooks/useAdapterControls.js';
85
+ export { triggerGeoJSONDownload, saveGeoJSONFile } from './utils/download.js';
86
+ export { runGeometryWorkerOperation, disposeGeometryWorker } from './utils/geometryWorkerClient.js';
87
+ export { ElementEditorErrorBoundary } from './components/ElementEditorErrorBoundary.js';
88
+ export { ElementEditorUIProvider } from './components/ElementEditorUIProvider.js';
89
+ export type { ElementEditorUIProviderProps } from './components/ElementEditorUIProvider.js';
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./useAccentStyle-hsGvyHZc.cjs"),n=require("./useAdapterControls-BBObhzVX.cjs"),T=require("react"),a=require("@element-editor/core/internal"),p=require("./useContextMenu-DbxMvb1s.cjs");function l(i,t){const s=[],o=i.nominatim;t.search&&o!==!1&&(o!=null&&o.attribution?s.push(o.attribution):!(o!=null&&o.url)||o.url===n.NOMINATIM_URL?s.push(n.NOMINATIM_ATTRIBUTION):a.warnOnce("network-attribution-nominatim","config.network.nominatim points at another server but sets no `attribution`: give it the provider's credit."));const r=t.route?a.routingAttribution(i.routing):void 0;return r&&s.push(r),s}function c(i){const{routing:t}=e.useElementEditorConfig().network;return i!==void 0&&a.warnOnce("routingApiKey","The `routingApiKey` prop is deprecated: use `config.network.routing.apiKey`."),T.useMemo(()=>t===!1?!1:i&&!(t!=null&&t.apiKey)?{...t,apiKey:i}:t??{},[t,i])}function b(i){const{network:t}=e.useElementEditorConfig(),s=c(i),o=n.useUIStore(u=>u.isToolAvailable("search")),r=n.useUIStore(u=>u.isToolAvailable("route"));return l({...t,routing:s},{search:o,route:r}).join(" | ")}exports.LAYOUT_SLOTS=e.LAYOUT_SLOTS;exports.RootCssVarsContext=e.RootCssVarsContext;exports.RootTokensContext=e.RootTokensContext;exports.THEME_TOKENS=e.THEME_TOKENS;exports.applyRootTokens=e.applyRootTokens;exports.isControlVisible=e.isControlVisible;exports.layoutGaps=e.layoutGaps;exports.readRootTokens=e.readRootTokens;exports.resolveLayout=e.resolveLayout;exports.useRootTokens=e.useRootTokens;exports.visibleLayoutEntries=e.visibleLayoutEntries;exports.networkUnavailableTools=n.networkUnavailableTools;exports.useGeoJSONFileImport=n.useGeoJSONFileImport;exports.useOptionalEmit=n.useOptionalEmit;exports.useContextMenu=p.useContextMenu;exports.serviceAttribution=l;exports.useRouting=c;exports.useServiceAttribution=b;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @element-editor/ui/internal
3
+ *
4
+ * Unstable, no semver guarantees; for @element-editor/* packages only.
5
+ * Plumbing shared with the adapters and `@element-editor/react`'s drop-in shell (layout
6
+ * resolution, service attribution, the context-menu hook). Anything here may change or
7
+ * disappear in any release. Don't import it from application code.
8
+ */
9
+ export { resolveLayout, LAYOUT_SLOTS, isControlVisible, visibleLayoutEntries, layoutGaps } from './contexts/ElementEditorConfigContext.cjs';
10
+ export { useOptionalEmit } from './contexts/EventContext.cjs';
11
+ export { useRouting, useServiceAttribution, serviceAttribution } from './hooks/useServiceAttribution.cjs';
12
+ export { networkUnavailableTools } from './hooks/useAdapterControls.cjs';
13
+ export { useContextMenu } from './hooks/useContextMenu.cjs';
14
+ export { useGeoJSONFileImport } from './hooks/useGeoJSONFileImport.cjs';
15
+ export { RootCssVarsContext } from './hooks/useAccentStyle.cjs';
16
+ export { RootTokensContext, useRootTokens, readRootTokens, applyRootTokens, THEME_TOKENS } from './hooks/useRootTokens.cjs';
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @element-editor/ui/internal
3
+ *
4
+ * Unstable, no semver guarantees; for @element-editor/* packages only.
5
+ * Plumbing shared with the adapters and `@element-editor/react`'s drop-in shell (layout
6
+ * resolution, service attribution, the context-menu hook). Anything here may change or
7
+ * disappear in any release. Don't import it from application code.
8
+ */
9
+ export { resolveLayout, LAYOUT_SLOTS, isControlVisible, visibleLayoutEntries, layoutGaps } from './contexts/ElementEditorConfigContext.js';
10
+ export { useOptionalEmit } from './contexts/EventContext.js';
11
+ export { useRouting, useServiceAttribution, serviceAttribution } from './hooks/useServiceAttribution.js';
12
+ export { networkUnavailableTools } from './hooks/useAdapterControls.js';
13
+ export { useContextMenu } from './hooks/useContextMenu.js';
14
+ export { useGeoJSONFileImport } from './hooks/useGeoJSONFileImport.js';
15
+ export { RootCssVarsContext } from './hooks/useAccentStyle.js';
16
+ export { RootTokensContext, useRootTokens, readRootTokens, applyRootTokens, THEME_TOKENS } from './hooks/useRootTokens.js';
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { u as a } from "./useAccentStyle-CPo2XqAn.js";
3
+ import { L as A, R as I, a as N, T as g, b as x, i as E, l as M, r as w, c as y, d as C, v as L } from "./useAccentStyle-CPo2XqAn.js";
4
+ import { N as l, a as c, u as n } from "./useAdapterControls-DVjkwRZ_.js";
5
+ import { n as U, b as _, c as K } from "./useAdapterControls-DVjkwRZ_.js";
6
+ import { useMemo as p } from "react";
7
+ import { warnOnce as u, routingAttribution as f } from "@element-editor/core/internal";
8
+ import { u as V } from "./useContextMenu-DJ2Cti85.js";
9
+ function m(e, o) {
10
+ const s = [], t = e.nominatim;
11
+ o.search && t !== !1 && (t != null && t.attribution ? s.push(t.attribution) : !(t != null && t.url) || t.url === l ? s.push(c) : u("network-attribution-nominatim", "config.network.nominatim points at another server but sets no `attribution`: give it the provider's credit."));
12
+ const i = o.route ? f(e.routing) : void 0;
13
+ return i && s.push(i), s;
14
+ }
15
+ function T(e) {
16
+ const { routing: o } = a().network;
17
+ return e !== void 0 && u("routingApiKey", "The `routingApiKey` prop is deprecated: use `config.network.routing.apiKey`."), p(() => o === !1 ? !1 : e && !(o != null && o.apiKey) ? { ...o, apiKey: e } : o ?? {}, [o, e]);
18
+ }
19
+ function k(e) {
20
+ const { network: o } = a(), s = T(e), t = n((r) => r.isToolAvailable("search")), i = n((r) => r.isToolAvailable("route"));
21
+ return m({ ...o, routing: s }, { search: t, route: i }).join(" | ");
22
+ }
23
+ export {
24
+ A as LAYOUT_SLOTS,
25
+ I as RootCssVarsContext,
26
+ N as RootTokensContext,
27
+ g as THEME_TOKENS,
28
+ x as applyRootTokens,
29
+ E as isControlVisible,
30
+ M as layoutGaps,
31
+ U as networkUnavailableTools,
32
+ w as readRootTokens,
33
+ y as resolveLayout,
34
+ m as serviceAttribution,
35
+ V as useContextMenu,
36
+ _ as useGeoJSONFileImport,
37
+ K as useOptionalEmit,
38
+ C as useRootTokens,
39
+ T as useRouting,
40
+ k as useServiceAttribution,
41
+ L as visibleLayoutEntries
42
+ };
@@ -0,0 +1 @@
1
+ "use client";"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./EditToolbarBtn-Ch9HCLHq.cjs");exports.Button=t.Button;exports.ContextMenu=t.ContextMenu;exports.EditToolbarBtn=t.EditToolbarBtn;exports.Input=t.Input;exports.Kbd=t.Kbd;exports.KbdDark=t.KbdDark;exports.KbdInvert=t.KbdInvert;exports.SearchDropdown=t.SearchDropdown;exports.SelectInput=t.SelectInput;exports.Textarea=t.Textarea;exports.ToolButton=t.ToolButton;exports.ToolbarDivider=t.ToolbarDivider;exports.Tooltip=t.Tooltip;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @element-editor/ui/primitives
3
+ *
4
+ * Lightweight base UI components with no map or store dependencies.
5
+ * Use this entry point when building custom layouts with adapter packages.
6
+ *
7
+ * @example
8
+ * import { Button, Tooltip, Input } from '@element-editor/ui/primitives'
9
+ */
10
+ export { Button } from './components/ui/Button.cjs';
11
+ export type { ButtonVariant, ButtonSize } from './components/ui/Button.cjs';
12
+ export { ContextMenu } from './components/ui/ContextMenu.cjs';
13
+ export { Input, Textarea, SelectInput } from './components/ui/Input.cjs';
14
+ export { Kbd, KbdDark, KbdInvert } from './components/ui/Kbd.cjs';
15
+ export { SearchDropdown } from './components/ui/SearchDropdown.cjs';
16
+ export type { SearchDropdownHandle } from './components/ui/SearchDropdown.cjs';
17
+ export { ToolButton } from './components/ui/ToolButton.cjs';
18
+ export { Tooltip } from './components/ui/Tooltip.cjs';
19
+ export { EditToolbarBtn, ToolbarDivider } from './components/ui/EditToolbarBtn.cjs';