@element-editor/ui 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/AGENTS.md +1 -1
  2. package/dist/{BooleanOperations-oF0WybQP.js → BooleanOperations-CUQDHcha.js} +2 -2
  3. package/dist/{BooleanOperations-WXcmW9Vy.cjs → BooleanOperations-DrQS-3mJ.cjs} +1 -1
  4. package/dist/{DataTable-CNfB01y2.cjs → DataTable-BPtIbZh4.cjs} +1 -1
  5. package/dist/{DataTable-DNmjUwka.js → DataTable-Ce5P1HaO.js} +4 -4
  6. package/dist/{DataTablePanel-rWdaQubk.js → DataTablePanel-DqS1lhWv.js} +2 -2
  7. package/dist/{DataTablePanel-BknCxC1K.cjs → DataTablePanel-PH5qtwrD.cjs} +1 -1
  8. package/dist/EditToolbarBtn-Ch9HCLHq.cjs +3 -0
  9. package/dist/{EditToolbarBtn-SZIsnIn3.js → EditToolbarBtn-SR4xHd8G.js} +39 -39
  10. package/dist/{FeatureEditModal-CM6BObUO.cjs → FeatureEditModal-BNil19oc.cjs} +1 -1
  11. package/dist/{FeatureEditModal-BF-fGhVD.js → FeatureEditModal-DvdBiMck.js} +2 -2
  12. package/dist/{FeatureList-CQb2kTrV.js → FeatureList-DJTd3gEU.js} +2 -2
  13. package/dist/{FeatureList-Csr-anLA.cjs → FeatureList-F3BgjXro.cjs} +1 -1
  14. package/dist/{FeatureRowContextMenu-Gwq3OMEA.cjs → FeatureRowContextMenu-Bw9Z6mpN.cjs} +1 -1
  15. package/dist/{FeatureRowContextMenu-BLt7VlUU.js → FeatureRowContextMenu-Dlsk7erC.js} +2 -2
  16. package/dist/{GeoJSONModal-BPFWeaLZ.js → GeoJSONModal-BhHkqLAR.js} +3 -3
  17. package/dist/{GeoJSONModal-iwUcvrg7.cjs → GeoJSONModal-D6JBr9FA.cjs} +1 -1
  18. package/dist/{SchemaEditor-qkoYMg0C.cjs → SchemaEditor-B4L17K1e.cjs} +1 -1
  19. package/dist/{SchemaEditor-BEsKUe2p.js → SchemaEditor-ryoTgaLb.js} +1 -1
  20. package/dist/{SchemaModal-GrtgA7cH.cjs → SchemaModal-5F0HBHGS.cjs} +1 -1
  21. package/dist/{SchemaModal-9nNrgorr.js → SchemaModal-CI5i_Kxh.js} +3 -3
  22. package/dist/{SettingsModal-DTP0Xx_Z.js → SettingsModal-4OuBLPyW.js} +2 -2
  23. package/dist/{SettingsModal-6_qmRyCi.cjs → SettingsModal-au03oFaJ.cjs} +1 -1
  24. package/dist/{ShortcutsModal-CdyQlrqK.cjs → ShortcutsModal-DBE-gSUi.cjs} +1 -1
  25. package/dist/{ShortcutsModal-DwxZu71W.js → ShortcutsModal-jGmjontP.js} +3 -3
  26. package/dist/contexts/ElementEditorConfigContext.d.cts +1 -1
  27. package/dist/contexts/ElementEditorConfigContext.d.ts +1 -1
  28. package/dist/element-editor-ui.cjs +1 -1
  29. package/dist/element-editor-ui.es.js +2 -2
  30. package/dist/index-mfb91TEp.cjs +1 -0
  31. package/dist/{index-CtZterPc.js → index-rT-R0kyV.js} +947 -907
  32. package/dist/primitives.cjs +1 -1
  33. package/dist/primitives.es.js +1 -1
  34. package/dist/{useWindowFocus-D-_yEm_V.cjs → useWindowFocus-CRWNNxOL.cjs} +1 -1
  35. package/dist/{useWindowFocus-DGAWA1au.js → useWindowFocus-CroxgGOo.js} +1 -1
  36. package/package.json +2 -2
  37. package/dist/EditToolbarBtn-dpCmKnzk.cjs +0 -3
  38. package/dist/index-BKdDZ4Y9.cjs +0 -1
package/AGENTS.md CHANGED
@@ -11,7 +11,7 @@ pnpm add @element-editor/ui @element-editor/adapter-maplibre maplibre-gl
11
11
  pnpm add @element-editor/ui @element-editor/adapter-leaflet leaflet react-leaflet # or Leaflet
12
12
  ```
13
13
 
14
- Peers: `react`, `react-dom` `^19.2.0`. This package has no stylesheet of its own: import the adapter's (`@element-editor/adapter-maplibre/style.css` plus `maplibre-gl/dist/maplibre-gl.css`, or `@element-editor/adapter-leaflet/style.css`). Keep all `@element-editor/*` packages on one version.
14
+ Peers: `react`, `react-dom` `^19.2.0`. This package has no stylesheet of its own: import the adapter's (`@element-editor/adapter-maplibre/style.css` plus `maplibre-gl/dist/maplibre-gl.css`, or `@element-editor/adapter-leaflet/style.css`). Keep all `@element-editor/*` packages on one version. On MapLibre GL JS 6 (what `maplibre-gl` installs today) your app must call MapLibre's `setWorkerUrl` before creating the map: see the MapLibre adapter's `AGENTS.md`.
15
15
 
16
16
  ## Entries
17
17
 
@@ -1,11 +1,11 @@
1
1
  import { jsxs as U, jsx as o } from "react/jsx-runtime";
2
2
  import { e as x, f as b, u as w, h as L, i as j, j as z } from "./useAdapterControls-DVjkwRZ_.js";
3
- import { E as u } from "./EditToolbarBtn-SZIsnIn3.js";
3
+ import { E as u } from "./EditToolbarBtn-SR4xHd8G.js";
4
4
  import { Spinner as C, UniteSquare as G, SubtractSquare as $, IntersectSquare as q, ExcludeSquare as F } from "@phosphor-icons/react";
5
5
  import { toast as y } from "sonner";
6
6
  import { ElementEditorError as B } from "@element-editor/core";
7
7
  import { freeGeometry as O } from "@element-editor/core/internal";
8
- import { c as T } from "./index-CtZterPc.js";
8
+ import { c as T } from "./index-rT-R0kyV.js";
9
9
  function Q() {
10
10
  const { dataStore: f } = x(), c = b((e) => e.selectedIds), v = b((e) => e.features), n = w((e) => e.geometryProcessing), h = w((e) => e.setGeometryProcessing), i = L(), P = j(), I = z();
11
11
  if (c.length < 2) return null;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),r=require("./useAdapterControls-BBObhzVX.cjs"),g=require("./EditToolbarBtn-dpCmKnzk.cjs"),l=require("@phosphor-icons/react"),h=require("sonner"),I=require("@element-editor/core"),M=require("@element-editor/core/internal"),U=require("./index-BKdDZ4Y9.cjs");function k(){const{dataStore:b}=r.useGeoStore(),u=r.useDataStore(e=>e.selectedIds),v=r.useDataStore(e=>e.features),i=r.useUIStore(e=>e.geometryProcessing),S=r.useUIStore(e=>e.setGeometryProcessing),a=r.useEmit(),w=r.useIsManaged(),P=r.useToasterId();if(u.length<2)return null;const j=new Map(v.map(e=>[e.id,e])),n=u.flatMap(e=>{const t=j.get(e);return t?[t]:[]}),c=n.every(e=>e.geometry.type==="Polygon"||e.geometry.type==="MultiPolygon"),x=n.every(e=>e.geometry.type==="LineString"||e.geometry.type==="MultiLineString"),y=n.every(e=>e.geometry.type==="Point"||e.geometry.type==="MultiPoint");if(y)return null;function p(e){b.getState().replaceFeatures(u,[{...n[0],id:crypto.randomUUID(),...M.freeGeometry(e)}])}function E(){const e=[];for(const t of n)t.geometry.type==="Point"?e.push(t.geometry.coordinates):t.geometry.type==="MultiPoint"&&e.push(...t.geometry.coordinates);p({type:"MultiPoint",coordinates:e}),a({type:"success",message:"Union completed"})}function q(){const e=[];for(const t of n)t.geometry.type==="LineString"?e.push(t.geometry.coordinates):t.geometry.type==="MultiLineString"&&e.push(...t.geometry.coordinates);p({type:"MultiLineString",coordinates:e}),a({type:"success",message:"Union completed"})}async function d(e){if(e==="union"&&y)return E();if(e==="union"&&x)return q();if(!c){a({type:"warning",message:"These work on areas only. Select just areas and try again."});return}if(i)return;const t=w?void 0:h.toast.loading("Working…",{toasterId:P});S(!0);try{const s=await U.runGeometryWorkerOperation({type:"boolean",op:e,features:n}),m=new Set(b.getState().features.map(f=>f.id));if(!u.every(f=>m.has(f)))throw new Error("a selected shape was removed while it ran");p(s),t!==void 0&&h.toast.dismiss(t),a({type:"success",message:`${e[0].toUpperCase()}${e.slice(1)} completed`})}catch(s){t!==void 0&&h.toast.dismiss(t);const m=s instanceof Error?s.message:void 0;a({type:"error",code:s instanceof I.ElementEditorError?s.code:"geometry",source:"geometry",message:m?`Failed to perform ${e}: ${m}`:`Failed to perform ${e}`,cause:s})}finally{S(!1)}}return o.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:[o.jsx(g.EditToolbarBtn,{label:"Union: join into one shape",onClick:()=>d("union"),disabled:!c&&!x&&!y||i,children:i?o.jsx(l.Spinner,{size:24,className:"animate-spin"}):o.jsx(l.UniteSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Subtract: cut the others out of the first selected",onClick:()=>d("subtract"),disabled:!c||i,children:o.jsx(l.SubtractSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Intersect: keep only the overlap",onClick:()=>d("intersect"),disabled:!c||i,children:o.jsx(l.IntersectSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Exclude: keep only what doesn't overlap",onClick:()=>d("exclude"),disabled:!c||i,children:o.jsx(l.ExcludeSquare,{size:24,weight:"duotone"})})]})}exports.default=k;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),r=require("./useAdapterControls-BBObhzVX.cjs"),g=require("./EditToolbarBtn-Ch9HCLHq.cjs"),l=require("@phosphor-icons/react"),h=require("sonner"),I=require("@element-editor/core"),M=require("@element-editor/core/internal"),U=require("./index-mfb91TEp.cjs");function k(){const{dataStore:b}=r.useGeoStore(),u=r.useDataStore(e=>e.selectedIds),v=r.useDataStore(e=>e.features),i=r.useUIStore(e=>e.geometryProcessing),S=r.useUIStore(e=>e.setGeometryProcessing),a=r.useEmit(),w=r.useIsManaged(),P=r.useToasterId();if(u.length<2)return null;const j=new Map(v.map(e=>[e.id,e])),n=u.flatMap(e=>{const t=j.get(e);return t?[t]:[]}),c=n.every(e=>e.geometry.type==="Polygon"||e.geometry.type==="MultiPolygon"),x=n.every(e=>e.geometry.type==="LineString"||e.geometry.type==="MultiLineString"),y=n.every(e=>e.geometry.type==="Point"||e.geometry.type==="MultiPoint");if(y)return null;function p(e){b.getState().replaceFeatures(u,[{...n[0],id:crypto.randomUUID(),...M.freeGeometry(e)}])}function E(){const e=[];for(const t of n)t.geometry.type==="Point"?e.push(t.geometry.coordinates):t.geometry.type==="MultiPoint"&&e.push(...t.geometry.coordinates);p({type:"MultiPoint",coordinates:e}),a({type:"success",message:"Union completed"})}function q(){const e=[];for(const t of n)t.geometry.type==="LineString"?e.push(t.geometry.coordinates):t.geometry.type==="MultiLineString"&&e.push(...t.geometry.coordinates);p({type:"MultiLineString",coordinates:e}),a({type:"success",message:"Union completed"})}async function d(e){if(e==="union"&&y)return E();if(e==="union"&&x)return q();if(!c){a({type:"warning",message:"These work on areas only. Select just areas and try again."});return}if(i)return;const t=w?void 0:h.toast.loading("Working…",{toasterId:P});S(!0);try{const s=await U.runGeometryWorkerOperation({type:"boolean",op:e,features:n}),m=new Set(b.getState().features.map(f=>f.id));if(!u.every(f=>m.has(f)))throw new Error("a selected shape was removed while it ran");p(s),t!==void 0&&h.toast.dismiss(t),a({type:"success",message:`${e[0].toUpperCase()}${e.slice(1)} completed`})}catch(s){t!==void 0&&h.toast.dismiss(t);const m=s instanceof Error?s.message:void 0;a({type:"error",code:s instanceof I.ElementEditorError?s.code:"geometry",source:"geometry",message:m?`Failed to perform ${e}: ${m}`:`Failed to perform ${e}`,cause:s})}finally{S(!1)}}return o.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:[o.jsx(g.EditToolbarBtn,{label:"Union: join into one shape",onClick:()=>d("union"),disabled:!c&&!x&&!y||i,children:i?o.jsx(l.Spinner,{size:24,className:"animate-spin"}):o.jsx(l.UniteSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Subtract: cut the others out of the first selected",onClick:()=>d("subtract"),disabled:!c||i,children:o.jsx(l.SubtractSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Intersect: keep only the overlap",onClick:()=>d("intersect"),disabled:!c||i,children:o.jsx(l.IntersectSquare,{size:24,weight:"duotone"})}),o.jsx(g.EditToolbarBtn,{label:"Exclude: keep only what doesn't overlap",onClick:()=>d("exclude"),disabled:!c||i,children:o.jsx(l.ExcludeSquare,{size:24,weight:"duotone"})})]})}exports.default=k;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),h=require("react"),X=require("react-data-grid"),S=require("@phosphor-icons/react"),g=require("./useAdapterControls-BBObhzVX.cjs"),ne=require("zustand/react/shallow"),ae=require("@element-editor/core"),oe=require("@element-editor/core/internal"),Y=require("./EditToolbarBtn-dpCmKnzk.cjs"),se=require("./FeatureRowContextMenu-Gwq3OMEA.cjs"),le=require("./useContextMenu-DbxMvb1s.cjs"),k=require("./index-BKdDZ4Y9.cjs"),ie=new Intl.Collator(void 0,{numeric:!0}),ce=new Set(["_id","_type","_size","_schemaId","_schemaName","_lat","_lng"]);function O(a){const u=new Set,c=[];for(const i of a)for(const d of i.fields)u.has(d.key)||(u.add(d.key),c.push(d));return c}function ue(a){const u=i=>`${i} point${i===1?"":"s"}`,c=(i,d)=>`${i} part${i===1?"":"s"} · ${u(d)}`;switch(a.type){case"Point":return"";case"MultiPoint":return u(a.coordinates.length);case"LineString":return u(a.coordinates.length);case"Polygon":return u(a.coordinates[0].length-1);case"MultiLineString":return c(a.coordinates.length,a.coordinates.reduce((i,d)=>i+d.length,0));case"MultiPolygon":return c(a.coordinates.length,a.coordinates.reduce((i,d)=>i+d[0].length-1,0));case"GeometryCollection":return`${a.geometries.length} part${a.geometries.length===1?"":"s"}`;default:return""}}function de({type:a}){return o.jsxs("span",{className:"flex items-center gap-1.5 flex-shrink-0 text-elm-text-secondary",children:[o.jsx("span",{className:"text-(--elm-text-subtle,var(--color-gray-400)) flex-shrink-0",children:o.jsx(k.GeometryTypeIcon,{type:a,size:16})}),o.jsx("span",{className:"text-sm",children:k.geometryTypeLabel(a)})]})}function U({row:a,column:u,onRowChange:c,onClose:i}){return o.jsx("input",{autoFocus:!0,type:"number",step:"any",className:"rdg-text-editor w-full h-full border-0 outline-none px-2 text-sm font-elm-mono bg-transparent text-inherit caret-primary-500",value:String(a[u.key]??""),onChange:d=>c({...a,[u.key]:d.target.value}),onBlur:()=>i(!0)})}function Q({checked:a,label:u,disabled:c,onToggle:i,autoFocus:d}){return o.jsx("span",{className:"flex h-full items-center px-0.5",children:o.jsx("button",{type:"button",role:"switch","aria-checked":a,"aria-label":u,tabIndex:-1,autoFocus:d,disabled:c,onClick:f=>{f.stopPropagation(),i()},className:`relative inline-flex h-4 w-7 flex-shrink-0 items-center rounded-full outline-none disabled:cursor-default enabled:cursor-pointer
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),h=require("react"),X=require("react-data-grid"),S=require("@phosphor-icons/react"),g=require("./useAdapterControls-BBObhzVX.cjs"),ne=require("zustand/react/shallow"),ae=require("@element-editor/core"),oe=require("@element-editor/core/internal"),Y=require("./EditToolbarBtn-Ch9HCLHq.cjs"),se=require("./FeatureRowContextMenu-Bw9Z6mpN.cjs"),le=require("./useContextMenu-DbxMvb1s.cjs"),k=require("./index-mfb91TEp.cjs"),ie=new Intl.Collator(void 0,{numeric:!0}),ce=new Set(["_id","_type","_size","_schemaId","_schemaName","_lat","_lng"]);function O(a){const u=new Set,c=[];for(const i of a)for(const d of i.fields)u.has(d.key)||(u.add(d.key),c.push(d));return c}function ue(a){const u=i=>`${i} point${i===1?"":"s"}`,c=(i,d)=>`${i} part${i===1?"":"s"}, ${u(d)}`;switch(a.type){case"Point":return"";case"MultiPoint":return u(a.coordinates.length);case"LineString":return u(a.coordinates.length);case"Polygon":return u(a.coordinates[0].length-1);case"MultiLineString":return c(a.coordinates.length,a.coordinates.reduce((i,d)=>i+d.length,0));case"MultiPolygon":return c(a.coordinates.length,a.coordinates.reduce((i,d)=>i+d[0].length-1,0));case"GeometryCollection":return`${a.geometries.length} part${a.geometries.length===1?"":"s"}`;default:return""}}function de({type:a}){return o.jsxs("span",{className:"flex items-center gap-1.5 flex-shrink-0 text-elm-text-secondary",children:[o.jsx("span",{className:"text-(--elm-text-subtle,var(--color-gray-400)) flex-shrink-0",children:o.jsx(k.GeometryTypeIcon,{type:a,size:16})}),o.jsx("span",{className:"text-sm",children:k.geometryTypeLabel(a)})]})}function U({row:a,column:u,onRowChange:c,onClose:i}){return o.jsx("input",{autoFocus:!0,type:"number",step:"any",className:"rdg-text-editor w-full h-full border-0 outline-none px-2 text-sm font-elm-mono bg-transparent text-inherit caret-primary-500",value:String(a[u.key]??""),onChange:d=>c({...a,[u.key]:d.target.value}),onBlur:()=>i(!0)})}function Q({checked:a,label:u,disabled:c,onToggle:i,autoFocus:d}){return o.jsx("span",{className:"flex h-full items-center px-0.5",children:o.jsx("button",{type:"button",role:"switch","aria-checked":a,"aria-label":u,tabIndex:-1,autoFocus:d,disabled:c,onClick:f=>{f.stopPropagation(),i()},className:`relative inline-flex h-4 w-7 flex-shrink-0 items-center rounded-full outline-none disabled:cursor-default enabled:cursor-pointer
2
2
  ${a?"bg-primary-500":"bg-elm-border"} ${c?"opacity-50":"opacity-90 enabled:hover:opacity-100"}`,children:o.jsx("span",{"aria-hidden":!0,className:`absolute left-[2px] top-[2px] h-3 w-3 rounded-full border bg-white ${a?"border-white":"border-(--elm-border-strong,var(--color-gray-300))"}`,style:{transform:a?"translateX(12px)":void 0}})})})}function J(a){return function({row:c,column:i,onRowChange:d,onClose:f}){const j=String(c[i.key]??"");if(a.type==="boolean"){const y=k.readBooleanValue(c[i.key]);return o.jsx("div",{className:"w-full h-full px-2",onBlur:()=>f(!0),children:o.jsx(Q,{autoFocus:!0,checked:y,label:a.label,onToggle:()=>d({...c,[i.key]:!y})})})}if(a.type==="select"&&a.options)return o.jsxs("div",{className:"relative w-full h-full",children:[o.jsxs("select",{autoFocus:!0,className:"rdg-text-editor w-full h-full border-0 outline-none pl-2 pr-7 text-sm bg-transparent text-inherit appearance-none",value:j,onChange:y=>d({...c,[i.key]:y.target.value}),onBlur:()=>f(!0),children:[o.jsx("option",{value:"",children:"—"}),a.options.map(y=>o.jsx("option",{value:y,children:y},y))]}),o.jsx(S.CaretDown,{size:12,"aria-hidden":!0,className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 opacity-60"})]});const m=a.type==="number"?"number":a.type==="date"?"date":a.type==="url"?"url":"text";return o.jsx("input",{autoFocus:!0,type:m,className:"rdg-text-editor w-full h-full border-0 outline-none px-2 text-sm bg-transparent text-inherit caret-primary-500",value:j,onChange:y=>d({...c,[i.key]:y.target.value}),onBlur:()=>f(!0)})}}function C(a){return o.jsx("span",{className:"block w-0 min-w-full truncate",children:a})}function me({sortDirection:a,priority:u}){if(!a)return null;const c=a==="ASC"?S.ArrowUp:S.ArrowDown;return o.jsxs("span",{className:"flex h-full items-center gap-0.5 pl-1",children:[o.jsx(c,{size:12,className:"shrink-0","aria-hidden":!0}),u!==void 0&&u>1&&o.jsx("span",{className:"text-[10px] leading-none opacity-60",children:u})]})}function pe({schemaFilter:a,focusRowId:u,onFocusRowHandled:c,selectedRows:i,onSelectedRowsChange:d}){const f=g.useDataStore(e=>e.features),j=g.useDataStore(e=>e.groups),m=g.useDataStore(ne.useShallow(e=>e.getVisibleSchemas())),y=g.useDataStore(e=>e.selectFeature),P=g.useDataStore(e=>e.updateFeature),q=g.useDataStore(e=>e.deleteFeature),b=g.useUIStore(e=>e.readonly),I=g.useDataStore(e=>e.selectedIds),{panTo:T,fitBounds:E}=g.useMapController(),$=g.useTheme(),F=h.useRef(null),{dataStore:_}=g.useGeoStore(),L=g.useEmit(),v=le.useContextMenu(),[M,Z]=h.useState([]),N=h.useMemo(()=>{if(a==="all")return O(m);const e=m.find(t=>t.id===a);return e?e.fields:O(m)},[m,a]),K=h.useMemo(()=>{const e={};for(const t of m)e[t.id]=t.name;return e},[m]),A=h.useMemo(()=>{var s;const e=new Map,t=[];for(const l of f){if(!l.groupId){t.push(l);continue}const p=e.get(l.groupId);p?p.push(l):e.set(l.groupId,[l])}const r=[...j.flatMap(l=>e.get(l.id)??[]),...t];if(a==="all")return r;const n=(s=m[0])==null?void 0:s.id;return r.filter(l=>(l.schemaId??n)===a)},[f,j,m,a]),w=h.useMemo(()=>A.map(e=>{var s,l;let t="",r="";if(e.geometry.type==="Point"){const[p,x]=e.geometry.coordinates;t=String(x),r=String(p)}const n=e.schemaId??((s=m[0])==null?void 0:s.id)??"";return{_id:e.id,_type:e.geometry.type,_size:ue(e.geometry),_schemaId:n,_schemaName:K[n]??((l=m[0])==null?void 0:l.name)??"",_lat:t,_lng:r,...e.properties}}),[A,K,m]),z=h.useMemo(()=>new Set(N.filter(e=>e.type==="boolean").map(e=>e.key)),[N]),B=h.useMemo(()=>{if(M.length===0)return w;const e=(t,r)=>z.has(r)?k.readBooleanValue(t[r])?"1":"0":String(t[r]??"");return[...w].sort((t,r)=>{for(const n of M){const s=e(t,n.columnKey),l=e(r,n.columnKey),p=ie.compare(s,l);if(p!==0)return n.direction==="ASC"?p:-p}return 0})},[w,M,z]),V=h.useMemo(()=>w.some(e=>e._type==="Point"),[w]),G=h.useCallback((e,t)=>{var s;if(b)return;const r=_.getState(),n=r.features.find(l=>l.id===e);n&&r.updateFeatures([{id:e,patch:{properties:{...n.properties,[t]:!k.readBooleanValue((s=n.properties)==null?void 0:s[t])}}}])},[_,b]),W=h.useMemo(()=>{const e=[X.SelectColumn,{key:"_type",name:C("Type"),width:150,resizable:!0,sortable:!0,renderCell:({row:t})=>o.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[o.jsx(de,{type:t._type}),t._size&&o.jsx("span",{className:"truncate text-xs text-elm-text-muted",children:t._size})]})}];m.length>1&&e.push({key:"_schemaName",name:C("Schema"),width:100,resizable:!0,sortable:!0,editable:!0,renderCell:({row:t})=>o.jsx("span",{className:"inline-block px-1.5 py-0.5 rounded-elm-chip bg-elm-surface-hover text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300)) text-[10px] font-medium",children:t._schemaName}),renderEditCell:({row:t,onRowChange:r,onClose:n})=>o.jsxs("div",{className:"relative w-full h-full",children:[o.jsx("select",{autoFocus:!0,className:"rdg-text-editor w-full h-full border-0 outline-none pl-2 pr-7 text-sm appearance-none",value:t._schemaId,onChange:s=>{const l=m.find(p=>p.id===s.target.value);l&&r({...t,_schemaId:l.id,_schemaName:l.name})},onBlur:()=>n(!0),children:m.map(s=>o.jsx("option",{value:s.id,children:s.name},s.id))}),o.jsx(S.CaretDown,{size:12,"aria-hidden":!0,className:"pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 opacity-60"})]})}),V&&e.push({key:"_lat",name:C("Lat"),width:110,resizable:!0,sortable:!0,editable:t=>t._type==="Point",renderCell:({row:t})=>o.jsx("span",{className:"font-elm-mono text-xs text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300))",children:t._lat}),renderEditCell:U},{key:"_lng",name:C("Lng"),width:110,resizable:!0,sortable:!0,editable:t=>t._type==="Point",renderCell:({row:t})=>o.jsx("span",{className:"font-elm-mono text-xs text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300))",children:t._lng}),renderEditCell:U});for(const t of N){if(t.type==="boolean"){e.push({key:t.key,name:C(t.label),minWidth:80,resizable:!0,sortable:!0,editable:!0,renderCell:({row:r})=>o.jsx(Q,{checked:k.readBooleanValue(r[t.key]),label:t.label,disabled:b,onToggle:()=>G(r._id,t.key)}),renderEditCell:J(t)});continue}e.push({key:t.key,name:C(t.label),...t.key==="name"&&{width:200},minWidth:80,resizable:!0,sortable:!0,editable:!0,renderEditCell:J(t)})}return e.push({key:"_spacer",name:"",minWidth:0,width:"minmax(0, 1fr)",resizable:!1,sortable:!1,renderCell:()=>null}),e.push({key:"_delete",name:"",width:36,resizable:!1,sortable:!1,renderHeaderCell:()=>i.size>0?o.jsx("div",{className:"w-full h-full flex items-center justify-center",children:o.jsx(Y.Tooltip,{content:`Delete ${i.size} selected`,children:o.jsx("button",{"aria-label":`Delete ${i.size} selected`,onMouseDown:t=>t.stopPropagation(),onClick:t=>{t.stopPropagation();const r=_.getState(),n=i.size;r.setSelection([...i]),r.deleteSelection(),d(new Set),L({type:"features:deleted",count:n,undo:()=>_.getState().undo()})},className:"w-7 h-7 rounded-elm-control flex items-center justify-center text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300)) hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) hover:text-(--elm-text-secondary,var(--color-gray-700)) dark:hover:text-(--elm-text-secondary,var(--color-gray-200)) transition-colors",children:o.jsx(S.Trash,{size:16})})})}):null,renderCell:({row:t})=>o.jsx("div",{className:"w-full h-full flex items-center justify-center",children:o.jsx(Y.Tooltip,{content:"Delete row",children:o.jsx("button",{onMouseDown:r=>r.stopPropagation(),onClick:r=>{r.stopPropagation(),q(t._id)},className:"w-7 h-7 rounded-elm-control flex items-center justify-center text-elm-text hover:bg-(--elm-surface-hover,var(--color-gray-100)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) transition-colors",children:o.jsx(S.Trash,{size:16})})})})}),b?e.filter(t=>t.key!=="_delete").map(t=>({...t,editable:!1})):e},[N,m.length,V,q,i,d,_,L,b,G]);h.useEffect(()=>{if(!u)return;const e=B.findIndex(r=>r._id===u);if(e===-1)return;const t=W.findIndex(r=>r.key==="_lat");t!==-1&&requestAnimationFrame(()=>{var r;(r=F.current)==null||r.selectCell({rowIdx:e,idx:t},{enableEditor:!0}),c==null||c()})},[u]),h.useEffect(()=>{var t;if(I.length===0)return;const e=B.findIndex(r=>r._id===I[0]);e!==-1&&((t=F.current)==null||t.scrollToCell({rowIdx:e}))},[I]);function H(e,{indexes:t}){var p;if(b)return;const r=e[t[0]],n={};for(const[x,D]of Object.entries(r))ce.has(x)||(n[x]=D);const s=f.find(x=>x.id===r._id),l=(s==null?void 0:s.schemaId)??((p=m[0])==null?void 0:p.id)??"";if(r._schemaId!==l){P(r._id,{schemaId:r._schemaId,properties:n});return}if((s==null?void 0:s.geometry.type)==="Point"){const x=parseFloat(r._lat),D=parseFloat(r._lng),[te,re]=s.geometry.coordinates;if(!isNaN(x)&&!isNaN(D)&&(x!==re||D!==te)){_.getState().takeSnapshot(),P(r._id,{geometry:{type:"Point",coordinates:oe.withXY(s.geometry.coordinates,[D,x])},properties:n});return}}P(r._id,{properties:n})}function R({row:e,column:t},r){const n=r.clipboardData.getData("text/plain").split(/\r?\n/)[0].split(" ")[0].trim();if(!n||b)return e;if(t.key==="_schemaName"){const l=m.find(p=>p.name===n||p.id===n);return l?{...e,_schemaId:l.id,_schemaName:l.name}:e}if(t.key==="_lat"||t.key==="_lng")return Number.isFinite(Number(n))?{...e,[t.key]:n}:e;const s=N.find(l=>l.key===t.key);if((s==null?void 0:s.type)==="boolean"){const l=k.parseBooleanText(n);return l===null?e:{...e,[t.key]:l}}return(s==null?void 0:s.type)==="number"?Number.isFinite(Number(n))?{...e,[t.key]:n}:e:(s==null?void 0:s.type)==="select"&&s.options&&!s.options.includes(n)?e:{...e,[t.key]:n}}function ee(e){if(d(e),e.size!==1)return;const t=[...e][0];y(t);const r=f.find(n=>n.id===t);if(r)if(r.geometry.type==="Point"){const[n,s]=r.geometry.coordinates;T==null||T([s,n])}else E==null||E(r.bbox||ae.getGeometryBBox(r.geometry))}return o.jsxs("div",{className:"contents",onMouseDown:e=>{e.detail>=2&&!e.target.closest("input, select, textarea")&&e.preventDefault()},children:[o.jsx(X.DataGrid,{ref:F,columns:W,rows:B,rowKeyGetter:e=>e._id,rowClass:e=>I.includes(e._id)?"elm-row-active":void 0,onRowsChange:H,renderers:{renderSortStatus:me},sortColumns:M,onSortColumnsChange:Z,selectedRows:i,onSelectedRowsChange:ee,onCellPaste:R,onCellKeyDown:({mode:e,row:t,column:r},n)=>{e!=="SELECT"||!z.has(r.key)||n.key===" "&&n.shiftKey||(n.key===" "||n.key==="Enter"?(n.preventGridDefault(),n.preventDefault(),G(t._id,r.key)):n.key.length===1&&!n.ctrlKey&&!n.metaKey&&!n.altKey&&n.preventGridDefault())},onCellDoubleClick:({column:e},t)=>{z.has(e.key)&&t.preventGridDefault()},onCellContextMenu:({row:e},t)=>{const r=f.find(n=>n.id===e._id);r&&(t.preventGridDefault(),t.preventDefault(),v.open(t.clientX,t.clientY,r))},className:$==="dark"?"rdg-dark":"rdg-light",style:{...$==="dark"?{"--rdg-color":"var(--elm-text, #e5e5e5)","--rdg-border-color":"var(--elm-border, #404040)","--rdg-selection-color":"var(--color-primary-400)"}:{"--rdg-color":"var(--elm-text, #000)","--rdg-border-color":"var(--elm-border, #ddd)","--rdg-selection-color":"var(--color-primary-500)"},"--rdg-background-color":"transparent","--rdg-header-background-color":"var(--elm-surface, var(--_elm-surface))","--elm-rdg-sticky-bg":"var(--elm-surface, var(--_elm-surface))",blockSize:"100%","--rdg-row-hover-background-color":"var(--elm-row-hover)","--rdg-row-selected-background-color":"var(--elm-row-checked)","--rdg-row-selected-hover-background-color":"var(--elm-row-checked-hover)"}}),v.state&&o.jsx(se.FeatureRowContextMenu,{x:v.state.x,y:v.state.y,feature:f.find(e=>e.id===v.state.data.id)??v.state.data,onClose:v.close,showGrouping:!1})]})}exports.default=pe;
@@ -6,10 +6,10 @@ import { f as k, u as me, g as pe, d as fe, e as he, h as ye } from "./useAdapte
6
6
  import { useShallow as ge } from "zustand/react/shallow";
7
7
  import { getGeometryBBox as be } from "@element-editor/core";
8
8
  import { withXY as xe } from "@element-editor/core/internal";
9
- import { f as q } from "./EditToolbarBtn-SZIsnIn3.js";
10
- import { F as ke } from "./FeatureRowContextMenu-BLt7VlUU.js";
9
+ import { f as q } from "./EditToolbarBtn-SR4xHd8G.js";
10
+ import { F as ke } from "./FeatureRowContextMenu-Dlsk7erC.js";
11
11
  import { u as ve } from "./useContextMenu-DJ2Cti85.js";
12
- import { f as E, h as _e, j as Ce, k as Ne } from "./index-CtZterPc.js";
12
+ import { f as E, h as _e, j as Ce, k as Ne } from "./index-rT-R0kyV.js";
13
13
  const Se = new Intl.Collator(void 0, { numeric: !0 }), we = /* @__PURE__ */ new Set(["_id", "_type", "_size", "_schemaId", "_schemaName", "_lat", "_lng"]);
14
14
  function O(a) {
15
15
  const c = /* @__PURE__ */ new Set(), d = [];
@@ -19,7 +19,7 @@ function O(a) {
19
19
  return d;
20
20
  }
21
21
  function Ie(a) {
22
- const c = (i) => `${i} point${i === 1 ? "" : "s"}`, d = (i, u) => `${i} part${i === 1 ? "" : "s"} · ${c(u)}`;
22
+ const c = (i) => `${i} point${i === 1 ? "" : "s"}`, d = (i, u) => `${i} part${i === 1 ? "" : "s"}, ${c(u)}`;
23
23
  switch (a.type) {
24
24
  case "Point":
25
25
  return "";
@@ -1,13 +1,13 @@
1
1
  import { jsxs as d, jsx as t, Fragment as re } from "react/jsx-runtime";
2
2
  import { e as oe, u as c, f as W, g as ne } from "./useAdapterControls-DVjkwRZ_.js";
3
- import { s as ae, r as se, p as le, N as ie, D as ce, a as ue } from "./index-CtZterPc.js";
3
+ import { s as ae, r as se, p as le, N as ie, D as ce, a as ue } from "./index-rT-R0kyV.js";
4
4
  import { useState as i, useEffect as I, useRef as v, useCallback as H, Suspense as de, useLayoutEffect as me } from "react";
5
5
  import { clsx as D } from "clsx";
6
6
  import { Plus as fe, ArrowsInSimple as he, ArrowsOutSimple as pe, X as ge } from "@phosphor-icons/react";
7
7
  import { useShallow as be } from "zustand/react/shallow";
8
8
  import { sidebarTakesSpace as ye } from "@element-editor/core/internal";
9
9
  import { u as xe } from "./useAccentStyle-CPo2XqAn.js";
10
- import { f as L, B as ve } from "./EditToolbarBtn-SZIsnIn3.js";
10
+ import { f as L, B as ve } from "./EditToolbarBtn-SR4xHd8G.js";
11
11
  const we = 160, Se = 80;
12
12
  try {
13
13
  CSS.registerProperty({ name: "--elm-table-offset", syntax: "<length>", inherits: !0, initialValue: "0px" });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),o=require("./useAdapterControls-BBObhzVX.cjs"),d=require("./index-BKdDZ4Y9.cjs"),r=require("react"),R=require("clsx"),S=require("@phosphor-icons/react"),Z=require("zustand/react/shallow"),ee=require("@element-editor/core/internal"),te=require("./useAccentStyle-hsGvyHZc.cjs"),E=require("./EditToolbarBtn-dpCmKnzk.cjs"),re=160,se=80;try{CSS.registerProperty({name:"--elm-table-offset",syntax:"<length>",inherits:!0,initialValue:"0px"})}catch{}const M="px-2.5 py-1 rounded-elm-control text-xs font-medium bg-elm-surface text-elm-text ring-1 ring-primary-400 outline-none";function ne({initialValue:a,onCommit:m,onCancel:v}){const[s,f]=r.useState(a),y=r.useRef(null),[h,w]=r.useState(void 0);return r.useLayoutEffect(()=>{const n=y.current;n&&w(n.offsetWidth+4)},[s]),t.jsxs(t.Fragment,{children:[t.jsx("span",{ref:y,"aria-hidden":!0,className:`${M} absolute invisible pointer-events-none whitespace-pre left-[-9999px] top-[-9999px]`,children:s||" "}),t.jsx("input",{autoFocus:!0,value:s,onFocus:n=>n.currentTarget.select(),onChange:n=>f(n.target.value),onBlur:()=>m(s.trim()),onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur(),n.key==="Escape"&&(v(),n.preventDefault())},style:{width:h},className:M})]})}const B=`flex ${d.panelHeaderIconBtn.replace("hover:bg-(--elm-surface-hover,var(--color-gray-100))","hover:bg-(--elm-surface-hover,var(--color-gray-200))")}`;function oe({embedded:a=!1}={}){const{dataStore:m}=o.useGeoStore(),v=te.useElementEditorConfig(),s=o.useUIStore(e=>e.tableOpen),f=o.useUIStore(e=>e.readonly),y=o.useUIStore(e=>e.toggleTable),h=o.useUIStore(e=>e.setTableFullscreen),w=o.useUIStore(ee.sidebarTakesSpace),n=o.useUIStore(e=>e.sidebarWidth),$=o.useUIStore(e=>e.codeDockWidth),V=v.ui.layerList&&w,j=o.useDataStore(e=>e.features.length),F=o.useDataStore(Z.useShallow(e=>e.getVisibleSchemas())),{getCenter:I}=o.useMapController(),[g,W]=r.useState(()=>typeof window>"u"?360:Math.round(window.innerHeight*.42)),[x,L]=r.useState("all"),[i,O]=r.useState(!1);r.useEffect(()=>(h(i),()=>h(!1)),[i,h]);const[_,N]=r.useState(null),[C,G]=r.useState(new Set),[X,T]=r.useState(null),H=r.useRef(!1);(s||a)&&(H.current=!0);const[D,P]=r.useState(!s);r.useEffect(()=>{if(s){P(!1);return}const e=setTimeout(()=>P(!0),200);return()=>clearTimeout(e)},[s]);const u=r.useRef(null),K=r.useCallback(e=>{e.button===0&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),u.current=d.startDragShield("row-resize",e.currentTarget))},[]),Y=r.useCallback(e=>{if(!u.current)return;const c=Math.round(window.innerHeight*se/100),l=Math.min(c,Math.max(re,window.innerHeight-e.clientY));W(l)},[]),A=r.useCallback(()=>{var e;(e=u.current)==null||e.call(u),u.current=null},[]),q=r.useRef(null);r.useEffect(()=>{var l;if(a)return;const e=(l=q.current)==null?void 0:l.closest("[data-elm-theme]");if(!e)return;const c=s?i?e.clientHeight:g:0;return e.style.setProperty("--elm-table-offset",`${c}px`),e.style.transition||requestAnimationFrame(()=>{e.style.transition="--elm-table-offset 200ms ease"}),()=>{e.style.setProperty("--elm-table-offset","0px")}},[a,s,i,g]);const J=a?"absolute inset-0 bg-elm-surface flex flex-col":R.clsx("absolute left-0 z-20 bg-elm-surface border-t border-elm-border/80 flex flex-col transition-[right] duration-200 ease-[ease]",!s&&D&&"invisible"),Q=a?void 0:i?{top:0,bottom:0,right:0,height:"100%"}:{height:g,bottom:`calc(min(var(--elm-table-offset, 0px), ${g}px) - ${g}px)`,right:(V?n:0)+$};return t.jsxs("div",{ref:q,className:J,style:Q,children:[!a&&!i&&t.jsx("div",{className:d.resizeEdgeTop,onPointerDown:K,onPointerMove:Y,onPointerUp:A,onLostPointerCapture:A}),t.jsxs("div",{className:`${d.panelHeaderBar} gap-3 px-4`,children:[!f&&t.jsx(E.Tooltip,{content:"Add new entry",children:t.jsxs(E.Button,{variant:"primary",size:"sm",onClick:()=>{const e=(I==null?void 0:I())??[0,0],{schemas:c,getDefaultSchema:l}=m.getState(),k=x!=="all"&&c.find(b=>b.id===x)?x:l().id,p=c.find(b=>b.id===k)??l(),U={};for(const b of p.fields)U[b.key]="";const z=crypto.randomUUID();m.getState().addFeature({type:"Feature",id:z,schemaId:k,geometry:{type:"Point",coordinates:e},properties:U})&&N(z)},children:[t.jsx(S.Plus,{size:11,weight:"bold"}),"Add new"]})}),t.jsxs("span",{className:"text-xs text-elm-text-muted",children:[j," feature",j!==1?"s":"",C.size>0&&`, ${C.size} selected`]}),F.length>1&&t.jsx("div",{role:"tablist","aria-label":"Filter by schema",className:"ml-1 flex items-center gap-0.5 text-xs",children:[{id:"all",name:"All"},...F].map(e=>{const c=x===e.id,l=e.id==="all";return X===e.id?t.jsx(ne,{initialValue:e.name,onCommit:p=>{p&&p!==e.name&&m.getState().updateSchema(e.id,{name:p}),T(null)},onCancel:()=>T(null)},e.id):t.jsx("button",{type:"button",role:"tab","aria-selected":c,onClick:()=>L(e.id),onDoubleClick:()=>{!l&&!f&&T(e.id)},title:l||f?void 0:"Double-click to rename",className:R.clsx("px-2.5 py-1 rounded-elm-control transition-colors whitespace-nowrap",c?"bg-elm-surface hover:bg-(--elm-surface-hover,var(--color-gray-50)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-800)) text-elm-text font-medium shadow-sm ring-1 ring-(--elm-border,var(--color-gray-200)) dark:ring-(--elm-border,var(--color-gray-700))":"text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300)) hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700))"),children:e.name},e.id)})}),!a&&t.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[t.jsx(E.Tooltip,{content:i?"Exit fullscreen":"Fullscreen",children:t.jsx("button",{type:"button",onClick:()=>O(e=>!e),"aria-label":i?"Exit fullscreen":"Fullscreen",className:B,children:i?t.jsx(S.ArrowsInSimple,{size:16}):t.jsx(S.ArrowsOutSimple,{size:16})})}),t.jsx("button",{type:"button",onClick:y,"aria-label":"Close data table",className:B,children:t.jsx(S.X,{size:16})})]})]}),t.jsx("div",{className:R.clsx("flex-1 min-h-0 overflow-hidden",!a&&!s&&D&&"hidden"),children:j===0?t.jsx(d.NoFeaturesEmptyState,{}):H.current&&t.jsx(r.Suspense,{fallback:t.jsx("div",{className:"absolute inset-0 flex items-center justify-center text-sm text-(--elm-text-subtle,var(--color-gray-400))",children:"Loading grid..."}),children:t.jsx(d.DataTable,{schemaFilter:x,focusRowId:_,onFocusRowHandled:()=>N(null),selectedRows:C,onSelectedRowsChange:G})})})]})}exports.default=oe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),o=require("./useAdapterControls-BBObhzVX.cjs"),d=require("./index-mfb91TEp.cjs"),r=require("react"),R=require("clsx"),S=require("@phosphor-icons/react"),Z=require("zustand/react/shallow"),ee=require("@element-editor/core/internal"),te=require("./useAccentStyle-hsGvyHZc.cjs"),E=require("./EditToolbarBtn-Ch9HCLHq.cjs"),re=160,se=80;try{CSS.registerProperty({name:"--elm-table-offset",syntax:"<length>",inherits:!0,initialValue:"0px"})}catch{}const M="px-2.5 py-1 rounded-elm-control text-xs font-medium bg-elm-surface text-elm-text ring-1 ring-primary-400 outline-none";function ne({initialValue:a,onCommit:m,onCancel:v}){const[s,f]=r.useState(a),y=r.useRef(null),[h,w]=r.useState(void 0);return r.useLayoutEffect(()=>{const n=y.current;n&&w(n.offsetWidth+4)},[s]),t.jsxs(t.Fragment,{children:[t.jsx("span",{ref:y,"aria-hidden":!0,className:`${M} absolute invisible pointer-events-none whitespace-pre left-[-9999px] top-[-9999px]`,children:s||" "}),t.jsx("input",{autoFocus:!0,value:s,onFocus:n=>n.currentTarget.select(),onChange:n=>f(n.target.value),onBlur:()=>m(s.trim()),onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur(),n.key==="Escape"&&(v(),n.preventDefault())},style:{width:h},className:M})]})}const B=`flex ${d.panelHeaderIconBtn.replace("hover:bg-(--elm-surface-hover,var(--color-gray-100))","hover:bg-(--elm-surface-hover,var(--color-gray-200))")}`;function oe({embedded:a=!1}={}){const{dataStore:m}=o.useGeoStore(),v=te.useElementEditorConfig(),s=o.useUIStore(e=>e.tableOpen),f=o.useUIStore(e=>e.readonly),y=o.useUIStore(e=>e.toggleTable),h=o.useUIStore(e=>e.setTableFullscreen),w=o.useUIStore(ee.sidebarTakesSpace),n=o.useUIStore(e=>e.sidebarWidth),$=o.useUIStore(e=>e.codeDockWidth),V=v.ui.layerList&&w,j=o.useDataStore(e=>e.features.length),F=o.useDataStore(Z.useShallow(e=>e.getVisibleSchemas())),{getCenter:I}=o.useMapController(),[g,W]=r.useState(()=>typeof window>"u"?360:Math.round(window.innerHeight*.42)),[x,L]=r.useState("all"),[i,O]=r.useState(!1);r.useEffect(()=>(h(i),()=>h(!1)),[i,h]);const[_,N]=r.useState(null),[C,G]=r.useState(new Set),[X,T]=r.useState(null),H=r.useRef(!1);(s||a)&&(H.current=!0);const[D,P]=r.useState(!s);r.useEffect(()=>{if(s){P(!1);return}const e=setTimeout(()=>P(!0),200);return()=>clearTimeout(e)},[s]);const u=r.useRef(null),K=r.useCallback(e=>{e.button===0&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),u.current=d.startDragShield("row-resize",e.currentTarget))},[]),Y=r.useCallback(e=>{if(!u.current)return;const c=Math.round(window.innerHeight*se/100),l=Math.min(c,Math.max(re,window.innerHeight-e.clientY));W(l)},[]),A=r.useCallback(()=>{var e;(e=u.current)==null||e.call(u),u.current=null},[]),q=r.useRef(null);r.useEffect(()=>{var l;if(a)return;const e=(l=q.current)==null?void 0:l.closest("[data-elm-theme]");if(!e)return;const c=s?i?e.clientHeight:g:0;return e.style.setProperty("--elm-table-offset",`${c}px`),e.style.transition||requestAnimationFrame(()=>{e.style.transition="--elm-table-offset 200ms ease"}),()=>{e.style.setProperty("--elm-table-offset","0px")}},[a,s,i,g]);const J=a?"absolute inset-0 bg-elm-surface flex flex-col":R.clsx("absolute left-0 z-20 bg-elm-surface border-t border-elm-border/80 flex flex-col transition-[right] duration-200 ease-[ease]",!s&&D&&"invisible"),Q=a?void 0:i?{top:0,bottom:0,right:0,height:"100%"}:{height:g,bottom:`calc(min(var(--elm-table-offset, 0px), ${g}px) - ${g}px)`,right:(V?n:0)+$};return t.jsxs("div",{ref:q,className:J,style:Q,children:[!a&&!i&&t.jsx("div",{className:d.resizeEdgeTop,onPointerDown:K,onPointerMove:Y,onPointerUp:A,onLostPointerCapture:A}),t.jsxs("div",{className:`${d.panelHeaderBar} gap-3 px-4`,children:[!f&&t.jsx(E.Tooltip,{content:"Add new entry",children:t.jsxs(E.Button,{variant:"primary",size:"sm",onClick:()=>{const e=(I==null?void 0:I())??[0,0],{schemas:c,getDefaultSchema:l}=m.getState(),k=x!=="all"&&c.find(b=>b.id===x)?x:l().id,p=c.find(b=>b.id===k)??l(),U={};for(const b of p.fields)U[b.key]="";const z=crypto.randomUUID();m.getState().addFeature({type:"Feature",id:z,schemaId:k,geometry:{type:"Point",coordinates:e},properties:U})&&N(z)},children:[t.jsx(S.Plus,{size:11,weight:"bold"}),"Add new"]})}),t.jsxs("span",{className:"text-xs text-elm-text-muted",children:[j," feature",j!==1?"s":"",C.size>0&&`, ${C.size} selected`]}),F.length>1&&t.jsx("div",{role:"tablist","aria-label":"Filter by schema",className:"ml-1 flex items-center gap-0.5 text-xs",children:[{id:"all",name:"All"},...F].map(e=>{const c=x===e.id,l=e.id==="all";return X===e.id?t.jsx(ne,{initialValue:e.name,onCommit:p=>{p&&p!==e.name&&m.getState().updateSchema(e.id,{name:p}),T(null)},onCancel:()=>T(null)},e.id):t.jsx("button",{type:"button",role:"tab","aria-selected":c,onClick:()=>L(e.id),onDoubleClick:()=>{!l&&!f&&T(e.id)},title:l||f?void 0:"Double-click to rename",className:R.clsx("px-2.5 py-1 rounded-elm-control transition-colors whitespace-nowrap",c?"bg-elm-surface hover:bg-(--elm-surface-hover,var(--color-gray-50)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-800)) text-elm-text font-medium shadow-sm ring-1 ring-(--elm-border,var(--color-gray-200)) dark:ring-(--elm-border,var(--color-gray-700))":"text-(--elm-text-secondary,var(--color-gray-600)) dark:text-(--elm-text-secondary,var(--color-gray-300)) hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700))"),children:e.name},e.id)})}),!a&&t.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[t.jsx(E.Tooltip,{content:i?"Exit fullscreen":"Fullscreen",children:t.jsx("button",{type:"button",onClick:()=>O(e=>!e),"aria-label":i?"Exit fullscreen":"Fullscreen",className:B,children:i?t.jsx(S.ArrowsInSimple,{size:16}):t.jsx(S.ArrowsOutSimple,{size:16})})}),t.jsx("button",{type:"button",onClick:y,"aria-label":"Close data table",className:B,children:t.jsx(S.X,{size:16})})]})]}),t.jsx("div",{className:R.clsx("flex-1 min-h-0 overflow-hidden",!a&&!s&&D&&"hidden"),children:j===0?t.jsx(d.NoFeaturesEmptyState,{}):H.current&&t.jsx(r.Suspense,{fallback:t.jsx("div",{className:"absolute inset-0 flex items-center justify-center text-sm text-(--elm-text-subtle,var(--color-gray-400))",children:"Loading grid..."}),children:t.jsx(d.DataTable,{schemaFilter:x,focusRowId:_,onFocusRowHandled:()=>N(null),selectedRows:C,onSelectedRowsChange:G})})})]})}exports.default=oe;
@@ -0,0 +1,3 @@
1
+ "use strict";const e=require("react/jsx-runtime"),i=require("react"),L=require("react-dom"),R=require("clsx"),D=require("./useAccentStyle-hsGvyHZc.cjs"),A=require("@phosphor-icons/react"),K="data-elm-context-menu";function F(){return document.querySelector(`[${K}]`)!==null}function W({x:t,y:o,items:n,onClose:a}){const c=i.useRef(null),[f,g]=i.useState({left:t,top:o}),s=i.useRef(null),[v,l]=i.useState(!1),y=D.useAccentStyle();return i.useLayoutEffect(()=>{var r,b;l(((b=(r=s.current)==null?void 0:r.closest("[data-elm-theme]"))==null?void 0:b.getAttribute("data-elm-theme"))==="dark")},[]),i.useLayoutEffect(()=>{const r=c.current;if(!r)return;const{width:b,height:x}=r.getBoundingClientRect();g({left:t+b>window.innerWidth?t-b:t,top:o+x>window.innerHeight?o-x:o})},[t,o]),i.useEffect(()=>{function r(x){c.current&&!c.current.contains(x.target)&&a()}function b(x){x.key==="Escape"&&(x.stopImmediatePropagation(),x.preventDefault(),a())}return document.addEventListener("mousedown",r),document.addEventListener("keydown",b,{capture:!0}),()=>{document.removeEventListener("mousedown",r),document.removeEventListener("keydown",b,{capture:!0})}},[a]),e.jsxs(e.Fragment,{children:[e.jsx("span",{ref:s,hidden:!0}),L.createPortal(e.jsx("div",{ref:c,"data-elm-portal":!0,"data-elm-theme":v?"dark":"light",onMouseDown:r=>r.stopPropagation(),[K]:"",style:{...y,position:"fixed",left:f.left,top:f.top,zIndex:9999},className:R.clsx("elm-kbd-on-surface bg-elm-surface/95 backdrop-blur-md text-(--elm-text-secondary,var(--color-gray-700)) dark:text-(--elm-text-secondary,var(--color-gray-200)) rounded-elm shadow-elm py-1.5 min-w-[180px] border border-elm-border/80 select-none",!v&&"elm-tooltip-light"),children:n.map((r,b)=>"separator"in r?e.jsx("div",{className:"my-1.5 border-t border-elm-border"},b):e.jsxs("button",{onClick:x=>{x.stopPropagation(),r.onClick(),a()},disabled:r.disabled,className:R.clsx("w-full text-left px-3 py-2 text-sm flex items-center gap-2.5",r.disabled?"opacity-40 cursor-not-allowed":"hover:bg-elm-surface-hover hover:text-(--elm-text,var(--color-gray-900)) dark:hover:text-(--elm-text,var(--color-gray-50))"),children:[r.icon&&e.jsx("span",{className:"flex-shrink-0 opacity-70",children:r.icon}),e.jsx("span",{className:"flex-1 truncate",children:r.label}),r.shortcut&&e.jsx("span",{className:"flex-shrink-0 ml-4 opacity-80",children:r.shortcut})]},b))}),document.body)]})}const z="w-full h-9 px-2.5 py-1.5 text-sm border rounded-elm-control focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring focus:border-transparent bg-elm-surface-raised text-(--elm-text,var(--color-gray-900)) dark:text-(--elm-text,var(--color-gray-100)) placeholder:text-(--elm-text-subtle,var(--color-gray-400)) dark:placeholder:text-(--elm-text-subtle,var(--color-gray-600))";function O({error:t,className:o,...n}){return e.jsx("input",{autoComplete:"off",className:R.clsx(z,t?"border-rose-400":"border-(--elm-border-strong,var(--color-gray-300))",o),...n})}function U({error:t,className:o,...n}){return e.jsx("textarea",{autoComplete:"off",className:R.clsx(z,"resize-none h-auto",t?"border-rose-400":"border-(--elm-border-strong,var(--color-gray-300))",o),...n})}function I({error:t,className:o,children:n,...a}){return e.jsxs("div",{className:"relative w-full",children:[e.jsx("select",{className:R.clsx(z,"appearance-none pr-8",t?"border-rose-400":"border-(--elm-border-strong,var(--color-gray-300))",o),...a,children:n}),e.jsx(A.CaretDown,{size:14,"aria-hidden":!0,className:"pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-elm-text-muted"})]})}const G={primary:"bg-primary-500 text-white hover:bg-primary-600 disabled:hover:bg-primary-500",secondary:"bg-elm-surface-hover text-elm-text-secondary hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) disabled:hover:bg-elm-surface-hover",ghost:"text-elm-text-muted hover:bg-elm-surface-hover hover:text-(--elm-text-secondary,var(--color-gray-700)) dark:hover:text-(--elm-text-secondary,var(--color-gray-300)) disabled:hover:bg-transparent",success:"bg-green-500 text-white hover:bg-green-600 disabled:hover:bg-green-500",emerald:"bg-emerald-500 text-white hover:bg-emerald-600 disabled:hover:bg-emerald-500",warning:"bg-amber-500 text-white hover:bg-amber-600 disabled:hover:bg-amber-500",dashed:"text-primary-500 hover:text-primary-700 hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-black)_5%,transparent)) dark:hover:bg-(--elm-control-hover,color-mix(in_oklab,var(--color-white)_5%,transparent)) disabled:hover:bg-transparent border border-dashed border-primary-300 hover:border-primary-500 dark:text-primary-400 dark:border-primary-700 dark:hover:border-primary-500"},V={sm:"px-2 py-1 text-xs rounded-elm-card",md:"px-3 py-1.5 text-sm rounded-elm-control",icon:"w-7 h-7 rounded-elm-card","icon-sm":"w-6 h-6 rounded-elm-chip"},$=i.forwardRef(({variant:t="secondary",size:o="md",className:n,children:a,...c},f)=>e.jsx("button",{ref:f,className:R.clsx("transition-colors flex items-center justify-center gap-1.5","active:scale-[0.95] disabled:opacity-40 disabled:cursor-not-allowed disabled:active:scale-100",G[t],V[o],n),...c,children:a}));$.displayName="Button";function X({children:t}){return e.jsx("kbd",{className:"inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 text-[11px] font-medium font-elm rounded-elm-chip border border-elm-border-strong bg-(--elm-surface-hover,var(--color-gray-100)) dark:bg-(--elm-surface-hover,var(--color-gray-700)) text-elm-text-muted shadow-[0_1px_0_0_rgba(0,0,0,0.15)] dark:shadow-[0_1px_0_0_rgba(0,0,0,0.4)]",children:t})}function q({children:t}){return e.jsx("kbd",{className:"inline-flex items-center justify-center min-w-[1.25rem] h-4 px-1 text-[10px] font-medium font-elm rounded-elm-chip border border-(--_elm-kbd-border,var(--color-neutral-600)) bg-(--_elm-kbd-bg,var(--color-neutral-700)) text-(--_elm-kbd-text,var(--color-neutral-300)) in-[.elm-tooltip-light]:border-(--_elm-kbd-border,var(--color-neutral-300)) in-[.elm-tooltip-light]:bg-(--_elm-kbd-bg,var(--color-neutral-100)) in-[.elm-tooltip-light]:text-(--_elm-kbd-text,var(--color-neutral-600)) in-[.elm-tooltip-light]:shadow-[0_1px_0_0_rgba(0,0,0,0.12)] shadow-[0_1px_0_0_rgba(0,0,0,0.3)] leading-none",children:t})}function J({children:t}){return e.jsx("kbd",{className:"inline-flex items-center justify-center min-w-[1.25rem] h-5 px-1.5 text-[11px] font-medium font-elm rounded-elm-chip border border-primary-400 bg-primary-500 text-primary-100 shadow-[0_1px_0_0_rgba(0,0,0,0.2)]",children:t})}const w=8,k=8;function Q(t){return t==="top"?"bottom":t==="bottom"?"top":t==="left"?"right":"left"}function T({content:t,shortcut:o,side:n="top",multiline:a=!1,children:c}){const[f,g]=i.useState(!1),[s,v]=i.useState(null),[l,y]=i.useState(null),[r,b]=i.useState(!1),x=D.useAccentStyle(),j=i.useRef(null),d=i.useRef(null),h=i.useRef(null);i.useEffect(()=>()=>{h.current&&clearTimeout(h.current)},[]),i.useLayoutEffect(()=>{if(!f||!d.current||!s)return;const{width:u,height:p}=d.current.getBoundingClientRect(),m=window.innerWidth,E=window.innerHeight,C=S=>S==="top"?s.top-w-p>=k:S==="bottom"?s.bottom+w+p<=E-k:S==="left"?s.left-w-u>=k:s.right+w+u<=m-k,B=(()=>{const S=n==="top"||n==="bottom"?["right","left"]:["bottom","top"];return[n,Q(n),...S]})().find(C)??n;let _=0,N=0;B==="top"?(_=s.cx-u/2,N=s.top-w-p):B==="bottom"?(_=s.cx-u/2,N=s.bottom+w):B==="left"?(_=s.left-w-u,N=s.cy-p/2):(_=s.right+w,N=s.cy-p/2),_=Math.max(k,Math.min(_,m-u-k)),N=Math.max(k,Math.min(N,E-p-k)),y({left:Math.round(_),top:Math.round(N)})},[f,s,n]);function P(){h.current=setTimeout(()=>{var p,m,E,C;const u=(m=((p=j.current)==null?void 0:p.firstElementChild)??j.current)==null?void 0:m.getBoundingClientRect();u&&(y(null),v({left:u.left,top:u.top,right:u.right,bottom:u.bottom,cx:Math.round(u.left+u.width/2),cy:Math.round(u.top+u.height/2)}),b(((C=(E=j.current)==null?void 0:E.closest("[data-elm-theme]"))==null?void 0:C.getAttribute("data-elm-theme"))==="dark"),g(!0))},0)}function M(){h.current&&clearTimeout(h.current),g(!1)}return e.jsxs("div",{ref:j,onMouseEnter:P,onMouseLeave:M,className:"contents",children:[c,f&&L.createPortal(e.jsx("div",{ref:d,"data-elm-portal":!0,"data-elm-theme":r?"dark":"light",className:"fixed z-[9999] pointer-events-none",style:{...x,left:(l==null?void 0:l.left)??0,top:(l==null?void 0:l.top)??0,visibility:l?void 0:"hidden",animation:l?"tooltip-in 100ms ease":void 0},children:e.jsxs("div",{className:`flex items-center gap-1.5 px-2.5 py-1.5 text-xs rounded-elm-card shadow-elm backdrop-blur-sm ${a?"max-w-64 whitespace-normal leading-snug":"whitespace-nowrap"} bg-elm-tooltip/95 text-elm-tooltip-text elm-kbd-on-tooltip ${r?"elm-tooltip-light":""}`,children:[e.jsx("span",{children:t}),o&&e.jsx("span",{className:"flex items-center gap-0.5 opacity-60",children:o})]})}),document.body)]})}function Y(t){return t.split(",").map(c=>c.trim()).filter(Boolean).slice(1).filter(c=>!/^\d+$/.test(c)).slice(-2).join(", ")}const Z=i.forwardRef(function({results:o,loading:n,error:a,onGo:c,onAdd:f,onAddShape:g,activeIndex:s=-1,onHoverIndex:v,onNavigate:l,className:y,layout:r="stack"},b){const x=i.useRef([]),j=i.useRef([]);return i.useImperativeHandle(b,()=>({focusAdd(d){var h;(h=j.current[d])==null||h.focus()}})),i.useEffect(()=>{var d;s>=0&&((d=x.current[s])==null||d.scrollIntoView({block:"nearest"}))},[s]),e.jsxs("div",{className:y,children:[a&&e.jsx("p",{className:"px-3 py-2.5 text-sm text-rose-500",children:a}),!a&&n&&o.length===0&&e.jsx("p",{className:"px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))",children:"Searching…"}),!a&&!n&&o.length===0&&e.jsx("p",{className:"px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))",children:"No results found"}),!a&&o.map((d,h)=>{const P=d.geojson&&d.geojson.type!=="Point",M=e.jsxs(e.Fragment,{children:[e.jsx(T,{content:"Fly to location",children:e.jsxs("button",{onClick:m=>{m.stopPropagation(),c(d)},className:"flex-shrink-0 px-2 py-1 text-xs text-elm-text-muted hover:bg-(--elm-surface-hover,var(--color-gray-200)) dark:hover:bg-(--elm-surface-hover,var(--color-gray-700)) dark:hover:text-(--elm-text-secondary,var(--color-gray-300)) rounded-elm-card flex items-center gap-1 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-1 focus-visible:ring-offset-elm-surface",children:[e.jsx(A.ArrowUpRight,{size:12})," Go"]})}),f&&e.jsx(T,{content:"Add as point",children:e.jsxs("button",{ref:m=>{j.current[h]=m},onClick:m=>{m.stopPropagation(),f(d)},className:"flex-shrink-0 px-2 py-1 text-xs bg-primary-500 text-white hover:bg-primary-600 rounded-elm-card flex items-center gap-1 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-300 focus-visible:ring-offset-1 focus-visible:ring-offset-elm-surface",children:[e.jsx(A.Plus,{size:12})," Add"]})}),P&&g&&e.jsx(T,{content:"Add as boundary shape",children:e.jsxs("button",{onClick:m=>{m.stopPropagation(),g(d)},className:"flex-shrink-0 px-2 py-1 text-xs bg-emerald-500 text-white hover:bg-emerald-600 rounded-elm-card flex items-center gap-1 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-emerald-300 focus-visible:ring-offset-1 focus-visible:ring-offset-elm-surface",children:[e.jsx(A.Polygon,{size:12})," Shape"]})})]}),u=e.jsxs("div",{className:"flex items-center gap-1.5 min-w-0",children:[e.jsx("span",{className:"text-sm text-(--elm-text,var(--color-gray-800)) dark:text-(--elm-text,var(--color-gray-200)) font-medium truncate",children:d.display_name.split(",")[0]}),d.addresstype&&e.jsx("span",{className:"flex-shrink-0 text-[10px] font-medium px-1.5 py-0.5 rounded-full bg-elm-surface-hover text-elm-text-muted capitalize",children:d.addresstype.replace(/_/g," ")})]}),p=e.jsx("span",{className:"block text-xs text-elm-text-subtle mt-0.5 truncate",children:Y(d.display_name)});return e.jsx("div",{ref:m=>{x.current[h]=m},onClick:()=>c(d),onMouseEnter:()=>v==null?void 0:v(h),onKeyDown:m=>{m.key==="ArrowDown"?(m.preventDefault(),l==null||l(1,h)):m.key==="ArrowUp"&&(m.preventDefault(),l==null||l(-1,h))},className:r==="row"?`flex items-center gap-2 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${h===s?"bg-primary-50 dark:bg-white/5":""}`:`flex flex-col gap-1.5 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${h===s?"bg-primary-50 dark:bg-white/5":""}`,children:r==="row"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[u,p]}),e.jsx("div",{className:"flex items-center gap-1 flex-shrink-0",children:M})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-0",children:[u,p]}),e.jsx("div",{className:"flex items-center gap-1 justify-start",children:M})]})},d.place_id)})]})}),H={blue:"bg-primary-500 hover:bg-primary-600 disabled:hover:bg-primary-500 text-white shadow-sm",emerald:"bg-emerald-500 hover:bg-emerald-600 disabled:hover:bg-emerald-500 text-white shadow-sm",amber:"bg-amber-500 hover:bg-amber-600 disabled:hover:bg-amber-500 text-white shadow-sm",violet:"bg-violet-500 hover:bg-violet-600 disabled:hover:bg-violet-500 text-white shadow-sm"};function ee(t,o){return o==="vertical"?t.endsWith("-right")||t.startsWith("right")?"left":"right":t.startsWith("bottom")?"top":"bottom"}function te({active:t,onClick:o,label:n,shortcut:a,shortcutId:c,color:f="blue",tooltipSide:g,disabled:s,children:v}){const l=D.useElementEditorConfig(),y=l.ui.keyboardShortcuts.enabled&&a,r=g??ee(l.toolbar.position,l.toolbar.direction);return e.jsx(T,{content:n,shortcut:y&&e.jsx(q,{children:a}),side:r,children:e.jsx("button",{"aria-label":n,"data-elm-shortcut":c,onClick:b=>{o(),b.currentTarget.blur()},disabled:s,className:R.clsx("p-1 text-sm rounded-elm-control flex items-center justify-center focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring active:scale-[0.95] disabled:cursor-not-allowed disabled:text-elm-text-disabled disabled:active:scale-100",t?H[f]:"text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent"),children:v})})}function re({vertical:t}={}){return t?e.jsx("div",{className:"h-px w-5 bg-elm-border my-0.5 flex-shrink-0"}):e.jsx("div",{className:"w-px h-5 bg-elm-border mx-1 flex-shrink-0"})}function oe({label:t,shortcut:o,shortcutId:n,onClick:a,active:c,disabled:f,tooltipSide:g="top",children:s}){const l=D.useElementEditorConfig().ui.keyboardShortcuts.enabled?o:void 0;return e.jsx(T,{content:t,shortcut:l,side:g,children:e.jsx("button",{"aria-label":t,"aria-pressed":c,"data-elm-shortcut":n,onClick:y=>{a(),y.currentTarget.blur()},disabled:f,className:`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
2
+ active:scale-[0.95] disabled:cursor-not-allowed disabled:text-elm-text-disabled disabled:active:scale-100
3
+ ${c?"bg-primary-50 dark:bg-white/10 hover:bg-primary-100 dark:hover:bg-white/15 disabled:hover:bg-primary-50 dark:disabled:hover:bg-white/10 text-primary-600 dark:text-primary-400":"text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent"}`,children:s})})}function se(){return e.jsx("div",{className:"w-px h-5 bg-elm-border mx-0.5 flex-shrink-0"})}exports.Button=$;exports.CONTEXT_MENU_MARKER_ATTR=K;exports.ContextMenu=W;exports.EditToolbarBtn=oe;exports.Input=O;exports.Kbd=X;exports.KbdDark=q;exports.KbdInvert=J;exports.SearchDropdown=Z;exports.SelectInput=I;exports.Textarea=U;exports.ToolButton=te;exports.ToolbarDivider=se;exports.ToolbarDivider$1=re;exports.Tooltip=T;exports.isContextMenuOpen=F;
@@ -8,11 +8,11 @@ const O = "data-elm-context-menu";
8
8
  function me() {
9
9
  return document.querySelector(`[${O}]`) !== null;
10
10
  }
11
- function ue({ x: t, y: o, items: n, onClose: s }) {
12
- const i = M(null), [h, x] = E({ left: t, top: o }), a = M(null), [v, l] = E(!1), y = F();
11
+ function ue({ x: t, y: o, items: a, onClose: s }) {
12
+ const i = M(null), [h, x] = E({ left: t, top: o }), n = M(null), [v, l] = E(!1), y = F();
13
13
  return $(() => {
14
14
  var r, u;
15
- l(((u = (r = a.current) == null ? void 0 : r.closest("[data-elm-theme]")) == null ? void 0 : u.getAttribute("data-elm-theme")) === "dark");
15
+ l(((u = (r = n.current) == null ? void 0 : r.closest("[data-elm-theme]")) == null ? void 0 : u.getAttribute("data-elm-theme")) === "dark");
16
16
  }, []), $(() => {
17
17
  const r = i.current;
18
18
  if (!r) return;
@@ -32,7 +32,7 @@ function ue({ x: t, y: o, items: n, onClose: s }) {
32
32
  document.removeEventListener("mousedown", r), document.removeEventListener("keydown", u, { capture: !0 });
33
33
  };
34
34
  }, [s]), /* @__PURE__ */ f(j, { children: [
35
- /* @__PURE__ */ e("span", { ref: a, hidden: !0 }),
35
+ /* @__PURE__ */ e("span", { ref: n, hidden: !0 }),
36
36
  U(
37
37
  /* @__PURE__ */ e(
38
38
  "div",
@@ -47,7 +47,7 @@ function ue({ x: t, y: o, items: n, onClose: s }) {
47
47
  "elm-kbd-on-surface bg-elm-surface/95 backdrop-blur-md text-(--elm-text-secondary,var(--color-gray-700)) dark:text-(--elm-text-secondary,var(--color-gray-200)) rounded-elm shadow-elm py-1.5 min-w-[180px] border border-elm-border/80 select-none",
48
48
  !v && "elm-tooltip-light"
49
49
  ),
50
- children: n.map(
50
+ children: a.map(
51
51
  (r, u) => "separator" in r ? /* @__PURE__ */ e("div", { className: "my-1.5 border-t border-elm-border" }, u) : /* @__PURE__ */ f(
52
52
  "button",
53
53
  {
@@ -75,28 +75,28 @@ function ue({ x: t, y: o, items: n, onClose: s }) {
75
75
  )
76
76
  ] });
77
77
  }
78
- const L = "w-full h-9 px-2.5 py-1.5 text-sm border rounded-elm-control focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent bg-elm-surface-raised text-(--elm-text,var(--color-gray-900)) dark:text-(--elm-text,var(--color-gray-100)) placeholder:text-(--elm-text-subtle,var(--color-gray-400)) dark:placeholder:text-(--elm-text-subtle,var(--color-gray-600))";
79
- function be({ error: t, className: o, ...n }) {
78
+ const L = "w-full h-9 px-2.5 py-1.5 text-sm border rounded-elm-control focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring focus:border-transparent bg-elm-surface-raised text-(--elm-text,var(--color-gray-900)) dark:text-(--elm-text,var(--color-gray-100)) placeholder:text-(--elm-text-subtle,var(--color-gray-400)) dark:placeholder:text-(--elm-text-subtle,var(--color-gray-600))";
79
+ function be({ error: t, className: o, ...a }) {
80
80
  return /* @__PURE__ */ e(
81
81
  "input",
82
82
  {
83
83
  autoComplete: "off",
84
84
  className: T(L, t ? "border-rose-400" : "border-(--elm-border-strong,var(--color-gray-300))", o),
85
- ...n
85
+ ...a
86
86
  }
87
87
  );
88
88
  }
89
- function he({ error: t, className: o, ...n }) {
89
+ function he({ error: t, className: o, ...a }) {
90
90
  return /* @__PURE__ */ e(
91
91
  "textarea",
92
92
  {
93
93
  autoComplete: "off",
94
94
  className: T(L, "resize-none h-auto", t ? "border-rose-400" : "border-(--elm-border-strong,var(--color-gray-300))", o),
95
- ...n
95
+ ...a
96
96
  }
97
97
  );
98
98
  }
99
- function pe({ error: t, className: o, children: n, ...s }) {
99
+ function pe({ error: t, className: o, children: a, ...s }) {
100
100
  return (
101
101
  // Native arrow is hidden (appearance-none) — it can't be padded reliably
102
102
  // and sits flush against the right border. Draw our own caret with the
@@ -107,7 +107,7 @@ function pe({ error: t, className: o, children: n, ...s }) {
107
107
  {
108
108
  className: T(L, "appearance-none pr-8", t ? "border-rose-400" : "border-(--elm-border-strong,var(--color-gray-300))", o),
109
109
  ...s,
110
- children: n
110
+ children: a
111
111
  }
112
112
  ),
113
113
  /* @__PURE__ */ e(q, { size: 14, "aria-hidden": !0, className: "pointer-events-none absolute right-2.5 top-1/2 -translate-y-1/2 text-elm-text-muted" })
@@ -127,7 +127,7 @@ const Q = {
127
127
  md: "px-3 py-1.5 text-sm rounded-elm-control",
128
128
  icon: "w-7 h-7 rounded-elm-card",
129
129
  "icon-sm": "w-6 h-6 rounded-elm-chip"
130
- }, Z = W(({ variant: t = "secondary", size: o = "md", className: n, children: s, ...i }, h) => /* @__PURE__ */ e(
130
+ }, Z = W(({ variant: t = "secondary", size: o = "md", className: a, children: s, ...i }, h) => /* @__PURE__ */ e(
131
131
  "button",
132
132
  {
133
133
  ref: h,
@@ -136,7 +136,7 @@ const Q = {
136
136
  "active:scale-[0.95] disabled:opacity-40 disabled:cursor-not-allowed disabled:active:scale-100",
137
137
  Q[t],
138
138
  Y[o],
139
- n
139
+ a
140
140
  ),
141
141
  ...i,
142
142
  children: s
@@ -156,19 +156,19 @@ const w = 8, k = 8;
156
156
  function ee(t) {
157
157
  return t === "top" ? "bottom" : t === "bottom" ? "top" : t === "left" ? "right" : "left";
158
158
  }
159
- function A({ content: t, shortcut: o, side: n = "top", multiline: s = !1, children: i }) {
160
- const [h, x] = E(!1), [a, v] = E(null), [l, y] = E(null), [r, u] = E(!1), p = F(), _ = M(null), c = M(null), b = M(null);
159
+ function A({ content: t, shortcut: o, side: a = "top", multiline: s = !1, children: i }) {
160
+ const [h, x] = E(!1), [n, v] = E(null), [l, y] = E(null), [r, u] = E(!1), p = F(), _ = M(null), c = M(null), b = M(null);
161
161
  K(() => () => {
162
162
  b.current && clearTimeout(b.current);
163
163
  }, []), $(() => {
164
- if (!h || !c.current || !a) return;
165
- const { width: m, height: g } = c.current.getBoundingClientRect(), d = window.innerWidth, R = window.innerHeight, P = (S) => S === "top" ? a.top - w - g >= k : S === "bottom" ? a.bottom + w + g <= R - k : S === "left" ? a.left - w - m >= k : a.right + w + m <= d - k, z = (() => {
166
- const S = n === "top" || n === "bottom" ? ["right", "left"] : ["bottom", "top"];
167
- return [n, ee(n), ...S];
168
- })().find(P) ?? n;
164
+ if (!h || !c.current || !n) return;
165
+ const { width: m, height: g } = c.current.getBoundingClientRect(), d = window.innerWidth, R = window.innerHeight, P = (S) => S === "top" ? n.top - w - g >= k : S === "bottom" ? n.bottom + w + g <= R - k : S === "left" ? n.left - w - m >= k : n.right + w + m <= d - k, z = (() => {
166
+ const S = a === "top" || a === "bottom" ? ["right", "left"] : ["bottom", "top"];
167
+ return [a, ee(a), ...S];
168
+ })().find(P) ?? a;
169
169
  let N = 0, C = 0;
170
- z === "top" ? (N = a.cx - m / 2, C = a.top - w - g) : z === "bottom" ? (N = a.cx - m / 2, C = a.bottom + w) : z === "left" ? (N = a.left - w - m, C = a.cy - g / 2) : (N = a.right + w, C = a.cy - g / 2), N = Math.max(k, Math.min(N, d - m - k)), C = Math.max(k, Math.min(C, R - g - k)), y({ left: Math.round(N), top: Math.round(C) });
171
- }, [h, a, n]);
170
+ z === "top" ? (N = n.cx - m / 2, C = n.top - w - g) : z === "bottom" ? (N = n.cx - m / 2, C = n.bottom + w) : z === "left" ? (N = n.left - w - m, C = n.cy - g / 2) : (N = n.right + w, C = n.cy - g / 2), N = Math.max(k, Math.min(N, d - m - k)), C = Math.max(k, Math.min(C, R - g - k)), y({ left: Math.round(N), top: Math.round(C) });
171
+ }, [h, n, a]);
172
172
  function B() {
173
173
  b.current = setTimeout(() => {
174
174
  var g, d, R, P;
@@ -218,7 +218,7 @@ function A({ content: t, shortcut: o, side: n = "top", multiline: s = !1, childr
218
218
  function te(t) {
219
219
  return t.split(",").map((i) => i.trim()).filter(Boolean).slice(1).filter((i) => !/^\d+$/.test(i)).slice(-2).join(", ");
220
220
  }
221
- const xe = W(function({ results: o, loading: n, error: s, onGo: i, onAdd: h, onAddShape: x, activeIndex: a = -1, onHoverIndex: v, onNavigate: l, className: y, layout: r = "stack" }, u) {
221
+ const xe = W(function({ results: o, loading: a, error: s, onGo: i, onAdd: h, onAddShape: x, activeIndex: n = -1, onHoverIndex: v, onNavigate: l, className: y, layout: r = "stack" }, u) {
222
222
  const p = M([]), _ = M([]);
223
223
  return V(u, () => ({
224
224
  focusAdd(c) {
@@ -227,11 +227,11 @@ const xe = W(function({ results: o, loading: n, error: s, onGo: i, onAdd: h, onA
227
227
  }
228
228
  })), K(() => {
229
229
  var c;
230
- a >= 0 && ((c = p.current[a]) == null || c.scrollIntoView({ block: "nearest" }));
231
- }, [a]), /* @__PURE__ */ f("div", { className: y, children: [
230
+ n >= 0 && ((c = p.current[n]) == null || c.scrollIntoView({ block: "nearest" }));
231
+ }, [n]), /* @__PURE__ */ f("div", { className: y, children: [
232
232
  s && /* @__PURE__ */ e("p", { className: "px-3 py-2.5 text-sm text-rose-500", children: s }),
233
- !s && n && o.length === 0 && /* @__PURE__ */ e("p", { className: "px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))", children: "Searching…" }),
234
- !s && !n && o.length === 0 && /* @__PURE__ */ e("p", { className: "px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))", children: "No results found" }),
233
+ !s && a && o.length === 0 && /* @__PURE__ */ e("p", { className: "px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))", children: "Searching…" }),
234
+ !s && !a && o.length === 0 && /* @__PURE__ */ e("p", { className: "px-3 py-2.5 text-sm text-(--elm-text-subtle,var(--color-gray-400))", children: "No results found" }),
235
235
  !s && o.map((c, b) => {
236
236
  const B = c.geojson && c.geojson.type !== "Point", D = /* @__PURE__ */ f(j, { children: [
237
237
  /* @__PURE__ */ e(A, { content: "Fly to location", children: /* @__PURE__ */ f("button", { onClick: (d) => {
@@ -277,7 +277,7 @@ const xe = W(function({ results: o, loading: n, error: s, onGo: i, onAdd: h, onA
277
277
  onKeyDown: (d) => {
278
278
  d.key === "ArrowDown" ? (d.preventDefault(), l == null || l(1, b)) : d.key === "ArrowUp" && (d.preventDefault(), l == null || l(-1, b));
279
279
  },
280
- className: r === "row" ? `flex items-center gap-2 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${b === a ? "bg-primary-50 dark:bg-white/5" : ""}` : `flex flex-col gap-1.5 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${b === a ? "bg-primary-50 dark:bg-white/5" : ""}`,
280
+ className: r === "row" ? `flex items-center gap-2 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${b === n ? "bg-primary-50 dark:bg-white/5" : ""}` : `flex flex-col gap-1.5 px-3 py-2 border-b border-elm-border-subtle last:border-b-0 transition-colors cursor-pointer ${b === n ? "bg-primary-50 dark:bg-white/5" : ""}`,
281
281
  children: r === "row" ? /* @__PURE__ */ f(j, { children: [
282
282
  /* @__PURE__ */ f("div", { className: "flex-1 min-w-0", children: [
283
283
  m,
@@ -305,19 +305,19 @@ const xe = W(function({ results: o, loading: n, error: s, onGo: i, onAdd: h, onA
305
305
  function oe(t, o) {
306
306
  return o === "vertical" ? t.endsWith("-right") || t.startsWith("right") ? "left" : "right" : t.startsWith("bottom") ? "top" : "bottom";
307
307
  }
308
- function ve({ active: t, onClick: o, label: n, shortcut: s, shortcutId: i, color: h = "blue", tooltipSide: x, disabled: a, children: v }) {
308
+ function ve({ active: t, onClick: o, label: a, shortcut: s, shortcutId: i, color: h = "blue", tooltipSide: x, disabled: n, children: v }) {
309
309
  const l = G(), y = l.ui.keyboardShortcuts.enabled && s, r = x ?? oe(l.toolbar.position, l.toolbar.direction);
310
- return /* @__PURE__ */ e(A, { content: n, shortcut: y && /* @__PURE__ */ e(H, { children: s }), side: r, children: /* @__PURE__ */ e(
310
+ return /* @__PURE__ */ e(A, { content: a, shortcut: y && /* @__PURE__ */ e(H, { children: s }), side: r, children: /* @__PURE__ */ e(
311
311
  "button",
312
312
  {
313
- "aria-label": n,
313
+ "aria-label": a,
314
314
  "data-elm-shortcut": i,
315
315
  onClick: (u) => {
316
316
  o(), u.currentTarget.blur();
317
317
  },
318
- disabled: a,
318
+ disabled: n,
319
319
  className: T(
320
- "p-1 text-sm rounded-elm-control flex items-center justify-center active:scale-[0.95] disabled:cursor-not-allowed disabled:text-elm-text-disabled disabled:active:scale-100",
320
+ "p-1 text-sm rounded-elm-control flex items-center justify-center focus:outline-none focus-visible:ring-2 focus-visible:ring-elm-focus-ring active:scale-[0.95] disabled:cursor-not-allowed disabled:text-elm-text-disabled disabled:active:scale-100",
321
321
  t ? re[h] : "text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent"
322
322
  ),
323
323
  children: v
@@ -330,12 +330,12 @@ function ye({ vertical: t } = {}) {
330
330
  function we({
331
331
  label: t,
332
332
  shortcut: o,
333
- shortcutId: n,
333
+ shortcutId: a,
334
334
  onClick: s,
335
335
  active: i,
336
336
  disabled: h,
337
337
  tooltipSide: x = "top",
338
- children: a
338
+ children: n
339
339
  }) {
340
340
  const l = G().ui.keyboardShortcuts.enabled ? o : void 0;
341
341
  return /* @__PURE__ */ e(A, { content: t, shortcut: l, side: x, children: /* @__PURE__ */ e(
@@ -343,15 +343,15 @@ function we({
343
343
  {
344
344
  "aria-label": t,
345
345
  "aria-pressed": i,
346
- "data-elm-shortcut": n,
346
+ "data-elm-shortcut": a,
347
347
  onClick: (y) => {
348
348
  s(), y.currentTarget.blur();
349
349
  },
350
350
  disabled: h,
351
- className: `p-1 rounded-elm-control flex items-center justify-center text-sm
351
+ className: `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
352
352
  active:scale-[0.95] disabled:cursor-not-allowed disabled:text-elm-text-disabled disabled:active:scale-100
353
353
  ${i ? "bg-primary-50 dark:bg-white/10 hover:bg-primary-100 dark:hover:bg-white/15 disabled:hover:bg-primary-50 dark:disabled:hover:bg-white/10 text-primary-600 dark:text-primary-400" : "text-elm-text hover:bg-elm-control-hover disabled:hover:bg-transparent"}`,
354
- children: a
354
+ children: n
355
355
  }
356
356
  ) });
357
357
  }
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("react"),u=require("./useAccentStyle-hsGvyHZc.cjs"),d=require("@element-editor/core"),v=require("react-dom"),m=require("./useAdapterControls-BBObhzVX.cjs"),l=require("./useWindowFocus-D-_yEm_V.cjs"),S=require("./useFocusTrap-BBjPCfDR.cjs"),k=require("./index-BKdDZ4Y9.cjs"),f="elm_feature_win_size";function _({dialogState:b}){const{pos:a,onHandleMouseDown:h}=l.useDragWindow("elm_feature_win",{x:80,y:120}),n=u.useElementEditorConfig(),{zIndex:x,focus:g}=l.useWindowFocus(),w=m.useUIStore(e=>e.closeDialog),[r]=s.useState(()=>{try{const e=d.readStorage(f,n);return e?JSON.parse(e):null}catch{return null}}),o=s.useRef(null),c=s.useCallback(()=>{const e=o.current;e&&d.writeStorage(f,JSON.stringify({w:e.offsetWidth,h:e.offsetHeight}),n)},[n]);s.useEffect(()=>{const e=o.current;if(!e)return;const i=new ResizeObserver(c);return i.observe(e),()=>i.disconnect()},[c]),S.useFocusTrap(o);const y=u.useAccentStyle(),p=m.useTheme();return v.createPortal(t.jsxs("div",{ref:o,"data-elm-portal":!0,"data-elm-theme":p,onMouseDownCapture:g,role:"dialog","aria-label":"Edit feature",className:"absolute flex flex-col bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm-raised rounded-elm-window overflow-hidden",style:{...y,left:a.x,top:a.y,zIndex:x,resize:"both",overflow:"hidden",minWidth:280,minHeight:200,width:(r==null?void 0:r.w)??320,height:(r==null?void 0:r.h)??600,maxWidth:"90%",maxHeight:"85%"},children:[t.jsxs("div",{onMouseDown:h,className:"flex items-center justify-between px-4 py-2 border-b border-elm-border flex-shrink-0 select-none bg-(--elm-surface-sunken,color-mix(in_oklab,var(--color-gray-50)_50%,transparent)) dark:bg-(--elm-surface-sunken,color-mix(in_oklab,var(--color-gray-800)_50%,transparent))",style:{cursor:"grab"},children:[t.jsx("span",{className:"text-sm font-semibold text-(--elm-text,var(--color-gray-900)) dark:text-(--elm-text,var(--color-gray-100))",children:"Edit feature"}),t.jsx(l.CloseButton,{onClick:w,label:"Close editor"})]}),t.jsx("div",{className:"flex-1 overflow-hidden min-h-0 relative bg-elm-surface",children:t.jsx(k.FeatureSidePanel,{dialogState:b})})]}),document.body)}exports.default=_;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),s=require("react"),u=require("./useAccentStyle-hsGvyHZc.cjs"),d=require("@element-editor/core"),v=require("react-dom"),m=require("./useAdapterControls-BBObhzVX.cjs"),l=require("./useWindowFocus-CRWNNxOL.cjs"),S=require("./useFocusTrap-BBjPCfDR.cjs"),k=require("./index-mfb91TEp.cjs"),f="elm_feature_win_size";function _({dialogState:b}){const{pos:a,onHandleMouseDown:h}=l.useDragWindow("elm_feature_win",{x:80,y:120}),n=u.useElementEditorConfig(),{zIndex:x,focus:g}=l.useWindowFocus(),w=m.useUIStore(e=>e.closeDialog),[r]=s.useState(()=>{try{const e=d.readStorage(f,n);return e?JSON.parse(e):null}catch{return null}}),o=s.useRef(null),c=s.useCallback(()=>{const e=o.current;e&&d.writeStorage(f,JSON.stringify({w:e.offsetWidth,h:e.offsetHeight}),n)},[n]);s.useEffect(()=>{const e=o.current;if(!e)return;const i=new ResizeObserver(c);return i.observe(e),()=>i.disconnect()},[c]),S.useFocusTrap(o);const y=u.useAccentStyle(),p=m.useTheme();return v.createPortal(t.jsxs("div",{ref:o,"data-elm-portal":!0,"data-elm-theme":p,onMouseDownCapture:g,role:"dialog","aria-label":"Edit feature",className:"absolute flex flex-col bg-elm-surface/95 backdrop-blur-md border border-elm-border/80 shadow-elm-raised rounded-elm-window overflow-hidden",style:{...y,left:a.x,top:a.y,zIndex:x,resize:"both",overflow:"hidden",minWidth:280,minHeight:200,width:(r==null?void 0:r.w)??320,height:(r==null?void 0:r.h)??600,maxWidth:"90%",maxHeight:"85%"},children:[t.jsxs("div",{onMouseDown:h,className:"flex items-center justify-between px-4 py-2 border-b border-elm-border flex-shrink-0 select-none bg-(--elm-surface-sunken,color-mix(in_oklab,var(--color-gray-50)_50%,transparent)) dark:bg-(--elm-surface-sunken,color-mix(in_oklab,var(--color-gray-800)_50%,transparent))",style:{cursor:"grab"},children:[t.jsx("span",{className:"text-sm font-semibold text-(--elm-text,var(--color-gray-900)) dark:text-(--elm-text,var(--color-gray-100))",children:"Edit feature"}),t.jsx(l.CloseButton,{onClick:w,label:"Close editor"})]}),t.jsx("div",{className:"flex-1 overflow-hidden min-h-0 relative bg-elm-surface",children:t.jsx(k.FeatureSidePanel,{dialogState:b})})]}),document.body)}exports.default=_;
@@ -4,9 +4,9 @@ import { u as v, e as k } from "./useAccentStyle-CPo2XqAn.js";
4
4
  import { readStorage as _, writeStorage as S } from "@element-editor/core";
5
5
  import { createPortal as E } from "react-dom";
6
6
  import { u as C, d as D } from "./useAdapterControls-DVjkwRZ_.js";
7
- import { u as N, a as F, C as W } from "./useWindowFocus-DGAWA1au.js";
7
+ import { u as N, a as F, C as W } from "./useWindowFocus-CroxgGOo.js";
8
8
  import { u as H } from "./useFocusTrap-CKxKT8De.js";
9
- import { F as M } from "./index-CtZterPc.js";
9
+ import { F as M } from "./index-rT-R0kyV.js";
10
10
  const c = "elm_feature_win_size";
11
11
  function B({ dialogState: u }) {
12
12
  const { pos: a, onHandleMouseDown: m } = N("elm_feature_win", { x: 80, y: 120 }), s = v(), { zIndex: d, focus: f } = F(), b = C((e) => e.closeDialog), [r] = g(() => {
@@ -8,8 +8,8 @@ import { useVirtualizer as Qe, elementScroll as Ze, observeElementOffset as et }
8
8
  import { u as tt } from "./useJumpToFeature-Bdz2hqOC.js";
9
9
  import { getGeometryBBox as nt } from "@element-editor/core";
10
10
  import { isMultiGeometry as de, getPartBBox as rt, getPartCount as He } from "@element-editor/core/internal";
11
- import { g as ot, d as st, N as it, G as lt, e as ke, P as at } from "./index-CtZterPc.js";
12
- import { F as dt } from "./FeatureRowContextMenu-BLt7VlUU.js";
11
+ import { g as ot, d as st, N as it, G as lt, e as ke, P as at } from "./index-rT-R0kyV.js";
12
+ import { F as dt } from "./FeatureRowContextMenu-Dlsk7erC.js";
13
13
  import { u as ct } from "./useContextMenu-DJ2Cti85.js";
14
14
  import { e as ut } from "./useAccentStyle-CPo2XqAn.js";
15
15
  const Z = 36, gt = 5, le = [];
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),p=require("./useAdapterControls-BBObhzVX.cjs"),i=require("react"),qe=require("clsx"),Ae=require("react-dom"),L=require("@hello-pangea/dnd"),ae=require("@tanstack/react-virtual"),ze=require("./useJumpToFeature-LwjxGzfy.cjs"),Ne=require("@element-editor/core"),_=require("@element-editor/core/internal"),z=require("./index-BKdDZ4Y9.cjs"),Ue=require("./FeatureRowContextMenu-Gwq3OMEA.cjs"),Be=require("./useContextMenu-DbxMvb1s.cjs"),Ve=require("./useAccentStyle-hsGvyHZc.cjs"),Z=36,_e=5,le=[];function Je(D,l){const o=D.scrollElement;if(!o)return;const R=new ResizeObserver(([h])=>{var I;const b=(I=h.borderBoxSize)==null?void 0:I[0];l(b?{width:Math.round(b.inlineSize),height:Math.round(b.blockSize)}:{width:Math.round(h.contentRect.width),height:Math.round(h.contentRect.height)})});return R.observe(o,{box:"border-box"}),()=>R.disconnect()}function Le(D,l){const o=D.scrollElement;if(!o)return;const R=ae.observeElementOffset(D,l),h=new ResizeObserver(()=>{h.disconnect(),l(o.scrollTop,!1)});return h.observe(o),()=>{h.disconnect(),R==null||R()}}function $e(D,l,o){l.adjustments===void 0&&l.behavior===void 0&&D===o.scrollOffset||ae.elementScroll(D,l,o)}function Me({droppableId:D,features:l,scrollElement:o,listElement:R,collapsed:h,expandedIds:b,renderItem:I,renderClone:F,scrollToId:w,showEmptyAffordance:q=!0}){const N=h?0:l.length,[v,P]=i.useState(null),y=i.useRef(null),M=i.useCallback(a=>{var g;(g=y.current)==null||g.call(y,a),P(a)},[]),[k,G]=i.useState(0);i.useEffect(()=>{if(!v||!o)return;const a=new ResizeObserver(()=>{const g=v.getBoundingClientRect().top-o.getBoundingClientRect().top-o.clientTop+o.scrollTop;G(Math.round(g))});return a.observe(v),R&&a.observe(R),()=>a.disconnect()},[v,R,o]);const O=i.useCallback(a=>{var g;return((g=l[a])==null?void 0:g.id)??a},[l,b]),j=a=>{const g=l[a];return!g||!b.has(g.id)||!_.isMultiGeometry(g.geometry)?Z:Z*(1+_.getPartCount(g.geometry))+(a<l.length-1?_e:0)},T=ae.useVirtualizer({count:N,getScrollElement:()=>o,estimateSize:j,overscan:6,getItemKey:O,scrollMargin:k,initialRect:{width:0,height:typeof window>"u"?800:window.innerHeight},observeElementRect:Je,observeElementOffset:Le,scrollToFn:$e}),H=w&&!h?l.findIndex(a=>a.id===w):-1;return i.useEffect(()=>{if(H<0)return;const a=T.getVirtualItems(),g=a.length>0&&H>a[0].index-50&&H<a[a.length-1].index+50;T.scrollToIndex(H,{align:"auto",behavior:g?"smooth":"auto"})},[H,T]),c.jsx(L.Droppable,{droppableId:D,type:"feature",mode:"virtual",renderClone:F,children:(a,g)=>{y.current=a.innerRef;const U=!h&&l.length===0,ee=U&&q,$=h?g.isDraggingOver?32:4:U?q?48:Z:T.getTotalSize()+(g.isDraggingOver?Z:0);return c.jsxs("ul",{ref:M,...a.droppableProps,className:"rounded-elm-control",style:{height:$,position:"relative",background:g.isDraggingOver&&!U?"color-mix(in srgb, var(--color-primary-500) 8%, transparent)":void 0,outline:g.isDraggingOver&&!U?"1px dashed color-mix(in srgb, var(--color-primary-500) 40%, transparent)":void 0,borderRadius:"6px",overflow:"hidden"},children:[h&&g.isDraggingOver&&c.jsx("li",{style:{listStyle:"none"},className:"px-2 py-1.5 text-xs text-primary-400 italic",children:"Drop here"}),ee&&c.jsx("li",{style:{listStyle:"none"},className:qe.clsx("mx-1 my-1 h-9 flex items-center justify-center rounded-elm-control border border-dashed text-xs transition-colors",g.isDraggingOver?"border-primary-400 text-primary-500 bg-primary-50/40 dark:bg-white/5":"border-(--elm-border-strong,var(--color-gray-300)) dark:border-(--elm-border-strong,var(--color-gray-700)) text-elm-text-subtle"),children:g.isDraggingOver?"Drop here":"Drag here"}),!h&&T.getVirtualItems().map(C=>{const B=l[C.index];return B?c.jsx("div",{"data-index":C.index,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${C.start-k}px)`},children:I(B,C.index,C.index===l.length-1,l[C.index-1],l[C.index+1])},B.id):null})]})}})}function We(D){if(D.length===0)return null;let l=1/0,o=1/0,R=-1/0,h=-1/0;for(const b of D){const I=b.bbox||Ne.getGeometryBBox(b.geometry);I[0]<l&&(l=I[0]),I[1]<o&&(o=I[1]),I[2]>R&&(R=I[2]),I[3]>h&&(h=I[3])}return[l,o,R,h]}const Ye=i.memo(function({feature:l,index:o,isLast:R,isSelected:h,isMultiSelected:b,isContextMenuActive:I,isGhosted:F,renameActive:w,isExpanded:q,selectedPartIndex:N,joinTop:v,joinBottom:P,h:y}){const M=l.id,k=i.useCallback(()=>y.onRenameEnd(M),[y,M]),G=i.useCallback(j=>y.onRenameTab(M,j),[y,M]),O=p.useUIStore(j=>j.readonly);return c.jsx(L.Draggable,{draggableId:M,index:o,isDragDisabled:O,children:(j,T)=>c.jsxs("div",{ref:j.innerRef,...j.draggableProps,...j.dragHandleProps,style:{outline:"none",...j.draggableProps.style},children:[c.jsx(z.FeatureRow,{feature:l,isDragging:T.isDragging,isSelected:h,onRowClick:y.onRowClick,onRowSelectOnly:y.onRowSelectOnly,onRowJump:y.onRowJump,onEdit:y.onEdit,onToggleHidden:y.onToggleHidden,onRename:y.onRename,isMultiSelected:b,onMultiSelectToggle:y.onMultiSelectToggle,onRangeSelect:y.onRangeSelect,isContextMenuActive:I,isGhosted:F,renameActive:w,onRenameEnd:k,onRenameTab:G,joinTop:v,joinBottom:P}),q&&!T.isDragging&&c.jsxs(c.Fragment,{children:[Array.from({length:_.getPartCount(l.geometry)},(H,a)=>c.jsx(z.PartSubRow,{geometry:l.geometry,partIndex:a,isSelected:N===a,onClick:()=>y.onPartClick(M,a)},`${M}:${a}`)),!R&&c.jsx("div",{className:"border-b border-elm-border mx-2 mt-1"})]})]})})});function Ke({autoFocusGroupId:D,scrollElement:l}){var Ee;const{dataStore:o,uiStore:R}=p.useGeoStore(),h=p.useUIStore(e=>e.readonly),b=p.useDataStore(e=>e.features),I=p.useDataStore(e=>e.groups),F=p.useDataStore(e=>e.selectedIds),w=i.useMemo(()=>new Set(F),[F]),q=Ve.useAccentStyle(),N=p.useTheme(),v=i.useMemo(()=>{const e=new Map;for(const t of b){const n=t.groupId||null,r=e.get(n);r?r.push(t):e.set(n,[t])}return e},[b]),P=F.length===1?F[0]:null,y=p.useDataStore(e=>e.selectedGroupId),M=p.useDataStore(e=>e.selectGroup),k=p.useDataStore(e=>e.selectFeature),G=p.useDataStore(e=>e.toggleSelection),O=p.useDataStore(e=>e.setSelection),j=p.useDataStore(e=>e.updateGroup),T=p.useDataStore(e=>e.deleteGroup),H=p.useDataStore(e=>e.toggleGroupCollapsed),a=p.useDataStore(e=>e.moveFeatureToGroup),g=p.useDataStore(e=>e.reorderFeatures),U=p.useDataStore(e=>e.reorderGroups),ee=p.useDataStore(e=>e.toggleGroupHidden),$=p.useUIStore(e=>e.openEditDialog),{fitBounds:C}=p.useMapController(),B=p.useDataStore(e=>e.updateFeature),ie=p.useDataStore(e=>e.toggleFeatureHidden),je=p.useUIStore(e=>e.selectedPartIndex),ce=p.useUIStore(e=>e.setSelectedPartIndex),[te,Fe]=i.useState(()=>new Set),de=i.useCallback(e=>{Fe(t=>{const n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),[V,ue]=i.useState(null),[ne,W]=i.useState(null),Y=i.useRef(null),ge=i.useCallback((e,t)=>{const n=o.getState(),r=z.getTabbableFeatureIds(n.features,n.groups),f=r.indexOf(e);if(f<0){W(null);return}const s=t==="next"?f+1:f-1;if(s<0||s>=r.length){W(null);return}W(r[s])},[o]),pe=i.useCallback(e=>{W(t=>t===e?null:t)},[]),A=Be.useContextMenu(),[K,ve]=i.useState(null),fe=l??null;i.useEffect(()=>{const e=K;if(!e)return;const t=n=>{let r=n.target;for(;r&&r!==e;){const f=r.dataset.featureId;if(f){n.preventDefault();const s=o.getState().features.find(d=>d.id===f);s&&A.open(n.clientX,n.clientY,s);return}r=r.parentElement}};return e.addEventListener("contextmenu",t,{capture:!0}),()=>e.removeEventListener("contextmenu",t,{capture:!0})},[A.open,o,K]);const me=i.useCallback(e=>{const t=o.getState(),n=t.selectedIds.length===1?t.selectedIds[0]:Y.current;if(Y.current=e,!n){G(e);return}const r=z.getVisualFeatureOrder(t.features,t.groups),f=r.indexOf(n),s=r.indexOf(e);if(f===-1||s===-1){G(e);return}const d=Math.min(f,s),S=Math.max(f,s);O(r.slice(d,S+1))},[o,G,O]),xe=i.useCallback((e,t)=>{const n=o.getState().features.find(r=>r.id===e);n&&B(e,{properties:{...n.properties,name:t}})},[o,B]),be=ze.useJumpToFeature(),X=i.useCallback(e=>{const t=o.getState().features.find(n=>n.id===e);t&&be(t)},[o,be]),Q=i.useCallback(e=>{const t=o.getState().features.find(n=>n.id===e);t&&(Y.current=e,k(e),_.isMultiGeometry(t.geometry)&&de(e))},[o,k,de]),Se=i.useCallback(e=>{Q(e),X(e)},[Q,X]),he=i.useCallback(e=>{G(e),Y.current=e},[G]);function Te(e){ue(e.draggableId)}function ke(e){const{source:t,destination:n,draggableId:r,type:f}=e;if(ue(null),!n||t.droppableId===n.droppableId&&t.index===n.index||R.getState().readonly)return;if(o.getState().takeSnapshot(),f==="group"){const S=[...I],[m]=S.splice(t.index,1);S.splice(n.index,0,m),U(S.map(E=>E.id));return}const s=t.droppableId,d=n.droppableId;if(s===d){const m=[...re(s)],[E]=m.splice(t.index,1);m.splice(n.index,0,E),Ie(s,m.map(u=>u.id))}else{const S=d==="ungrouped"?null:d,E=w.has(r)&&F.length>1?re(s).filter(u=>w.has(u.id)).map(u=>u.id):[r];if(E.length===1){a(r,S);const u=re(d).filter(x=>x.id!==r);u.splice(n.index,0,b.find(x=>x.id===r)),Ie(d,u.map(x=>x.id),r)}else{for(const u of E)a(u,S);Ge(d,E,n.index)}}}function Ge(e,t,n){const r=new Set(t),f=t.map(u=>b.find(x=>x.id===u)),s=b.filter(u=>!r.has(u.id)),d=e==="ungrouped",S=s.filter(u=>d?!u.groupId:u.groupId===e);let m;if(n<S.length)m=s.findIndex(u=>u.id===S[n].id);else{const u=S[S.length-1];m=u?s.findIndex(x=>x.id===u.id)+1:s.length}const E=[...s.slice(0,m),...f,...s.slice(m)];g(E.map(u=>u.id))}function re(e){return v.get(e==="ungrouped"?null:e)??le}function Ie(e,t,n){const r=new Set(t),f=n?b.find(x=>x.id===n):null,s=b.filter(x=>x.id!==n),d=s.filter(x=>!r.has(x.id)),S=s.find(x=>r.has(x.id)),m=S?d.findIndex(x=>x.id===S.id):d.length,E=t.map(x=>x===n?f:b.find(He=>He.id===x)),u=[...d.slice(0,m),...E,...d.slice(m)];g(u.map(x=>x.id))}const oe=v.get(null)??le,Pe=(()=>{if(!V||!w.has(V)||F.length<=1)return 1;const e=b.find(n=>n.id===V),t=(e==null?void 0:e.groupId)??null;return b.filter(n=>w.has(n.id)&&(n.groupId??null)===t).length})(),J=((Ee=A.state)==null?void 0:Ee.data)??null,ye=i.useCallback((e,t)=>{const n=o.getState().features.find(r=>r.id===e);n&&(k(e),ce(t),C==null||C(_.getPartBBox(n.geometry,t)))},[o,k,ce,C]),Oe=i.useMemo(()=>({onRowClick:Se,onRowSelectOnly:Q,onRowJump:X,onEdit:$,onToggleHidden:ie,onRename:xe,onMultiSelectToggle:he,onRangeSelect:me,onRenameEnd:pe,onRenameTab:ge,onPartClick:ye}),[Se,Q,X,$,ie,xe,he,me,pe,ge,ye]);function Re(e){return(t,n,r)=>{const f=e[r.source.index];return f?c.jsx(z.FeatureRow,{feature:f,innerRef:t.innerRef,containerProps:{...t.draggableProps,"data-elm-portal":"","data-elm-theme":N,style:{...q,...t.draggableProps.style}},dragHandleProps:t.dragHandleProps,isDragging:!0,isSelected:w.has(f.id),dragCountBadge:Pe,onRowClick:()=>{},onEdit:()=>{},onToggleHidden:()=>{}}):c.jsx("div",{ref:t.innerRef,...t.draggableProps})}}const se=e=>!!e&&!(e.groupId&&y===e.groupId)&&(e.id===P||w.has(e.id)),De=e=>te.has(e.id)&&_.isMultiGeometry(e.geometry);function Ce(e,t,n=!1,r,f){const s=De(e),d=se(e),S=!!e.groupId&&y===e.groupId,m=e.id===P;return c.jsx(Ye,{feature:e,index:t,isLast:n,isSelected:!S&&m,isMultiSelected:!S&&w.has(e.id),isContextMenuActive:(J==null?void 0:J.id)===e.id,isGhosted:V!==null&&V!==e.id&&w.has(e.id)&&w.has(V),renameActive:ne===e.id,isExpanded:s,selectedPartIndex:m&&s?je:null,joinTop:d&&se(r)&&!De(r),joinBottom:d&&se(f)&&!s,h:Oe},e.id)}const we=b.length===0&&I.length===0;return c.jsxs(c.Fragment,{children:[A.state&&J&&c.jsx(Ue.FeatureRowContextMenu,{x:A.state.x,y:A.state.y,feature:J,onClose:A.close}),c.jsx(L.DragDropContext,{onDragStart:Te,onDragEnd:ke,children:c.jsxs("div",{ref:ve,className:we?"h-full":"space-y-0.5",children:[we&&c.jsx(z.NoFeaturesEmptyState,{}),c.jsx(L.Droppable,{droppableId:"groups-container",type:"group",children:e=>c.jsxs("div",{ref:e.innerRef,...e.droppableProps,children:[I.map((t,n)=>{const r=v.get(t.id)??le,f=y===t.id;return c.jsx(L.Draggable,{draggableId:`group:${t.id}`,index:n,isDragDisabled:h,children:(s,d)=>{const S=c.jsxs("div",{ref:s.innerRef,...s.draggableProps,...d.isDragging&&{"data-elm-portal":"","data-elm-theme":N},style:{outline:"none",...d.isDragging&&q,...s.draggableProps.style},children:[c.jsx(z.GroupRow,{group:t,featureCount:r.length,autoFocus:t.id===D,isSelected:f,onToggleCollapse:()=>H(t.id),onToggleHidden:()=>ee(t.id),onRename:m=>j(t.id,{name:m}),onDelete:m=>T(t.id,m),onSelect:()=>{if(r.length===0){O([]),M(t.id);return}O(r.map(E=>E.id)),M(t.id);const m=We(r);m&&(C==null||C(m))},dragHandleProps:s.dragHandleProps,isDragging:d.isDragging}),!d.isDragging&&c.jsx(Me,{droppableId:t.id,features:r,scrollElement:fe,listElement:K,expandedIds:te,collapsed:t.collapsed,renderItem:Ce,renderClone:Re(r),scrollToId:ne??P}),!t.collapsed&&(n<I.length-1||I.length>0)&&c.jsx("div",{className:"border-b border-elm-border mx-2 mt-1"})]});return d.isDragging?Ae.createPortal(S,document.body):S}},t.id)}),e.placeholder]})}),(oe.length>0||I.length>0)&&c.jsx(Me,{droppableId:"ungrouped",features:oe,scrollElement:fe,listElement:K,expandedIds:te,renderItem:Ce,renderClone:Re(oe),scrollToId:ne??P,showEmptyAffordance:!1})]})})]})}exports.default=Ke;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react/jsx-runtime"),p=require("./useAdapterControls-BBObhzVX.cjs"),i=require("react"),qe=require("clsx"),Ae=require("react-dom"),L=require("@hello-pangea/dnd"),ae=require("@tanstack/react-virtual"),ze=require("./useJumpToFeature-LwjxGzfy.cjs"),Ne=require("@element-editor/core"),_=require("@element-editor/core/internal"),z=require("./index-mfb91TEp.cjs"),Ue=require("./FeatureRowContextMenu-Bw9Z6mpN.cjs"),Be=require("./useContextMenu-DbxMvb1s.cjs"),Ve=require("./useAccentStyle-hsGvyHZc.cjs"),Z=36,_e=5,le=[];function Je(D,l){const o=D.scrollElement;if(!o)return;const R=new ResizeObserver(([h])=>{var I;const b=(I=h.borderBoxSize)==null?void 0:I[0];l(b?{width:Math.round(b.inlineSize),height:Math.round(b.blockSize)}:{width:Math.round(h.contentRect.width),height:Math.round(h.contentRect.height)})});return R.observe(o,{box:"border-box"}),()=>R.disconnect()}function Le(D,l){const o=D.scrollElement;if(!o)return;const R=ae.observeElementOffset(D,l),h=new ResizeObserver(()=>{h.disconnect(),l(o.scrollTop,!1)});return h.observe(o),()=>{h.disconnect(),R==null||R()}}function $e(D,l,o){l.adjustments===void 0&&l.behavior===void 0&&D===o.scrollOffset||ae.elementScroll(D,l,o)}function Me({droppableId:D,features:l,scrollElement:o,listElement:R,collapsed:h,expandedIds:b,renderItem:I,renderClone:F,scrollToId:w,showEmptyAffordance:q=!0}){const N=h?0:l.length,[v,P]=i.useState(null),y=i.useRef(null),M=i.useCallback(a=>{var g;(g=y.current)==null||g.call(y,a),P(a)},[]),[k,G]=i.useState(0);i.useEffect(()=>{if(!v||!o)return;const a=new ResizeObserver(()=>{const g=v.getBoundingClientRect().top-o.getBoundingClientRect().top-o.clientTop+o.scrollTop;G(Math.round(g))});return a.observe(v),R&&a.observe(R),()=>a.disconnect()},[v,R,o]);const O=i.useCallback(a=>{var g;return((g=l[a])==null?void 0:g.id)??a},[l,b]),j=a=>{const g=l[a];return!g||!b.has(g.id)||!_.isMultiGeometry(g.geometry)?Z:Z*(1+_.getPartCount(g.geometry))+(a<l.length-1?_e:0)},T=ae.useVirtualizer({count:N,getScrollElement:()=>o,estimateSize:j,overscan:6,getItemKey:O,scrollMargin:k,initialRect:{width:0,height:typeof window>"u"?800:window.innerHeight},observeElementRect:Je,observeElementOffset:Le,scrollToFn:$e}),H=w&&!h?l.findIndex(a=>a.id===w):-1;return i.useEffect(()=>{if(H<0)return;const a=T.getVirtualItems(),g=a.length>0&&H>a[0].index-50&&H<a[a.length-1].index+50;T.scrollToIndex(H,{align:"auto",behavior:g?"smooth":"auto"})},[H,T]),c.jsx(L.Droppable,{droppableId:D,type:"feature",mode:"virtual",renderClone:F,children:(a,g)=>{y.current=a.innerRef;const U=!h&&l.length===0,ee=U&&q,$=h?g.isDraggingOver?32:4:U?q?48:Z:T.getTotalSize()+(g.isDraggingOver?Z:0);return c.jsxs("ul",{ref:M,...a.droppableProps,className:"rounded-elm-control",style:{height:$,position:"relative",background:g.isDraggingOver&&!U?"color-mix(in srgb, var(--color-primary-500) 8%, transparent)":void 0,outline:g.isDraggingOver&&!U?"1px dashed color-mix(in srgb, var(--color-primary-500) 40%, transparent)":void 0,borderRadius:"6px",overflow:"hidden"},children:[h&&g.isDraggingOver&&c.jsx("li",{style:{listStyle:"none"},className:"px-2 py-1.5 text-xs text-primary-400 italic",children:"Drop here"}),ee&&c.jsx("li",{style:{listStyle:"none"},className:qe.clsx("mx-1 my-1 h-9 flex items-center justify-center rounded-elm-control border border-dashed text-xs transition-colors",g.isDraggingOver?"border-primary-400 text-primary-500 bg-primary-50/40 dark:bg-white/5":"border-(--elm-border-strong,var(--color-gray-300)) dark:border-(--elm-border-strong,var(--color-gray-700)) text-elm-text-subtle"),children:g.isDraggingOver?"Drop here":"Drag here"}),!h&&T.getVirtualItems().map(C=>{const B=l[C.index];return B?c.jsx("div",{"data-index":C.index,style:{position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${C.start-k}px)`},children:I(B,C.index,C.index===l.length-1,l[C.index-1],l[C.index+1])},B.id):null})]})}})}function We(D){if(D.length===0)return null;let l=1/0,o=1/0,R=-1/0,h=-1/0;for(const b of D){const I=b.bbox||Ne.getGeometryBBox(b.geometry);I[0]<l&&(l=I[0]),I[1]<o&&(o=I[1]),I[2]>R&&(R=I[2]),I[3]>h&&(h=I[3])}return[l,o,R,h]}const Ye=i.memo(function({feature:l,index:o,isLast:R,isSelected:h,isMultiSelected:b,isContextMenuActive:I,isGhosted:F,renameActive:w,isExpanded:q,selectedPartIndex:N,joinTop:v,joinBottom:P,h:y}){const M=l.id,k=i.useCallback(()=>y.onRenameEnd(M),[y,M]),G=i.useCallback(j=>y.onRenameTab(M,j),[y,M]),O=p.useUIStore(j=>j.readonly);return c.jsx(L.Draggable,{draggableId:M,index:o,isDragDisabled:O,children:(j,T)=>c.jsxs("div",{ref:j.innerRef,...j.draggableProps,...j.dragHandleProps,style:{outline:"none",...j.draggableProps.style},children:[c.jsx(z.FeatureRow,{feature:l,isDragging:T.isDragging,isSelected:h,onRowClick:y.onRowClick,onRowSelectOnly:y.onRowSelectOnly,onRowJump:y.onRowJump,onEdit:y.onEdit,onToggleHidden:y.onToggleHidden,onRename:y.onRename,isMultiSelected:b,onMultiSelectToggle:y.onMultiSelectToggle,onRangeSelect:y.onRangeSelect,isContextMenuActive:I,isGhosted:F,renameActive:w,onRenameEnd:k,onRenameTab:G,joinTop:v,joinBottom:P}),q&&!T.isDragging&&c.jsxs(c.Fragment,{children:[Array.from({length:_.getPartCount(l.geometry)},(H,a)=>c.jsx(z.PartSubRow,{geometry:l.geometry,partIndex:a,isSelected:N===a,onClick:()=>y.onPartClick(M,a)},`${M}:${a}`)),!R&&c.jsx("div",{className:"border-b border-elm-border mx-2 mt-1"})]})]})})});function Ke({autoFocusGroupId:D,scrollElement:l}){var Ee;const{dataStore:o,uiStore:R}=p.useGeoStore(),h=p.useUIStore(e=>e.readonly),b=p.useDataStore(e=>e.features),I=p.useDataStore(e=>e.groups),F=p.useDataStore(e=>e.selectedIds),w=i.useMemo(()=>new Set(F),[F]),q=Ve.useAccentStyle(),N=p.useTheme(),v=i.useMemo(()=>{const e=new Map;for(const t of b){const n=t.groupId||null,r=e.get(n);r?r.push(t):e.set(n,[t])}return e},[b]),P=F.length===1?F[0]:null,y=p.useDataStore(e=>e.selectedGroupId),M=p.useDataStore(e=>e.selectGroup),k=p.useDataStore(e=>e.selectFeature),G=p.useDataStore(e=>e.toggleSelection),O=p.useDataStore(e=>e.setSelection),j=p.useDataStore(e=>e.updateGroup),T=p.useDataStore(e=>e.deleteGroup),H=p.useDataStore(e=>e.toggleGroupCollapsed),a=p.useDataStore(e=>e.moveFeatureToGroup),g=p.useDataStore(e=>e.reorderFeatures),U=p.useDataStore(e=>e.reorderGroups),ee=p.useDataStore(e=>e.toggleGroupHidden),$=p.useUIStore(e=>e.openEditDialog),{fitBounds:C}=p.useMapController(),B=p.useDataStore(e=>e.updateFeature),ie=p.useDataStore(e=>e.toggleFeatureHidden),je=p.useUIStore(e=>e.selectedPartIndex),ce=p.useUIStore(e=>e.setSelectedPartIndex),[te,Fe]=i.useState(()=>new Set),de=i.useCallback(e=>{Fe(t=>{const n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),[V,ue]=i.useState(null),[ne,W]=i.useState(null),Y=i.useRef(null),ge=i.useCallback((e,t)=>{const n=o.getState(),r=z.getTabbableFeatureIds(n.features,n.groups),f=r.indexOf(e);if(f<0){W(null);return}const s=t==="next"?f+1:f-1;if(s<0||s>=r.length){W(null);return}W(r[s])},[o]),pe=i.useCallback(e=>{W(t=>t===e?null:t)},[]),A=Be.useContextMenu(),[K,ve]=i.useState(null),fe=l??null;i.useEffect(()=>{const e=K;if(!e)return;const t=n=>{let r=n.target;for(;r&&r!==e;){const f=r.dataset.featureId;if(f){n.preventDefault();const s=o.getState().features.find(d=>d.id===f);s&&A.open(n.clientX,n.clientY,s);return}r=r.parentElement}};return e.addEventListener("contextmenu",t,{capture:!0}),()=>e.removeEventListener("contextmenu",t,{capture:!0})},[A.open,o,K]);const me=i.useCallback(e=>{const t=o.getState(),n=t.selectedIds.length===1?t.selectedIds[0]:Y.current;if(Y.current=e,!n){G(e);return}const r=z.getVisualFeatureOrder(t.features,t.groups),f=r.indexOf(n),s=r.indexOf(e);if(f===-1||s===-1){G(e);return}const d=Math.min(f,s),S=Math.max(f,s);O(r.slice(d,S+1))},[o,G,O]),xe=i.useCallback((e,t)=>{const n=o.getState().features.find(r=>r.id===e);n&&B(e,{properties:{...n.properties,name:t}})},[o,B]),be=ze.useJumpToFeature(),X=i.useCallback(e=>{const t=o.getState().features.find(n=>n.id===e);t&&be(t)},[o,be]),Q=i.useCallback(e=>{const t=o.getState().features.find(n=>n.id===e);t&&(Y.current=e,k(e),_.isMultiGeometry(t.geometry)&&de(e))},[o,k,de]),Se=i.useCallback(e=>{Q(e),X(e)},[Q,X]),he=i.useCallback(e=>{G(e),Y.current=e},[G]);function Te(e){ue(e.draggableId)}function ke(e){const{source:t,destination:n,draggableId:r,type:f}=e;if(ue(null),!n||t.droppableId===n.droppableId&&t.index===n.index||R.getState().readonly)return;if(o.getState().takeSnapshot(),f==="group"){const S=[...I],[m]=S.splice(t.index,1);S.splice(n.index,0,m),U(S.map(E=>E.id));return}const s=t.droppableId,d=n.droppableId;if(s===d){const m=[...re(s)],[E]=m.splice(t.index,1);m.splice(n.index,0,E),Ie(s,m.map(u=>u.id))}else{const S=d==="ungrouped"?null:d,E=w.has(r)&&F.length>1?re(s).filter(u=>w.has(u.id)).map(u=>u.id):[r];if(E.length===1){a(r,S);const u=re(d).filter(x=>x.id!==r);u.splice(n.index,0,b.find(x=>x.id===r)),Ie(d,u.map(x=>x.id),r)}else{for(const u of E)a(u,S);Ge(d,E,n.index)}}}function Ge(e,t,n){const r=new Set(t),f=t.map(u=>b.find(x=>x.id===u)),s=b.filter(u=>!r.has(u.id)),d=e==="ungrouped",S=s.filter(u=>d?!u.groupId:u.groupId===e);let m;if(n<S.length)m=s.findIndex(u=>u.id===S[n].id);else{const u=S[S.length-1];m=u?s.findIndex(x=>x.id===u.id)+1:s.length}const E=[...s.slice(0,m),...f,...s.slice(m)];g(E.map(u=>u.id))}function re(e){return v.get(e==="ungrouped"?null:e)??le}function Ie(e,t,n){const r=new Set(t),f=n?b.find(x=>x.id===n):null,s=b.filter(x=>x.id!==n),d=s.filter(x=>!r.has(x.id)),S=s.find(x=>r.has(x.id)),m=S?d.findIndex(x=>x.id===S.id):d.length,E=t.map(x=>x===n?f:b.find(He=>He.id===x)),u=[...d.slice(0,m),...E,...d.slice(m)];g(u.map(x=>x.id))}const oe=v.get(null)??le,Pe=(()=>{if(!V||!w.has(V)||F.length<=1)return 1;const e=b.find(n=>n.id===V),t=(e==null?void 0:e.groupId)??null;return b.filter(n=>w.has(n.id)&&(n.groupId??null)===t).length})(),J=((Ee=A.state)==null?void 0:Ee.data)??null,ye=i.useCallback((e,t)=>{const n=o.getState().features.find(r=>r.id===e);n&&(k(e),ce(t),C==null||C(_.getPartBBox(n.geometry,t)))},[o,k,ce,C]),Oe=i.useMemo(()=>({onRowClick:Se,onRowSelectOnly:Q,onRowJump:X,onEdit:$,onToggleHidden:ie,onRename:xe,onMultiSelectToggle:he,onRangeSelect:me,onRenameEnd:pe,onRenameTab:ge,onPartClick:ye}),[Se,Q,X,$,ie,xe,he,me,pe,ge,ye]);function Re(e){return(t,n,r)=>{const f=e[r.source.index];return f?c.jsx(z.FeatureRow,{feature:f,innerRef:t.innerRef,containerProps:{...t.draggableProps,"data-elm-portal":"","data-elm-theme":N,style:{...q,...t.draggableProps.style}},dragHandleProps:t.dragHandleProps,isDragging:!0,isSelected:w.has(f.id),dragCountBadge:Pe,onRowClick:()=>{},onEdit:()=>{},onToggleHidden:()=>{}}):c.jsx("div",{ref:t.innerRef,...t.draggableProps})}}const se=e=>!!e&&!(e.groupId&&y===e.groupId)&&(e.id===P||w.has(e.id)),De=e=>te.has(e.id)&&_.isMultiGeometry(e.geometry);function Ce(e,t,n=!1,r,f){const s=De(e),d=se(e),S=!!e.groupId&&y===e.groupId,m=e.id===P;return c.jsx(Ye,{feature:e,index:t,isLast:n,isSelected:!S&&m,isMultiSelected:!S&&w.has(e.id),isContextMenuActive:(J==null?void 0:J.id)===e.id,isGhosted:V!==null&&V!==e.id&&w.has(e.id)&&w.has(V),renameActive:ne===e.id,isExpanded:s,selectedPartIndex:m&&s?je:null,joinTop:d&&se(r)&&!De(r),joinBottom:d&&se(f)&&!s,h:Oe},e.id)}const we=b.length===0&&I.length===0;return c.jsxs(c.Fragment,{children:[A.state&&J&&c.jsx(Ue.FeatureRowContextMenu,{x:A.state.x,y:A.state.y,feature:J,onClose:A.close}),c.jsx(L.DragDropContext,{onDragStart:Te,onDragEnd:ke,children:c.jsxs("div",{ref:ve,className:we?"h-full":"space-y-0.5",children:[we&&c.jsx(z.NoFeaturesEmptyState,{}),c.jsx(L.Droppable,{droppableId:"groups-container",type:"group",children:e=>c.jsxs("div",{ref:e.innerRef,...e.droppableProps,children:[I.map((t,n)=>{const r=v.get(t.id)??le,f=y===t.id;return c.jsx(L.Draggable,{draggableId:`group:${t.id}`,index:n,isDragDisabled:h,children:(s,d)=>{const S=c.jsxs("div",{ref:s.innerRef,...s.draggableProps,...d.isDragging&&{"data-elm-portal":"","data-elm-theme":N},style:{outline:"none",...d.isDragging&&q,...s.draggableProps.style},children:[c.jsx(z.GroupRow,{group:t,featureCount:r.length,autoFocus:t.id===D,isSelected:f,onToggleCollapse:()=>H(t.id),onToggleHidden:()=>ee(t.id),onRename:m=>j(t.id,{name:m}),onDelete:m=>T(t.id,m),onSelect:()=>{if(r.length===0){O([]),M(t.id);return}O(r.map(E=>E.id)),M(t.id);const m=We(r);m&&(C==null||C(m))},dragHandleProps:s.dragHandleProps,isDragging:d.isDragging}),!d.isDragging&&c.jsx(Me,{droppableId:t.id,features:r,scrollElement:fe,listElement:K,expandedIds:te,collapsed:t.collapsed,renderItem:Ce,renderClone:Re(r),scrollToId:ne??P}),!t.collapsed&&(n<I.length-1||I.length>0)&&c.jsx("div",{className:"border-b border-elm-border mx-2 mt-1"})]});return d.isDragging?Ae.createPortal(S,document.body):S}},t.id)}),e.placeholder]})}),(oe.length>0||I.length>0)&&c.jsx(Me,{droppableId:"ungrouped",features:oe,scrollElement:fe,listElement:K,expandedIds:te,renderItem:Ce,renderClone:Re(oe),scrollToId:ne??P,showEmptyAffordance:!1})]})})]})}exports.default=Ke;
@@ -1 +1 @@
1
- "use strict";const e=require("react/jsx-runtime"),G=require("react"),n=require("@phosphor-icons/react"),I=require("@element-editor/core"),b=require("@element-editor/core/internal"),i=require("./useAdapterControls-BBObhzVX.cjs"),s=require("./EditToolbarBtn-dpCmKnzk.cjs"),K=require("./index-BKdDZ4Y9.cjs");function q({x:k,y,feature:t,onClose:C,showGrouping:D=!0}){const{dataStore:r,uiStore:F}=i.useGeoStore(),c=i.useEmit(),{fitBounds:a,flyTo:d}=i.useMapController(),l=i.useDataStore(o=>o.selectedIds),u=G.useMemo(()=>new Set(l),[l]),M=i.useDataStore(o=>o.deleteFeature),z=i.useDataStore(o=>o.duplicateFeature),g=i.useDataStore(o=>o.toggleFeatureHidden),x=i.useUIStore(o=>o.openEditDialog),E=i.useUIStore(o=>o.readonly),h=l.length>=2&&u.has(t.id),m=b.isMultiGeometry(t.geometry);function p(){if(t.geometry.type==="Point"){const[o,j]=t.geometry.coordinates;d==null||d([j,o],Math.max(r.getState().currentZoom,16))}else a==null||a(t.bbox||I.getGeometryBBox(t.geometry))}function S(){const o=r.getState();return u.has(t.id)&&l.length>1||o.setSelection([t.id]),o}return e.jsx(s.ContextMenu,{x:k,y,onClose:C,items:E?[{label:"Zoom to feature",icon:e.jsx(n.MagnifyingGlassPlus,{size:16}),onClick:p},{label:"Details",icon:e.jsx(n.PencilSimple,{size:16}),onClick:()=>x(t.id)},{label:t.hidden?"Show on map":"Hide from map",icon:t.hidden?e.jsx(n.Eye,{size:16}):e.jsx(n.EyeSlash,{size:16}),onClick:()=>g(t.id)}]:[{label:"Zoom to feature",icon:e.jsx(n.MagnifyingGlassPlus,{size:16}),onClick:p},{separator:!0},{label:"Edit",icon:e.jsx(n.PencilSimple,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"E"})]}),onClick:()=>x(t.id)},{label:"Duplicate",icon:e.jsx(n.CopySimple,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"D"})]}),onClick:()=>z(t.id)},{label:t.hidden?"Show on map":"Hide from map",icon:t.hidden?e.jsx(n.Eye,{size:16}):e.jsx(n.EyeSlash,{size:16}),onClick:()=>g(t.id)},...D?[{separator:!0},t.groupId?{label:"Ungroup",icon:e.jsx(n.FolderMinus,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"⇧"}),e.jsx(s.KbdDark,{children:"G"})]}),onClick:()=>S().ungroupSelection()}:{label:"Group",icon:e.jsx(n.FolderPlus,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"G"})]}),onClick:()=>{const o=S().groupSelection();o&&F.getState().setAutoFocusGroupId(o)}}]:[],...h||m?[{separator:!0},...h?[{label:`Merge ${l.length} features`,icon:e.jsx(n.StackPlus,{size:16}),onClick:()=>{r.getState().mergeFeatures(),c({type:"success",message:`Merged ${l.length} features`})}}]:[],...m?[{label:"Break apart",icon:e.jsx(n.Shapes,{size:16}),onClick:()=>{const o=b.getPartCount(t.geometry);r.getState().breakMultiGeometry(t.id)&&c({type:"feature:broken",featureId:t.id,count:o,undo:()=>r.getState().undo()})}}]:[]]:[],{separator:!0},{label:"Delete",icon:e.jsx(n.Trash,{size:16}),onClick:()=>{M(t.id),c({type:"feature:deleted",featureId:t.id,label:K.featureLabel(t),undo:()=>r.getState().undo()})}}]})}exports.FeatureRowContextMenu=q;
1
+ "use strict";const e=require("react/jsx-runtime"),G=require("react"),n=require("@phosphor-icons/react"),I=require("@element-editor/core"),b=require("@element-editor/core/internal"),i=require("./useAdapterControls-BBObhzVX.cjs"),s=require("./EditToolbarBtn-Ch9HCLHq.cjs"),K=require("./index-mfb91TEp.cjs");function q({x:k,y,feature:t,onClose:C,showGrouping:D=!0}){const{dataStore:r,uiStore:F}=i.useGeoStore(),c=i.useEmit(),{fitBounds:a,flyTo:d}=i.useMapController(),l=i.useDataStore(o=>o.selectedIds),u=G.useMemo(()=>new Set(l),[l]),M=i.useDataStore(o=>o.deleteFeature),z=i.useDataStore(o=>o.duplicateFeature),g=i.useDataStore(o=>o.toggleFeatureHidden),x=i.useUIStore(o=>o.openEditDialog),E=i.useUIStore(o=>o.readonly),h=l.length>=2&&u.has(t.id),m=b.isMultiGeometry(t.geometry);function p(){if(t.geometry.type==="Point"){const[o,j]=t.geometry.coordinates;d==null||d([j,o],Math.max(r.getState().currentZoom,16))}else a==null||a(t.bbox||I.getGeometryBBox(t.geometry))}function S(){const o=r.getState();return u.has(t.id)&&l.length>1||o.setSelection([t.id]),o}return e.jsx(s.ContextMenu,{x:k,y,onClose:C,items:E?[{label:"Zoom to feature",icon:e.jsx(n.MagnifyingGlassPlus,{size:16}),onClick:p},{label:"Details",icon:e.jsx(n.PencilSimple,{size:16}),onClick:()=>x(t.id)},{label:t.hidden?"Show on map":"Hide from map",icon:t.hidden?e.jsx(n.Eye,{size:16}):e.jsx(n.EyeSlash,{size:16}),onClick:()=>g(t.id)}]:[{label:"Zoom to feature",icon:e.jsx(n.MagnifyingGlassPlus,{size:16}),onClick:p},{separator:!0},{label:"Edit",icon:e.jsx(n.PencilSimple,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"E"})]}),onClick:()=>x(t.id)},{label:"Duplicate",icon:e.jsx(n.CopySimple,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"D"})]}),onClick:()=>z(t.id)},{label:t.hidden?"Show on map":"Hide from map",icon:t.hidden?e.jsx(n.Eye,{size:16}):e.jsx(n.EyeSlash,{size:16}),onClick:()=>g(t.id)},...D?[{separator:!0},t.groupId?{label:"Ungroup",icon:e.jsx(n.FolderMinus,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"⇧"}),e.jsx(s.KbdDark,{children:"G"})]}),onClick:()=>S().ungroupSelection()}:{label:"Group",icon:e.jsx(n.FolderPlus,{size:16}),shortcut:e.jsxs(e.Fragment,{children:[e.jsx(s.KbdDark,{children:"⌘"}),e.jsx(s.KbdDark,{children:"G"})]}),onClick:()=>{const o=S().groupSelection();o&&F.getState().setAutoFocusGroupId(o)}}]:[],...h||m?[{separator:!0},...h?[{label:`Merge ${l.length} features`,icon:e.jsx(n.StackPlus,{size:16}),onClick:()=>{r.getState().mergeFeatures(),c({type:"success",message:`Merged ${l.length} features`})}}]:[],...m?[{label:"Break apart",icon:e.jsx(n.Shapes,{size:16}),onClick:()=>{const o=b.getPartCount(t.geometry);r.getState().breakMultiGeometry(t.id)&&c({type:"feature:broken",featureId:t.id,count:o,undo:()=>r.getState().undo()})}}]:[]]:[],{separator:!0},{label:"Delete",icon:e.jsx(n.Trash,{size:16}),onClick:()=>{M(t.id),c({type:"feature:deleted",featureId:t.id,label:K.featureLabel(t),undo:()=>r.getState().undo()})}}]})}exports.FeatureRowContextMenu=q;
@@ -4,8 +4,8 @@ import { MagnifyingGlassPlus as y, PencilSimple as z, Eye as M, EyeSlash as F, C
4
4
  import { getGeometryBBox as L } from "@element-editor/core";
5
5
  import { isMultiGeometry as R, getPartCount as T } from "@element-editor/core/internal";
6
6
  import { e as q, h as v, g as J, f as c, u as G } from "./useAdapterControls-DVjkwRZ_.js";
7
- import { C as N, a as i } from "./EditToolbarBtn-SZIsnIn3.js";
8
- import { l as O } from "./index-CtZterPc.js";
7
+ import { C as N, a as i } from "./EditToolbarBtn-SR4xHd8G.js";
8
+ import { l as O } from "./index-rT-R0kyV.js";
9
9
  function te({ x, y: D, feature: e, onClose: I, showGrouping: E = !0 }) {
10
10
  const { dataStore: n, uiStore: P } = q(), a = v(), { fitBounds: d, flyTo: u } = J(), l = c((t) => t.selectedIds), m = B(() => new Set(l), [l]), w = c((t) => t.deleteFeature), H = c((t) => t.duplicateFeature), g = c((t) => t.toggleFeatureHidden), p = G((t) => t.openEditDialog), f = G((t) => t.readonly), h = l.length >= 2 && m.has(e.id), S = R(e.geometry);
11
11
  function b() {