Files
2026-07-14 21:33:39 +08:00

3 lines
67 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(()=>{var Fe=window,k=Fe.Panel??(Fe.Panel={}),t=k.ui??{};k.ui=t;var W=k.core,j=W?.Panel;if(!j)throw new Error("加载 panel.ui.js 前必须先加载 Panel.core.Panel");var L=W?.util??j.util;if(!L)throw new Error("panel.ui.js 缺少 Panel.core.util");var M=k.config??null,it=k.selects??null,rt=k.activationCode??"",Pe=k.storageKey??"panel:data",f=()=>{},st=B=>{if(!B||B==="invokeAction")return null;let R=t.panel;if(R&&typeof R[B]=="function")return()=>R.invokeAction(B);let N=t[B];return typeof N=="function"&&N!==t.invokeAction?()=>N():null};(()=>{"use strict";let B=()=>{M&&(M.panel&&M.panel.config&&(t.panel.config=L.mergeDeep(t.panel.config,M.panel.config)),M.ui&&(t.ui=L.mergeDeep(t.ui,M.ui)))},R=()=>t.ui.disposers??(t.ui.disposers=[]),N=e=>{let n=t.ui.disposers;if(!Array.isArray(n))return;let o=n.indexOf(e);o>=0&&n.splice(o,1)},_=e=>{if(typeof e!="function")return f;let n=R(),o=!0,i=()=>{o&&(o=!1,N(i),e())};return n.push(i),i},C=(e,n,o,i)=>!e||typeof e.addEventListener!="function"||typeof o!="function"?f:(e.addEventListener(n,o,i),_(()=>e.removeEventListener(n,o,i))),$=new WeakMap,K=(e,n,o,i,r,s)=>{if(!e||!n)return f;let a=$.get(e),c=a?.get(n);if(c&&c(),!o||typeof o.addEventListener!="function"||typeof r!="function")return f;a=$.get(e),a||(a=new Map,$.set(e,a)),o.addEventListener(i,r,s);let u=_(()=>{o.removeEventListener(i,r,s),a.get(n)===u&&a.delete(n),a.size||$.delete(e)});return a.set(n,u),u},Q=(e,n,o,i)=>{if(e?.length)for(let r=0;r<e.length;r++)C(e[r],n,o,i)},O=(e,n,o,i,r)=>{if(!e)return null;let s=E(o,i,r);return C(e,n,s),s},D=(e,n)=>e?.closest(n)??null,Z=(e,n)=>e?.dataset?.[n]??null,ie=()=>t.panel?.getHostWindow?.()??window,Te=()=>{let e=ie().Image||window.Image;return typeof e=="function"?new e:{}},Le=e=>{let n=ie().URL||window.URL;return typeof n?.createObjectURL=="function"?n.createObjectURL(e):""},re=e=>{!e||e._sharedObjectUrl===!0||L.revokeObjectUrl(e._objectUrl||e.src||"")},E=(e,n,o)=>(e[n]||(e[n]=o()),e[n]),ke=()=>{let e=t.ui.disposers;if(!(!Array.isArray(e)||!e.length))for(;e.length;){let n=e.pop();try{n()}catch(o){t.ui.lastDisposeError=o}}},w=(e,n,o)=>{!e||e[n]||(e[n]=requestAnimationFrame(()=>{e[n]=0,o()}))},se=(e,n)=>{!e||!e[n]||(cancelAnimationFrame(e[n]),e[n]=0)},Be=e=>{if(e)for(let n in e)se(e,n)},b=(e,n=document)=>Array.from(n.querySelectorAll(e)),S=[],we=new Map,Ee=new Set(["info","success","warning","error"]),q=W?.uiShapeConfigs??j.uiShapeConfigs??S,V=new Map;for(let e=0;e<q.length;e++){let n=q[e];V.set(n.type,n)}let xe=W?.formActionSchemas??j.formActionSchemas??{},ae=Object.freeze({layer:Object.freeze({panelKey:"layerPanel",listKey:"layerList",stateKey:"layerState",dataAttr:"layer-id",dataKey:"layerId",itemSelector:".layer-item",nameSelector:".layer-name",inputSelector:".layer-input",getEntry:e=>t.panel.getLayer(e),getEntries:()=>t.panel.getLayers(),getActiveId:()=>t.panel.getActiveLayerId(),rename:(e,n)=>t.panel.renameLayer(e,n,{history:!0}),createItem:(e,n,o)=>t.createLayerItem(e,n,o),updateItem:(e,n,o,i)=>t.updateLayerItem(e,n,o,i)}),group:Object.freeze({panelKey:"groupPanel",listKey:"groupList",stateKey:"groupState",dataAttr:"group-id",dataKey:"groupId",itemSelector:".group-item",nameSelector:".group-name",inputSelector:".group-input",getEntry:e=>t.panel.getGroup(e),getEntries:()=>t.panel.getGroups(),getActiveId:()=>t.panel.getActiveGroupId(),rename:(e,n)=>t.panel.renameGroup(e,n,{history:!0}),createItem:(e,n,o)=>t.createGroupItem(e,n,o),updateItem:(e,n,o,i)=>t.updateGroupItem(e,n,o,i)})}),le=Object.freeze(Object.keys(ae)),Me=e=>ae[e]??null,J=[["click","Click"],["dblclick","DblClick"],["keydown","Keydown"],["focusout","FocusOut"]],Re=e=>{let n=new Array(J.length);for(let o=0;o<J.length;o++){let[i,r]=J[o];n[o]=[`${e}Panel${r}`,i,()=>s=>t.handleSettingsPanelEvent(e,i,s)]}return n},ce=Object.freeze([["input","handleFormInput"],["change","handleFormChange"],["click","handleFormClick"]]),Ne=new Set(["setUndo","setRedo","setDeleteActive","setCopyShape","setBooleanUnion","setBooleanIntersect","setBooleanSubtract","setGroup","setUngroup","setRegroup","setReset"]),Ke=new Set(["setSelect","setNodeRect","setNodeEllipse","setNodePoly","setNodePath","setEdgeBeeline","setEdgeArc","setEdgeQuadratic","setEdgeBezier","setZoneRect","setZoneEllipse","setZonePoly","setZonePath","setTagRect","setTagEllipse","setTagPoly","setTagPath","setCarForklift","setCarConveyor","setCarTugger","setCarCarrier","setConnectEdgeBeeline","setConnectEdgeArc","setConnectEdgeQuadratic","setConnectEdgeBezier","setCopyShape","setCopyStyle","setPasteStyle","setBooleanUnion","setBooleanIntersect","setBooleanSubtract","setPathPrev","setPathNext","setGroup","setUngroup","setRegroup","setAlignSize","setLeftAlign","setRightAlign","setTopAlign","setBottomAlign","setHorizontalDistribution","setVerticalDistribution","setMoveUp","setMoveDown","setToTop","setToBottom","setDeleteActive","setAddImage","setDeleteImage","setReset"]),Oe=new Set(["setUndo","setRedo"]),Ve=new Set(["setCopyShape","setCopyStyle","setDeleteActive","setMoveUp","setMoveDown","setToTop","setToBottom"]),Ue=new Set(["setAlignSize","setLeftAlign","setRightAlign","setTopAlign","setBottomAlign","setBooleanUnion","setBooleanIntersect","setBooleanSubtract","setGroup","setRegroup"]),je=new Set(["setHorizontalDistribution","setVerticalDistribution"]),$e=new Set(["setUngroup"]),qe=new Set(["setPathPrev","setPathNext"]),Ge=e=>Ne.has(e),G=["x","y","theta","allowedDeviationXY","allowedDeviationTheta"],ue=["x","y","weight"],He=(e,n)=>{let o=D(e.target,n.actionSelector);if(!o)return;let i=Z(o,n.actionKey),r=n.handlers[i];if(!r)return;let s=D(o,n.itemSelector),a={action:i,item:s};a[n.dataKey]=Z(s,n.dataKey),r(a)?.refresh===!0&&t.refreshSettingsList(u=>t.renderSettingsByType(n.type,u))},de=(e,n,o)=>{try{return t.flushPendingFormInputs(),e()===!1?!1:(n&&t.notify(n,"success"),!0)}catch(i){return t.ui.lastStorageError=i,t.notify(o,"error"),!1}},m=Object.freeze({none:Object.freeze({refresh:!1}),refresh:Object.freeze({refresh:!0})}),ze=(e,n,o)=>{if(!o)return m.none;let i=n||t.getRenameListItem(e,o);return i&&t.startRename(e,o,i),m.none},ge=e=>n=>{let o=A(e);if(!o)return m.none;let i=n?.[o.dataKey]||o.getActiveId();return ze(e,n?.item,i)},pe=({action:e})=>{let n=t.panel.getActiveLayerId();return n&&t.panel.moveLayer(n,e,{history:!0})?m.refresh:m.none},X=(e,n)=>e&&n(e)?m.refresh:m.none,fe=({groupId:e})=>{let n=e||t.panel.getActiveGroupId();return n&&t.panel.removeGroupById(n,{history:!0})?m.refresh:m.none},We=Object.freeze({add:()=>{let e=t.panel.addLayer(void 0,{history:!0});return e&&t.panel.setActiveLayer(e.id),e?m.refresh:m.none},moveSelected:()=>{let e=t.panel.getActiveLayerId();return e?t.panel.moveActiveShapesToLayer(e,{history:!0})?m.refresh:(t.notify("未选中可移动对象","warning"),m.none):(t.notify("未找到当前图层","warning"),m.none)},rename:ge("layer"),delete:()=>{let e=t.panel.getActiveLayerId();if(!e)return m.none;let n=t.panel.layers.list,o=t.panel.getLayer(e)?.index??-1,i=null;o>0?i=n[o-1]?.id??null:o===0&&n.length>1&&(i=n[1]?.id??null);let r=t.panel.removeLayer(e,{history:!0});return r?(r&&i&&t.panel.setActiveLayer(i),m.refresh):(t.notify("至少保留一个图层","warning"),m.none)},up:pe,down:pe,select:({layerId:e})=>X(e,n=>t.panel.setActiveLayer(n)),visibility:({layerId:e})=>X(e,n=>t.panel.toggleLayerVisibility(n,{history:!0})),lock:({layerId:e})=>X(e,n=>t.panel.toggleLayerLock(n,{history:!0}))}),_e=Object.freeze({group:()=>t.panel.applyGroupShapesChange({history:!0})?m.refresh:m.none,ungroup:fe,delete:fe,rename:ge("group"),select:({groupId:e})=>{if(!e)return m.none;let n=t.panel.getGroupShapes(e);return!Array.isArray(n)||n.length===0?t.panel.setActiveGroupId(e)?(t.panel.requestRender(),m.refresh):m.none:t.panel.setActiveShapes(n)?m.refresh:m.none}}),me=(e,n)=>{let o=Me(e);return Object.freeze({...o,type:e,actionSelector:`[data-${e}-action]`,actionKey:`${e}Action`,handlers:n,panelHandlerEntries:Re(e)})},Qe=Object.freeze({layer:me("layer",We),group:me("group",_e)}),A=e=>Qe[e]??null,H=Object.freeze(["formInputsCache","formInputMapCache","formTabCache","settingsFieldCache","countTargetCache","datalistCache"]),he=()=>{let e={};for(let n=0;n<H.length;n++)e[H[n]]=new Map;return e.fieldCache=new WeakMap,e.dialogActionButtonCache=new WeakMap,e},U=e=>{e?.clear?e.clear():Array.isArray(e)&&(e.length=0)},Ze=e=>Object.assign(e,he()),Je=e=>{for(let n=0;n<H.length;n++)U(e?.[H[n]]);e&&(e.fieldCache=new WeakMap,e.dialogActionButtonCache=new WeakMap)},F=(e,n)=>e[n]??(e[n]=new Map),z=(e,n,o=null,i=null)=>{let r=document.createElement("button");return r.type="button",e&&(r.className=e),o&&(r.dataset[o]=i??""),n!==void 0&&(r.textContent=n??""),r},ye=(e,n,o="")=>{let i=document.createElement("input");return i.type="text",e&&(i.className=e),n&&i.setAttribute("aria-label",n),i.value=o??"",i},be=(e,n)=>{let o=document.createElement("span");return e&&(o.className=e),o.textContent=String(n??0),o},h=(e,n)=>{if(!e)return;let o=String(n??"");e.textContent!==o&&(e.textContent=o)},I=(e,n)=>{if(!e)return;let o=String(n??"");e.value!==o&&(e.value=o)},Xe=(e,n)=>{e&&e.checked!==n&&(e.checked=n)},Y=(e,n)=>{e&&e.style.display!==n&&(e.style.display=n)},ee=(e,n)=>{let o=n===!0;e&&e.hidden!==o&&(e.hidden=o)},P=(e,n,o=null)=>{if(!e)return;let i=n===!0;o&&e.classList.contains(o)!==i&&e.classList.toggle(o,i);let r=i?"true":"false";e.getAttribute("aria-pressed")!==r&&e.setAttribute("aria-pressed",r)},Se=e=>(e?.dataset&&(Object.prototype.hasOwnProperty.call(e.dataset,"baseDisabled")||(e.dataset.baseDisabled=e.disabled?"true":"false")),e),Ye=e=>e?.dataset?.baseDisabled==="true",ve=(e,n)=>{if(!e)return;let o=n===!0;e.disabled!==o&&(e.disabled=o),e.classList.contains("is-disabled")!==o&&e.classList.toggle("is-disabled",o)},x=(e,n)=>{Se(e),ve(e,Ye(e)||n===!0)},De=()=>({mapMeta:null,toggles:{},switchId:"",modeId:"",actionState:"",propertyState:"",settingsState:"",layerControls:null,groupControls:null}),et=e=>[e.canEdit?1:0,e.canUndo?1:0,e.canRedo?1:0,e.activeCount,e.activePlaneCount,e.hasGroupedSelection?1:0,e.hasMultiPathSelection?1:0,e.hasStyleClipboard?1:0].join("|"),tt=e=>e.canEdit?"1":"0",nt=e=>[e.canEdit?1:0,e.canSelect?1:0,e.activeCount,e.activePlaneCount,e.hasGroupedSelection?1:0,e.activeLayerId??"",e.layerCount,e.layerIndex,e.activeGroupId??""].join("|"),Ce=(e,n,o,i)=>{!e||!n||(n.classList.contains("is-collapsed")?e.style.setProperty(o,`${i}px`):e.style.removeProperty(o))},Ie=e=>e===!1||e==="off"||e==="false",Ae=Object.freeze([["tabMapRect","MapRect","setMapEvent"],["tabSettings",null,e=>n=>e.setSettingsEvent(n)]]),ot=Object.freeze({dblclick:"handleRenameDblClick",keydown:"handleRenameKeydown",focusout:"handleRenameFocusOut"});Object.assign(t,{canvas:{},panel:{config:{license:{activationCode:rt},map:{base:{size:{w:1e4,h:1e4}}},mode:"Edit",info:{enable:!0}}},ui:{pageReady:null,shapeBindingsReady:!1,toolFilter:{group:"all"},toolFilterState:{text:null,group:null},els:{},formActionMap:new Map,formActionSchemaMap:new Map,formEventsBound:!1,multiSelectBound:!1,rafTasks:{},formInputQueue:new Map,formInputList:[],...he(),propertyTabState:new WeakMap,propertyFormKey:"",countCache:null,defaultTheme:null,initialized:!1,bound:!1,handlers:{},disposers:[],statusCache:De(),searchState:{keyword:"",matches:[],index:0},toastHost:null,settingsPanelOpen:!1,layerState:{editingId:null},groupState:{editingId:null}},init:()=>{var o;if(t.ui.initialized)return;if(t.canvas=document.getElementById("canvas"),!(t.canvas instanceof HTMLCanvasElement))throw new Error("panel.ui.js 缺少 #canvas 画布节点");let e=t.ui.defaultTheme||t.panel.config?.visual?.theme||"light";(o=t.panel.config).visual??(o.visual={}),t.panel.config.visual.theme=e,t.applyUiTheme(e);let n=new j(t.canvas,t.panel.config).init();t.panel=n,t.resetCountCache(),t.ui.initialized=!0,t.bind(),t.setMapRectForm(n)},start:()=>{B(),t.init()},bind:()=>{if(t.ui.bound)return;t.ui.bound=!0,t.cacheUI();let e=t.ui.handlers??(t.ui.handlers={}),n=t.ui.els.searchButton;n&&O(n,"click",e,"searchClick",()=>()=>t.setSearch());let o=t.ui.els.searchInput;o&&O(o,"keydown",e,"searchKeydown",()=>i=>{i.key==="Enter"&&(i.preventDefault(),t.setSearch())}),t.bindCommandButtons(),t.bindFormEvents(),t.panel.panelThemeAction=(i,r,s)=>t.handleThemeChange(i,r,s),t.panel.panelActiveAction=i=>{t.schedulePropertyForm(i),t.scheduleStatusBar()},t.panel.panelPointerDownAction=i=>t.setPointerDownAction(i),t.panel.panelPointerUpAction=()=>t.scheduleStatusBar(),t.panel.panelKeyDownAction=()=>t.scheduleStatusBar(),t.panel.panelOpenMapAction=()=>t.syncUiAfterDataLoad(),t.panel.panelSaveMapAction=()=>t.scheduleStatusBar(),t.panel.panelAlertAction=(i,r)=>t.alert(i,r),t.panel.panelConfirmAction=(i,r)=>t.confirm(i,r),t.initShapeBindings(),t.bindSettingsPanels(),t.initUI(),t.scheduleDeferredUiInit()},bindCommandButtons:()=>{let e=t.ui.handlers,n=E(e,"commandClick",()=>o=>{let i=D(o.target,".command");i&&(t.setButtonActive(i),t.invokeAction(i.id))});e.commandClickBound||(C(document,"click",n),e.commandClickBound=!0)},queueResize:()=>{w(t.ui.rafTasks,"resize",()=>{let e=t.panel;e&&e.requestSurfaceSync("ui-layout",{restart:!0})})},initShapeBindings:()=>{if(!t.ui.shapeBindingsReady){t.ui.shapeBindingsReady=!0,t.ui.formActionMap.clear(),t.ui.formActionSchemaMap.clear();for(let e=0;e<q.length;e++){let n=q[e];t.bindPanelInputsBySchema(n.tabId,n.type,n.panelHandler)}}},cacheUI:()=>{t.ui.statusCache=De(),t.ui.propertyTabState=new WeakMap,Ze(t.ui),t.ui.propertyFormKey="",t.ui.toolFilterState={text:null,group:null};let e=[],n=b(".toolbar .tool-group");for(let r=0;r<n.length;r++){let s=n[r],a=s.dataset.title||"",c=[],u=b("button",s);for(let l=0;l<u.length;l++){let d=u[l];c.push({el:d,search:`${d.textContent} ${d.id||""} ${a}`.toLowerCase()})}e.push({el:s,key:s.dataset.group||"all",title:a,buttons:c})}let o=[],i=b("[data-action]");for(let r=0;r<i.length;r++){let s=i[r];D(s,"dialog")||o.push(s)}t.ui.els={appContainer:document.querySelector(".app-container"),toolbarPanel:document.querySelector(".toolbar.panel"),propertyPanel:document.querySelector(".property.panel"),propertyLabels:b("label[for]"),alphaInputs:b('input[name$="globalAlpha"]'),numberInputs:b('input[type="number"]'),toolSearch:document.getElementById("toolSearch"),toolClear:document.getElementById("clearToolSearch"),toolEmpty:document.getElementById("toolEmpty"),toolGroups:e,toolChips:b(".toolbar-filters .chip"),commandButtons:b(".command"),switchButtons:b(".command.switch"),modeButtons:b("#setModeEdit, #setModeRead, #setModeView"),quickActions:o,toggleButtons:b("[data-toggle]"),searchButton:document.getElementById("buttonSearch"),searchClear:document.getElementById("buttonSearchClear"),searchInput:document.getElementById("textSearch"),themeSelect:document.querySelector('[data-theme-select="ui"]')||document.querySelector('[name="visual.theme"]'),mapMeta:document.getElementById("mapMeta"),propertyTitle:document.getElementById("titleProperty"),propertyTabs:b(".property.panel .tabProperty, #settingsPanel .tabProperty"),formTabs:b(".property.panel .tabProperty"),propertyInputs:b(".property .bind"),layerPanel:document.getElementById("layerPanel"),layerList:document.getElementById("layerList"),groupPanel:document.getElementById("groupPanel"),groupList:document.getElementById("groupList"),settingsPanel:document.getElementById("settingsPanel"),settingsToggleButton:document.getElementById("toggleSettingsPanel")||document.querySelector('[data-action="toggleSettingsPanel"]'),selectButton:document.getElementById("setSelect"),monitorButton:document.getElementById("buttonMonitor")},t.invalidateSettingsControlCache()},initUI:()=>{t.initRenderSelects(),t.bindQuickActions(),t.initSettingsPanel(),t.initDockablePanels(),t.bindThemeSelect(),t.bindSearchClear(),t.bindToolFilter(),t.scheduleStatusBar()},scheduleDeferredUiInit:()=>{w(t.ui.rafTasks,"deferredUiInit",()=>{t.initPropertyTabs(),t.initFormDefaults(),t.initFormAccessibility(),t.initDialogs()})},initDockablePanels:()=>{let{toolbarPanel:e,propertyPanel:n}=t.ui.els;if(!e&&!n)return;let o=[e,n];for(let i=0;i<o.length;i++){let r=o[i];if(!r)continue;let s=r.querySelector('[data-panel-action="collapse"]');s&&C(s,"click",()=>t.togglePanelCollapse(r))}t.updatePanelDockWidths()},updatePanelDockWidths:()=>{let{appContainer:e,toolbarPanel:n,propertyPanel:o}=t.ui.els;if(!e)return;let i=52;Ce(e,n,"--toolbar-width",i),Ce(e,o,"--property-width",i)},togglePanelCollapse:(e,n)=>{if(!e)return;let o=typeof n=="boolean"?n:!e.classList.contains("is-collapsed");e.classList.toggle("is-collapsed",o);let i=e.querySelector('[data-panel-action="collapse"]');i&&(P(i,o),h(i,o?"展开":"收缩")),t.updatePanelDockWidths(),t.queueResize({sync:!0})},bindQuickActions:()=>{let e=t.ui.handlers,n=E(e,"quickActionClick",()=>o=>{let i=o.currentTarget;t.invokeAction(i.dataset.action)});Q(t.ui.els.quickActions,"click",n)},initSettingsPanel:()=>{let{settingsPanel:e}=t.ui.els;if(!e)return;let n=t.ui.handlers;for(let o=0;o<le.length;o++){let i=A(le[o]),r=t.ui.els[i.panelKey];if(!r)continue;let s=i.panelHandlerEntries;for(let a=0;a<s.length;a++){let[c,u,l]=s[a];C(r,u,E(n,c,l))}}t.setSettingsPanelOpen(!e.hidden)},initRenderSelects:()=>{t.bindMultiSelectToggles(),t.syncThemeSelect()},bindMultiSelectToggles:()=>{if(t.ui.multiSelectBound)return;t.ui.multiSelectBound=!0;let e=o=>{let i=o.currentTarget,r=D(o.target,"option");!i||!r||(o.preventDefault(),r.selected=!r.selected,i.dispatchEvent(new Event("change",{bubbles:!0})))},n=b("select[multiple]");t.ui.handlers.multiSelectMouseDown=e,Q(n,"mousedown",e)},getRenameListItem:(e,n)=>{if(!n)return null;let o=A(e);if(!o)return null;let i=t.ui.els[o.listKey];return i?i.querySelector(`[data-${o.dataAttr}="${n}"]`):null},startRename:(e,n,o)=>{let i=A(e);if(!i||!n||!o)return;let r=i.getEntry(n);if(!r)return;let s=t.ui[i.stateKey];s.editingId&&s.editingId!==n&&t.cancelRename(e);let a=o.querySelector(i.inputSelector);a&&(s.editingId=n,o.classList.add("is-editing"),I(a,r.name||r.id||""),a.focus(),a.select())},commitRename:(e,n,o)=>{let i=A(e);if(!i)return;let r=t.ui[i.stateKey];if(!n||r.editingId!==n)return;let a=(o?o.value:"").trim();r.editingId=null;let c=t.getRenameListItem(e,n);if(!a){c?c.classList.remove("is-editing"):t.renderSettingsByType(e);return}if(i.rename(n,a),c){let u=c.querySelector(i.nameSelector),l=c.querySelector(i.inputSelector);h(u,a),I(l,a),c.classList.remove("is-editing")}else t.renderSettingsByType(e);t.scheduleStatusBar()},cancelRename:e=>{let n=A(e);if(!n)return;let o=t.ui[n.stateKey],i=o.editingId;if(!i)return;o.editingId=null;let r=t.getRenameListItem(e,i);r?r.classList.remove("is-editing"):t.renderSettingsByType(e)},resolveRenameTarget:(e,n,o)=>{let i=A(e);if(!i||!o)return null;let r=D(n.target,o);if(!r)return null;let s=D(r,i.itemSelector);if(!s)return null;let a=Z(s,i.dataKey);return a?{domain:i,field:r,item:s,targetId:a}:null},handleRenameDblClick:(e,n)=>{let o=t.resolveRenameTarget(e,n,A(e)?.nameSelector);o&&t.startRename(e,o.targetId,o.item)},handleRenameKeydown:(e,n)=>{let o=t.resolveRenameTarget(e,n,A(e)?.inputSelector);o&&(n.key==="Enter"?(n.preventDefault(),t.commitRename(e,o.targetId,o.field)):n.key==="Escape"&&(n.preventDefault(),t.cancelRename(e)))},handleRenameFocusOut:(e,n)=>{let o=t.resolveRenameTarget(e,n,A(e)?.inputSelector);o?.domain&&t.ui[o.domain.stateKey].editingId===o.targetId&&t.commitRename(e,o.targetId,o.field)},getSettingsPanelBody:()=>{let e=t.ui.els.settingsPanel;return e?t.getPanelBody(e):null},withSettingsScroll:e=>{if(typeof e!="function")return;let n=t.getSettingsPanelBody(),o=n?n.scrollTop:null;if(e(),!n||o===null)return;let i=Math.max(0,n.scrollHeight-n.clientHeight);n.scrollTop=Math.min(o,i)},shouldRefreshSettingsLists:()=>{let e=t.ui.els.settingsPanel;return t.ui.settingsPanelOpen===!0&&!!(e&&!e.hidden)},refreshSettingsContent:e=>t.shouldRefreshSettingsLists()?(t.withSettingsScroll(e),t.scheduleStatusBar(),!0):(t.scheduleStatusBar(),!1),setSettingsPanelOpen:e=>{let{settingsPanel:n,settingsToggleButton:o}=t.ui.els;if(!n)return;let i=!!e;ee(n,!i),t.ui.settingsPanelOpen=i,o&&P(o,i,"active"),i&&(t.ensurePropertyTabActive("tabSettings"),t.setSettingsForm(t.panel),t.refreshLayerAndGroupList()),t.scheduleStatusBar()},toggleSettingsPanel:()=>{t.setSettingsPanelOpen(!t.ui.settingsPanelOpen)},setDeleteImage:()=>t.panel.setDeleteImage({force:!0,history:!0}),setReset:()=>t.panel.setReset({force:!0,history:!0}),handleSettingsPanelEvent:(e,n,o)=>{let i=A(e);if(!i)return;if(n==="click"){He(o,i);return}let r=ot[n];r&&t[r](e,o)},resetCountCache:()=>{t.ui.countCache=null},createLayerItem:(e,n,o)=>{let i=document.createElement("div"),r=z("action layer-toggle","","layerAction","visibility"),s=z("action layer-toggle","","layerAction","lock"),a=z("layer-name","","layerAction","select"),c=be("layer-count",0),u=ye("layer-input","图层名称","");return i.append(r,s,a,c,u),t.updateLayerItem(i,e,n,o)},buildCountMaps:()=>{let e=t.panel,n=t.ui.countCache??(t.ui.countCache={panel:null,shapeVersion:-1,layerLength:-1,groupLength:-1,layer:new Map,group:new Map}),o=e?.frame?.shape??-1,i=e?.layers?.list?.length??0,r=e?.groups?.order?.length??0;if(n.panel===e&&n.shapeVersion===o&&n.layerLength===i&&n.groupLength===r)return{layer:n.layer,group:n.group};let s=new Map,a=new Map,c=e?.layers?.list??S,u=e?.shapeIndex?.byLayer??null;for(let g=0;g<c.length;g++){let p=c[g];p?.id&&s.set(p.id,u?.get(p.id)?.length??0)}let l=e?.groups?.order??S,d=e?.groups?.map??null;for(let g=0;g<l.length;g++){let p=l[g];p&&a.set(p,d?.get(p)?.shapeIds?.size??0)}return n.panel=e,n.shapeVersion=o,n.layerLength=i,n.groupLength=r,n.layer=s,n.group=a,{layer:s,group:a}},getCountMap:e=>{if(e!=="layer"&&e!=="group")return we;let n=t.buildCountMaps();return e==="group"?n.group:n.layer},updateLayerItem:(e,n,o,i)=>{if(!e||!n)return e;if(e.children.length<5)return t.createLayerItem(n,o,i);e.className=`layer-item${n.id===i?" is-active":""}`,e.dataset.layerId=n.id;let r=e.children[0],s=e.children[1],a=e.children[2],c=e.children[3],u=e.children[4];return h(r,n.visible?"隐":"显"),P(r,n.visible),r.title=n.visible?"隐藏图层":"显示图层",h(s,n.locked?"解":"锁"),P(s,n.locked),s.title=n.locked?"解锁图层":"锁定图层",h(a,n.name||n.id),h(c,o?.get(n.id)??0),I(u,n.name||n.id||""),e},renderSettingsByType:(e,n={})=>{let o=A(e);if(!o)return;let i=t.ui.els[o.listKey];if(!i)return;let r=n.counts??t.getCountMap(e),s=o.getActiveId();t.renderSettingsList(i,t.ui[o.stateKey],o.getEntries(),a=>a?.id??"",a=>o.createItem(a,r,s),(a,c)=>o.updateItem(a,c,r,s),n),t.invalidateSettingsControlCache(e)},refreshSettingsList:e=>t.refreshSettingsContent(()=>e({preserveScroll:!0})),renderSettingsList:(e,n,o,i,r,s,a={})=>{if(!e)return;n.editingId=null;let c=a.preserveScroll===!0,u=c?Number.isFinite(a.scrollTop)?a.scrollTop:e.scrollTop:0;if(t.patchNodeList(e,o,i,r,s),!c)return;let l=Math.max(0,e.scrollHeight-e.clientHeight);e.scrollTop=Math.min(u,l)},createGroupItem:(e,n,o)=>{let i=document.createElement("div"),r=z("group-name","","groupAction","select"),s=be("group-count",0),a=ye("group-input","组合名称","");return i.append(r,s,a),t.updateGroupItem(i,e,n,o)},updateGroupItem:(e,n,o,i)=>{if(!e||!n)return e;if(e.children.length<3)return t.createGroupItem(n,o,i);e.className=`group-item${n.id===i?" is-active":""}`,e.dataset.groupId=n.id;let r=e.children[0],s=e.children[1],a=e.children[2];return h(r,n.name||n.id),h(s,o?.get(n.id)??0),I(a,n.name||n.id||""),e},refreshLayerAndGroupList:()=>t.refreshSettingsContent(()=>{let e=t.buildCountMaps();t.renderSettingsByType("layer",{preserveScroll:!0,counts:e.layer}),t.renderSettingsByType("group",{preserveScroll:!0,counts:e.group})}),invokeAction:(e,n={})=>{let o=st(e);return o?(t.flushPendingFormInputs(),o(),n.refresh===!1||(n.refresh==="list"||t.ui.settingsPanelOpen&&Ge(e)?t.refreshLayerAndGroupList():t.scheduleStatusBar()),!0):!1},bindSearchClear:()=>{let e=t.ui.els.searchClear,n=t.ui.handlers;O(e,"click",n,"searchClearClick",()=>()=>t.clearSearch())},bindThemeSelect:()=>{let e=t.ui.els.themeSelect,n=t.ui.handlers;O(e,"change",n,"themeSelectChange",()=>o=>{t.setSettingParam(o.currentTarget),t.scheduleStatusBar()})},updateToolChipState:()=>{let e=t.ui.els.toolChips;for(let n=0;n<e.length;n++){let o=e[n];P(o,o.classList.contains("active"))}},getToolFilterContext:()=>{let{toolSearch:e,toolEmpty:n,toolGroups:o}=t.ui.els;return e&&o?.length?{toolSearch:e,toolEmpty:n,toolGroups:o}:(Y(n,"none"),null)},scheduleToolFilter:()=>{t.getToolFilterContext()&&w(t.ui.rafTasks,"toolFilter",()=>t.applyToolFilter())},queueFormInput:e=>{F(t.ui,"formInputQueue").set(e,!0),w(t.ui.rafTasks,"formInput",()=>t.flushFormInputs())},flushFormInputs:()=>{let e=t.ui.formInputQueue;if(!e||e.size===0)return;let n=t.ui.formInputList??(t.ui.formInputList=[]);n.length=0;for(let o of e.keys())n.push(o);e.clear(),t.panel.withBatch(()=>{for(let o=0;o<n.length;o++){let i=n[o];i?.isConnected&&t.dispatchFormInput(i)}n.length=0}),t.scheduleStatusBar()},scheduleHistory:()=>{t.panel.history?.enable!==!1&&w(t.ui.rafTasks,"history",()=>{t.panel.historyDirty&&t.panel.setHistory()})},bindToolFilter:()=>{let e=t.getToolFilterContext();if(!e)return;let{toolSearch:n}=e,{toolClear:o,toolChips:i}=t.ui.els,r=t.ui.handlers;O(n,"input",r,"toolSearchInput",()=>()=>t.scheduleToolFilter());let s=E(r,"toolClearClick",()=>()=>{I(n,""),t.scheduleToolFilter(),n.focus()}),a=E(r,"toolChipClick",()=>c=>{let u=c.currentTarget;for(let l=0;l<i.length;l++)i[l].classList.remove("active");u.classList.add("active"),t.ui.toolFilter.group=u.dataset.toolFilter||"all",t.updateToolChipState(),t.scheduleToolFilter()});o&&C(o,"click",s),Q(i,"click",a),t.updateToolChipState(),t.applyToolFilter()},applyToolFilter:()=>{let e=t.getToolFilterContext();if(!e)return;let{toolSearch:n,toolEmpty:o,toolGroups:i}=e,r=n.value.trim().toLowerCase(),s=t.ui.toolFilter.group,a=t.ui.toolFilterState;if(a.text===r&&a.group===s)return;a.text=r,a.group=s;let c=0;for(let u=0;u<i.length;u++){let l=i[u];if(s!=="all"&&l.key!==s){l.el.classList.add("is-hidden");continue}let d=!1,g=l.buttons;for(let p=0;p<g.length;p++){let v=g[p],y=!r||v.search.includes(r);v.el.classList.toggle("is-hidden",!y),y&&(d=!0)}l.el.classList.toggle("is-hidden",!d),d&&(c+=1)}Y(o,c===0?"block":"none")},scheduleStatusBar:()=>{w(t.ui.rafTasks,"statusBar",()=>t.updateStatusBar())},syncPropertyForm:(e=t.panel)=>{if(!e)return;let n=e.getActiveShapeLast?.(!1)??null,o=e.frame??{},i=n?`shape|${n.id??""}|${n.kind??""}|${n.type??""}|${o.active??0}|${o.shape??0}|${o.geom??0}|${o.render??0}|${o.text??0}|${o.image??0}`:`map|${o.geom??0}|${o.render??0}|${o.image??0}`;if(t.ui.propertyFormKey===i)return;if(t.ui.propertyFormKey=i,!n){t.setMapRectForm(e);return}let r=n.type;if(r&&V.has(r)){t.setFormByType(r,n);return}t.setMapRectForm(e)},schedulePropertyForm:(e=t.panel)=>{w(t.ui.rafTasks,"propertyForm",()=>t.syncPropertyForm(e))},invalidateSettingsControlCache:(e=null)=>{let n=t.ui.statusCache;n&&((!e||e==="layer")&&(n.layerControls=null),(!e||e==="group")&&(n.groupControls=null),n.settingsState="")},getSettingsControls:e=>{let n=t.ui.statusCache;if(!n||e!=="layer"&&e!=="group")return null;let o=`${e}Controls`,i=n[o];if(i)return i;let r=t.ui.els[`${e}Panel`];return r?(i={buttons:b(`[data-${e}-action]`,r),inputs:b(`.${e}-input`,r)},n[o]=i,i):null},flushPendingFormInputs:()=>{let e=t.ui.formInputQueue;return!e||e.size===0?!1:(se(t.ui.rafTasks,"formInput"),t.flushFormInputs(),!0)},cleanupUiTimersAndQueues:()=>{Be(t.ui.rafTasks),t.ui.rafTasks={},U(t.ui.formInputQueue),U(t.ui.formInputList)},cleanupUiListeners:()=>{let e=t.ui.handlers;ke(),e.commandClickBound=!1,e.propertyTabClick=null,e.multiSelectMouseDown=null,t.ui.formEventsBound=!1},cleanupUiDialogs:()=>{let e=t.ui.confirmDialog;e?.settle?.(!1,"destroy"),e?.dialog?.open&&e.dialog.close("destroy"),e&&(e.resolving=!1);let n=document.querySelectorAll("dialog");for(let o=0;o<n.length;o++){let i=n[o];i.open&&i.close("destroy")}t.ui.confirmDialog=null,t.dialogs=null},resetUiRuntimeState:()=>{t.ui.shapeBindingsReady=!1,U(t.ui.formActionMap),U(t.ui.formActionSchemaMap),Je(t.ui),t.ui.propertyFormKey="",t.resetCountCache(),t.ui.toastHost&&(t.ui.toastHost.remove(),t.ui.toastHost=null),t.ui.multiSelectBound=!1,t.ui.disposers=[],t.ui.els={},t.ui.bound=!1,t.ui.initialized=!1},destroy:()=>{typeof t.panel?.dispose=="function"&&t.panel.dispose(),t.cleanupUiTimersAndQueues(),t.cleanupUiListeners(),t.cleanupUiDialogs(),t.resetUiRuntimeState()},updateMapMeta:()=>{let{mapMeta:e}=t.ui.els;if(!e)return;let n=t.panel.map.base.size,o=`尺寸 ${n.w} x ${n.h}`;t.ui.statusCache.mapMeta!==o&&(t.ui.statusCache.mapMeta=o,h(e,o))},updateToggleButtons:()=>{let{toggleButtons:e}=t.ui.els;if(e.length===0)return;let n=t.ui.statusCache.toggles??(t.ui.statusCache.toggles={}),o={grid:t.panel.grid.enable,info:t.panel.info.enable,area:t.panel.area.enable,zoom:t.panel.zoom.enable,carRoute:t.panel.carEdge.enable&&t.panel.carNode.enable};for(let i=0;i<e.length;i++){let r=e[i],s=r.dataset.toggle,a=!!o[s];s&&n[s]===a||(P(r,a,"active"),s&&(n[s]=a))}},getInteractionState:(e=t.panel)=>{let n=e?.activeShapes??S,o=typeof e?.getActivePlanes=="function"?e.getActivePlanes():[],i=e?.history??{},r=e?.canEditContent?.()===!0,s=e?.canSelectShapes?.()===!0,a=e?.canUseHistoryByMode?.()===!0&&i.enable!==!1,c=e?.layers?.list??S,u=e?.getActiveLayerId?.()??null,l=-1,d=!!e?.getActiveGroupId?.(),g=!1;for(let p=0;p<c.length;p++)if(c[p]?.id===u){l=p;break}for(let p=0;p<n.length;p++){let v=n[p];if(!d&&v?.groupId&&(d=!0),!g&&Array.isArray(v?.base?.paths)&&v.base.paths.length>1&&(g=!0),d&&g)break}return{canEdit:r,canSelect:s,canUseHistory:a,canUndo:a&&(i.cursor??0)>0,canRedo:a&&(i.cursor??0)<(i.size??0),activeCount:n.length,activePlaneCount:o.length,hasGroupedSelection:d,hasMultiPathSelection:g,hasStyleClipboard:!!e?.styleClipboard,activeLayerId:u,layerCount:c.length,layerIndex:l,activeGroupId:e?.getActiveGroupId?.()??null,command:e?.command??"Select",mode:e?.mode??"Edit"}},isActionDisabled:(e,n=t.getInteractionState())=>e?Oe.has(e)?e==="setUndo"?!n.canUndo:!n.canRedo:Ke.has(e)&&!n.canEdit?!0:e==="setPasteStyle"?n.activeCount===0||!n.hasStyleClipboard:!!(Ve.has(e)&&n.activeCount===0||je.has(e)&&n.activePlaneCount<3||Ue.has(e)&&n.activePlaneCount<2||$e.has(e)&&!n.hasGroupedSelection||qe.has(e)&&!n.hasMultiPathSelection):!1,updateSwitchButtons:()=>{let{switchButtons:e}=t.ui.els;if(!e?.length)return;let n=`set${t.panel.command??"Select"}`,o=t.ui.statusCache;if(o.switchId!==n){o.switchId=n;for(let i=0;i<e.length;i++){let r=e[i];r.classList.toggle("active",r.id===n)}}},updateModeButtons:()=>{let{modeButtons:e}=t.ui.els;if(!e?.length)return;let n=`setMode${t.panel.mode??"Edit"}`,o=t.ui.statusCache;if(o.modeId!==n){o.modeId=n;for(let i=0;i<e.length;i++){let r=e[i];P(r,r.id===n,"active")}}},updateActionButtons:(e=t.getInteractionState())=>{let n=t.ui.statusCache,o=et(e);if(n.actionState===o)return;n.actionState=o;let{commandButtons:i,quickActions:r}=t.ui.els,s=[i,r];for(let a=0;a<s.length;a++){let c=s[a]??S;for(let u=0;u<c.length;u++){let l=c[u],d=l?.dataset?.action||l?.id||"";d&&ve(l,t.isActionDisabled(d,e))}}},isPropertyInputReadOnly:(e,n=t.getInteractionState())=>{if(!e)return!1;let o=e.name??"";return!n.canEdit&&(!!e.dataset?.shapeType||o.startsWith("map."))},updatePropertyInputStates:(e=t.getInteractionState())=>{let n=t.ui.statusCache,o=tt(e);if(n.propertyState===o)return;n.propertyState=o;let i=t.ui.els.propertyInputs??S;for(let r=0;r<i.length;r++){let s=i[r];x(s,t.isPropertyInputReadOnly(s,e))}},isLayerActionDisabled:(e,n=t.getInteractionState())=>!e||e==="select"?!1:n.canEdit?e==="delete"?n.layerCount<=1||!n.activeLayerId:e==="rename"?!n.activeLayerId:e==="moveSelected"?n.activeCount===0||!n.activeLayerId:e==="up"?n.layerIndex<=0:e==="down"?n.layerIndex<0||n.layerIndex>=n.layerCount-1:!1:!0,isGroupActionDisabled:(e,n=t.getInteractionState())=>e?e==="select"?!n.canSelect:n.canEdit?e==="group"?n.activePlaneCount<2:e==="rename"?!n.activeGroupId:e==="ungroup"||e==="delete"?!n.hasGroupedSelection&&!n.activeGroupId:!1:!0:!1,updateSettingsActionStates:(e=t.getInteractionState())=>{let n=t.ui.statusCache,o=nt(e);if(n.settingsState===o)return;n.settingsState=o;let i=t.getSettingsControls("layer");if(i){let s=i.buttons;for(let c=0;c<s.length;c++){let u=s[c];x(u,t.isLayerActionDisabled(u.dataset.layerAction,e))}let a=i.inputs;for(let c=0;c<a.length;c++)x(a[c],!e.canEdit)}let r=t.getSettingsControls("group");if(r){let s=r.buttons;for(let c=0;c<s.length;c++){let u=s[c];x(u,t.isGroupActionDisabled(u.dataset.groupAction,e))}let a=r.inputs;for(let c=0;c<a.length;c++)x(a[c],!e.canEdit)}},updateStatusBar:()=>{let e=t.getInteractionState();t.updateToggleButtons(),t.updateSwitchButtons(),t.updateModeButtons(),t.updateActionButtons(e),t.updatePropertyInputStates(e),t.updateSettingsActionStates(e),t.updateMapMeta()},syncUiAfterDataLoad:()=>{if(t.resetCountCache(),t.syncThemeSelect(),t.setMapRectForm(t.panel),!t.shouldRefreshSettingsLists()){t.scheduleStatusBar();return}t.setSettingsForm(t.panel),t.refreshLayerAndGroupList()},getPersistedPanelData:()=>t.panel.getData({clone:!1}),parsePanelDataString:e=>{let n=JSON.parse(e);if(!n||typeof n!="object")throw new Error("地图数据无效");return n},applyLoadedPanelData:(e,n={})=>(t.panel.setData(e),t.panel.setScalingNormal(),t.resetCountCache(),t.syncUiAfterDataLoad(),!0),ensureToastHost:()=>{if(t.ui.toastHost&&t.ui.toastHost.isConnected)return t.ui.toastHost;let e=document.getElementById("toastStack");return e||(e=document.createElement("div"),e.id="toastStack",e.className="toast-stack",e.setAttribute("aria-live","polite"),e.setAttribute("aria-relevant","additions"),document.body.appendChild(e)),t.ui.toastHost=e,e},notify:(e,n="info",o={})=>{let i=t.ensureToastHost(),r=Ee.has(n)?n:"info",s=document.createElement("div");s.className=`toast toast-${r}`,s.setAttribute("role",r==="error"?"alert":"status"),s.setAttribute("aria-live",r==="error"?"assertive":"polite");let a=document.createElement("span");a.className="toast-indicator";let c=document.createElement("div");c.className="toast-text",h(c,e);let u=document.createElement("button");u.type="button",u.className="toast-close",u.setAttribute("aria-label","关闭"),h(u,"×"),s.append(a,c,u),i.appendChild(s);let l=window.requestAnimationFrame(()=>{l=0,s.isConnected&&s.classList.add("show")}),d=Number.isFinite(o&&o.duration)?o.duration:r==="error"?6e3:3200,g=null,p=null,v=f,y=f,T=f,te=()=>{g&&(window.clearTimeout(g),g=null),p&&(window.clearTimeout(p),p=null)},ne=_(()=>{l&&(window.cancelAnimationFrame(l),l=0),te(),v(),y(),T(),s.remove()}),oe=()=>{s.dataset.state!=="leaving"&&(g&&(window.clearTimeout(g),g=null),s.dataset.state="leaving",s.classList.remove("show"),p=window.setTimeout(()=>{p=null,s.remove(),ne()},200))};v=C(u,"click",oe),d>0&&(g=window.setTimeout(oe,d),y=C(s,"pointerenter",()=>{g&&(window.clearTimeout(g),g=null)}),T=C(s,"pointerleave",()=>{g||(g=window.setTimeout(oe,d))}))},ensureConfirmDialog:()=>{if(t.ui.confirmDialog&&t.ui.confirmDialog.dialog)return t.ui.confirmDialog;let e=document.getElementById("dialogConfirm")||null;if(!e)return null;let n=t.getField(e,"message")||e.querySelector(".dialog-message")||e.querySelector('[data-role="message"]'),o=t.getField(e,"ok"),i=t.getField(e,"cancel"),r={dialog:e,messageEl:n,okButton:o,cancelButton:i,resolving:!1,settle:null};return t.ui.confirmDialog=r,r},alert:(e,n={})=>{let o=n.type||"warning";return t.notify(e,o,n),!0},confirm:(e,n={})=>new Promise(o=>{let i=()=>{t.notify(e,n.type||"warning",n),o(!1)},r=t.ensureConfirmDialog();if(!r||typeof r.dialog.showModal!="function"){i();return}r.resolving&&(r.settle?r.settle(!1,"cancel"):r.dialog.close()),r.resolving=!0,h(r.messageEl,e);let s=n.okText||"确定",a=n.cancelText||"取消";h(r.okButton,s),h(r.cancelButton,a);let c=f,u=f,l=f,d=!1,g=()=>{r.resolving=!1,r.settle===p&&(r.settle=null),c(),u(),l()},p=(te,ne)=>{d||(d=!0,g(),r.dialog.open&&r.dialog.close(ne),o(te))},v=()=>p(!0,"ok"),y=()=>p(!1,"cancel"),T=()=>p(!1);r.settle=p,r.okButton&&(c=C(r.okButton,"click",v,{once:!0})),r.cancelButton&&(u=C(r.cancelButton,"click",y,{once:!0})),l=C(r.dialog,"close",T,{once:!0}),r.dialog.open||r.dialog.showModal(),t.focusDialog(r.dialog)}),requireSelection:(e,n="请先选择一条记录")=>!e||e.selected<0||e.selected>=e.list.length?(t.notify(n,"warning"),null):e.list[e.selected],setMonitorButtonState:e=>{let n=t.ui.els.monitorButton;n&&(h(n,e?"停止监控":"启动监控"),P(n,e))},updateTableCell:(e,n,o)=>{let i=e.children[n];i||(i=t.createCell(""),e.appendChild(i)),h(i,o)},patchTableRows:(e,n,o,i)=>t.patchNodeList(e,n,o,()=>document.createElement("tr"),i),patchNodeList:(e,n,o,i,r)=>{let s=typeof e=="string"?document.getElementById(e):e;if(!s)return null;let a=Array.isArray(n)?n:[];if(!a.length)return s.childNodes.length&&s.replaceChildren(),s;let c=new Map;for(let d=0;d<s.children.length;d++){let g=s.children[d],p=String(g?.dataset?.rowKey??"").trim();p&&c.set(p,g)}let u=new Array(a.length),l=new Set;for(let d=0;d<a.length;d++){let g=a[d],p=String(o?.(g,d)??"").trim()||`row-${d}`,v=l.has(p)?`${p}#${d}`:p;l.add(p);let y=c.get(v)??i(g,d);if(c.delete(v),!y)continue;y.dataset.rowKey!==v&&(y.dataset.rowKey=v);let T=y;y=r?.(y,g,d)??y,y!==T&&T.isConnected&&T.remove(),y?.dataset&&y.dataset.rowKey!==v&&(y.dataset.rowKey=v),u[d]=y}for(let d of c.values())d.remove();for(let d=0;d<u.length;d++){let g=u[d];g&&s.children[d]!==g&&s.insertBefore(g,s.children[d]??null)}return s},applyThemeOverride:()=>{let e=t.panel.getTheme();t.panel.setTheme(e,{force:!0,isPreserveStyle:!1}),t.scheduleStatusBar()},setPointerDownAction:e=>{if(e.button===2){let n=t.ui.els.selectButton;n&&t.setButtonActive(n),t.panel.setSelect()}},getInputValue:e=>{if(e.tagName==="SELECT"&&e.multiple){let n=e.selectedOptions,o=new Array(n.length);for(let i=0;i<n.length;i++)o[i]=n[i].value;return o}if(e.type==="number"){let n=e.valueAsNumber;if(!Number.isFinite(n))return null;let o=n,i=e.min===""?NaN:Number(e.min),r=e.max===""?NaN:Number(e.max);return Number.isFinite(i)&&(o=Math.max(o,i)),Number.isFinite(r)&&(o=Math.min(o,r)),o}else return e.type==="checkbox"?e.checked:e.value},setInputValue:(e,n)=>{if(e.tagName==="SELECT"&&e.multiple){let o=new Set;if(Array.isArray(n))for(let r=0;r<n.length;r++)o.add(String(n[r]));let i=e.options;for(let r=0;r<i.length;r++){let s=i[r],a=o.has(s.value);s.selected!==a&&(s.selected=a)}return}if(e.type==="number")I(e,Number.isFinite(n)?n:"");else if(e.type==="checkbox")Xe(e,!!n);else if(Array.isArray(n)){let o=e.dataset&&e.dataset.list;I(e,o==="lines"?n.join(`
`):n.join(","))}else I(e,n??"")},updateCountBadge:(e,n)=>{if(!e||!e.dataset)return;let o=e.dataset.countTarget;if(!o)return;let i=F(t.ui,"countTargetCache"),r=i.get(o);if(r?.isConnected===!1&&(i.delete(o),r=null),r||(r=document.getElementById(o),r&&i.set(o,r)),!r)return;let s=Array.isArray(n)?n.length:0;h(r,`${s} 项`)},syncThemeSelect:()=>{let e=t.ui.els.themeSelect;!e||!t.panel||t.setInputValue(e,t.panel.getTheme())},applyUiTheme:e=>{let n=document.documentElement;return n.dataset.theme===e||(n.dataset.theme=e),e},getPropertyTabState:(e,n=!1)=>{if(!e)return null;let o=t.ui.propertyTabState;if(o instanceof WeakMap||(o=t.ui.propertyTabState=new WeakMap),!n){let r=o.get(e);if(r)return r}let i={header:e.querySelector(":scope > .property-tab-header"),forms:b(":scope > form",e),buttons:[],activeIndex:-1};return o.set(e,i),i},handleThemeChange:(e,n,o)=>{let i=t.applyUiTheme(e),r=t.ui.els.themeSelect;r&&t.setInputValue(r,i)},setButtonActive:e=>{if(!e||!e.classList.contains("switch"))return;let n=t.ui.els.switchButtons;for(let o=0;o<n.length;o++)n[o].classList.remove("active");e.classList.add("active")},setFormActive:(e,n)=>{h(t.ui.els.propertyTitle,e);let o=t.ui.els.formTabs??S;for(let r=0;r<o.length;r++)ee(o[r],!0);let i=t.getFormTab(n);i&&(ee(i,!1),t.setPropertyTab(i,0))},getFormTab:e=>{if(!e)return null;let n=F(t.ui,"formTabCache");if(n.has(e)){let i=n.get(e);if(i?.isConnected!==!1)return i;n.delete(e)}let o=document.getElementById(e);return o&&n.set(e,o),o},getFormInputs:e=>{if(!e)return S;let n=F(t.ui,"formInputsCache"),o=t.getFormTab(e);if(!o)return n.delete(e),S;let i=n.get(e);if(i?.tab===o)return i.list;let r=b(".bind",o);return n.set(e,{tab:o,list:r}),r},getFormInput:(e,n)=>{if(!e||!n)return null;let o=F(t.ui,"formInputMapCache"),i=`${e}:${n}`;if(o.has(i)){let a=o.get(i);if(a?.isConnected)return a;o.delete(i)}let r=t.getFormInputs(e),s=null;for(let a=0;a<r.length;a++)if(r[a].name===n){s=r[a];break}return s&&o.set(i,s),s},cloneData:e=>structuredClone(e),ensureList:e=>Array.isArray(e)?e:[],getRuntimeSelectList:e=>it?.[e]??S,buildOptionEntries:(e,n)=>{let o=n||{},i=o.valueKey||"value",r=o.textKey||"text",s=Array.isArray(o.fallback)?o.fallback:[],a=new Set,c=[],u=l=>{let d,g;if(typeof l=="string"||typeof l=="number")d=String(l),g=String(l);else if(l&&typeof l=="object")d=l[i]??l.value??l.id??l.code??"",g=l[r]??l.text??l.name??d;else return;if(d===""&&g==="")return;let p=String(d);a.has(p)||(a.add(p),c.push({value:d??"",text:g??""}))};if(Array.isArray(e))for(let l=0;l<e.length;l++)u(e[l]);if(s.length)for(let l=0;l<s.length;l++)u(s[l]);return c},createOption:(e,n)=>{let o=document.createElement("option");return o.value=e??"",h(o,n),o},syncOptionList:(e,n,o,i=!1,r=null)=>{if(!e)return null;let s=o||{},a=t.buildOptionEntries(n,s),c=i?e.value:"",u=String(c),l=document.createDocumentFragment();r!==null&&l.appendChild(t.createOption("",r));let d=!c;for(let g=0;g<a.length;g++){let p=a[g];l.appendChild(t.createOption(p.value,p.text)),!d&&String(p.value)===u&&(d=!0)}return d||l.appendChild(t.createOption(c,c)),e.replaceChildren(l),c&&I(e,c),e},fillSelectOptions:(e,n,o)=>{let i=o||{};return t.syncOptionList(e,n,i,!0,i.placeholder??"")},fillDatalistOptions:(e,n,o)=>t.syncOptionList(e,n,o),fillSelectOrDatalist:(e,n,o)=>{if(!e)return null;if(e.tagName==="SELECT")return t.fillSelectOptions(e,n,o);let i=e.getAttribute("list");if(!i)return null;let r=F(t.ui,"datalistCache"),s=r.get(i);return s?.isConnected===!1&&(r.delete(i),s=null),s||(s=document.getElementById(i),s&&r.set(i,s)),t.fillDatalistOptions(s,n,o)},initActionFormSources:()=>{let e=t.dialogs.actionForm;if(e.sourcesReady)return;let n=t.getDialogForm(e);if(!n)return;e.sourcesReady=!0;let o=t.getField(n,"actionType"),i=t.getField(n,"blockingType"),r=t.getRuntimeSelectList("actionTypes"),s=t.getRuntimeSelectList("blockingTypes");t.fillSelectOrDatalist(o,r,{valueKey:"code",textKey:"name",placeholder:"请选择",fallback:S}),t.fillSelectOrDatalist(i,s,{valueKey:"code",textKey:"name",placeholder:"请选择",fallback:S}),t.initActionParamKeySources()},initActionParamKeySources:()=>{let e=t.dialogs.actionParameterForm;if(e.keysReady)return;let n=t.getDialogForm(e);if(!n)return;e.keysReady=!0;let o=t.getField(n,"key"),i=t.getRuntimeSelectList("actionParamKeys");t.fillSelectOrDatalist(o,i,{fallback:S})},createId:()=>L.getGuid(),formatNumber:e=>{let n=Number(e);return Number.isFinite(n)?String(n):""},createCell:e=>{let n=document.createElement("td");return h(n,e),n},getField:(e,n)=>{if(!e||!n)return null;let o=t.ui.fieldCache;o instanceof WeakMap||(o=t.ui.fieldCache=new WeakMap);let i=o.get(e);if(i||(i=new Map,o.set(e,i)),i.has(n)){let s=i.get(n);if(s?.isConnected!==!1&&e.contains(s))return s;i.delete(n)}let r=e.querySelector(`[name="${n}"]`);return r&&i.set(n,r),r},getFieldText:(e,n,o=!1)=>{let i=t.getField(e,n)?.value??"";return o?i.trim():i},setFieldText:(e,n,o="")=>{let i=t.getField(e,n);I(i,o)},getFieldNumber:(e,n,o=0)=>{let i=t.getField(e,n)?.valueAsNumber;return Number.isFinite(i)?i:o},setFieldNumber:(e,n,o,i=0)=>{let r=t.getField(e,n);I(r,Number.isFinite(o)?o:i)},bindModalOkCancel:(e,n)=>{let o=t.getField(e,"ok"),i=t.getField(e,"cancel");K(e,"modalOk",o,"click",n),K(e,"modalCancel",i,"click",()=>e.close())},createDialogState:(e,n={})=>({dialog:document.getElementById(e),...n}),createListDialogState:(e,n,o={})=>({dialog:document.getElementById(e),list:[],selected:-1,onSave:f,onClose:f,render:n,...o}),getDialogRender:(e,n)=>typeof n=="function"?n:typeof e?.render=="function"?e.render:f,getDialogPart:(e,n,o)=>{if(!e?.dialog)return null;let i=e.parts??(e.parts={});if(n in i&&(i[n]===null||i[n]?.isConnected&&e.dialog.contains(i[n])))return i[n];let r=e.dialog.querySelector(o);return i[n]=r,r},getDialogForm:e=>t.getDialogPart(e,"form","form"),getKeyValueFields:e=>({key:t.getDialogPart(e,"key",'[name="key"]'),value:t.getDialogPart(e,"value",'[name="value"]')}),setFieldDisabled:(e,n)=>{let o=n===!0;e&&e.disabled!==o&&(e.disabled=o)},getDialogTableBody:e=>t.getDialogPart(e,"tbody","tbody"),getDialogEmptyState:e=>t.getDialogPart(e,"empty",".dialog-empty"),getPanelBody:e=>{let n=e?.querySelector(".panel-body");return n?n.querySelector(".tabProperty")||n:null},getDialogActionButton:(e,n)=>{if(!e||!n)return null;let o=t.ui.dialogActionButtonCache;o instanceof WeakMap||(o=t.ui.dialogActionButtonCache=new WeakMap);let i=o.get(e);i||(i=new Map,o.set(e,i));let r=i.get(n);if(r?.isConnected!==!1&&e.contains(r))return r;let s=e.querySelector(`[data-action="${n}"]`);return s?i.set(n,s):i.delete(n),s},bindDialogButton:(e,n,o)=>{let i=e?.querySelector(n);!i||typeof o!="function"||t.bindDialogListener(i,"click",o)},renderDialogTable:(e,n)=>{let o=t.getDialogTableBody(e),i=t.getDialogEmptyState(e),r=t.ensureList(e.list);e.list=r,e.selected>=r.length&&(e.selected=-1),t.patchTableRows(o,r,(s,a)=>`dialog-row-${a}`,(s,a,c)=>{s.dataset.index=c;let u=c===e.selected;s.classList.toggle("is-selected",u),s.setAttribute("aria-selected",u?"true":"false"),s.tabIndex=u?0:-1,n(s,a,c)}),Y(i,r.length?"none":"block")},bindDialogRowSelection:(e,n=e?.render)=>{if(!e||!e.dialog)return;let o=t.getDialogTableBody(e);if(!o)return;let i=t.getDialogRender(e,n);t.bindDialogListener(o,"click",r=>{let s=D(r.target,"tr");s&&(e.selected=Number(s.dataset.index),i())})},openListDialog:(e,n,o,i,r=e?.render)=>{if(!e||!e.dialog)return;let s=t.getDialogRender(e,r);e.list=t.ensureList(t.cloneData(n)),e.selected=-1,e.onSave=o||f,"onClose"in e&&(e.onClose=i||f),e.render=s,s(),t.openDialog(e.dialog)},deleteSelectedDialogItem:(e,n=e?.render,o="确定删除所选项吗?")=>{if(!t.requireSelection(e))return;let i=t.getDialogRender(e,n);t.confirm(o).then(r=>{r&&(e.list.splice(e.selected,1),e.selected=-1,i())})},saveDialogList:(e,n,o=!0)=>{n.onSave(t.cloneData(n.list)),e.close(),"onClose"in n&&n.onClose(o)},closeDialogList:(e,n,o=!1)=>{e.close(),"onClose"in n&&n.onClose(o)},openListFormDialog:(e,n,o,i,r,s)=>{e.close();let a=()=>{s(),t.openDialog(e)};n(...o==null?[i,r,a]:[o,i,r,a])},renderDialogTableByColumns:(e,n)=>{t.renderDialogTable(e,(o,i,r)=>{for(let s=0;s<n.length;s++)t.updateTableCell(o,s,n[s](i,r));for(;o.children.length>n.length;)o.removeChild(o.lastElementChild)})},renderKeyValueDialogList:e=>{t.renderDialogTableByColumns(e,[n=>n.key||"",n=>n.value||""])},editDialogListItem:(e,n,o,i,r,s)=>{let a=t.requireSelection(n);a&&t.openListFormDialog(e,o,i,t.cloneData(a),c=>{r(c,n)},s)},bindListDialog:(e,n={})=>{if(!e?.dialog)return;let o=e.dialog,i=t.getDialogRender(e,n.render);e.render=i,t.bindDialogRowSelection(e,i),typeof n.add=="function"&&t.bindDialogButton(o,'[data-action="add"]',n.add),typeof n.edit=="function"&&t.bindDialogButton(o,'[data-action="edit"]',n.edit),typeof n.delete=="function"&&t.bindDialogButton(o,'[data-action="delete"]',n.delete),t.bindDialogButton(o,'[name="ok"]',n.ok||(()=>t.saveDialogList(o,e,n.okCloseValue??!0))),t.bindDialogButton(o,'[name="cancel"]',n.cancel||(()=>t.closeDialogList(o,e,n.cancelCloseValue??!1))),n.navigation!==!1&&t.bindDialogNavigation(e,i)},bindKeyValueListDialog:(e,n,o=e?.render)=>{if(!e?.dialog)return;let i=e.dialog,r=t.getDialogRender(e,o);t.bindListDialog(e,{render:r,add:()=>{t.openListFormDialog(i,n,"add",{key:"",value:""},s=>{for(let a=0;a<e.list.length;a++)if(e.list[a].key===s.key){t.notify("添加项重复","warning");return}e.list.push(s)},r)},edit:()=>{t.editDialogListItem(i,e,n,"edit",s=>{e.list[e.selected]=s},r)},delete:()=>{t.deleteSelectedDialogItem(e,r)}})},captureFocus:()=>{let e=document.activeElement;e&&e!==document.body&&(t.ui.lastActiveElement=e)},restoreFocus:()=>{let e=t.ui.lastActiveElement;e&&e.focus(),t.ui.lastActiveElement=null},focusDialog:e=>{if(!e)return;let n=e.querySelector("[autofocus]")||e.querySelector("input, select, textarea, button, [tabindex]");if(n){n.focus();return}e.focus()},openDialog:e=>{if(!(!e||typeof e.showModal!="function")){if(t.captureFocus(),e.open){t.focusDialog(e);return}e.showModal(),t.focusDialog(e)}},bindDialogListener:(e,n,o,i)=>C(e,n,o,i),bindDialogNavigation:(e,n=e?.render)=>{let o=e.dialog,i=t.getDialogRender(e,n);t.bindDialogListener(o,"keydown",r=>{let s=r.key,a=r.target.tagName;if(a==="INPUT"||a==="TEXTAREA"||a==="SELECT")return;if(s==="Enter"){let d=t.getDialogActionButton(o,"edit");d&&e.selected>=0&&(r.preventDefault(),d.click());return}if(s==="Delete"||s==="Backspace"){let d=t.getDialogActionButton(o,"delete");d&&e.selected>=0&&(r.preventDefault(),d.click());return}if(s!=="ArrowDown"&&s!=="ArrowUp"&&s!=="Home"&&s!=="End")return;let c=t.ensureList(e.list);if(!c.length)return;r.preventDefault();let u=e.selected;if((!Number.isFinite(u)||u<0)&&(u=0),s==="ArrowDown"&&(u=Math.min(c.length-1,u+1)),s==="ArrowUp"&&(u=Math.max(0,u-1)),s==="Home"&&(u=0),s==="End"&&(u=c.length-1),u===e.selected)return;e.selected=u,i();let l=o.querySelector(`tbody tr[data-index="${u}"]`);l&&l.focus()})},initPropertyTabs:()=>{var o;let e=t.ui.els.propertyTabs??S,n=(o=t.ui.handlers).propertyTabClick??(o.propertyTabClick=i=>{let r=D(i.target,".property-tab-button");if(!r)return;let s=D(r,".tabProperty"),a=Number(r.dataset.tabIndex);s&&Number.isInteger(a)&&t.setPropertyTab(s,a)});for(let i=0;i<e.length;i++){let r=e[i],s=t.getPropertyTabState(r,!0),a=s.forms;if(a.length<=1){s.header&&K(s.header,"propertyTabClick",null,"click",null),s.header?.remove(),s.header=null,s.buttons=[],s.activeIndex=-1;continue}let c=s.header;c?c.replaceChildren():(c=document.createElement("div"),c.className="property-tab-header",r.insertBefore(c,r.firstChild)),s.header=c,s.buttons=new Array(a.length);for(let u=0;u<a.length;u++){let d=a[u].querySelector("legend"),g=d?d.textContent.trim():`Tab ${u+1}`,p=document.createElement("button");p.type="button",p.className="property-tab-button",p.dataset.tabIndex=String(u),h(p,g),c.appendChild(p),s.buttons[u]=p}K(c,"propertyTabClick",c,"click",n),t.setPropertyTab(r,0)}},initFormDefaults:()=>{let e=t.ui.els.alphaInputs??S;for(let o=0;o<e.length;o++){let i=e[o];(!i.step||i.step==="any")&&(i.step="0.01")}let n=t.ui.els.numberInputs??S;for(let o=0;o<n.length;o++){let i=n[o];i.inputMode||(i.inputMode="decimal")}},initFormAccessibility:()=>{let e=t.ui.els.propertyLabels??S;for(let n=0;n<e.length;n++){let o=e[n],i=o.getAttribute("for");if(!i)continue;let r=D(o,"div")||o.parentElement,s=t.getField(r,i);if(!s&&r){let a=r.querySelectorAll("input, select, textarea, button");a.length===1&&(s=a[0])}if(s)if(s.id)o.setAttribute("for",s.id);else{let a=D(o,".tabProperty"),u=`${a&&a.id?`${a.id}-`:""}${i}`.replace(/\s+/g,"-"),l=u,d=1;for(;document.getElementById(l);)l=`${u}-${d}`,d+=1;s.id=l,o.setAttribute("for",l)}}},setPropertyTab:(e,n)=>{if(!e)return;let o=t.getPropertyTabState(e);if(!o)return;let i=o.forms,r=o.buttons;if(!i.length)return;let s=Math.max(0,Math.min(n,i.length-1));if(o.activeIndex!==s){o.activeIndex=s;for(let a=0;a<i.length;a++)i[a].classList.toggle("active",a===s);for(let a=0;a<r.length;a++)r[a].classList.toggle("active",a===s)}},ensurePropertyTabActive:(e,n=0)=>{let o=typeof e=="string"?t.getFormTab(e):e,i=t.getPropertyTabState(o);i&&i.activeIndex<0&&t.setPropertyTab(o,n)},getFormActionKey:(e,n)=>`${e||"settings"}:${n||""}`,registerFormAction:(e,n,o)=>{!n||typeof o!="function"||t.ui.formActionMap.set(t.getFormActionKey(e,n),o)},getBindInput:e=>{if(!e)return null;let n=e.classList&&e.classList.contains("bind")?e:D(e,".bind");return n&&(D(n,".property")||D(n,"#settingsPanel"))?n:null},dispatchFormInput:e=>{if(e.dataset.setting==="true"){t.setSettingParam(e);return}let n=e.dataset.shapeType;n&&t.setInputParam(e,n)},handleFormInput:e=>{let n=t.getBindInput(e.target);n&&n.tagName!=="SELECT"&&t.queueFormInput(n)},handleFormChange:e=>{let n=t.getBindInput(e.target);n&&(t.scheduleHistory(),n.tagName==="SELECT"&&t.dispatchFormInput(n))},handleFormClick:e=>{let n=t.getBindInput(e.target);if(!n)return;let o=t.ui.formActionMap.get(t.getFormActionKey(n.dataset.shapeType,n.name));o&&(e.preventDefault(),o(n.dataset.shapeType))},bindFormEvents:()=>{if(t.ui.formEventsBound)return;let{propertyPanel:e,settingsPanel:n}=t.ui.els;if(!e&&!n)return;let o=i=>{for(let r=0;r<ce.length;r++){let[s,a]=ce[r];C(i,s,t[a])}};e&&o(e),n&&n!==e&&o(n),t.ui.formEventsBound=!0},bindPanelAction:(e,n,o)=>{e.dataset.shapeType=n;let i=o&&o[e.name];i&&t.registerFormAction(n,e.name,i)},setInputParam:(e,n)=>{let o=t.getInputValue(e);e.type==="number"&&o===null||(n==="MapRect"?t.panel.setPanelValue(e.name,o):t.panel.setActiveShapeValue(e.name,o,n))},setSettingParam:e=>{let n=t.getInputValue(e);if(e.type==="number"&&n===null)return;if(e.name==="visual.theme"){if(n===t.panel.getTheme?.())return;t.panel.setTheme(n,{force:!0});return}let o=e.name;if(t.panel.setPanelValue(o,n),t.applySettingsRuleEffects(o,n,t.panel),t.shouldApplyVisualSettingsByName(o)){t.panel.applyVisualSettings(),t.updateSettingsState();return}t.shouldRefreshSettingsRulesByName(o)&&t.updateSettingsState()},setInputForm:(e,n,o)=>{let i=t.panel.getDeepValue(n,o);t.setInputValue(e,i),t.updateCountBadge(e,i)},setForm:(e,n,o)=>{t.setFormActive(e,n);let i=t.getFormInputs(n);for(let r=0;r<i.length;r++){let s=i[r];t.setInputForm(s,o,s.name)}t.updatePropertyInputStates()},setFormByType:(e,n)=>{let o=V.get(e);o&&t.setForm(o.title,o.tabId,n)},setSettingsForm:e=>{if(!e)return;let n=t.getFormInputs("tabSettings");for(let o=0;o<n.length;o++){let i=n[o];t.setInputForm(i,e,i.name)}t.updateSettingsState()},setMapRectForm:e=>{t.setForm(":地图 [ 矩形 ]","tabMapRect",e)},bindFormActionsBySchema:(e,n,o)=>{let i=t.getFormSchemaActions(o);t.bindPanelAction(e,n,i)},bindPanelInputsBySchema:(e,n,o)=>{t.bindPanelInputs(e,i=>t.bindFormActionsBySchema(i,n,o),n)},bindSettingsPanels:()=>{for(let e=0;e<Ae.length;e++){let[n,o,i]=Ae[e];if(typeof i=="string"){t.bindPanelInputsBySchema(n,o,i);continue}typeof i=="function"&&t.bindPanelInputs(n,i(t),o)}},getFormSchemaActions:e=>{let n=F(t.ui,"formActionSchemaMap");if(n.has(e))return n.get(e);let o=xe[e],i={};if(o&&typeof o=="object")for(let r in o){if(!Object.prototype.hasOwnProperty.call(o,r))continue;let s=t[o[r]];typeof s=="function"&&(i[r]=s)}return n.set(e,i),i},setSettingsEvent:e=>{e.dataset.setting="true"},bindPanelInputs:(e,n,o)=>{let i=t.getFormInputs(e);for(let r=0;r<i.length;r++){let s=i[r];Se(s),o&&(s.dataset.shapeType=o),n(s,o)}},getSettingsField:e=>{let n=F(t.ui,"settingsFieldCache"),o=t.getFormTab("tabSettings");if(!o)return n.delete(e),null;if(n.has(e)){let r=n.get(e);if(r?.isConnected!==!1&&o.contains(r))return r;n.delete(e)}let i=t.getField(o,e);return i&&n.set(e,i),i},setSettingsFieldDisabled:(e,n)=>{let o=t.getSettingsField(e);o&&x(o,n)},applySettingsRuleEffects:(e,n,o=t.panel)=>{if(o&&e==="visual.render.cull"&&Ie(n)){o.setPanelValue("visual.render.cullThreshold",0),o.setPanelValue("visual.render.cullPadding",0);let i=t.getSettingsField("visual.render.cullThreshold"),r=t.getSettingsField("visual.render.cullPadding");i&&t.setInputValue(i,0),r&&t.setInputValue(r,0)}},shouldApplyVisualSettingsByName:e=>!!e&&e.startsWith("visual.")&&!e.startsWith("visual.render."),shouldRefreshSettingsRulesByName:e=>!!e&&(e.startsWith("visual.")||e.startsWith("history.")),updateSettingsState:()=>{let e=t.panel,n=e?.visual??{},o=n.guides??{},i=n.render??{},r=o.enable!==!0,s=o.snapEnable!==!0,a=Ie(i.cull),c=i.dynamic===!1,u=c||i.segmented===!1,l=e?.history?.enable===!1,d=(typeof i.mode=="string"?i.mode.toLowerCase():"")!=="auto";t.setSettingsFieldDisabled("visual.guides.groupBounds",r),t.setSettingsFieldDisabled("visual.guides.align",r),t.setSettingsFieldDisabled("visual.guides.snapGrid",s),t.setSettingsFieldDisabled("visual.guides.snapMapBounds",s),t.setSettingsFieldDisabled("visual.guides.snapDistribution",s),t.setSettingsFieldDisabled("visual.guides.snapTolerance",s),t.setSettingsFieldDisabled("visual.render.boost",d),t.setSettingsFieldDisabled("visual.render.cullThreshold",a),t.setSettingsFieldDisabled("visual.render.cullPadding",a),t.setSettingsFieldDisabled("visual.render.segmented",c),t.setSettingsFieldDisabled("visual.render.segmentMax",u),t.setSettingsFieldDisabled("visual.render.dynamicKinds",c),t.setSettingsFieldDisabled("visual.render.dynamicTypes",c),t.setSettingsFieldDisabled("history.max",l),t.setSettingsFieldDisabled("history.fastPatch",l)},clearSearch:()=>{let e=t.ui.els.searchInput;if(!e)return;I(e,""),e.focus();let n=t.ui.searchState;n.keyword="",n.matches=[],n.index=0},setSearch:()=>{let e=t.ui.els.searchInput;if(!e)return;let n=e.value.trim();if(!n){t.notify("请输入编码名称","warning"),e.focus();return}let o=n.toLowerCase(),i=[],r=t.panel.allShapes;for(let u of r){if(!t.panel.isPlane(u))continue;let l=String(u.code&&u.code.text?u.code.text:"").toLowerCase(),d=String(u.name&&u.name.text?u.name.text:"").toLowerCase();(l.includes(o)||d.includes(o))&&i.push(u)}if(i.length===0){t.notify("未搜索到对象","warning");let u=t.ui.searchState;u.keyword=o,u.matches=[],u.index=0;return}let s=t.ui.searchState,a=0;s.keyword===o&&Array.isArray(s.matches)&&s.matches.length&&(a=(s.index+1)%i.length),s.keyword=o,s.matches=i,s.index=a;let c=i[a];t.panel.setActiveShapes(i),t.panel.setView(c),t.scheduleStatusBar(),t.notify(`找到 ${i.length} 个对象,定位第${a+1} 个`,"info",{duration:2200})},setOpenDatabase:()=>de(()=>{let e=localStorage.getItem(Pe);if(!e)return t.notify("本地存储中未找到地图数据。","warning"),!1;t.applyLoadedPanelData(t.parsePanelDataString(e))},"已从本地存储加载地图数据。","从本地存储加载地图数据失败。"),setSaveDatabase:()=>de(()=>{let e=JSON.stringify(t.getPersistedPanelData());localStorage.setItem(Pe,e),t.scheduleStatusBar()},"已将地图数据保存到本地存储。","保存地图数据到本地存储失败。"),initDialogs:()=>{if(t.dialogs)return;t.dialogs={actions:t.createListDialogState("dialogActions",t.renderActionsList),actionForm:t.createDialogState("dialogActionForm",{item:null,onSave:f,onClose:f,parameters:[]}),actionParameters:t.createListDialogState("dialogActionParameters",t.renderActionParametersList),actionParameterForm:t.createDialogState("dialogActionParameterForm",{item:null,onSave:f,onClose:f,isEdit:!1}),extends:t.createListDialogState("dialogExtends",t.renderExtendsList),extendForm:t.createDialogState("dialogExtendForm",{item:null,onSave:f,onClose:f,isEdit:!1}),controlPoints:t.createListDialogState("dialogControlPoints",t.renderControlPointsList),controlPointForm:t.createDialogState("dialogControlPointForm",{item:null,onSave:f,onClose:f}),nodePosition:t.createDialogState("dialogNodePosition"),trajectory:t.createDialogState("dialogTrajectory"),nodeIds:t.createListDialogState("dialogNodeIds",t.renderNodeIdsList)};let e=t.dialogs,n=document.querySelectorAll("dialog");for(let l=0;l<n.length;l++){let d=n[l];t.bindDialogListener(d,"cancel",g=>{g.preventDefault();let p=t.getField(d,"cancel");if(p){p.click();return}d.close()}),t.bindDialogListener(d,"close",()=>t.restoreFocus())}let o=e.actions,i=o.dialog;i&&t.bindListDialog(o,{add:()=>{t.openListFormDialog(i,t.openActionForm,"add",{actionId:t.createId(),actionParameters:[]},l=>{o.list.push(l)},o.render)},edit:()=>{t.editDialogListItem(i,o,t.openActionForm,"edit",l=>{o.list[o.selected]=l},o.render)},delete:()=>{t.deleteSelectedDialogItem(o)}});let r=e.actionForm.dialog;if(r){t.initActionFormSources();let l=e.actionForm,d=t.getDialogForm(l);d&&(t.bindDialogListener(t.getField(r,"ok"),"click",()=>{if(!d.reportValidity())return;let g=l,p=g.item||{};p.actionType=t.getFieldText(d,"actionType",!0),p.actionDescription=t.getFieldText(d,"actionDescription"),p.blockingType=t.getFieldText(d,"blockingType",!0),p.sortNumber=t.getFieldNumber(d,"sortNumber",0),p.actionParameters=t.cloneData(g.parameters),p.actionId||(p.actionId=t.createId()),g.onSave(p),r.close(),g.onClose(!0)}),t.bindDialogListener(t.getField(r,"cancel"),"click",()=>{let g=l;r.close(),g.onClose(!1)}),t.bindDialogListener(t.getField(r,"actionParameters"),"click",()=>{let g=l;t.captureActionForm(),r.close(),t.openActionParametersDialog(g.parameters,p=>{g.parameters=p},()=>{g.item.actionParameters=g.parameters,t.openActionForm(g.mode,g.item,g.onSave,g.onClose)})}))}let s=[{state:e.actionParameters,bind:l=>t.bindKeyValueListDialog(l,t.openActionParameterForm)},{state:e.extends,bind:l=>t.bindKeyValueListDialog(l,t.openExtendForm)},{state:e.controlPoints,bind:l=>t.bindListDialog(l,{edit:()=>{t.editDialogListItem(l.dialog,l,t.openControlPointForm,null,d=>{l.list[l.selected]=d},l.render)}})},{state:e.nodeIds,bind:l=>{t.bindDialogButton(l.dialog,'[name="ok"]',()=>l.dialog.close()),t.bindDialogButton(l.dialog,'[name="cancel"]',()=>l.dialog.close())}}];for(let l=0;l<s.length;l++){let d=s[l];d.state?.dialog&&d.bind(d.state)}e.actionParameterForm.dialog&&(t.initActionParamKeySources(),t.bindKeyValueForm("actionParameterForm")),e.extendForm.dialog&&t.bindKeyValueForm("extendForm");let u=e.controlPointForm.dialog;if(u){let l=e.controlPointForm,d=t.getDialogForm(l);d&&(t.bindDialogListener(t.getField(u,"ok"),"click",()=>{if(!d.reportValidity())return;let g=l,p=g.item||{};p.weight=t.getFieldNumber(d,"weight",0),g.onSave(p),u.close(),g.onClose(!0)}),t.bindDialogListener(t.getField(u,"cancel"),"click",()=>{let g=l;u.close(),g.onClose(!1)}))}},openActionsDialog:(e,n)=>{t.openListDialog(t.dialogs.actions,e,n)},renderActionsList:()=>{t.renderDialogTableByColumns(t.dialogs.actions,[e=>e.actionType||"",e=>e.blockingType||"",e=>t.formatNumber(e.sortNumber)])},openActionForm:(e,n,o,i)=>{let r=t.dialogs.actionForm;r.mode=e,r.item=t.cloneData(n)||{},r.onSave=o||f,r.onClose=i||f,r.parameters=t.ensureList(r.item.actionParameters);let s=t.getDialogForm(r);s&&(t.setFieldText(s,"actionType",r.item.actionType),t.setFieldText(s,"actionDescription",r.item.actionDescription),t.setFieldText(s,"blockingType",r.item.blockingType),t.setFieldNumber(s,"sortNumber",Number(r.item.sortNumber),0),t.setFieldText(s,"actionId",r.item.actionId),t.updateActionParameterCount(),t.openDialog(r.dialog))},updateActionParameterCount:()=>{let e=t.dialogs.actionForm,n=t.ensureList(e.parameters).length,o=t.getDialogPart(e,"actionParametersCount","#actionParametersCount");h(o,`${n} 项`)},captureActionForm:()=>{let e=t.dialogs.actionForm;if(!e.item)return;let n=t.getDialogForm(e);n&&(e.item.actionType=t.getFieldText(n,"actionType",!0),e.item.actionDescription=t.getFieldText(n,"actionDescription"),e.item.blockingType=t.getFieldText(n,"blockingType",!0),e.item.sortNumber=t.getFieldNumber(n,"sortNumber",0),e.item.actionId=t.getFieldText(n,"actionId"))},openActionParametersDialog:(e,n,o)=>{t.openListDialog(t.dialogs.actionParameters,e,n,o)},renderActionParametersList:()=>{t.renderKeyValueDialogList(t.dialogs.actionParameters)},openKeyValueForm:(e,n,o,i,r)=>{let s=t.dialogs[e];if(!s||!s.dialog||(s.isEdit=n==="edit",s.item=t.cloneData(o)||{},s.onSave=i||f,s.onClose=r||f,!t.getDialogForm(s)))return;let c=t.getKeyValueFields(s);!c.key||!c.value||(I(c.key,s.item.key||""),t.setFieldDisabled(c.key,s.isEdit),I(c.value,s.item.value||""),t.openDialog(s.dialog))},bindKeyValueForm:e=>{let n=t.dialogs[e];if(!n||!n.dialog)return;let o=n.dialog,i=t.getDialogForm(n);i&&(t.bindDialogListener(t.getField(o,"ok"),"click",()=>{if(!i.reportValidity())return;let r=n.item||{},s=t.getKeyValueFields(n);r.key=s.key?.value.trim()??"",r.value=s.value?.value??"",n.onSave(r),o.close(),n.onClose(!0)}),t.bindDialogListener(t.getField(o,"cancel"),"click",()=>{o.close(),n.onClose(!1)}))},openActionParameterForm:(e,n,o,i)=>{t.openKeyValueForm("actionParameterForm",e,n,o,i)},openExtendsDialog:(e,n)=>{t.openListDialog(t.dialogs.extends,e,n)},renderExtendsList:()=>{t.renderKeyValueDialogList(t.dialogs.extends)},openExtendForm:(e,n,o,i)=>{t.openKeyValueForm("extendForm",e,n,o,i)},openControlPointsDialog:(e,n,o)=>{t.openListDialog(t.dialogs.controlPoints,e,n,o)},renderControlPointsList:()=>{t.renderDialogTableByColumns(t.dialogs.controlPoints,[e=>t.formatNumber(e.x),e=>t.formatNumber(e.y),e=>t.formatNumber(e.weight)])},openNodeIdsDialog:e=>{t.openListDialog(t.dialogs.nodeIds,e)},renderNodeIdsList:()=>{let e=t.dialogs.nodeIds;!e||!e.dialog||t.renderDialogTableByColumns(e,[(n,o)=>String(o+1),n=>n==null?"":String(n)])},updateNodeIdsCount:(e,n)=>{let o=V.get(e);if(!o)return;let i=t.getFormInput(o.tabId,"data.nodeIds");i&&t.updateCountBadge(i,n)},openControlPointForm:(e,n,o)=>{let i=t.dialogs.controlPointForm;i.item=t.cloneData(e)||{},i.onSave=n||f,i.onClose=o||f;let r=t.getDialogForm(i);if(r){for(let s=0;s<ue.length;s++){let a=ue[s];t.setFieldNumber(r,a,Number(i.item[a]),0)}t.openDialog(i.dialog)}},setNodeIdsList:e=>{let n=t.panel.getActiveShapeLast(!1);if(!n)return;e&&e.startsWith("Zone")&&t.panel.setZoneNodes(n);let o=t.cloneData(t.panel.getDeepValue(n,"data.nodeIds"))||[];t.updateNodeIdsCount(e,o),t.openNodeIdsDialog(o)},setNodePosition:e=>{let n=t.panel.getActiveShapeLast(!1);if(!n)return;let o=t.cloneData(t.panel.getDeepValue(n,"data.nodePosition"))||{};t.initDialogs();let r=t.dialogs.nodePosition?.dialog;if(r){t.bindModalOkCancel(r,()=>{for(let s=0;s<G.length;s++){let a=G[s];o[a]=t.getFieldNumber(r,a,0)}o.mapId=t.getFieldText(r,"mapId"),o.mapDescription=t.getFieldText(r,"mapDescription"),t.panel.setActiveShapeValue("data.nodePosition",o,e)&&t.scheduleHistory(),r.close()});for(let s=0;s<G.length;s++){let a=G[s];t.setFieldNumber(r,a,o[a],0)}t.setFieldText(r,"mapId",o.mapId),t.setFieldText(r,"mapDescription",o.mapDescription),t.openDialog(r)}},setTrajectory:e=>{let n=t.panel.getActiveShapeLast(!1);if(!n)return;let o=t.cloneData(t.panel.getDeepValue(n,"data.trajectory"))||{};o.controlPoints=t.ensureList(o.controlPoints),t.initDialogs();let i=t.dialogs.trajectory,r=i?.dialog;if(!r)return;t.bindModalOkCancel(r,()=>{o.degree=t.getFieldNumber(r,"degree",0);let c=t.getFieldText(r,"knotVector").split(/[\s,]+/),u=[];for(let l=0;l<c.length;l++){let d=Number(c[l]);Number.isFinite(d)&&u.push(d)}o.knotVector=u.length?u:[0],t.panel.setActiveShapeValue("data.trajectory",o,e)&&t.scheduleHistory(),r.close()});let s=t.getDialogPart(i,"controlPoints",'[name="controlPoints"]');K(r,"trajectoryControlPoints",s,"click",()=>{r.close(),t.openControlPointsDialog(o.controlPoints,a=>{o.controlPoints=a},()=>{t.setFieldNumber(r,"degree",o.degree,0),t.setFieldText(r,"knotVector",Array.isArray(o.knotVector)?o.knotVector.join(","):o.knotVector),t.openDialog(r)})}),t.setFieldNumber(r,"degree",o.degree,0),t.setFieldText(r,"knotVector",Array.isArray(o.knotVector)?o.knotVector.join(","):o.knotVector),t.openDialog(r)},setActions:e=>{let n=t.panel.getActiveShapeLast(!1);if(!n)return;let o=t.cloneData(t.panel.getDeepValue(n,"data.actions"))||[];t.openActionsDialog(o,i=>{t.panel.setActiveShapeValue("data.actions",i,e)&&t.scheduleHistory()})},setExtends:e=>{if(e==="MapRect"){let i=t.cloneData(t.panel.map.extends)||[];t.openExtendsDialog(i,r=>{t.panel.setPanelValue("map.extends",r),t.panel.historyDirty&&t.scheduleHistory()});return}let n=t.panel.getActiveShapeLast(!1);if(!n)return;let o=t.cloneData(t.panel.getDeepValue(n,"extends"))||[];t.openExtendsDialog(o,i=>{t.panel.setActiveShapeValue("extends",i,e)&&t.scheduleHistory()})},applyImageSource:(e,n,o={})=>{let i=e==="MapRect";if(i)o.clear?t.panel.setDeleteImage({force:!0}):t.panel.withBatch(()=>{t.panel.setPanelValue("map.image.enable",!0),o.dataUrl&&t.panel.setPanelValue("map.image._dataUrl",o.dataUrl),t.panel.setPanelValue("map.image._sharedObjectUrl",!1),t.panel.setPanelValue("map.image.src",n)});else if(o.clear){let s=t.panel.getActiveShapeLast(!1);if(re(s?.image),!t.panel.setActiveShapeAssign({image:{src:"",image:Te(),_src:"",_resolvedSrc:"",_dataUrl:"",_objectUrl:"",_sharedObjectUrl:!1}},e))return}else{let s=t.panel.getActiveShapeLast(!1);re(s?.image);let a={enable:!0,src:n,_sharedObjectUrl:!1};if(o.dataUrl&&(a._dataUrl=o.dataUrl),!t.panel.setActiveShapeAssign({image:a},e))return}let r=i?"tabMapRect":V.get(e)?.tabId;if(r){let s=i?"map.image.src":"image.src",a=t.getFormInput(r,s);if(a&&t.setInputValue(a,n||""),!o.clear){let c=i?"map.image.enable":"image.enable",u=t.getFormInput(r,c);u&&t.setInputValue(u,!0)}}t.scheduleHistory()},setImagePick:e=>{L.update(["jpg","jpeg","png","webp","gif","svg"]).then(n=>{let o=Le(n);return L.readImage(n).then(i=>{t.applyImageSource(e,o,{dataUrl:i})}).catch(()=>{L.revokeObjectUrl(o)})}).catch(()=>{})},setImageClear:e=>{t.applyImageSource(e,"",{clear:!0})}}),k.ui=t,t.start(),typeof t.ui.pageReady=="function"&&t.ui.pageReady(t)})();})();