zdashboard 2.3.0 → 2.4.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.
Files changed (33) hide show
  1. package/dist/cli.js +10 -7
  2. package/dist/cli.js.map +1 -1
  3. package/dist/web/assets/{CodeViewer-D8YqzmwB.js → FileIcon-CDN2wCuK.js} +48 -8
  4. package/dist/web/assets/{FilterPills-A_fz1nby.js → FilterPills-D_6kvZo5.js} +1 -1
  5. package/dist/web/assets/{MdViewer-P4wmRzy_.js → MdViewer-WZMpNmB2.js} +1 -1
  6. package/dist/web/assets/{ProgressBar-B4U41etC.js → ProgressBar-DPJd_uDt.js} +1 -1
  7. package/dist/web/assets/Workspace-MeZD-u22.js +16 -0
  8. package/dist/web/assets/badge-BbN-q0Cc.js +1 -0
  9. package/dist/web/assets/book-open-Dwx5kHtv.js +6 -0
  10. package/dist/web/assets/{file-text-BHzQwEJK.js → file-text-Co0hTLuo.js} +1 -1
  11. package/dist/web/assets/{index-C_wTjWH0.js → index-CHxXM6Fn.js} +1 -1
  12. package/dist/web/assets/index-Dkkxw5Oy.js +156 -0
  13. package/dist/web/assets/index-o5t5Kpfc.css +1 -0
  14. package/dist/web/assets/web-BYZeHggs.js +56 -0
  15. package/dist/web/assets/web-BoW0qNb8.js +25 -0
  16. package/dist/web/assets/web-CMZAKAOi.js +7 -0
  17. package/dist/web/assets/web-CkMm3ooW.js +36 -0
  18. package/dist/web/assets/web-Dpd8wclV.js +26 -0
  19. package/dist/web/assets/web-La5g0ovh.js +16 -0
  20. package/dist/web/assets/web-ZM6TYT88.js +2 -0
  21. package/dist/web/index.html +2 -2
  22. package/package.json +2 -1
  23. package/dist/web/assets/Workspace-nm0YyxF7.js +0 -1
  24. package/dist/web/assets/badge-C92Y2FRG.js +0 -1
  25. package/dist/web/assets/index-ByI0Pghw.css +0 -1
  26. package/dist/web/assets/index-CNPKNdvp.js +0 -111
  27. package/dist/web/assets/web-5tq6UJuk.js +0 -2
  28. package/dist/web/assets/web-DgYHvMu9.js +0 -16
  29. package/dist/web/assets/web-DhyfyLB-.js +0 -11
  30. package/dist/web/assets/web-JxMZZReP.js +0 -2
  31. package/dist/web/assets/web-ZQ0eDR1y.js +0 -31
  32. package/dist/web/assets/web-vTYFh6Bo.js +0 -25
  33. package/dist/web/assets/web-vbs6AnjC.js +0 -26
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Workspace-nm0YyxF7.js","assets/index-CNPKNdvp.js","assets/index-ByI0Pghw.css","assets/ProgressBar-B4U41etC.js"])))=>i.map(i=>d[i]);
2
- import{r as o,_ as t}from"./index-CNPKNdvp.js";const a={mode:"stats",label:"项目统计",icon:"📊",description:"项目文件统计 · 扫描生成",Workspace:o.lazy(()=>t(()=>import("./Workspace-nm0YyxF7.js"),__vite__mapDeps([0,1,2,3])))};export{a as default};
@@ -1,16 +0,0 @@
1
- import{c as F,j as r,r as n,G as U,_ as z}from"./index-CNPKNdvp.js";import{M as J}from"./MdViewer-P4wmRzy_.js";import{C as q,I as K}from"./CodeViewer-D8YqzmwB.js";import{F as H}from"./file-text-BHzQwEJK.js";import"./index-C_wTjWH0.js";/**
2
- * @license lucide-react v0.460.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const Q=F("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/**
7
- * @license lucide-react v0.460.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const X=F("FileQuestion",[["path",{d:"M12 17h.01",key:"p32p05"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}],["path",{d:"M9.1 9a3 3 0 0 1 5.82 1c0 2-3 3-3 3",key:"mhlwft"}]]);/**
12
- * @license lucide-react v0.460.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const Y=F("Image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);function Z({path:e}){return r.jsx("div",{className:"grid place-items-center h-full text-center text-muted-foreground",children:r.jsxs("div",{children:[r.jsx(X,{className:"h-10 w-10 mx-auto mb-3 opacity-50"}),r.jsx("p",{children:"该格式无法预览"}),r.jsx("p",{className:"mt-1 font-mono text-xs break-all",children:e})]})})}let G=null;const D=new Set,y={get:()=>G,set:e=>{G=e,D.forEach(t=>t(e))},subscribe:e=>(D.add(e),()=>{D.delete(e)})};function ee({containerRef:e}){const[t,o]=n.useState([]),[m,l]=n.useState(null);n.useEffect(()=>{const s=e.current;if(!s)return;let a=!1;const u=()=>{if(a)return;const x=s.querySelectorAll("h1[id], h2[id], h3[id]"),i=[];x.forEach(p=>{var b;i.push({id:p.id,text:((b=p.textContent)==null?void 0:b.trim())??"",level:parseInt(p.tagName[1],10)})}),o(i)};u();const c=new MutationObserver(u);return c.observe(s,{childList:!0,subtree:!0,characterData:!0}),()=>{a=!0,c.disconnect()}},[e]),n.useEffect(()=>{const s=e.current;if(!s||!t.length)return;const a=new IntersectionObserver(u=>{const c=u.filter(x=>x.isIntersecting);if(c.length){const x=c.reduce((i,p)=>i.boundingClientRect.top<p.boundingClientRect.top?i:p);l(x.target.id)}},{root:s,rootMargin:"-60px 0px -70% 0px",threshold:0});return t.forEach(({id:u})=>{const c=s.querySelector(`#${CSS.escape(u)}`);c&&a.observe(c)}),()=>a.disconnect()},[t,e]);const d=s=>{var u;const a=(u=e.current)==null?void 0:u.querySelector(`#${CSS.escape(s)}`);a==null||a.scrollIntoView({behavior:"smooth",block:"start"})};return t.length?r.jsxs("nav",{className:"hidden md:flex w-44 shrink-0 flex-col border-l pl-3 py-2 overflow-y-auto","aria-label":"文档大纲",children:[r.jsxs("div",{className:"flex items-center gap-1 mb-2 text-[11px] font-medium text-muted-foreground uppercase tracking-wider",children:[r.jsx(H,{className:"h-3 w-3"}),r.jsx("span",{children:"大纲"})]}),r.jsx("ul",{className:"space-y-0.5",children:t.map(s=>r.jsx("li",{children:r.jsx("button",{type:"button",onClick:()=>d(s.id),className:`w-full text-left text-[11px] leading-snug py-0.5 px-1.5 rounded truncate transition-colors ${m===s.id?"bg-primary/10 text-foreground font-medium":"text-muted-foreground hover:bg-muted/70"}`,style:{paddingLeft:6+(s.level-1)*10},children:s.text||s.id})},s.id))})]}):null}const te=2500;function re(e){const t=e.slice(e.lastIndexOf("/")+1).toLowerCase();if(t==="justfile"||t==="makefile")return q;const o=e.slice(e.lastIndexOf(".")).toLowerCase();return o===".md"||o===".markdown"?J:[".svg",".png",".jpg",".jpeg",".gif",".webp",".ico"].includes(o)?K:[".sql",".txt",".csv",".tsv",".json",".yaml",".yml",".xml",".py",".js",".ts",".java",".go",".rs",".rb",".php",".c",".cpp",".h",".cs",".swift",".kt",".scala",".sh",".bash",".zsh",".fish",".env",".gitignore",".dockerfile"].includes(o)?q:Z}function ne(e){const[t,o]=n.useState(()=>y.get()),[m,l]=n.useState(!1),d=n.useRef(null),s=t?re(t):null;return n.useEffect(()=>y.subscribe(o),[]),n.useEffect(()=>{const a=d.current;if(!a)return;const u=()=>{var i;const x=((i=a.textContent)==null?void 0:i.length)??0;l(x>te)};u();const c=new MutationObserver(u);return c.observe(a,{childList:!0,subtree:!0,characterData:!0}),()=>c.disconnect()},[t]),r.jsx("div",{className:"mx-auto h-full max-w-5xl bg-background border rounded-lg shadow-sm overflow-hidden flex flex-col",children:t&&s?r.jsxs("div",{className:"flex-1 min-h-0 flex overflow-hidden",children:[r.jsx("div",{ref:d,className:"flex-1 min-h-0 overflow-auto",children:r.jsx(s,{path:t})}),m&&r.jsx(ee,{containerRef:d})]}):r.jsx("div",{className:"flex-1 grid place-items-center text-muted-foreground",children:r.jsxs("div",{className:"text-center",children:[r.jsx("div",{className:"mx-auto mb-3.5 grid h-14 w-14 place-items-center rounded-[14px] bg-primary text-primary-foreground text-2xl font-bold",children:"👁️"}),r.jsx("p",{children:"从左侧选择文件预览"}),r.jsx("p",{className:"mt-1 text-xs",children:"支持 Markdown、图片、代码等格式"})]})})})}const se=Object.freeze(Object.defineProperty({__proto__:null,default:ne},Symbol.toStringTag,{value:"Module"}));function ce(e,t,o,m){var l=this,d=n.useRef(null),s=n.useRef(0),a=n.useRef(0),u=n.useRef(null),c=n.useRef([]),x=n.useRef(),i=n.useRef(),p=n.useRef(e),b=n.useRef(!0),v=n.useRef(),C=n.useRef();p.current=e;var L=typeof window<"u",k=!t&&t!==0&&L;if(typeof e!="function")throw new TypeError("Expected a function");t=+t||0;var O=!!(o=o||{}).leading,R=!("trailing"in o)||!!o.trailing,N=!!o.flushOnExit&&R,w="maxWait"in o,W="debounceOnServer"in o&&!!o.debounceOnServer,I=w?Math.max(+o.maxWait||0,t):null,$=n.useMemo(function(){var g=function(f){var h=c.current,j=x.current;return c.current=x.current=null,s.current=f,a.current=a.current||f,i.current=p.current.apply(j,h)},S=function(f,h){k&&cancelAnimationFrame(u.current),u.current=k?requestAnimationFrame(f):setTimeout(f,h)},A=function(f){if(!b.current)return!1;var h=f-d.current;return!d.current||h>=t||h<0||w&&f-s.current>=I},P=function(f){return u.current=null,R&&c.current?g(f):(c.current=x.current=null,i.current)},M=function f(){var h=Date.now();if(O&&a.current===s.current&&T(),A(h))return P(h);if(b.current){var j=t-(h-d.current),_=w?Math.min(j,I-(h-s.current)):j;S(f,_)}},T=function(){m&&m({})},E=function(){if(L||W){var f,h=Date.now(),j=A(h);if(c.current=[].slice.call(arguments),x.current=l,d.current=h,N&&!v.current&&(v.current=function(){var _;((_=globalThis.document)==null?void 0:_.visibilityState)==="hidden"&&C.current.flush()},(f=globalThis.document)==null||f.addEventListener==null||f.addEventListener("visibilitychange",v.current)),j){if(!u.current&&b.current)return s.current=d.current,S(M,t),O?g(d.current):i.current;if(w)return S(M,t),g(d.current)}return u.current||S(M,t),i.current}};return E.cancel=function(){var f=u.current;f&&(k?cancelAnimationFrame(u.current):clearTimeout(u.current)),s.current=0,c.current=d.current=x.current=u.current=null,f&&m&&m({})},E.isPending=function(){return!!u.current},E.flush=function(){return u.current?P(Date.now()):i.current},E},[O,w,t,I,R,N,k,L,W,m]);return C.current=$,n.useEffect(function(){return b.current=!0,function(){var g;N&&C.current.flush(),v.current&&((g=globalThis.document)==null||g.removeEventListener==null||g.removeEventListener("visibilitychange",v.current),v.current=null),b.current=!1}},[N]),$}function oe(e,t){return e===t}function ue(e,t,o){var m=oe,l=n.useRef(e),d=n.useState({})[1],s=ce(n.useCallback(function(u){l.current=u,d({})},[d]),t,o,d),a=n.useRef(e);return m(a.current,e)||(s(e),a.current=e),[l.current,s]}function V(e,t){return!t||e.name.toLowerCase().includes(t)?!0:(e.children??[]).some(o=>V(o,t))}function ie({name:e}){const t=e.slice(e.lastIndexOf(".")).toLowerCase();return[".svg",".png",".jpg",".jpeg",".gif",".webp",".ico"].includes(t)?r.jsx(Y,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"}):r.jsx(H,{className:"h-3.5 w-3.5 shrink-0 text-muted-foreground"})}function B({node:e,depth:t,filter:o,current:m,onSelectFile:l}){const d=(e.children??[]).filter(c=>V(c,o)),[s,a]=n.useState(!e.defaultCollapsed),u=o?!0:s;return!d.length&&o?null:r.jsxs("div",{children:[r.jsxs("button",{onClick:()=>a(c=>!c),className:"w-full flex items-center gap-1 px-2 py-1 text-xs text-foreground hover:bg-muted",style:{paddingLeft:8+t*14},children:[r.jsx(Q,{className:`h-3 w-3 shrink-0 text-muted-foreground transition-transform ${u?"rotate-90":""}`}),r.jsx("span",{className:"font-medium truncate",children:e.name})]}),u&&d.map(c=>c.kind==="dir"?r.jsx(B,{node:c,depth:t+1,filter:o,current:m,onSelectFile:l},c.name+t):r.jsxs("button",{onClick:()=>c.path&&l(c.path),className:`w-full flex items-center gap-1.5 pr-2 py-1 text-xs border-l-2 border-transparent hover:bg-muted ${m===c.path?"bg-muted font-medium border-primary":"text-muted-foreground"}`,style:{paddingLeft:20+t*14},children:[r.jsx(ie,{name:c.name}),r.jsx("span",{className:"truncate",children:c.name})]},c.path))]})}function le({worktrees:e}){const[t,o]=n.useState(!0),m=l=>{window.dispatchEvent(new CustomEvent("zd-dashboard-nav",{detail:{mode:"apply",wt:l.name}}))};return r.jsxs("div",{className:"mb-1",children:[r.jsxs("button",{onClick:()=>o(l=>!l),className:"w-full flex items-center gap-1 px-2 py-1.5 text-[11px] font-medium text-muted-foreground tracking-wide hover:text-foreground",children:[r.jsx(Q,{className:`h-3 w-3 transition-transform ${t?"rotate-90":""}`}),r.jsx(U,{className:"h-3 w-3"}),r.jsxs("span",{children:["Worktrees (",e.length,")"]})]}),t&&e.map(l=>r.jsxs("button",{onClick:()=>m(l),title:`${l.branch}${l.dirty?" · 有未提交变更":""}`,className:"w-full flex items-center gap-1.5 px-2 py-1 text-xs text-foreground hover:bg-muted border-l-2 border-transparent",style:{paddingLeft:14},children:[r.jsx("span",{className:"truncate font-mono text-[11px]",children:l.branch}),r.jsxs("span",{className:"text-muted-foreground truncate",children:["/",l.name]}),l.dirty&&r.jsx("span",{className:"ml-auto flex-none h-2 w-2 rounded-full bg-destructive shrink-0",title:"有未提交变更"})]},l.name))]})}function ae({navTarget:e}){const t=n.useSyncExternalStore(y.subscribe,y.get),[o,m]=n.useState(null),[l,d]=n.useState(""),[s]=ue(l,150),[a,u]=n.useState([]);n.useEffect(()=>{e!=null&&e.filter&&d(e.filter)},[e==null?void 0:e.filter,e==null?void 0:e.navToken]),n.useEffect(()=>{fetch("/__files",{cache:"no-store"}).then(i=>i.json()).then(i=>m(i.tree??[]))},[]),n.useEffect(()=>{fetch("/__worktrees",{cache:"no-store"}).then(i=>i.json()).then(u).catch(()=>u([]))},[]);const c=n.useMemo(()=>o?o.filter(i=>V(i,s)):[],[o,s]),x=a.length>0;return r.jsxs("div",{className:"p-2",children:[r.jsx("input",{value:l,onChange:i=>d(i.target.value.toLowerCase()),placeholder:"过滤…",className:"w-full h-7 px-2 text-xs rounded border border-border bg-background focus:outline-none focus:border-primary"}),o?!c.length&&!x?r.jsx("p",{className:"p-3 text-xs text-muted-foreground",children:"无匹配"}):r.jsxs("div",{className:"py-1",children:[x&&r.jsx(le,{worktrees:a}),c.map(i=>r.jsx(B,{node:i,depth:0,filter:s,current:t,onSelectFile:p=>y.set(p)},i.name))]}):r.jsx("p",{className:"p-3 text-xs text-muted-foreground",children:"加载中…"})]})}const de=Object.freeze(Object.defineProperty({__proto__:null,default:ae},Symbol.toStringTag,{value:"Module"})),be={mode:"view",label:"项目浏览",icon:"👁️",description:"openspec / docs / 文档预览",Sidebar:n.lazy(()=>z(()=>Promise.resolve().then(()=>de),void 0)),Workspace:n.lazy(()=>z(()=>Promise.resolve().then(()=>se),void 0))};export{ae as ViewSidebar,ne as ViewWorkspace,be as default};
@@ -1,11 +0,0 @@
1
- import{c as u,r as l,j as e,B as p,_ as g}from"./index-CNPKNdvp.js";import{B as x}from"./badge-C92Y2FRG.js";import{F as f}from"./FilterPills-A_fz1nby.js";/**
2
- * @license lucide-react v0.460.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const v=u("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/**
7
- * @license lucide-react v0.460.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const b=u("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]),j=[{key:"mine",label:"我的"},{key:"all",label:"全部"},{key:"active",label:"active"},{key:"resolved",label:"resolved"},{key:"closed",label:"closed"}];function y({status:s}){const a=s==="active"?"destructive":s==="resolved"?"success":"neutral";return e.jsx(x,{variant:a,children:s})}function k({severity:s}){const a=Number(s),n=a<=1?"destructive":a===2||a===3?"warning":"neutral";return e.jsxs(x,{variant:n,children:["S",a]})}function N(){const[s,a]=l.useState(null),[n,c]=l.useState(!1),[r,m]=l.useState("mine"),o=l.useCallback(()=>{c(!0),fetch("/__bugs",{cache:"no-store"}).then(t=>t.json()).then(a).finally(()=>c(!1))},[]);l.useEffect(o,[o]);const h=t=>r==="all"?!0:r==="mine"?t.mine:t.status===r,i=s!=null&&s.ok?s.bugs.filter(h):[],d=s!=null&&s.ok?{mine:s.bugs.filter(t=>t.mine).length,all:s.bugs.length,active:s.bugs.filter(t=>t.status==="active").length,resolved:s.bugs.filter(t=>t.status==="resolved").length,closed:s.bugs.filter(t=>t.status==="closed").length}:null;return e.jsxs("div",{className:"mx-auto h-full max-w-6xl flex flex-col bg-background border rounded-lg shadow-sm overflow-hidden",children:[e.jsxs("div",{className:"flex-none flex items-center gap-2 px-3 py-2 border-b",children:[e.jsx(f,{items:j.map(t=>({key:t.key,label:t.label,badge:d?String(d[t.key]):void 0})),value:r,onChange:m,ariaLabel:"状态筛选"}),e.jsx("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"禅道 · 只读"}),e.jsx(p,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:o,title:"刷新",children:e.jsx(b,{className:`h-3.5 w-3.5 ${n?"animate-spin":""}`})})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto",children:s?s.ok?i.length?e.jsxs("table",{className:"w-full text-xs",children:[e.jsx("thead",{className:"sticky top-0 bg-background border-b",children:e.jsxs("tr",{className:"text-left text-muted-foreground",children:[e.jsx("th",{className:"px-3 py-2 font-medium w-16",children:"#"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"标题"}),e.jsx("th",{className:"px-3 py-2 font-medium w-14",children:"严重度"}),e.jsx("th",{className:"px-3 py-2 font-medium w-20",children:"状态"}),e.jsx("th",{className:"px-3 py-2 font-medium w-20",children:"指派"})]})}),e.jsx("tbody",{children:i.map(t=>e.jsxs("tr",{className:"border-b last:border-0 hover:bg-muted/50",children:[e.jsx("td",{className:"px-3 py-2 font-mono text-muted-foreground",children:t.id}),e.jsx("td",{className:"px-3 py-2",children:e.jsxs("button",{className:"text-left hover:text-primary hover:underline flex items-center gap-1",onClick:()=>window.open(`${s.url}/bug-view-${t.id}.html`,"_blank","noopener"),title:"在禅道打开",children:[e.jsx("span",{className:"truncate max-w-[420px]",children:t.title}),e.jsx(v,{className:"h-3 w-3 shrink-0 text-muted-foreground"})]})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(k,{severity:t.severity})}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(y,{status:t.status})}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground",children:t.assignedTo||"—"})]},t.id))})]}):e.jsx("p",{className:"p-4 text-xs text-muted-foreground",children:r==="mine"?"没有指派给你的 bug 🎉":"无 bug 🎉(该状态下)"}):e.jsx("p",{className:"p-4 text-xs text-destructive",children:s.error}):e.jsx("p",{className:"p-4 text-xs text-muted-foreground",children:"加载中…"})})]})}function w(){return e.jsx(N,{})}const _=Object.freeze(Object.defineProperty({__proto__:null,default:w},Symbol.toStringTag,{value:"Module"})),E={mode:"bugs",label:"禅道 Bugs",icon:"🎯",description:"只读 bug 列表 · zgoal",Workspace:l.lazy(()=>g(()=>Promise.resolve().then(()=>_),void 0))};export{w as BugWorkspace,E as default};
@@ -1,2 +0,0 @@
1
- import{r as c,u as P,j as e,G as W,F as O,_ as C}from"./index-CNPKNdvp.js";import{B as m}from"./badge-C92Y2FRG.js";import{P as $}from"./ProgressBar-B4U41etC.js";import{F as p}from"./file-text-BHzQwEJK.js";import{M as N,r as b}from"./index-C_wTjWH0.js";const k=/^\s*-\s*\[([ xX])\]\s*(.*)$/;function B(s){return s.split(`
2
- `).filter(t=>k.test(t)).map(t=>{const r=t.match(k);return{text:((r==null?void 0:r[2])??t).trim(),checked:(r==null?void 0:r[1])!==" "}})}function y(s,t){return t===0?0:Math.round(s/t*100)}function w({done:s,total:t}){const r=y(s,t),a=r===100?"success":r>0?"warning":"neutral";return e.jsxs(m,{variant:a,children:[s,"/",t," · ",r,"%"]})}function v(){return e.jsx(m,{variant:"info",children:"worktree 执行中"})}function R(){return e.jsx(m,{variant:"info",children:"含测试策略"})}function A({name:s,pending:t}){const r=t?"neutral":"success";return e.jsx(m,{variant:r,children:t?`${s} · 等待前置`:s})}function F({tasks:s}){const t=B(s);if(!t.length)return e.jsx("p",{className:"text-xs text-muted-foreground",children:"无 tasks.md"});const r=t.findIndex(a=>!a.checked);return e.jsx("ul",{className:"space-y-1 text-xs",children:t.map((a,i)=>{const d=i===r;return e.jsxs("li",{className:`flex items-start gap-2 rounded px-1.5 -mx-1.5 py-0.5 ${d?"bg-amber-500/10 border-l-2 border-amber-500":""} ${a.checked?"text-foreground":"text-muted-foreground"}`,children:[a.checked?e.jsx("span",{className:"mt-0.5 h-3.5 w-3.5 shrink-0 rounded-full bg-emerald-500 text-white flex items-center justify-center text-[8px]",children:"✓"}):e.jsx("span",{className:`mt-0.5 h-3.5 w-3.5 shrink-0 rounded-full border ${d?"border-amber-500":"border-muted-foreground/50"}`}),e.jsx("span",{children:a.text}),d&&e.jsx("span",{className:"ml-auto flex-none text-[10px] font-medium text-amber-600 dark:text-amber-400",children:"← 下一步"})]},i)})})}function I({item:s,onSelect:t}){return e.jsxs("button",{type:"button",onClick:t,className:"w-full text-left rounded-lg border bg-card p-4 hover:bg-muted/50 transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5 flex-wrap",children:[e.jsx(O,{className:"h-4 w-4 text-muted-foreground"}),e.jsx("span",{className:"text-sm font-medium font-mono truncate",children:s.name}),e.jsx(w,{done:s.done,total:s.total}),s.inWorktree&&e.jsx(v,{})]}),e.jsx($,{value:y(s.done,s.total),className:"h-1 mb-2"}),e.jsxs("div",{className:"flex items-center gap-3 text-[11px] text-muted-foreground",children:[e.jsx("span",{className:s.hasProposal?"text-foreground":"",children:"proposal"}),e.jsx("span",{className:s.hasDesign?"text-foreground":"",children:"design"})]})]})}function L({refreshKey:s}){const[t,r]=c.useState([]);return c.useEffect(()=>{fetch("/__worktrees",{cache:"no-store"}).then(a=>a.json()).then(r).catch(()=>r([]))},[s]),t.length?e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx(W,{className:"h-3.5 w-3.5 text-muted-foreground"}),e.jsx("span",{className:"text-[11px] text-muted-foreground mr-1",children:"Worktree:"}),t.map(a=>e.jsxs("span",{className:"inline-flex items-center px-1.5 py-0.5 rounded border text-[10px] font-mono bg-sky-500/10 text-sky-600 border-sky-500/30",title:a.head,children:[a.name,"@",a.branch||"detached"]},a.name))]}):null}function M({navTarget:s}){const[t,r]=c.useState([]),[a,i]=c.useState(0);c.useRef(!1),P(()=>{},()=>i(n=>n+1));const[d,S]=c.useState(null),[l,_]=c.useState(null),[h,x]=c.useState(!0),[f,j]=c.useState(null),[G,E]=c.useState(!1),g=c.useCallback(()=>{x(!0),fetch("/__apply",{cache:"no-store"}).then(n=>n.json()).then(r).catch(n=>j(n.message)).finally(()=>x(!1))},[]);c.useEffect(()=>{g()},[g,a]);const u=c.useCallback(n=>{x(!0),S(n),E(!0),fetch(`/__apply/change?name=${encodeURIComponent(n)}`,{cache:"no-store"}).then(o=>o.json()).then(_).catch(o=>j(o.message)).finally(()=>x(!1))},[]);return c.useEffect(()=>{if(!(s!=null&&s.wt)||!t.length)return;const n=t.find(o=>o.name===s.wt);n&&u(n.name)},[s==null?void 0:s.wt,s==null?void 0:s.navToken,t,u]),h&&!t.length?e.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-3.5 grid h-14 w-14 place-items-center rounded-[14px] bg-primary text-primary-foreground text-2xl font-bold animate-pulse",children:"⚙️"}),e.jsx("p",{children:"加载执行进度…"})]})}):f?e.jsx("div",{className:"flex h-full items-center justify-center text-destructive",children:e.jsx("p",{children:f})}):e.jsxs("div",{className:"mx-auto h-full max-w-6xl flex flex-col bg-background border rounded-lg shadow-sm overflow-hidden",children:[e.jsxs("div",{className:"flex-none px-4 py-3 border-b flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"OpenSpec 执行进度"}),e.jsx("span",{className:"ml-auto text-[11px] text-muted-foreground",children:"openspec/changes/"})]}),e.jsxs("div",{className:"flex-1 min-h-0 overflow-auto p-4 space-y-4",children:[e.jsx(L,{refreshKey:a}),t.length?e.jsx("div",{className:"grid gap-3 sm:grid-cols-2",children:t.map(n=>e.jsx(I,{item:n,onSelect:()=>u(n.name)},n.name))}):e.jsxs("div",{className:"text-center text-muted-foreground py-8",children:[e.jsx("p",{className:"text-sm",children:"没有进行中的 change"}),e.jsx("p",{className:"text-xs mt-1",children:"在 openspec/changes/ 下创建 change 后会显示在这里"})]}),d&&l&&!h&&e.jsxs("section",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("h3",{className:"text-sm font-medium",children:l.name}),e.jsx(w,{done:l.done,total:l.total}),l.inWorktree&&e.jsx(v,{}),l.hasTestStrategy&&e.jsx(R,{})]}),l.dependsOn.length>0&&e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:"依赖:"}),l.dependsOn.map(n=>e.jsx(A,{name:n,pending:t.some(o=>o.name===n)},n))]}),l.proposal&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1",children:[e.jsx(p,{className:"h-3 w-3"})," proposal.md"]}),e.jsx("div",{className:"prose dark:prose-invert max-w-none text-xs border rounded-lg p-3 bg-card",children:e.jsx(N,{remarkPlugins:[b],children:l.proposal})})]}),l.design&&e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1",children:[e.jsx(p,{className:"h-3 w-3"})," design.md"]}),e.jsx("div",{className:"prose dark:prose-invert max-w-none text-xs border rounded-lg p-3 bg-card",children:e.jsx(N,{remarkPlugins:[b],children:l.design})})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"text-xs font-medium text-muted-foreground mb-2 flex items-center gap-1",children:[e.jsx(p,{className:"h-3 w-3"})," tasks.md"]}),e.jsx("div",{className:"border rounded-lg p-3 bg-card",children:e.jsx(F,{tasks:l.tasks})})]})]})]})]})}function z({navTarget:s}){return e.jsx(M,{navTarget:s})}const D=Object.freeze(Object.defineProperty({__proto__:null,default:z},Symbol.toStringTag,{value:"Module"})),H={mode:"apply",label:"执行进度",icon:"⚙️",description:"OpenSpec change 执行进度 · zapply",Workspace:c.lazy(()=>C(()=>Promise.resolve().then(()=>D),void 0))};export{z as ApplyWorkspace,H as default};
@@ -1,31 +0,0 @@
1
- import{c as p,r as a,u as $,j as e,_ as A}from"./index-CNPKNdvp.js";import{M as I}from"./MdViewer-P4wmRzy_.js";import{P as F}from"./ProgressBar-B4U41etC.js";import{F as L}from"./FilterPills-A_fz1nby.js";import"./index-C_wTjWH0.js";/**
2
- * @license lucide-react v0.460.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const _=p("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
7
- * @license lucide-react v0.460.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const U=p("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
12
- * @license lucide-react v0.460.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const V=p("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
17
- * @license lucide-react v0.460.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const X=p("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);/**
22
- * @license lucide-react v0.460.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- */const q=p("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
27
- * @license lucide-react v0.460.0 - ISC
28
- *
29
- * This source code is licensed under the ISC license.
30
- * See the LICENSE file in the root directory of this source tree.
31
- */const C=p("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]),W={draft:"bg-zinc-500 text-white",reviewing:"bg-amber-500 text-white",passed:"bg-emerald-600 text-white",rejected:"bg-red-500 text-white"},B={draft:"草案",reviewing:"评审中",passed:"已通过",rejected:"未通过"},G=[{key:"all",label:"全部"},{key:"open",label:"待处理"},{key:"answered",label:"已答复"},{key:"accepted",label:"已采纳"},{key:"dismissed",label:"已驳回"}],T={high:"bg-red-500",medium:"bg-amber-500",low:"bg-sky-500"},J={high:"高",medium:"中",low:"低"},E={open:"bg-red-500/15 text-red-600 dark:text-red-400 border-red-500/30",answered:"bg-sky-500/15 text-sky-600 dark:text-sky-400 border-sky-500/30",accepted:"bg-emerald-500/15 text-emerald-600 dark:text-emerald-400 border-emerald-500/30",dismissed:"bg-muted text-muted-foreground border-border"},M={open:"待处理",answered:"已答复",accepted:"已采纳",dismissed:"已驳回"};function H({item:t,token:u,onUpdated:w}){const[m,h]=a.useState(t.answer??"");a.useEffect(()=>h(t.answer??""),[t.id,t.answer]);const l=async o=>{const i=await fetch("/__review/item",{method:"POST",headers:{"x-stop-token":u,"Content-Type":"application/json"},body:JSON.stringify({id:t.id,...o})});i.ok&&w(await i.json())},c=o=>o==="open"?{state:o,answer:m}:o==="answered"?{state:o,answer:m}:{state:o,answer:m||t.answer},b=t.state==="accepted"||t.state==="dismissed",f=b?t.state==="accepted"?"已采纳 — 可撤销后重新处理":"已驳回 — 可撤销后重新处理":t.state==="open"?"答复后可采纳或驳回,或直接采纳/驳回":"确认答复后采纳,或驳回 / 撤销";return e.jsxs("div",{className:"rounded-lg border bg-background shadow-sm overflow-hidden",children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 pt-2.5 text-[11px] text-muted-foreground",children:[t.severity&&e.jsx("span",{className:`h-2 w-2 rounded-full ${T[t.severity]??"bg-muted-foreground"}`}),e.jsx("span",{className:"font-medium",children:t.category??"通用"}),t.severity&&e.jsx("span",{children:J[t.severity]??t.severity}),e.jsx("span",{className:`ml-auto px-1.5 py-0.5 rounded border text-[10px] font-medium ${E[t.state]??""}`,children:M[t.state]})]}),e.jsx("p",{className:"px-3 py-2 text-sm leading-relaxed",children:t.question}),e.jsxs("div",{className:"px-3 pb-3 flex flex-col gap-2",children:[e.jsx("textarea",{value:m,onChange:o=>h(o.target.value),placeholder:"答复 / 补充说明…",rows:2,className:"w-full rounded border border-border bg-background px-2 py-1.5 text-xs focus:outline-none focus:border-primary resize-y"}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[t.state==="accepted"?e.jsxs("span",{className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-emerald-500/15 text-emerald-600 dark:text-emerald-400 text-xs font-medium",children:[e.jsx(_,{className:"h-3 w-3"}),"已采纳"]}):t.state==="dismissed"?e.jsxs("span",{className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-muted text-muted-foreground text-xs font-medium",children:[e.jsx(C,{className:"h-3 w-3"}),"已驳回"]}):e.jsxs(e.Fragment,{children:[e.jsxs("button",{onClick:()=>l(c("answered")),className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-sky-600 hover:bg-sky-500 text-white text-xs",children:[e.jsx(q,{className:"h-3 w-3"}),t.state==="answered"?"更新答复":"答复"]}),e.jsxs("button",{onClick:()=>l(c("accepted")),className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-emerald-600 hover:bg-emerald-500 text-white text-xs",children:[e.jsx(_,{className:"h-3 w-3"}),"采纳"]}),e.jsxs("button",{onClick:()=>l(c("dismissed")),className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-muted hover:bg-muted/70 text-xs",children:[e.jsx(C,{className:"h-3 w-3"}),"驳回"]})]}),b&&e.jsxs("button",{onClick:()=>l(c("open")),className:"inline-flex items-center gap-1 h-7 px-2.5 rounded bg-muted hover:bg-muted/70 text-xs",children:[e.jsx(X,{className:"h-3 w-3"}),"撤销"]}),e.jsx("span",{className:"ml-auto text-[10px] text-muted-foreground",children:f})]})]})]})}function K(){const[t,u]=a.useState(null),[w,m]=a.useState([]),[h,l]=a.useState(null),[c,b]=a.useState(null),[f,o]=a.useState(""),[i,O]=a.useState("all"),[g,k]=a.useState(!0),[v,y]=a.useState("");a.useRef(!1);const N=()=>{fetch("/__review",{cache:"no-store"}).then(s=>s.json()).then(u),fetch("/__docs",{cache:"no-store"}).then(s=>s.json()).then(s=>{m(s),l(r=>r&&s.includes(r)?r:s[0]??null)})};a.useEffect(()=>{N(),fetch("/__config").then(s=>s.json()).then(s=>o(s.stopToken??""))},[]),$(()=>{},N);const d={all:0,open:0,answered:0,accepted:0,dismissed:0};for(const s of(t==null?void 0:t.items)??[])d.all++,d[s.state]++;const S=a.useMemo(()=>{const s=new Map;for(const n of(t==null?void 0:t.items)??[]){if(i!=="all"&&n.state!==i)continue;const x=n.doc??null;s.has(x)||s.set(x,[]),s.get(x).push(n)}const r=n=>n??"(未关联文档)";return[...s.entries()].sort((n,x)=>r(n[0]).localeCompare(r(x[0]))).map(([n,x])=>({doc:n,label:r(n),items:x.sort((P,R)=>({high:0,medium:1,low:2})[P.severity??"medium"]-{high:0,medium:1,low:2}[R.severity??"medium"])}))},[t,i]),j=((t==null?void 0:t.items)??[]).find(s=>s.id===c)??null,z=s=>{b(s.id),l(s.doc??null)},D=async()=>{y("");const s=await fetch("/__review/status",{method:"POST",headers:{"x-stop-token":f,"Content-Type":"application/json"},body:'{"status":"passed"}'});s.ok?u(await s.json()):y((await s.json()).error??"failed")};return e.jsxs("div",{className:"mx-auto h-full max-w-6xl bg-background border rounded-lg shadow-sm overflow-hidden flex",children:[e.jsxs("aside",{className:"w-[240px] flex-none border-r bg-background overflow-auto",children:[e.jsx("div",{className:"px-3 pt-3 pb-2 border-b",children:(()=>{const s=d.all,r=s-d.open,n=s===0?0:Math.round(r/s*100);return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex items-center justify-between text-[11px] mb-1.5",children:[e.jsx("span",{className:"text-muted-foreground",children:"处理进度"}),e.jsxs("span",{className:"font-mono",children:[r,"/",s," · ",n,"%"]})]}),e.jsx(F,{value:n,className:"h-1.5"})]})})()}),e.jsx(L,{items:G.map(s=>({key:String(s.key),label:`${s.label} ${d[s.key]}`})),value:i,onChange:s=>O(s),ariaLabel:"评审项筛选"}),e.jsx("div",{className:"px-3 pb-1 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"文档 · 评审项"}),S.length===0&&e.jsx("p",{className:"px-3 py-2 text-xs text-muted-foreground",children:"无评审项"}),S.map(s=>e.jsxs("div",{children:[e.jsxs("div",{className:"px-3 py-1 text-[11px] font-medium text-muted-foreground flex items-center gap-1.5",children:[e.jsx("span",{className:"truncate",children:s.label}),e.jsx("span",{className:"ml-auto font-mono text-[10px]",children:s.items.length})]}),s.items.map(r=>e.jsxs("button",{onClick:()=>z(r),className:`w-full text-left px-3 py-1.5 text-xs border-l-2 flex items-center gap-1.5 hover:bg-muted ${c===r.id?"bg-muted font-medium border-primary":"border-transparent text-muted-foreground"}`,children:[r.severity&&e.jsx("span",{className:`h-1.5 w-1.5 rounded-full shrink-0 ${T[r.severity]??""}`}),e.jsx("span",{className:"truncate",children:r.question}),e.jsx("span",{className:`ml-auto shrink-0 text-[9px] px-1 rounded ${E[r.state]??""}`,children:M[r.state]})]},r.id))]},s.doc??"(none)"))]}),e.jsxs("div",{className:"flex-1 min-h-0 flex flex-col",children:[e.jsxs("div",{className:"flex-none flex items-center gap-2 px-3.5 border-b bg-background",children:[t&&e.jsx("span",{className:`px-2 py-0.5 rounded text-[11px] font-medium ${W[t.status]??""}`,children:B[t.status]??t.status}),d.open>0&&e.jsxs("span",{className:"text-[11px] text-muted-foreground",children:["还有 ",d.open," 项待处理"]}),e.jsx("button",{onClick:D,disabled:!t||t.status==="passed"||d.open>0,className:"ml-auto h-7 px-3 rounded bg-emerald-600 hover:bg-emerald-500 disabled:opacity-50 disabled:cursor-not-allowed text-white text-xs",children:"通过"})]}),v&&e.jsx("div",{className:"bg-red-500/10 text-red-600 dark:text-red-400 text-xs px-3.5 py-1.5 border-b border-red-500/20",children:v}),e.jsxs("div",{className:"flex-1 min-h-0 flex flex-col",children:[g&&e.jsxs("div",{className:"flex-1 min-h-0 overflow-auto border-b bg-background relative",children:[e.jsx("button",{onClick:()=>k(!1),title:"收起文档",className:"absolute right-2 top-2 z-10 h-6 px-2 rounded border border-border bg-background/80 text-xs hover:bg-muted",children:e.jsx(U,{className:"h-3.5 w-3.5"})}),h?e.jsx(I,{path:h}):e.jsx("p",{className:"p-6 text-sm text-muted-foreground",children:"在左侧选择评审项"})]}),e.jsxs("div",{className:g?"flex-none h-[42%] border-b overflow-auto p-3 flex flex-col gap-3":"flex-1 min-h-0 overflow-auto p-3 flex flex-col gap-3",style:g?void 0:{backgroundImage:"radial-gradient(circle at 1px 1px, hsl(var(--border)) 1px, transparent 0)",backgroundSize:"20px 20px"},children:[!g&&e.jsxs("button",{onClick:()=>k(!0),title:"展开文档",className:"self-start inline-flex items-center gap-1 h-6 px-2 rounded border border-border bg-background text-xs hover:bg-muted",children:[e.jsx(V,{className:"h-3.5 w-3.5"}),"展开文档"]}),j?e.jsx(H,{item:j,token:f,onUpdated:u},j.id):e.jsx("p",{className:"text-xs text-muted-foreground text-center pt-6",children:"在左侧选择一个评审项"})]})]})]})]})}function Q(){return e.jsx(K,{})}const Y=Object.freeze(Object.defineProperty({__proto__:null,default:Q},Symbol.toStringTag,{value:"Module"})),ae={mode:"review",label:"文档评审",icon:"✅",description:"评审项状态流转 · zreview",Workspace:a.lazy(()=>A(()=>Promise.resolve().then(()=>Y),void 0))};export{Q as ReviewWorkspace,ae as default};
@@ -1,25 +0,0 @@
1
- import{c as L,r as C,d as w,j as _,B as O,e as pe,_ as me}from"./index-CNPKNdvp.js";import{F as xe}from"./FilterPills-A_fz1nby.js";function g(t){const e=Object.prototype.toString.call(t);return t instanceof Date||typeof t=="object"&&e==="[object Date]"?new t.constructor(+t):typeof t=="number"||e==="[object Number]"||typeof t=="string"||e==="[object String]"?new Date(t):new Date(NaN)}function $(t,e){return t instanceof Date?new t.constructor(e):new Date(e)}function De(t,e){const r=g(t);return isNaN(e)?$(t,NaN):(e&&r.setDate(r.getDate()+e),r)}function Fe(t,e){const r=g(t);if(isNaN(e))return $(t,NaN);if(!e)return r;const n=r.getDate(),s=$(t,r.getTime());s.setMonth(r.getMonth()+e+1,0);const c=s.getDate();return n>=c?s:(r.setFullYear(s.getFullYear(),s.getMonth(),n),r)}function M(t,e){const{years:r=0,months:n=0,weeks:s=0,days:c=0,hours:i=0,minutes:u=0,seconds:l=0}=e,o=g(t),d=n||r?Fe(o,n+r*12):o,a=c||s?De(d,c+s*7):d,p=u+i*60,x=(l+p*60)*1e3;return $(t,a.getTime()+x)}const ye=864e5,be=6e4,ve=36e5;function V(t){const e=g(t);return e.setHours(0,0,0,0),e}function K(t){const e=g(t),r=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return r.setUTCFullYear(e.getFullYear()),+t-+r}function Ee(t,e){const r=V(t),n=V(e),s=+r-K(r),c=+n-K(n);return Math.round((s-c)/ye)}function S(t,e){const r=g(t),n=g(e),s=r.getTime()-n.getTime();return s<0?-1:s>0?1:s}function Ce(t,e){const r=g(t),n=g(e),s=r.getFullYear()-n.getFullYear(),c=r.getMonth()-n.getMonth();return s*12+c}function Ae(t,e){const r=g(t),n=g(e);return r.getFullYear()-n.getFullYear()}function ze(t,e){const r=g(t),n=g(e),s=Q(r,n),c=Math.abs(Ee(r,n));r.setDate(r.getDate()-s*c);const i=+(Q(r,n)===-s),u=s*(c-i);return u===0?0:u}function Q(t,e){const r=t.getFullYear()-e.getFullYear()||t.getMonth()-e.getMonth()||t.getDate()-e.getDate()||t.getHours()-e.getHours()||t.getMinutes()-e.getMinutes()||t.getSeconds()-e.getSeconds()||t.getMilliseconds()-e.getMilliseconds();return r<0?-1:r>0?1:r}function J(t){return e=>{const n=(t?Math[t]:Math.trunc)(e);return n===0?0:n}}function G(t,e){return+g(t)-+g(e)}function je(t,e,r){const n=G(t,e)/ve;return J(r==null?void 0:r.roundingMethod)(n)}function we(t,e,r){const n=G(t,e)/be;return J(r==null?void 0:r.roundingMethod)(n)}function ke(t){const e=g(t);return e.setHours(23,59,59,999),e}function Ne(t){const e=g(t),r=e.getMonth();return e.setFullYear(e.getFullYear(),r+1,0),e.setHours(23,59,59,999),e}function Re(t){const e=g(t);return+ke(e)==+Ne(e)}function Oe(t,e){const r=g(t),n=g(e),s=S(r,n),c=Math.abs(Ce(r,n));let i;if(c<1)i=0;else{r.getMonth()===1&&r.getDate()>27&&r.setDate(30),r.setMonth(r.getMonth()-s*c);let u=S(r,n)===-s;Re(g(t))&&c===1&&S(t,n)===1&&(u=!1),i=s*(c-Number(u))}return i===0?0:i}function Me(t,e,r){const n=G(t,e)/1e3;return J(r==null?void 0:r.roundingMethod)(n)}function Se(t,e){const r=g(t),n=g(e),s=S(r,n),c=Math.abs(Ae(r,n));r.setFullYear(1584),n.setFullYear(1584);const i=S(r,n)===-s,u=s*(c-+i);return u===0?0:u}function $e(t){const e=g(t.start),r=g(t.end),n={},s=Se(r,e);s&&(n.years=s);const c=M(e,{years:n.years}),i=Oe(r,c);i&&(n.months=i);const u=M(c,{months:n.months}),l=ze(r,u);l&&(n.days=l);const o=M(u,{days:n.days}),d=je(r,o);d&&(n.hours=d);const a=M(o,{hours:n.hours}),p=we(r,a);p&&(n.minutes=p);const b=M(a,{minutes:n.minutes}),x=Me(r,b);return x&&(n.seconds=x),n}/**
2
- * @license lucide-react v0.460.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const Ie=L("Eraser",[["path",{d:"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21",key:"182aya"}],["path",{d:"M22 21H7",key:"t4ddhn"}],["path",{d:"m5 11 9 9",key:"1mo9qw"}]]);/**
7
- * @license lucide-react v0.460.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const Le=L("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);/**
12
- * @license lucide-react v0.460.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const X=L("RotateCw",[["path",{d:"M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8",key:"1p45f6"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}]]);/**
17
- * @license lucide-react v0.460.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const ee=L("Square",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);var _e={};const z=[[{color:"0, 0, 0",class:"ansi-black"},{color:"187, 0, 0",class:"ansi-red"},{color:"0, 187, 0",class:"ansi-green"},{color:"187, 187, 0",class:"ansi-yellow"},{color:"0, 0, 187",class:"ansi-blue"},{color:"187, 0, 187",class:"ansi-magenta"},{color:"0, 187, 187",class:"ansi-cyan"},{color:"255,255,255",class:"ansi-white"}],[{color:"85, 85, 85",class:"ansi-bright-black"},{color:"255, 85, 85",class:"ansi-bright-red"},{color:"0, 255, 0",class:"ansi-bright-green"},{color:"255, 255, 85",class:"ansi-bright-yellow"},{color:"85, 85, 255",class:"ansi-bright-blue"},{color:"255, 85, 255",class:"ansi-bright-magenta"},{color:"85, 255, 255",class:"ansi-bright-cyan"},{color:"255, 255, 255",class:"ansi-bright-white"}]],Te=/(https?:\/\/(?:[A-Za-z0-9#;/?:@=+$',_.!~*()[\]-]|&amp;|%[A-Fa-f0-9]{2})+)/gm;class R{static escapeForHtml(e){return new R().escapeForHtml(e)}static linkify(e){return new R().linkify(e)}static ansiToHtml(e,r){return new R().ansiToHtml(e,r)}static ansiToJson(e,r){return new R().ansiToJson(e,r)}static ansiToText(e){return new R().ansiToText(e)}constructor(){this.fg=this.bg=this.fg_truecolor=this.bg_truecolor=null,this.bright=0,this.decorations=[]}setupPalette(){this.PALETTE_COLORS=[];for(let s=0;s<2;++s)for(let c=0;c<8;++c)this.PALETTE_COLORS.push(z[s][c].color);let e=[0,95,135,175,215,255],r=(s,c,i)=>e[s]+", "+e[c]+", "+e[i];for(let s=0;s<6;++s)for(let c=0;c<6;++c)for(let i=0;i<6;++i)this.PALETTE_COLORS.push(r(s,c,i));let n=8;for(let s=0;s<24;++s,n+=10)this.PALETTE_COLORS.push(n+", "+n+", "+n)}escapeForHtml(e){return e.replace(/[&<>\"]/gm,r=>r=="&"?"&amp;":r=='"'?"&quot;":r=="<"?"&lt;":r==">"?"&gt;":"")}linkify(e){return e.replace(Te,r=>`<a href="${r}">${r}</a>`)}ansiToHtml(e,r){return this.process(e,r,!0)}ansiToJson(e,r){return r=r||{},r.json=!0,r.clearLine=!1,this.process(e,r,!0)}ansiToText(e){return this.process(e,{},!1)}process(e,r,n){let s=this,c=e.split(/\033\[/),i=c.shift();r==null&&(r={}),r.clearLine=/\r/.test(e);let u=c.map(l=>this.processChunk(l,r,n));if(r&&r.json){let l=s.processChunkJson("");return l.content=i,l.clearLine=r.clearLine,u.unshift(l),r.remove_empty&&(u=u.filter(o=>!o.isEmpty())),u}else u.unshift(i);return u.join("")}processChunkJson(e,r,n){r=typeof r>"u"?{}:r;let s=r.use_classes=typeof r.use_classes<"u"&&r.use_classes,c=r.key=s?"class":"color",i={content:e,fg:null,bg:null,fg_truecolor:null,bg_truecolor:null,isInverted:!1,clearLine:r.clearLine,decoration:null,decorations:[],was_processed:!1,isEmpty:()=>!i.content},u=e.match(/^([!\x3c-\x3f]*)([\d;]*)([\x20-\x2c]*[\x40-\x7e])([\s\S]*)/m);if(!u)return i;i.content=u[4];let l=u[2].split(";");if(u[1]!==""||u[3]!=="m"||!n)return i;let o=this;for(;l.length>0;){let d=l.shift(),a=parseInt(d);if(isNaN(a)||a===0)o.fg=o.bg=null,o.decorations=[];else if(a===1)o.decorations.push("bold");else if(a===2)o.decorations.push("dim");else if(a===3)o.decorations.push("italic");else if(a===4)o.decorations.push("underline");else if(a===5)o.decorations.push("blink");else if(a===7)o.decorations.push("reverse");else if(a===8)o.decorations.push("hidden");else if(a===9)o.decorations.push("strikethrough");else if(a===21)o.removeDecoration("bold");else if(a===22)o.removeDecoration("bold"),o.removeDecoration("dim");else if(a===23)o.removeDecoration("italic");else if(a===24)o.removeDecoration("underline");else if(a===25)o.removeDecoration("blink");else if(a===27)o.removeDecoration("reverse");else if(a===28)o.removeDecoration("hidden");else if(a===29)o.removeDecoration("strikethrough");else if(a===39)o.fg=null;else if(a===49)o.bg=null;else if(a>=30&&a<38)o.fg=z[0][a%10][c];else if(a>=90&&a<98)o.fg=z[1][a%10][c];else if(a>=40&&a<48)o.bg=z[0][a%10][c];else if(a>=100&&a<108)o.bg=z[1][a%10][c];else if(a===38||a===48){let p=a===38;if(l.length>=1){let b=l.shift();if(b==="5"&&l.length>=1){let x=parseInt(l.shift());if(x>=0&&x<=255)if(!s)this.PALETTE_COLORS||o.setupPalette(),p?o.fg=this.PALETTE_COLORS[x]:o.bg=this.PALETTE_COLORS[x];else{let F=x>=16?"ansi-palette-"+x:z[x>7?1:0][x%8].class;p?o.fg=F:o.bg=F}}else if(b==="2"&&l.length>=3){let x=parseInt(l.shift()),F=parseInt(l.shift()),k=parseInt(l.shift());if(x>=0&&x<=255&&F>=0&&F<=255&&k>=0&&k<=255){let N=x+", "+F+", "+k;s?p?(o.fg="ansi-truecolor",o.fg_truecolor=N):(o.bg="ansi-truecolor",o.bg_truecolor=N):p?o.fg=N:o.bg=N}}}}}return o.fg===null&&o.bg===null&&o.decorations.length===0||(i.fg=o.fg,i.bg=o.bg,i.fg_truecolor=o.fg_truecolor,i.bg_truecolor=o.bg_truecolor,i.decorations=o.decorations,i.decoration=o.decorations.slice(-1).pop()||null,i.was_processed=!0),i}processChunk(e,r,n){r=r||{};let s=this.processChunkJson(e,r,n),c=r.use_classes;if(s.decorations=s.decorations.filter(a=>{if(a==="reverse"){s.fg||(s.fg=z[0][7][c?"class":"color"]),s.bg||(s.bg=z[0][0][c?"class":"color"]);let p=s.fg;s.fg=s.bg,s.bg=p;let b=s.fg_truecolor;return s.fg_truecolor=s.bg_truecolor,s.bg_truecolor=b,s.isInverted=!0,!1}return!0}),r.json)return s;if(s.isEmpty())return"";if(!s.was_processed)return s.content;let i=[],u=[],l=[],o={},d=a=>{let p=[],b;for(b in a)a.hasOwnProperty(b)&&p.push("data-"+b+'="'+this.escapeForHtml(a[b])+'"');return p.length>0?" "+p.join(" "):""};return s.isInverted&&(o["ansi-is-inverted"]="true"),s.fg&&(c?(i.push(s.fg+"-fg"),s.fg_truecolor!==null&&(o["ansi-truecolor-fg"]=s.fg_truecolor,s.fg_truecolor=null)):i.push("color:rgb("+s.fg+")")),s.bg&&(c?(i.push(s.bg+"-bg"),s.bg_truecolor!==null&&(o["ansi-truecolor-bg"]=s.bg_truecolor,s.bg_truecolor=null)):i.push("background-color:rgb("+s.bg+")")),s.decorations.forEach(a=>{if(c){u.push("ansi-"+a);return}a==="bold"?u.push("font-weight:bold"):a==="dim"?u.push("opacity:0.5"):a==="italic"?u.push("font-style:italic"):a==="hidden"?u.push("visibility:hidden"):a==="strikethrough"?l.push("line-through"):l.push(a)}),l.length&&u.push("text-decoration:"+l.join(" ")),c?'<span class="'+i.concat(u).join(" ")+'"'+d(o)+">"+s.content+"</span>":'<span style="'+i.concat(u).join(";")+'"'+d(o)+">"+s.content+"</span>"}removeDecoration(e){const r=this.decorations.indexOf(e);r>=0&&this.decorations.splice(r,1)}}var Be=R,T={exports:{}};function U(t){if(!t)return"";if(!/\r/.test(t))return t;for(t=t.replace(/\r+\n/gm,`
22
- `);/\r./.test(t);)t=t.replace(/^([^\r\n]*)\r+([^\r\n]+)/gm,function(e,r,n){return n+r.slice(n.length)});return t}function Pe(t){for(var e=0,r=0;r<t.length;r++)t[e].length<=t[r].length&&(e=r);return e}function te(t){if(!/\r/.test(t))return t;for(var e=t.split("\r"),r=[];e.length>0;){var n=Pe(e);r.push(e[n]),e=e.slice(n+1)}return r.join("\r")}function Ze(t){if(!t)return"";if(!/\r/.test(t))return t;if(!/\n/.test(t))return te(t);t=t.replace(/\r+\n/gm,`
23
- `);var e=t.lastIndexOf(`
24
- `);return U(t.slice(0,e))+`
25
- `+te(t.slice(e+1))}T.exports=U;T.exports.escapeCarriageReturn=U;T.exports.escapeCarriageReturnSafe=Ze;var qe=T.exports,P,re;function He(){return re||(re=1,P=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/),P}var Z,ne;function Ye(){return ne||(ne=1,Z=/[\0-\x1F\x7F-\x9F]/),Z}var q,se;function We(){return se||(se=1,q=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/),q}var H,ie;function Je(){return ie||(ie=1,H=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/),H}var Y,oe;function Ge(){return oe||(oe=1,Y=function(t){var e={};e.src_Any=He().source,e.src_Cc=Ye().source,e.src_Z=We().source,e.src_P=Je().source,e.src_ZPCc=[e.src_Z,e.src_P,e.src_Cc].join("|"),e.src_ZCc=[e.src_Z,e.src_Cc].join("|");var r="[><|]";return e.src_pseudo_letter="(?:(?!"+r+"|"+e.src_ZPCc+")"+e.src_Any+")",e.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",e.src_auth="(?:(?:(?!"+e.src_ZCc+"|[@/\\[\\]()]).)+@)?",e.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",e.src_host_terminator="(?=$|"+r+"|"+e.src_ZPCc+")(?!-|_|:\\d|\\.-|\\.(?!$|"+e.src_ZPCc+"))",e.src_path="(?:[/?#](?:(?!"+e.src_ZCc+"|"+r+`|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!`+e.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+e.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+e.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+e.src_ZCc+`|["]).)+\\"|\\'(?:(?!`+e.src_ZCc+"|[']).)+\\'|\\'(?="+e.src_pseudo_letter+"|[-]).|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+e.src_ZCc+"|[.]).|"+(t&&t["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+e.src_ZCc+").|;(?!"+e.src_ZCc+").|\\!+(?!"+e.src_ZCc+"|[!]).|\\?(?!"+e.src_ZCc+"|[?]).)+|\\/)?",e.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',e.src_xn="xn--[a-z0-9\\-]{1,59}",e.src_domain_root="(?:"+e.src_xn+"|"+e.src_pseudo_letter+"{1,63})",e.src_domain="(?:"+e.src_xn+"|(?:"+e.src_pseudo_letter+")|(?:"+e.src_pseudo_letter+"(?:-|"+e.src_pseudo_letter+"){0,61}"+e.src_pseudo_letter+"))",e.src_host="(?:(?:(?:(?:"+e.src_domain+")\\.)*"+e.src_domain+"))",e.tpl_host_fuzzy="(?:"+e.src_ip4+"|(?:(?:(?:"+e.src_domain+")\\.)+(?:%TLDS%)))",e.tpl_host_no_ip_fuzzy="(?:(?:(?:"+e.src_domain+")\\.)+(?:%TLDS%))",e.src_host_strict=e.src_host+e.src_host_terminator,e.tpl_host_fuzzy_strict=e.tpl_host_fuzzy+e.src_host_terminator,e.src_host_port_strict=e.src_host+e.src_port+e.src_host_terminator,e.tpl_host_port_fuzzy_strict=e.tpl_host_fuzzy+e.src_port+e.src_host_terminator,e.tpl_host_port_no_ip_fuzzy_strict=e.tpl_host_no_ip_fuzzy+e.src_port+e.src_host_terminator,e.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+e.src_ZPCc+"|>|$))",e.tpl_email_fuzzy="(^|"+r+'|"|\\(|'+e.src_ZCc+")("+e.src_email_name+"@"+e.tpl_host_fuzzy_strict+")",e.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+e.src_ZPCc+"))((?![$+<=>^`||])"+e.tpl_host_port_fuzzy_strict+e.src_path+")",e.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+e.src_ZPCc+"))((?![$+<=>^`||])"+e.tpl_host_port_no_ip_fuzzy_strict+e.src_path+")",e}),Y}function W(t){var e=Array.prototype.slice.call(arguments,1);return e.forEach(function(r){r&&Object.keys(r).forEach(function(n){t[n]=r[n]})}),t}function B(t){return Object.prototype.toString.call(t)}function Ue(t){return B(t)==="[object String]"}function Ve(t){return B(t)==="[object Object]"}function Ke(t){return B(t)==="[object RegExp]"}function ue(t){return B(t)==="[object Function]"}function Qe(t){return t.replace(/[.?*+^$[\]\\(){}|-]/g,"\\$&")}var fe={fuzzyLink:!0,fuzzyEmail:!0,fuzzyIP:!1};function Xe(t){return Object.keys(t||{}).reduce(function(e,r){return e||fe.hasOwnProperty(r)},!1)}var et={"http:":{validate:function(t,e,r){var n=t.slice(e);return r.re.http||(r.re.http=new RegExp("^\\/\\/"+r.re.src_auth+r.re.src_host_port_strict+r.re.src_path,"i")),r.re.http.test(n)?n.match(r.re.http)[0].length:0}},"https:":"http:","ftp:":"http:","//":{validate:function(t,e,r){var n=t.slice(e);return r.re.no_http||(r.re.no_http=new RegExp("^"+r.re.src_auth+"(?:localhost|(?:(?:"+r.re.src_domain+")\\.)+"+r.re.src_domain_root+")"+r.re.src_port+r.re.src_host_terminator+r.re.src_path,"i")),r.re.no_http.test(n)?e>=3&&t[e-3]===":"||e>=3&&t[e-3]==="/"?0:n.match(r.re.no_http)[0].length:0}},"mailto:":{validate:function(t,e,r){var n=t.slice(e);return r.re.mailto||(r.re.mailto=new RegExp("^"+r.re.src_email_name+"@"+r.re.src_host_strict,"i")),r.re.mailto.test(n)?n.match(r.re.mailto)[0].length:0}}},tt="a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]",rt="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function nt(t){t.__index__=-1,t.__text_cache__=""}function st(t){return function(e,r){var n=e.slice(r);return t.test(n)?n.match(t)[0].length:0}}function ce(){return function(t,e){e.normalize(t)}}function I(t){var e=t.re=Ge()(t.__opts__),r=t.__tlds__.slice();t.onCompile(),t.__tlds_replaced__||r.push(tt),r.push(e.src_xn),e.src_tlds=r.join("|");function n(u){return u.replace("%TLDS%",e.src_tlds)}e.email_fuzzy=RegExp(n(e.tpl_email_fuzzy),"i"),e.link_fuzzy=RegExp(n(e.tpl_link_fuzzy),"i"),e.link_no_ip_fuzzy=RegExp(n(e.tpl_link_no_ip_fuzzy),"i"),e.host_fuzzy_test=RegExp(n(e.tpl_host_fuzzy_test),"i");var s=[];t.__compiled__={};function c(u,l){throw new Error('(LinkifyIt) Invalid schema "'+u+'": '+l)}Object.keys(t.__schemas__).forEach(function(u){var l=t.__schemas__[u];if(l!==null){var o={validate:null,link:null};if(t.__compiled__[u]=o,Ve(l)){Ke(l.validate)?o.validate=st(l.validate):ue(l.validate)?o.validate=l.validate:c(u,l),ue(l.normalize)?o.normalize=l.normalize:l.normalize?c(u,l):o.normalize=ce();return}if(Ue(l)){s.push(u);return}c(u,l)}}),s.forEach(function(u){t.__compiled__[t.__schemas__[u]]&&(t.__compiled__[u].validate=t.__compiled__[t.__schemas__[u]].validate,t.__compiled__[u].normalize=t.__compiled__[t.__schemas__[u]].normalize)}),t.__compiled__[""]={validate:null,normalize:ce()};var i=Object.keys(t.__compiled__).filter(function(u){return u.length>0&&t.__compiled__[u]}).map(Qe).join("|");t.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+e.src_ZPCc+"))("+i+")","i"),t.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+e.src_ZPCc+"))("+i+")","ig"),t.re.pretest=RegExp("("+t.re.schema_test.source+")|("+t.re.host_fuzzy_test.source+")|@","i"),nt(t)}function it(t,e){var r=t.__index__,n=t.__last_index__,s=t.__text_cache__.slice(r,n);this.schema=t.__schema__.toLowerCase(),this.index=r+e,this.lastIndex=n+e,this.raw=s,this.text=s,this.url=s}function ae(t,e){var r=new it(t,e);return t.__compiled__[r.schema].normalize(r,t),r}function E(t,e){if(!(this instanceof E))return new E(t,e);e||Xe(t)&&(e=t,t={}),this.__opts__=W({},fe,e),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=W({},et,t),this.__compiled__={},this.__tlds__=rt,this.__tlds_replaced__=!1,this.re={},I(this)}E.prototype.add=function(e,r){return this.__schemas__[e]=r,I(this),this};E.prototype.set=function(e){return this.__opts__=W(this.__opts__,e),this};E.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var r,n,s,c,i,u,l,o,d;if(this.re.schema_test.test(e)){for(l=this.re.schema_search,l.lastIndex=0;(r=l.exec(e))!==null;)if(c=this.testSchemaAt(e,r[2],l.lastIndex),c){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+c;break}}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(o=e.search(this.re.host_fuzzy_test),o>=0&&(this.__index__<0||o<this.__index__)&&(n=e.match(this.__opts__.fuzzyIP?this.re.link_fuzzy:this.re.link_no_ip_fuzzy))!==null&&(i=n.index+n[1].length,(this.__index__<0||i<this.__index__)&&(this.__schema__="",this.__index__=i,this.__last_index__=n.index+n[0].length))),this.__opts__.fuzzyEmail&&this.__compiled__["mailto:"]&&(d=e.indexOf("@"),d>=0&&(s=e.match(this.re.email_fuzzy))!==null&&(i=s.index+s[1].length,u=s.index+s[0].length,(this.__index__<0||i<this.__index__||i===this.__index__&&u>this.__last_index__)&&(this.__schema__="mailto:",this.__index__=i,this.__last_index__=u))),this.__index__>=0};E.prototype.pretest=function(e){return this.re.pretest.test(e)};E.prototype.testSchemaAt=function(e,r,n){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(e,n,this):0};E.prototype.match=function(e){var r=0,n=[];this.__index__>=0&&this.__text_cache__===e&&(n.push(ae(this,r)),r=this.__last_index__);for(var s=r?e.slice(r):e;this.test(s);)n.push(ae(this,r)),s=s.slice(this.__last_index__),r+=this.__last_index__;return n.length?n:null};E.prototype.tlds=function(e,r){return e=Array.isArray(e)?e:[e],r?(this.__tlds__=this.__tlds__.concat(e).sort().filter(function(n,s,c){return n!==c[s-1]}).reverse(),I(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,I(this),this)};E.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),e.schema==="mailto:"&&!/^mailto:/i.test(e.url)&&(e.url="mailto:"+e.url)};E.prototype.onCompile=function(){};var ot=E,ut=w&&w.__createBinding||(Object.create?function(t,e,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(e,r);(!s||("get"in s?!e.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,s)}:function(t,e,r,n){n===void 0&&(n=r),t[n]=e[r]}),ct=w&&w.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),at=w&&w.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(r){var n=[];for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&(n[n.length]=s);return n},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(e!=null)for(var n=t(e),s=0;s<n.length;s++)n[s]!=="default"&&ut(r,e,n[s]);return ct(r,e),r}}(),he=w&&w.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(_e,"__esModule",{value:!0});var lt=_e.default=Ft;const _t=he(Be),ft=qe,ht=he(ot),j=at(C);function dt(t,e=!1){return t=(0,ft.escapeCarriageReturn)(yt(t)),_t.default.ansiToJson(t,{json:!0,remove_empty:!0,use_classes:e})}function gt(t){let e="";return t.bg&&(e+=`${t.bg}-bg `),t.fg&&(e+=`${t.fg}-fg `),t.decoration&&(e+=`ansi-${t.decoration} `),e===""?null:(e=e.substring(0,e.length-1),e)}function pt(t){const e={};switch(t.bg&&(e.backgroundColor=`rgb(${t.bg})`),t.fg&&(e.color=`rgb(${t.fg})`),t.decoration){case"bold":e.fontWeight="bold";break;case"dim":e.opacity="0.5";break;case"italic":e.fontStyle="italic";break;case"hidden":e.visibility="hidden";break;case"strikethrough":e.textDecoration="line-through";break;case"underline":e.textDecoration="underline";break;case"blink":e.textDecoration="blink";break}return e}function mt(t,e,r,n){const s=e?null:pt(r),c=e?gt(r):null;return t?t==="fuzzy"?Dt(r,n,s,c):xt(r,n,s,c):j.createElement("span",{style:s,key:n,className:c},r.content)}function xt(t,e,r,n){const s=[],c=/(\s|^)(https?:\/\/(?:www\.|(?!www))[^\s.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/g;let i=0,u;for(;(u=c.exec(t.content))!==null;){const[,l,o]=u,d=u.index+l.length;d>i&&s.push(t.content.substring(i,d));const a=o.startsWith("www.")?`http://${o}`:o;s.push(j.createElement("a",{key:i,href:a,target:"_blank"},`${o}`)),i=c.lastIndex}return i<t.content.length&&s.push(t.content.substring(i)),j.createElement("span",{style:r,key:e,className:n},s)}function Dt(t,e,r,n){var s;const c=(0,ht.default)({fuzzyEmail:!1}).tlds(["io"],!0);if(!c.pretest(t.content))return j.createElement("span",{style:r,key:e,className:n},t.content);const i=c.match(t.content);if(!i)return j.createElement("span",{style:r,key:e,className:n},t.content);const u=[t.content.substring(0,(s=i[0])===null||s===void 0?void 0:s.index)];return i.forEach((l,o)=>{var d;u.push(j.createElement("a",{href:l.url,target:"_blank",key:o},t.content.substring(l.index,l.lastIndex))),i[o+1]&&u.push(t.content.substring(i[o].lastIndex,(d=i[o+1])===null||d===void 0?void 0:d.index))}),i[i.length-1].lastIndex!==t.content.length&&u.push(t.content.substring(i[i.length-1].lastIndex,t.content.length)),j.createElement("span",{style:r,key:e,className:n},u)}function Ft(t){const{className:e,useClasses:r,children:n,linkify:s}=t;return j.createElement("code",{className:e},dt(n??"",r??!1).map(mt.bind(null,s??!1,r??!1)))}function yt(t){let e=t;do t=e,e=t.replace(/[^\n]\x08/gm,"");while(e.length<t.length);return t}function bt(t){return/^\[(ERROR|FATAL)\]/.test(t)||/^ERROR\b/.test(t)?"text-red-400":/^\[(WARN|WARNING)\]/.test(t)||/^WARN(ING)?\b/.test(t)?"text-amber-400":/^\[DEBUG\]/.test(t)||/^DEBUG\b/.test(t)?"text-sky-400":/^\[(INFO|DOWNLOAD|PROGRESS)\]/.test(t)||/^INFO\b/.test(t)?"text-emerald-400":"text-zinc-200"}function le(t){const e=$e({start:0,end:t}),r=e.hours??0,n=e.minutes??0,s=e.seconds??0;return r===0&&n===0?`${s}s`:r===0?`${n}m${s}s`:`${r}h${n}m`}function vt(){const[t,e]=C.useState([]),[r,n]=C.useState({}),[s,c]=C.useState({}),[i,u]=C.useState(null),l=C.useRef(""),[,o]=C.useState(0),d=C.useRef(null),a=i?s[i]??[]:[];C.useEffect(()=>{fetch("/__just/recipes",{cache:"no-store"}).then(y=>y.json()).then(e).catch(()=>e([])),fetch("/__config").then(y=>y.json()).then(y=>{l.current=y.stopToken??""}).catch(()=>{});const h=new EventSource("/__just/logs");let f=!0;h.onopen=()=>{if(f){f=!1;return}c({}),n({})},h.onmessage=y=>{try{const m=JSON.parse(y.data);m.type==="log"?c(v=>{const A=[...v[m.recipe]??[],m.text];return{...v,[m.recipe]:A.length>1e3?A.slice(-1e3):A}}):m.type==="clear"?c(v=>({...v,[m.recipe]:[]})):m.type==="state"&&(n(v=>{var A;return{...v,[m.recipe]:{state:m.state,code:m.code,signal:m.signal,startedAt:m.startedAt??((A=v[m.recipe])==null?void 0:A.startedAt)??Date.now()}}}),m.state==="running"&&u(m.recipe))}catch{}},h.onerror=()=>{};const D=setInterval(()=>o(y=>y+1),1e3);return()=>{h.close(),clearInterval(D)}},[]),C.useEffect(()=>{d.current&&(d.current.scrollTop=d.current.scrollHeight)},[a.length,i]);const p=(h,f)=>{fetch(`/__just/${h}`,{method:"POST",headers:{"x-stop-token":l.current,"Content-Type":"application/json"},body:JSON.stringify({recipe:f})}).catch(()=>pe.error(`just ${h} 动作失败`))},b=t.map(h=>({...h,task:r[h.name]})),x=b.filter(h=>{var f;return((f=h.task)==null?void 0:f.state)==="running"}).length,F=i?r[i]:void 0,k=(F==null?void 0:F.state)==="running",N=(h,f,D)=>h?"bg-emerald-500 animate-pulse":f?D!=null&&D.signal?"bg-muted-foreground":D!=null&&D.code?"bg-red-500":"bg-emerald-500/60":"bg-muted-foreground/30",de={key:"__console__",label:"",badge:_.jsx("span",{className:"font-mono opacity-80",children:x>0?x:""}),className:i===null?"":"border-border text-muted-foreground hover:text-foreground"},ge=t.map(h=>{const f=r[h.name],D=(f==null?void 0:f.state)==="running",y=(f==null?void 0:f.state)==="exited",m=i===h.name;return{key:h.name,label:h.name,className:m?"":D?"border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-300 hover:bg-emerald-500/20":"",renderLabel:()=>_.jsxs(_.Fragment,{children:[_.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${N(D,y,f)}`}),_.jsx("span",{children:h.name})]}),renderExtra:()=>y&&!m?_.jsx("span",{className:`text-[10px] ${f!=null&&f.signal?"opacity-60":f!=null&&f.code?"text-red-500":"text-emerald-600 dark:text-emerald-400"}`,children:f!=null&&f.signal?"停":f==null?void 0:f.code}):void 0}});return _.jsxs("div",{className:"h-full flex flex-col",children:[_.jsx("div",{className:"flex-none flex items-center gap-1.5 flex-wrap px-3 py-2 border-b bg-background",children:_.jsx(xe,{items:[de,...ge],value:i??"__console__",onChange:h=>u(h==="__console__"?null:h),ariaLabel:"任务筛选"})}),i===null?_.jsxs("div",{className:"flex-1 min-h-0 overflow-auto p-3 grid gap-2.5 grid-cols-1 md:grid-cols-2 xl:grid-cols-3 content-start",children:[b.length===0&&_.jsx("p",{className:"text-xs text-muted-foreground col-span-full p-4 text-center",children:"未发现 justfile recipes"}),b.map(h=>{const f=h.task,D=(f==null?void 0:f.state)==="running",y=(f==null?void 0:f.state)==="exited",m=(s[h.name]??[]).slice(-3).map(v=>v.replace(/\r?\n$/,"").replace(/\x1b\[[0-9;]*m/g,""));return _.jsxs("div",{onClick:()=>u(h.name),className:"group rounded-lg border bg-card p-3 cursor-pointer hover:border-muted-foreground/40 transition-colors",children:[_.jsxs("div",{className:"flex items-center gap-2 text-xs",children:[_.jsx("span",{className:`h-2 w-2 rounded-full flex-none ${N(D,y,f)}`}),_.jsx("span",{className:"font-mono font-medium",children:h.name}),D&&_.jsx("span",{className:"text-emerald-600 dark:text-emerald-400 font-mono",children:le(Date.now()-f.startedAt)}),y&&_.jsx("span",{className:`font-mono ${f.signal?"text-muted-foreground":f.code?"text-red-500":"text-emerald-600 dark:text-emerald-400"}`,children:f.signal?"已停止":`exit ${f.code}`}),!f&&_.jsx("span",{className:"text-muted-foreground/60",children:"未运行"}),_.jsx("span",{className:"ml-auto flex items-center gap-1",onClick:v=>v.stopPropagation(),children:D?_.jsxs(O,{variant:"ghost",className:"h-6 gap-1 px-2 text-[11px]",onClick:()=>p("stop",h.name),children:[_.jsx(ee,{className:"h-2.5 w-2.5"}),"停止"]}):_.jsxs(O,{variant:"ghost",className:"h-6 gap-1 px-2 text-[11px]",onClick:()=>p("start",h.name),children:[y?_.jsx(X,{className:"h-2.5 w-2.5"}):_.jsx(Le,{className:"h-2.5 w-2.5"}),y?"重跑":"启动"]})})]}),h.description&&_.jsx("p",{className:"mt-1 text-[11px] text-muted-foreground/70 truncate",children:h.description}),_.jsx("div",{className:"mt-2 rounded bg-[#0d1117] px-2 py-1.5 font-mono text-[10px] leading-relaxed text-zinc-400 min-h-[3.4em]",children:m.length?m.map((v,A)=>_.jsx("div",{className:"truncate",children:v},A)):_.jsxs("span",{className:"text-zinc-600",children:["$ just ",h.name," …"]})})]},h.name)})]}):_.jsxs("div",{className:"flex-1 min-h-0 flex flex-col",children:[_.jsxs("div",{className:"flex-none flex items-center gap-2 px-3.5 h-8 border-b bg-background text-[11px]",children:[_.jsx("span",{className:`h-1.5 w-1.5 rounded-full ${k?"bg-emerald-500 animate-pulse":"bg-muted-foreground"}`}),_.jsx("span",{className:"font-mono font-medium",children:i}),_.jsx("span",{className:"text-muted-foreground font-mono",children:k?`running · ${le(Date.now()-F.startedAt)}`:F!=null&&F.signal?"已停止":F?`exit ${F.code}`:"未运行"}),_.jsxs("span",{className:"ml-auto flex items-center gap-1",children:[k?_.jsxs(O,{variant:"ghost",className:"h-6 gap-1 px-2 text-[11px]",onClick:()=>p("stop",i),children:[_.jsx(ee,{className:"h-2.5 w-2.5"}),"停止"]}):_.jsxs(O,{variant:"ghost",className:"h-6 gap-1 px-2 text-[11px]",onClick:()=>p("start",i),children:[_.jsx(X,{className:"h-2.5 w-2.5"}),F?"重跑":"启动"]}),_.jsxs(O,{variant:"ghost",className:"h-6 gap-1 px-2 text-[11px]",onClick:()=>p("clear",i),disabled:!a.length,children:[_.jsx(Ie,{className:"h-2.5 w-2.5"}),"清屏"]}),_.jsxs("span",{className:"text-muted-foreground font-mono ml-1",children:[a.length," 行"]})]})]}),_.jsxs("div",{ref:d,className:"flex-1 min-h-0 overflow-auto bg-[#0d1117] p-3.5 font-mono text-xs leading-relaxed text-zinc-200",children:[a.length===0&&_.jsxs("p",{className:"text-zinc-500",children:["$ just ",i," · 等待输出…"]}),a.map((h,f)=>{const D=h.replace(/\r?\n$/,"");return _.jsx("div",{className:"whitespace-pre-wrap break-all min-h-[1.25rem]",children:/\x1b\[/.test(D)?_.jsx(lt,{children:D}):_.jsx("span",{className:bt(D),children:D})},f)})]})]})]})}function Et(){return _.jsx("div",{className:"mx-auto h-full max-w-6xl bg-background border rounded-lg shadow-sm overflow-hidden flex flex-col",children:_.jsx(vt,{})})}const Ct=Object.freeze(Object.defineProperty({__proto__:null,default:Et},Symbol.toStringTag,{value:"Module"})),jt={mode:"just",label:"Just Runner",icon:"📜",description:"Just 任务日志与执行",Workspace:C.lazy(()=>me(()=>Promise.resolve().then(()=>Ct),void 0))};export{Et as JustWorkspace,jt as default};
@@ -1,26 +0,0 @@
1
- import{c as p,r as o,j as e,_ as v}from"./index-CNPKNdvp.js";import{M as S}from"./MdViewer-P4wmRzy_.js";import{C as _,I as V}from"./CodeViewer-D8YqzmwB.js";import{F as I}from"./FilterPills-A_fz1nby.js";import"./index-C_wTjWH0.js";/**
2
- * @license lucide-react v0.460.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const R=p("ImageOff",[["line",{x1:"2",x2:"22",y1:"2",y2:"22",key:"a6p6uj"}],["path",{d:"M10.41 10.41a2 2 0 1 1-2.83-2.83",key:"1bzlo9"}],["line",{x1:"13.5",x2:"6",y1:"13.5",y2:"21",key:"1q0aeu"}],["line",{x1:"18",x2:"21",y1:"12",y2:"15",key:"5mozeu"}],["path",{d:"M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59",key:"mmje98"}],["path",{d:"M21 15V5a2 2 0 0 0-2-2H9",key:"43el77"}]]);/**
7
- * @license lucide-react v0.460.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const C=p("Monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]);/**
12
- * @license lucide-react v0.460.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */const E=p("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/**
17
- * @license lucide-react v0.460.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */const z=p("Smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);/**
22
- * @license lucide-react v0.460.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- */const F=p("Tablet",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",ry:"2",key:"76otgf"}],["line",{x1:"12",x2:"12.01",y1:"18",y2:"18",key:"1dp563"}]]);let k=null;const y=new Set,u={get:()=>k,set:t=>{k=t,y.forEach(i=>i(t))},subscribe:t=>(y.add(t),()=>{y.delete(t)})};function M({path:t}){return e.jsx("iframe",{src:"/"+encodeURI(t),title:"预览",className:"w-full h-full border-0 bg-white"})}function P({path:t}){const[i,l]=o.useState(null),[d,r]=o.useState(!0);return o.useEffect(()=>{let s=!1;return r(!0),l(null),fetch("/"+encodeURI(t),{cache:"no-store"}).then(a=>a.text()).then(a=>{if(s)return;const c=a.match(/--[A-Za-z0-9_-]+\s*:\s*[^;}\n]+/g)??[];if(!c.length){l([]),r(!1);return}const n=m=>/^(#([0-9a-fA-F]{3,8})\b|rgb|rgba|hsl|hsla|oklch|oklab|color\()/i.test(m.trim()),x=c.filter(m=>n(m)),h=c.filter(m=>/font|family|type/.test(m.toLowerCase())&&!n(m)),b=c.filter(m=>!x.includes(m)&&!h.includes(m)),g=m=>{const j=m.indexOf(":"),N=m.slice(0,j).trim(),w=m.slice(j+1).trim();return{name:N,value:w}},f=[];x.length&&f.push({label:`配色 · ${x.length}`,items:x.map(g)}),h.length&&f.push({label:`字体 · ${h.length}`,items:h.map(g)}),b.length&&f.push({label:`其他 · ${b.length}`,items:b.map(g)}),l(f),r(!1)}).catch(()=>{s||(l([]),r(!1))}),()=>{s=!0}},[t]),d?e.jsx("p",{className:"p-3 text-xs text-muted-foreground",children:"解析中…"}):i.length?e.jsx("div",{className:"p-8 flex flex-col gap-7",children:i.map(s=>{const a=s.items.some(n=>/^(#|rgb|rgba|hsl|hsla|oklch|oklab|color\()/i.test(n.value)),c=s.items.some(n=>/font|family|type/i.test(n.name));return e.jsxs("section",{children:[e.jsx("div",{className:"mb-3 text-[11px] font-semibold uppercase text-muted-foreground",children:s.label}),a?e.jsx("div",{className:"grid gap-3",style:{gridTemplateColumns:"repeat(auto-fill, minmax(150px, 1fr))"},children:s.items.filter(n=>/^(#|rgb|rgba|hsl|hsla|oklch|oklab|color\()/i.test(n.value)).map(({name:n,value:x})=>e.jsxs("div",{className:"overflow-hidden rounded-lg border bg-background",children:[e.jsx("div",{className:"h-[72px] border-b",style:{background:x}}),e.jsx("div",{className:"px-2.5 pt-2 font-mono text-[11px] break-all",children:n}),e.jsx("div",{className:"px-2.5 pb-2 text-xs text-muted-foreground",children:x})]},n))}):c?e.jsx("div",{className:"grid gap-3",style:{gridTemplateColumns:"repeat(auto-fill, minmax(150px, 1fr))"},children:s.items.map(({name:n,value:x})=>e.jsxs("div",{className:"overflow-hidden rounded-lg border bg-background",children:[e.jsx("div",{className:"grid h-[72px] place-items-center text-2xl",style:{fontFamily:x},children:"Aa"}),e.jsx("div",{className:"px-2.5 font-mono text-[11px]",children:n})]},n))}):e.jsx("div",{className:"flex flex-col gap-1",children:s.items.map(({name:n,value:x})=>e.jsxs("div",{className:"flex justify-between gap-3 px-2.5 py-1.5 rounded border bg-background text-xs",children:[e.jsx("span",{className:"font-mono",children:n}),e.jsx("span",{className:"text-muted-foreground",children:x})]},n))})]},s.label)})}):e.jsx("p",{className:"p-3 text-xs",children:"未发现 CSS 变量"})}function U({path:t}){return e.jsx("div",{className:"grid place-items-center p-8",children:e.jsx("video",{src:"/"+encodeURI(t),controls:!0,className:"max-w-full max-h-[80vh] rounded border"})})}function L({path:t}){return e.jsx("div",{className:"grid place-items-center p-8",children:e.jsx("audio",{src:"/"+encodeURI(t),controls:!0,className:"w-full max-w-2xl"})})}function O({path:t}){return e.jsx("div",{className:"grid place-items-center p-8 h-full",children:e.jsx("iframe",{src:"/"+encodeURI(t),title:"PDF",className:"w-full h-full max-h-[80vh] rounded border bg-white"})})}function T({path:t}){const[i,l]=o.useState("");return o.useEffect(()=>{let d=!1,r="",s=null;return fetch("/"+encodeURI(t)).then(a=>a.blob()).then(async a=>{var c;if(!d){if(r=URL.createObjectURL(a),s=new FontFace("zd-font-preview",`url(${r})`),await s.load(),d){(c=s.dispose)==null||c.call(s);return}document.fonts.add(s),l(t.split("/").pop()??t)}}).catch(()=>{d||l(t.split("/").pop()??t)}),()=>{var a;if(d=!0,s)try{document.fonts.delete(s),(a=s.dispose)==null||a.call(s)}catch{}r&&URL.revokeObjectURL(r)}},[t]),e.jsxs("div",{className:"h-full overflow-auto p-8 grid gap-6 place-content-center text-center",children:[e.jsx("div",{className:"text-xs text-muted-foreground font-mono break-all",children:t}),e.jsx("div",{className:"text-5xl",style:{fontFamily:i?"'zd-font-preview', serif":"serif"},children:"Aa 字体预览 0123"})]})}function $({path:t}){return e.jsx("div",{className:"grid place-items-center h-full text-center text-muted-foreground",children:e.jsxs("div",{children:[e.jsx(R,{className:"h-10 w-10 mx-auto mb-3 opacity-50"}),e.jsx("p",{children:"该格式无法预览"}),e.jsx("p",{className:"mt-1 font-mono text-xs break-all",children:t})]})})}const A={page:M,icon:V,token:P,md:S,video:U,audio:L,pdf:O,component:_,font:T};function W(t){return A[t]??$}function D({mode:t,onMode:i,w:l,h:d,onW:r,onH:s}){const a=[{v:0,icon:e.jsx(C,{className:"h-3.5 w-3.5"}),label:"桌面"},{v:768,icon:e.jsx(F,{className:"h-3.5 w-3.5"}),label:"768"},{v:375,icon:e.jsx(z,{className:"h-3.5 w-3.5"}),label:"375"},{v:"custom",icon:e.jsx(E,{className:"h-3.5 w-3.5"}),label:"自定义"}],c="w-[50px] h-7 px-1 text-center text-xs rounded border border-border bg-background text-foreground [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none focus:outline-none focus:border-primary";return e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"flex items-center gap-1 rounded-md border border-border p-0.5 bg-muted",children:e.jsx(I,{items:a.map(n=>({key:String(n.v),label:n.label,renderLabel:()=>e.jsxs(e.Fragment,{children:[n.icon,e.jsx("span",{className:"hidden sm:inline",children:n.label})]})})),value:String(t),onChange:n=>i(n==="0"?0:n==="custom"?"custom":Number(n)),ariaLabel:"视口模式"})}),e.jsxs("span",{className:"flex items-center gap-1 text-xs text-muted-foreground",children:[e.jsx("input",{type:"number",value:l,min:280,max:3e3,step:8,onChange:n=>r(Number(n.target.value)),"aria-label":"自定义宽度",className:c}),e.jsx("span",{className:"text-muted-foreground/70",children:"×"}),e.jsx("input",{type:"number",value:d,min:400,max:3e3,step:8,onChange:n=>s(Number(n.target.value)),"aria-label":"自定义高度",className:c}),e.jsx("span",{className:"text-[11px] text-muted-foreground/70",children:"px"})]})]})}function H(){const[t,i]=o.useState(()=>u.get()),[l,d]=o.useState(0),[r,s]=o.useState(1024),[a,c]=o.useState(768);o.useEffect(()=>u.subscribe(i),[]);const n=t?W(t.type):null,x=l===0?"桌面":l==="custom"?`${r} × ${a}`:`${l}px`;return e.jsx("div",{className:"mx-auto h-full flex flex-col bg-background border rounded-lg shadow-sm overflow-hidden",children:t&&n?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"h-[38px] flex-none flex items-center justify-between px-3.5 border-b bg-background text-xs",children:[e.jsx("span",{className:"font-mono truncate",children:t.path}),e.jsx("span",{className:"text-muted-foreground ml-3 flex-none",children:x}),e.jsx(D,{mode:l,onMode:d,w:r,h:a,onW:s,onH:c})]}),e.jsx("div",{className:"flex-1 min-h-0 overflow-auto",children:t.type==="page"?e.jsx("div",{className:"mx-auto bg-background overflow-hidden",style:{maxWidth:l===0?void 0:l==="custom"?r:l,height:l==="custom"?a:"100%"},children:e.jsx(n,{path:t.path})}):e.jsx("div",{className:"mx-auto max-w-5xl h-full overflow-auto",children:e.jsx(n,{path:t.path})})})]}):e.jsx("div",{className:"flex-1 grid place-items-center text-muted-foreground",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"mx-auto mb-3.5 grid h-14 w-14 place-items-center rounded-[14px] bg-primary text-primary-foreground text-2xl font-bold",children:"z"}),e.jsx("p",{children:"从左侧选择一个资产预览"}),e.jsx("p",{className:"mt-1 text-xs",children:"点左侧折叠钮展开资产树 · 改文件即时刷新"})]})})})}const q=Object.freeze(Object.defineProperty({__proto__:null,default:H},Symbol.toStringTag,{value:"Module"})),G=[{key:"page",label:"页面"},{key:"component",label:"组件"},{key:"icon",label:"图标"},{key:"token",label:"Tokens"},{key:"md",label:"文档"},{key:"video",label:"视频"},{key:"audio",label:"音频"},{key:"pdf",label:"PDF"},{key:"font",label:"字体"},{key:"other",label:"其他"}];function Z(){const t=o.useSyncExternalStore(u.subscribe,u.get),[i,l]=o.useState(null);o.useEffect(()=>{fetch("/__design/assets",{cache:"no-store"}).then(r=>r.json()).then(l)},[]);const d=o.useMemo(()=>i?G.map(r=>({...r,items:i[r.key]??[]})).filter(r=>r.items.length>0):[],[i]);return i?e.jsxs("div",{children:[e.jsxs("div",{className:"p-3 text-xs text-muted-foreground",children:[d.reduce((r,s)=>r+s.items.length,0)," 个资产"]}),d.map(r=>e.jsxs("div",{className:"mb-1",children:[e.jsxs("div",{className:"px-3.5 pt-2 pb-1 text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:[r.label," ",e.jsx("span",{className:"font-normal",children:r.items.length})]}),r.items.map(s=>e.jsxs("button",{onClick:()=>u.set({path:s.path,type:s.type}),className:`w-full text-left flex items-center gap-2 px-3.5 py-1.5 text-xs border-l-2 border-transparent hover:bg-muted ${(t==null?void 0:t.path)===s.path?"bg-muted font-medium border-primary":"text-muted-foreground"}`,children:[e.jsx("span",{className:"break-all",children:s.name}),e.jsx("span",{className:"font-mono text-[10px] text-muted-foreground",children:s.ext})]},s.path))]},r.key))]}):e.jsx("p",{className:"p-3 text-xs text-muted-foreground",children:"加载中…"})}const B=Object.freeze(Object.defineProperty({__proto__:null,default:Z},Symbol.toStringTag,{value:"Module"})),ee={mode:"design",label:"设计资产",icon:"🎨",description:"设计资产分类浏览 · zdesign",Sidebar:o.lazy(()=>v(()=>Promise.resolve().then(()=>B),void 0)),Workspace:o.lazy(()=>v(()=>Promise.resolve().then(()=>q),void 0))};export{Z as DesignSidebar,H as DesignWorkspace,ee as default};