@paircode/tool-art 0.1.0 → 0.2.0
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 -0
- package/assets/art-panel.js +2 -0
- package/assets/favicon.svg +23 -0
- package/client.js +68 -0
- package/package.json +22 -2
|
@@ -0,0 +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}.art-panel[data-v-27709329]{display:flex;flex-direction:column;gap:10px;padding:10px;font-size:12px;color:var(--text-primary);height:100%;overflow-y:auto;box-sizing:border-box}.ap-bar[data-v-27709329]{display:flex;align-items:center;gap:6px}.ap-title[data-v-27709329]{font-weight:600;color:var(--text-secondary);flex:none}.ap-input[data-v-27709329]{flex:1;min-width:0;padding:3px 6px;font-size:11px;font-family:ui-monospace,Consolas,monospace;color:var(--text-primary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px}.ap-icon-btn[data-v-27709329]{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}.ap-icon-btn[data-v-27709329]:hover{background:var(--bg-hover)}.spinning[data-v-27709329]{animation:ap-spin-27709329 1s linear infinite}@keyframes ap-spin-27709329{to{transform:rotate(360deg)}}.ap-msg[data-v-27709329]{padding:8px;color:var(--text-muted);line-height:1.6}.ap-err[data-v-27709329]{color:var(--text-primary);border-left:2px solid var(--accent);background:var(--bg-tertiary)}.ap-info[data-v-27709329]{color:var(--text-secondary);border-left:2px solid var(--accent);background:var(--bg-tertiary)}.ap-sec[data-v-27709329]{display:flex;flex-direction:column;gap:4px;padding:8px;background:var(--bg-tertiary);border-radius:6px}.ap-sec-title[data-v-27709329]{display:flex;align-items:center;gap:6px;font-weight:600;color:var(--text-secondary);margin-bottom:2px}.ap-kv[data-v-27709329]{display:flex;gap:8px;justify-content:space-between}.ap-kv>span[data-v-27709329]{color:var(--text-muted);flex:none}.ap-kv>b[data-v-27709329]{font-weight:500;text-align:right;word-break:break-all}.ap-kv-left>b[data-v-27709329]{text-align:left;overflow-wrap:anywhere}.ap-mono[data-v-27709329]{font-family:ui-monospace,Consolas,monospace;font-size:11px;color:var(--text-secondary)}.ap-dim[data-v-27709329]{color:var(--text-muted);font-weight:400}.ap-pass[data-v-27709329]{color:var(--text-secondary)}.ap-fail[data-v-27709329]{color:var(--text-primary)}.ap-row[data-v-27709329]{display:flex;align-items:center;gap:6px}.ap-spacer[data-v-27709329]{flex:1}.ap-btn[data-v-27709329]{padding:3px 10px;font-size:11px;color:var(--text-secondary);background:transparent;border:1px solid var(--border-color);border-radius:4px;cursor:pointer}.ap-btn[data-v-27709329]:hover:not(:disabled){background:var(--bg-hover)}.ap-btn[data-v-27709329]:disabled{opacity:.5;cursor:default}.ap-canvas-wrap[data-v-27709329]{position:relative;width:100%}.ap-canvas[data-v-27709329]{display:block;width:100%;height:auto;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:4px}.ap-hl[data-v-27709329]{position:absolute;border:1px dashed var(--accent);pointer-events:none;box-sizing:border-box}.ap-table[data-v-27709329]{width:100%;border-collapse:collapse;font-size:11px}.ap-table th[data-v-27709329]{color:var(--text-muted);font-weight:500;text-align:left;padding:2px 4px;border-bottom:1px solid var(--border-color)}.ap-table td[data-v-27709329]{padding:2px 4px;border-bottom:1px solid var(--bg-hover)}.ap-table tbody tr[data-v-27709329]{cursor:pointer}.ap-table tbody tr[data-v-27709329]:hover,.ap-row-sel[data-v-27709329]{background:var(--bg-hover)}.ap-fill[data-v-27709329]{margin-left:4px}.ap-swatch[data-v-27709329]{display:inline-block;width:10px;height:10px;border:1px solid var(--border-color);border-radius:2px;vertical-align:middle;margin-right:4px}.ap-code[data-v-27709329]{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}.ap-badge[data-v-27709329]{padding:1px 6px;border-radius:8px;font-size:11px}.ap-dot[data-v-27709329]{width:7px;height:7px;border-radius:50%;flex:none;display:inline-block}.ap-ok[data-v-27709329]{background:var(--accent);color:var(--bg-primary)}.ap-bad[data-v-27709329]{background:var(--text-muted);color:var(--bg-primary)}.ap-check[data-v-27709329]{display:flex;align-items:center;gap:6px}.ap-check>b[data-v-27709329]{flex:none;color:var(--text-secondary)}.ap-check-name[data-v-27709329]{flex:none}.ap-check-metric[data-v-27709329]{flex:1;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
|
|
@@ -0,0 +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);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="leftBracket" x1="0" y1="0" x2="0" y2="1">
|
|
4
|
+
<stop offset="0%" stop-color="#00d4ff"/>
|
|
5
|
+
<stop offset="100%" stop-color="#0077b6"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="rightBracket" x1="0" y1="0" x2="0" y2="1">
|
|
8
|
+
<stop offset="0%" stop-color="#00e676"/>
|
|
9
|
+
<stop offset="100%" stop-color="#00c853"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
</defs>
|
|
12
|
+
|
|
13
|
+
<rect x="32" y="32" width="448" height="448" rx="96" ry="96" fill="#0a1628" stroke="#1a3a4a" stroke-width="2"/>
|
|
14
|
+
|
|
15
|
+
<path d="M180 150 L96 256 L180 362"
|
|
16
|
+
stroke="url(#leftBracket)" stroke-width="40" stroke-linejoin="round" fill="none"/>
|
|
17
|
+
|
|
18
|
+
<path d="M332 150 L416 256 L332 362"
|
|
19
|
+
stroke="url(#rightBracket)" stroke-width="40" stroke-linejoin="round" fill="none"/>
|
|
20
|
+
|
|
21
|
+
<circle cx="256" cy="256" r="18" fill="transparent" stroke="#00e5ff" stroke-width="3" opacity="0.6"/>
|
|
22
|
+
<circle cx="256" cy="256" r="8" fill="#00e5ff" opacity="0.9"/>
|
|
23
|
+
</svg>
|
package/client.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// tool-art — client 半:注册「画板」插件面板并注入 bundle
|
|
2
|
+
//
|
|
3
|
+
// ★ 2026-09-17 合并:本插件原本拆成 tool-art(工具面)+ ui-art(UI 面)两个独立
|
|
4
|
+
// 发布包,同属一个创作域却分两处维护(版本/文档/发布各一份,且用户看不出「AI 用的
|
|
5
|
+
// 工具」和「面板」是同一件事)。现合并为**单包**:host 半 = 画板工程/SVG 内核 + 5 个
|
|
6
|
+
// 工具(index.js),client 半 = 本文件,UI bundle = assets/art-panel.js。
|
|
7
|
+
//
|
|
8
|
+
// 编译产物 assets/art-panel.js(Vite lib IIFE,window.ArtPanel)由
|
|
9
|
+
// node scripts/build-ui.mjs --region art 生成(manifest 的 dsh.ui.build 声明;
|
|
10
|
+
// 区域发现对「同包同时含 dsh.ui + dsh.ui.build」的包生效,与工具面共存无冲突)。
|
|
11
|
+
// external 共享核心(Vue/api 等)从 window.__PAIRCODE_CORE 取。
|
|
12
|
+
//
|
|
13
|
+
// 与 tool-design / tool-music / tool-rig / tool-voice 同样走通用 ui.registerPanel
|
|
14
|
+
// (不动壳、纯加法,卸载插件即消失)。
|
|
15
|
+
(ui) => {
|
|
16
|
+
const GLOBAL = 'ArtPanel'
|
|
17
|
+
const JS = 'plugins-assets/tool-art/assets/art-panel.js'
|
|
18
|
+
const CSS = 'plugins-assets/tool-art/assets/art-panel.css'
|
|
19
|
+
|
|
20
|
+
// 样式注入(幂等)
|
|
21
|
+
if (!document.querySelector('link[data-art-panel-css]')) {
|
|
22
|
+
const link = document.createElement('link')
|
|
23
|
+
link.rel = 'stylesheet'
|
|
24
|
+
link.href = CSS
|
|
25
|
+
link.setAttribute('data-art-panel-css', '1')
|
|
26
|
+
document.head.appendChild(link)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// 注册面板(bundle 就绪时立即注册;否则先注入 script,onload 后注册)
|
|
30
|
+
const register = () => {
|
|
31
|
+
const bundle = window[GLOBAL]
|
|
32
|
+
if (!bundle || typeof bundle.mount !== 'function') return false
|
|
33
|
+
ui.registerPanel({
|
|
34
|
+
id: 'art-panel',
|
|
35
|
+
title: '画板',
|
|
36
|
+
icon: 'grid',
|
|
37
|
+
render: (el) => bundle.mount(el),
|
|
38
|
+
})
|
|
39
|
+
// ★ 中间区域视图(2026-09 ui.registerView):与「对话 / 编辑器 / 市场 / 工具集」
|
|
40
|
+
// 同级的主内容区 tab。open:true → 默认以「后台 tab」形式出现,不抢占对话主视图
|
|
41
|
+
// (mainTab 仍是 conversation),点 tab 才激活;可与对话并排(「并排对话」按钮)。
|
|
42
|
+
// 与上面的插件面板共用同一 bundle(render 每次调用各建独立 Vue 实例)。
|
|
43
|
+
ui.registerView({
|
|
44
|
+
id: 'art-view',
|
|
45
|
+
title: '画板',
|
|
46
|
+
icon: 'grid',
|
|
47
|
+
order: 10,
|
|
48
|
+
open: true,
|
|
49
|
+
render: (el) => bundle.mount(el),
|
|
50
|
+
})
|
|
51
|
+
return true
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (register()) return
|
|
55
|
+
const s = document.createElement('script')
|
|
56
|
+
s.src = JS
|
|
57
|
+
s.onload = () => {
|
|
58
|
+
if (!register()) {
|
|
59
|
+
ui.reportFailure('render', '画板面板 bundle 未导出 mount:' + JS)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
s.onerror = () => {
|
|
63
|
+
const msg = '画板面板 bundle 加载失败: ' + JS
|
|
64
|
+
console.warn('[tool-art]', msg)
|
|
65
|
+
ui.reportFailure('render', msg)
|
|
66
|
+
}
|
|
67
|
+
document.head.appendChild(s)
|
|
68
|
+
}
|
package/package.json
CHANGED
|
@@ -1,14 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@paircode/tool-art",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"scope": "global",
|
|
5
5
|
"type": "plugin",
|
|
6
6
|
"main": "index.js",
|
|
7
|
+
"client": "client.js",
|
|
8
|
+
"dsh": {
|
|
9
|
+
"ui": {
|
|
10
|
+
"platform": "web",
|
|
11
|
+
"slot": "sidebar",
|
|
12
|
+
"kind": "list",
|
|
13
|
+
"scope": "root",
|
|
14
|
+
"inject": [
|
|
15
|
+
"@paircode/core"
|
|
16
|
+
],
|
|
17
|
+
"immediately": false,
|
|
18
|
+
"build": {
|
|
19
|
+
"entry": "src/ui-main-art.js",
|
|
20
|
+
"global": "ArtPanel",
|
|
21
|
+
"outDir": "plugins-dist/tool-art/assets",
|
|
22
|
+
"fileName": "art-panel",
|
|
23
|
+
"region": "art"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
},
|
|
7
27
|
"keywords": [
|
|
8
28
|
"paircode"
|
|
9
29
|
],
|
|
10
30
|
"license": "MIT",
|
|
11
|
-
"description": "
|
|
31
|
+
"description": "矢量/图像创作域插件(★ 工具 + UI 同包,2026-09-17 合并):工具面(纯 goja 零依赖)画板工程 JSON 文本真相源 + SVG 生成/解析/回读 + 对齐分布 + 7 项自检(含 WCAG 对比度);UI 面(client 半 + assets/art-panel.js bundle)「画板」面板:SVG 预览 / 图元与图层 / 颜色对比度 / 7 项校验 / 浏览器导出 PNG",
|
|
12
32
|
"publishConfig": {
|
|
13
33
|
"access": "public"
|
|
14
34
|
},
|