@dlient-open/dev-tools 0.1.7 → 0.1.8
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/dev-tools-0.1.8.dlient +0 -0
- package/dist/remoteEntry.js +1 -1
- package/package.json +12 -2
- package/script/make-dlient.mjs +7 -0
|
Binary file
|
package/dist/remoteEntry.js
CHANGED
|
@@ -32,4 +32,4 @@ ${u}${S}`;return n.dispatch({changes:{from:i,to:i,insert:Q},selection:y.cursor(i
|
|
|
32
32
|
`)}function mi(n){const e=Array.from(n.querySelectorAll("thead th")).map(xp),t=Array.from(n.querySelectorAll("tbody tr")).map(i=>Array.from(i.querySelectorAll("td")).map(xp));return{header:e,rows:t}}function xp(n){return(n.dataset.raw??"").trim()}function Us(n){return n.querySelector(".cm-atomic-table-cell-source")}function gi(n){const e=[];let t="",i=0;const r=()=>{t.length&&(e.push({type:"text",text:t}),t="")};for(;i<n.length;){if(n[i]==="\\"&&i+1<n.length&&/[!-/:-@[-`{-~]/.test(n[i+1])){t+=n[i+1],i+=2;continue}const s=vx(n,i);if(s){r(),e.push(s.token),i=s.end;continue}t+=n[i],i++}return r(),e}function vx(n,e){const t=n.slice(e);let i=t.match(/^\*\*([\s\S]+?)\*\*/);if(i)return{token:{type:"strong",delim:"**",children:gi(i[1])},end:e+i[0].length};if(i=t.match(/^__([\s\S]+?)__/),i)return{token:{type:"strong",delim:"__",children:gi(i[1])},end:e+i[0].length};if(i=t.match(/^~~([\s\S]+?)~~/),i)return{token:{type:"strike",children:gi(i[1])},end:e+i[0].length};const r=JQ(n,e);if(r)return{token:{type:"highlight",children:gi(n.slice(r.contentFrom,r.contentTo))},end:r.end};if(i=t.match(/^\[([^\]\n]+)\]\(([^\s)"'\n]+)\)/),i)return{token:{type:"link",textChildren:gi(i[1]),url:i[2]},end:e+i[0].length};if(i=t.match(/^\*([^*\n]+?)\*/),i)return{token:{type:"em",delim:"*",children:gi(i[1])},end:e+i[0].length};const s=e>0?n[e-1]:"";return!/\w/.test(s)&&(i=t.match(/^_([^_\n]+?)_/),i)?{token:{type:"em",delim:"_",children:gi(i[1])},end:e+i[0].length}:null}function Px(n){const e=document.createDocumentFragment(),t=gi(n);for(const i of t)e.appendChild(wp(i));return e}function wp(n){if(n.type==="text")return document.createTextNode(n.text);if(n.type==="strong"){const s=document.createElement("span");s.className="cm-atomic-strong-wrap",s.appendChild(ut(n.delim));const o=document.createElement("span");return o.className="cm-atomic-strong",o.appendChild(br(n.children)),s.appendChild(o),s.appendChild(ut(n.delim)),s}if(n.type==="em"){const s=document.createElement("span");s.className="cm-atomic-em-wrap",s.appendChild(ut(n.delim));const o=document.createElement("span");return o.className="cm-atomic-em",o.appendChild(br(n.children)),s.appendChild(o),s.appendChild(ut(n.delim)),s}if(n.type==="strike"){const s=document.createElement("span");s.className="cm-atomic-strike-wrap",s.appendChild(ut("~~"));const o=document.createElement("span");return o.className="cm-atomic-strike",o.appendChild(br(n.children)),s.appendChild(o),s.appendChild(ut("~~")),s}if(n.type==="highlight"){const s=document.createElement("span");s.className="cm-atomic-highlight-wrap",s.appendChild(ut("=="));const o=document.createElement("span");return o.className="cm-atomic-highlight",o.appendChild(br(n.children)),s.appendChild(o),s.appendChild(ut("==")),s}const e=document.createElement("span");e.className="cm-atomic-link-wrap",e.dataset.url=n.url,e.appendChild(ut("["));const t=document.createElement("span");t.className="cm-atomic-link",t.appendChild(br(n.textChildren)),e.appendChild(t),e.appendChild(ut("]")),e.appendChild(ut("("));const i=ut(n.url);i.classList.add("cm-atomic-link-url"),e.appendChild(i),e.appendChild(ut(")"));const r=document.createElement("span");return r.className="cm-atomic-link-icon",r.contentEditable="false",r.setAttribute("aria-hidden","true"),e.appendChild(r),e}function br(n){const e=document.createDocumentFragment();for(const t of n)e.appendChild(wp(t));return e}function ut(n){const e=document.createElement("span");return e.className="cm-atomic-mark",e.textContent=n,e}function $p(n){const e=n.parentElement?.dataset.raw??"";n.replaceChildren(Px(e))}function Cx(n){const e=n.ownerDocument?.defaultView?.getSelection();if(!e||e.rangeCount===0)return null;const t=e.getRangeAt(0);if(!n.contains(t.startContainer))return null;const i=t.cloneRange();return i.selectNodeContents(n),i.setEnd(t.startContainer,t.startOffset),i.toString().length}function Tx(n,e){const t=n.ownerDocument;if(!t)return;const i=t.createTreeWalker(n,NodeFilter.SHOW_TEXT);let r=e,s=null,o=0,l=i.nextNode();for(;l;){const h=l.data.length;if(r<=h){s=l,o=r;break}r-=h,l=i.nextNode()}const a=t.defaultView?.getSelection();if(!a)return;const c=t.createRange();s?c.setStart(s,o):(c.selectNodeContents(n),c.collapse(!1)),c.collapse(!0),a.removeAllRanges(),a.addRange(c)}const Ax=["cm-atomic-strong-wrap","cm-atomic-em-wrap","cm-atomic-strike-wrap","cm-atomic-link-wrap"];function Zx(n){for(const e of Ax)if(n.classList.contains(e))return!0;return!1}function Fs(n){for(const s of n.querySelectorAll(".active"))s.classList.remove("active");const e=n.ownerDocument;if(!e)return;const t=e.defaultView?.getSelection();if(!t||t.rangeCount===0)return;const i=t.anchorNode;if(!i||!n.contains(i))return;let r=i;for(;r&&r!==n;)r instanceof Element&&Zx(r)&&r.classList.add("active"),r=r.parentNode}function Xx(n){for(const e of n.querySelectorAll(".active"))e.classList.remove("active")}function Rx(n){const e=[],t=/!\[([^\]]*)\]\(([^\s)"']+)(?:\s+["'][^)]*["'])?\)/g;for(const i of n.matchAll(t))e.push({alt:i[1]||"",src:i[2]});return e}function vp(n){const e=n.querySelector(".cm-atomic-table-cell-preview");e&&e.remove();const t=n.dataset.raw??"",i=Rx(t);if(i.length===0){delete n.dataset.hasImage;return}n.dataset.hasImage="true";const r=document.createElement("div");r.className="cm-atomic-table-cell-preview",r.contentEditable="false";for(const{src:s,alt:o}of i){const l=document.createElement("img");l.src=s,l.alt=o,l.loading="lazy",l.className="cm-atomic-table-cell-image",l.addEventListener("pointerdown",a=>{a.preventDefault(),a.stopPropagation();const c=Us(n);c&&(c.focus(),Hs(c))}),r.appendChild(l)}n.appendChild(r)}function Ga(n,e){const t=n.posAtDOM(e);if(t<0)return null;const i=J(n.state);let r=i.resolveInner(t,1);for(;r&&r.name!=="Table";)r=r.parent;if(r)return{from:r.from,to:r.to};let s=null;return i.iterate({enter:o=>{if(o.name==="Table"&&o.from<=t&&o.to>=t)return s=o.node,!1}}),s?{from:s.from,to:s.to}:null}function Hs(n){const e=document.createRange();e.selectNodeContents(n),e.collapse(!1);const t=window.getSelection();t&&(t.removeAllRanges(),t.addRange(e))}function Mx(n){return Array.from(n.querySelectorAll("th, td"))}class _x extends Ct{constructor(e,t){super(),Object.defineProperty(this,"model",{enumerable:!0,configurable:!0,writable:!0,value:e}),Object.defineProperty(this,"readOnly",{enumerable:!0,configurable:!0,writable:!0,value:t})}eq(e){return!(e.readOnly!==this.readOnly||e.model.header.length!==this.model.header.length||e.model.rows.length!==this.model.rows.length)}toDOM(e){const t=document.createElement("div");t.className="cm-atomic-table";const i=document.createElement("table");t.appendChild(i);const r=document.createElement("thead"),s=document.createElement("tr");for(const a of this.model.header)s.appendChild(Pp("th",a,e));r.appendChild(s),i.appendChild(r);const o=document.createElement("tbody"),l=this.model.header.length;for(const a of this.model.rows){const c=document.createElement("tr");for(let h=0;h<l;h++)c.appendChild(Pp("td",a[h]??"",e));o.appendChild(c)}return i.appendChild(o),t}ignoreEvent(){return!0}}function Pp(n,e,t){const i=document.createElement(n);i.dataset.raw=e;const r=t.state.facet(He),s=document.createElement("div");s.className="cm-atomic-table-cell-source",s.contentEditable=r?"false":"true",s.spellcheck=!r,i.appendChild(s),$p(s),r||Lx(t,i,s);const o=l=>{const a=l.target;if(!(a instanceof Element))return null;const c=r?".cm-atomic-link-wrap":".cm-atomic-link-icon";return a.closest(c)};return s.addEventListener("pointerdown",l=>{l.button===0&&o(l)&&l.preventDefault()}),s.addEventListener("click",l=>{const a=o(l);if(!a||l.metaKey||l.ctrlKey||l.shiftKey||l.altKey)return;const c=a.closest(".cm-atomic-link-wrap")?.dataset.url;c&&(l.preventDefault(),l.stopPropagation(),t.state.facet(Cp)(c))}),vp(i),i}function Lx(n,e,t){const i=()=>{const s=(t.textContent??"").replace(/\s+/g," ").trim();e.dataset.raw=s;const o=Cx(t);$p(t),o!=null&&Tx(t,o),Fs(t),vp(e),Dx(n,e)};let r=!1;t.addEventListener("compositionstart",()=>{r=!0}),t.addEventListener("compositionend",()=>{r=!1,i()}),t.addEventListener("input",s=>{r||s.isComposing||i()}),t.addEventListener("paste",s=>{s.preventDefault();const o=(s.clipboardData?.getData("text/plain")??"").replace(/\s+/g," ").trim(),l=t.ownerDocument.defaultView?.getSelection();if(!l||l.rangeCount===0)return;const a=l.getRangeAt(0);a.deleteContents(),a.insertNode(document.createTextNode(o)),a.collapse(!1),l.removeAllRanges(),l.addRange(a),i()}),t.addEventListener("focus",()=>Fs(t)),t.addEventListener("mouseup",()=>Fs(t)),t.addEventListener("keyup",()=>Fs(t)),t.addEventListener("blur",()=>Xx(t)),t.addEventListener("keydown",s=>{(s.key==="Tab"||s.key==="Enter")&&(s.preventDefault(),s.stopPropagation(),Ix(n,e,s.shiftKey?-1:1))}),e.addEventListener("contextmenu",s=>{s.preventDefault(),s.stopPropagation(),jx(n,e,s.clientX,s.clientY)}),e.addEventListener("pointerdown",s=>{const o=s.target;o instanceof Node&&t.contains(o)||(s.preventDefault(),t.focus(),Hs(t))})}function Ex(n){const e=n.closest("tr"),t=e?.closest("tbody");return!e||!t?-1:Array.from(t.querySelectorAll("tr")).indexOf(e)}function zx(n){const e=n.closest("tr");return e?Array.from(e.querySelectorAll("th, td")).indexOf(n):-1}function pn(n,e,t){if(n.state.facet(He))return;const i=Ga(n,e);if(!i)return;const r=Va(t);n.dispatch({changes:{from:i.from,to:i.to,insert:r}})}function jx(n,e,t,i){const r=e.closest(".cm-atomic-table");if(!r)return;const s=e.tagName==="TH",o=Ex(e),l=zx(e),a=document.createElement("div");a.className="cm-atomic-table-menu",a.style.left=`${t}px`,a.style.top=`${i}px`;const c=[];s||(c.push({label:"Insert row above",action:()=>{const p=mi(r);p.rows.splice(o,0,p.header.map(()=>"")),pn(n,r,p)}}),c.push({label:"Insert row below",action:()=>{const p=mi(r);p.rows.splice(o+1,0,p.header.map(()=>"")),pn(n,r,p)}}),c.push({label:"Delete row",action:()=>{const p=mi(r);o>=0&&o<p.rows.length&&p.rows.splice(o,1),pn(n,r,p)}}),c.push("separator")),c.push({label:"Insert column left",action:()=>{const p=mi(r);p.header.splice(l,0,"");for(const g of p.rows)g.splice(l,0,"");pn(n,r,p)}}),c.push({label:"Insert column right",action:()=>{const p=mi(r);p.header.splice(l+1,0,"");for(const g of p.rows)g.splice(l+1,0,"");pn(n,r,p)}}),c.push({label:"Delete column",action:()=>{const p=mi(r);if(!(p.header.length<=1||l<0)){p.header.splice(l,1);for(const g of p.rows)g.splice(l,1);pn(n,r,p)}}});let h=!1;const u=()=>{h||(h=!0,a.remove(),document.removeEventListener("mousedown",f,!0),document.removeEventListener("keydown",d,!0))},f=p=>{p.target instanceof Node&&a.contains(p.target)||u()},d=p=>{p.key==="Escape"&&u()};for(const p of c){if(p==="separator"){const S=document.createElement("div");S.className="cm-atomic-table-menu-sep",a.appendChild(S);continue}const g=document.createElement("button");g.type="button",g.className="cm-atomic-table-menu-item",g.textContent=p.label,g.addEventListener("click",()=>{p.action(),u()}),a.appendChild(g)}document.body.appendChild(a);const O=a.getBoundingClientRect();O.right>window.innerWidth&&(a.style.left=`${Math.max(4,window.innerWidth-O.width-4)}px`),O.bottom>window.innerHeight&&(a.style.top=`${Math.max(4,window.innerHeight-O.height-4)}px`),setTimeout(()=>{h||(document.addEventListener("mousedown",f,!0),document.addEventListener("keydown",d,!0))},0)}function Dx(n,e){if(n.state.facet(He))return;const t=e.closest(".cm-atomic-table");if(!t)return;const i=Ga(n,t);if(!i)return;const r=mi(t),s=Va(r);n.state.sliceDoc(i.from,i.to)!==s&&n.dispatch({changes:{from:i.from,to:i.to,insert:s},annotations:xe.userEvent.of("input.type")})}function Ix(n,e,t){const i=e.closest(".cm-atomic-table");if(!i)return;const r=Mx(i),s=r.indexOf(e);if(s<0)return;const o=s+t;if(o<0){Us(e)?.blur();return}if(o>=r.length){Yx(n,i);return}const l=Us(r[o]);l&&(l.focus(),Hs(l))}function Yx(n,e){if(n.state.facet(He))return;const t=Ga(n,e);if(!t)return;const i=mi(e);i.rows.push(i.header.map(()=>""));const r=Va(i);n.dispatch({changes:{from:t.from,to:t.to,insert:r}});const{from:s}=t;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(n.state.facet(He))return;const o=Array.from(n.dom.querySelectorAll(".cm-atomic-table"));let l=null;for(const f of o)try{if(n.posAtDOM(f)===s){l=f;break}}catch{}if(!l)return;const a=l.querySelectorAll("tbody tr"),h=a[a.length-1]?.querySelector("td"),u=h?Us(h):null;u&&(u.focus(),Hs(u))})})}function Nx(n){const{state:e}=n;if(e.facet(He))return!1;const t=e.selection.main;if(!t.empty)return!1;const i=t.head;if(i===0)return!1;const r=J(e);let s=null;if(r.iterate({from:Math.max(0,i-2),to:i,enter:l=>{l.name==="Table"&&(l.to===i||l.to+1===i)&&(s=l.node)}}),!s)return!1;const o=s;return n.dispatch({selection:y.range(o.from,o.to)}),!0}function Ks(n){const e=[],t=n.facet(He),i=ds(n,n.doc.length,200)??J(n),r=n.doc;return i.iterate({enter:s=>{if(s.name!=="Table")return;const o=$x(n,s.node);if(!o)return;const l=r.lineAt(s.from),a=r.lineAt(s.to);return e.push(z.replace({widget:new _x(o,t),block:!0}).range(l.from,a.to)),!1}}),z.set(e,!0)}function Wx(n,e){let t=!1;if(n.changes.iterChanges((r,s)=>{t||e.between(r,s,()=>(t=!0,!1))}),t)return!0;const i=n.state;return n.changes.iterChanges((r,s,o,l)=>{if(t)return;const a=i.doc.lineAt(o),c=l>a.to?i.doc.lineAt(l):a;for(let h=a.number;h<=c.number;h++)if(i.doc.line(h).text.includes("|")){t=!0;break}}),t}const qx=Le.define({create:n=>Ks(n),update(n,e){for(const i of e.effects)if(i.is(Gs))return Ks(e.state);if(e.startState.facet(He)!==e.state.facet(He))return Ks(e.state);if(!e.docChanged)return n;const t=n.map(e.changes);return Wx(e,n)?Ks(e.state):t},provide:n=>Z.decorations.from(n)}),Bx=n=>{try{window.open(n,"_blank","noopener,noreferrer")}catch{}},Cp=L.define({combine:n=>n[0]??Bx});function Vx(n={}){return[qx,Ia,...n.onLinkClick?[Cp.of(n.onLinkClick)]:[],mt.high(Vi.of([{key:"Backspace",run:Nx}]))]}const Gx=[],Ux=[];function Fx(n){try{window.open(n,"_blank","noopener,noreferrer")}catch{}}function Hx({markdownSource:n,documentId:e,initialSearchText:t,initialRevealText:i,blurEditorOnMount:r,readOnly:s=!1,onMarkdownChange:o,onLinkClick:l,editorHandleRef:a,codeLanguages:c=Gx,extensions:h=Ux}){const u=_e(null),f=_e(null),d=_e(null),O=_e(o),p=_e(l),g=v=>{const k=p.current;k?k(v):Fx(v)},S=_e(new vn),Q=_e(s);Q.current=s,Ce(()=>{O.current=o},[o]),Ce(()=>{p.current=l},[l]);const w=e??n;return Ce(()=>{const v=u.current;if(!v)return;const k=new Z({parent:v,state:te.create({doc:n,extensions:[O0(),iS(),i0(),a0(),te.allowMultipleSelections.of(!0),c1(),v0(),y0(),E1(),zQ,DQ,IQ,Z.lineWrapping,SQ({top:!0,createPanel:$=>{const P=lw($);return P.dom.classList.add("atomic-editor-search-panel"),P}}),aQ({base:cn,codeLanguages:[...c],extensions:tx}),cn.data.of({closeBrackets:{brackets:["(","[","{","'",'"',"*","_","`"]}}),EQ,_Q,Vi.of([...D1,...uS,...XQ,...ip,sb,...rb]),Vx({onLinkClick:g}),HQ(),xx({onLinkClick:g}),Z.updateListener.of($=>{$.docChanged&&O.current?.($.state.doc.toString())}),Kx,S.current.of(qa(Q.current)),...h]})});return f.current=k,t&&queueMicrotask(()=>{f.current===k&&(k.dispatch({effects:pi.of(new un({search:t}))}),Ws(k))}),()=>{d.current!==null&&(window.clearTimeout(d.current),d.current=null),k.destroy(),f.current=null}},[w]),Ce(()=>{const v=f.current;!v||!i||Tp(f,v,i,d)},[w,i]),Ce(()=>{const v=f.current;v&&v.dispatch({effects:S.current.reconfigure(qa(s))})},[s]),Ce(()=>{if(a)return a.current={focus:()=>f.current?.focus(),undo:()=>{const v=f.current;v&&Vl(v)},redo:()=>{const v=f.current;v&&ks(v)},openSearch:v=>{const k=f.current;k&&(v!==void 0&&k.dispatch({effects:pi.of(new un({search:v}))}),Ws(k))},closeSearch:()=>{const v=f.current;v&&qs(v)},revealText:v=>{const k=f.current;!k||!v||Tp(f,k,v,d)},isSearchOpen:()=>{const v=f.current;return v?$Q(v.state):!1},getMarkdown:()=>f.current?.state.doc.toString()??"",getContentDOM:()=>f.current?.contentDOM??null,setReadOnly:v=>{const k=f.current;k&&k.dispatch({effects:S.current.reconfigure(qa(v))})}},()=>{a.current&&(a.current=null)}},[a]),b("div",{ref:u,className:"atomic-cm-editor"})}const Ua=ee.define(),Kx=Le.define({create(){return z.none},update(n,e){n=n.map(e.changes);for(const t of e.effects)if(t.is(Ua)){if(!t.value){n=z.none;continue}n=z.set([z.mark({class:"cm-initialRevealMatch"}).range(t.value.from,t.value.to)])}return n},provide:n=>Z.decorations.from(n)});function Tp(n,e,t,i){const r=ew(e.state.doc,t);if(!r)return;const{from:s,to:o}=r;e.dispatch({effects:[Ua.of({from:s,to:o}),Z.scrollIntoView(s,{y:"start",yMargin:72})]}),requestAnimationFrame(()=>{if(n.current!==e)return;const l=e.dom.querySelector(".cm-initialRevealMatch")?.closest(".cm-line")??e.dom.querySelector(".cm-initialRevealMatch");l instanceof HTMLElement&&iw(l,72)}),i.current!==null&&window.clearTimeout(i.current),i.current=window.setTimeout(()=>{n.current===e&&(e.dispatch({effects:Ua.of(null)}),i.current=null)},Jx)}const Jx=3200;function ew(n,e){for(const t of tw(e)){const i=new un({search:t});if(!i.valid||!i.search)continue;const s=i.getCursor(n).next();if(!s.done&&s.value.from!==s.value.to)return s.value}return null}function tw(n){const e=new Set,t=n.trim();if(!t)return[];e.add(t);const i=t.replace(/\s+/g," ").trim();i&&e.add(i);for(const r of t.split(`
|
|
33
33
|
`).map(s=>s.trim()).filter(Boolean)){e.add(r);const s=r.replace(/\s+/g," ").trim();s&&e.add(s)}return i.length>140&&e.add(i.slice(0,140).trim()),i.length>80&&e.add(i.slice(0,80).trim()),[...e].filter(r=>r.length>=12||r===t)}function iw(n,e){const t=nw(n);if(!t){n.scrollIntoView({behavior:"smooth",block:"start"});return}const i=t.getBoundingClientRect(),r=n.getBoundingClientRect(),s=t.scrollTop+(r.top-i.top)-e;t.scrollTo({top:Math.max(0,s),behavior:"smooth"})}function nw(n){let e=n.parentElement;for(;e;){const{overflowY:t}=window.getComputedStyle(e);if((t==="auto"||t==="scroll")&&e.scrollHeight>e.clientHeight)return e;e=e.parentElement}return null}const rw='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="18 15 12 9 6 15"/></svg>',sw='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>',ow='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>';function lw(n){const e=document.createElement("div");e.className="cm-search",e.setAttribute("aria-label","Find");const t=document.createElement("form");t.autocomplete="off",t.addEventListener("submit",u=>{u.preventDefault(),On(n)});const i=La(n.state),r=document.createElement("input");r.type="text",r.placeholder="Search",r.value=i.search,r.className="cm-atomic-search-input",r.setAttribute("main-field","true"),r.setAttribute("aria-label","Search");const s=document.createElement("span");s.className="cm-atomic-search-count",s.setAttribute("aria-live","polite");const o=Fa(rw,"Previous match",()=>gr(n)),l=Fa(sw,"Next match",()=>On(n)),a=Fa(ow,"Close",()=>qs(n)),c=u=>{if(!u.search){s.textContent="";return}try{if(!u.valid){s.textContent="";return}let f=0,d=!1;const O=u.getCursor(n.state.doc);for(;!O.next().done;)if(f++,f>=1e4){d=!0;break}s.textContent=d?"9999+ matches":f===0?"No matches":f===1?"1 match":`${f} matches`}catch{s.textContent=""}},h=()=>{const u=new un({search:r.value,caseSensitive:i.caseSensitive,regexp:i.regexp,wholeWord:i.wholeWord});n.dispatch({effects:pi.of(u)}),c(u)};return r.addEventListener("input",h),c(i),t.append(r,s,o,l,a),e.append(t),{dom:e,top:!0,mount:()=>{r.focus(),r.select()},update:u=>{const f=La(u.state),d=La(u.startState);f.search!==d.search&&r.value!==f.search&&(r.value=f.search),(u.docChanged||f.search!==d.search)&&c(f)}}}function Fa(n,e,t){const i=document.createElement("button");return i.type="button",i.className="cm-atomic-search-btn",i.innerHTML=n,i.setAttribute("aria-label",e),i.title=e,i.addEventListener("click",t),i}function Ap(){return document.documentElement.classList.contains("dark")}function Zp({value:n,onChange:e,theme:t,className:i}){const[r,s]=F(t==="dark"||t===void 0&&Ap()),[o,l]=F(n),a=_e(n),[c,h]=F(0);return Ce(()=>{if(t!==void 0){s(t==="dark");return}const u=()=>s(Ap());u();const f=new MutationObserver(u);return f.observe(document.documentElement,{attributes:!0,attributeFilter:["class"]}),()=>f.disconnect()},[t]),Ce(()=>{n!==a.current&&(a.current=n,l(n),h(u=>u+1))},[n]),b("div",{className:i,"data-theme":r?void 0:"light",style:{height:420,borderRadius:4,overflow:"hidden",background:"var(--dl-fill-0)"},children:b(Hx,{markdownSource:o,onMarkdownChange:u=>{const f=u??"";a.current=f,e(f)},onLinkClick:u=>window.open(u,"_blank","noopener,noreferrer")},c)})}mc("dev-tools",{"zh-CN":{"view.preview":"预览","view.log":"日志","view.setting":"设置","common.refresh":"刷新","common.save":"保存","common.reset":"重置","common.pluginRemoved":"插件已移除","boot.starting":"正在启动开发服务器","action.refreshTitle":"刷新","action.packTitle":"打包成 .dlient","action.aiShowTitle":"显示 AI 助手","action.aiHideTitle":"隐藏 AI 助手","boot.title":"正在启动预览环境","boot.sub":"{{name}} · {{done}} / {{total}} 已完成","boot.stepCheck":"校验项目","boot.stepCheckDesc":"读取 package.json 与 dist 输出目录","boot.stepBuild":"启动构建","boot.stepBuildDesc":"经 nodejs 执行 npm run dev(界面 + worker 双 watch)","boot.stepEnv":"环境就绪","boot.stepEnvDesc":"构建产物就绪并启动热重载 watcher(worker 由 UI 懒启动)","boot.hint":"构建进程常驻并持续 watch,改动代码会自动重建","boot.stopBuild":"停止构建","refresh.title":"正在刷新插件环境","refresh.sub":"{{name}} · 依赖安装与构建中,请稍候","refresh.hint":"完成后自动重新加载预览","refreshStep.stopWorker":"停止 worker","refreshStep.stopBuild":"停止构建","refreshStep.install":"安装依赖","refreshStep.build":"构建产物","refreshStep.env":"环境就绪","refreshStep.done":"完成","work.title":"开发中的插件","work.sub":"本地工作区 · 共 {{count}} 个项目","work.import":"导入本地项目","work.create":"新建插件","work.empty":"工作区还没有插件项目,先新建一个吧","work.removeTitle":"移除","work.removeConfirm":"确认从工作区移除 {{name}}?(不会删除本地文件)","work.open":"打开","work.remove":"删除","work.typeApp":"应用","work.typePlugin":"插件","type.full":"插件(服务+组件)","type.fullDesc":"提供服务和前端组件供其他插件调用","type.ui":"组件插件","type.uiDesc":"只提供前端组件供其他插件调用","type.worker":"服务插件","type.workerDesc":"提供服务给其他插件调用","type.app":"应用","type.appDesc":"独立的应用,可在主界面打开使用","typeShort.full":"完整","typeShort.ui":"界面","typeShort.worker":"服务","typeShort.app":"应用","state.running":"运行中","state.starting":"启动中","state.stopped":"已停止","state.failed":"加载失败","icon.light":"亮色模式","icon.light_active":"亮色选中","icon.dark":"暗色模式","icon.dark_active":"暗色选中","msg.previewInfoFail":"预览信息获取失败","msg.manifestFail":"插件配置不合规","msg.depsFail":"依赖检查/安装失败","msg.buildFail":"构建启动失败","msg.envFail":"环境就绪失败","preview.workerOnly":"该插件无界面(worker 服务),请在「日志」视图查看运行状态","msg.selectDirFail":"选择目录失败","msg.registerFail":"注册失败","msg.registerOk":"dev 插件已注册","msg.importTitle":"导入插件","msg.importConfirm":"你选择导入的插件不是开发模式,是否要更改为开发模式?","msg.importChangeAndImport":"更改后导入","msg.importCancel":"取消","msg.importFailTitle":"导入失败","msg.importFailDesc":"你选择的目录不是有效的 Dlient 插件目录,请重新选择!","msg.removeFail":"移除失败","msg.removeOk":"已移除 {{id}}","msg.stopFail":"停止失败","msg.stopOk":"构建进程已停止","msg.refreshOk":"刷新完成","msg.refreshFail":"刷新失败:{{msg}}","msg.refreshTimeout":"刷新超时(流中断)","msg.packOk":"已打包 {{name}} → {{path}}","msg.packFail":"打包失败","tab.homeTitle":"操作台","tab.closeTitle":"关闭标签页","create.title":"创建插件","create.sub":"填写插件 ID 和名称;ID 和名称不能与插件市场(及本地)已有插件重复","create.id":"插件 ID","create.idPlaceholder":"如 my-plugin(小写字母/数字/连字符)","create.name":"插件名称","create.namePlaceholder":"插件的显示名称","create.idInvalid":"插件 ID 不合法(仅小写字母/数字/连字符,不能以连字符开头)","create.nameRequired":"请填写插件名称","create.cancel":"取消","create.submit":"创建","create.ok":"已创建插件「{{name}}」","create.fail":"创建失败","create.unknown":"创建失败,请稍后重试","env.title":"需要 Node.js 运行时","env.sub":"开发插件需要 Node.js(构建 / 依赖安装 / 预览都依赖它)","env.hint":"可直接下载宿主内置的 LTS 运行时到插件数据目录,不影响系统环境","env.install":"安装内置运行时","msg.envOk":"Node.js 环境就绪","set.title":"插件设置","set.sub":"写回 {{dir}}/package.json 的 dlient 字段","set.groupBasic":"基本信息","set.groupType":"类型与平台","set.groupIcon":"插件图标","set.groupReadonly":"只读信息","set.nameZh":"插件名称(中文)","set.nameEn":"插件名称(英文)","set.descZh":"插件简介(中文)","set.descEn":"插件简介(英文)","set.tags":"标签","set.tagsHint":"逗号分隔","set.tagsPlaceholder":"如:开发工具, 调试","set.pluginType":"插件类型","set.platform":"适用平台","set.platformHint":"留空表示全平台","set.iconHint":"SVG 或 PNG,≤200KB,PNG 需为正方形并压缩为 64×64","set.iconUpload":"上传图标","set.iconEmpty":"未上传","set.modeSingle":"单 SVG","set.modeMulti":"多状态","set.readonlyPath":"项目路径 · 版本 {{version}}","set.dirty":"有未保存的修改","set.synced":"已与 package.json 同步","set.reading":"读取 package.json…","set.readFail":"读取设置失败","set.retry":"重试","set.saveFail":"保存失败","set.saveOk":"已写回 package.json","set.saveMdOk":"已保存插件介绍","set.noChange":"没有需要保存的变更","set.uploadOnlySvgPng":"仅支持 SVG 或 PNG 图片","set.uploadTooLarge":"图片大小不能超过 200KB","set.uploadFail":"图标上传失败","set.uploadOk":"图标已上传","set.pngNotSquare":"PNG 必须为正方形图片","set.imgUnreadable":"无法读取图片","set.imgProcessFail":"图片处理失败","set.imgCompressFail":"图片压缩失败","set.uploadUnknown":"未知错误","set.svgInvalid":"SVG 文件格式无效,请上传合法的 SVG 图标","set.svgUnsafe":"SVG 包含不允许的内容(脚本 / 事件属性 / 外部实体等),请使用安全的 SVG","set.svgEmpty":"SVG 文件内容为空","set.svgExternal":"SVG 不能引用外部图片,请将内容内嵌","nav.settings":"插件设置","nav.intro":"插件介绍","nav.locale":"多语言设置","nav.localeEn":"英文","nav.localeZh":"中文","set.pluginId":"插件 ID","set.pluginName":"插件名称","set.pluginDesc":"插件简介","set.pluginIcon":"插件图标","set.iconClickToUpload":"点击上传图标","set.iconNoIcon":"暂无图标","intro.title":"插件介绍","intro.sub":"编辑 assets/index.md,作为插件默认介绍","intro.empty":"暂无内容,点击编辑器开始撰写","intro.save":"保存介绍","intro.saving":"保存中…","intro.saved":"介绍已保存","intro.readFail":"读取介绍失败","locale.enTitle":"英文设置","locale.enSub":"请设置插件的英文标题和介绍","locale.zhTitle":"中文设置","locale.zhSub":"请设置插件的中文标题和介绍","locale.useDefault":"使用默认设置","locale.useDefaultTip":"将默认名称、简介和介绍复制到当前语言","locale.name":"插件名称","locale.desc":"插件简介","locale.intro":"插件介绍","locale.introEmpty":"暂无内容,点击编辑器开始撰写","locale.save":"保存","locale.saving":"保存中…","locale.saved":"已保存","locale.readFail":"读取失败","ai.unavailable":"AI 助手不可用:请先安装 dsh 插件"},"en-US":{"view.preview":"Preview","view.log":"Logs","view.setting":"Settings","common.refresh":"Refresh","common.save":"Save","common.reset":"Reset","common.pluginRemoved":"Plugin removed","boot.starting":"Starting dev server","action.refreshTitle":"Refresh","action.packTitle":"Pack as .dlient","action.aiShowTitle":"Show AI assistant","action.aiHideTitle":"Hide AI assistant","boot.title":"Starting preview environment","boot.sub":"{{name}} · {{done}} / {{total}} completed","boot.stepCheck":"Validate project","boot.stepCheckDesc":"Read package.json and dist output directory","boot.stepBuild":"Start build","boot.stepBuildDesc":"Run npm run dev via nodejs (UI + worker dual watch)","boot.stepEnv":"Environment ready","boot.stepEnvDesc":"Build artifacts ready with hot-reload watcher (worker lazily started by UI)","boot.hint":"Build process stays alive and watches files; edits rebuild automatically","boot.stopBuild":"Stop build","refresh.title":"Refreshing plugin environment","refresh.sub":"{{name}} · installing deps and building, please wait","refresh.hint":"Preview reloads automatically when finished","refreshStep.stopWorker":"Stop worker","refreshStep.stopBuild":"Stop build","refreshStep.install":"Install deps","refreshStep.build":"Build artifacts","refreshStep.env":"Environment ready","refreshStep.done":"Done","work.title":"Plugins in development","work.sub":"Local workspace · {{count}} project(s)","work.import":"Import project","work.create":"New plugin","work.empty":"No plugin projects yet — create one to get started","work.removeTitle":"Remove","work.removeConfirm":"Remove {{name}} from workspace? (local files are kept)","work.open":"Open","work.remove":"Remove","work.typeApp":"App","work.typePlugin":"Plugin","type.full":"Plugin (Service + Component)","type.fullDesc":"Provides services and front-end components for other plugins to use","type.ui":"Component plugin","type.uiDesc":"Only provides front-end components for other plugins to use","type.worker":"Service plugin","type.workerDesc":"Provides services for other plugins to use","type.app":"App","type.appDesc":"A standalone app that can be opened and used in the main interface","typeShort.full":"Full","typeShort.ui":"UI","typeShort.worker":"Service","typeShort.app":"App","state.running":"Running","state.starting":"Starting","state.stopped":"Stopped","state.failed":"Failed","icon.light":"Light","icon.light_active":"Light active","icon.dark":"Dark","icon.dark_active":"Dark active","msg.previewInfoFail":"Failed to get preview info","msg.manifestFail":"Invalid plugin config","msg.depsFail":"Dependency check/install failed","msg.buildFail":"Failed to start build","msg.envFail":"Environment setup failed","preview.workerOnly":"This plugin has no UI (worker service). Check the Logs view for runtime status.","msg.selectDirFail":"Failed to select directory","msg.registerFail":"Registration failed","msg.registerOk":"Dev plugin registered","msg.importTitle":"Import Plugin","msg.importConfirm":"The plugin you selected is not in development mode. Change it to development mode?","msg.importChangeAndImport":"Change and Import","msg.importCancel":"Cancel","msg.importFailTitle":"Import Failed","msg.importFailDesc":"The selected directory is not a valid Dlient plugin directory. Please select again!","msg.removeFail":"Removal failed","msg.removeOk":"Removed {{id}}","msg.stopFail":"Stop failed","msg.stopOk":"Build process stopped","msg.refreshOk":"Refresh completed","msg.refreshFail":"Refresh failed: {{msg}}","msg.refreshTimeout":"Refresh timed out (stream interrupted)","msg.packOk":"Packed {{name}} → {{path}}","msg.packFail":"Packaging failed","tab.homeTitle":"Workbench","tab.closeTitle":"Close tab","create.title":"Create Plugin","create.sub":"Enter the plugin ID and name; both must not duplicate any existing market (or local) plugin","create.id":"Plugin ID","create.idPlaceholder":"e.g. my-plugin (starts with a lowercase letter)","create.name":"Plugin name","create.namePlaceholder":"Display name of the plugin","create.idInvalid":"Invalid plugin ID (must start with a lowercase letter; lowercase letters/numbers/hyphens only)","create.nameRequired":"Please enter the plugin name","create.cancel":"Cancel","create.submit":"Create","create.ok":'Created plugin "{{name}}"',"create.fail":"Creation failed","create.unknown":"Creation failed, please try again later","env.title":"Node.js runtime required","env.sub":"Developing plugins needs Node.js (build / dependency install / preview all rely on it)","env.hint":"Downloads the host's bundled LTS runtime into the plugin data directory — your system stays untouched","env.install":"Install bundled runtime","msg.envOk":"Node.js environment ready","set.title":"Plugin settings","set.sub":"Write back dlient fields of {{dir}}/package.json","set.groupBasic":"Basic info","set.groupType":"Type & platforms","set.groupIcon":"Plugin icon","set.groupReadonly":"Read-only info","set.nameZh":"Plugin name (Chinese)","set.nameEn":"Plugin name (English)","set.descZh":"Plugin description (Chinese)","set.descEn":"Plugin description (English)","set.tags":"Tags","set.tagsHint":"comma separated","set.tagsPlaceholder":"e.g. dev-tools, debug","set.pluginType":"Plugin type","set.platform":"Platforms","set.platformHint":"empty = all platforms","set.iconHint":"SVG or PNG, ≤200KB; PNG must be square and resized to 64×64","set.iconUpload":"Upload icon","set.iconEmpty":"Not uploaded","set.modeSingle":"Single SVG","set.modeMulti":"Multi-state","set.readonlyPath":"Project path · version {{version}}","set.dirty":"Unsaved changes","set.synced":"Synced with package.json","set.reading":"Reading package.json…","set.readFail":"Failed to read settings","set.retry":"Retry","set.saveFail":"Save failed","set.saveOk":"Written back to package.json","set.saveMdOk":"Plugin intro saved","set.noChange":"No changes to save","set.uploadOnlySvgPng":"Only SVG or PNG images are supported","set.uploadTooLarge":"Image size must not exceed 200KB","set.uploadFail":"Icon upload failed","set.uploadOk":"Icon uploaded","set.pngNotSquare":"PNG must be a square image","set.imgUnreadable":"Unable to read image","set.imgProcessFail":"Image processing failed","set.imgCompressFail":"Image compression failed","set.uploadUnknown":"Unknown error","set.svgInvalid":"Invalid SVG file, please upload a valid SVG icon","set.svgUnsafe":"SVG contains disallowed content (scripts / event attributes / external entities, etc.), please use a safe SVG","set.svgEmpty":"SVG file is empty","set.svgExternal":"SVG cannot reference external images, please inline the content","nav.settings":"Plugin settings","nav.intro":"Plugin intro","nav.locale":"Localization","nav.localeEn":"English","nav.localeZh":"Chinese","set.pluginId":"Plugin ID","set.pluginName":"Plugin name","set.pluginDesc":"Plugin description","set.pluginIcon":"Plugin icon","set.iconClickToUpload":"Click to upload icon","set.iconNoIcon":"No icon","intro.title":"Plugin intro","intro.sub":"Edit assets/index.md as the default introduction","intro.empty":"No content yet, click the editor to start writing","intro.save":"Save intro","intro.saving":"Saving…","intro.saved":"Intro saved","intro.readFail":"Failed to read intro","locale.enTitle":"English settings","locale.enSub":"Set the English title and introduction of the plugin","locale.zhTitle":"Chinese settings","locale.zhSub":"Set the Chinese title and introduction of the plugin","locale.useDefault":"Use default","locale.useDefaultTip":"Copy the default name, description and intro to this locale","locale.name":"Plugin name","locale.desc":"Plugin description","locale.intro":"Plugin intro","locale.introEmpty":"No content yet, click the editor to start writing","locale.save":"Save","locale.saving":"Saving…","locale.saved":"Saved","locale.readFail":"Failed to read","ai.unavailable":"AI assistant unavailable: install the dsh plugin first"}});const I="dev-tools",Xp={nameDefault:"",descDefault:"",nameZh:"",descZh:"",nameEn:"",descEn:"",type:"full",platforms:[],tags:"",iconStr:""};function Rp(n){return n?typeof n=="string"?n:n.light??Object.values(n).find(e=>typeof e=="string"&&e)??"":""}function Ha(n,e){return`${n}.${e}`}function Mp(n){const e=n.dlient,t=e.name,i=e.description;return{nameDefault:_i(t,"default")||(typeof t=="string"?t:""),descDefault:_i(i,"default")||(typeof i=="string"?i:""),nameZh:_i(t,"zh-CN"),descZh:_i(i,"zh-CN"),nameEn:_i(t,"en-US"),descEn:_i(i,"en-US"),type:e.type??"full",platforms:Array.isArray(e.platforms)?e.platforms:[],tags:Array.isArray(e.tags)?e.tags.join(", "):"",iconStr:Rp(e.icon)}}function aw(n,e){const t=n.tags.split(",").map(s=>s.trim()).filter(Boolean),i=n.iconStr.trim();let r;return i&&(r=e&&typeof e!="string"&&Rp(e)===i?e:i),{name:Qr(n.nameDefault,n.nameZh,n.nameEn),description:Qr(n.descDefault,n.descZh,n.descEn),type:n.type||void 0,platforms:n.platforms.length>0?n.platforms:void 0,tags:t.length>0?t:void 0,icon:r}}function cw(n){return{name:Qr(n.nameDefault,n.nameZh,n.nameEn),description:Qr(n.descDefault,n.descZh,n.descEn)}}const hw=200*1024,uw=".svg,.png";function fw(n){const e=n.lastIndexOf(".");return e>=0?n.slice(e+1).toLowerCase():""}function _p(n){return new Promise((e,t)=>{const i=new FileReader;i.onload=()=>e(String(i.result).split(",")[1]??""),i.onerror=()=>t(new Error("set.imgUnreadable")),i.readAsDataURL(n)})}function dw(n){return new Promise((e,t)=>{const i=URL.createObjectURL(n),r=new Image;r.onload=()=>{if(URL.revokeObjectURL(i),r.naturalWidth!==r.naturalHeight){t(new Error("set.pngNotSquare"));return}const s=document.createElement("canvas");s.width=64,s.height=64;const o=s.getContext("2d");if(!o){t(new Error("set.imgProcessFail"));return}o.drawImage(r,0,0,64,64),s.toBlob(l=>{if(!l){t(new Error("set.imgCompressFail"));return}_p(l).then(e).catch(()=>t(new Error("set.imgCompressFail")))},"image/png")},r.onerror=()=>{URL.revokeObjectURL(i),t(new Error("set.imgUnreadable"))},r.src=i})}function Ow(n){const e=n.toLowerCase();if(!n.trim())return"set.svgEmpty";if(/<!ENTITY|<!DOCTYPE[^>]*\bSYSTEM\b/i.test(e)||/<script|<foreignObject|<iframe|<object|<embed|<link\b|<meta\b/i.test(e)||/\son[a-z]+\s*=/i.test(n)||/javascript\s*:/i.test(e))return"set.svgUnsafe";try{const t=new DOMParser().parseFromString(n,"image/svg+xml"),i=t.documentElement;if(!i||i.nodeName.toLowerCase()!=="svg"||t.querySelector("parsererror"))return"set.svgInvalid";for(const r of Array.from(t.querySelectorAll("image, use, feImage"))){const s=r.getAttribute("href")||r.getAttribute("xlink:href")||"";if(/^(https?:)?\/\//i.test(s))return"set.svgExternal"}}catch{return"set.svgInvalid"}return null}async function pw(n){const e=await n.text(),t=Ow(e);if(t)throw new Error(t);return _p(n)}function mw({pluginId:n,onSaved:e}){const t=gn(),{t:i,locale:r}=vt(),[s,o]=F(null),[l,a]=F(Xp),[c,h]=F(!0),[u,f]=F(""),[d,O]=F("settings"),[p,g]=F({settings:!1,intro:!1,"locale-en":!1,"locale-zh":!1}),S=l.iconStr?`dlientOpen://plugin/${n}/${l.iconStr.replace(/^\/+/,"")}`:"",[Q,w]=F({"index.md":"","index.zh-CN.md":"","index.en-US.md":""}),[v,k]=F({"index.md":"","index.zh-CN.md":"","index.en-US.md":""}),[$,P]=F({"index.md":!1,"index.zh-CN.md":!1,"index.en-US.md":!1}),W=fe(async()=>{h(!0),f("");const M=await t.request("dev-tools.readSettings",[n]);if(!Oe(M)||!M.data){f(Oe(M)?i(`${I}.set.readFail`):Ze(M).message),h(!1);return}o(M.data),a(Mp(M.data)),h(!1)},[t,n,i]);Ce(()=>{W()},[W]);const Y=fe(async M=>{if($[M])return;const B=await t.request("dev-tools.readMarkdown",[n,M]);if(!Oe(B))return;const ce=B.data?.content??"";w(be=>({...be,[M]:ce})),k(be=>({...be,[M]:ce})),P(be=>({...be,[M]:!0}))},[t,n,$]);Ce(()=>{d==="intro"?Y("index.md"):d==="locale-en"?Y("index.en-US.md"):d==="locale-zh"&&Y("index.zh-CN.md")},[d,Y]);const N=Mi(()=>s?Mp(s):Xp,[s]),G=Mi(()=>l.nameDefault!==N.nameDefault||l.descDefault!==N.descDefault||l.type!==N.type||l.tags!==N.tags||l.iconStr!==N.iconStr||JSON.stringify(l.platforms)!==JSON.stringify(N.platforms),[l,N]),D=Mi(()=>Q["index.md"]!==v["index.md"],[Q,v]),se=Mi(()=>l.nameEn!==N.nameEn||l.descEn!==N.descEn||Q["index.en-US.md"]!==v["index.en-US.md"],[l,N,Q,v]),H=Mi(()=>l.nameZh!==N.nameZh||l.descZh!==N.descZh||Q["index.zh-CN.md"]!==v["index.zh-CN.md"],[l,N,Q,v]),K=M=>a(B=>({...B,...M})),Pe=async M=>{const B=fw(M.name);if(B!=="svg"&&B!=="png"){ie.error(i(`${I}.set.uploadOnlySvgPng`));return}if(M.size>hw){ie.error(i(`${I}.set.uploadTooLarge`));return}try{const ce=B==="svg"?await pw(M):await dw(M),be=`icon.${B}`,dt=await t.request("dev-tools.writeAsset",[n,be,ce]);if(!Oe(dt)||!dt.data?.ok){ie.error(`${i(`${I}.set.uploadFail`)}:${Oe(dt)?i(`${I}.set.uploadUnknown`):Ze(dt).message}`);return}const xt=dt.data.path??`assets/${be}`;K({iconStr:xt}),ie.success(i(`${I}.set.uploadOk`))}catch(ce){const be=ce instanceof Error?ce.message:"",dt=/^set\./.test(be)?i(`${I}.${be}`):i(`${I}.set.uploadUnknown`);ie.error(`${i(`${I}.set.uploadFail`)}:${dt}`)}},De=fe(async()=>{g(B=>({...B,settings:!0}));const M=await t.request("dev-tools.writeSettings",[n,aw(l,s?.dlient.icon)]);if(g(B=>({...B,settings:!1})),!Oe(M)){ie.error(`${i(`${I}.set.saveFail`)}:${Ze(M).message}`);return}M.data?.changed?(ie.success(i(`${I}.set.saveOk`)),e?.()):ie.info(i(`${I}.set.noChange`)),await W()},[t,l,W,e,s,n,i]),Ke=fe(async()=>{g(B=>({...B,intro:!0}));const M=await t.request("dev-tools.writeMarkdown",[n,"index.md",Q["index.md"]]);if(g(B=>({...B,intro:!1})),!Oe(M)){ie.error(`${i(`${I}.set.saveFail`)}:${Ze(M).message}`);return}k(B=>({...B,"index.md":Q["index.md"]})),ie.success(i(`${I}.set.saveMdOk`))},[t,Q,n,i]),Se=fe(async M=>{const B=M==="en"?"locale-en":"locale-zh",ce=M==="en"?"index.en-US.md":"index.zh-CN.md";g(xt=>({...xt,[B]:!0}));const be=await t.request("dev-tools.writeSettings",[n,cw(l)]),dt=await t.request("dev-tools.writeMarkdown",[n,ce,Q[ce]]);if(g(xt=>({...xt,[B]:!1})),!Oe(be)){ie.error(`${i(`${I}.set.saveFail`)}:${Ze(be).message}`);return}if(!Oe(dt)){ie.error(`${i(`${I}.set.saveFail`)}:${Ze(dt).message}`);return}k(xt=>({...xt,[ce]:Q[ce]})),ie.success(i(`${I}.set.saveOk`)),await W()},[t,l,Q,W,n,i]),Be=()=>a(N),Ie=()=>w(M=>({...M,"index.md":v["index.md"]})),Me=M=>{const B=M==="en"?"index.en-US.md":"index.zh-CN.md";a(M==="en"?ce=>({...ce,nameEn:N.nameEn,descEn:N.descEn}):ce=>({...ce,nameZh:N.nameZh,descZh:N.descZh})),w(ce=>({...ce,[B]:v[B]}))},V=fe(async M=>{await Y("index.md");const B=Q["index.md"]||v["index.md"];M==="en"?(K({nameEn:l.nameDefault,descEn:l.descDefault}),w(ce=>({...ce,"index.en-US.md":B}))):(K({nameZh:l.nameDefault,descZh:l.descDefault}),w(ce=>({...ce,"index.zh-CN.md":B})))},[l.nameDefault,l.descDefault,Q,v,Y]);return c?b("div",{className:"pdr-set__state",children:b(Sn,{text:i(`${I}.set.reading`)})}):u?R("div",{className:"pdr-set__state",children:[b("div",{className:"pdr-set__error",children:u}),b(it,{variant:"outline",onClick:()=>void W(),children:i(`${I}.set.retry`)})]}):R("div",{className:"pdr-set",children:[R("aside",{className:"pdr-set__sidebar",children:[b("button",{type:"button",className:`pdr-set__navitem${d==="settings"?" is-active":""}`,onClick:()=>O("settings"),children:i(`${I}.nav.settings`)}),b("button",{type:"button",className:`pdr-set__navitem${d==="intro"?" is-active":""}`,onClick:()=>O("intro"),children:i(`${I}.nav.intro`)}),R("div",{className:"pdr-set__navgroup",children:[b("div",{className:"pdr-set__navgrouptitle",children:i(`${I}.nav.locale`)}),b("button",{type:"button",className:`pdr-set__navitem pdr-set__navitem--sub${d==="locale-en"?" is-active":""}`,onClick:()=>O("locale-en"),children:i(`${I}.nav.localeEn`)}),b("button",{type:"button",className:`pdr-set__navitem pdr-set__navitem--sub${d==="locale-zh"?" is-active":""}`,onClick:()=>O("locale-zh"),children:i(`${I}.nav.localeZh`)})]})]}),R("div",{className:"pdr-set__content",children:[d==="settings"&&b(gw,{form:l,payload:s,iconUrl:S,patch:K,onIconUpload:M=>void Pe(M),dirty:G,saving:p.settings,onSave:()=>void De(),onReset:Be,t:i}),d==="intro"&&b(Sw,{value:Q["index.md"],loaded:$["index.md"],saving:p.intro,dirty:D,onChange:M=>w(B=>({...B,"index.md":M})),onSave:()=>void Ke(),onReset:Ie,locale:r==="en-US"?"en-US":"zh-CN",t:i}),d==="locale-en"&&b(Lp,{localeKey:"en",name:l.nameEn,desc:l.descEn,mdValue:Q["index.en-US.md"],mdLoaded:$["index.en-US.md"],dirty:se,saving:p["locale-en"],onNameChange:M=>K({nameEn:M}),onDescChange:M=>K({descEn:M}),onMdChange:M=>w(B=>({...B,"index.en-US.md":M})),onSave:()=>void Se("en"),onReset:()=>Me("en"),onUseDefault:()=>void V("en"),editorLocale:"en-US",t:i}),d==="locale-zh"&&b(Lp,{localeKey:"zh",name:l.nameZh,desc:l.descZh,mdValue:Q["index.zh-CN.md"],mdLoaded:$["index.zh-CN.md"],dirty:H,saving:p["locale-zh"],onNameChange:M=>K({nameZh:M}),onDescChange:M=>K({descZh:M}),onMdChange:M=>w(B=>({...B,"index.zh-CN.md":M})),onSave:()=>void Se("zh"),onReset:()=>Me("zh"),onUseDefault:()=>void V("zh"),editorLocale:"zh-CN",t:i})]})]})}function Ka({dirty:n,saving:e,onSave:t,onReset:i,saveLabel:r,resetLabel:s}){return R("div",{className:"pdr-set__areafoot",children:[b(it,{variant:"outline",size:"lg",disabled:!n||e,onClick:i,children:s}),b(it,{size:"lg",variant:"default",loading:e,disabled:!n,onClick:t,children:r})]})}function gw({form:n,payload:e,iconUrl:t,patch:i,onIconUpload:r,dirty:s,saving:o,onSave:l,onReset:a,t:c}){const h=_e(null),u=d=>{i({type:n.type===d?"":d})},f=(d,O)=>{const p=Ha(d,O),g=n.platforms.includes(p);i({platforms:g?n.platforms.filter(S=>S!==p):[...n.platforms,p]})};return R("div",{className:"pdr-set__panel",children:[R("div",{className:"pdr-set__head",children:[b("div",{className:"pdr-set__title",children:c(`${I}.nav.settings`)}),b("div",{className:"pdr-set__sub",children:c(`${I}.set.sub`,{dir:e?.dir??""})})]}),R("section",{className:"pdr-set__group",children:[R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:c(`${I}.set.pluginName`)}),b(bn,{className:"dui:input",value:n.nameDefault,onChange:d=>i({nameDefault:d.target.value})})]}),R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:c(`${I}.set.pluginDesc`)}),b(to,{className:"dui-textarea",value:n.descDefault,rows:2,onChange:d=>i({descDefault:d.target.value})})]}),R("div",{className:"pdr-field",children:[R("span",{className:"pdr-field__labelline",children:[b("span",{className:"pdr-field__label",children:c(`${I}.set.pluginIcon`)}),b("span",{className:"pdr-field__hint",children:c(`${I}.set.iconHint`)})]}),b("input",{ref:h,type:"file",accept:uw,hidden:!0,onChange:d=>{const O=d.target.files?.[0];O&&r(O),d.target.value=""}}),b("button",{type:"button",className:"pdr-set__iconpicker",onClick:()=>h.current?.click(),title:c(`${I}.set.iconClickToUpload`),children:t?b("img",{src:t,alt:"icon",className:"pdr-set__iconimg"}):b("span",{className:"pdr-set__iconempty",children:c(`${I}.set.iconNoIcon`)})})]})]}),R("section",{className:"pdr-set__group",children:[b("div",{className:"pdr-set__grouptitle",children:c(`${I}.set.pluginType`)}),b("div",{className:"pdr-set__typecards",children:Ip.map(d=>{const O=n.type===d.value;return R("button",{type:"button",className:`pdr-set__typecard${O?" is-active":""}`,onClick:()=>u(d.value),children:[b("span",{className:"pdr-set__typename",children:c(`${I}.${d.labelKey}`)}),b("span",{className:"pdr-set__typedesc",children:c(`${I}.${d.descKey}`)})]},d.value)})})]}),R("section",{className:"pdr-set__group",children:[b("div",{className:"pdr-set__grouptitle",children:c(`${I}.set.platform`)}),b("div",{className:"pdr-set__platformgrid",children:Yp.map(d=>{const O=gc.filter(p=>n.platforms.includes(Ha(d.value,p.value))).length;return R("div",{className:`pdr-set__platformcol${O>0?" is-active":""}`,children:[b("span",{className:"pdr-set__platformicon",dangerouslySetInnerHTML:{__html:d.icon}}),b("span",{className:"pdr-set__platformname",children:d.label}),b("div",{className:"pdr-set__archrow",children:gc.map(p=>{const g=n.platforms.includes(Ha(d.value,p.value));return b("button",{type:"button",className:`pdr-set__archchip${g?" is-on":""}`,onClick:()=>f(d.value,p.value),children:p.label},p.value)})})]},d.value)})}),b("div",{className:"pdr-field__hint",children:c(`${I}.set.platformHint`)})]}),b(Ka,{dirty:s,saving:o,onSave:l,onReset:a,saveLabel:c(`${I}.common.save`),resetLabel:c(`${I}.common.reset`),t:c})]})}function Sw({value:n,loaded:e,saving:t,dirty:i,onChange:r,onSave:s,onReset:o,locale:l,t:a}){return R("div",{className:"pdr-set__panel",children:[R("div",{className:"pdr-set__head",children:[b("div",{className:"pdr-set__title",children:a(`${I}.intro.title`)}),b("div",{className:"pdr-set__sub",children:a(`${I}.intro.sub`)})]}),b("div",{className:"pdr-set__mdwrap",children:e?b(Zp,{value:n,onChange:r,locale:l}):b("div",{className:"pdr-set__mdloading",children:b(Sn,{})})}),b(Ka,{dirty:i,saving:t,onSave:s,onReset:o,saveLabel:a(`${I}.common.save`),resetLabel:a(`${I}.common.reset`),t:a})]})}function Lp({localeKey:n,name:e,desc:t,mdValue:i,mdLoaded:r,dirty:s,saving:o,onNameChange:l,onDescChange:a,onMdChange:c,onSave:h,onReset:u,onUseDefault:f,editorLocale:d,t:O}){const p=n==="en"?"locale.enTitle":"locale.zhTitle",g=n==="en"?"locale.enSub":"locale.zhSub";return R("div",{className:"pdr-set__panel",children:[R("div",{className:"pdr-set__localehead",children:[R("div",{className:"pdr-set__localeheadtext",children:[b("div",{className:"pdr-set__title",children:O(`${I}.${p}`)}),b("div",{className:"pdr-set__sub",children:O(`${I}.${g}`)})]}),b(it,{variant:"outline",onClick:f,title:O(`${I}.locale.useDefaultTip`),children:O(`${I}.locale.useDefault`)})]}),R("section",{className:"pdr-set__group",children:[R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:O(`${I}.locale.name`)}),b(bn,{className:"dui-input",value:e,onChange:S=>l(S.target.value)})]}),R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:O(`${I}.locale.desc`)}),b(to,{className:"dui:textarea",value:t,rows:2,onChange:S=>a(S.target.value)})]})]}),R("section",{className:"pdr-set__group",children:[b("div",{className:"pdr-set__grouptitle",children:O(`${I}.locale.intro`)}),b("div",{className:"pdr-set__mdwrap",children:r?b(Zp,{value:i,onChange:c,locale:d}):b("div",{className:"pdr-set__mdloading",children:b(Sn,{})})})]}),b(Ka,{dirty:s,saving:o,onSave:h,onReset:u,saveLabel:O(`${I}.common.save`),resetLabel:O(`${I}.common.reset`),t:O})]})}const Qt="dev-tools";function bw({plugins:n,loaded:e,runtimeOf:t,onOpen:i,onRemove:r,onImport:s,onCreate:o,extra:l}){const{t:a}=vt();return gn(),R("div",{className:"pdr-scroll",children:[R("div",{className:"pdr-work__head",children:[R("div",{className:"pdr-work__headtext",children:[b("div",{className:"pdr-work__title",children:a(`${Qt}.work.title`)}),b("div",{className:"pdr-work__sub",children:a(`${Qt}.work.sub`,{count:n.length})})]}),R("div",{className:"pdr-work__headops",children:[l,R(it,{variant:"outline",onClick:s,children:[b(sc,{}),a(`${Qt}.work.import`)]}),R(it,{variant:"default",onClick:o,children:[b(oc,{}),a(`${Qt}.work.create`)]})]})]}),e&&n.length===0?b("div",{className:"pdr-empty",children:a(`${Qt}.work.empty`)}):b("div",{className:"pdr-work__grid",children:n.map(c=>{const h=kr(c.name,c.id),u=t(c.id);return R("div",{className:"pdr-card",children:[R("div",{className:"pdr-card__top",children:[b(io,{className:"pdr-card__logo",active:!0,pluginId:c.id,icon:c.icon,name:h,size:48}),R("div",{className:"pdr-card__info",children:[R("div",{className:"pdr-card__nameline",children:[b("span",{className:"pdr-card__name",title:h,children:h}),b(no,{size:"small",theme:c.type==="app"?"primary":"warning",children:c.type==="app"?a(`${Qt}.work.typeApp`):a(`${Qt}.work.typePlugin`)}),R(no,{size:"small",children:["v",c.version??"0.0.0"]})]}),b("div",{className:"pdr-card__summary",title:c.path,children:c.path})]}),R("div",{className:`pdr-state pdr-state--${u}`,children:[b("span",{className:"pdr-state__dot"}),b("span",{children:a(`${Qt}.${Np[u]??u}`)})]})]}),b("div",{className:"pdr-card__bottom",children:R("div",{className:"pdr-card__ops",children:[b(it,{size:"sm",variant:"default",onClick:()=>i(c.id,"preview"),children:a(`${Qt}.work.open`)}),R(it,{size:"sm",variant:"destructive",onClick:()=>{(async()=>await yn.sync.confirm(a(`${Qt}.work.removeTitle`),a(`${Qt}.work.removeConfirm`,{name:h}))&&r(c.id))()},children:[b(lc,{}),a(`${Qt}.work.remove`)]})]})})]},c.id)})})]})}const ft="dev-tools",Ep={id:"",name:"",error:"",submitting:!1},yw=/^[a-z][a-z0-9-]*$/,kw=ic(function({onCreated:e,onClose:t},i){const r=gn(),{t:s}=vt(),[o,l]=F(""),[a,c]=F(""),[h,u]=F(""),[f,d]=F(!1),O=_e(Ep);O.current={id:o,name:a,error:h,submitting:f};const p=_e(new Set),g=fe(()=>p.current.forEach(k=>k()),[]);Ce(()=>{g()},[o,a,h,f,g]);const S=_e(o);S.current=o;const Q=_e(a);Q.current=a;const w=fe(async()=>{const k=S.current.trim(),$=Q.current.trim();if(!yw.test(k))return u(String(s(`${ft}.create.idInvalid`))),!1;if(!$)return u(String(s(`${ft}.create.nameRequired`))),!1;u(""),d(!0);try{const P=await r.request("dev-tools.devCreatePlugin",[k,$]);if(!Oe(P)){const Y=Ze(P);return Y.code===-3011?u(Y.message):ie.error(`${String(s(`${ft}.create.fail`))}:${Y.message}`),!1}return P.data?.id?(ie.success(String(s(`${ft}.create.ok`,{name:$}))),e(k),!0):!1}catch{return ie.error(String(s(`${ft}.create.unknown`))),!1}finally{d(!1)}},[r,e,s]),v=fe(()=>t(),[t]);return nc(i,()=>({getSnapshot:()=>O.current,subscribe:k=>(p.current.add(k),()=>{p.current.delete(k)}),submit:w,cancel:v}),[w,v]),R("div",{className:"pdr-cdlg__body",style:{padding:"10px 30px"},children:[R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:String(s(`${ft}.create.id`))}),b(bn,{value:o,placeholder:String(s(`${ft}.create.idPlaceholder`)),onChange:k=>l(k.target.value)})]}),R("label",{className:"pdr-field",children:[b("span",{className:"pdr-field__label",children:String(s(`${ft}.create.name`))}),b(bn,{value:a,placeholder:String(s(`${ft}.create.namePlaceholder`)),onChange:k=>c(k.target.value)})]}),h&&b("div",{className:"pdr-cdlg__error",children:h})]})});function Qw(){const{t:n}=vt();return R("div",{className:"pdr-cdlg__head",children:[b("div",{className:"pdr-cdlg__title",children:String(n(`${ft}.create.title`))}),b("div",{className:"pdr-cdlg__desc",children:String(n(`${ft}.create.sub`))})]})}function xw({formRef:n,instanceRef:e}){const{t}=vt(),[i,r]=F(null);Ce(()=>{r(n.current)},[n]);const s=rc(o=>i?i.subscribe(o):()=>{},()=>i?i.getSnapshot():Ep);return R("div",{className:"pdr-cdlg__foot",children:[b(it,{variant:"outline",disabled:s.submitting,onClick:()=>i?.cancel(),children:String(t(`${ft}.create.cancel`))}),b(it,{variant:"default",loading:s.submitting,onClick:()=>{i?.submit().then(o=>{o&&e.current?.close()})},children:String(t(`${ft}.create.submit`))})]})}function ww({api:n,onCreated:e}){const t={current:null},i={current:null},r=yn.dialog({width:460,placement:"top",api:n,closeBtn:!1,header:b(Qw,{}),body:b(kw,{ref:t,onCreated:s=>{i.current?.close(),e(s)},onClose:()=>i.current?.close()}),footer:b(xw,{formRef:t,instanceRef:i})});i.current=r}const j="dev-tools",Ja=(n,e)=>JSON.stringify(n)===JSON.stringify(e),$w=[{key:"preview",labelKey:"view.preview"},{key:"log",labelKey:"view.log"},{key:"setting",labelKey:"view.setting"}],zp=["refreshStep.stopWorker","refreshStep.stopBuild","refreshStep.install","refreshStep.build","refreshStep.env","refreshStep.done"];function vw({size:n=14}){return b("svg",{viewBox:"0 0 24 24",width:n,height:n,fill:"currentColor","aria-hidden":"true",children:b("path",{d:"M12 2.5l1.8 4.9 4.9 1.8-4.9 1.8L12 15.9l-1.8-4.9-4.9-1.8 4.9-1.8L12 2.5zM19 15l.9 2.4 2.4.9-2.4.9L19 21.6l-.9-2.4-2.4-.9 2.4-.9L19 15zM5.5 13.5l.7 1.9 1.9.7-1.9.7-.7 1.9-.7-1.9-1.9-.7 1.9-.7.7-1.9z"})})}function Pw({view:n,onViewChange:e,booting:t,bootText:i,refreshing:r,onRefresh:s,packing:o,onPack:l,showAi:a,aiActive:c,onToggleAi:h}){const{t:u}=vt();return R("div",{className:"pdr-actionbar",children:[b(ro,{value:n,onValueChange:f=>e(f),children:b(so,{children:$w.map(f=>b(yr,{value:f.key,children:b("span",{className:"pdr-tablabel",children:u(`${j}.${f.labelKey}`)})},f.key))})}),R("div",{className:"pdr-actionbar__right",children:[t&&R("div",{className:"pdr-bootflag",children:[b("span",{className:"pdr-bootflag__dot"}),b("span",{children:i??u(`${j}.boot.starting`)})]}),b("button",{type:"button",className:`pdr-iconbtn${o?" is-spinning":""}`,title:String(u(`${j}.action.packTitle`)),disabled:o,onClick:l,children:b(dc,{name:"box",size:14})}),b("button",{type:"button",className:`pdr-iconbtn${r?" is-spinning":""}`,title:String(u(`${j}.action.refreshTitle`)),onClick:s,children:b(oo,{size:14})}),a&&b("button",{type:"button",className:`pdr-iconbtn${c?" is-active":""}`,title:String(u(c?`${j}.action.aiHideTitle`:`${j}.action.aiShowTitle`)),onClick:h,children:b(vw,{size:14})})]})]})}function Cw({pluginName:n,dirOk:e,buildOk:t,envReady:i,output:r,onCancel:s}){const{t:o}=vt(),l=[{title:o(`${j}.boot.stepCheck`),desc:o(`${j}.boot.stepCheckDesc`),done:e},{title:o(`${j}.boot.stepBuild`),desc:o(`${j}.boot.stepBuildDesc`),done:t},{title:o(`${j}.boot.stepEnv`),desc:o(`${j}.boot.stepEnvDesc`),done:i}],a=l.findIndex(h=>!h.done),c=l.filter(h=>h.done).length;return b("div",{className:"pdr-scroll",children:b("div",{className:"pdr-boot",children:R("div",{className:"pdr-boot__card",children:[R("div",{className:"pdr-boot__head",children:[b("div",{className:"pdr-boot__title",children:o(`${j}.boot.title`)}),b("div",{className:"pdr-boot__sub",children:o(`${j}.boot.sub`,{name:n,done:c,total:l.length})})]}),b("div",{className:"pdr-boot__steps",children:l.map((h,u)=>{const f=h.done?"done":u===a?"running":"pending";return R("div",{className:`pdr-step pdr-step--${f}`,children:[b("div",{className:`pdr-step__icon pdr-step__icon--${f}`,children:f==="done"?b(co,{}):f==="running"?b(ho,{}):b(uo,{})}),R("div",{className:"pdr-step__body",children:[b("div",{className:"pdr-step__line",children:b("span",{className:"pdr-step__title",children:h.title})}),b("div",{className:"pdr-step__desc",children:h.desc}),f==="running"&&r?b("div",{className:"pdr-step__output",children:r}):null]})]},String(h.title))})}),R("div",{className:"pdr-boot__foot",children:[b("span",{className:"pdr-boot__hint",children:o(`${j}.boot.hint`)}),s&&b("button",{type:"button",className:"pdr-textbtn",onClick:s,children:o(`${j}.boot.stopBuild`)})]})]})})})}function Tw({pluginName:n,steps:e}){const{t}=vt();return b("div",{className:"pdr-scroll",children:b("div",{className:"pdr-boot",children:R("div",{className:"pdr-boot__card",children:[R("div",{className:"pdr-boot__head",children:[b("div",{className:"pdr-boot__title",children:t(`${j}.refresh.title`)}),b("div",{className:"pdr-boot__sub",children:t(`${j}.refresh.sub`,{name:n})})]}),b("div",{className:"pdr-boot__steps",children:e.map(i=>R("div",{className:`pdr-step pdr-step--${i.status}`,children:[b("div",{className:`pdr-step__icon pdr-step__icon--${i.status}`,children:i.status==="done"?b(co,{}):i.status==="error"?b(Oc,{}):i.status==="running"?b(ho,{}):b(uo,{})}),b("div",{className:"pdr-step__body",children:b("div",{className:"pdr-step__line",children:b("span",{className:"pdr-step__title",children:t(`${j}.${i.title}`)})})})]},i.title))}),b("div",{className:"pdr-boot__foot",children:b("span",{className:"pdr-boot__hint",children:t(`${j}.refresh.hint`)})})]})})})}function Aw(){return b("div",{className:"pdr-loading",children:b(Sn,{size:"small",loading:!0})})}function Zw({installing:n,error:e,onInstall:t}){const{t:i}=vt();return b("div",{className:"pdr",children:b("div",{className:"pdr-view",children:b("div",{className:"pdr-scroll",children:b("div",{className:"pdr-boot",children:R("div",{className:"pdr-boot__card",children:[R("div",{className:"pdr-boot__head",children:[b("div",{className:"pdr-boot__title",children:i(`${j}.env.title`)}),b("div",{className:"pdr-boot__sub",children:i(`${j}.env.sub`)})]}),e?b("div",{className:"pdr-boot__error",children:e}):null,R("div",{className:"pdr-boot__foot",children:[b("span",{className:"pdr-boot__hint",children:i(`${j}.env.hint`)}),b(it,{variant:"default",loading:n,onClick:t,children:i(`${j}.env.install`)})]})]})})})})})}function Xw({pluginId:n}){return b("div",{className:"pdr-logs",children:b(pc,{className:"pdr-logs__viewer",height:"100%",filterId:n},n)})}function Rw(){const n=gn(),{t:e,locale:t}=vt(),[i,r]=F([]),[s,o]=F(!1),[l,a]=F(!1),[c,h]=F([]),[u,f]=F({}),[d,O]=F({}),[p,g]=F({}),[S,Q]=F([]),[w,v]=F(null),[k,$]=F({}),[P,W]=F({}),[Y,N]=F(null),[G,D]=F([]),[se,H]=F("checking"),[K,Pe]=F(!1),[De,Ke]=F(void 0),[Se,Be]=F(void 0),[Ie,Me]=F([]),[V,M]=F(_),[B,ce]=F({}),be=B[V]??"preview",dt=_e(V),xt=_e({}),Xi=ac(),Js=fe(x=>{x===_||!Xi||Xi.hideMine().then(X=>{const U=X?.data;Array.isArray(U)&&U.length&&(xt.current[x]=U)})},[Xi]),eo=fe(x=>{if(x===_||!Xi)return;const X=xt.current[x];Array.isArray(X)&&X.length&&(Xi.showMine(X),delete xt.current[x])},[Xi]);Ce(()=>{const x=dt.current;x!==V&&(dt.current=V,Js(x),eo(V))},[V,Js,eo]);const Ot=fe(async()=>{const x=await kn(n.request("dev-tools.list"),[]);r(Array.isArray(x)?x:[]),o(!0)},[n]);Ce(()=>{Ot()},[Ot]),Ce(()=>{let x=!1;return(async()=>{const X=await n.request("dev-tools.checkNode");x||(Be(X?.data?.requiredVersion),H(Oe(X)&&X.data?.ready?"ready":"missing"))})(),()=>{x=!0}},[n]);const Mw=fe(async()=>{Pe(!0),Ke(void 0);const x=await n.request("dev-tools.installNode",[Se]).catch(X=>({code:-1,msg:String(X?.message??X)}));if(Pe(!1),Oe(x)){H("ready");return}Ke(Si(x.msg,t)??Ze(x).message),H("missing")},[n,t,Se]);Ce(()=>{let x=!1;const X=async()=>{const pe=await kn(n.request("dev-tools.listBuilds"),[]);if(x)return;const he=Array.isArray(pe)?pe:[];h(ke=>Ja(ke,he)?ke:he);const we=new Set(he.filter(ke=>ke.status==="running").map(ke=>ke.procId));O(ke=>{const $t={...ke};let pt=!1;for(const[tc,Uw]of Object.entries($t))we.has(Uw)||(delete $t[tc],pt=!0);return pt?$t:ke});const me=await kn(n.request("dev-tools.runtimeStates"),[]);if(x)return;const $e=(Array.isArray(me)?me:[]).reduce((ke,$t)=>($t?.id&&(ke[$t.id]=$t.status),ke),{});f(ke=>Ja(ke,$e)?ke:$e);const Ri=V===_?void 0:d[V];if(Ri){const ke=await kn(n.request("dev-tools.log",[Ri,0]),[]);if(x)return;const $t=Array.isArray(ke)?ke:[];Q(pt=>Ja(pt,$t)?pt:$t)}},U=setInterval(()=>void X(),2e3);return()=>{x=!0,clearInterval(U)}},[n,V,d]);const _w=fe(async()=>{a(!0),await Ot(),a(!1)},[Ot]),Lw=fe(async(x,X)=>{if(Me($e=>$e.includes(x)?$e:[...$e,x]),M(x),ce($e=>({...$e,[x]:X})),X!=="preview")return;const U=await n.request("dev-tools.previewInfo",[x]);if(!Oe(U)){ie.error(`${e(`${j}.msg.previewInfoFail`)}:${Ze(U).message}`);return}U.data&&g($e=>({...$e,[x]:U.data}));const pe=await n.request("dev-tools.checkManifest",[x]);if(!Oe(pe)||!pe.data?.ok){ie.error(`${e(`${j}.msg.manifestFail`)}:${Si(pe.data?.error,t)||Ze(pe).message}`);return}const he=await n.request("dev-tools.ensureDeps",[x]);if(!Oe(he)){ie.error(`${e(`${j}.msg.depsFail`)}:${Ze(he).message}`);return}const we=await n.request("dev-tools.buildDev",[x]);if(!Oe(we)){ie.error(`${e(`${j}.msg.buildFail`)}:${Ze(we).message}`);return}const me=we.data;if(me?.ok&&me.procId)O($e=>({...$e,[x]:me.procId}));else{ie.error(`${e(`${j}.msg.buildFail`)}:${Si(me?.error,t)||"unknown"}`);return}const wt=await n.request("dev-tools.ensureEnv",[x]);if(!Oe(wt)||!wt.data?.ok){ie.error(`${e(`${j}.msg.envFail`)}:${Si(wt.data?.error,t)||Ze(wt).message}`);return}$($e=>({...$e,[x]:!0}))},[n,t,e]),ec=fe(async x=>{w===x&&v(null),$(X=>{if(!X[x])return X;const U={...X};return delete U[x],U}),W(X=>{if(!X[x])return X;const U={...X};return delete U[x],U}),delete mn.current[x],await n.request("dev-tools.closePlugin",[x]).catch(()=>{}),delete xt.current[x],Xi?.hideMine(),Me(X=>X.filter(U=>U!==x)),M(X=>{if(X!==x)return X;const U=Ie.filter(pe=>pe!==x);return U[U.length-1]??_})},[n,w,Ie]),Ew=fe(async()=>{const x=await n.request("dev-tools.selectDirectory");if(!Oe(x)){ie.error(`${e(`${j}.msg.selectDirFail`)}:${Ze(x).message}`);return}const X=x.data;if(!X)return;const U=()=>{yn.error({title:e(`${j}.msg.importFailTitle`),description:e(`${j}.msg.importFailDesc`)})},pe=await n.request("dev-tools.checkImportable",[X]);if(!Oe(pe)||pe.data?.ok!==!0){U();return}const he=async()=>{const we=await n.request("dev-tools.register",[X]);return Oe(we)?(ie.success(e(`${j}.msg.registerOk`)),await Ot(),!0):(U(),!1)};if(pe.data.needsDevChange){yn.confirm({title:e(`${j}.msg.importTitle`),description:e(`${j}.msg.importConfirm`),confirmBtn:e(`${j}.msg.importChangeAndImport`),cancelBtn:e(`${j}.msg.importCancel`),onConfirm:async()=>{const we=await n.request("dev-tools.changeToDev",[X]).catch(()=>null);return Oe(we)?(await he(),!0):(U(),!0)}});return}await he()},[n,Ot,e]),zw=fe(()=>{ww({api:n,onCreated:()=>void Ot()})},[n,Ot]),jw=fe(async x=>{const X=await n.request("dev-tools.remove",[x]);if(!Oe(X)){ie.error(`${e(`${j}.msg.removeFail`)}:${Ze(X).message}`);return}ec(x),ie.success(e(`${j}.msg.removeOk`,{id:x})),await Ot()},[n,ec,Ot,e]),Dw=fe(async x=>{const X=d[x];if(!X)return;const U=await n.request("dev-tools.stop",[X]);if(!Oe(U)){ie.error(`${e(`${j}.msg.stopFail`)}:${Ze(U).message}`);return}O(pe=>{const he={...pe};return delete he[x],he}),ie.success(e(`${j}.msg.stopOk`))},[n,d,e]),Iw=fe(async x=>{v(x),$(he=>he[x]?{...he,[x]:!1}:he),D(zp.map(()=>"pending"));let X=!1,U=0;const pe=(he,we)=>{X||(X=!0,window.clearTimeout(U),v(null),$(me=>we?{...me,[x]:!0}:me),we?ie.success(e(`${j}.msg.refreshOk`)):he&&ie.error(e(`${j}.msg.refreshFail`,{msg:he})),Ot())};try{const he=n.listen("dev-tools.refresh",[x],we=>{const me=we;if(typeof me.step!="number"||typeof me.status!="string")return;const wt=me.status==="done"?"done":me.status==="error"?"error":"running";D($e=>$e.map((Ri,ke)=>ke===me.step?wt:Ri)),me.step===5&&(me.procId&&O($e=>({...$e,[x]:me.procId})),pe(wt==="done"?"":me.detail!=null?Si(me.detail,t):String(e(`${j}.msg.refreshFail`)),wt==="done"))});U=window.setTimeout(()=>{he.abort(),pe(String(e(`${j}.msg.refreshTimeout`)),!1)},3*60*1e3)}catch(he){pe(he instanceof Error?he.message:String(he),!1)}},[n,Ot,t,e]),Yw=fe(x=>u[`${x}@dev`]??"stopped",[u]),Nw=u["dsh@dev"]!==void 0||i.some(x=>x.id==="dsh")?"dsh@dev":"dsh",mn=_e({}),Ww=fe(x=>(mn.current[x]||(mn.current[x]={current:null}),mn.current[x]),[]);Ce(()=>{const x=()=>{for(const U of Object.keys(mn.current)){const pe=mn.current[U];pe?.current&&(P[U]?pe.current.expand():pe.current.collapse())}};x();const X=requestAnimationFrame(x);return()=>cancelAnimationFrame(X)},[P,V,Ie]);const qw=fe(x=>{W(X=>({...X,[x]:!X[x]}))},[]),Bw=fe(async x=>{if(!Y){N(x);try{const X=await n.request("dev-tools.packDlient",[{pluginId:x}]);if(!Oe(X)||!X.data?.ok){ie.error(`${e(`${j}.msg.packFail`)}:${Si(X?.msg,t)??Ze(X).message}`);return}ie.success(e(`${j}.msg.packOk`,{name:String(X.data.name??""),path:String(X.data.savePath??"")}))}catch(X){ie.error(`${e(`${j}.msg.packFail`)}:${X instanceof Error?X.message:String(X)}`)}finally{N(null)}}},[n,t,Y,e]),Vw=x=>{const X=i.find(pt=>pt.id===x);if(!X)return null;const U=kr(X.name,x),pe=V===x,he=B[x]??"preview",we=p[x],me=!!k[x],wt=c.find(pt=>pt.procId===d[x]),$e=!!wt&&wt.status==="running",Ri=S.filter(pt=>pt.data.trim()),ke=w===x?b(Tw,{pluginName:U,steps:zp.map((pt,tc)=>({title:pt,status:G[tc]??"pending"}))}):we&&me&&we.hasUI===!1?b("div",{className:"pdr-preview",children:b("div",{className:"pdr-preview__empty",children:e(`${j}.preview.workerOnly`)})}):we&&me?b("div",{className:"pdr-preview",children:b(lo,{pluginId:we.pluginId,remoteEntryUrl:we.remoteEntryUrl},x)}):b(Cw,{pluginName:U,dirOk:!!we,buildOk:$e,envReady:me,output:Ri[Ri.length-1]?.data.trim(),onCancel:$e?()=>void Dw(x):void 0}),$t=!!P[x];return R("div",{className:"pdr-body",style:{display:pe?void 0:"none"},children:[b("div",{className:`pdr-viewpane${he==="preview"?"":" is-hidden"}`,children:R(uc,{orientation:"horizontal",children:[b(ao,{minSize:25,children:ke}),b(fc,{withHandle:!0}),b(ao,{panelRef:Ww(x),collapsible:!0,collapsedSize:0,minSize:300,defaultSize:300,children:b("div",{className:"pdr-ai",children:b(lo,{pluginId:Nw,entry:"Chat",componentProps:{workspace:X.path,visible:$t},fallback:b("div",{className:"pdr-ai__fallback",children:e(`${j}.ai.unavailable`)})})})})]})}),b("div",{className:`pdr-viewpane${he==="log"?"":" is-hidden"}`,children:b(Xw,{pluginId:x})}),b("div",{className:`pdr-viewpane${he==="setting"?"":" is-hidden"}`,children:b(mw,{pluginId:x,onSaved:()=>void Ot()},x)})]})},Gw=V!==_&&be==="preview"&&!k[V];return Ce(()=>{V!==_&&(be!=="preview"?Js(V):eo(V))},[V,be,Js,eo]),se==="checking"?b(Aw,{}):se==="missing"?b(Zw,{installing:K,error:De,onInstall:()=>void Mw()}):R("div",{className:"pdr",children:[b("div",{className:"pdr-tabs",children:b(ro,{value:V,onValueChange:x=>M(String(x)),style:{height:"100%",minWidth:0,display:"flex",flexDirection:"column"},children:R(so,{variant:"line",scrollable:!0,className:"dui:tabs__nav",style:{height:"100%",padding:"0 0 5px",borderRadius:0,backgroundColor:"transparent",justifyContent:"flex-start",gap:2},children:[b(yr,{value:_,style:{height:"100%",borderRadius:6,padding:0},children:b("span",{className:"pdr-tabs__home",title:String(e(`${j}.tab.homeTitle`)),children:b(cc,{})})}),Ie.map(x=>{const X=i.find(U=>U.id===x);return b(yr,{value:x,style:{height:"100%",borderRadius:6,padding:"0 4px 0 8px"},children:R("span",{className:"pdr-tabs__item",children:[b(io,{className:"pdr-tabs__badge",pluginId:x,icon:X?.icon,name:kr(X?.name,x),size:15,active:V===x}),b("span",{className:"pdr-tabs__name",children:kr(X?.name,x)}),b("span",{role:"button","aria-label":String(e(`${j}.tab.closeTitle`)),onClick:U=>{U.stopPropagation(),ec(x)},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:16,height:16,borderRadius:4,color:"inherit",cursor:"pointer",opacity:.8},children:b(hc,{size:13})})]})},x)})]})})}),R("div",{className:"pdr-view",children:[V!==_&&b(Pw,{view:be,onViewChange:x=>ce(X=>({...X,[V]:x})),booting:Gw,refreshing:l||w===V,onRefresh:()=>void Iw(V),packing:Y===V,onPack:()=>void Bw(V),showAi:be==="preview",aiActive:!!P[V],onToggleAi:()=>qw(V)}),V===_?b(bw,{plugins:i,loaded:s,runtimeOf:Yw,onOpen:(x,X)=>void Lw(x,X),onRemove:x=>void jw(x),onImport:()=>void Ew(),onCreate:()=>void zw(),extra:R(it,{variant:"ghost",loading:l,onClick:()=>void _w(),children:[b(oo,{}),e(`${j}.common.refresh`)]})}):null,Ie.map(x=>b("div",{className:"pdr-tabbody",style:{display:V===x?void 0:"none"},children:Vw(x)},`tab-body-${x}`))]})]})}}}});
|
|
34
34
|
|
|
35
|
-
;(function(){var prev=document.getElementById('dlient-css-dev-tools');if(prev)prev.remove();var l=document.createElement('link');l.id='dlient-css-dev-tools';l.rel='stylesheet';l.href='dlientOpen://plugin/dev-tools/dist/assets/style.css?v=
|
|
35
|
+
;(function(){var prev=document.getElementById('dlient-css-dev-tools');if(prev)prev.remove();var l=document.createElement('link');l.id='dlient-css-dev-tools';l.rel='stylesheet';l.href='dlientOpen://plugin/dev-tools/dist/assets/style.css?v=1789054478338';document.head.appendChild(l);})();
|
package/package.json
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dlient-open/dev-tools",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"license": "MIT",
|
|
5
|
+
"description": "dlient dev-plugin toolbox: create from template, auto-build, live preview, pack to .dlient, logs",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"dlient-open-plugin",
|
|
8
|
+
"dlient",
|
|
9
|
+
"dev-tools",
|
|
10
|
+
"plugin-development",
|
|
11
|
+
"preview"
|
|
12
|
+
],
|
|
5
13
|
"type": "module",
|
|
6
14
|
"files": [
|
|
7
15
|
"dist",
|
|
8
16
|
"assets",
|
|
9
|
-
"script"
|
|
17
|
+
"script",
|
|
18
|
+
"*.dlient"
|
|
10
19
|
],
|
|
11
20
|
"dlient": {
|
|
12
21
|
"id": "dev-tools",
|
|
@@ -101,6 +110,7 @@
|
|
|
101
110
|
"build:ui": "vite build",
|
|
102
111
|
"build:worker": "node script/build-worker.mjs",
|
|
103
112
|
"pack": "npm run build && node script/make-dlient.mjs",
|
|
113
|
+
"prepublishOnly": "npm run pack",
|
|
104
114
|
"dev:watch": "vite build --watch",
|
|
105
115
|
"dev:watch:worker": "node script/build-worker.mjs --watch",
|
|
106
116
|
"dev": "concurrently -k \"npm:dev:watch\" \"npm:dev:watch:worker\""
|
package/script/make-dlient.mjs
CHANGED
|
@@ -119,6 +119,13 @@ try {
|
|
|
119
119
|
walk(stage, '')
|
|
120
120
|
|
|
121
121
|
const out = join(ROOT, name)
|
|
122
|
+
// 清理同目录下的历史 .dlient(只保留本次产物):npm 包用 "*.dlient" 通配发布时,
|
|
123
|
+
// 旧版本产物会被一并打进包里(体积暴涨且宿主可能装到旧包),故出包即清理
|
|
124
|
+
for (const ent of readdirSync(ROOT)) {
|
|
125
|
+
if (ent !== name && ent.startsWith(`${id}-`) && ent.endsWith('.dlient')) {
|
|
126
|
+
rmSync(join(ROOT, ent), { force: true })
|
|
127
|
+
}
|
|
128
|
+
}
|
|
122
129
|
writeFileSync(out, makeZip(files))
|
|
123
130
|
console.log(`[make-dlient] 完成 → ${out}`)
|
|
124
131
|
console.log(`[make-dlient] 共 ${files.length} 个文件,.dlient 大小 ${(statSync(out).size / 1024).toFixed(1)} KB(无需签名,可直接导入开源版)`)
|