@paircode/tool-art 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/art-panel.css +1 -1
- package/assets/art-panel.js +2 -2
- package/client.js +9 -12
- package/index.js +12 -12
- package/package.json +1 -1
package/assets/art-panel.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@keyframes stopPulse-faf69761{0%,to{opacity:.6}50%{opacity:1}}@keyframes stopRingPulse-faf69761{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.15;transform:scale(1.15)}}.stop-pulse[data-v-faf69761]{animation:stopPulse-faf69761 1.2s ease-in-out infinite}.stop-pulse-ring[data-v-faf69761]{animation:stopRingPulse-faf69761 1.2s ease-in-out infinite;fill:none;transform-origin:center}.svg-icon[data-v-faf69761]{display:inline-block;vertical-align:middle;flex-shrink:0}.
|
|
1
|
+
@keyframes stopPulse-faf69761{0%,to{opacity:.6}50%{opacity:1}}@keyframes stopRingPulse-faf69761{0%,to{opacity:.3;transform:scale(1)}50%{opacity:.15;transform:scale(1.15)}}.stop-pulse[data-v-faf69761]{animation:stopPulse-faf69761 1.2s ease-in-out infinite}.stop-pulse-ring[data-v-faf69761]{animation:stopRingPulse-faf69761 1.2s ease-in-out infinite;fill:none;transform-origin:center}.svg-icon[data-v-faf69761]{display:inline-block;vertical-align:middle;flex-shrink:0}.pn{display:flex;flex-direction:column;height:100%;min-height:0;font-size:12px;color:var(--text-primary);box-sizing:border-box}.pn-spacer{flex:1}.pn-head{display:flex;align-items:center;gap:6px;padding:6px 8px;flex:none;border-bottom:1px solid var(--border-color)}.pn-head-icon{color:var(--text-muted);flex:none}.pn-head-title{font-weight:600;flex:none}.pn-head-file{flex:1;min-width:0;padding:3px 6px;font-size:11px;font-family:ui-monospace,Consolas,monospace;color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px}.pn-icon-btn{display:flex;align-items:center;padding:3px 6px;color:var(--text-secondary);background:transparent;border:1px solid var(--border-color);border-radius:4px;cursor:pointer;flex:none}.pn-icon-btn:hover:not(:disabled){background:var(--bg-hover)}.pn-icon-btn:disabled{opacity:.5;cursor:default}.pn-spin{animation:pn-spin 1s linear infinite}@keyframes pn-spin{to{transform:rotate(360deg)}}.pn-msg{flex:none;padding:6px 8px;color:var(--text-muted);line-height:1.6}.pn-msg-err{color:var(--text-primary);border-left:2px solid var(--accent);background:var(--bg-tertiary)}.pn-metrics{display:flex;align-items:baseline;gap:16px;padding:6px 8px;flex:none;border-bottom:1px solid var(--border-color);overflow-x:auto}.pn-metric{display:flex;align-items:baseline;gap:5px;white-space:nowrap;flex:none}.pn-metric-k{color:var(--text-muted);font-size:11px}.pn-metric-v{font-weight:600}.pn-body{flex:1;display:flex;min-height:0}.pn-side{width:264px;flex:none;display:flex;flex-direction:column;min-height:0;border-right:1px solid var(--border-color)}.pn-seg{display:flex;gap:2px;padding:6px 6px 0;flex:none}.pn-scroll{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}.pn-side-scroll{padding:8px 6px}.pn-main{flex:1;min-width:0;display:flex;flex-direction:column;min-height:0}.pn-empty{flex:1;display:flex;align-items:center;justify-content:center;padding:16px}.pn-empty-guide{max-width:420px;display:flex;flex-direction:column;gap:10px}.pn-empty-title{font-size:14px;font-weight:600;color:var(--text-primary)}.pn-empty-step{display:flex;gap:8px;align-items:baseline;font-size:11px;line-height:1.6}.pn-empty-step>i{flex:none;width:16px;height:16px;font-style:normal;font-size:10px;line-height:16px;text-align:center;color:var(--text-muted);border:1px solid var(--border-color);border-radius:50%;margin-top:1px}.pn-empty-step>span{color:var(--text-secondary);min-width:0}.pn-foot{flex:none;display:flex;align-items:center;gap:8px;padding:5px 8px;border-top:1px solid var(--border-color);font-size:11px;color:var(--text-muted)}.pn-foot-text{line-height:1.5}.pn-foot-src{font-family:ui-monospace,Consolas,monospace;flex:none}.pn-badge{flex:none;padding:1px 7px;border-radius:9px;font-size:10px;line-height:1.6;border:1px solid var(--border-color);color:var(--text-secondary);white-space:nowrap}.pn-badge-accent,.pn-badge-ok{color:var(--bg-primary);background:var(--accent);border-color:var(--accent)}.pn-badge-bad{color:var(--text-primary);background:var(--bg-hover)}.pn-tab{flex:1;padding:4px 6px;font-size:11px;color:var(--text-muted);background:transparent;border:1px solid transparent;border-radius:4px;cursor:pointer;white-space:nowrap}.pn-tab:hover{background:var(--bg-hover)}.pn-tab-on{color:var(--text-primary);background:var(--bg-tertiary);border-color:var(--border-color)}.pn-btn{padding:3px 10px;font-size:11px;color:var(--text-secondary);background:transparent;border:1px solid var(--border-color);border-radius:4px;cursor:pointer;white-space:nowrap}.pn-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text-primary)}.pn-btn:disabled{opacity:.5;cursor:default}.pn-btn-on{color:var(--text-primary);background:var(--bg-tertiary)}.pn-row-gap{display:flex;align-items:center;gap:6px}.pn-card{display:flex;flex-direction:column;gap:5px;padding:8px;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:6px}.pn-card+.pn-card{margin-top:8px}.pn-card-title{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--text-secondary)}.pn-card-plain{background:transparent;border-color:transparent;padding:0}.pn-card-plain+.pn-card-plain{margin-top:12px}.pn-kv{display:flex;gap:8px;align-items:baseline}.pn-kv>span{color:var(--text-muted);flex:none}.pn-kv>b{font-weight:500;min-width:0;overflow-wrap:anywhere}.pn-list{display:flex;flex-direction:column}.pn-item{display:flex;align-items:center;gap:6px;width:100%;padding:4px 6px;text-align:left;font-size:11px;color:var(--text-secondary);background:transparent;border:none;border-radius:4px;cursor:pointer}.pn-item:hover{background:var(--bg-hover)}.pn-item-on{color:var(--text-primary);background:var(--bg-hover);outline:1px solid var(--accent)}.pn-item-k{font-family:ui-monospace,Consolas,monospace;flex:none}.pn-item-v{margin-left:auto;color:var(--text-muted);flex:none}.pn-dim{color:var(--text-muted);font-weight:400}.pn-mini{font-size:10px}.pn-mono{font-family:ui-monospace,Consolas,monospace}.pn-strong{color:var(--text-primary);font-weight:600}.pn-warn{color:var(--text-primary)}.pn-tip{color:var(--text-muted);line-height:1.6;font-size:11px}.pn-tip code{padding:0 3px;font-family:ui-monospace,Consolas,monospace;font-size:10px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:3px}.pn-check{display:flex;align-items:center;gap:6px;font-size:11px}.pn-check>b{flex:none;color:var(--text-secondary)}.pn-check-name{flex:none;color:var(--text-secondary)}.pn-check-metric{flex:1;text-align:right;color:var(--text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pn-dot{width:7px;height:7px;border-radius:50%;flex:none;display:inline-block;background:var(--text-muted)}.pn-dot-ok{background:var(--accent)}.pn-swatch{display:inline-block;width:10px;height:10px;border:1px solid var(--border-color);border-radius:2px;vertical-align:middle;margin-right:4px;flex:none}.pn-code{margin:0;padding:6px;font-family:ui-monospace,Consolas,monospace;font-size:10px;line-height:1.5;color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px;overflow-x:auto;white-space:pre}.pn-table{width:100%;border-collapse:collapse;font-size:11px}.pn-table th{color:var(--text-muted);font-weight:500;text-align:left;padding:3px 4px;border-bottom:1px solid var(--border-color)}.pn-table td{padding:3px 4px;border-bottom:1px solid var(--bg-hover)}.pn-table tbody tr{cursor:pointer}.pn-table tbody tr:hover{background:var(--bg-hover)}.pn-preview{position:relative;display:flex;align-items:center;justify-content:center;min-height:120px;padding:8px;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:6px;overflow:hidden}.pn-preview-scroll{overflow:auto;display:block}.art-main[data-v-0d121a05]{display:flex;flex-direction:column;gap:10px;padding:10px}.art-canvas[data-v-0d121a05]{display:block;width:100%;height:auto}.art-hl[data-v-0d121a05]{position:absolute;border:1px dashed var(--accent);pointer-events:none;box-sizing:border-box}.art-side-hint[data-v-0d121a05]{margin-top:6px}.pn-pass[data-v-0d121a05]{color:var(--text-secondary)}
|
package/assets/art-panel.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var ArtPanel=(function(L,e,Y,W){"use strict";const $=(r,E)=>{const t=r.__vccOpts||r;for(const[B,f]of E)t[B]=f;return t},Z=["width","height"],u={key:0,d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"},v=$({__name:"SvgIcon",props:{name:{type:String,required:!0},size:{type:Number,default:16}},setup(r){return(E,t)=>(e.openBlock(),e.createElementBlock("svg",{class:"svg-icon",width:r.size,height:r.size,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createCommentVNode(" Folder "),r.name==="folder"?(e.openBlock(),e.createElementBlock("path",u)):r.name==="folder-open"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createCommentVNode(" Folder Open "),t[0]||(t[0]=e.createElementVNode("path",{d:"M6 17l-3-9h18l-3 9H6z"},null,-1)),t[1]||(t[1]=e.createElementVNode("path",{d:"M4 8V5a2 2 0 0 1 2-2h5l2 3h7a2 2 0 0 1 2 2v3"},null,-1))],64)):r.name==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createCommentVNode(" File "),t[2]||(t[2]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[3]||(t[3]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1))],64)):r.name==="file-code"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createCommentVNode(" File Code "),t[4]||(t[4]=e.createStaticVNode('<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" data-v-faf69761></path><polyline points="14 2 14 8 20 8" data-v-faf69761></polyline><line x1="10" y1="12" x2="8" y2="14" data-v-faf69761></line><line x1="10" y1="16" x2="8" y2="18" data-v-faf69761></line><line x1="14" y1="12" x2="16" y2="14" data-v-faf69761></line><line x1="14" y1="16" x2="16" y2="18" data-v-faf69761></line>',6))],64)):r.name==="file-text"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.createCommentVNode(" File Text / Document "),t[5]||(t[5]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[6]||(t[6]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[7]||(t[7]=e.createElementVNode("line",{x1:"9",y1:"13",x2:"15",y2:"13"},null,-1)),t[8]||(t[8]=e.createElementVNode("line",{x1:"9",y1:"17",x2:"15",y2:"17"},null,-1))],64)):r.name==="search"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:5},[e.createCommentVNode(" Search "),t[9]||(t[9]=e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"},null,-1)),t[10]||(t[10]=e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"},null,-1))],64)):r.name==="terminal"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:6},[e.createCommentVNode(" Terminal / Console "),t[11]||(t[11]=e.createElementVNode("polyline",{points:"4 17 10 11 4 5"},null,-1)),t[12]||(t[12]=e.createElementVNode("line",{x1:"12",y1:"19",x2:"20",y2:"19"},null,-1))],64)):r.name==="chat"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createCommentVNode(" Chat / Message "),t[13]||(t[13]=e.createElementVNode("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},null,-1))],64)):r.name==="settings"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:8},[e.createCommentVNode(" Gear / Settings "),t[14]||(t[14]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)),t[15]||(t[15]=e.createElementVNode("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"},null,-1))],64)):r.name==="home"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:9},[e.createCommentVNode(" Home "),t[16]||(t[16]=e.createElementVNode("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"},null,-1)),t[17]||(t[17]=e.createElementVNode("polyline",{points:"9 22 9 12 15 12 15 22"},null,-1))],64)):r.name==="chevron-right"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createCommentVNode(" Chevron Right "),t[18]||(t[18]=e.createElementVNode("polyline",{points:"9 6 15 12 9 18"},null,-1))],64)):r.name==="chevron-down"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:11},[e.createCommentVNode(" Chevron Down (Rotated chevron-right) "),t[19]||(t[19]=e.createElementVNode("polyline",{points:"6 9 12 15 18 9"},null,-1))],64)):r.name==="plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:12},[e.createCommentVNode(" Plus / Add "),t[20]||(t[20]=e.createElementVNode("line",{x1:"12",y1:"5",x2:"12",y2:"19"},null,-1)),t[21]||(t[21]=e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"},null,-1))],64)):r.name==="close"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:13},[e.createCommentVNode(" Close / X "),t[22]||(t[22]=e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"},null,-1)),t[23]||(t[23]=e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"},null,-1))],64)):r.name==="refresh"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:14},[e.createCommentVNode(" Refresh "),t[24]||(t[24]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[25]||(t[25]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"},null,-1))],64)):r.name==="drive"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:15},[e.createCommentVNode(" Hard Drive / Disk "),t[26]||(t[26]=e.createElementVNode("line",{x1:"22",y1:"12",x2:"2",y2:"12"},null,-1)),t[27]||(t[27]=e.createElementVNode("path",{d:"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"},null,-1)),t[28]||(t[28]=e.createElementVNode("line",{x1:"6",y1:"16",x2:"6.01",y2:"16"},null,-1)),t[29]||(t[29]=e.createElementVNode("line",{x1:"10",y1:"16",x2:"10.01",y2:"16"},null,-1))],64)):r.name==="source-control"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:16},[e.createCommentVNode(" Source Control / Git Branch "),t[30]||(t[30]=e.createElementVNode("line",{x1:"6",y1:"3",x2:"6",y2:"15"},null,-1)),t[31]||(t[31]=e.createElementVNode("circle",{cx:"18",cy:"6",r:"3"},null,-1)),t[32]||(t[32]=e.createElementVNode("circle",{cx:"6",cy:"18",r:"3"},null,-1)),t[33]||(t[33]=e.createElementVNode("path",{d:"M18 9a9 9 0 0 1-9 9"},null,-1))],64)):r.name==="git-branch"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:17},[e.createCommentVNode(" Git Branch "),t[34]||(t[34]=e.createElementVNode("line",{x1:"6",y1:"3",x2:"6",y2:"15"},null,-1)),t[35]||(t[35]=e.createElementVNode("circle",{cx:"18",cy:"6",r:"3"},null,-1)),t[36]||(t[36]=e.createElementVNode("circle",{cx:"6",cy:"18",r:"3"},null,-1)),t[37]||(t[37]=e.createElementVNode("path",{d:"M18 9a9 9 0 0 1-9 9"},null,-1))],64)):r.name==="git-pull"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:18},[e.createCommentVNode(" Git Pull "),t[38]||(t[38]=e.createStaticVNode('<circle cx="18" cy="18" r="3" data-v-faf69761></circle><circle cx="6" cy="6" r="3" data-v-faf69761></circle><path d="M13 6h3a2 2 0 0 1 2 2v7" data-v-faf69761></path><line x1="6" y1="18" x2="6" y2="9" data-v-faf69761></line><polyline points="9 9 6 6 3 9" data-v-faf69761></polyline>',5))],64)):r.name==="git-push"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:19},[e.createCommentVNode(" Git Push "),t[39]||(t[39]=e.createStaticVNode('<circle cx="18" cy="6" r="3" data-v-faf69761></circle><circle cx="6" cy="18" r="3" data-v-faf69761></circle><path d="M13 18h-2a2 2 0 0 1-2-2V9" data-v-faf69761></path><line x1="6" y1="6" x2="6" y2="15" data-v-faf69761></line><polyline points="9 15 6 18 3 15" data-v-faf69761></polyline>',5))],64)):r.name==="output"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:20},[e.createCommentVNode(" Output / Window "),t[40]||(t[40]=e.createElementVNode("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},null,-1)),t[41]||(t[41]=e.createElementVNode("line",{x1:"8",y1:"21",x2:"16",y2:"21"},null,-1)),t[42]||(t[42]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12",y2:"21"},null,-1))],64)):r.name==="warning"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:21},[e.createCommentVNode(" Warning / Alert "),t[43]||(t[43]=e.createElementVNode("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"},null,-1)),t[44]||(t[44]=e.createElementVNode("line",{x1:"12",y1:"9",x2:"12",y2:"13"},null,-1)),t[45]||(t[45]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"},null,-1))],64)):r.name==="undo"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:22},[e.createCommentVNode(" Undo "),t[46]||(t[46]=e.createElementVNode("polyline",{points:"1 4 1 10 7 10"},null,-1)),t[47]||(t[47]=e.createElementVNode("path",{d:"M3.51 15a9 9 0 1 0 2.13-9.36L1 10"},null,-1))],64)):r.name==="redo"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:23},[e.createCommentVNode(" Redo "),t[48]||(t[48]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[49]||(t[49]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"},null,-1))],64)):r.name==="package"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:24},[e.createCommentVNode(" Package / Box / Store "),t[50]||(t[50]=e.createElementVNode("line",{x1:"16.5",y1:"9.4",x2:"7.5",y2:"4.21"},null,-1)),t[51]||(t[51]=e.createElementVNode("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"},null,-1)),t[52]||(t[52]=e.createElementVNode("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"},null,-1)),t[53]||(t[53]=e.createElementVNode("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"},null,-1))],64)):r.name==="globe"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:25},[e.createCommentVNode(" Globe / External "),t[54]||(t[54]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[55]||(t[55]=e.createElementVNode("line",{x1:"2",y1:"12",x2:"22",y2:"12"},null,-1)),t[56]||(t[56]=e.createElementVNode("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"},null,-1))],64)):r.name==="cycle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:26},[e.createCommentVNode(" Refresh / Cycle (for agent) "),t[57]||(t[57]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[58]||(t[58]=e.createElementVNode("polyline",{points:"1 20 1 14 7 14"},null,-1)),t[59]||(t[59]=e.createElementVNode("path",{d:"M3.51 9a9 9 0 0 1 14.85-3.36L23 10"},null,-1)),t[60]||(t[60]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 0 1-14.85 3.36L1 14"},null,-1))],64)):r.name==="send"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:27},[e.createCommentVNode(" Send (arrow up) "),t[61]||(t[61]=e.createElementVNode("line",{x1:"12",y1:"19",x2:"12",y2:"5"},null,-1)),t[62]||(t[62]=e.createElementVNode("polyline",{points:"5 12 12 5 19 12"},null,-1))],64)):r.name==="send-plane"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:28},[e.createCommentVNode(" Send Plane (paper airplane) "),t[63]||(t[63]=e.createElementVNode("line",{x1:"22",y1:"2",x2:"11",y2:"13"},null,-1)),t[64]||(t[64]=e.createElementVNode("polygon",{points:"22 2 15 22 11 13 2 9 22 2"},null,-1))],64)):r.name==="stop-dot"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:29},[e.createCommentVNode(" Stop Dot (pulsing circle) "),t[65]||(t[65]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"6",class:"stop-pulse"},null,-1)),t[66]||(t[66]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",class:"stop-pulse-ring"},null,-1))],64)):r.name==="wrench"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:30},[e.createCommentVNode(" Wrench / Tool "),t[67]||(t[67]=e.createElementVNode("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"},null,-1))],64)):r.name==="database"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:31},[e.createCommentVNode(" Database "),t[68]||(t[68]=e.createElementVNode("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"},null,-1)),t[69]||(t[69]=e.createElementVNode("path",{d:"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"},null,-1)),t[70]||(t[70]=e.createElementVNode("path",{d:"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"},null,-1))],64)):r.name==="user"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:32},[e.createCommentVNode(" User / Person "),t[71]||(t[71]=e.createElementVNode("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"},null,-1)),t[72]||(t[72]=e.createElementVNode("circle",{cx:"12",cy:"7",r:"4"},null,-1))],64)):r.name==="info"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:33},[e.createCommentVNode(" Info "),t[73]||(t[73]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[74]||(t[74]=e.createElementVNode("line",{x1:"12",y1:"16",x2:"12",y2:"12"},null,-1)),t[75]||(t[75]=e.createElementVNode("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"},null,-1))],64)):r.name==="lightbulb"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:34},[e.createCommentVNode(" Lightbulb / Suggestion "),t[76]||(t[76]=e.createElementVNode("path",{d:"M9 18h6"},null,-1)),t[77]||(t[77]=e.createElementVNode("path",{d:"M10 22h4"},null,-1)),t[78]||(t[78]=e.createElementVNode("path",{d:"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"},null,-1))],64)):r.name==="sparkles"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:35},[e.createCommentVNode(" Sparkles / Auto "),t[79]||(t[79]=e.createStaticVNode('<path d="M13.5 4L15 8l4 .5L15 12l1.5 4-4-2-4 2L10 12l-4-3.5L10 8z" data-v-faf69761></path><line x1="3" y1="18" x2="3" y2="21" data-v-faf69761></line><line x1="21" y1="18" x2="21" y2="21" data-v-faf69761></line><line x1="7" y1="20" x2="11" y2="20" data-v-faf69761></line><line x1="17" y1="20" x2="19" y2="20" data-v-faf69761></line>',5))],64)):r.name==="bot"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:36},[e.createCommentVNode(" Bot / AI "),t[80]||(t[80]=e.createStaticVNode('<rect x="3" y="11" width="18" height="10" rx="2" data-v-faf69761></rect><circle cx="12" cy="5" r="2" data-v-faf69761></circle><path d="M12 7v4" data-v-faf69761></path><line x1="8" y1="16" x2="8" y2="16" data-v-faf69761></line><line x1="16" y1="16" x2="16" y2="16" data-v-faf69761></line>',5))],64)):r.name==="file-js"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:37},[e.createCommentVNode(" File Type Icons "),t[81]||(t[81]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[82]||(t[82]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[83]||(t[83]=e.createElementVNode("text",{x:"8",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"JS",-1))],64)):r.name==="file-ts"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:38},[t[84]||(t[84]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[85]||(t[85]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[86]||(t[86]=e.createElementVNode("text",{x:"8",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"TS",-1))],64)):r.name==="file-go"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:39},[t[87]||(t[87]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[88]||(t[88]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[89]||(t[89]=e.createElementVNode("text",{x:"9",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Go",-1))],64)):r.name==="file-py"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:40},[t[90]||(t[90]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[91]||(t[91]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[92]||(t[92]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Py",-1))],64)):r.name==="file-java"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:41},[t[93]||(t[93]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[94]||(t[94]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[95]||(t[95]=e.createElementVNode("text",{x:"6",y:"17","font-size":"8",fill:"currentColor","font-weight":"bold",stroke:"none"},"Java",-1))],64)):r.name==="file-html"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:42},[t[96]||(t[96]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[97]||(t[97]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[98]||(t[98]=e.createElementVNode("text",{x:"6",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"HTML",-1))],64)):r.name==="file-css"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:43},[t[99]||(t[99]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[100]||(t[100]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[101]||(t[101]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"CSS",-1))],64)):r.name==="file-json"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:44},[t[102]||(t[102]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[103]||(t[103]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[104]||(t[104]=e.createElementVNode("text",{x:"5",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"{ }",-1))],64)):r.name==="file-md"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:45},[t[105]||(t[105]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[106]||(t[106]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[107]||(t[107]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"MD",-1))],64)):r.name==="file-vue"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:46},[t[108]||(t[108]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[109]||(t[109]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[110]||(t[110]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Vue",-1))],64)):r.name==="copy"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:47},[e.createCommentVNode(" Copy "),t[111]||(t[111]=e.createElementVNode("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},null,-1)),t[112]||(t[112]=e.createElementVNode("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"},null,-1))],64)):r.name==="minus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:48},[e.createCommentVNode(" Minus "),t[113]||(t[113]=e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"},null,-1))],64)):r.name==="edit"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:49},[e.createCommentVNode(" Edit / Rename "),t[114]||(t[114]=e.createElementVNode("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"},null,-1)),t[115]||(t[115]=e.createElementVNode("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"},null,-1))],64)):r.name==="trash"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:50},[e.createCommentVNode(" Trash / Delete "),t[116]||(t[116]=e.createElementVNode("polyline",{points:"3 6 5 6 21 6"},null,-1)),t[117]||(t[117]=e.createElementVNode("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"},null,-1))],64)):r.name==="file-plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:51},[e.createCommentVNode(" File Plus / New File "),t[118]||(t[118]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[119]||(t[119]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[120]||(t[120]=e.createElementVNode("line",{x1:"12",y1:"18",x2:"12",y2:"12"},null,-1)),t[121]||(t[121]=e.createElementVNode("line",{x1:"9",y1:"15",x2:"15",y2:"15"},null,-1))],64)):r.name==="message-square"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:52},[e.createCommentVNode(" Folder Plus / New Folder "),t[122]||(t[122]=e.createElementVNode("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},null,-1))],64)):r.name==="folder-plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:53},[t[123]||(t[123]=e.createElementVNode("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2v3"},null,-1)),t[124]||(t[124]=e.createElementVNode("line",{x1:"12",y1:"11",x2:"12",y2:"17"},null,-1)),t[125]||(t[125]=e.createElementVNode("line",{x1:"9",y1:"14",x2:"15",y2:"14"},null,-1))],64)):r.name==="brain"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:54},[e.createCommentVNode(" Brain / Thinking "),t[126]||(t[126]=e.createElementVNode("path",{d:"M12 2a4 4 0 0 0-4 4v1a5 5 0 0 0-5 5v1a4 4 0 0 0 3 3.87V17a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3v-.13A4 4 0 0 0 21 13v-1a5 5 0 0 0-5-5V6a4 4 0 0 0-4-4z"},null,-1)),t[127]||(t[127]=e.createElementVNode("path",{d:"M9 12v2"},null,-1)),t[128]||(t[128]=e.createElementVNode("path",{d:"M15 12v2"},null,-1)),t[129]||(t[129]=e.createElementVNode("path",{d:"M12 9v5"},null,-1))],64)):r.name==="check"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:55},[e.createCommentVNode(" Check / Success "),t[130]||(t[130]=e.createElementVNode("polyline",{points:"20 6 9 17 4 12"},null,-1))],64)):r.name==="clock"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:56},[e.createCommentVNode(" Clock / Pending "),t[131]||(t[131]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[132]||(t[132]=e.createElementVNode("polyline",{points:"12 6 12 12 16 14"},null,-1))],64)):r.name==="help"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:57},[e.createCommentVNode(" Help / Question "),t[133]||(t[133]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[134]||(t[134]=e.createElementVNode("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"},null,-1)),t[135]||(t[135]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"},null,-1))],64)):r.name==="shield"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:58},[e.createCommentVNode(" Shield / Approval "),t[136]||(t[136]=e.createElementVNode("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"},null,-1))],64)):r.name==="shield-off"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:59},[e.createCommentVNode(" Shield Off / No Review "),t[137]||(t[137]=e.createElementVNode("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"},null,-1)),t[138]||(t[138]=e.createElementVNode("line",{x1:"4",y1:"4",x2:"20",y2:"20",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1))],64)):r.name==="code"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:60},[e.createCommentVNode(" Code / Brackets "),t[139]||(t[139]=e.createElementVNode("polyline",{points:"16 18 22 12 16 6"},null,-1)),t[140]||(t[140]=e.createElementVNode("polyline",{points:"8 6 2 12 8 18"},null,-1))],64)):r.name==="list"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:61},[e.createCommentVNode(" List / Menu "),t[141]||(t[141]=e.createStaticVNode('<line x1="8" y1="6" x2="21" y2="6" data-v-faf69761></line><line x1="8" y1="12" x2="21" y2="12" data-v-faf69761></line><line x1="8" y1="18" x2="21" y2="18" data-v-faf69761></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-faf69761></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-faf69761></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-faf69761></line>',6))],64)):r.name==="layers"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:62},[e.createCommentVNode(" Layers / Stack / Context "),t[142]||(t[142]=e.createElementVNode("polygon",{points:"12 2 2 7 12 12 22 7 12 2"},null,-1)),t[143]||(t[143]=e.createElementVNode("polyline",{points:"2 17 12 22 22 17"},null,-1)),t[144]||(t[144]=e.createElementVNode("polyline",{points:"2 12 12 17 22 12"},null,-1))],64)):r.name==="eye"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:63},[e.createCommentVNode(" Eye / Show "),t[145]||(t[145]=e.createElementVNode("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"},null,-1)),t[146]||(t[146]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1))],64)):r.name==="eye-off"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:64},[e.createCommentVNode(" Eye Off / Hide "),t[147]||(t[147]=e.createElementVNode("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94"},null,-1)),t[148]||(t[148]=e.createElementVNode("path",{d:"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19"},null,-1)),t[149]||(t[149]=e.createElementVNode("line",{x1:"1",y1:"1",x2:"23",y2:"23"},null,-1))],64)):r.name==="bug"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:65},[e.createCommentVNode(" Bug "),t[150]||(t[150]=e.createStaticVNode('<rect x="8" y="2" width="8" height="4" rx="1" ry="1" data-v-faf69761></rect><path d="M20 12h-3a5 5 0 0 1-5 5 5 5 0 0 1-5-5H4" data-v-faf69761></path><path d="M4 8h16" data-v-faf69761></path><path d="M12 2v7" data-v-faf69761></path><path d="M9 17l-3 4" data-v-faf69761></path><path d="M15 17l3 4" data-v-faf69761></path>',6))],64)):r.name==="check-circle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:66},[e.createCommentVNode(" Check Circle "),t[151]||(t[151]=e.createElementVNode("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"},null,-1)),t[152]||(t[152]=e.createElementVNode("polyline",{points:"22 4 12 14.01 9 11.01"},null,-1))],64)):r.name==="book-open"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:67},[e.createCommentVNode(" Book Open / Documentation "),t[153]||(t[153]=e.createElementVNode("path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"},null,-1)),t[154]||(t[154]=e.createElementVNode("path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"},null,-1))],64)):r.name==="tool"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:68},[e.createCommentVNode(" Tool / Wrench alternate "),t[155]||(t[155]=e.createElementVNode("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"},null,-1))],64)):r.name==="keyboard"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:69},[e.createCommentVNode(" Keyboard "),t[156]||(t[156]=e.createStaticVNode('<rect x="2" y="4" width="20" height="16" rx="2" ry="2" data-v-faf69761></rect><line x1="6" y1="8" x2="6.01" y2="8" data-v-faf69761></line><line x1="10" y1="8" x2="10.01" y2="8" data-v-faf69761></line><line x1="14" y1="8" x2="14.01" y2="8" data-v-faf69761></line><line x1="18" y1="8" x2="18.01" y2="8" data-v-faf69761></line><line x1="6" y1="12" x2="6.01" y2="12" data-v-faf69761></line><line x1="10" y1="12" x2="10.01" y2="12" data-v-faf69761></line><line x1="14" y1="12" x2="14.01" y2="12" data-v-faf69761></line><line x1="18" y1="12" x2="18.01" y2="12" data-v-faf69761></line><line x1="6" y1="16" x2="18" y2="16" data-v-faf69761></line>',10))],64)):r.name==="chevron-left"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:70},[e.createCommentVNode(" Chevron Left "),t[157]||(t[157]=e.createElementVNode("polyline",{points:"15 6 9 12 15 18"},null,-1))],64)):r.name==="grid"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:71},[e.createCommentVNode(" Grid / App Grid "),t[158]||(t[158]=e.createElementVNode("rect",{x:"3",y:"3",width:"7",height:"7"},null,-1)),t[159]||(t[159]=e.createElementVNode("rect",{x:"14",y:"3",width:"7",height:"7"},null,-1)),t[160]||(t[160]=e.createElementVNode("rect",{x:"14",y:"14",width:"7",height:"7"},null,-1)),t[161]||(t[161]=e.createElementVNode("rect",{x:"3",y:"14",width:"7",height:"7"},null,-1))],64)):r.name==="puzzle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:72},[e.createCommentVNode(" Puzzle / 插件 "),t[162]||(t[162]=e.createElementVNode("path",{d:"M4 7h3a2 2 0 0 1 4 0h9v9h-3a2 2 0 0 0-4 0H4z"},null,-1)),t[163]||(t[163]=e.createElementVNode("path",{d:"M11 7v9"},null,-1))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:73},[t[164]||(t[164]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[165]||(t[165]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[166]||(t[166]=e.createElementVNode("line",{x1:"9",y1:"13",x2:"15",y2:"13"},null,-1)),t[167]||(t[167]=e.createElementVNode("line",{x1:"9",y1:"17",x2:"15",y2:"17"},null,-1))],64))],8,Z))}},[["__scopeId","data-v-faf69761"]]),_={class:"art-panel"},ee={class:"ap-bar"},te=["disabled"],ne={key:0,class:"ap-msg ap-err"},le={key:1,class:"ap-msg ap-info"},oe={key:2,class:"ap-msg"},ae={class:"ap-sec"},re={class:"ap-sec-title"},ie={class:"ap-kv"},me={class:"ap-kv"},de={class:"ap-kv"},se={class:"ap-mono"},ce={class:"ap-kv"},ye={class:"ap-mono"},pe={class:"ap-sec"},ke={class:"ap-row"},Ve=["disabled"],Ee=["src"],Ne={key:1,class:"ap-dim ap-msg"},fe={class:"ap-sec"},xe={class:"ap-sec-title"},ge={class:"ap-dim"},Be={class:"ap-table"},Ce=["onClick"],Me={class:"ap-mono"},we={class:"ap-mono"},Se={class:"ap-mono"},Fe={class:"ap-mono ap-fill"},be={class:"ap-mono"},ze={key:0,class:"ap-sec"},De={class:"ap-sec-title"},he={class:"ap-mono"},Ae={class:"ap-dim"},He={class:"ap-mono"},Le={class:"ap-code"},Te={class:"ap-sec"},Ie={class:"ap-sec-title"},Pe={class:"ap-dim"},Re={class:"ap-mono"},Oe={class:"ap-dim"},je={class:"ap-sec"},Ge={class:"ap-sec-title"},We={class:"ap-dim"},$e={class:"ap-mono"},Je={class:"ap-dim"},Ue={key:1,class:"ap-dim"},qe={class:"ap-sec"},Ke={class:"ap-sec-title"},Qe={key:1,class:"ap-dim"},Xe={key:0,class:"ap-dim"},Ye={key:1},Ze={class:"ap-check-name"},ue=["title"],ve={class:"ap-dim"},_e=$({__name:"ArtPanel",setup(r){const E=e.ref("art.project.json"),t=e.ref("art.verify.json"),B=e.ref(!1),f=e.ref(""),S=e.ref(""),s=e.ref(null),p=e.ref(null),x=e.ref(""),T=e.ref(!1),C=e.ref(""),D=e.ref(!1),I=e.ref(0),P=e.ref(null),tt=e.ref(null),F=e.computed(()=>s.value&&s.value.layers||[]),g=e.computed(()=>s.value&&s.value.shapes||[]),b=e.computed(()=>(s.value&&s.value.canvas||{}).width||0),h=e.computed(()=>(s.value&&s.value.canvas||{}).height||0),nt=e.computed(()=>s.value&&s.value.meta&&s.value.meta.title||"未命名画板"),R=e.computed(()=>s.value&&s.value.canvas&&s.value.canvas.background||"none");e.computed(()=>p.value&&p.value.ts||"");const lt=e.computed(()=>(p.value&&p.value.checks||[]).filter(n=>n.pass).length),ot=e.computed(()=>(p.value&&p.value.checks||[]).length),at=e.computed(()=>C.value?"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(C.value):"");function rt(n){const l=String(W.state&&W.state.workspaceRoot||"").replace(/[\\/]+$/,"");return l?l+"/"+String(n).replace(/^[\\/]+/,""):n}async function O(n){return(await Y.apiGet("/fs/read",{path:rt(n)})).content}async function j(){if(!B.value){B.value=!0,f.value="",S.value="";try{s.value=JSON.parse(await O(E.value)),p.value=null;try{p.value=JSON.parse(await O(t.value))}catch{}const n=s.value.artifacts&&s.value.artifacts.svg||String(E.value).replace(/\.json$/i,".svg");C.value="",D.value=!1;try{C.value=await O(n)}catch{}x.value=""}catch(n){s.value=null,C.value="",f.value="载入失败:"+(n&&n.message||n)}finally{B.value=!1}}}function m(n,l){const o=typeof n=="number"?n:parseFloat(n);return isFinite(o)?o:l}function it(n){const l=n.type;if(l==="rect")return{x:m(n.x,0),y:m(n.y,0),w:m(n.w,0),h:m(n.h,0)};if(l==="circle"){const o=m(n.r,0);return{x:m(n.cx,0)-o,y:m(n.cy,0)-o,w:2*o,h:2*o}}if(l==="ellipse"){const o=m(n.rx,0),a=m(n.ry,0);return{x:m(n.cx,0)-o,y:m(n.cy,0)-a,w:2*o,h:2*a}}if(l==="line"){const o=m(n.x1,0),a=m(n.y1,0),d=m(n.x2,0),i=m(n.y2,0);return{x:Math.min(o,d),y:Math.min(a,i),w:Math.abs(d-o),h:Math.abs(i-a)}}if(l==="polyline"||l==="polygon"){const o=n.points||[];if(!o.length)return{x:0,y:0,w:0,h:0};const a=o.map(N=>m(N[0],0)),d=o.map(N=>m(N[1],0)),i=Math.min(...a),c=Math.max(...a),V=Math.min(...d),y=Math.max(...d);return{x:i,y:V,w:c-i,h:y-V}}if(l==="path"){const a=(String(n.d||"").match(/-?\d*\.?\d+/g)||[]).map(Number).filter(y=>isFinite(y));let d=1/0,i=1/0,c=-1/0,V=-1/0;for(let y=0;y+1<a.length;y+=2)d=Math.min(d,a[y]),c=Math.max(c,a[y]),i=Math.min(i,a[y+1]),V=Math.max(V,a[y+1]);return isFinite(d)?{x:d,y:i,w:c-d,h:V-i}:{x:0,y:0,w:0,h:0}}if(l==="text"){const o=m(n.fontSize,16),a=String(n.text||"");let d=0;for(let N=0;N<a.length;N++)d+=a.charCodeAt(N)>11904?1:.55;const i=String(n.fontWeight||"400")==="bold"||m(n.fontWeight,400)>=600,c=d*o*(i?1.05:1),V=n.anchor||"start";return{x:V==="middle"?m(n.x,0)-c/2:V==="end"?m(n.x,0)-c:m(n.x,0),y:m(n.y,0)-o*.8,w:c,h:o}}return{x:0,y:0,w:0,h:0}}function mt(n,l,o){return{x:n[0]*l+n[2]*o+n[4],y:n[1]*l+n[3]*o+n[5]}}function A(n){const l=it(n),o=n.transform;if(!o||!o.length)return l;const d=n.type==="circle"||n.type==="ellipse"?Array.from({length:16},(N,w)=>{const X=Math.PI*2*w/16,ft=n.type==="circle"?m(n.r,0):m(n.rx,0),xt=n.type==="circle"?m(n.r,0):m(n.ry,0);return[m(n.cx,0)+ft*Math.cos(X),m(n.cy,0)+xt*Math.sin(X)]}):[[l.x,l.y],[l.x+l.w,l.y],[l.x+l.w,l.y+l.h],[l.x,l.y+l.h]];let i=1/0,c=1/0,V=-1/0,y=-1/0;return d.forEach(N=>{const w=mt(o,N[0],N[1]);i=Math.min(i,w.x),V=Math.max(V,w.x),c=Math.min(c,w.y),y=Math.max(y,w.y)}),{x:i,y:c,w:V-i,h:y-c}}function k(n){const l=Math.round(m(n,0)*100)/100;return String(l)}const dt=e.computed(()=>g.value.map(n=>{const l=A(n),o=n.type==="line";return{id:n.id,type:n.type,layer:n.layer,pos:k(l.x)+","+k(l.y),size:k(l.w)+"×"+k(l.h),fill:o?"(线)":String(n.fill===void 0?"none":n.fill),fillCss:o||!n.fill||n.fill==="none"?"transparent":n.fill}})),st=e.computed(()=>F.value.map((n,l)=>{let o=0;return g.value.forEach(a=>{(F.value.some(c=>c.id===a.layer)?a.layer:(F.value[0]||{}).id)===n.id&&o++}),{id:n.id,name:n.name||"",index:l,count:o,visible:n.visible!==!1}})),ct=e.computed(()=>{if(!g.value.length)return"(空)";let n=null;g.value.forEach(o=>{const a=A(o);n=n?{x:Math.min(n.x,a.x),y:Math.min(n.y,a.y),w:Math.max(n.x+n.w,a.x+a.w)-Math.min(n.x,a.x),h:Math.max(n.y+n.h,a.y+a.h)-Math.min(n.y,a.y)}:{x:a.x,y:a.y,w:a.w,h:a.h}});const l=b.value&&h.value?Math.min(100,n.w*n.h/(b.value*h.value)*100):0;return"x "+k(n.x)+".."+k(n.x+n.w)+",y "+k(n.y)+".."+k(n.y+n.h)+"(占 "+l.toFixed(1)+"%)"}),yt={black:[0,0,0],white:[255,255,255],gray:[128,128,128],grey:[128,128,128],red:[255,0,0],green:[0,128,0],blue:[0,0,255],orange:[255,165,0],yellow:[255,255,0]};function z(n){const l=String(n||"").trim().toLowerCase();if(!l||l==="none"||l==="transparent")return null;if(l[0]==="#"){const a=l.slice(1);return a.length===3?[parseInt(a[0]+a[0],16),parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16)]:a.length>=6?[parseInt(a.slice(0,2),16),parseInt(a.slice(2,4),16),parseInt(a.slice(4,6),16)]:null}const o=/^rgba?\(([^)]+)\)$/.exec(l);if(o){const a=o[1].split(/[\s,\/]+/).filter(d=>d!=="");return a.length<3?null:[parseFloat(a[0]),parseFloat(a[1]),parseFloat(a[2])]}return yt[l]||null}function J(n){const l=o=>{const a=o/255;return a<=.03928?a/12.92:Math.pow((a+.055)/1.055,2.4)};return .2126*l(n[0])+.7152*l(n[1])+.0722*l(n[2])}function U(n,l){const o=J(n),a=J(l);return(Math.max(o,a)+.05)/(Math.min(o,a)+.05)}const G=e.computed(()=>{const n=s.value&&s.value.canvas&&s.value.canvas.background||"none",l=z(n)||[255,255,255],o={};return g.value.forEach(a=>{a.fill&&a.fill!=="none"&&a.type!=="line"&&(o[a.fill]=(o[a.fill]||0)+1),a.stroke&&a.stroke!=="none"&&(o[a.stroke]=(o[a.stroke]||0)+1)}),Object.keys(o).map(a=>{const d=z(a),i=d?U(d,l):null;return{raw:a,count:o[a],ratio:i,pass:i!==null&&i>=4.5}}).sort((a,d)=>d.count-a.count)}),M=e.computed(()=>g.value.find(n=>n.id===x.value)||null),pt=e.computed(()=>{const n=M.value;if(!n)return[];const l=A(n),o=[{k:"图层 / z",v:String(n.layer)+" / "+String(n.z)},{k:"包围盒",v:k(l.x)+","+k(l.y)+" "+k(l.w)+"×"+k(l.h)}],a=["x","y","w","h","rx","cx","cy","r","rx","ry","x1","y1","x2","y2","d","text","fontSize","fontWeight","anchor"],d={};return a.forEach(i=>{d[i]||n[i]===void 0||(d[i]=!0,o.push({k:i,v:String(n[i])}))}),n.points&&o.push({k:"points",v:n.points.length+" 点"}),n.type!=="line"&&o.push({k:"fill",v:String(n.fill===void 0?"none":n.fill)}),o.push({k:"stroke",v:String(n.stroke===void 0?"none":n.stroke)+(Number(n.strokeWidth)>0?" / "+n.strokeWidth:"")}),Number(n.opacity)<1&&o.push({k:"opacity",v:String(n.opacity)}),n.transform&&o.push({k:"transform",v:n.transform.map(k).join(" ")}),o}),q=e.computed(()=>{const n=M.value;if(!n)return"";const l=z(s.value.canvas&&s.value.canvas.background||"none"),o=n.fill&&n.fill!=="none"?n.fill:"#2563EB";return[JSON.stringify({op:"shape.move",id:n.id,dx:0,dy:0}),JSON.stringify({op:"shape.set",id:n.id,set:{fill:o}}),JSON.stringify({op:"shape.set",id:n.id,set:{stroke:"#111827",strokeWidth:2}}),JSON.stringify({op:"shape.z",id:n.id,mode:"front"}),JSON.stringify({op:"shape.remove",id:n.id}),"","// "+n.id+" 当前 fill "+String(n.fill===void 0?"none":n.fill)+"(与画板底色对比度 "+(()=>{const a=z(n.fill);return a&&l?U(a,l).toFixed(2)+":1":"n/a"})()+",AA 需 ≥ 4.5:1)"].join(`
|
|
2
|
-
`)});async function kt(){try{await navigator.clipboard.writeText(q.value),T.value=!0,setTimeout(()=>{T.value=!1},1600)}catch{S.value="复制失败(浏览器未授权剪贴板):可手动选中上面的命令文本。"}}function Vt(n){x.value=x.value===n?"":n,x.value&&H()}const K=e.computed(()=>{const n=M.value;if(!n||!I.value)return null;const l=A(n),o=I.value/(b.value||1);return{left:l.x*o+"px",top:l.y*o+"px",width:Math.max(2,l.w*o)+"px",height:Math.max(2,l.h*o)+"px"}});function H(){const n=P.value;n&&(I.value=n.clientWidth||0)}function Et(){D.value=!0,H()}function Nt(){const n=P.value;if(!n||!D.value){f.value="预览尚未就绪,稍后再试";return}try{const l=document.createElement("canvas");l.width=b.value,l.height=h.value;const o=l.getContext("2d"),a=R.value;a&&a!=="none"&&z(a)&&(o.fillStyle=a,o.fillRect(0,0,l.width,l.height)),o.drawImage(n,0,0,l.width,l.height);const d=l.toDataURL("image/png"),i=document.createElement("a");i.href=d,i.download=String(E.value).replace(/\.json$/i,"")+".png",document.body.appendChild(i),i.click(),i.remove(),S.value="已导出 PNG("+l.width+"×"+l.height+"):"+i.download+"(浏览器下载目录)"}catch(l){f.value="PNG 导出失败:"+(l&&l.message||l)}}function Q(){H()}return e.onMounted(()=>{window.addEventListener("resize",Q),j()}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",Q)}),e.watch(x,()=>{H()}),(n,l)=>(e.openBlock(),e.createElementBlock("div",_,[e.createElementVNode("div",ee,[l[2]||(l[2]=e.createElementVNode("span",{class:"ap-title"},"画板",-1)),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":l[0]||(l[0]=o=>E.value=o),class:"ap-input",placeholder:"art.project.json",onKeyup:e.withKeys(j,["enter"])},null,544),[[e.vModelText,E.value]]),e.createElementVNode("button",{class:"ap-icon-btn",disabled:B.value,title:"重新载入工程、SVG 与校验报告",onClick:j},[e.createVNode(v,{name:"refresh",size:12,class:e.normalizeClass({spinning:B.value})},null,8,["class"])],8,te)]),f.value?(e.openBlock(),e.createElementBlock("div",ne,e.toDisplayString(f.value),1)):S.value?(e.openBlock(),e.createElementBlock("div",le,e.toDisplayString(S.value),1)):e.createCommentVNode("v-if",!0),!s.value&&!f.value?(e.openBlock(),e.createElementBlock("div",oe,[...l[3]||(l[3]=[e.createTextVNode(" 未找到画板工程。先让 Agent 执行 ",-1),e.createElementVNode("code",null,"art_project",-1),e.createTextVNode(" 创建工程(生成 art.project.json)。 ",-1)])])):e.createCommentVNode("v-if",!0),s.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createCommentVNode(" 画板信息 "),e.createElementVNode("section",ae,[e.createElementVNode("div",re,e.toDisplayString(nt.value),1),e.createElementVNode("div",ie,[l[4]||(l[4]=e.createElementVNode("span",null,"画布 / 背景",-1)),e.createElementVNode("b",null,e.toDisplayString(b.value)+"×"+e.toDisplayString(h.value)+" · "+e.toDisplayString(R.value),1)]),e.createElementVNode("div",me,[l[5]||(l[5]=e.createElementVNode("span",null,"图层 / 图元 / 用色",-1)),e.createElementVNode("b",null,e.toDisplayString(F.value.length)+" · "+e.toDisplayString(g.value.length)+" · "+e.toDisplayString(G.value.length),1)]),e.createElementVNode("div",de,[l[6]||(l[6]=e.createElementVNode("span",null,"覆盖范围",-1)),e.createElementVNode("b",se,e.toDisplayString(ct.value),1)]),e.createElementVNode("div",ce,[l[7]||(l[7]=e.createElementVNode("span",null,"文件",-1)),e.createElementVNode("b",ye,e.toDisplayString(E.value),1)])]),e.createCommentVNode(" 预览 + 导出 "),e.createElementVNode("section",pe,[e.createElementVNode("div",ke,[l[8]||(l[8]=e.createElementVNode("span",{class:"ap-sec-title"},"画布预览",-1)),l[9]||(l[9]=e.createElementVNode("span",{class:"ap-spacer"},null,-1)),e.createElementVNode("button",{class:"ap-btn",disabled:!C.value||!D.value,title:"用浏览器 canvas 绘制 SVG 并下载 PNG",onClick:Nt}," 导出 PNG ",8,Ve)]),e.createElementVNode("div",{ref_key:"wrapEl",ref:tt,class:"ap-canvas-wrap"},[C.value?(e.openBlock(),e.createElementBlock("img",{key:0,ref_key:"imgEl",ref:P,class:"ap-canvas",src:at.value,alt:"画板预览",onLoad:Et},null,40,Ee)):(e.openBlock(),e.createElementBlock("div",Ne,[...l[10]||(l[10]=[e.createTextVNode("未找到 SVG 产物。让 Agent 执行 ",-1),e.createElementVNode("code",null,"art_export",-1),e.createTextVNode(" 生成(默认 art.svg)。",-1)])])),K.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"ap-hl",style:e.normalizeStyle(K.value)},null,4)):e.createCommentVNode("v-if",!0)],512),l[11]||(l[11]=e.createElementVNode("div",{class:"ap-dim"}," 浏览器渲染 SVG(img + data URI,脚本不执行);点下方图元行可高亮定位。导出的 PNG 尺寸 = 画布尺寸,由本地面板直接下载,不写回工作区。 ",-1))]),e.createCommentVNode(" 图元表 "),e.createElementVNode("section",fe,[e.createElementVNode("div",xe,[l[12]||(l[12]=e.createTextVNode("图元 ",-1)),e.createElementVNode("span",ge,"("+e.toDisplayString(g.value.length)+";点行选中)",1)]),e.createElementVNode("table",Be,[l[13]||(l[13]=e.createElementVNode("thead",null,[e.createElementVNode("tr",null,[e.createElementVNode("th",null,"id"),e.createElementVNode("th",null,"类型"),e.createElementVNode("th",null,"位置"),e.createElementVNode("th",null,"尺寸"),e.createElementVNode("th",null,"填充"),e.createElementVNode("th",null,"层")])],-1)),e.createElementVNode("tbody",null,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(dt.value,o=>(e.openBlock(),e.createElementBlock("tr",{key:o.id,class:e.normalizeClass({"ap-row-sel":o.id===x.value}),onClick:a=>Vt(o.id)},[e.createElementVNode("td",Me,e.toDisplayString(o.id),1),e.createElementVNode("td",null,e.toDisplayString(o.type),1),e.createElementVNode("td",we,e.toDisplayString(o.pos),1),e.createElementVNode("td",Se,e.toDisplayString(o.size),1),e.createElementVNode("td",null,[e.createElementVNode("span",{class:"ap-swatch",style:e.normalizeStyle({background:o.fillCss})},null,4),e.createElementVNode("span",Fe,e.toDisplayString(o.fill),1)]),e.createElementVNode("td",be,e.toDisplayString(o.layer),1)],10,Ce))),128))])])]),e.createCommentVNode(" 选中详情 + op 片段 "),M.value?(e.openBlock(),e.createElementBlock("section",ze,[e.createElementVNode("div",De,[l[14]||(l[14]=e.createTextVNode(" 选中:",-1)),e.createElementVNode("span",he,e.toDisplayString(M.value.id),1),l[15]||(l[15]=e.createTextVNode()),e.createElementVNode("span",Ae,e.toDisplayString(M.value.type),1),l[16]||(l[16]=e.createElementVNode("span",{class:"ap-spacer"},null,-1)),e.createElementVNode("button",{class:"ap-btn",onClick:l[1]||(l[1]=o=>x.value="")},"取消")]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(pt.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.k,class:"ap-kv ap-kv-left"},[e.createElementVNode("span",null,e.toDisplayString(o.k),1),e.createElementVNode("b",He,e.toDisplayString(o.v),1)]))),128)),l[17]||(l[17]=e.createElementVNode("div",{class:"ap-dim"},"面板只读(不产生第二条写路径)——复制下面命令交给 Agent 执行即可改这份真相源:",-1)),e.createElementVNode("pre",Le,e.toDisplayString(q.value),1),e.createElementVNode("button",{class:"ap-btn",onClick:kt},e.toDisplayString(T.value?"已复制 ✓":"复制 op"),1)])):e.createCommentVNode("v-if",!0),e.createCommentVNode(" 图层 "),e.createElementVNode("section",Te,[e.createElementVNode("div",Ie,[l[18]||(l[18]=e.createTextVNode("图层 ",-1)),e.createElementVNode("span",Pe,"("+e.toDisplayString(F.value.length)+";顺序 = 从下到上)",1)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(st.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:"ap-kv"},[e.createElementVNode("span",Re,e.toDisplayString(o.id),1),e.createElementVNode("b",null,[e.createTextVNode(e.toDisplayString(o.name)+" ",1),e.createElementVNode("span",Oe,e.toDisplayString(o.count)+" 图元"+e.toDisplayString(o.visible?"":" · 隐藏"),1)])]))),128))]),e.createCommentVNode(" 颜色 "),e.createElementVNode("section",je,[e.createElementVNode("div",Ge,[l[19]||(l[19]=e.createTextVNode("颜色 ",-1)),e.createElementVNode("span",We,"("+e.toDisplayString(G.value.length)+" 种,对比度按画板背景 "+e.toDisplayString(R.value)+" 计算)",1)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(G.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.raw,class:"ap-kv"},[e.createElementVNode("span",null,[e.createElementVNode("span",{class:"ap-swatch",style:e.normalizeStyle({background:o.raw})},null,4),e.createElementVNode("b",$e,e.toDisplayString(o.raw),1),e.createElementVNode("span",Je," ×"+e.toDisplayString(o.count),1)]),o.ratio!==null?(e.openBlock(),e.createElementBlock("b",{key:0,class:e.normalizeClass(o.pass?"ap-pass":"ap-fail")},e.toDisplayString(o.ratio.toFixed(2))+":1 "+e.toDisplayString(o.pass?"AA":"低于 4.5"),3)):(e.openBlock(),e.createElementBlock("b",Ue,"描边/无填充"))]))),128)),l[20]||(l[20]=e.createElementVNode("div",{class:"ap-dim"},"此处按“色 vs 画板底色”估算;文字实际底色(可能是下层图形)由校验 V6 精确判定。",-1))]),e.createCommentVNode(" 校验报告(旁挂 art.verify.json,由 art_verify 写入) "),e.createElementVNode("section",qe,[e.createElementVNode("div",Ke,[l[21]||(l[21]=e.createTextVNode(" 工程校验 ",-1)),p.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["ap-badge",p.value.pass?"ap-ok":"ap-bad"])},e.toDisplayString(lt.value)+"/"+e.toDisplayString(ot.value),3)):(e.openBlock(),e.createElementBlock("span",Qe,"(未校验)"))]),p.value?(e.openBlock(),e.createElementBlock("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(p.value.checks||[],o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:"ap-check"},[e.createElementVNode("span",{class:e.normalizeClass(["ap-dot",o.pass?"ap-ok":"ap-bad"])},null,2),e.createElementVNode("b",null,e.toDisplayString(o.id),1),e.createElementVNode("span",Ze,e.toDisplayString(o.name),1),e.createElementVNode("span",{class:"ap-dim ap-check-metric",title:o.metric},e.toDisplayString(o.metric),9,ue)]))),128)),e.createElementVNode("div",ve,"报告时间:"+e.toDisplayString(p.value.ts),1)])):(e.openBlock(),e.createElementBlock("div",Xe,[...l[22]||(l[22]=[e.createTextVNode(" 让 Agent 执行 ",-1),e.createElementVNode("code",null,"art_verify",-1),e.createTextVNode(" 生成校验报告(art.verify.json)。 ",-1)])]))])],64)):e.createCommentVNode("v-if",!0)]))}},[["__scopeId","data-v-27709329"]]);function et(r){const E=e.createApp(_e);return E.mount(r),()=>{E.unmount()}}return L.mount=et,Object.defineProperty(L,Symbol.toStringTag,{value:"Module"}),L})({},window.__PAIRCODE_CORE.Vue,window.__PAIRCODE_CORE.api,window.__PAIRCODE_CORE.uiState);
|
|
1
|
+
var ArtPanel=(function(H,e,te,U){"use strict";const q=(a,c)=>{const t=a.__vccOpts||a;for(const[y,V]of c)t[y]=V;return t},ne=["width","height"],le={key:0,d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"},K=q({__name:"SvgIcon",props:{name:{type:String,required:!0},size:{type:Number,default:16}},setup(a){return(c,t)=>(e.openBlock(),e.createElementBlock("svg",{class:"svg-icon",width:a.size,height:a.size,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[e.createCommentVNode(" Folder "),a.name==="folder"?(e.openBlock(),e.createElementBlock("path",le)):a.name==="folder-open"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createCommentVNode(" Folder Open "),t[0]||(t[0]=e.createElementVNode("path",{d:"M6 17l-3-9h18l-3 9H6z"},null,-1)),t[1]||(t[1]=e.createElementVNode("path",{d:"M4 8V5a2 2 0 0 1 2-2h5l2 3h7a2 2 0 0 1 2 2v3"},null,-1))],64)):a.name==="file"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createCommentVNode(" File "),t[2]||(t[2]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[3]||(t[3]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1))],64)):a.name==="file-code"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[e.createCommentVNode(" File Code "),t[4]||(t[4]=e.createStaticVNode('<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" data-v-faf69761></path><polyline points="14 2 14 8 20 8" data-v-faf69761></polyline><line x1="10" y1="12" x2="8" y2="14" data-v-faf69761></line><line x1="10" y1="16" x2="8" y2="18" data-v-faf69761></line><line x1="14" y1="12" x2="16" y2="14" data-v-faf69761></line><line x1="14" y1="16" x2="16" y2="18" data-v-faf69761></line>',6))],64)):a.name==="file-text"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:4},[e.createCommentVNode(" File Text / Document "),t[5]||(t[5]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[6]||(t[6]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[7]||(t[7]=e.createElementVNode("line",{x1:"9",y1:"13",x2:"15",y2:"13"},null,-1)),t[8]||(t[8]=e.createElementVNode("line",{x1:"9",y1:"17",x2:"15",y2:"17"},null,-1))],64)):a.name==="search"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:5},[e.createCommentVNode(" Search "),t[9]||(t[9]=e.createElementVNode("circle",{cx:"11",cy:"11",r:"8"},null,-1)),t[10]||(t[10]=e.createElementVNode("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"},null,-1))],64)):a.name==="terminal"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:6},[e.createCommentVNode(" Terminal / Console "),t[11]||(t[11]=e.createElementVNode("polyline",{points:"4 17 10 11 4 5"},null,-1)),t[12]||(t[12]=e.createElementVNode("line",{x1:"12",y1:"19",x2:"20",y2:"19"},null,-1))],64)):a.name==="chat"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:7},[e.createCommentVNode(" Chat / Message "),t[13]||(t[13]=e.createElementVNode("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},null,-1))],64)):a.name==="settings"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:8},[e.createCommentVNode(" Gear / Settings "),t[14]||(t[14]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1)),t[15]||(t[15]=e.createElementVNode("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"},null,-1))],64)):a.name==="home"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:9},[e.createCommentVNode(" Home "),t[16]||(t[16]=e.createElementVNode("path",{d:"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"},null,-1)),t[17]||(t[17]=e.createElementVNode("polyline",{points:"9 22 9 12 15 12 15 22"},null,-1))],64)):a.name==="chevron-right"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:10},[e.createCommentVNode(" Chevron Right "),t[18]||(t[18]=e.createElementVNode("polyline",{points:"9 6 15 12 9 18"},null,-1))],64)):a.name==="chevron-down"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:11},[e.createCommentVNode(" Chevron Down (Rotated chevron-right) "),t[19]||(t[19]=e.createElementVNode("polyline",{points:"6 9 12 15 18 9"},null,-1))],64)):a.name==="plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:12},[e.createCommentVNode(" Plus / Add "),t[20]||(t[20]=e.createElementVNode("line",{x1:"12",y1:"5",x2:"12",y2:"19"},null,-1)),t[21]||(t[21]=e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"},null,-1))],64)):a.name==="close"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:13},[e.createCommentVNode(" Close / X "),t[22]||(t[22]=e.createElementVNode("line",{x1:"18",y1:"6",x2:"6",y2:"18"},null,-1)),t[23]||(t[23]=e.createElementVNode("line",{x1:"6",y1:"6",x2:"18",y2:"18"},null,-1))],64)):a.name==="refresh"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:14},[e.createCommentVNode(" Refresh "),t[24]||(t[24]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[25]||(t[25]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"},null,-1))],64)):a.name==="drive"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:15},[e.createCommentVNode(" Hard Drive / Disk "),t[26]||(t[26]=e.createElementVNode("line",{x1:"22",y1:"12",x2:"2",y2:"12"},null,-1)),t[27]||(t[27]=e.createElementVNode("path",{d:"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z"},null,-1)),t[28]||(t[28]=e.createElementVNode("line",{x1:"6",y1:"16",x2:"6.01",y2:"16"},null,-1)),t[29]||(t[29]=e.createElementVNode("line",{x1:"10",y1:"16",x2:"10.01",y2:"16"},null,-1))],64)):a.name==="source-control"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:16},[e.createCommentVNode(" Source Control / Git Branch "),t[30]||(t[30]=e.createElementVNode("line",{x1:"6",y1:"3",x2:"6",y2:"15"},null,-1)),t[31]||(t[31]=e.createElementVNode("circle",{cx:"18",cy:"6",r:"3"},null,-1)),t[32]||(t[32]=e.createElementVNode("circle",{cx:"6",cy:"18",r:"3"},null,-1)),t[33]||(t[33]=e.createElementVNode("path",{d:"M18 9a9 9 0 0 1-9 9"},null,-1))],64)):a.name==="git-branch"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:17},[e.createCommentVNode(" Git Branch "),t[34]||(t[34]=e.createElementVNode("line",{x1:"6",y1:"3",x2:"6",y2:"15"},null,-1)),t[35]||(t[35]=e.createElementVNode("circle",{cx:"18",cy:"6",r:"3"},null,-1)),t[36]||(t[36]=e.createElementVNode("circle",{cx:"6",cy:"18",r:"3"},null,-1)),t[37]||(t[37]=e.createElementVNode("path",{d:"M18 9a9 9 0 0 1-9 9"},null,-1))],64)):a.name==="git-pull"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:18},[e.createCommentVNode(" Git Pull "),t[38]||(t[38]=e.createStaticVNode('<circle cx="18" cy="18" r="3" data-v-faf69761></circle><circle cx="6" cy="6" r="3" data-v-faf69761></circle><path d="M13 6h3a2 2 0 0 1 2 2v7" data-v-faf69761></path><line x1="6" y1="18" x2="6" y2="9" data-v-faf69761></line><polyline points="9 9 6 6 3 9" data-v-faf69761></polyline>',5))],64)):a.name==="git-push"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:19},[e.createCommentVNode(" Git Push "),t[39]||(t[39]=e.createStaticVNode('<circle cx="18" cy="6" r="3" data-v-faf69761></circle><circle cx="6" cy="18" r="3" data-v-faf69761></circle><path d="M13 18h-2a2 2 0 0 1-2-2V9" data-v-faf69761></path><line x1="6" y1="6" x2="6" y2="15" data-v-faf69761></line><polyline points="9 15 6 18 3 15" data-v-faf69761></polyline>',5))],64)):a.name==="output"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:20},[e.createCommentVNode(" Output / Window "),t[40]||(t[40]=e.createElementVNode("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"},null,-1)),t[41]||(t[41]=e.createElementVNode("line",{x1:"8",y1:"21",x2:"16",y2:"21"},null,-1)),t[42]||(t[42]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12",y2:"21"},null,-1))],64)):a.name==="warning"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:21},[e.createCommentVNode(" Warning / Alert "),t[43]||(t[43]=e.createElementVNode("path",{d:"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"},null,-1)),t[44]||(t[44]=e.createElementVNode("line",{x1:"12",y1:"9",x2:"12",y2:"13"},null,-1)),t[45]||(t[45]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"},null,-1))],64)):a.name==="undo"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:22},[e.createCommentVNode(" Undo "),t[46]||(t[46]=e.createElementVNode("polyline",{points:"1 4 1 10 7 10"},null,-1)),t[47]||(t[47]=e.createElementVNode("path",{d:"M3.51 15a9 9 0 1 0 2.13-9.36L1 10"},null,-1))],64)):a.name==="redo"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:23},[e.createCommentVNode(" Redo "),t[48]||(t[48]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[49]||(t[49]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"},null,-1))],64)):a.name==="package"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:24},[e.createCommentVNode(" Package / Box / Store "),t[50]||(t[50]=e.createElementVNode("line",{x1:"16.5",y1:"9.4",x2:"7.5",y2:"4.21"},null,-1)),t[51]||(t[51]=e.createElementVNode("path",{d:"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"},null,-1)),t[52]||(t[52]=e.createElementVNode("polyline",{points:"3.27 6.96 12 12.01 20.73 6.96"},null,-1)),t[53]||(t[53]=e.createElementVNode("line",{x1:"12",y1:"22.08",x2:"12",y2:"12"},null,-1))],64)):a.name==="globe"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:25},[e.createCommentVNode(" Globe / External "),t[54]||(t[54]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[55]||(t[55]=e.createElementVNode("line",{x1:"2",y1:"12",x2:"22",y2:"12"},null,-1)),t[56]||(t[56]=e.createElementVNode("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"},null,-1))],64)):a.name==="cycle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:26},[e.createCommentVNode(" Refresh / Cycle (for agent) "),t[57]||(t[57]=e.createElementVNode("polyline",{points:"23 4 23 10 17 10"},null,-1)),t[58]||(t[58]=e.createElementVNode("polyline",{points:"1 20 1 14 7 14"},null,-1)),t[59]||(t[59]=e.createElementVNode("path",{d:"M3.51 9a9 9 0 0 1 14.85-3.36L23 10"},null,-1)),t[60]||(t[60]=e.createElementVNode("path",{d:"M20.49 15a9 9 0 0 1-14.85 3.36L1 14"},null,-1))],64)):a.name==="send"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:27},[e.createCommentVNode(" Send (arrow up) "),t[61]||(t[61]=e.createElementVNode("line",{x1:"12",y1:"19",x2:"12",y2:"5"},null,-1)),t[62]||(t[62]=e.createElementVNode("polyline",{points:"5 12 12 5 19 12"},null,-1))],64)):a.name==="send-plane"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:28},[e.createCommentVNode(" Send Plane (paper airplane) "),t[63]||(t[63]=e.createElementVNode("line",{x1:"22",y1:"2",x2:"11",y2:"13"},null,-1)),t[64]||(t[64]=e.createElementVNode("polygon",{points:"22 2 15 22 11 13 2 9 22 2"},null,-1))],64)):a.name==="stop-dot"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:29},[e.createCommentVNode(" Stop Dot (pulsing circle) "),t[65]||(t[65]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"6",class:"stop-pulse"},null,-1)),t[66]||(t[66]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",class:"stop-pulse-ring"},null,-1))],64)):a.name==="wrench"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:30},[e.createCommentVNode(" Wrench / Tool "),t[67]||(t[67]=e.createElementVNode("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"},null,-1))],64)):a.name==="database"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:31},[e.createCommentVNode(" Database "),t[68]||(t[68]=e.createElementVNode("ellipse",{cx:"12",cy:"5",rx:"9",ry:"3"},null,-1)),t[69]||(t[69]=e.createElementVNode("path",{d:"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"},null,-1)),t[70]||(t[70]=e.createElementVNode("path",{d:"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"},null,-1))],64)):a.name==="user"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:32},[e.createCommentVNode(" User / Person "),t[71]||(t[71]=e.createElementVNode("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"},null,-1)),t[72]||(t[72]=e.createElementVNode("circle",{cx:"12",cy:"7",r:"4"},null,-1))],64)):a.name==="info"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:33},[e.createCommentVNode(" Info "),t[73]||(t[73]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[74]||(t[74]=e.createElementVNode("line",{x1:"12",y1:"16",x2:"12",y2:"12"},null,-1)),t[75]||(t[75]=e.createElementVNode("line",{x1:"12",y1:"8",x2:"12.01",y2:"8"},null,-1))],64)):a.name==="lightbulb"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:34},[e.createCommentVNode(" Lightbulb / Suggestion "),t[76]||(t[76]=e.createElementVNode("path",{d:"M9 18h6"},null,-1)),t[77]||(t[77]=e.createElementVNode("path",{d:"M10 22h4"},null,-1)),t[78]||(t[78]=e.createElementVNode("path",{d:"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14"},null,-1))],64)):a.name==="sparkles"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:35},[e.createCommentVNode(" Sparkles / Auto "),t[79]||(t[79]=e.createStaticVNode('<path d="M13.5 4L15 8l4 .5L15 12l1.5 4-4-2-4 2L10 12l-4-3.5L10 8z" data-v-faf69761></path><line x1="3" y1="18" x2="3" y2="21" data-v-faf69761></line><line x1="21" y1="18" x2="21" y2="21" data-v-faf69761></line><line x1="7" y1="20" x2="11" y2="20" data-v-faf69761></line><line x1="17" y1="20" x2="19" y2="20" data-v-faf69761></line>',5))],64)):a.name==="bot"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:36},[e.createCommentVNode(" Bot / AI "),t[80]||(t[80]=e.createStaticVNode('<rect x="3" y="11" width="18" height="10" rx="2" data-v-faf69761></rect><circle cx="12" cy="5" r="2" data-v-faf69761></circle><path d="M12 7v4" data-v-faf69761></path><line x1="8" y1="16" x2="8" y2="16" data-v-faf69761></line><line x1="16" y1="16" x2="16" y2="16" data-v-faf69761></line>',5))],64)):a.name==="file-js"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:37},[e.createCommentVNode(" File Type Icons "),t[81]||(t[81]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[82]||(t[82]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[83]||(t[83]=e.createElementVNode("text",{x:"8",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"JS",-1))],64)):a.name==="file-ts"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:38},[t[84]||(t[84]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[85]||(t[85]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[86]||(t[86]=e.createElementVNode("text",{x:"8",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"TS",-1))],64)):a.name==="file-go"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:39},[t[87]||(t[87]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[88]||(t[88]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[89]||(t[89]=e.createElementVNode("text",{x:"9",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Go",-1))],64)):a.name==="file-py"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:40},[t[90]||(t[90]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[91]||(t[91]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[92]||(t[92]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Py",-1))],64)):a.name==="file-java"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:41},[t[93]||(t[93]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[94]||(t[94]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[95]||(t[95]=e.createElementVNode("text",{x:"6",y:"17","font-size":"8",fill:"currentColor","font-weight":"bold",stroke:"none"},"Java",-1))],64)):a.name==="file-html"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:42},[t[96]||(t[96]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[97]||(t[97]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[98]||(t[98]=e.createElementVNode("text",{x:"6",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"HTML",-1))],64)):a.name==="file-css"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:43},[t[99]||(t[99]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[100]||(t[100]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[101]||(t[101]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"CSS",-1))],64)):a.name==="file-json"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:44},[t[102]||(t[102]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[103]||(t[103]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[104]||(t[104]=e.createElementVNode("text",{x:"5",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"{ }",-1))],64)):a.name==="file-md"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:45},[t[105]||(t[105]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[106]||(t[106]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[107]||(t[107]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"MD",-1))],64)):a.name==="file-vue"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:46},[t[108]||(t[108]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[109]||(t[109]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[110]||(t[110]=e.createElementVNode("text",{x:"7",y:"17","font-size":"9",fill:"currentColor","font-weight":"bold",stroke:"none"},"Vue",-1))],64)):a.name==="copy"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:47},[e.createCommentVNode(" Copy "),t[111]||(t[111]=e.createElementVNode("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"},null,-1)),t[112]||(t[112]=e.createElementVNode("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"},null,-1))],64)):a.name==="minus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:48},[e.createCommentVNode(" Minus "),t[113]||(t[113]=e.createElementVNode("line",{x1:"5",y1:"12",x2:"19",y2:"12"},null,-1))],64)):a.name==="edit"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:49},[e.createCommentVNode(" Edit / Rename "),t[114]||(t[114]=e.createElementVNode("path",{d:"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"},null,-1)),t[115]||(t[115]=e.createElementVNode("path",{d:"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"},null,-1))],64)):a.name==="trash"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:50},[e.createCommentVNode(" Trash / Delete "),t[116]||(t[116]=e.createElementVNode("polyline",{points:"3 6 5 6 21 6"},null,-1)),t[117]||(t[117]=e.createElementVNode("path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"},null,-1))],64)):a.name==="file-plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:51},[e.createCommentVNode(" File Plus / New File "),t[118]||(t[118]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[119]||(t[119]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[120]||(t[120]=e.createElementVNode("line",{x1:"12",y1:"18",x2:"12",y2:"12"},null,-1)),t[121]||(t[121]=e.createElementVNode("line",{x1:"9",y1:"15",x2:"15",y2:"15"},null,-1))],64)):a.name==="message-square"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:52},[e.createCommentVNode(" Folder Plus / New Folder "),t[122]||(t[122]=e.createElementVNode("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"},null,-1))],64)):a.name==="folder-plus"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:53},[t[123]||(t[123]=e.createElementVNode("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2v3"},null,-1)),t[124]||(t[124]=e.createElementVNode("line",{x1:"12",y1:"11",x2:"12",y2:"17"},null,-1)),t[125]||(t[125]=e.createElementVNode("line",{x1:"9",y1:"14",x2:"15",y2:"14"},null,-1))],64)):a.name==="brain"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:54},[e.createCommentVNode(" Brain / Thinking "),t[126]||(t[126]=e.createElementVNode("path",{d:"M12 2a4 4 0 0 0-4 4v1a5 5 0 0 0-5 5v1a4 4 0 0 0 3 3.87V17a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3v-.13A4 4 0 0 0 21 13v-1a5 5 0 0 0-5-5V6a4 4 0 0 0-4-4z"},null,-1)),t[127]||(t[127]=e.createElementVNode("path",{d:"M9 12v2"},null,-1)),t[128]||(t[128]=e.createElementVNode("path",{d:"M15 12v2"},null,-1)),t[129]||(t[129]=e.createElementVNode("path",{d:"M12 9v5"},null,-1))],64)):a.name==="check"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:55},[e.createCommentVNode(" Check / Success "),t[130]||(t[130]=e.createElementVNode("polyline",{points:"20 6 9 17 4 12"},null,-1))],64)):a.name==="clock"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:56},[e.createCommentVNode(" Clock / Pending "),t[131]||(t[131]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[132]||(t[132]=e.createElementVNode("polyline",{points:"12 6 12 12 16 14"},null,-1))],64)):a.name==="help"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:57},[e.createCommentVNode(" Help / Question "),t[133]||(t[133]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"10"},null,-1)),t[134]||(t[134]=e.createElementVNode("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"},null,-1)),t[135]||(t[135]=e.createElementVNode("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"},null,-1))],64)):a.name==="shield"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:58},[e.createCommentVNode(" Shield / Approval "),t[136]||(t[136]=e.createElementVNode("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"},null,-1))],64)):a.name==="shield-off"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:59},[e.createCommentVNode(" Shield Off / No Review "),t[137]||(t[137]=e.createElementVNode("path",{d:"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"},null,-1)),t[138]||(t[138]=e.createElementVNode("line",{x1:"4",y1:"4",x2:"20",y2:"20",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1))],64)):a.name==="code"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:60},[e.createCommentVNode(" Code / Brackets "),t[139]||(t[139]=e.createElementVNode("polyline",{points:"16 18 22 12 16 6"},null,-1)),t[140]||(t[140]=e.createElementVNode("polyline",{points:"8 6 2 12 8 18"},null,-1))],64)):a.name==="list"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:61},[e.createCommentVNode(" List / Menu "),t[141]||(t[141]=e.createStaticVNode('<line x1="8" y1="6" x2="21" y2="6" data-v-faf69761></line><line x1="8" y1="12" x2="21" y2="12" data-v-faf69761></line><line x1="8" y1="18" x2="21" y2="18" data-v-faf69761></line><line x1="3" y1="6" x2="3.01" y2="6" data-v-faf69761></line><line x1="3" y1="12" x2="3.01" y2="12" data-v-faf69761></line><line x1="3" y1="18" x2="3.01" y2="18" data-v-faf69761></line>',6))],64)):a.name==="layers"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:62},[e.createCommentVNode(" Layers / Stack / Context "),t[142]||(t[142]=e.createElementVNode("polygon",{points:"12 2 2 7 12 12 22 7 12 2"},null,-1)),t[143]||(t[143]=e.createElementVNode("polyline",{points:"2 17 12 22 22 17"},null,-1)),t[144]||(t[144]=e.createElementVNode("polyline",{points:"2 12 12 17 22 12"},null,-1))],64)):a.name==="eye"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:63},[e.createCommentVNode(" Eye / Show "),t[145]||(t[145]=e.createElementVNode("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"},null,-1)),t[146]||(t[146]=e.createElementVNode("circle",{cx:"12",cy:"12",r:"3"},null,-1))],64)):a.name==="eye-off"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:64},[e.createCommentVNode(" Eye Off / Hide "),t[147]||(t[147]=e.createElementVNode("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94"},null,-1)),t[148]||(t[148]=e.createElementVNode("path",{d:"M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19"},null,-1)),t[149]||(t[149]=e.createElementVNode("line",{x1:"1",y1:"1",x2:"23",y2:"23"},null,-1))],64)):a.name==="bug"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:65},[e.createCommentVNode(" Bug "),t[150]||(t[150]=e.createStaticVNode('<rect x="8" y="2" width="8" height="4" rx="1" ry="1" data-v-faf69761></rect><path d="M20 12h-3a5 5 0 0 1-5 5 5 5 0 0 1-5-5H4" data-v-faf69761></path><path d="M4 8h16" data-v-faf69761></path><path d="M12 2v7" data-v-faf69761></path><path d="M9 17l-3 4" data-v-faf69761></path><path d="M15 17l3 4" data-v-faf69761></path>',6))],64)):a.name==="check-circle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:66},[e.createCommentVNode(" Check Circle "),t[151]||(t[151]=e.createElementVNode("path",{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"},null,-1)),t[152]||(t[152]=e.createElementVNode("polyline",{points:"22 4 12 14.01 9 11.01"},null,-1))],64)):a.name==="book-open"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:67},[e.createCommentVNode(" Book Open / Documentation "),t[153]||(t[153]=e.createElementVNode("path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"},null,-1)),t[154]||(t[154]=e.createElementVNode("path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"},null,-1))],64)):a.name==="tool"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:68},[e.createCommentVNode(" Tool / Wrench alternate "),t[155]||(t[155]=e.createElementVNode("path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"},null,-1))],64)):a.name==="keyboard"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:69},[e.createCommentVNode(" Keyboard "),t[156]||(t[156]=e.createStaticVNode('<rect x="2" y="4" width="20" height="16" rx="2" ry="2" data-v-faf69761></rect><line x1="6" y1="8" x2="6.01" y2="8" data-v-faf69761></line><line x1="10" y1="8" x2="10.01" y2="8" data-v-faf69761></line><line x1="14" y1="8" x2="14.01" y2="8" data-v-faf69761></line><line x1="18" y1="8" x2="18.01" y2="8" data-v-faf69761></line><line x1="6" y1="12" x2="6.01" y2="12" data-v-faf69761></line><line x1="10" y1="12" x2="10.01" y2="12" data-v-faf69761></line><line x1="14" y1="12" x2="14.01" y2="12" data-v-faf69761></line><line x1="18" y1="12" x2="18.01" y2="12" data-v-faf69761></line><line x1="6" y1="16" x2="18" y2="16" data-v-faf69761></line>',10))],64)):a.name==="chevron-left"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:70},[e.createCommentVNode(" Chevron Left "),t[157]||(t[157]=e.createElementVNode("polyline",{points:"15 6 9 12 15 18"},null,-1))],64)):a.name==="grid"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:71},[e.createCommentVNode(" Grid / App Grid "),t[158]||(t[158]=e.createElementVNode("rect",{x:"3",y:"3",width:"7",height:"7"},null,-1)),t[159]||(t[159]=e.createElementVNode("rect",{x:"14",y:"3",width:"7",height:"7"},null,-1)),t[160]||(t[160]=e.createElementVNode("rect",{x:"14",y:"14",width:"7",height:"7"},null,-1)),t[161]||(t[161]=e.createElementVNode("rect",{x:"3",y:"14",width:"7",height:"7"},null,-1))],64)):a.name==="puzzle"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:72},[e.createCommentVNode(" Puzzle / 插件 "),t[162]||(t[162]=e.createElementVNode("path",{d:"M4 7h3a2 2 0 0 1 4 0h9v9h-3a2 2 0 0 0-4 0H4z"},null,-1)),t[163]||(t[163]=e.createElementVNode("path",{d:"M11 7v9"},null,-1))],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:73},[t[164]||(t[164]=e.createElementVNode("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"},null,-1)),t[165]||(t[165]=e.createElementVNode("polyline",{points:"14 2 14 8 20 8"},null,-1)),t[166]||(t[166]=e.createElementVNode("line",{x1:"9",y1:"13",x2:"15",y2:"13"},null,-1)),t[167]||(t[167]=e.createElementVNode("line",{x1:"9",y1:"17",x2:"15",y2:"17"},null,-1))],64))],8,ne))}},[["__scopeId","data-v-faf69761"]]),oe={class:"pn"},ae={class:"pn-head"},re={class:"pn-head-title"},ie=["value","placeholder"],de={key:2,class:"pn-spacer"},me=["disabled","title"],se={key:0,class:"pn-msg pn-msg-err"},ce={key:1,class:"pn-msg"},ye={key:2,class:"pn-metrics"},pe=["title"],ke={class:"pn-metric-k"},fe={class:"pn-body"},Ee={key:0,class:"pn-empty"},Ve={class:"pn-empty-guide"},Ne={class:"pn-side"},ge={key:0,class:"pn-seg"},xe={class:"pn-scroll pn-side-scroll"},Be={class:"pn-main"},Ce={class:"pn-foot"},Se={class:"pn-foot-text"},we=["title"],Me={__name:"PanelShell",props:{title:{type:String,required:!0},icon:{type:String,default:""},file:{type:String,default:null},placeholder:{type:String,default:""},badge:{type:String,default:""},badgeTone:{type:String,default:"muted"},metrics:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},error:{type:String,default:""},notice:{type:String,default:""},empty:{type:Boolean,default:!1},reloadable:{type:Boolean,default:!0},reloadTitle:{type:String,default:"重新载入"},footnote:{type:String,default:""},source:{type:String,default:""}},emits:["update:file","reload"],setup(a){return(c,t)=>(e.openBlock(),e.createElementBlock("div",oe,[e.createElementVNode("div",ae,[a.icon?(e.openBlock(),e.createBlock(K,{key:0,name:a.icon,size:13,class:"pn-head-icon"},null,8,["name"])):e.createCommentVNode("v-if",!0),e.createElementVNode("span",re,e.toDisplayString(a.title),1),a.file!==null&&a.file!==void 0?(e.openBlock(),e.createElementBlock("input",{key:1,value:a.file,class:"pn-head-file",placeholder:a.placeholder,spellcheck:"false",onInput:t[0]||(t[0]=y=>c.$emit("update:file",y.target.value)),onKeyup:t[1]||(t[1]=e.withKeys(y=>c.$emit("reload"),["enter"]))},null,40,ie)):(e.openBlock(),e.createElementBlock("span",de)),a.badge?(e.openBlock(),e.createElementBlock("span",{key:3,class:e.normalizeClass(["pn-badge","pn-badge-"+a.badgeTone])},e.toDisplayString(a.badge),3)):e.createCommentVNode("v-if",!0),e.renderSlot(c.$slots,"head-actions"),a.reloadable?(e.openBlock(),e.createElementBlock("button",{key:4,class:"pn-icon-btn",disabled:a.loading,title:a.reloadTitle,onClick:t[2]||(t[2]=y=>c.$emit("reload"))},[e.createVNode(K,{name:"refresh",size:12,class:e.normalizeClass({"pn-spin":a.loading})},null,8,["class"])],8,me)):e.createCommentVNode("v-if",!0)]),a.error?(e.openBlock(),e.createElementBlock("div",se,e.toDisplayString(a.error),1)):a.notice?(e.openBlock(),e.createElementBlock("div",ce,e.toDisplayString(a.notice),1)):e.createCommentVNode("v-if",!0),!a.empty&&a.metrics.length?(e.openBlock(),e.createElementBlock("div",ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(a.metrics,(y,V)=>(e.openBlock(),e.createElementBlock("div",{key:V,class:"pn-metric",title:y.title||""},[e.createElementVNode("span",ke,e.toDisplayString(y.k),1),e.createElementVNode("b",{class:e.normalizeClass(["pn-metric-v",{"pn-mono":y.mono}])},e.toDisplayString(y.v),3)],8,pe))),128)),t[3]||(t[3]=e.createElementVNode("span",{class:"pn-spacer"},null,-1)),e.renderSlot(c.$slots,"metrics-tail")])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",fe,[a.empty?(e.openBlock(),e.createElementBlock("div",Ee,[e.createElementVNode("div",Ve,[e.renderSlot(c.$slots,"empty")])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("aside",Ne,[c.$slots.segments?(e.openBlock(),e.createElementBlock("div",ge,[e.renderSlot(c.$slots,"segments")])):e.createCommentVNode("v-if",!0),e.createElementVNode("div",xe,[e.renderSlot(c.$slots,"side")])]),e.createElementVNode("div",Be,[e.renderSlot(c.$slots,"main")])],64))]),e.createElementVNode("div",Ce,[e.renderSlot(c.$slots,"foot",{},()=>[e.createElementVNode("span",Se,e.toDisplayString(a.footnote),1)]),t[4]||(t[4]=e.createElementVNode("span",{class:"pn-spacer"},null,-1)),a.source?(e.openBlock(),e.createElementBlock("span",{key:0,class:"pn-foot-src",title:a.source},e.toDisplayString(a.source),9,we)):e.createCommentVNode("v-if",!0)])]))}},be=["disabled"],Fe={key:0,class:"pn-tip pn-mono"},he=["title","onClick"],ze={key:0,class:"pn-dim"},De={key:0,class:"pn-list"},$e=["onClick"],Ae={class:"pn-item-k"},Te={class:"pn-dim pn-mini"},He={class:"pn-item-v"},Le={key:0,class:"pn-tip"},Ie={key:1,class:"pn-tip art-side-hint"},Pe={key:1,class:"pn-list"},Re={class:"pn-mono"},Oe={class:"pn-dim"},je={key:2,class:"pn-list"},Ge={class:"pn-mono"},We={class:"pn-dim"},Je={key:1,class:"pn-dim"},Ue={class:"pn-tip art-side-hint"},qe={key:3,class:"pn-list"},Ke={class:"pn-check-name"},Qe=["title"],Xe={class:"pn-tip art-side-hint"},Ye={key:1,class:"pn-tip"},Ze={class:"pn-scroll art-main"},ue={class:"pn-row-gap"},ve={class:"pn-strong"},_e={class:"pn-dim pn-mini pn-mono"},et={key:0,class:"pn-dim pn-mini"},tt={class:"pn-mono"},nt=["src"],lt={key:1,class:"pn-tip"},ot={class:"pn-tip"},at={class:"pn-mono"},rt={key:0,class:"pn-card"},it={class:"pn-card-title"},dt={class:"pn-mono"},mt={class:"pn-dim"},st={class:"pn-mono"},ct={class:"pn-code"},yt={key:1,class:"pn-tip"},pt=q({__name:"ArtPanel",setup(a){const c=e.ref("art.project.json"),t=e.ref("art.verify.json"),y=e.ref(!1),V=e.ref(""),z=e.ref(""),m=e.ref(null),E=e.ref(null),N=e.ref(""),L=e.ref(!1),B=e.ref(""),D=e.ref(!1),I=e.ref(0),M=e.ref("shapes"),P=e.ref(null),ft=e.ref(null),b=e.computed(()=>m.value&&m.value.layers||[]),g=e.computed(()=>m.value&&m.value.shapes||[]),S=e.computed(()=>(m.value&&m.value.canvas||{}).width||0),F=e.computed(()=>(m.value&&m.value.canvas||{}).height||0),Et=e.computed(()=>m.value&&m.value.meta&&m.value.meta.title||"未命名画板"),R=e.computed(()=>m.value&&m.value.canvas&&m.value.canvas.background||"none"),O=e.computed(()=>(E.value&&E.value.checks||[]).filter(n=>n.pass).length),j=e.computed(()=>(E.value&&E.value.checks||[]).length),Vt=e.computed(()=>E.value?"校验 "+O.value+"/"+j.value:"未校验"),Nt=e.computed(()=>E.value?O.value===j.value?"ok":"bad":"muted"),gt=e.computed(()=>B.value?"data:image/svg+xml;charset=utf-8,"+encodeURIComponent(B.value):"");function xt(n){const l=String(U.state&&U.state.workspaceRoot||"").replace(/[\\/]+$/,"");return l?l+"/"+String(n).replace(/^[\\/]+/,""):n}async function G(n){return(await te.apiGet("/fs/read",{path:xt(n)})).content}async function Q(){if(!y.value){y.value=!0,V.value="",z.value="";try{m.value=JSON.parse(await G(c.value)),E.value=null;try{E.value=JSON.parse(await G(t.value))}catch{}const n=m.value.artifacts&&m.value.artifacts.svg||String(c.value).replace(/\.json$/i,".svg");B.value="",D.value=!1;try{B.value=await G(n)}catch{}N.value=""}catch(n){m.value=null,B.value="",V.value="载入失败:"+(n&&n.message||n)}finally{y.value=!1}}}function d(n,l){const o=typeof n=="number"?n:parseFloat(n);return isFinite(o)?o:l}function Bt(n){const l=n.type;if(l==="rect")return{x:d(n.x,0),y:d(n.y,0),w:d(n.w,0),h:d(n.h,0)};if(l==="circle"){const o=d(n.r,0);return{x:d(n.cx,0)-o,y:d(n.cy,0)-o,w:2*o,h:2*o}}if(l==="ellipse"){const o=d(n.rx,0),r=d(n.ry,0);return{x:d(n.cx,0)-o,y:d(n.cy,0)-r,w:2*o,h:2*r}}if(l==="line"){const o=d(n.x1,0),r=d(n.y1,0),s=d(n.x2,0),i=d(n.y2,0);return{x:Math.min(o,s),y:Math.min(r,i),w:Math.abs(s-o),h:Math.abs(i-r)}}if(l==="path"){const o=String(n.d||"").match(/-?\d+(\.\d+)?/g)||[];let r=1/0,s=1/0,i=-1/0,p=-1/0;for(let f=0;f+1<o.length;f+=2)r=Math.min(r,o[f]),i=Math.max(i,o[f]),s=Math.min(s,o[f+1]),p=Math.max(p,o[f+1]);return isFinite(r)?{x:r,y:s,w:i-r,h:p-s}:{x:0,y:0,w:0,h:0}}if(l==="text"){const o=d(n.fontSize,16),r=String(n.text||"");let s=0;for(let C=0;C<r.length;C++)s+=r.charCodeAt(C)>11904?1:.55;const i=String(n.fontWeight||"400")==="bold"||d(n.fontWeight,400)>=600,p=s*o*(i?1.05:1),f=n.anchor||"start";return{x:f==="middle"?d(n.x,0)-p/2:f==="end"?d(n.x,0)-p:d(n.x,0),y:d(n.y,0)-o*.8,w:p,h:o}}return{x:0,y:0,w:0,h:0}}function Ct(n,l,o){return{x:n[0]*l+n[2]*o+n[4],y:n[1]*l+n[3]*o+n[5]}}function $(n){const l=Bt(n),o=n.transform;if(!o||!o.length)return l;const s=n.type==="circle"||n.type==="ellipse"?Array.from({length:16},(C,w)=>{const ee=Math.PI*2*w/16,At=n.type==="circle"?d(n.r,0):d(n.rx,0),Tt=n.type==="circle"?d(n.r,0):d(n.ry,0);return[d(n.cx,0)+At*Math.cos(ee),d(n.cy,0)+Tt*Math.sin(ee)]}):[[l.x,l.y],[l.x+l.w,l.y],[l.x+l.w,l.y+l.h],[l.x,l.y+l.h]];let i=1/0,p=1/0,f=-1/0,T=-1/0;return s.forEach(C=>{const w=Ct(o,C[0],C[1]);i=Math.min(i,w.x),f=Math.max(f,w.x),p=Math.min(p,w.y),T=Math.max(T,w.y)}),{x:i,y:p,w:f-i,h:T-p}}function k(n){const l=Math.round(d(n,0)*100)/100;return String(l)}const X=e.computed(()=>g.value.map(n=>{const l=$(n),o=n.type==="line";return{id:n.id,type:n.type,layer:n.layer,pos:k(l.x)+","+k(l.y),size:k(l.w)+"×"+k(l.h),fill:o?"(线)":String(n.fill===void 0?"none":n.fill),fillCss:o||!n.fill||n.fill==="none"?"transparent":n.fill}})),St=e.computed(()=>b.value.map((n,l)=>{let o=0;return g.value.forEach(r=>{(b.value.some(p=>p.id===r.layer)?r.layer:(b.value[0]||{}).id)===n.id&&o++}),{id:n.id,name:n.name||"",index:l,count:o,visible:n.visible!==!1}})),W=e.computed(()=>{if(!g.value.length)return{range:"(空)",pct:"0.0"};let n=null;g.value.forEach(o=>{const r=$(o);n=n?{x:Math.min(n.x,r.x),y:Math.min(n.y,r.y),w:Math.max(n.x+n.w,r.x+r.w)-Math.min(n.x,r.x),h:Math.max(n.y+n.h,r.y+r.h)-Math.min(n.y,r.y)}:{x:r.x,y:r.y,w:r.w,h:r.h}});const l=S.value&&F.value?Math.min(100,n.w*n.h/(S.value*F.value)*100):0;return{range:"x "+k(n.x)+".."+k(n.x+n.w)+",y "+k(n.y)+".."+k(n.y+n.h),pct:l.toFixed(1)}}),wt=e.computed(()=>[{k:"画布",v:S.value+"×"+F.value,mono:!0},{k:"底色",v:R.value,mono:!0},{k:"图层",v:String(b.value.length)},{k:"图元",v:String(g.value.length)},{k:"用色",v:String(J.value.length)},{k:"覆盖",v:W.value.pct+"%"}]),Mt=e.computed(()=>[{id:"shapes",name:"图元",count:g.value.length,title:"图元清单(点行高亮定位)"},{id:"layers",name:"图层",count:b.value.length,title:"图层清单(从下到上)"},{id:"colors",name:"颜色",count:J.value.length,title:"用色与对比度"},{id:"checks",name:"校验",count:E.value?O.value+"/"+j.value:0,title:"工程校验报告"}]),bt={black:[0,0,0],white:[255,255,255],gray:[128,128,128],grey:[128,128,128],red:[255,0,0],green:[0,128,0],blue:[0,0,255],orange:[255,165,0],yellow:[255,255,0]};function h(n){const l=String(n||"").trim().toLowerCase();if(!l||l==="none"||l==="transparent")return null;if(l[0]==="#"){const r=l.slice(1);return r.length===3?[parseInt(r[0]+r[0],16),parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16)]:r.length>=6?[parseInt(r.slice(0,2),16),parseInt(r.slice(2,4),16),parseInt(r.slice(4,6),16)]:null}const o=/^rgba?\(([^)]+)\)$/.exec(l);if(o){const r=o[1].split(/[\s,\/]+/).filter(s=>s!=="");return r.length<3?null:[parseFloat(r[0]),parseFloat(r[1]),parseFloat(r[2])]}return bt[l]||null}function Y(n){const l=o=>{const r=o/255;return r<=.03928?r/12.92:Math.pow((r+.055)/1.055,2.4)};return .2126*l(n[0])+.7152*l(n[1])+.0722*l(n[2])}function Z(n,l){const o=Y(n),r=Y(l);return(Math.max(o,r)+.05)/(Math.min(o,r)+.05)}const J=e.computed(()=>{const n=m.value&&m.value.canvas&&m.value.canvas.background||"none",l=h(n)||[255,255,255],o={};return g.value.forEach(r=>{r.fill&&r.fill!=="none"&&r.type!=="line"&&(o[r.fill]=(o[r.fill]||0)+1),r.stroke&&r.stroke!=="none"&&(o[r.stroke]=(o[r.stroke]||0)+1)}),Object.keys(o).map(r=>{const s=h(r),i=s?Z(s,l):null;return{raw:r,count:o[r],ratio:i,pass:i!==null&&i>=4.5}}).sort((r,s)=>s.count-r.count)}),x=e.computed(()=>g.value.find(n=>n.id===N.value)||null),Ft=e.computed(()=>{const n=x.value;if(!n)return[];const l=$(n),o=[{k:"图层 / z",v:String(n.layer)+" / "+String(n.z)},{k:"包围盒",v:k(l.x)+","+k(l.y)+" "+k(l.w)+"×"+k(l.h)}],r=["x","y","w","h","rx","cx","cy","r","rx","ry","x1","y1","x2","y2","d","text","fontSize","fontWeight","anchor"],s={};return r.forEach(i=>{s[i]||n[i]===void 0||(s[i]=!0,o.push({k:i,v:String(n[i])}))}),n.points&&o.push({k:"points",v:n.points.length+" 点"}),n.type!=="line"&&o.push({k:"fill",v:String(n.fill===void 0?"none":n.fill)}),o.push({k:"stroke",v:String(n.stroke===void 0?"none":n.stroke)+(Number(n.strokeWidth)>0?" / "+n.strokeWidth:"")}),Number(n.opacity)<1&&o.push({k:"opacity",v:String(n.opacity)}),n.transform&&o.push({k:"transform",v:n.transform.map(k).join(" ")}),o}),u=e.computed(()=>{const n=x.value;if(!n)return"";const l=h(m.value.canvas&&m.value.canvas.background||"none"),o=n.fill&&n.fill!=="none"?n.fill:"#2563EB";return[JSON.stringify({op:"shape.move",id:n.id,dx:0,dy:0}),JSON.stringify({op:"shape.set",id:n.id,set:{fill:o}}),JSON.stringify({op:"shape.set",id:n.id,set:{stroke:"#111827",strokeWidth:2}}),JSON.stringify({op:"shape.z",id:n.id,mode:"front"}),JSON.stringify({op:"shape.remove",id:n.id}),"","// "+n.id+" 当前 fill "+String(n.fill===void 0?"none":n.fill)+"(与画板底色对比度 "+(()=>{const r=h(n.fill);return r&&l?Z(r,l).toFixed(2)+":1":"n/a"})()+",AA 需 ≥ 4.5:1)"].join(`
|
|
2
|
+
`)});async function ht(){try{await navigator.clipboard.writeText(u.value),L.value=!0,setTimeout(()=>{L.value=!1},1600)}catch{z.value="复制失败(浏览器未授权剪贴板):可手动选中上面的命令文本。"}}function zt(n){N.value=N.value===n?"":n,N.value&&A()}const v=e.computed(()=>{const n=x.value;if(!n||!I.value)return null;const l=$(n),o=I.value/(S.value||1);return{left:l.x*o+"px",top:l.y*o+"px",width:Math.max(2,l.w*o)+"px",height:Math.max(2,l.h*o)+"px"}});function A(){const n=P.value;n&&(I.value=n.clientWidth||0)}function Dt(){D.value=!0,A()}function $t(){const n=P.value;if(!n||!D.value){V.value="预览尚未就绪,稍后再试";return}try{const l=document.createElement("canvas");l.width=S.value,l.height=F.value;const o=l.getContext("2d"),r=R.value;r&&r!=="none"&&h(r)&&(o.fillStyle=r,o.fillRect(0,0,l.width,l.height)),o.drawImage(n,0,0,l.width,l.height);const s=l.toDataURL("image/png"),i=document.createElement("a");i.href=s,i.download=String(c.value).replace(/\.json$/i,"")+".png",document.body.appendChild(i),i.click(),i.remove(),z.value="已导出 PNG("+l.width+"×"+l.height+"):"+i.download+"(浏览器下载目录)"}catch(l){V.value="PNG 导出失败:"+(l&&l.message||l)}}function _(){A()}return e.onMounted(()=>{window.addEventListener("resize",_),Q()}),e.onBeforeUnmount(()=>{window.removeEventListener("resize",_)}),e.watch(N,()=>{A()}),(n,l)=>(e.openBlock(),e.createBlock(Me,{file:c.value,"onUpdate:file":l[1]||(l[1]=o=>c.value=o),title:"画板",icon:"grid",placeholder:"art.project.json",badge:Vt.value,"badge-tone":Nt.value,metrics:wt.value,loading:y.value,error:m.value?V.value:"",notice:z.value,empty:!m.value,"reload-title":"重新载入工程、SVG 与校验报告",footnote:"只读面板:改动画板请让 Agent 执行 art_edit(命令式 op)—— 面板不写工作区,避免与工具形成两条写路径。",source:c.value,onReload:Q},{"head-actions":e.withCtx(()=>[e.createElementVNode("button",{class:"pn-btn",disabled:!B.value||!D.value,title:"用浏览器 canvas 绘制已渲染的 SVG 并下载 PNG",onClick:$t}," 导出 PNG ",8,be)]),empty:e.withCtx(()=>[l[2]||(l[2]=e.createElementVNode("div",{class:"pn-empty-title"},"还没有画板工程",-1)),l[3]||(l[3]=e.createElementVNode("div",{class:"pn-tip"},[e.createTextVNode(" 面板读工作区根目录的 "),e.createElementVNode("code",null,"art.project.json"),e.createTextVNode("(与 Agent 共用同一份真相源),当前没有这个文件,所以没有可看的内容。 ")],-1)),V.value?(e.openBlock(),e.createElementBlock("div",Fe,e.toDisplayString(V.value),1)):e.createCommentVNode("v-if",!0),l[4]||(l[4]=e.createElementVNode("div",{class:"pn-card"},[e.createElementVNode("div",{class:"pn-card-title"},"三步开始"),e.createElementVNode("div",{class:"pn-empty-step"},[e.createElementVNode("i",null,"1"),e.createElementVNode("span",null,[e.createTextVNode("让 Agent 执行 "),e.createElementVNode("code",null,"art_project"),e.createTextVNode(" 创建工程(画布尺寸 + 图层)。")])]),e.createElementVNode("div",{class:"pn-empty-step"},[e.createElementVNode("i",null,"2"),e.createElementVNode("span",null,[e.createTextVNode("用 "),e.createElementVNode("code",null,"art_edit"),e.createTextVNode(" 添加图元(rect / circle / text / line …)。")])]),e.createElementVNode("div",{class:"pn-empty-step"},[e.createElementVNode("i",null,"3"),e.createElementVNode("span",null,[e.createElementVNode("code",null,"art_export"),e.createTextVNode(" 导出 SVG、"),e.createElementVNode("code",null,"art_verify"),e.createTextVNode(" 生成校验报告。")])])],-1)),l[5]||(l[5]=e.createElementVNode("div",{class:"pn-tip"},"做完第 1 步后点右上角刷新,即可看到画布。",-1))]),segments:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Mt.value,o=>(e.openBlock(),e.createElementBlock("button",{key:o.id,class:e.normalizeClass(["pn-tab",{"pn-tab-on":M.value===o.id}]),title:o.title,onClick:r=>M.value=o.id},[e.createTextVNode(e.toDisplayString(o.name),1),o.count?(e.openBlock(),e.createElementBlock("span",ze,e.toDisplayString(o.count),1)):e.createCommentVNode("v-if",!0)],10,he))),128))]),side:e.withCtx(()=>[M.value==="shapes"?(e.openBlock(),e.createElementBlock("div",De,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(X.value,o=>(e.openBlock(),e.createElementBlock("button",{key:o.id,class:e.normalizeClass(["pn-item",{"pn-item-on":o.id===N.value}]),onClick:r=>zt(o.id)},[e.createElementVNode("span",{class:"pn-swatch",style:e.normalizeStyle({background:o.fillCss})},null,4),e.createElementVNode("span",Ae,e.toDisplayString(o.id),1),e.createElementVNode("span",Te,e.toDisplayString(o.type)+" · "+e.toDisplayString(o.layer),1),e.createElementVNode("span",He,e.toDisplayString(o.size),1)],10,$e))),128)),X.value.length?(e.openBlock(),e.createElementBlock("div",Ie,"点行可在右侧画布高亮定位。")):(e.openBlock(),e.createElementBlock("div",Le,"还没有图元。"))])):M.value==="layers"?(e.openBlock(),e.createElementBlock("div",Pe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(St.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:"pn-kv"},[e.createElementVNode("span",Re,e.toDisplayString(o.id),1),e.createElementVNode("b",null,[e.createTextVNode(e.toDisplayString(o.name)+" ",1),e.createElementVNode("span",Oe,e.toDisplayString(o.count)+" 图元"+e.toDisplayString(o.visible?"":" · 隐藏"),1)])]))),128)),l[6]||(l[6]=e.createElementVNode("div",{class:"pn-tip art-side-hint"},"顺序 = 从下到上(后画的在上)。",-1))])):M.value==="colors"?(e.openBlock(),e.createElementBlock("div",je,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(J.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.raw,class:"pn-kv"},[e.createElementVNode("span",{class:"pn-swatch",style:e.normalizeStyle({background:o.raw})},null,4),e.createElementVNode("b",Ge,e.toDisplayString(o.raw),1),e.createElementVNode("span",We,"×"+e.toDisplayString(o.count),1),l[7]||(l[7]=e.createElementVNode("span",{class:"pn-spacer"},null,-1)),o.ratio!==null?(e.openBlock(),e.createElementBlock("b",{key:0,class:e.normalizeClass(o.pass?"pn-pass":"pn-warn")},e.toDisplayString(o.ratio.toFixed(2))+":1"+e.toDisplayString(o.pass?" AA":" 低于 4.5"),3)):(e.openBlock(),e.createElementBlock("span",Je,"—"))]))),128)),e.createElementVNode("div",Ue,"按「色 vs 画板底色("+e.toDisplayString(R.value)+")」估算;文字实际底色由校验 V6 精确判定。",1)])):(e.openBlock(),e.createElementBlock("div",qe,[E.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(E.value.checks||[],o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:"pn-check"},[e.createElementVNode("span",{class:e.normalizeClass(["pn-dot",{"pn-dot-ok":o.pass}])},null,2),e.createElementVNode("b",null,e.toDisplayString(o.id),1),e.createElementVNode("span",Ke,e.toDisplayString(o.name),1),e.createElementVNode("span",{class:"pn-check-metric",title:o.metric},e.toDisplayString(o.metric),9,Qe)]))),128)),e.createElementVNode("div",Xe,"报告时间:"+e.toDisplayString(E.value.ts),1)],64)):(e.openBlock(),e.createElementBlock("div",Ye,[...l[8]||(l[8]=[e.createTextVNode(" 还没有校验报告。让 Agent 执行 ",-1),e.createElementVNode("code",null,"art_verify",-1),e.createTextVNode(" 生成旁挂的 art.verify.json。 ",-1)])]))]))]),main:e.withCtx(()=>[e.createElementVNode("div",Ze,[e.createElementVNode("div",ue,[e.createElementVNode("span",ve,e.toDisplayString(Et.value),1),e.createElementVNode("span",_e,e.toDisplayString(S.value)+"×"+e.toDisplayString(F.value),1),l[10]||(l[10]=e.createElementVNode("span",{class:"pn-spacer"},null,-1)),x.value?(e.openBlock(),e.createElementBlock("span",et,[l[9]||(l[9]=e.createTextVNode("已选中 ",-1)),e.createElementVNode("span",tt,e.toDisplayString(x.value.id),1)])):e.createCommentVNode("v-if",!0)]),e.createElementVNode("div",{ref_key:"wrapEl",ref:ft,class:"pn-preview"},[B.value?(e.openBlock(),e.createElementBlock("img",{key:0,ref_key:"imgEl",ref:P,class:"art-canvas",src:gt.value,alt:"画板预览",onLoad:Dt},null,40,nt)):(e.openBlock(),e.createElementBlock("div",lt,[...l[11]||(l[11]=[e.createTextVNode(" 未找到 SVG 产物。让 Agent 执行 ",-1),e.createElementVNode("code",null,"art_export",-1),e.createTextVNode(" 生成(默认 art.svg)。 ",-1)])])),v.value?(e.openBlock(),e.createElementBlock("div",{key:2,class:"art-hl",style:e.normalizeStyle(v.value)},null,4)):e.createCommentVNode("v-if",!0)],512),e.createElementVNode("div",ot,[l[12]||(l[12]=e.createTextVNode(" 覆盖范围 ",-1)),e.createElementVNode("span",at,e.toDisplayString(W.value.range),1),e.createTextVNode("(占画布 "+e.toDisplayString(W.value.pct)+"%);浏览器用 img + data URI 渲染 SVG(脚本不执行)。 ",1)]),x.value?(e.openBlock(),e.createElementBlock("div",rt,[e.createElementVNode("div",it,[l[13]||(l[13]=e.createTextVNode(" 选中 ",-1)),e.createElementVNode("span",dt,e.toDisplayString(x.value.id),1),e.createElementVNode("span",mt,e.toDisplayString(x.value.type),1),l[14]||(l[14]=e.createElementVNode("span",{class:"pn-spacer"},null,-1)),e.createElementVNode("button",{class:"pn-btn",onClick:l[0]||(l[0]=o=>N.value="")},"取消")]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ft.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.k,class:"pn-kv"},[e.createElementVNode("span",null,e.toDisplayString(o.k),1),e.createElementVNode("b",st,e.toDisplayString(o.v),1)]))),128)),l[15]||(l[15]=e.createElementVNode("div",{class:"pn-tip"},"面板只读 —— 复制下面命令交给 Agent 执行即可改这份真相源:",-1)),e.createElementVNode("pre",ct,e.toDisplayString(u.value),1),e.createElementVNode("div",null,[e.createElementVNode("button",{class:"pn-btn",onClick:ht},e.toDisplayString(L.value?"已复制 ✓":"复制 op"),1)])])):(e.openBlock(),e.createElementBlock("div",yt,"点左栏「图元」里的任意一行:画布上会高亮定位,这里会显示它的完整属性与可直接复制的 op 命令。"))])]),_:1},8,["file","badge","badge-tone","metrics","loading","error","notice","empty","source"]))}},[["__scopeId","data-v-0d121a05"]]);function kt(a){const c=e.createApp(pt);return c.mount(a),()=>{c.unmount()}}return H.mount=kt,Object.defineProperty(H,Symbol.toStringTag,{value:"Module"}),H})({},window.__PAIRCODE_CORE.Vue,window.__PAIRCODE_CORE.api,window.__PAIRCODE_CORE.uiState);
|
package/client.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// tool-art — client
|
|
1
|
+
// tool-art — client 半:注册「画板」主内容区视图并注入 bundle
|
|
2
2
|
//
|
|
3
3
|
// ★ 2026-09-17 合并:本插件原本拆成 tool-art(工具面)+ ui-art(UI 面)两个独立
|
|
4
4
|
// 发布包,同属一个创作域却分两处维护(版本/文档/发布各一份,且用户看不出「AI 用的
|
|
@@ -10,8 +10,12 @@
|
|
|
10
10
|
// 区域发现对「同包同时含 dsh.ui + dsh.ui.build」的包生效,与工具面共存无冲突)。
|
|
11
11
|
// external 共享核心(Vue/api 等)从 window.__PAIRCODE_CORE 取。
|
|
12
12
|
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
13
|
+
// ★ 2026-09-18:不再注册进「插件面板」(ui.registerPanel)—— 那是壳级逃生口的
|
|
14
|
+
// 管理/总览区(docs/plugin-development.md §12 分工表),六域是「编辑器式工作台」,
|
|
15
|
+
// 主内容区视图(ui.registerView)才是它的位置。此前两处同时注册:插件面板里多一个
|
|
16
|
+
// 重复入口,且两处各 mount 一份 Vue 实例(状态不同步)。现只保留 view。
|
|
17
|
+
//
|
|
18
|
+
// 与其余五域同构:只注册主内容区视图(不动壳、纯加法,卸载插件即消失)。
|
|
15
19
|
(ui) => {
|
|
16
20
|
const GLOBAL = 'ArtPanel'
|
|
17
21
|
const JS = 'plugins-assets/tool-art/assets/art-panel.js'
|
|
@@ -26,20 +30,13 @@
|
|
|
26
30
|
document.head.appendChild(link)
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
//
|
|
33
|
+
// 注册视图(bundle 就绪时立即注册;否则先注入 script,onload 后注册)
|
|
30
34
|
const register = () => {
|
|
31
35
|
const bundle = window[GLOBAL]
|
|
32
36
|
if (!bundle || typeof bundle.mount !== 'function') return false
|
|
33
|
-
ui.
|
|
34
|
-
id: 'art-panel',
|
|
35
|
-
title: '画板',
|
|
36
|
-
icon: 'grid',
|
|
37
|
-
render: (el) => bundle.mount(el),
|
|
38
|
-
})
|
|
39
|
-
// ★ 中间区域视图(2026-09 ui.registerView):与「对话 / 编辑器 / 市场 / 工具集」
|
|
37
|
+
// ★ 主内容区视图(2026-09 ui.registerView):与「对话 / 编辑器 / 市场 / 工具集」
|
|
40
38
|
// 同级的主内容区 tab。open:true → 默认以「后台 tab」形式出现,不抢占对话主视图
|
|
41
39
|
// (mainTab 仍是 conversation),点 tab 才激活;可与对话并排(「并排对话」按钮)。
|
|
42
|
-
// 与上面的插件面板共用同一 bundle(render 每次调用各建独立 Vue 实例)。
|
|
43
40
|
ui.registerView({
|
|
44
41
|
id: 'art-view',
|
|
45
42
|
title: '画板',
|
package/index.js
CHANGED
|
@@ -1965,7 +1965,7 @@ function artExport(args, exec, ctx) {
|
|
|
1965
1965
|
if (fmt === 'png') {
|
|
1966
1966
|
// 如实说明边界(不假装能做到):沙箱无渲染器,PNG 由浏览器或后续 Node 桥导出
|
|
1967
1967
|
return '⚠️ PNG 光栅化不在本插件能力内(goja 沙箱没有渲染器)。两条可行路径:\n' +
|
|
1968
|
-
' 1)
|
|
1968
|
+
' 1) 在「画板」面板点「导出 PNG」——浏览器 canvas 绘制 SVG 后落盘(零依赖,推荐);\n' +
|
|
1969
1969
|
' 2) 需要服务端批量出图时,走「服务端导出链」阶段(Node 桥 @resvg/resvg-js,MPL-2.0)。\n' +
|
|
1970
1970
|
'现在也可直接导出矢量:art_export format=svg(SVG 无损、可再编辑、可被 read_image 视觉核对)。';
|
|
1971
1971
|
}
|
|
@@ -1980,14 +1980,14 @@ function artExport(args, exec, ctx) {
|
|
|
1980
1980
|
saveProject(ctx, path, proj);
|
|
1981
1981
|
return '✅ 已导出 SVG → ' + out + '\n' + svg.length + ' 字符,' + proj.shapes.length + ' 个图元,' +
|
|
1982
1982
|
proj.layers.length + ' 个图层(工程 ' + path + ' 已登记产物)\n' +
|
|
1983
|
-
'提示:可用 read_image 直接「看」产物核对渲染;PNG
|
|
1983
|
+
'提示:可用 read_image 直接「看」产物核对渲染;PNG 请在「画板」面板导出。';
|
|
1984
1984
|
}
|
|
1985
1985
|
|
|
1986
1986
|
function artVerify(args, exec, ctx) {
|
|
1987
1987
|
var path = argStr(args, 'path', 'art.project.json');
|
|
1988
1988
|
var proj = loadProject(ctx, path);
|
|
1989
1989
|
var res = verifyProject(ctx, proj, args);
|
|
1990
|
-
// ★
|
|
1990
|
+
// ★ 旁挂校验报告(供「画板」面板展示):不写进工程 JSON —— 工程是真相源,必须保持纯净可 diff
|
|
1991
1991
|
var reportPath = argStr(args, 'report', 'art.verify.json');
|
|
1992
1992
|
var reportErr = '';
|
|
1993
1993
|
try {
|
|
@@ -2009,7 +2009,7 @@ var TOOL_DEFS = [
|
|
|
2009
2009
|
parameters: {
|
|
2010
2010
|
type: 'object',
|
|
2011
2011
|
properties: {
|
|
2012
|
-
path: { type: 'string', description: '工程文件路径(默认 art.project.json
|
|
2012
|
+
path: { type: 'string', description: '工程文件路径(默认 <主项目根>/art.project.json;相对主项目根解析,跨项目传绝对路径)' },
|
|
2013
2013
|
mode: { type: 'string', description: 'create(新建)| show(默认,查看摘要)| update(改画布属性)' },
|
|
2014
2014
|
title: { type: 'string', description: '可选:画板标题' },
|
|
2015
2015
|
width: { type: 'integer', description: '可选:画布宽(像素,1..8192,默认 800)' },
|
|
@@ -2029,7 +2029,7 @@ var TOOL_DEFS = [
|
|
|
2029
2029
|
parameters: {
|
|
2030
2030
|
type: 'object',
|
|
2031
2031
|
properties: {
|
|
2032
|
-
path: { type: 'string', description: '可选:工程路径(默认 art.project.json
|
|
2032
|
+
path: { type: 'string', description: '可选:工程路径(默认 <主项目根>/art.project.json;相对主项目根解析)' },
|
|
2033
2033
|
ops: { type: 'array', description: '编辑命令数组(按顺序应用)' },
|
|
2034
2034
|
op: { type: 'string', description: '可选:单条 op 名(与同层参数合成为一条命令)' },
|
|
2035
2035
|
ids: { type: 'array', description: '可选:目标图元 id 数组' },
|
|
@@ -2048,8 +2048,8 @@ var TOOL_DEFS = [
|
|
|
2048
2048
|
parameters: {
|
|
2049
2049
|
type: 'object',
|
|
2050
2050
|
properties: {
|
|
2051
|
-
path: { type: 'string', description: '要导入的 SVG
|
|
2052
|
-
out: { type: 'string', description: '可选:输出的工程路径(默认 art.project.json
|
|
2051
|
+
path: { type: 'string', description: '要导入的 SVG 文件路径(相对主项目根解析,跨项目传绝对路径)' },
|
|
2052
|
+
out: { type: 'string', description: '可选:输出的工程路径(默认 <主项目根>/art.project.json;相对主项目根解析)' },
|
|
2053
2053
|
title: { type: 'string', description: '可选:画板标题(默认取 SVG 的 <title>)' },
|
|
2054
2054
|
overwrite: { type: 'boolean', description: '可选:目标工程已存在时是否覆盖(默认 false)' },
|
|
2055
2055
|
},
|
|
@@ -2064,22 +2064,22 @@ var TOOL_DEFS = [
|
|
|
2064
2064
|
parameters: {
|
|
2065
2065
|
type: 'object',
|
|
2066
2066
|
properties: {
|
|
2067
|
-
path: { type: 'string', description: '可选:工程路径(默认 art.project.json
|
|
2067
|
+
path: { type: 'string', description: '可选:工程路径(默认 <主项目根>/art.project.json;相对主项目根解析)' },
|
|
2068
2068
|
format: { type: 'string', description: '产物格式:svg(默认,矢量文本产物);png 会返回替代路径说明(沙箱无渲染器)' },
|
|
2069
|
-
out: { type: 'string', description: '可选:输出路径(默认 art.svg
|
|
2069
|
+
out: { type: 'string', description: '可选:输出路径(默认 <主项目根>/art.svg;相对主项目根解析)' },
|
|
2070
2070
|
},
|
|
2071
2071
|
},
|
|
2072
2072
|
},
|
|
2073
2073
|
{
|
|
2074
2074
|
name: 'art_verify',
|
|
2075
2075
|
description: '画板工程专项自检(7 项判据):V1 画板合法(尺寸/viewBox/背景可解析)、V2 图元结构合法(类型/必填字段/正尺寸/id 唯一/layer 存在)、V3 视口可见性(无图元完全落在画板外;部分越界只作提示)、V4 SVG 往返一致(导出 SVG 再导入,几何/样式/id 逐字段比对,容差 1e-3)、V5 确定性(两次导出位级一致)、V6 颜色合法 + 文本对比度达标(WCAG AA,大字 3:1;背景取文本下方的实心图元或画板底色)、V7 图层与层级合法 + 产物无脚本面(无 <script>/on* 事件/javascript: URL)。任一 FAIL 说明产物与真相源不一致或存在设计缺陷,应视为构建失败。',
|
|
2076
|
-
usageGuide: '导出前跑一遍最省事;也可在 CI 里对工程文件跑(只读工程)。V4/V5 是本插件的核心契约;V6 用于挡住"看不见的文字"(低对比度),可用 minContrast 放宽阈值但建议保持 AA。结果同时写成旁挂报告(默认 art.verify.json
|
|
2076
|
+
usageGuide: '导出前跑一遍最省事;也可在 CI 里对工程文件跑(只读工程)。V4/V5 是本插件的核心契约;V6 用于挡住"看不见的文字"(低对比度),可用 minContrast 放宽阈值但建议保持 AA。结果同时写成旁挂报告(默认 art.verify.json)供「画板」面板展示——写报告不改工程本体。',
|
|
2077
2077
|
category: '创作',
|
|
2078
2078
|
parameters: {
|
|
2079
2079
|
type: 'object',
|
|
2080
2080
|
properties: {
|
|
2081
|
-
path: { type: 'string', description: '可选:工程路径(默认 art.project.json
|
|
2082
|
-
report: { type: 'string', description: '可选:旁挂校验报告路径(默认 art.verify.json)' },
|
|
2081
|
+
path: { type: 'string', description: '可选:工程路径(默认 <主项目根>/art.project.json;相对主项目根解析)' },
|
|
2082
|
+
report: { type: 'string', description: '可选:旁挂校验报告路径(默认 <主项目根>/art.verify.json)' },
|
|
2083
2083
|
minContrast: { type: 'number', description: '可选:文本对比度统一阈值(默认按 WCAG:4.5,大字 3.0)' },
|
|
2084
2084
|
},
|
|
2085
2085
|
},
|