hanoman 0.2.6 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/cli.js +3 -0
- package/dist/server.js +8 -3
- package/package.json +2 -2
- package/web/assets/ChangelogScreen-DLlZe3rp.js +1 -0
- package/web/assets/DalangHanomanScreen-R7FUpJF_.js +1 -0
- package/web/assets/DocPreviewModal-DrVk9Jat.js +1 -0
- package/web/assets/DocsWorkspace-B9v_jrMO.js +3 -0
- package/web/assets/IdeScreen-BfC0goYb.css +10 -0
- package/web/assets/IdeScreen-CyRuZ5dQ.js +2 -0
- package/web/assets/LeadScreen-S8AJWFTm.js +1 -0
- package/web/assets/ReviewScreen-BRXl6u_X.js +1 -0
- package/web/assets/SchedulerScreen-BfIF1e2Y.js +1 -0
- package/web/assets/SettingsScreen-CVEuvhVa.js +62 -0
- package/web/assets/TeamScreen-CFj0bFS7.js +1 -0
- package/web/assets/TerminalScreen-6GBZ9nXN.css +32 -0
- package/web/assets/TerminalScreen-DNAcMRWA.js +9 -0
- package/web/assets/TriageScreen-CC6U7Hog.js +1 -0
- package/web/assets/VpsScreen-CeAUGPqE.js +2 -0
- package/web/assets/diff-view-Brg2N-Y9.js +2 -0
- package/web/assets/highlight-HK3IjCTX.js +3 -0
- package/web/assets/index-DSFIYjSl.js +915 -0
- package/web/assets/{index-aYS5z-u0.css → index-NgKosv8R.css} +1 -41
- package/web/assets/live-BhsIWS2g.js +1 -0
- package/web/assets/markdown-CWEY34jk.js +48 -0
- package/web/assets/react-DfGhg7ZW.js +43 -0
- package/web/assets/xterm-3VOAfa_q.js +38 -0
- package/web/index.html +4 -2
- package/web/assets/index-CF_vLAzk.js +0 -7627
package/dist/build-info.json
CHANGED
package/dist/cli.js
CHANGED
|
@@ -33465,6 +33465,9 @@ var init_migrate_pg = __esm({
|
|
|
33465
33465
|
"CustomAgent",
|
|
33466
33466
|
"Setting",
|
|
33467
33467
|
"Notification",
|
|
33468
|
+
// ADR-0159 · AgentInvocation sesudah CustomAgent: `customAgentId` menunjuk ke sana (tanpa FK).
|
|
33469
|
+
// LOCAL-only dan lazimnya TIDAK ada di sumber Postgres lama — jalur 42P01 = nol baris.
|
|
33470
|
+
"AgentInvocation",
|
|
33468
33471
|
// SPEC-516 · ADR-0105 · Changelog sesudah Project (FK projectId). Tabel ini LOCAL-only dan
|
|
33469
33472
|
// lazimnya TIDAK ada di sumber Postgres lama — jalur 42P01 memperlakukannya sebagai nol baris.
|
|
33470
33473
|
"Changelog",
|
package/dist/server.js
CHANGED
|
@@ -14600,18 +14600,23 @@ function classifyIngress(req, policy) {
|
|
|
14600
14600
|
return policy.publicBase && path.startsWith("/api/help") ? "denied" : "control";
|
|
14601
14601
|
return "denied";
|
|
14602
14602
|
}
|
|
14603
|
-
function trustProxyFromEnv(env) {
|
|
14603
|
+
function trustProxyFromEnv(env, warn = (m) => console.warn(m)) {
|
|
14604
14604
|
const raw = env.HANOMAN_TRUST_PROXY?.trim();
|
|
14605
14605
|
if (!raw) return false;
|
|
14606
|
-
if (/^[1-9]\d*$/.test(raw))
|
|
14606
|
+
if (/^[1-9]\d*$/.test(raw)) {
|
|
14607
|
+
warn(`HANOMAN_TRUST_PROXY=${raw} (hop-count) tak lagi didukung fastify \u22655.12.1 \u2014 dipetakan ke ${HOP_COUNT_TRUST.join(",")}; tulis CIDR proxy-mu secara eksplisit`);
|
|
14608
|
+
return [...HOP_COUNT_TRUST];
|
|
14609
|
+
}
|
|
14607
14610
|
const values = raw.split(",").map((v) => v.trim()).filter(Boolean);
|
|
14608
14611
|
if (!values.length || values.some((v) => v === "true" || !v.includes("/") && v !== "loopback"))
|
|
14609
14612
|
throw new Error("HANOMAN_TRUST_PROXY harus berupa hop atau CIDR eksplisit");
|
|
14610
14613
|
return values;
|
|
14611
14614
|
}
|
|
14615
|
+
var HOP_COUNT_TRUST;
|
|
14612
14616
|
var init_ingress_policy = __esm({
|
|
14613
14617
|
"src/services/ingress-policy.ts"() {
|
|
14614
14618
|
"use strict";
|
|
14619
|
+
HOP_COUNT_TRUST = ["127.0.0.1/32", "::1/128"];
|
|
14615
14620
|
}
|
|
14616
14621
|
});
|
|
14617
14622
|
|
|
@@ -47062,7 +47067,7 @@ function buildApp({ requireAuth = true, agentDocFile, env = process.env } = {})
|
|
|
47062
47067
|
const dist = pickWebDir(dirname13(fileURLToPath5(import.meta.url)), env, existsSync18);
|
|
47063
47068
|
if (dist) {
|
|
47064
47069
|
app2.register(fastifyStatic, { root: dist });
|
|
47065
|
-
app2.setNotFoundHandler((req, reply) => req.url.startsWith("/api") ? reply.code(404).send({ error: "not found" }) : reply.sendFile("index.html"));
|
|
47070
|
+
app2.setNotFoundHandler((req, reply) => req.url.startsWith("/api") ? reply.code(404).send({ error: "not found" }) : req.url.startsWith("/assets/") ? reply.code(404).type("text/plain").send("not found") : reply.sendFile("index.html"));
|
|
47066
47071
|
}
|
|
47067
47072
|
}
|
|
47068
47073
|
return app2;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hanoman",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Orchestrator + dashboard workflow docs-driven untuk sesi Claude Code / Codex",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"LICENSE"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"fastify": "^5.12.
|
|
31
|
+
"fastify": "^5.12.1",
|
|
32
32
|
"@fastify/static": "^10.1.3",
|
|
33
33
|
"@fastify/websocket": "^11.3.0",
|
|
34
34
|
"@fastify/cookie": "^11.1.2",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as C,j as a,ac as P,a as y,c as b,d as w,S as H,N as V,aj as q,h as L,u as K,f as M,w as N,ah as O,A as _,au as U,y as Q,x as Y,p as Z,B as G,D as J}from"./index-DSFIYjSl.js";import{R as n}from"./react-DfGhg7ZW.js";import"./markdown-CWEY34jk.js";const X=[{mode:"backlog",label:"Rentang tanggal",hint:"backlog yang selesai di rentang itu"},{mode:"commit",label:"Rentang commit",hint:"perubahan repo antara dua revisi"},{mode:"version",label:"Versi rilis",hint:"perubahan yang masuk ke sebuah versi"}];function ee({p:t,onToast:o,onGenerated:g}){const[i,D]=n.useState("backlog"),[s,I]=n.useState(null),[h,f]=n.useState(""),[p,d]=n.useState(""),[x,B]=n.useState(""),[v,c]=n.useState(""),[j,u]=n.useState(""),[S,l]=n.useState(""),[m,R]=n.useState(!1);n.useEffect(()=>{let e=!0;return(async()=>{try{const r=await C.changelogSources(t.id);if(!e)return;I(r),f(r.defaultRange.from),d(r.defaultRange.to),r.tags[0]&&l(r.tags[0]),r.head&&c(r.head)}catch{}})(),()=>{e=!1}},[t.id]);const T=()=>i==="backlog"?{mode:i,from:h||void 0,to:p||void 0}:i==="commit"?{mode:i,fromSha:x,toSha:v}:{mode:i,fromTag:j||void 0,toTag:S},k=i==="backlog"?!0:i==="commit"?x.trim().length>=4&&v.trim().length>=4:S.trim().length>0;async function F(){R(!0);try{const e=await C.generateChangelog(t.id,T());o(e.generator==="agent"?"Changelog dibangkitkan":"Changelog dibangkitkan (draf ringkas)",e.generator==="agent"?"ok":"warn","file-text"),g==null||g(e)}catch(e){o(e.message||"Gagal membangkitkan changelog","err","x-circle")}finally{R(!1)}}const E=i==="version"&&s!==null&&s.tags.length===0,z=i==="commit"&&s!==null&&!!s.reason&&s.tags.length===0;return a.jsxs(P,{eyebrow:"changelog",title:"Ringkasan perubahan untuk pemakai",children:[a.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:12,lineHeight:1.5},children:"Teks pendek berorientasi pemakai — apa yang berubah bagi mereka, bukan apa yang disentuh di dalam kode."}),a.jsx("div",{style:{display:"flex",gap:6,marginBottom:12,flexWrap:"wrap"},children:X.map(e=>a.jsx(y,{size:"sm",variant:i===e.mode?"primary":"ghost",onClick:()=>D(e.mode),title:e.hint,children:e.label},e.mode))}),a.jsxs("div",{style:{display:"flex",gap:10,alignItems:"flex-end",flexWrap:"wrap",marginBottom:12},children:[i==="backlog"&&a.jsxs(a.Fragment,{children:[a.jsx(b,{label:"Dari tanggal",children:a.jsx(w,{"aria-label":"Dari tanggal",type:"date",value:h,onChange:e=>f(e.target.value)})}),a.jsx(b,{label:"Sampai tanggal",children:a.jsx(w,{"aria-label":"Sampai tanggal",type:"date",value:p,onChange:e=>d(e.target.value)})})]}),i==="commit"&&a.jsxs(a.Fragment,{children:[a.jsx(b,{label:"Dari revisi",children:a.jsx(w,{"aria-label":"Dari revisi",mono:!0,placeholder:"mis. v1.0.0 atau 4f2a1c9",value:x,onChange:e=>B(e.target.value)})}),a.jsx(b,{label:"Sampai revisi",children:a.jsx(w,{"aria-label":"Sampai revisi",mono:!0,placeholder:"mis. HEAD atau 9d3b77e",value:v,onChange:e=>c(e.target.value)})})]}),i==="version"&&a.jsxs(a.Fragment,{children:[a.jsx(b,{label:"Sejak versi",children:a.jsx(H,{"aria-label":"Sejak versi",value:j,onChange:e=>u(e.target.value),options:[{value:"",label:"versi sebelumnya"},...((s==null?void 0:s.tags)??[]).map(e=>({value:e,label:e}))]})}),a.jsx(b,{label:"Versi",children:a.jsx(H,{"aria-label":"Versi",value:S,onChange:e=>l(e.target.value),options:((s==null?void 0:s.tags)??[]).map(e=>({value:e,label:e}))})})]}),a.jsx(y,{leftIcon:"sparkles",onClick:()=>void F(),disabled:m||!k||E||z,children:m?"Membangkitkan…":"Bangkitkan"})]}),(E||z)&&a.jsx(V,{tone:"warn",children:s==null?void 0:s.reason})]})}const $=12,W={backlog:"rentang tanggal",commit:"rentang commit",version:"versi rilis"},ae=t=>new Date(t).toLocaleDateString("id-ID",{day:"numeric",month:"short",year:"numeric"});function te({c:t,active:o,onOpen:g}){return a.jsxs("div",{role:"button",tabIndex:0,onClick:g,onKeyDown:i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),g())},style:{display:"flex",alignItems:"center",gap:10,padding:"9px 10px",cursor:"pointer",borderRadius:"var(--radius-sm)",borderBottom:"1px solid var(--border-hair)",background:o?"var(--brass-100)":"transparent"},children:[a.jsxs("div",{style:{flex:1,minWidth:0},children:[a.jsx("div",{style:{fontSize:13.5,fontWeight:500,color:"var(--text-strong)"},children:t.title}),a.jsxs("div",{style:{fontSize:11.5,color:"var(--text-subtle)",marginTop:2},children:[W[t.mode]??t.mode," · ",ae(t.createdAt)," · ",t.itemCount," perubahan"]})]}),a.jsx(G,{tone:t.generator==="agent"?"ok":"warn",size:"sm",children:t.generator==="agent"?"naratif":"draf ringkas"})]})}function le({p:t,onToast:o,initialChangelogId:g}){const[i,D]=n.useState([]),[s,I]=n.useState(0),h=q("changelog",t.id),[f,p]=L(h,"page",1,Y),[d,x]=L(h,"q","",Z),[B,v]=n.useState(!0),[c,j]=L(h,"selectedId",null,Q),[u,S]=n.useState(null),l=n.useMemo(()=>i.find(e=>e.id===c)??((u==null?void 0:u.id)===c?u:null),[i,c,u]),m=n.useCallback(e=>{j(e?e.id:null),S(e)},[j]),[R,T]=n.useState(0);n.useEffect(()=>{let e=!0;const r=setTimeout(()=>{v(!0),C.listChangelogs(t.id,{q:d,page:f,limit:$}).then(A=>{e&&(D(A.items),I(A.total))}).catch(()=>{e&&(D([]),I(0))}).finally(()=>{e&&v(!1)})},d?220:0);return()=>{e=!1,clearTimeout(r)}},[t.id,d,f,R]),n.useEffect(()=>{if(!g)return;let e=!0;return C.getChangelog(t.id,g).then(r=>{e&&m(r)}).catch(()=>{e&&o("Rilis yang ditautkan tak ditemukan","warn","link-2-off")}),()=>{e=!1}},[t.id,g,o]);const k=J(s,f,$),{confirm:F,dialog:E}=K();async function z(e){try{if(!await F({title:`Hapus changelog "${e.title}"?`,message:"Rilis ini hilang dari riwayat project.",confirmLabel:"Hapus rilis",run:()=>C.deleteChangelog(t.id,e.id)}))return;c===e.id&&m(null),T(r=>r+1),o("Changelog dihapus","ok","trash-2")}catch{o("Gagal menghapus changelog","err","x-circle")}}return a.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:20},children:[a.jsx(ee,{p:t,onToast:o,onGenerated:e=>{m(e),p(1),T(r=>r+1)}}),a.jsxs(P,{eyebrow:"rilis",title:"Riwayat changelog",actions:a.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-subtle)"},children:[s," rilis"]}),children:[a.jsx(w,{"aria-label":"Cari rilis",leftIcon:"search",placeholder:"cari judul atau isi rilis…",value:d,style:{width:"100%"},onChange:e=>{p(1),x(e.target.value)}}),a.jsxs("div",{"data-testid":"changelog-list",style:{maxHeight:340,overflowY:"auto",marginTop:10},children:[B&&i.length===0&&a.jsx(M,{kind:"loading",compact:!0}),!B&&i.length===0&&(d.trim()?a.jsx(M,{kind:"empty",icon:"search",compact:!0,title:"Tak ada rilis yang cocok",hint:`Tak ada rilis yang memuat “${d.trim()}”.`,action:()=>x(""),actionLabel:"Bersihkan pencarian",actionIcon:"x"}):a.jsx(M,{kind:"empty",icon:"megaphone",compact:!0,title:"Belum ada rilis",hint:"Bangkitkan changelog pertama project ini lewat kartu di atas."})),i.map(e=>a.jsx(te,{c:e,active:(l==null?void 0:l.id)===e.id,onOpen:()=>m(e)},e.id))]}),a.jsx(N,{page:k.page,pageCount:k.pageCount,total:s,from:k.from,to:k.to,onPage:p,unit:"rilis"})]}),l&&a.jsxs(P,{eyebrow:`rilis · ${W[l.mode]??l.mode}`,title:l.title,actions:a.jsxs("div",{className:"hn-row-actions",style:{display:"flex",gap:6},children:[a.jsx(y,{size:"sm",variant:"ghost",leftIcon:"copy",onClick:()=>{var e;(e=navigator.clipboard)==null||e.writeText(l.body),o("Changelog disalin","ok","copy")},children:"Salin"}),a.jsx(y,{as:"a",size:"sm",variant:"ghost",leftIcon:"download",download:!0,href:`${_.changelogItem(t.id,l.id)}?download=md`,"aria-label":"Unduh .md",children:"Unduh .md"}),a.jsx(y,{size:"sm",variant:"ghost",leftIcon:"link",onClick:()=>{var e;(e=navigator.clipboard)==null||e.writeText(U(t.id,l.id)),o("Link changelog disalin","ok","link")},children:"Salin link"}),a.jsx(y,{size:"sm",variant:"ghost",leftIcon:"trash-2","aria-label":`Hapus ${l.title}`,onClick:()=>void z(l)})]}),children:[l.warning&&a.jsx(V,{tone:"warn",children:l.warning}),a.jsx(O,{text:l.body,name:"changelog.md"})]}),E]})}export{le as ChangelogScreen};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as ie,j as e,b as re,I as E}from"./index-DSFIYjSl.js";import{R as g}from"./react-DfGhg7ZW.js";import"./markdown-CWEY34jk.js";const de="/assets/hnm-hero-rig-body-v01-DmbKJJHB.webp",ce="/assets/hnm-hero-rig-arm-ul-v01-CIAWAxFe.webp",he="/assets/hnm-hero-rig-arm-ur-v01-C0R0CZnp.webp",oe="/assets/hnm-hero-rig-arm-ml-v01-Kts3pjTf.webp",ge="/assets/hnm-hero-rig-arm-mr-v01-DQgnE6bD.webp",me="/assets/hnm-wayang-satria-alus-v01-CpfoXKTy.webp",ue="/assets/hnm-wayang-satria-gagah-v01-bLfIYAsv.webp",pe="/assets/hnm-wayang-putri-v01-F6p69kHq.webp",xe="/assets/hnm-wayang-panakawan-v01-1LGv-V8N.webp",q=[me,ue,pe,xe],z=a=>q[[...a].reduce((t,o)=>t+o.charCodeAt(0),0)%q.length],V=["Jan","Feb","Mar","Apr","Mei","Jun","Jul","Agu","Sep","Okt","Nov","Des"],C=a=>String(a).padStart(2,"0");function je(){return g.useMemo(()=>typeof window<"u"&&!!window.matchMedia&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,[])}function Ne(){const[a,t]=g.useState(()=>new Date);return g.useEffect(()=>{const o=setInterval(()=>t(new Date),1e3);return()=>clearInterval(o)},[]),a}function ye(a,t){const[o,m]=g.useState(""),p=a.join("|");return g.useEffect(()=>{if(t||a.length===0){m(a[0]??"");return}let x=0,h=0,r=null,d=null;const l=()=>{const y=a[x%a.length]??"";h=0,r=setInterval(()=>{h++,m(y.slice(0,h)),h>=y.length&&r&&(clearInterval(r),r=null,d=setTimeout(()=>{x++,l()},3200))},26)};return l(),()=>{r&&clearInterval(r),d&&clearTimeout(d)}},[p,t]),o}function S(a,t){const[o,m]=g.useState(t?a:0);return g.useEffect(()=>{if(t){m(a);return}const p=performance.now(),x=900;let h=0;const r=d=>{const l=Math.min(1,(d-p)/x);m(Math.round(a*(1-Math.pow(1-l,3)))),l<1&&(h=requestAnimationFrame(r))};return h=requestAnimationFrame(r),()=>cancelAnimationFrame(h)},[a,t]),o}function M({icon:a,tone:t,label:o,value:m,sub:p}){return e.jsxs("div",{className:"hn-dlg-kpi",children:[e.jsx("span",{className:`hn-dlg-kpi-ic hn-dlg-tone-${t}`,children:e.jsx(E,{name:a,size:17})}),e.jsxs("span",{style:{minWidth:0},children:[e.jsx("span",{className:"hn-dlg-kpi-l",children:o}),e.jsx("span",{className:"hn-dlg-kpi-v",children:m}),e.jsx("span",{className:"hn-dlg-kpi-s",children:p})]})]})}function we({projects:a,backlog:t,sessions:o,onOpenSession:m,onOpenProject:p,onGoto:x,onExit:h}){const r=je(),d=Ne();g.useEffect(()=>{const n=s=>{s.key==="Escape"&&h()};return window.addEventListener("keydown",n),()=>window.removeEventListener("keydown",n)},[h]);const l=o.filter(n=>!n.exited).sort((n,s)=>n.id.localeCompare(s.id)),y=new Set(l.map(n=>n.projectId)),f=a.filter(n=>!y.has(n.id)),R=l.filter(n=>!!n.decision&&!n.deciding).length,F=t.filter(n=>ie(n.startedAt)).length,Q=S(a.length,r),X=S(F,r),Z=S(l.length,r),_=S(R,r),ee=ye([l.length>0?`HANOMAN ONLINE · ${l.length} SESI HIDUP`:"HANOMAN ONLINE · KELIR SUNYI",`${F} TASK DIKERJAKAN HARI INI`,R>0?`${R} SESI MENUNGGU JAWABANMU`:"SEMUA SISTEM NORMAL",`${a.length} PROYEK DALAM PANTAUAN`],r),j={done:0,executing:0,planned:0,spec:0};for(const n of t)n.stage==="done"?j.done++:n.stage==="executing"?j.executing++:n.stage==="planned"?j.planned++:j.spec++;const D=t.length,ne=[{key:"executing",cls:"wind",label:"Execute"},{key:"done",cls:"leaf",label:"Done"},{key:"planned",cls:"amber",label:"Plan"},{key:"spec",cls:"brass",label:"Spec"}];let L=0;const O=ne.map(n=>{const s=D?j[n.key]/D*100:0,u={...n,n:j[n.key],frac:s,offset:25-L};return L+=s,u}),v=[];for(let n=6;n>=0;n--){const s=new Date(d.getFullYear(),d.getMonth(),d.getDate()-n),u=t.filter(i=>{if(!i.startedAt)return!1;const c=new Date(i.startedAt);return c.getFullYear()===s.getFullYear()&&c.getMonth()===s.getMonth()&&c.getDate()===s.getDate()}).length;v.push({label:`${s.getDate()} ${V[s.getMonth()]}`,n:u})}const $=Math.max(1,...v.map(n=>n.n)),se=v.map((n,s)=>`${32+s*35},${78-n.n/$*60}`).join(" "),ae=`${l.map(n=>n.id).join("|")}#${f.map(n=>n.id).join("|")}`,H=g.useRef(null),[P,W]=g.useState([]);g.useLayoutEffect(()=>{const n=H.current;if(!n||l.length===0&&f.length===0){W([]);return}const s=()=>{var J;const i=n.getBoundingClientRect();if(i.width<60)return;const c=(J=n.querySelector(".hn-dlg-hero-art"))==null?void 0:J.getBoundingClientRect(),b=c?c.left+c.width/2-i.left:i.width/2,w={};n.querySelectorAll("[data-hand]").forEach(N=>{const A=N.getBoundingClientRect();w[N.dataset.hand??""]={x:A.left+A.width/2-i.left,y:A.top+A.height/2-i.top}});const k={x:b,y:c?c.top-i.top+c.height*.36:i.height*.35},G=[];n.querySelectorAll(".hn-dlg-prj").forEach(N=>{const U=(N.querySelector(".hn-dlg-puppet img")??N).getBoundingClientRect(),T=U.left+U.width/2-i.left,K=U.top-i.top+1,B=!N.hasAttribute("data-puppet"),te=T<b?"l":"r",I=w[(B?"m":"u")+te]??k,le=B?Math.max(I.y,K)+26:Math.min(I.y,K)-16;G.push({d:`M ${I.x.toFixed(1)} ${I.y.toFixed(1)} Q ${((I.x+T)/2).toFixed(1)} ${le.toFixed(1)}, ${T.toFixed(1)} ${K.toFixed(1)}`,slack:B})}),W(G)};if(s(),typeof ResizeObserver>"u")return;const u=new ResizeObserver(s);return u.observe(n),()=>u.disconnect()},[ae,l.length,f.length]);const Y=a.slice(0,6).map(n=>({id:n.id,name:n.name,text:n.activity,commit:n.commit,live:y.has(n.id)}));return e.jsxs("div",{className:"hn-dlg",children:[e.jsxs("div",{className:"hn-dlg-top hn-wrap-mobile",children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,minWidth:0},children:[e.jsx("img",{className:"hn-dlg-blencong",src:re,alt:"","aria-hidden":"true","data-lit":l.length>0||void 0}),e.jsxs("div",{style:{minWidth:0},children:[e.jsx("h2",{className:"hn-dlg-title",children:"Dalang Hanoman"}),e.jsx("p",{className:"hn-dlg-boot","aria-live":"off",children:ee})]})]}),e.jsxs("div",{className:"hn-dlg-chips",children:[e.jsxs("span",{className:"hn-dlg-chip",children:[e.jsx(E,{name:"calendar",size:13}),d.getDate()," ",V[d.getMonth()]," ",d.getFullYear()]}),e.jsxs("span",{className:"hn-dlg-chip",children:[e.jsx(E,{name:"clock",size:13}),C(d.getHours()),":",C(d.getMinutes()),":",C(d.getSeconds())]}),e.jsx("button",{type:"button",className:"hn-dlg-exit",onClick:h,"aria-label":"Keluar dari panggung (Esc)",children:e.jsx(E,{name:"x",size:14})})]})]}),e.jsxs("div",{className:"hn-dlg-kpis",children:[e.jsx(M,{icon:"layout-grid",tone:"wind",label:"TOTAL PROYEK",value:Q,sub:"dalam pantauan"}),e.jsx(M,{icon:"check-circle-2",tone:"leaf",label:"TASK HARI INI",value:X,sub:"mulai dikerjakan"}),e.jsx(M,{icon:"activity",tone:"brass",label:"SESI BERJALAN",value:Z,sub:"wayang dimainkan"}),e.jsx(M,{icon:"hand",tone:"amber",label:"MENUNGGU KAMU",value:_,sub:"butuh keputusan"})]}),e.jsxs("div",{className:"hn-dlg-grid hn-grid-mobile",children:[e.jsxs("div",{style:{minWidth:0},children:[e.jsxs("div",{className:"hn-dlg-hero",ref:H,children:[e.jsxs("svg",{className:"hn-dlg-hud",viewBox:"0 0 330 330","aria-hidden":"true",children:[e.jsx("g",{className:"hn-dlg-hud-a",children:e.jsx("circle",{cx:"165",cy:"165",r:"150",strokeDasharray:"3 14"})}),e.jsx("g",{className:"hn-dlg-hud-b",children:e.jsx("circle",{cx:"165",cy:"165",r:"126",strokeDasharray:"40 22"})})]}),P.length>0&&e.jsx("svg",{className:"hn-dlg-threads","aria-hidden":"true",focusable:"false",children:P.map((n,s)=>e.jsx("path",{d:n.d,className:n.slack?"hn-dlg-thread--slack":void 0,style:n.slack?void 0:{animationDelay:`${s%6*.3}s`}},s))}),e.jsx("div",{className:"hn-dlg-scan","aria-hidden":"true"}),e.jsxs("div",{className:"hn-dlg-hero-art","aria-hidden":"true",children:[e.jsx("img",{className:"hn-dlg-rig-arm hn-dlg-rig-arm--ul",src:ce,alt:""}),e.jsx("img",{className:"hn-dlg-rig-arm hn-dlg-rig-arm--ur",src:he,alt:""}),e.jsx("img",{className:"hn-dlg-rig-arm hn-dlg-rig-arm--ml",src:oe,alt:""}),e.jsx("img",{className:"hn-dlg-rig-arm hn-dlg-rig-arm--mr",src:ge,alt:""}),e.jsx("img",{className:"hn-dlg-rig-body",src:de,alt:""}),e.jsx("span",{className:"hn-dlg-hand","data-hand":"ul"}),e.jsx("span",{className:"hn-dlg-hand","data-hand":"ur"}),e.jsx("span",{className:"hn-dlg-hand","data-hand":"ml"}),e.jsx("span",{className:"hn-dlg-hand","data-hand":"mr"})]}),l.length>0||f.length>0?e.jsxs("div",{className:"hn-dlg-cards",role:"list","aria-label":"Wayang project",children:[l.map((n,s)=>{var w;const u=((w=a.find(k=>k.id===n.projectId))==null?void 0:w.name)??n.projectId,i=n.specId?t.find(k=>k.id===n.specId):void 0,c=!!n.decision&&!n.deciding,b=c?"menunggu jawabanmu":i?`${i.id} · ${i.stage}`:n.flow??"sesi terminal";return e.jsxs("button",{type:"button",className:"hn-dlg-prj","data-puppet":!0,"data-waiting":c||void 0,onClick:()=>m(n.id),"aria-label":`Buka terminal — ${u}, ${b}`,children:[e.jsx("span",{className:c?"hn-dlg-puppet hn-dlg-puppet--still":"hn-dlg-puppet",style:{animationDelay:`${s%6*.6}s`},children:e.jsx("img",{src:z(n.projectId),alt:"","aria-hidden":"true"})}),e.jsx("span",{className:"hn-dlg-prj-name",children:u}),e.jsx("span",{className:c?"hn-dlg-prj-sub hn-dlg-prj-sub--amber":"hn-dlg-prj-sub",children:b})]},n.id)}),f.map(n=>e.jsxs("button",{type:"button",className:"hn-dlg-prj hn-dlg-prj--off",onClick:()=>p(n),"aria-label":`Buka project ${n.name}`,children:[e.jsx("span",{className:"hn-dlg-puppet hn-dlg-puppet--still",children:e.jsx("img",{src:z(n.id),alt:"","aria-hidden":"true"})}),e.jsx("span",{className:"hn-dlg-prj-name",children:n.name}),e.jsx("span",{className:"hn-dlg-prj-sub hn-dlg-prj-sub--off",children:"tersandar di debog"})]},n.id))]}):e.jsxs("div",{className:"hn-dlg-empty",children:[e.jsx("div",{children:"Panggung sunyi — belum ada project di workspace."}),e.jsx("div",{children:"Tambahkan project dan sang dalang mengangkat wayangnya."})]})]}),e.jsxs("button",{type:"button",className:"hn-dlg-cmd",onClick:()=>x("terminal"),"aria-label":"Buka terminal — pusat kendali sesi",children:[e.jsx("span",{className:"hn-dlg-mic","aria-hidden":"true"}),e.jsxs("span",{className:"hn-dlg-cmd-t",children:[e.jsx("b",{children:"Perintah dalang"})," — buka Terminal untuk mengarahkan sesi yang berjalan…"]}),e.jsx("span",{className:"hn-dlg-cmd-k",children:"Terminal"})]})]}),e.jsxs("aside",{className:"hn-dlg-rail",children:[e.jsxs("div",{className:"hn-dlg-card",children:[e.jsx("div",{className:"hn-dlg-rt",children:"AKTIVITAS TERAKHIR"}),Y.length===0?e.jsx("div",{className:"hn-dlg-mut",children:"Belum ada project."}):Y.map(n=>e.jsxs("div",{className:"hn-dlg-act",children:[e.jsx("span",{className:n.live?"hn-dlg-dot hn-dlg-dot--on":"hn-dlg-dot"}),e.jsxs("span",{className:"hn-dlg-act-x",children:[e.jsx("b",{children:n.name})," ",n.text]})]},n.id))]}),e.jsxs("div",{className:"hn-dlg-card",children:[e.jsx("div",{className:"hn-dlg-rt",children:"DISTRIBUSI BACKLOG"}),e.jsxs("div",{className:"hn-dlg-donut-wrap",children:[e.jsxs("div",{className:"hn-dlg-donut",children:[e.jsxs("svg",{viewBox:"0 0 42 42",width:"112",height:"112","aria-hidden":"true",children:[e.jsx("circle",{className:"hn-dlg-ring",cx:"21",cy:"21",r:"15.9",strokeWidth:"5"}),O.map(n=>n.frac>0&&e.jsx("circle",{className:`hn-dlg-seg hn-dlg-seg--${n.cls}`,cx:"21",cy:"21",r:"15.9",strokeWidth:"5",strokeDasharray:`${n.frac} ${100-n.frac}`,strokeDashoffset:n.offset},n.key))]}),e.jsxs("div",{className:"hn-dlg-donut-c",children:[e.jsx("b",{children:D}),e.jsx("span",{children:"backlog"})]})]}),e.jsx("div",{className:"hn-dlg-leg",children:O.map(n=>e.jsxs("span",{children:[e.jsx("i",{className:`hn-dlg-seg--${n.cls}`}),n.label," ",e.jsx("b",{children:n.n})]},n.key))})]})]}),e.jsxs("div",{className:"hn-dlg-card",children:[e.jsx("div",{className:"hn-dlg-rt",children:"DIMULAI · 7 HARI"}),e.jsxs("svg",{viewBox:"0 0 260 100",className:"hn-dlg-chart","aria-hidden":"true",children:[e.jsx("line",{x1:"24",y1:"18",x2:"252",y2:"18"}),e.jsx("line",{x1:"24",y1:"48",x2:"252",y2:"48"}),e.jsx("line",{x1:"24",y1:"78",x2:"252",y2:"78"}),e.jsx("text",{x:"8",y:"21",children:$}),e.jsx("text",{x:"10",y:"81",children:"0"}),e.jsx("polyline",{className:"hn-dlg-trend",points:se}),v.map((n,s)=>e.jsx("circle",{cx:32+s*35,cy:78-n.n/$*60,r:"2.4"},s)),v.map((n,s)=>s%2===0?e.jsx("text",{x:22+s*35,y:"94",children:n.label},`l${s}`):null)]})]})]})]}),e.jsx("div",{className:"hn-dlg-foot",children:"◈ HANOMAN · ORKESTRASI CERDAS · EKSEKUSI SEMPURNA ◈"})]})}export{we as DalangHanomanScreen};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{j as e,M as r,ag as d,ah as a,f as x}from"./index-DSFIYjSl.js";import"./react-DfGhg7ZW.js";function m({path:i,text:o,eyebrow:n,download:t,onClose:s}){const l=i.slice(i.lastIndexOf("/")+1)||i;return e.jsx(r,{open:!0,title:l,eyebrow:n??i,icon:"book-open",onClose:s,width:980,fillHeight:!0,children:e.jsxs("div",{style:{display:"flex",flexDirection:"column",height:"100%",minHeight:0},children:[t&&e.jsx("div",{style:{display:"flex",justifyContent:"flex-end",paddingBottom:6,borderBottom:"1px solid var(--border-hair)",marginBottom:8},children:e.jsx(d,{href:t})}),e.jsx("div",{"data-testid":"doc-preview-scroll",style:{flex:"1 1 0",minHeight:0,overflow:"auto",padding:"0 4px 8px"},children:o?e.jsx(a,{text:o,name:i}):e.jsx(x,{kind:"empty",icon:"file-text",title:"Berkas kosong",hint:i})})]})})}export{m as D};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{h as re,u as oe,e as y,j as e,v as le,ac as T,a7 as de,a as j,f as b,at as ce,I as k,B as $,ag as xe,ah as A,p as pe,aj as ue}from"./index-DSFIYjSl.js";import{R as l}from"./react-DfGhg7ZW.js";import"./markdown-CWEY34jk.js";function J(s){let a={...s,kids:s.kids.map(J)};for(;!a.cat&&a.kids.length===1;){const i=a.kids[0];a={...i,label:a.label+"/"+i.label}}return a}function G(s){const a={path:"",kids:[]};for(const i of s){if(i.cat==="."){a.kids.push({path:".",label:".",cat:i,kids:[]});continue}let r=a;for(const x of i.cat.split("/")){const g=r.path?r.path+"/"+x:x;let d=r.kids.find(t=>t.path===g);d||(d={path:g,label:x,kids:[]},r.kids.push(d)),r=d}r.cat=i}return a.kids.map(J)}function O(s){const a=s.find(i=>i.scored&&i.linked)??s.find(i=>i.scored)??s[0];return a&&a.files[0]?`${a.cat}/${a.files[0]}`:""}function I({node:s,selected:a,onSelect:i,depth:r=0}){var h,u,p;const[x,g]=l.useState(!1),d=((h=s.cat)==null?void 0:h.scored)??!0,t=((u=s.cat)==null?void 0:u.linked)??!0;return e.jsxs("div",{style:r===0?{borderBottom:"1px solid var(--border-hair)"}:void 0,children:[e.jsxs("button",{onClick:()=>g(c=>!c),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"9px 6px",paddingLeft:6+r*12,border:"none",background:"transparent",cursor:"pointer",textAlign:"left"},children:[e.jsx(k,{name:x?"chevron-down":"chevron-right",size:14,color:"var(--text-subtle)"}),e.jsx(k,{name:"folder",size:15,color:d?t?"var(--brass-500)":"var(--clay-500)":"var(--text-subtle)"}),e.jsxs("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",fontWeight:500},children:[s.label,"/"]}),e.jsx("span",{style:{flex:1}}),s.cat&&d&&(s.cat.linked?e.jsx(k,{name:"link",size:13,color:"var(--leaf-600)"}):e.jsx(k,{name:"unlink",size:13,color:"var(--clay-500)"}))]}),x&&e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:1,paddingBottom:4},children:[s.kids.map(c=>e.jsx(I,{node:c,selected:a,onSelect:i,depth:r+1},c.path)),(p=s.cat)==null?void 0:p.files.map(c=>{const f=s.path+"/"+c,v=f===a;return e.jsxs("button",{onClick:()=>i(f),style:{display:"flex",alignItems:"center",gap:8,width:"100%",padding:"6px 8px",paddingLeft:18+r*12,borderRadius:"var(--radius-sm)",border:"none",cursor:"pointer",textAlign:"left",background:v?"var(--brass-100)":"transparent"},children:[e.jsx(k,{name:"file-text",size:13,color:v?"var(--brass-700)":"var(--text-subtle)"}),e.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:v?"var(--brass-700)":!d||t?"var(--text-body)":"var(--text-muted)",fontWeight:v?600:400},children:c})]},c)})]})]})}function ge({projectId:s,projectName:a,docStatus:i}){const[r,x]=l.useState([]),[g,d]=l.useState(0),[t,h]=re(ue("docs",s),"selected","",pe),[u,p]=l.useState({}),[c,f]=l.useState("preview"),[v,F]=l.useState("tree"),[w,M]=l.useState(""),[S,P]=l.useState(!1),{confirm:K,dialog:U}=oe(),[H,z]=l.useState("loading"),[V,q]=l.useState(0);l.useEffect(()=>{let n=!0;return z("loading"),y.getDocs(s).then(o=>{if(!n)return;const m=o.tree;x(m),d(o.coverage),p({}),f("preview"),z("ready"),h(O(m))}).catch(()=>{n&&(x([]),h(""),z("error"))}),()=>{n=!1}},[s,V]),l.useEffect(()=>{if(!t||t in u)return;let n=!0;return y.getDoc(s,t).then(o=>{n&&p(m=>({...m,[t]:o.content}))}).catch(()=>{n&&p(o=>({...o,[t]:null}))}),()=>{n=!1}},[t,s,u]);const D=!!t&&!(t in u),C=t?u[t]===null:!1,Q=()=>p(n=>{const o={...n};return delete o[t],o}),X=l.useMemo(()=>G(r.filter(n=>n.scored)),[r]),L=l.useMemo(()=>G(r.filter(n=>!n.scored)),[r]),N=u[t]??"",Y=t.includes("/")?t.slice(0,t.lastIndexOf("/")):".",B=r.find(n=>n.cat===Y),Z=t,_=i==="broken"?"err":i==="drift"?"warn":"ok",ee=i==="broken"?"broken":i==="drift"?"drift":"ok";function te(){M(N),f("edit")}function ne(){f("preview")}async function se(){await y.putDoc(s,t,w),p(n=>({...n,[t]:w})),f("preview")}function E(n){h(n),f("preview"),F("viewer")}async function R(){const n=await y.getDocs(s),o=n.tree;x(o),d(n.coverage),o.some(m=>m.files.some(ie=>`${m.cat}/${ie}`===t))||h(O(o))}async function W(){if(!S){P(!0);try{await R()}finally{P(!1)}}}async function ae(){t&&await K({title:`Hapus ${t}?`,message:"Berkas aslinya di disk ikut dihapus — dokumen ini adalah Source of Truth project.",confirmLabel:"Hapus dokumen",run:()=>y.deleteDoc(s,t)})&&(p(n=>{const o={...n};return delete o[t],o}),await R())}return e.jsxs(e.Fragment,{children:[e.jsx(le,{ariaLabel:"Panel Docs",active:v,onActiveChange:n=>F(n),masterWidth:288,className:"hn-workspace-panels",panels:[{id:"tree",label:"Files",className:"hn-panel-flex",content:e.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16,minHeight:0,overflow:"auto"},children:[e.jsxs(T,{padding:0,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:8,padding:"12px 14px",borderBottom:"1px solid var(--border-hair)"},children:[e.jsxs("span",{className:"hn-eyebrow",children:["docs · ",a]}),e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx(de,{status:ee,size:"sm"}),e.jsx(j,{size:"sm",variant:"ghost",leftIcon:S?"loader":"radar",onClick:W,disabled:S,children:S?"…":"Muat ulang"})]})]}),e.jsx("div",{style:{padding:"4px 8px"},children:H==="loading"?e.jsx(b,{kind:"loading",compact:!0,title:"Memuat index…"}):H==="error"?e.jsx(b,{kind:"error",compact:!0,title:"Gagal memuat index docs",hint:a,action:()=>q(n=>n+1)}):r.length===0?e.jsx(b,{kind:"empty",compact:!0,icon:"folder-open",title:"Belum ada docs",hint:"Belum ada Markdown di repo ini.",action:W,actionLabel:"Muat ulang",actionIcon:"radar"}):e.jsxs(e.Fragment,{children:[X.map(n=>e.jsx(I,{node:n,selected:t,onSelect:E},n.path)),L.length>0&&e.jsxs("div",{style:{marginTop:8,paddingTop:8,borderTop:"1px solid var(--border-hair)"},children:[e.jsx("div",{className:"hn-eyebrow",style:{padding:"4px 6px",color:"var(--text-subtle)"},children:"Lainnya (tidak dinilai)"}),L.map(n=>e.jsx(I,{node:n,selected:t,onSelect:E},n.path))]})]})})]}),e.jsxs(T,{padding:16,children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:12},children:[e.jsx("span",{className:"hn-eyebrow",children:"SoT coverage"}),e.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-muted)"},children:a})]}),e.jsx(ce,{value:g,showLabel:!0,label:"Kategori ter-index",tone:_})]})]})},{id:"viewer",label:"Dokumen",className:"hn-panel-flex",content:e.jsxs(T,{padding:0,fill:!0,children:[e.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"center",gap:12,padding:"12px 16px",borderBottom:"1px solid var(--border-hair)",flexWrap:"wrap"},children:[e.jsx(k,{name:"file-text",size:15,color:"var(--text-muted)"}),e.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:13,color:"var(--text-strong)",fontWeight:500},children:Z}),B&&B.scored&&(B.linked?e.jsx($,{tone:"ok",size:"sm",icon:"link",children:"indexed"}):e.jsx($,{tone:"err",size:"sm",icon:"unlink",children:"unlinked"})),e.jsx("span",{style:{flex:1}}),c==="preview"?e.jsxs("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[e.jsx(xe,{href:n=>y.docDownloadUrl(s,t,n),disabled:!t||D||C}),e.jsx(j,{size:"sm",variant:"ghost",leftIcon:"trash-2",onClick:ae,disabled:!t,children:"Hapus"}),e.jsx(j,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:te,disabled:!t||D||C,children:"Edit"})]}):e.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[e.jsx(j,{size:"sm",variant:"ghost",onClick:ne,children:"Batal"}),e.jsx(j,{size:"sm",leftIcon:"check",onClick:se,children:"Simpan"})]})]}),c==="preview"?e.jsx("div",{"data-testid":"doc-preview-scroll",style:{padding:"8px 30px 34px",flex:"1 1 auto",minHeight:0,overflow:"auto"},children:t?D?e.jsx(b,{kind:"loading",title:"Memuat dokumen…",hint:t}):C?e.jsx(b,{kind:"error",title:"Gagal memuat dokumen",hint:t,action:Q}):e.jsx(A,{text:N,name:t}):e.jsx(b,{kind:"empty",icon:"file-text",title:"Tidak ada dokumen dipilih",hint:"Pilih file dari pohon docs di kiri."})}):e.jsxs("div",{className:"hn-grid-mobile",style:{display:"grid",gridTemplateColumns:"1fr 1fr",flex:"1 1 auto",minHeight:0},children:[e.jsxs("div",{style:{display:"flex",flexDirection:"column",borderRight:"1px solid var(--border-hair)",minHeight:0},children:[e.jsx("div",{style:{padding:"8px 14px",borderBottom:"1px solid var(--border-hair)",background:"var(--bone-100)"},children:e.jsx("span",{className:"hn-eyebrow",children:"Markdown"})}),e.jsx("textarea",{value:w,onChange:n=>M(n.target.value),spellCheck:!1,placeholder:`# Judul dokumen
|
|
2
|
+
|
|
3
|
+
Paragraf pembuka…`,style:{flex:1,width:"100%",boxSizing:"border-box",resize:"none",border:"none",outline:"none",padding:"16px 18px",fontFamily:"var(--font-mono)",fontSize:12.5,lineHeight:1.7,color:"var(--text-body)",background:"var(--surface-card)"}})]}),e.jsxs("div",{style:{display:"flex",flexDirection:"column",minHeight:0},children:[e.jsx("div",{style:{padding:"8px 14px",borderBottom:"1px solid var(--border-hair)",background:"var(--bone-100)"},children:e.jsx("span",{className:"hn-eyebrow",children:"Preview langsung"})}),e.jsx("div",{style:{flex:1,overflow:"auto",padding:"4px 24px 24px"},children:e.jsx(A,{text:w,name:t})})]})]})]})}]}),U]})}export{ge as DocsWorkspace,G as buildTree,O as firstDoc};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
|
|
2
|
+
Theme: GitHub
|
|
3
|
+
Description: Light theme as seen on github.com
|
|
4
|
+
Author: github.com
|
|
5
|
+
Maintainer: @Hirse
|
|
6
|
+
Updated: 2021-05-15
|
|
7
|
+
|
|
8
|
+
Outdated base version: https://github.com/primer/github-syntax-light
|
|
9
|
+
Current colors taken from GitHub's CSS
|
|
10
|
+
*/.hljs{color:#24292e;background:#fff}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#005cc5}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-comment,.hljs-code,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{color:#22863a;background-color:#f0fff4}.hljs-deletion{color:#b31d28;background-color:#ffeef0}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a2 as Zt,a1 as Yt,e as M,q as Vt,j as t,f as Y,l as St,ac as Oe,I as Fe,a as L,ad as _e,ae as qt,B as ae,M as Qe,af as qe,ag as Ct,ah as Nt,d as ot,S as Xe,ai as vt,C as At,h as xe,u as Xt,aj as Rt,o as Ze,v as Qt,p as pt,a5 as Jt,$ as Ye}from"./index-DSFIYjSl.js";import{R as h}from"./react-DfGhg7ZW.js";import{H as bt}from"./highlight-HK3IjCTX.js";import{D as en}from"./DocPreviewModal-DrVk9Jat.js";import{L as tn}from"./live-BhsIWS2g.js";import{b as Tt,T as Mt,D as Ot,C as kt}from"./diff-view-Brg2N-Y9.js";import"./markdown-CWEY34jk.js";const lt="[A-Za-z$_][0-9A-Za-z$_]*",It=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],jt=["true","false","null","undefined","NaN","Infinity"],Lt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],zt=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],$t=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Dt=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],Bt=[].concat($t,Lt,zt);function nn(n){const r=n.regex,a=(j,{after:F})=>{const A="</"+j[0].slice(1);return j.input.indexOf(A,F)!==-1},s=lt,l={begin:"<>",end:"</>"},f=/<[A-Za-z0-9\\._:-]+\s*\/>/,x={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(j,F)=>{const A=j[0].length+j.index,D=j.input[A];if(D==="<"||D===","){F.ignoreMatch();return}D===">"&&(a(j,{after:A})||F.ignoreMatch());let B;const q=j.input.substring(A);if(B=q.match(/^\s*=/)){F.ignoreMatch();return}if((B=q.match(/^\s+extends\s+/))&&B.index===0){F.ignoreMatch();return}}},v={$pattern:lt,keyword:It,literal:jt,built_in:Bt,"variable.language":Dt},_="[0-9](_?[0-9])*",k=`\\.(${_})`,i="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",N={className:"number",variants:[{begin:`(\\b(${i})((${k})|\\.)?|(${k}))[eE][+-]?(${_})\\b`},{begin:`\\b(${i})\\b((${k})\\b|\\.)?|(${k})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:v,contains:[]},u={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},c={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"css"}},g={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"graphql"}},d={className:"string",begin:"`",end:"`",contains:[n.BACKSLASH_ESCAPE,o]},E={className:"comment",variants:[n.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:s+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),n.C_BLOCK_COMMENT_MODE,n.C_LINE_COMMENT_MODE]},C=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,u,c,g,d,{match:/\$\d+/},N];o.contains=C.concat({begin:/\{/,end:/\}/,keywords:v,contains:["self"].concat(C)});const w=[].concat(E,o.contains),R=w.concat([{begin:/(\s*)\(/,end:/\)/,keywords:v,contains:["self"].concat(w)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:v,contains:R},Z={variants:[{match:[/class/,/\s+/,s,/\s+/,/extends/,/\s+/,r.concat(s,"(",r.concat(/\./,s),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,s],scope:{1:"keyword",3:"title.class"}}]},T={relevance:0,match:r.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Lt,...zt]}},G={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},P={variants:[{match:[/function/,/\s+/,s,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},W={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function p(j){return r.concat("(?!",j.join("|"),")")}const I={match:r.concat(/\b/,p([...$t,"super","import"].map(j=>`${j}\\s*\\(`)),s,r.lookahead(/\s*\(/)),className:"title.function",relevance:0},$={begin:r.concat(/\./,r.lookahead(r.concat(s,/(?![0-9A-Za-z$_(])/))),end:s,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},V={match:[/get|set/,/\s+/,s,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},X="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+n.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,s,/\s*/,/=\s*/,/(async\s*)?/,r.lookahead(X)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:v,exports:{PARAMS_CONTAINS:R,CLASS_REFERENCE:T},illegal:/#(?![$_A-z])/,contains:[n.SHEBANG({label:"shebang",binary:"node",relevance:5}),G,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,u,c,g,d,E,{match:/\$\d+/},N,T,{scope:"attr",match:s+r.lookahead(":"),relevance:0},Q,{begin:"("+n.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[E,n.REGEXP_MODE,{className:"function",begin:X,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:v,contains:R}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:l.begin,end:l.end},{match:f},{begin:x.begin,"on:begin":x.isTrulyOpeningTag,end:x.end}],subLanguage:"xml",contains:[{begin:x.begin,end:x.end,skip:!0,contains:["self"]}]}]},P,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+n.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,n.inherit(n.TITLE_MODE,{begin:s,className:"title.function"})]},{match:/\.\.\./,relevance:0},$,{match:"\\$"+s,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},I,W,Z,V,{match:/\$[(.]/}]}}function an(n){const r=n.regex,a=nn(n),s=lt,l=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],f={begin:[/namespace/,/\s+/,n.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},x={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:l},contains:[a.exports.CLASS_REFERENCE]},v={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},_=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],k={$pattern:lt,keyword:It.concat(_),literal:jt,built_in:Bt.concat(l),"variable.language":Dt},i={className:"meta",begin:"@"+s},N=(g,d,S)=>{const E=g.contains.findIndex(C=>C.label===d);if(E===-1)throw new Error("can not find mode to replace");g.contains.splice(E,1,S)};Object.assign(a.keywords,k),a.exports.PARAMS_CONTAINS.push(i);const o=a.contains.find(g=>g.scope==="attr"),u=Object.assign({},o,{match:r.concat(s,r.lookahead(/\s*\?:/))});a.exports.PARAMS_CONTAINS.push([a.exports.CLASS_REFERENCE,o,u]),a.contains=a.contains.concat([i,f,x,u]),N(a,"shebang",n.SHEBANG()),N(a,"use_strict",v);const c=a.contains.find(g=>g.label==="func.def");return c.relevance=0,Object.assign(a,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),a}const wt="[A-Za-z$_][0-9A-Za-z$_]*",rn=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],sn=["true","false","null","undefined","NaN","Infinity"],Pt=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],Ft=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ut=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],on=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ln=[].concat(Ut,Pt,Ft);function cn(n){const r=n.regex,a=(j,{after:F})=>{const A="</"+j[0].slice(1);return j.input.indexOf(A,F)!==-1},s=wt,l={begin:"<>",end:"</>"},f=/<[A-Za-z0-9\\._:-]+\s*\/>/,x={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(j,F)=>{const A=j[0].length+j.index,D=j.input[A];if(D==="<"||D===","){F.ignoreMatch();return}D===">"&&(a(j,{after:A})||F.ignoreMatch());let B;const q=j.input.substring(A);if(B=q.match(/^\s*=/)){F.ignoreMatch();return}if((B=q.match(/^\s+extends\s+/))&&B.index===0){F.ignoreMatch();return}}},v={$pattern:wt,keyword:rn,literal:sn,built_in:ln,"variable.language":on},_="[0-9](_?[0-9])*",k=`\\.(${_})`,i="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",N={className:"number",variants:[{begin:`(\\b(${i})((${k})|\\.)?|(${k}))[eE][+-]?(${_})\\b`},{begin:`\\b(${i})\\b((${k})\\b|\\.)?|(${k})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},o={className:"subst",begin:"\\$\\{",end:"\\}",keywords:v,contains:[]},u={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},c={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"css"}},g={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[n.BACKSLASH_ESCAPE,o],subLanguage:"graphql"}},d={className:"string",begin:"`",end:"`",contains:[n.BACKSLASH_ESCAPE,o]},E={className:"comment",variants:[n.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:s+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),n.C_BLOCK_COMMENT_MODE,n.C_LINE_COMMENT_MODE]},C=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,u,c,g,d,{match:/\$\d+/},N];o.contains=C.concat({begin:/\{/,end:/\}/,keywords:v,contains:["self"].concat(C)});const w=[].concat(E,o.contains),R=w.concat([{begin:/(\s*)\(/,end:/\)/,keywords:v,contains:["self"].concat(w)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:v,contains:R},Z={variants:[{match:[/class/,/\s+/,s,/\s+/,/extends/,/\s+/,r.concat(s,"(",r.concat(/\./,s),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,s],scope:{1:"keyword",3:"title.class"}}]},T={relevance:0,match:r.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Pt,...Ft]}},G={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},P={variants:[{match:[/function/,/\s+/,s,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},W={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function p(j){return r.concat("(?!",j.join("|"),")")}const I={match:r.concat(/\b/,p([...Ut,"super","import"].map(j=>`${j}\\s*\\(`)),s,r.lookahead(/\s*\(/)),className:"title.function",relevance:0},$={begin:r.concat(/\./,r.lookahead(r.concat(s,/(?![0-9A-Za-z$_(])/))),end:s,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},V={match:[/get|set/,/\s+/,s,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},X="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+n.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,s,/\s*/,/=\s*/,/(async\s*)?/,r.lookahead(X)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:v,exports:{PARAMS_CONTAINS:R,CLASS_REFERENCE:T},illegal:/#(?![$_A-z])/,contains:[n.SHEBANG({label:"shebang",binary:"node",relevance:5}),G,n.APOS_STRING_MODE,n.QUOTE_STRING_MODE,u,c,g,d,E,{match:/\$\d+/},N,T,{scope:"attr",match:s+r.lookahead(":"),relevance:0},Q,{begin:"("+n.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[E,n.REGEXP_MODE,{className:"function",begin:X,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:v,contains:R}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:l.begin,end:l.end},{match:f},{begin:x.begin,"on:begin":x.isTrulyOpeningTag,end:x.end}],subLanguage:"xml",contains:[{begin:x.begin,end:x.end,skip:!0,contains:["self"]}]}]},P,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+n.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,n.inherit(n.TITLE_MODE,{begin:s,className:"title.function"})]},{match:/\.\.\./,relevance:0},$,{match:"\\$"+s,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},I,W,Z,V,{match:/\$[(.]/}]}}function dn(n){const r={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s=["true","false","null"],l={scope:"literal",beginKeywords:s.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:s},contains:[r,a,n.QUOTE_STRING_MODE,l,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function un(n){const r=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},s={begin:"^[-\\*]{3,}",end:"$"},l={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},f={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},x={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},v=/[A-Za-z][A-Za-z0-9+.-]*/,_={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:r.concat(/\[.+?\]\(/,v,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},k={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},N=n.inherit(k,{contains:[]}),o=n.inherit(i,{contains:[]});k.contains.push(o),i.contains.push(N);let u=[a,_];return[k,i,N,o].forEach(S=>{S.contains=S.contains.concat(u)}),u=u.concat(k,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:u},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:u}]}]},a,f,k,i,{className:"quote",begin:"^>\\s+",contains:u,end:"$"},l,s,_,x,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}const mn=n=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:n.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:n.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),gn=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],hn=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],pn=[...gn,...hn],fn=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),bn=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),xn=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),yn=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function vn(n){const r=n.regex,a=mn(n),s={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l="and or not only",f=/@-?\w[\w]*(-\w+)*/,x="[a-zA-Z-][a-zA-Z0-9_-]*",v=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[a.BLOCK_COMMENT,s,a.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+x,relevance:0},a.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+bn.join("|")+")"},{begin:":(:)?("+xn.join("|")+")"}]},a.CSS_VARIABLE,{className:"attribute",begin:"\\b("+yn.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[a.BLOCK_COMMENT,a.HEXCOLOR,a.IMPORTANT,a.CSS_NUMBER_MODE,...v,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...v,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},a.FUNCTION_DISPATCH]},{begin:r.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:f},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:l,attribute:fn.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...v,a.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+pn.join("|")+")\\b"}]}}function kn(n){const r=n.regex,a=r.concat(/[\p{L}_]/u,r.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s=/[\p{L}0-9._:-]+/u,l={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},f={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},x=n.inherit(f,{begin:/\(/,end:/\)/}),v=n.inherit(n.APOS_STRING_MODE,{className:"string"}),_=n.inherit(n.QUOTE_STRING_MODE,{className:"string"}),k={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:s,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[l]},{begin:/'/,end:/'/,contains:[l]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[f,_,v,x,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[f,x,_,v]}]}]},n.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},l,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[_]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[k],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[k],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:r.concat(/</,r.lookahead(r.concat(a,r.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:a,relevance:0,starts:k}]},{className:"tag",begin:r.concat(/<\//,r.lookahead(r.concat(a,/>/))),contains:[{className:"name",begin:a,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function wn(n){const r=n.regex,a={},s={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[a]}]};Object.assign(a,{className:"variable",variants:[{begin:r.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},s]});const l={className:"subst",begin:/\$\(/,end:/\)/,contains:[n.BACKSLASH_ESCAPE]},f=n.inherit(n.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),x={begin:/<<-?\s*(?=\w+)/,starts:{contains:[n.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},v={className:"string",begin:/"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,a,l]};l.contains.push(v);const _={match:/\\"/},k={className:"string",begin:/'/,end:/'/},i={match:/\\'/},N={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},n.NUMBER_MODE,a]},o=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],u=n.SHEBANG({binary:`(${o.join("|")})`,relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[n.inherit(n.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},g=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],d=["true","false"],S={match:/(\/[a-z._-]+)+/},E=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],C=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],w=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],R=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:g,literal:d,built_in:[...E,...C,"set","shopt",...w,...R]},contains:[u,n.SHEBANG(),c,N,f,x,S,v,_,k,i,a]}}function _n(n){const r=n.regex,a=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),s=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],v={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:s,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},_={className:"meta",begin:/^(>>>|\.\.\.) /},k={className:"subst",begin:/\{/,end:/\}/,keywords:v,illegal:/#/},i={begin:/\{\{/,relevance:0},N={className:"string",contains:[n.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,_],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,_],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[n.BACKSLASH_ESCAPE,_,i,k]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[n.BACKSLASH_ESCAPE,_,i,k]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[n.BACKSLASH_ESCAPE,i,k]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[n.BACKSLASH_ESCAPE,i,k]},n.APOS_STRING_MODE,n.QUOTE_STRING_MODE]},o="[0-9](_?[0-9])*",u=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,c=`\\b|${s.join("|")}`,g={className:"number",relevance:0,variants:[{begin:`(\\b(${o})|(${u}))[eE][+-]?(${o})[jJ]?(?=${c})`},{begin:`(${u})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${c})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${c})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${c})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${c})`},{begin:`\\b(${o})[jJ](?=${c})`}]},d={className:"comment",begin:r.lookahead(/# type:/),end:/$/,keywords:v,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},S={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:v,contains:["self",_,g,N,n.HASH_COMMENT_MODE]}]};return k.contains=[N,g,_],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:v,illegal:/(<\/|\?)|=>/,contains:[_,g,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},N,d,n.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,a],scope:{1:"keyword",3:"title.function"},contains:[S]},{variants:[{match:[/\bclass/,/\s+/,a,/\s*/,/\(\s*/,a,/\s*\)/]},{match:[/\bclass/,/\s+/,a]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[g,S,N]}]}}function En(n){const r="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},l={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},f={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},x={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[n.BACKSLASH_ESCAPE,l]},v=n.inherit(x,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),o={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},u={end:",",endsWithParent:!0,excludeEnd:!0,keywords:r,relevance:0},c={begin:/\{/,end:/\}/,contains:[u],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]",contains:[u],illegal:"\\n",relevance:0},d=[s,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type",begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a},{className:"meta",begin:"&"+n.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+n.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},n.HASH_COMMENT_MODE,{beginKeywords:r,keywords:{literal:r}},o,{className:"number",begin:n.C_NUMBER_RE+"\\b",relevance:0},c,g,f,x],S=[...d];return S.pop(),S.push(v),u.contains=S,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:d}}function Sn(n){const r=n.regex,a=n.COMMENT("--","$"),s={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},l={begin:/"/,end:/"/,contains:[{match:/""/}]},f=["true","false","unknown"],x=["double precision","large object","with timezone","without timezone"],v=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],_=["add","asc","collation","desc","final","first","last","view"],k=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],N=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],o=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],u=i,c=[...k,..._].filter(R=>!i.includes(R)),g={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},d={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},S={match:r.concat(/\b/,r.either(...u),/\s*\(/),relevance:0,keywords:{built_in:u}};function E(R){return r.concat(/\b/,r.either(...R.map(O=>O.replace(/\s+/,"\\s+"))),/\b/)}const C={scope:"keyword",match:E(o),relevance:0};function w(R,{exceptions:O,when:Z}={}){const T=Z;return O=O||[],R.map(G=>G.match(/\|\d+$/)||O.includes(G)?G:T(G)?`${G}|0`:G)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:w(c,{when:R=>R.length<3}),literal:f,type:v,built_in:N},contains:[{scope:"type",match:E(x)},C,S,g,s,l,n.C_NUMBER_MODE,n.C_BLOCK_COMMENT_MODE,a,d]}}function Cn(n){const r=n.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:r.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:r.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}function _t(n){const r=[],a=[];for(const s of n){let l=a.indexOf(s.sha);for(l===-1&&(l=a.indexOf(null),l===-1&&(l=a.length,a.push(null))),a[l]=null,s.parents.forEach((f,x)=>{if(a.indexOf(f)!==-1)return;if(x===0){a[l]=f;return}let v=a.indexOf(null);v===-1&&(v=a.length,a.push(null)),a[v]=f});a.length&&a[a.length-1]===null;)a.pop();r.push({commit:s,lane:l,lanes:[...a],width:Math.max(a.length,l+1)})}return r}function Nn(n){return n.map((r,a)=>{const s=a>0?n[a-1].lanes:[],l=r.lanes,f=r.commit.sha,x=[],v=s.indexOf(f);v!==-1&&x.push({fromLane:v,toLane:r.lane,half:"top",colorLane:r.lane});for(const _ of r.commit.parents){const k=l.indexOf(_);k!==-1&&x.push({fromLane:r.lane,toLane:k,half:"bottom",colorLane:k})}return s.forEach((_,k)=>{if(!_||_===f)return;const i=l.indexOf(_);i!==-1&&x.push({fromLane:k,toLane:i,half:"full",colorLane:i})}),x})}const An={rocket:"🚀",sparkles:"✨",bug:"🐛",fire:"🔥",tada:"🎉",boom:"💥",wrench:"🔧",memo:"📝",art:"🎨",zap:"⚡",lock:"🔒",recycle:"♻️",construction:"🚧",white_check_mark:"✅",ambulance:"🚑",bookmark:"🔖",green_heart:"💚",arrow_up:"⬆️",arrow_down:"⬇️",pushpin:"📌",wastebasket:"🗑️",heavy_plus_sign:"➕",heavy_minus_sign:"➖",pencil2:"✏️",rewind:"⏪",twisted_rightwards_arrows:"🔀",package:"📦",alien:"👽",truck:"🚚",page_facing_up:"📄",bulb:"💡",beers:"🍻",speech_balloon:"💬",card_file_box:"🗃️",loud_sound:"🔊",mute:"🔇",see_no_evil:"🙈",camera_flash:"📸",label:"🏷️",seedling:"🌱",dizzy:"💫",adhesive_bandage:"🩹"};function xt(n){return n.replace(/:([a-z0-9_+-]+):/g,(r,a)=>An[a]??r)}function Rn(n,r=24){return`https://www.gravatar.com/avatar/${In((n||"").trim().toLowerCase())}?s=${r}&d=identicon`}function Tn(n,r){const a=[],s=/(https?:\/\/[^\s]+)|(#\d+)|(\b[0-9a-f]{7,40}\b)/g;let l=0,f,x=0;for(;f=s.exec(n);){f.index>l&&a.push(n.slice(l,f.index));const v=(_,k)=>h.createElement("a",{key:x++,href:_,target:"_blank",rel:"noreferrer",style:{color:"var(--brass-700)"}},k);f[1]?a.push(v(f[1],f[1])):f[2]&&r?a.push(v(r.replace("$1",f[2].slice(1)),f[2])):f[2]?a.push(f[2]):f[3]&&a.push(h.createElement("span",{key:x++,style:{fontFamily:"var(--font-mono)",color:"var(--text-muted)"}},f[3])),l=s.lastIndex}return l<n.length&&a.push(n.slice(l)),a}function Mn(n,r={}){const a=r.emoji===!1?n:xt(n),s=Tn(a,r.issuePattern);return r.markdown===!1?s:s.flatMap(l=>typeof l=="string"?On(l):[l])}function On(n){const r=[],a=/\*\*([^*]+)\*\*|\*([^*]+)\*|`([^`]+)`/g;let s=0,l,f=0;for(;l=a.exec(n);)l.index>s&&r.push(n.slice(s,l.index)),l[1]?r.push(h.createElement("strong",{key:f++},l[1])):l[2]?r.push(h.createElement("em",{key:f++},l[2])):l[3]&&r.push(h.createElement("code",{key:f++,style:{fontFamily:"var(--font-mono)",background:"var(--bone-100)",padding:"0 3px",borderRadius:3}},l[3])),s=a.lastIndex;return s<n.length&&r.push(n.slice(s)),r}function In(n){function r(d,S){return d<<S|d>>>32-S}function a(d,S){const E=(d&65535)+(S&65535);return(d>>16)+(S>>16)+(E>>16)<<16|E&65535}function s(d,S,E,C,w,R){return a(r(a(a(S,d),a(C,R)),w),E)}function l(d,S,E,C,w,R,O){return s(S&E|~S&C,d,S,w,R,O)}function f(d,S,E,C,w,R,O){return s(S&C|E&~C,d,S,w,R,O)}function x(d,S,E,C,w,R,O){return s(S^E^C,d,S,w,R,O)}function v(d,S,E,C,w,R,O){return s(E^(S|~C),d,S,w,R,O)}function _(d){const S=d.length,E=[];for(let C=0;C<S*8;C+=8)E[C>>5]=(E[C>>5]??0)|(d.charCodeAt(C/8)&255)<<C%32;return E}function k(d){let S="";for(let E=0;E<d.length*4;E++)S+=((d[E>>2]??0)>>E%4*8+4&15).toString(16)+((d[E>>2]??0)>>E%4*8&15).toString(16);return S}const i=_(n),N=n.length*8;i[N>>5]=(i[N>>5]??0)|128<<N%32,i[(N+64>>>9<<4)+14]=N;let o=1732584193,u=-271733879,c=-1732584194,g=271733878;for(let d=0;d<i.length;d+=16){const S=o,E=u,C=c,w=g;o=l(o,u,c,g,i[d]||0,7,-680876936),g=l(g,o,u,c,i[d+1]||0,12,-389564586),c=l(c,g,o,u,i[d+2]||0,17,606105819),u=l(u,c,g,o,i[d+3]||0,22,-1044525330),o=l(o,u,c,g,i[d+4]||0,7,-176418897),g=l(g,o,u,c,i[d+5]||0,12,1200080426),c=l(c,g,o,u,i[d+6]||0,17,-1473231341),u=l(u,c,g,o,i[d+7]||0,22,-45705983),o=l(o,u,c,g,i[d+8]||0,7,1770035416),g=l(g,o,u,c,i[d+9]||0,12,-1958414417),c=l(c,g,o,u,i[d+10]||0,17,-42063),u=l(u,c,g,o,i[d+11]||0,22,-1990404162),o=l(o,u,c,g,i[d+12]||0,7,1804603682),g=l(g,o,u,c,i[d+13]||0,12,-40341101),c=l(c,g,o,u,i[d+14]||0,17,-1502002290),u=l(u,c,g,o,i[d+15]||0,22,1236535329),o=f(o,u,c,g,i[d+1]||0,5,-165796510),g=f(g,o,u,c,i[d+6]||0,9,-1069501632),c=f(c,g,o,u,i[d+11]||0,14,643717713),u=f(u,c,g,o,i[d]||0,20,-373897302),o=f(o,u,c,g,i[d+5]||0,5,-701558691),g=f(g,o,u,c,i[d+10]||0,9,38016083),c=f(c,g,o,u,i[d+15]||0,14,-660478335),u=f(u,c,g,o,i[d+4]||0,20,-405537848),o=f(o,u,c,g,i[d+9]||0,5,568446438),g=f(g,o,u,c,i[d+14]||0,9,-1019803690),c=f(c,g,o,u,i[d+3]||0,14,-187363961),u=f(u,c,g,o,i[d+8]||0,20,1163531501),o=f(o,u,c,g,i[d+13]||0,5,-1444681467),g=f(g,o,u,c,i[d+2]||0,9,-51403784),c=f(c,g,o,u,i[d+7]||0,14,1735328473),u=f(u,c,g,o,i[d+12]||0,20,-1926607734),o=x(o,u,c,g,i[d+5]||0,4,-378558),g=x(g,o,u,c,i[d+8]||0,11,-2022574463),c=x(c,g,o,u,i[d+11]||0,16,1839030562),u=x(u,c,g,o,i[d+14]||0,23,-35309556),o=x(o,u,c,g,i[d+1]||0,4,-1530992060),g=x(g,o,u,c,i[d+4]||0,11,1272893353),c=x(c,g,o,u,i[d+7]||0,16,-155497632),u=x(u,c,g,o,i[d+10]||0,23,-1094730640),o=x(o,u,c,g,i[d+13]||0,4,681279174),g=x(g,o,u,c,i[d]||0,11,-358537222),c=x(c,g,o,u,i[d+3]||0,16,-722521979),u=x(u,c,g,o,i[d+6]||0,23,76029189),o=x(o,u,c,g,i[d+9]||0,4,-640364487),g=x(g,o,u,c,i[d+12]||0,11,-421815835),c=x(c,g,o,u,i[d+15]||0,16,530742520),u=x(u,c,g,o,i[d+2]||0,23,-995338651),o=v(o,u,c,g,i[d]||0,6,-198630844),g=v(g,o,u,c,i[d+7]||0,10,1126891415),c=v(c,g,o,u,i[d+14]||0,15,-1416354905),u=v(u,c,g,o,i[d+5]||0,21,-57434055),o=v(o,u,c,g,i[d+12]||0,6,1700485571),g=v(g,o,u,c,i[d+3]||0,10,-1894986606),c=v(c,g,o,u,i[d+10]||0,15,-1051523),u=v(u,c,g,o,i[d+1]||0,21,-2054922799),o=v(o,u,c,g,i[d+8]||0,6,1873313359),g=v(g,o,u,c,i[d+15]||0,10,-30611744),c=v(c,g,o,u,i[d+6]||0,15,-1560198380),u=v(u,c,g,o,i[d+13]||0,21,1309151649),o=v(o,u,c,g,i[d+4]||0,6,-145523070),g=v(g,o,u,c,i[d+11]||0,10,-1120210379),c=v(c,g,o,u,i[d+2]||0,15,718787259),u=v(u,c,g,o,i[d+9]||0,21,-343485551),o=a(o,S),u=a(u,E),c=a(c,C),g=a(g,w)}return k([o,u,c,g])}const Ee=14,jn=30,Ht=4,Ln=460,zn=160,$n=4e3,st=200,Gt=["#a9791c","#3b7a57","#8a5a44","#4a6fa5","#7d5ba6","#b0503a"],yt=(n,r=Gt)=>r[n%r.length],Dn=n=>{const r=new Date(n).getTime();if(!r)return"";const a=Math.max(0,(Date.now()-r)/1e3);return a<3600?`${Math.floor(a/60)}m`:a<86400?`${Math.floor(a/3600)}h`:a<2592e3?`${Math.floor(a/86400)}d`:new Date(n).toLocaleDateString()};function Bn(n,r,a){const s=k=>Ee/2+k*Ee,l=n.half==="bottom"?a/2:0,f=n.half==="top"?a/2:a,x=s(n.fromLane),v=s(n.toLane),_=(l+f)/2;return x===v?`M${x} ${l}V${f}`:r==="angular"?`M${x} ${l}V${_}H${v}V${f}`:`M${x} ${l}C${x} ${_},${v} ${_},${v} ${f}`}function Pn({row:n,edges:r,maxLanes:a,style:s,palette:l,height:f}){const x=Ee/2+n.lane*Ee;return t.jsxs("svg",{width:a*Ee,height:f,style:{flex:"0 0 auto"},children:[r.map((v,_)=>t.jsx("path",{d:Bn(v,s,f),fill:"none",stroke:yt(v.colorLane,l),strokeWidth:1.5},_)),t.jsx("circle",{cx:x,cy:f/2,r:Ht,fill:yt(n.lane,l),stroke:"var(--surface-card)",strokeWidth:1.5})]})}function Ve({x:n,y:r,items:a,onClose:s,returnFocus:l}){const f=h.useRef(null),x=h.useRef(s);x.current=s,h.useLayoutEffect(()=>{var E,C;const d=document.activeElement instanceof HTMLElement?document.activeElement:null,S=d&&d!==document.body?d:l;return(C=(E=f.current)==null?void 0:E.querySelector('[role="menuitem"]'))==null||C.focus(),()=>S==null?void 0:S.focus()},[]),h.useEffect(()=>{const d=S=>{var E;(E=f.current)!=null&&E.contains(S.target)||x.current()};return window.addEventListener("pointerdown",d),()=>window.removeEventListener("pointerdown",d)},[]);const v=d=>{var w,R;const S=Array.from(((w=f.current)==null?void 0:w.querySelectorAll('[role="menuitem"]'))??[]),E=Math.max(0,S.indexOf(document.activeElement));let C=null;if(d.key==="Escape")x.current();else if(d.key==="ArrowDown")C=(E+1)%S.length;else if(d.key==="ArrowUp")C=(E-1+S.length)%S.length;else if(d.key==="Home")C=0;else if(d.key==="End")C=S.length-1;else return;d.preventDefault(),C!==null&&((R=S[C])==null||R.focus())},_=d=>Number.parseFloat(getComputedStyle(document.documentElement).getPropertyValue(d))||0,k=_("--safe-left"),i=_("--safe-right"),N=_("--safe-top"),o=_("--safe-bottom"),u=Math.min(360,a.length*44+8,window.innerHeight-N-o-16),c=Math.max(8+k,Math.min(n,window.innerWidth-i-228)),g=Math.max(8+N,Math.min(r,window.innerHeight-o-u-8));return t.jsx("div",{ref:f,role:"menu",onKeyDown:v,style:{position:"fixed",left:c,top:g,zIndex:150,background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",boxShadow:"var(--shadow-pop, 0 6px 24px rgba(0,0,0,.15))",padding:4,minWidth:180,maxWidth:"calc(100vw - var(--safe-left) - var(--safe-right) - 16px)",maxHeight:"calc(100dvh - var(--safe-top) - var(--safe-bottom) - 16px)",overflowY:"auto"},children:a.map(d=>t.jsx("button",{role:"menuitem",onClick:()=>{d.run(),x.current()},style:{display:"block",width:"100%",textAlign:"left",padding:"7px 10px",border:"none",background:"transparent",cursor:"pointer",fontFamily:"var(--font-ui)",fontSize:12.5,color:"var(--text-body)",borderRadius:4},children:d.label},d.label))})}function Fn(n,r,a,s,l,f){const x=n.refs.filter(i=>!i.startsWith("origin/")),v=n.refs.filter(i=>i.startsWith("origin/")&&i!=="origin/HEAD").map(i=>i.slice(7)),_=[...new Set([...x,...v])],k=i=>{var N;(N=navigator.clipboard)==null||N.writeText(i)};return[{label:`Checkout ${n.sha.slice(0,7)}`,run:()=>a({op:"checkout",ref:n.sha})},{label:"Merge (fast-forward bila bisa)",run:()=>s(n.sha)},{label:"Merge tanpa fast-forward",run:()=>s(n.sha,{ff:"no-ff"})},{label:"Merge fast-forward saja",run:()=>s(n.sha,{ff:"ff-only"})},{label:"Cherry-pick",run:()=>a({op:"cherry-pick",sha:n.sha})},{label:"Revert",run:()=>a({op:"revert",sha:n.sha})},{label:"Rebase current → sini",run:()=>l(n.sha)},{label:"Drop commit",run:()=>f(n.sha)},{label:"Reset current → sini (soft)",run:()=>a({op:"reset",sha:n.sha,mode:"soft"})},{label:"Reset current → sini (mixed)",run:()=>a({op:"reset",sha:n.sha,mode:"mixed"})},{label:"Reset current → sini (hard)",run:()=>a({op:"reset",sha:n.sha,mode:"hard"})},{label:"Copy hash",run:()=>k(n.sha)},{label:"Copy subject",run:()=>k(n.subject)},{label:"Buat branch di sini…",run:()=>{const i=window.prompt("Nama branch baru:");i&&a({op:"branch",name:i,at:n.sha,checkout:!0})}},{label:"Add tag…",run:()=>{const i=window.prompt("Nama tag:");if(!i)return;const N=window.prompt("Pesan (kosong = lightweight):")||void 0,o=window.confirm("Dorong tag ke origin?");a({op:"tag",name:i,message:N,at:n.sha,push:o})}},...x.filter(i=>i!==r).map(i=>({label:`Merge ${i} lalu hapus (local${v.includes(i)?" + origin":""})`,run:()=>s(i,{deleteBranch:i})})),..._.flatMap(i=>{const N=x.includes(i)&&i!==r,o=v.includes(i),u=[];return N&&o&&u.push({label:`Hapus ${i} (local + origin)`,run:()=>a({op:"delete-branch",name:i,remote:!0})}),N&&u.push({label:`Hapus ${i} (local)`,run:()=>a({op:"delete-branch",name:i})}),o&&u.push({label:`Hapus origin/${i}`,run:()=>a({op:"delete-branch",name:i,local:!1,remote:!0})}),u})]}function Un(n,r,a,s,l,f,x,v,_){const k=n.startsWith("origin/"),i=k?n.slice(7):n,N=()=>{var g;(g=navigator.clipboard)==null||g.writeText(n)};if(k)return[{label:`Checkout ${n}`,run:()=>s({op:"checkout",ref:n})},{label:`Merge ${n} → current`,run:()=>l(n)},{label:`Pull ${i} → current`,run:()=>x(i)},{label:"Create Pull Request",run:()=>v(i)},{label:"Create archive",run:()=>_(n)},{label:`Hapus origin/${i}`,run:()=>s({op:"delete-branch",name:i,local:!1,remote:!0})},{label:"Copy nama branch",run:N}];const o=n===r,u=a.includes(`origin/${i}`),c=[];return o||c.push({label:`Checkout ${n}`,run:()=>s({op:"checkout",ref:n})}),c.push({label:"Rename…",run:()=>{const g=window.prompt(`Nama baru untuk ${n}:`,n);g&&g!==n&&s({op:"rename-branch",from:n,to:g})}}),c.push({label:"Push ke origin",run:()=>s({op:"push-branch",name:n,setUpstream:!0})}),o||c.push({label:`Merge ${n} → current`,run:()=>l(n)}),o||c.push({label:`Rebase current → ${n}`,run:()=>f(n)}),c.push({label:"Create Pull Request",run:()=>v(n)}),c.push({label:"Create archive",run:()=>_(n)}),o||(c.push({label:u?`Hapus ${n} (local + origin)`:`Hapus ${n} (local)`,run:()=>s({op:"delete-branch",name:n,remote:u})}),u&&c.push({label:`Hapus ${n} (local saja)`,run:()=>s({op:"delete-branch",name:n})})),c.push({label:"Copy nama branch",run:N}),c}function Hn({projectId:n,onRunGit:r,onMerge:a,onRebase:s,onPull:l,onDrop:f,onOpenFile:x}){var rt,Me;const[v,_]=h.useState("loading"),[k,i]=h.useState([]),[N,o]=h.useState(!1),[u,c]=h.useState(0),[g,d]=h.useState(!1),S=h.useRef(null),[E,C]=h.useState(""),[w,R]=h.useState(null),[O,Z]=h.useState("graph"),T=Zt(),G=Yt(),[P,W]=h.useState(null),[p,I]=h.useState(null),[$,V]=h.useState(null),[X,Q]=h.useState(null),[j,F]=h.useState([]),[A,D]=h.useState(null),[B,q]=h.useState(null),Ue=h.useMemo(()=>k.flatMap(e=>e.commit.refs),[k]),[ke,He]=h.useState("list"),[b,z]=h.useState(null),re=h.useCallback((e,m,y)=>{z({path:e,sha:m,from:y,data:null,tab:"diff"}),(y?M.ideCompareFile(n,y,m,e):M.ideCommitFile(n,m,e)).then(fe=>z(ie=>ie&&ie.path===e?{...ie,data:fe}:ie)).catch(()=>{})},[n]),[ce,Se]=h.useState(null),[ue,Ie]=h.useState(null),Je=h.useRef(new Map),[je,Ce]=h.useState(!1),[ye,me]=h.useState(""),[ve,oe]=h.useState(0),de=h.useCallback(e=>{var m;(m=Je.current.get(e))==null||m.scrollIntoView({block:"center",behavior:"smooth"})},[]),te=h.useMemo(()=>{const e=ye.trim().toLowerCase();return e?k.filter(m=>{const y=m.commit;return y.subject.toLowerCase().includes(e)||y.author.toLowerCase().includes(e)||y.sha.toLowerCase().startsWith(e)||y.refs.some(H=>H.toLowerCase().includes(e))||y.tags.some(H=>H.toLowerCase().includes(e))}).map(m=>m.commit.sha):[]},[ye,k]),we=h.useCallback(e=>{if(!te.length)return;const m=(e%te.length+te.length)%te.length;oe(m),de(te[m])},[te,de]),ee=h.useCallback(()=>{const e=k.find(m=>m.commit.refs.includes(E));e&&de(e.commit.sha)},[k,E,de]),[J,Ge]=h.useState({branch:"",showRemote:!0,showTags:!0,limit:st}),Ne=h.useCallback(e=>Ge(m=>({...m,...e,limit:st})),[]),[Le,ze]=h.useState(!0),[et,ge]=h.useState("rounded"),ct=h.useMemo(()=>[...new Set(k.flatMap(e=>e.commit.refs).filter(e=>!e.startsWith("origin/")))].sort(),[k]),[le,tt]=h.useState({});h.useEffect(()=>{M.getConfig().then(e=>{const m={};for(const y of e.entries){const H=y.value;y.key.startsWith("gitGraph.")&&H!=null&&(m[y.key]=H)}tt(m),m["gitGraph.style"]&&ge(m["gitGraph.style"]==="angular"?"angular":"rounded"),m["gitGraph.muteMergeCommits"]&&ze(m["gitGraph.muteMergeCommits"]!=="0"),Ge(y=>({...y,showRemote:m["gitGraph.showRemoteBranches"]!=="0",showTags:m["gitGraph.showTags"]!=="0"}))}).catch(()=>{})},[]);const dt=h.useMemo(()=>{var m;const e=(m=le["gitGraph.colours"])==null?void 0:m.split(",").map(y=>y.trim()).filter(Boolean);return e&&e.length?e:Gt},[le]),We={emoji:le["gitGraph.emoji"]!=="0",markdown:le["gitGraph.markdown"]!=="0",issuePattern:le["gitGraph.issueLinkPattern"]||void 0},ut=le["gitGraph.fetchAvatars"]==="1",$e=h.useCallback((e,m)=>{if(e.metaKey||e.ctrlKey){if(!ce){Se(m);return}ce!==m&&M.ideCompare(n,ce,m).then(y=>{Ie(y),R(null),Z("detail")}).catch(()=>{}),Se(null);return}M.ideCommit(n,m).then(y=>{R(y),Z("detail")}).catch(()=>{})},[n,ce]),he=h.useCallback((e=!1)=>{e||_("loading"),M.ideGraph(n,J.limit,{branches:J.branch?[J.branch]:void 0,showRemote:J.showRemote?void 0:!1,showTags:J.showTags?void 0:!1}).then(m=>{i(_t(m.commits)),C(m.current),c(m.total??0),o(m.commits.length>=J.limit),_("ready")}).catch(()=>{e||_("error")}).finally(()=>d(!1)),M.ideStatus(n).then(V).catch(()=>{e||V(null)}),M.ideStashes(n).then(F).catch(()=>{e||F([])})},[n,J]),De=h.useRef(!1);h.useEffect(()=>{he(De.current),De.current=!1},[he]);const Ae=h.useCallback(()=>{De.current||(De.current=!0,d(!0),Ge(e=>({...e,limit:e.limit+st})))},[]);h.useEffect(()=>{const e=S.current;if(!e||!N||g||typeof IntersectionObserver>"u")return;const m=new IntersectionObserver(y=>{y.some(H=>H.isIntersecting)&&Ae()});return m.observe(e),()=>m.disconnect()},[N,g,Ae]),Vt({topic:"git",params:{projectId:n,limit:J.limit,branch:J.branch,showRemote:J.showRemote,showTags:J.showTags},apply:e=>{i(_t(e.graph.commits)),C(e.graph.current),c(e.graph.total??0),o(e.graph.commits.length>=J.limit),_("ready"),V(e.status),F(e.stashes)},refetch:()=>he(!0),pollMs:$n}),h.useEffect(()=>{const e=m=>{m.key==="Escape"&&(z(null),Ie(null),Se(null),Ce(!1)),(m.metaKey||m.ctrlKey)&&m.key.toLowerCase()==="f"&&(m.preventDefault(),Ce(!0)),(m.metaKey||m.ctrlKey)&&m.key.toLowerCase()==="h"&&(m.preventDefault(),ee())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ee]);function nt(e,m){e.preventDefault(),W({x:e.clientX,y:e.clientY,c:m,anchor:e.currentTarget})}async function se(e){W(null),await r(e).then(()=>he()).catch(()=>{})}async function at(e,m){W(null),await a(e,m).then(()=>he()).catch(()=>{})}async function Be(e){W(null),q(null),await s(e).then(()=>he()).catch(()=>{})}async function Re(e){W(null),q(null),await l(e).then(()=>he()).catch(()=>{})}async function mt(e){W(null),await f(e).then(()=>he()).catch(()=>{})}function Pe(e){q(null),M.idePrUrl(n,e).then(m=>{m.url?window.open(m.url,"_blank","noreferrer"):window.alert("origin bukan github/gitlab/bitbucket — tak bisa buat PR otomatis")}).catch(()=>{})}function ne(e){q(null),window.open(M.ideArchiveUrl(n,e),"_blank")}const Ke=Math.max(1,...k.map(e=>e.width)),gt=h.useMemo(()=>Nn(k),[k]);if(v==="loading")return t.jsx(Y,{kind:"loading",title:"Memuat git graph…"});if(v==="error")return t.jsx(Y,{kind:"error",title:"Gagal memuat git graph",action:he});if(k.length===0)return t.jsx(Y,{kind:"empty",icon:"git-commit",title:"Belum ada commit"});const pe=T!=="desktop",Te=T==="mobile"||G?44:jn,be=!!(w||ue);return t.jsxs(t.Fragment,{children:[pe&&be&&t.jsx(St,{"aria-label":"Panel Git Graph",variant:"pill",value:O,onChange:e=>Z(e),tabs:[{value:"graph",label:"Graph"},{value:"detail",label:"Detail"}]}),t.jsxs("div",{className:"hn-git-graph-layout",style:{display:"grid",gridTemplateColumns:pe?"minmax(0, 1fr)":be?"minmax(0, 1fr) 340px":"minmax(0, 1fr)",gap:16,alignItems:"start",minWidth:0},children:[t.jsx("section",{"data-panel":"graph","aria-label":"Graph","aria-hidden":pe&&be&&O!=="graph"?"true":"false",style:{display:pe&&be&&O!=="graph"?"none":"block",minWidth:0},children:t.jsxs(Oe,{padding:0,children:[t.jsx("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap",padding:"8px 12px",borderBottom:"1px solid var(--border-hair)"},children:je?t.jsxs(t.Fragment,{children:[t.jsx(Fe,{name:"search",size:13,color:"var(--text-subtle)"}),t.jsx("input",{autoFocus:!0,value:ye,onChange:e=>{me(e.target.value),oe(0)},onKeyDown:e=>{e.key==="Enter"&&we(ve+(e.shiftKey?-1:1)),e.key==="Escape"&&Ce(!1)},placeholder:"mis. auto-merge, 3a3e7e0, atau hanoman/spec-490",style:{flex:1,border:"none",outline:"none",background:"transparent",fontSize:12.5,fontFamily:"var(--font-ui)",color:"var(--text-body)"}}),t.jsx("span",{style:{fontSize:11,color:"var(--text-subtle)",fontFamily:"var(--font-mono)"},children:te.length?`${ve+1}/${te.length}`:ye?"0":""}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"chevron-up",disabled:!te.length,onClick:()=>we(ve-1)}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"chevron-down",disabled:!te.length,onClick:()=>we(ve+1)}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"x",onClick:()=>{Ce(!1),me("")}})]}):t.jsxs(t.Fragment,{children:[t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"search",onClick:()=>Ce(!0),children:"Cari"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"crosshair",onClick:ee,children:"HEAD"}),t.jsx("span",{style:{marginLeft:"auto",fontSize:11,color:"var(--text-subtle)"},children:"⌘F cari · ⌘H center HEAD"})]})}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:12,flexWrap:"wrap",padding:"6px 12px",borderBottom:"1px solid var(--border-hair)",fontSize:12},children:[t.jsxs("select",{value:J.branch,onChange:e=>Ne({branch:e.target.value}),style:{fontSize:12,padding:"3px 6px",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--surface-card)",color:"var(--text-body)"},children:[t.jsx("option",{value:"",children:"semua branch"}),ct.map(e=>t.jsx("option",{value:e,children:e},e))]}),t.jsx(_e,{checked:J.showRemote,onChange:e=>Ne({showRemote:e}),label:"remote"}),t.jsx(_e,{checked:J.showTags,onChange:e=>Ne({showTags:e}),label:"tag"}),t.jsx(_e,{checked:Le,onChange:e=>ze(e),label:"muted merge"}),t.jsxs("button",{onClick:()=>ge(e=>e==="rounded"?"angular":"rounded"),style:{border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",background:"var(--surface-card)",cursor:"pointer",padding:"3px 8px",fontSize:12,color:"var(--text-muted)"},children:["style: ",et]}),t.jsx(tn,{})]}),j.length>0&&t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,flexWrap:"wrap",padding:"6px 12px",borderBottom:"1px solid var(--border-hair)"},children:[t.jsx("span",{className:"hn-eyebrow",style:{marginRight:4},children:"stash"}),j.map(e=>t.jsxs("button",{type:"button",title:e.message,"aria-label":`Aksi ${e.ref}`,onClick:m=>{m.stopPropagation(),D({x:m.clientX,y:m.clientY,s:e,anchor:m.currentTarget})},onContextMenu:m=>{m.preventDefault(),m.stopPropagation(),D({x:m.clientX,y:m.clientY,s:e,anchor:m.currentTarget})},style:{fontFamily:"var(--font-mono)",fontSize:10.5,padding:"2px 8px",borderRadius:999,border:"none",cursor:"pointer",background:"var(--ink-100, #e7e6e1)",color:"var(--text-muted)",flex:"0 0 auto"},children:[e.ref,": ",e.message.length>40?e.message.slice(0,40)+"…":e.message]},e.ref))]}),t.jsx(qt,{"data-testid":"ide-graph-rows",children:t.jsxs("div",{style:{minWidth:Ke*Ee+Ln},children:[$&&!$.clean&&(()=>{const e=$.staged.length+$.unstaged.length+$.untracked.length,m=$.unstaged[0]??$.untracked[0]??$.staged[0];return t.jsxs("div",{onClick:()=>{m&&x(m,"")},onContextMenu:y=>{y.preventDefault(),Q({x:y.clientX,y:y.clientY,anchor:y.currentTarget})},onMouseEnter:y=>{y.currentTarget.style.background="var(--bone-100)"},onMouseLeave:y=>{y.currentTarget.style.background="transparent"},style:{display:"flex",alignItems:"center",gap:10,height:Te,padding:"0 12px",cursor:"pointer",borderBottom:"1px solid var(--border-hair)"},children:[t.jsx("svg",{width:Ke*Ee,height:Te,style:{flex:"0 0 auto"},children:t.jsx("circle",{cx:Ee/2,cy:Te/2,r:Ht,fill:"none",stroke:yt(0),strokeWidth:1.5})}),t.jsxs("button",{type:"button",onClick:y=>{y.stopPropagation(),m&&x(m,"")},style:{border:0,padding:0,background:"transparent",textAlign:"left",cursor:m?"pointer":"default",fontSize:12.5,fontStyle:"italic",color:"var(--text-muted)",flex:1},children:["Uncommitted changes · ",e," file"]}),t.jsx("button",{type:"button",className:"hn-graph-action","aria-label":"Aksi working tree",onClick:y=>{y.stopPropagation(),Q({x:y.clientX,y:y.clientY,anchor:y.currentTarget})},children:"⋮"}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",flex:"0 0 auto",width:88,textAlign:"right"},children:"working tree"}),t.jsx("span",{style:{width:40,flex:"0 0 auto"}})]})})(),k.map((e,m)=>{const y=e.commit,H=y.refs.includes(E),fe=(w==null?void 0:w.sha)===y.sha,ie=te.includes(y.sha),ht=te[ve]===y.sha,Kt=fe?"var(--brass-100)":ht?"var(--brass-200, #ecd9ac)":ie?"var(--bone-100)":"transparent";return t.jsxs("div",{ref:U=>{U&&Je.current.set(y.sha,U)},onClick:U=>$e(U,y.sha),onContextMenu:U=>nt(U,y),title:ce?"Ctrl/Cmd-klik untuk bandingkan dengan commit pertama":"Ctrl/Cmd-klik untuk mulai compare",onMouseEnter:U=>{!fe&&!ht&&(U.currentTarget.style.background="var(--bone-100)")},onMouseLeave:U=>{!fe&&!ht&&(U.currentTarget.style.background=ie?"var(--bone-100)":"transparent")},style:{display:"flex",alignItems:"center",gap:10,height:Te,padding:"0 12px",cursor:"pointer",borderBottom:"1px solid var(--border-hair)",background:Kt},children:[t.jsx(Pn,{row:e,edges:gt[m]??[],maxLanes:Ke,style:et,palette:dt,height:Te}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,minWidth:0,flex:1},children:[y.refs.map(U=>t.jsx("button",{type:"button",title:"branch — pilih untuk aksi","aria-label":`Aksi branch ${U}`,onClick:K=>{K.preventDefault(),K.stopPropagation(),q({x:K.clientX,y:K.clientY,ref:U,anchor:K.currentTarget})},onContextMenu:K=>{K.preventDefault(),K.stopPropagation(),q({x:K.clientX,y:K.clientY,ref:U,anchor:K.currentTarget})},style:{fontFamily:"var(--font-mono)",fontSize:10.5,padding:"1px 6px",cursor:"pointer",border:"none",borderRadius:999,background:H&&U===E?"var(--brass-500)":"var(--brass-100)",color:H&&U===E?"#fff":"var(--brass-700)",flex:"0 0 auto"},children:U},U)),y.tags.map(U=>t.jsxs("button",{type:"button",title:"tag — pilih untuk aksi","aria-label":`Aksi tag ${U}`,onClick:K=>{K.preventDefault(),K.stopPropagation(),I({x:K.clientX,y:K.clientY,tag:U,anchor:K.currentTarget})},onContextMenu:K=>{K.preventDefault(),K.stopPropagation(),I({x:K.clientX,y:K.clientY,tag:U,anchor:K.currentTarget})},style:{fontFamily:"var(--font-mono)",fontSize:10.5,padding:"1px 6px 1px 4px",borderRadius:999,border:"none",display:"inline-flex",alignItems:"center",gap:3,background:"var(--leaf-100, #e6efe9)",color:"var(--leaf-600, #3b7a57)",flex:"0 0 auto"},children:["⌂",U]},`tag:${U}`)),t.jsx("button",{type:"button","aria-label":`Buka commit ${y.sha}`,onClick:U=>{U.stopPropagation(),$e(U,y.sha)},style:{minWidth:zn,padding:0,border:0,background:"transparent",cursor:"pointer",textAlign:"left",fontSize:12.5,color:Le&&y.parents.length>1?"var(--text-subtle)":"var(--text-body)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:We.emoji?xt(y.subject):y.subject})]}),t.jsx("button",{type:"button",className:"hn-graph-action","aria-label":`Aksi commit ${y.sha}`,onClick:U=>{U.stopPropagation(),nt(U,y)},children:"⋮"}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",flex:"0 0 auto",width:88,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",textAlign:"right"},children:y.author}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:11,color:"var(--text-subtle)",flex:"0 0 auto",width:40,textAlign:"right"},children:Dn(y.at)})]},y.sha)})]})}),t.jsxs("div",{ref:S,style:{display:"flex",alignItems:"center",justifyContent:"center",gap:10,padding:"9px 12px",borderTop:"1px solid var(--border-hair)"},children:[t.jsxs("span",{style:{fontSize:11.5,color:"var(--text-subtle)"},children:[u>0?`${k.length} dari ${u} commit`:`${k.length} commit dimuat`,N?"":" · seluruh history"]}),N&&t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"chevron-down",disabled:g,onClick:Ae,children:g?"Memuat…":`Muat ${st} lagi`})]})]})}),w&&t.jsx("section",{"data-panel":"detail","aria-label":"Detail","aria-hidden":pe&&O!=="detail"?"true":"false",style:{display:pe&&O!=="detail"?"none":"block",minWidth:0},children:t.jsxs(Oe,{padding:16,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[t.jsxs("span",{className:"hn-eyebrow",children:["commit ",w.sha.slice(0,8)]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6},children:[w.signed&&t.jsx(ae,{tone:"ok",size:"sm",children:"signed"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"copy",onClick:()=>{var e;return void((e=navigator.clipboard)==null?void 0:e.writeText(w.sha))},children:"Hash"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"x",onClick:()=>{R(null),Z("graph")},children:"Tutup"})]})]}),t.jsx("div",{style:{fontSize:13,color:"var(--text-strong)",fontWeight:600,marginBottom:4},children:We.emoji?xt(w.subject):w.subject}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:11,color:"var(--text-subtle)",marginBottom:6},children:[ut&&w.authorEmail&&t.jsx("img",{src:Rn(w.authorEmail,20),width:18,height:18,alt:"",style:{borderRadius:999}}),t.jsxs("span",{children:[w.author,w.committer&&w.committer!==w.author?` · committed by ${w.committer}`:""]})]}),w.body&&t.jsx("pre",{style:{fontFamily:"var(--font-mono)",fontSize:11.5,whiteSpace:"pre-wrap",color:"var(--text-muted)",marginBottom:10},children:Mn(w.body,We)}),t.jsxs("div",{className:"hn-eyebrow",style:{display:"flex",alignItems:"center",gap:6,marginBottom:6},children:[t.jsxs("span",{style:{flex:1},children:[w.changed.length," file berubah"]}),["list","tree"].map(e=>t.jsx("button",{"aria-label":e,onClick:()=>He(e),style:{display:"flex",padding:3,border:"none",cursor:"pointer",borderRadius:4,background:ke===e?"var(--brass-100)":"transparent"},children:t.jsx(Fe,{name:e==="list"?"list":"folder-tree",size:13,color:ke===e?"var(--brass-700)":"var(--text-subtle)"})},e))]}),ke==="tree"?Tt(w.changed.map(e=>e.path)).map(e=>t.jsx(Mt,{node:e,selected:(b==null?void 0:b.path)??"",onSelect:m=>re(m,w.sha),defaultOpen:!0},e.path)):w.changed.map(e=>t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 6px"},children:[t.jsx(ae,{tone:e.status==="A"?"ok":e.status==="D"?"err":"warn",size:"sm",children:e.status}),t.jsx("button",{onClick:()=>re(e.path,w.sha),title:"lihat diff",style:{flex:1,minWidth:0,textAlign:"left",border:"none",background:"transparent",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-body)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.path}),t.jsx(Fe,{name:"git-commit",size:12,color:"var(--text-subtle)",title:"view at revision",onClick:()=>x(e.path,w.sha),style:{cursor:"pointer"}}),t.jsx(Fe,{name:"external-link",size:12,color:"var(--text-subtle)",title:"open (working tree)",onClick:()=>x(e.path,""),style:{cursor:"pointer"}}),t.jsx(Fe,{name:"copy",size:12,color:"var(--text-subtle)",title:"copy path",onClick:()=>{var m;return void((m=navigator.clipboard)==null?void 0:m.writeText(e.path))},style:{cursor:"pointer"}})]},e.path))]})}),ue&&t.jsx("section",{"data-panel":"detail","aria-label":"Detail","aria-hidden":pe&&O!=="detail"?"true":"false",style:{display:pe&&O!=="detail"?"none":"block",minWidth:0},children:t.jsxs(Oe,{padding:16,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:8},children:[t.jsxs("span",{className:"hn-eyebrow",children:["compare ",ue.from.slice(0,7)," … ",ue.to.slice(0,7)]}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"x",onClick:()=>{Ie(null),Z("graph")},children:"Tutup"})]}),t.jsxs("div",{className:"hn-eyebrow",style:{marginBottom:6},children:[ue.changed.length," file berbeda"]}),ue.changed.length===0&&t.jsx("div",{style:{fontSize:12,color:"var(--text-subtle)"},children:"Tak ada perbedaan."}),ue.changed.map(e=>t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:6,padding:"3px 6px"},children:[t.jsx(ae,{tone:e.status==="A"?"ok":e.status==="D"?"err":"warn",size:"sm",children:e.status}),t.jsx("button",{onClick:()=>re(e.path,ue.to,ue.from),style:{flex:1,minWidth:0,textAlign:"left",border:"none",background:"transparent",cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-body)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.path})]},e.path))]})}),ce&&t.jsxs("div",{style:{position:"fixed",bottom:"max(16px, var(--safe-bottom))",left:"50%",transform:"translateX(-50%)",zIndex:140,background:"var(--brass-500)",color:"#fff",padding:"6px 14px",borderRadius:999,fontSize:12.5,boxShadow:"var(--shadow-pop, 0 6px 24px rgba(0,0,0,.15))",display:"flex",alignItems:"center",gap:10},children:["Compare dari ",ce.slice(0,7)," — Ctrl/Cmd-klik commit kedua",t.jsx("button",{onClick:()=>Se(null),style:{border:"none",background:"transparent",color:"#fff",cursor:"pointer",fontWeight:700},children:"✕"})]}),P&&t.jsx(Ve,{x:P.x,y:P.y,returnFocus:P.anchor,onClose:()=>W(null),items:Fn(P.c,E,se,at,Be,mt)}),p&&t.jsx(Ve,{x:p.x,y:p.y,returnFocus:p.anchor,onClose:()=>I(null),items:[{label:`Hapus tag ${p.tag} (local)`,run:()=>{I(null),se({op:"delete-tag",name:p.tag})}},{label:`Hapus tag ${p.tag} (local + origin)`,run:()=>{I(null),se({op:"delete-tag",name:p.tag,remote:!0})}},{label:"Push tag ke origin",run:()=>{I(null),se({op:"push-tag",name:p.tag})}},{label:"Copy nama tag",run:()=>{var e;I(null),(e=navigator.clipboard)==null||e.writeText(p.tag)}}]}),X&&t.jsx(Ve,{x:X.x,y:X.y,returnFocus:X.anchor,onClose:()=>Q(null),items:[{label:"Stash perubahan…",run:()=>{Q(null);const e=window.prompt("Pesan stash (opsional):")||void 0;se({op:"stash",message:e,includeUntracked:!0})}},{label:"Reset working tree (mixed — unstage)",run:()=>{Q(null),se({op:"reset-worktree",mode:"mixed"})}},{label:"Reset working tree (hard — buang semua)",run:()=>{Q(null),se({op:"reset-worktree",mode:"hard"})}},{label:"Clean untracked",run:()=>{Q(null),se({op:"clean",directories:!0})}}]}),A&&t.jsx(Ve,{x:A.x,y:A.y,returnFocus:A.anchor,onClose:()=>D(null),items:[{label:"Apply (jaga stash)",run:()=>{const e=A.s;D(null),se({op:"stash-apply",ref:e.ref})}},{label:"Pop (apply + buang)",run:()=>{const e=A.s;D(null),se({op:"stash-pop",ref:e.ref})}},{label:"Drop (buang stash)",run:()=>{const e=A.s;D(null),se({op:"stash-drop",ref:e.ref})}},{label:"Buat branch dari stash…",run:()=>{const e=A.s;D(null);const m=window.prompt("Nama branch baru:");m&&se({op:"stash-branch",ref:e.ref,name:m})}},{label:"Copy nama stash",run:()=>{var m;const e=A.s;D(null),(m=navigator.clipboard)==null||m.writeText(e.ref)}}]}),B&&t.jsx(Ve,{x:B.x,y:B.y,returnFocus:B.anchor,onClose:()=>q(null),items:Un(B.ref,E,Ue,se,at,Be,Re,Pe,ne)}),b&&t.jsx(Qe,{open:!0,title:`Diff ${b.path}`,eyebrow:`@ ${b.sha.slice(0,8)}`,width:900,fillHeight:!0,onClose:()=>z(null),children:t.jsxs("div",{className:"hn-panel-flex",style:{height:"100%",minHeight:0,display:"flex",flexDirection:"column"},children:[t.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"center",gap:12,paddingBottom:10,borderBottom:"1px solid var(--border-hair)"},children:[t.jsx("div",{style:{display:"flex",gap:2,background:"var(--bone-100)",borderRadius:"var(--radius-pill)",padding:2},children:(qe(b.path)?["diff","source","preview"]:["diff","source"]).map(e=>t.jsx("button",{onClick:()=>z(m=>m&&{...m,tab:e}),style:{padding:"4px 12px",border:"none",cursor:"pointer",borderRadius:"var(--radius-pill)",fontSize:12,textTransform:"capitalize",background:b.tab===e?"var(--surface-card)":"transparent",color:b.tab===e?"var(--text-strong)":"var(--text-muted)",fontWeight:b.tab===e?600:400},children:e},e))}),qe(b.path)&&!((rt=b.data)!=null&&rt.binary)&&((Me=b.data)==null?void 0:Me.content)!=null&&t.jsx(Ct,{href:e=>b.from?M.ideCompareFileDownloadUrl(n,b.from,b.sha,b.path,e):M.ideCommitFileDownloadUrl(n,b.sha,b.path,e)})]}),t.jsx("div",{"data-testid":"gitgraph-file-scroll",style:{flex:"1 1 auto",minHeight:0,overflow:"auto",padding:"10px 0"},children:b.data?b.data.binary?t.jsx(Y,{kind:"empty",icon:"file",title:"Berkas biner"}):b.tab==="diff"?t.jsx(Ot,{diff:b.data.diff??"",emptyHint:"File tak berubah di commit ini."}):b.tab==="preview"?t.jsx("div",{style:{padding:"0 16px"},children:t.jsx(Nt,{text:b.data.content??"",name:b.path})}):t.jsx("pre",{style:{margin:0,padding:"0 16px",fontFamily:"var(--font-mono)",fontSize:12.5,lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"var(--text-body)"},children:b.data.content??"(kosong / dihapus)"}):t.jsx(Y,{kind:"loading",title:"Memuat diff…",hint:b.path})})]})})]})]})}const Et=[{value:"both",label:"local + origin"},{value:"local",label:"local saja"},{value:"remote",label:"origin saja"}],Gn=[{value:"all",label:"semua status"},{value:"merged",label:"ter-merge saja"},{value:"unmerged",label:"belum ter-merge"}],it=100,Wn=n=>{const r=new Date(n).getTime();if(!r)return"";const a=Math.max(0,(Date.now()-r)/1e3);return a<3600?`${Math.floor(a/60)}m`:a<86400?`${Math.floor(a/3600)}j`:a<2592e3?`${Math.floor(a/86400)}h`:new Date(n).toLocaleDateString()},ft=n=>n.locks.length===0,Kn=n=>n.local&&n.remote?"local + origin":n.local?"local":"origin";function Zn({projectId:n,onOpenWorktree:r}){const[a,s]=h.useState("loading"),[l,f]=h.useState(null),[x,v]=h.useState([]),[_,k]=h.useState(""),[i,N]=h.useState("both"),[o,u]=h.useState("all"),[c,g]=h.useState(""),[d,S]=h.useState(it),[E,C]=h.useState(new Set),[w,R]=h.useState(null),[O,Z]=h.useState(!1),[T,G]=h.useState(null),P=h.useCallback(()=>{s("loading"),M.branchesUnused(n,_||void 0,"all").then(b=>{f(b),C(new Set),s("ready")}).catch(()=>s("error"))},[n,_]);h.useEffect(()=>{P()},[P]),h.useEffect(()=>{M.listBranches(n).then(b=>v([...new Set([...b.branches,...b.remotes])].sort())).catch(()=>v([]))},[n]);const W=(l==null?void 0:l.branches)??[],p=h.useMemo(()=>{const b=c.trim().toLowerCase();return W.filter(z=>(o==="all"||o==="merged"===z.merged)&&(!b||z.name.toLowerCase().includes(b)))},[W,o,c]);h.useEffect(()=>{S(it),C(new Set)},[o,c]);const I=p.slice(0,d),$=h.useMemo(()=>I.filter(ft).map(b=>b.name),[I]),V=$.length>0&&$.every(b=>E.has(b)),X=b=>C(z=>{const re=new Set(z);return re.has(b)?re.delete(b):re.add(b),re}),Q=()=>C(V?new Set:new Set($)),j=I.filter(b=>E.has(b.name)).map(b=>b.name),F=h.useMemo(()=>new Map(W.map(b=>[b.name,b])),[W]),A=(w??[]).filter(b=>{var z;return((z=F.get(b))==null?void 0:z.merged)===!1}),D=A.length>0,B=()=>{const b=w;b&&(Z(!0),M.deleteBranches(n,{names:b,scope:i,...D?{allowUnmerged:!0}:{}}).then(z=>{G(z.results),R(null),P()}).catch(z=>{G(b.map(re=>({name:re,ok:!1,scope:"none",error:z.message}))),R(null)}).finally(()=>Z(!1)))},q=(T??[]).filter(b=>!b.ok),Ue=(T??[]).length-q.length,ke=(T??[]).filter(b=>b.ok&&b.forced).length,He=Et.find(b=>b.value===i).label;return t.jsxs(Oe,{padding:0,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderBottom:"1px solid var(--border-hair)",flexWrap:"wrap"},children:[t.jsxs("span",{className:"hn-eyebrow",style:{flex:1},children:["branch project",l!=null&&l.base?` · base ${l.base}`:""]}),t.jsx(ot,{size:"sm","data-testid":"cari",leftIcon:"search",placeholder:"cari branch…",value:c,onChange:b=>g(b.target.value),style:{width:180}}),t.jsx(Xe,{size:"sm","data-testid":"status",value:o,onChange:b=>u(b.target.value),options:Gn}),t.jsx(Xe,{size:"sm","data-testid":"base",value:_,onChange:b=>k(b.target.value),options:[{value:"",label:`base otomatis${l!=null&&l.base?` (${l.base})`:""}`},...x.map(b=>({value:b,label:b}))]}),t.jsx(Xe,{size:"sm","data-testid":"scope",value:i,onChange:b=>N(b.target.value),options:Et}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:P,children:"Muat ulang"}),t.jsxs(L,{size:"sm",variant:"primary",leftIcon:"trash-2","data-testid":"bulk-delete",disabled:j.length===0,onClick:()=>R(j),children:["Hapus terpilih (",j.length,")"]})]}),T&&t.jsxs("div",{style:{padding:"10px 14px",borderBottom:"1px solid var(--border-hair)",fontSize:12.5},children:[t.jsxs("div",{style:{color:"var(--text-strong)"},children:[Ue," terhapus",ke?` (${ke} dipaksa)`:""," · ",q.length," gagal"]}),q.map(b=>t.jsxs("div",{style:{color:"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:12},children:[b.name," — ",b.error??"gagal"]},b.name))]}),a==="loading"?t.jsx(Y,{kind:"loading",title:"Memuat branch…"}):a==="error"?t.jsx(Y,{kind:"error",title:"Gagal memuat branch",action:P}):W.length===0?t.jsx(Y,{kind:"empty",icon:"git-branch",title:"Tak ada branch",hint:"Project ini belum punya branch local maupun origin."}):p.length===0?t.jsx(Y,{kind:"empty",icon:"filter",title:"Tak ada branch cocok filter",hint:"Longgarkan filter status atau kosongkan pencarian."}):t.jsxs("div",{style:{maxHeight:620,overflow:"auto"},children:[t.jsx("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:"1px solid var(--border-hair)"},children:t.jsx(_e,{"data-testid":"pick-all",checked:V,onChange:Q,disabled:$.length===0,label:`Pilih semua yang boleh (${$.length})`})}),I.map(b=>t.jsxs("div",{className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"8px 14px",borderBottom:"1px solid var(--border-hair)"},children:[t.jsx(_e,{"data-testid":`pick-${b.name}`,checked:E.has(b.name),disabled:!ft(b),onChange:()=>X(b.name)}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",flex:1},children:b.name}),t.jsx(ae,{size:"sm",tone:b.merged?"ok":"warn",children:b.merged?"ter-merge":"belum ter-merge"}),t.jsx(ae,{size:"sm",tone:"brass",children:Kn(b)}),b.locks.map(z=>z==="worktree"&&b.worktree&&r?t.jsx("button",{"data-testid":`goto-worktree-${b.name}`,onClick:()=>r(b.worktree),style:{background:"none",border:0,padding:0,cursor:"pointer"},children:t.jsxs(ae,{size:"sm",tone:"warn",children:[vt[z]," →"]})},z):t.jsx(ae,{size:"sm",tone:"warn",children:vt[z]},z)),t.jsx("span",{style:{fontSize:11.5,color:"var(--text-subtle)",minWidth:200,marginLeft:"auto",textAlign:"right"},children:b.lastCommit?`${b.lastCommit.subject} · ${Wn(b.lastCommit.at)}`:"—"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"trash-2","data-testid":`row-delete-${b.name}`,disabled:!ft(b),onClick:()=>R([b.name]),children:"Hapus"})]},b.name)),p.length>I.length&&t.jsx("div",{style:{padding:"8px 14px",textAlign:"center"},children:t.jsxs(L,{size:"sm",variant:"ghost","data-testid":"show-more",onClick:()=>S(b=>b+it),children:["Tampilkan ",Math.min(it,p.length-I.length)," lagi (",p.length-I.length," tersisa)"]})})]}),t.jsx(At,{open:w!==null,busy:O,eyebrow:"branch",title:"Hapus branch?",confirmLabel:"Ya, hapus",requireText:D?(w==null?void 0:w.length)===1?w[0]:"hapus paksa":void 0,message:w?`${w.length} branch akan dihapus (${He}). Tindakan ini tak bisa dibatalkan.`:"",impact:D?[`${A.length} branch belum ter-merge ke ${(l==null?void 0:l.base)??"base"}: ${A.join(", ")}.`,"Commit yang hanya ada di branch itu akan hilang dan tak bisa dipulihkan dari dashboard."]:void 0,onConfirm:B,onCancel:()=>R(null)})]})}const Yn=n=>typeof n=="boolean",Vn=n=>{const r=n?new Date(n).getTime():0;if(!r)return"—";const a=Math.max(0,(Date.now()-r)/1e3);return a<3600?`${Math.floor(a/60)}m`:a<86400?`${Math.floor(a/3600)}j`:a<2592e3?`${Math.floor(a/86400)}h`:new Date(n).toLocaleDateString()},qn=n=>n===null?"—":n<1024*1024?`${Math.max(1,Math.round(n/1024))} KB`:n<1024*1024*1024?`${(n/1024/1024).toFixed(1)} MB`:`${(n/1024/1024/1024).toFixed(1)} GB`;function Xn({projectId:n,focus:r,onOpenBranch:a}){const s=Rt("worktrees",n),[l,f]=h.useState("loading"),[x,v]=h.useState(null),[_,k]=h.useState({}),[i,N]=h.useState(new Set),[o,u]=xe(s,"withBranch",!1,Yn),[c,g]=h.useState(null),{confirm:d,dialog:S}=Xt(),E=h.useCallback(()=>{f("loading"),M.worktrees(n).then(p=>{v(p),N(new Set),k({}),f("ready")}).catch(()=>f("error"))},[n]);h.useEffect(()=>{E()},[E]),h.useEffect(()=>{if(!x)return;let p=!0;return(async()=>{for(const I of x.worktrees){if(!p)return;const $=await M.worktreeStats(n,I.name).catch(()=>null);p&&$&&k(V=>({...V,[I.name]:$}))}})(),()=>{p=!1}},[x,n]);const C=(x==null?void 0:x.worktrees)??[],w=h.useMemo(()=>C.filter(p=>p.deletable).map(p=>p.name),[C]),R=w.length>0&&w.every(p=>i.has(p)),O=p=>N(I=>{const $=new Set(I);return $.has(p)?$.delete(p):$.add(p),$}),Z=C.filter(p=>i.has(p.name)).map(p=>p.name),T=C.some(p=>p.deletable&&p.branch),G=async p=>{const I=C.filter(A=>p.includes(A.name)),$={..._};for(const A of I){if($[A.name])continue;const D=await M.worktreeStats(n,A.name).catch(()=>null);D&&($[A.name]=D)}k($);const V=I.filter(A=>A.session).length,X=I.reduce((A,D)=>{var B;return A+(((B=$[D.name])==null?void 0:B.dirtyFiles)??0)},0),Q=I.reduce((A,D)=>{var B;return A+(((B=$[D.name])==null?void 0:B.orphanCommits)??0)},0),j=I.map(A=>A.branch).filter(A=>!!A),F=[];V&&F.push(`${V} sesi aktif akan ditutup lebih dulu`),Q&&F.push(`${Q} commit tak ada di tempat lain — hilang`),X&&F.push(`${X} berkas belum tersimpan`),o&&j.length&&F.push(`branch ikut dihapus: ${j.join(", ")}`),F.length||F.push("tak ada kerja yang belum tersimpan di sini"),await d({eyebrow:"worktree",title:`Hapus ${p.length} worktree?`,confirmLabel:"Ya, hapus",message:"Direktorinya dipindah ke .worktrees/.trash/ dan byte-nya dihapus di latar.",impact:F,run:async()=>{const A=await M.deleteWorktrees(n,{names:p,...o?{deleteBranch:!0}:{}});g(A.results),E()}}).catch(A=>(g(p.map(D=>({name:D,ok:!1,cleanup:null,error:A.message}))),!1))},P=(c??[]).filter(p=>!p.ok),W=(c??[]).filter(p=>p.ok&&p.branch&&!p.branch.ok);return t.jsxs(Oe,{padding:0,children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"10px 14px",borderBottom:"1px solid var(--border-hair)",flexWrap:"wrap"},children:[t.jsx("span",{className:"hn-eyebrow",style:{flex:1},children:"worktree hidup"}),T&&t.jsx(_e,{"data-testid":"with-branch",checked:o,onChange:()=>u(!o),label:"Hapus branch-nya juga"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:E,children:"Muat ulang"}),t.jsxs(L,{size:"sm",variant:"primary",leftIcon:"trash-2","data-testid":"bulk-delete",disabled:Z.length===0,onClick:()=>void G(Z),children:["Hapus terpilih (",Z.length,")"]})]}),c&&t.jsxs("div",{style:{padding:"10px 14px",borderBottom:"1px solid var(--border-hair)",fontSize:12.5},children:[t.jsxs("div",{style:{color:"var(--text-strong)"},children:[c.length-P.length," terhapus · ",P.length," gagal"]}),P.map(p=>t.jsxs("div",{style:{color:"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:12},children:[p.name," — ",p.error??"gagal"]},p.name)),W.map(p=>t.jsxs("div",{style:{color:"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:12},children:[p.branch.name," — ",p.branch.error??"branch gagal dihapus"]},`b-${p.name}`))]}),l==="loading"?t.jsx(Y,{kind:"loading",title:"Memuat worktree…"}):l==="error"?t.jsx(Y,{kind:"error",title:"Gagal memuat worktree",action:E}):C.length===0?t.jsx(Y,{kind:"empty",icon:"folder",title:"Tak ada worktree",hint:"Project ini belum punya checkout lokal, atau git tak bisa dibaca."}):t.jsxs("div",{style:{maxHeight:620,overflow:"auto"},children:[t.jsx("div",{style:{display:"flex",alignItems:"center",gap:10,padding:"8px 14px",borderBottom:"1px solid var(--border-hair)"},children:t.jsx(_e,{"data-testid":"pick-all",checked:R,disabled:w.length===0,onChange:()=>N(R?new Set:new Set(w)),label:`Pilih semua yang boleh (${w.length})`})}),C.map(p=>{var I;return t.jsxs("div",{"data-testid":`row-${p.name}`,className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"8px 14px",borderBottom:"1px solid var(--border-hair)",background:r===p.name?"var(--surface-sunken)":void 0},children:[t.jsx(_e,{"data-testid":`pick-${p.name}`,checked:i.has(p.name),disabled:!p.deletable,onChange:()=>O(p.name)}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",flex:1},children:p.name}),p.branch?t.jsx("button",{"data-testid":`goto-branch-${p.name}`,onClick:()=>a==null?void 0:a(p.branch),style:{background:"none",border:0,padding:0,cursor:"pointer",fontFamily:"var(--font-mono)",fontSize:12,color:"var(--brass)"},children:p.branch}):t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12,color:"var(--text-subtle)"},children:p.head.slice(0,7)||"—"}),!p.branch&&t.jsx(ae,{size:"sm",tone:"brass",children:"detached"}),p.spec&&t.jsxs(ae,{size:"sm",tone:"brass",children:[p.spec.id," · ",p.spec.stage]}),p.session&&t.jsx(ae,{size:"sm",tone:"warn",children:"sesi aktif"}),p.prunable&&t.jsx(ae,{size:"sm",tone:"warn",children:"prunable"}),p.locked&&t.jsx(ae,{size:"sm",tone:"warn",children:"terkunci git"}),p.blocked&&t.jsx(ae,{size:"sm",tone:"warn",children:p.blocked}),!!((I=_[p.name])!=null&&I.dirtyFiles)&&t.jsxs(ae,{size:"sm",tone:"warn",children:[_[p.name].dirtyFiles," kotor"]}),t.jsxs("span",{style:{fontSize:11.5,color:"var(--text-subtle)",minWidth:130,marginLeft:"auto",textAlign:"right"},children:[_[p.name]?qn(_[p.name].sizeBytes):"…"," · ",Vn(p.createdAt)]}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"trash-2","data-testid":`row-delete-${p.name}`,disabled:!p.deletable,onClick:()=>void G([p.name]),children:"Hapus"})]},p.name)})]}),S]})}const Qn=n=>new Promise(r=>{if(!n.file)return r(null);n.file(a=>r(a),()=>r(null))}),Jn=n=>new Promise(r=>{var f;const a=(f=n.createReader)==null?void 0:f.call(n);if(!a)return r([]);const s=[],l=()=>a.readEntries(x=>{if(!x.length)return r(s);s.push(...x),l()},()=>r(s));l()});async function Wt(n,r,a){const s=r?`${r}/${n.name}`:n.name;if(n.isFile){const l=await Qn(n);l&&a.push({path:s,file:l});return}if(n.isDirectory)for(const l of await Jn(n))await Wt(l,s,a)}async function ea(n){const a=(n.items?Array.from(n.items):[]).map(l=>{var f;return(f=l.webkitGetAsEntry)==null?void 0:f.call(l)}).filter(l=>!!l);if(!a.length)return Array.from(n.files??[]).map(l=>({path:l.name,file:l}));const s=[];for(const l of a)await Wt(l,"",s);return s}for(const[n,r]of Object.entries({typescript:an,javascript:cn,json:dn,markdown:un,css:vn,xml:kn,bash:wn,python:_n,yaml:En,sql:Sn,diff:Cn}))bt.registerLanguage(n,r);const ta=n=>{const r=n.slice(n.lastIndexOf(".")+1);return{ts:"typescript",tsx:"typescript",js:"javascript",jsx:"javascript",json:"json",md:"markdown",css:"css",html:"xml",sh:"bash",py:"python",yml:"yaml",yaml:"yaml",sql:"sql"}[r]??""};function na({msg:n,onForce:r,onCancel:a}){return t.jsxs(Qe,{open:!0,title:"Operasi ditolak",onClose:a,width:460,footer:t.jsxs(t.Fragment,{children:[t.jsx(L,{size:"sm",variant:"ghost",onClick:a,children:"Batal"}),t.jsx(L,{size:"sm",leftIcon:"alert-triangle",onClick:r,children:"Paksa"})]}),children:[t.jsx("pre",{style:{fontFamily:"var(--font-mono)",fontSize:12,whiteSpace:"pre-wrap",color:"var(--text-muted)",marginBottom:12},children:n}),t.jsx("div",{style:{fontSize:12.5,color:"var(--clay-600)",marginBottom:14},children:"Paksa bisa membuang perubahan tak ter-commit & mengganggu sesi Claude yang jalan."})]})}function aa({projectId:n,onClose:r}){const[a,s]=h.useState([]),[l,f]=h.useState(""),[x,v]=h.useState(""),_=h.useCallback(()=>{M.ideRemotes(n).then(s).catch(()=>s([]))},[n]);return h.useEffect(()=>{_()},[_]),t.jsxs(Qe,{open:!0,title:"Remotes",onClose:r,width:560,children:[a.length===0&&t.jsx("div",{style:{fontSize:12.5,color:"var(--text-subtle)",marginBottom:10},children:"Belum ada remote."}),a.map(k=>t.jsxs("div",{className:"hn-dense-row",style:{display:"flex",alignItems:"center",gap:8,padding:"5px 0",borderBottom:"1px solid var(--border-hair)"},children:[t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:12.5,fontWeight:600,width:90},children:k.name}),t.jsx("span",{style:{flex:1,minWidth:0,fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-muted)",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:k.fetch}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"trash-2",onClick:()=>M.ideDeleteRemote(n,k.name).then(s).catch(()=>{})})]},k.name)),t.jsxs("div",{className:"hn-stack-mobile",style:{display:"flex",gap:8,marginTop:12},children:[t.jsx(ot,{size:"sm",value:l,"aria-label":"Nama remote",onChange:k=>f(k.target.value),placeholder:"origin",style:{width:100}}),t.jsx(ot,{size:"sm",value:x,"aria-label":"URL remote",onChange:k=>v(k.target.value),placeholder:"https://github.com/org/repo.git",style:{flex:1}}),t.jsx(L,{size:"sm",leftIcon:"plus",disabled:!l||!x,onClick:()=>M.ideAddRemote(n,l,x).then(k=>{s(k),f(""),v("")}).catch(()=>{}),children:"Tambah"})]})]})}function ua({projects:n,projectId:r,onProject:a,onToast:s,onGotoTerminal:l}){const f=Rt("ide",r),[x,v]=xe(f,"tab","explorer",pt),[_,k]=h.useState(""),[i,N]=xe(f,"viewRef","",pt),[o,u]=h.useState({branches:[],remotes:[]}),[c,g]=h.useState([]),[d,S]=h.useState([]),[E,C]=h.useState(new Set),[w,R]=xe(f,"hidden",!1,Jt),[O,Z]=h.useState("loading"),[T,G]=xe(f,"selected","",pt),[P,W]=xe(f,"selKind","file",Ze("file","staged","unstaged")),[p,I]=h.useState(null),[$,V]=h.useState("view"),[X,Q]=h.useState(""),[j,F]=xe(f,"mdView","preview",Ze("preview","source")),[A,D]=h.useState(null),[B,q]=h.useState(null),[Ue,ke]=xe(f,"stagedView","list",Ze("list","tree")),[He,b]=xe(f,"changedView","list",Ze("list","tree")),[z,re]=h.useState(null),[ce,Se]=xe(f,"diffTab","diff",Ze("diff","source")),[ue,Ie]=h.useState(!1),[Je,je]=h.useState(!1),[Ce,ye]=h.useState("files"),[me,ve]=h.useState(""),[oe,de]=h.useState(null),[te,we]=h.useState(null),[ee,J]=h.useState(null),[Ge,Ne]=h.useState(!1),Le=h.useRef(null),ze=h.useRef(null),et=typeof HTMLInputElement<"u"&&"webkitdirectory"in HTMLInputElement.prototype,ge=h.useCallback(()=>{Z("loading"),M.ideTree(r,i,{hidden:w}).then(e=>{g(e.files),S(e.dirs??[]),C(new Set(e.ignored??[])),Z("ready")}).catch(()=>Z("error"))},[r,i,w]),ct=h.useCallback(async e=>{try{const m=await M.ideTree(r,"",{under:e});g(y=>[...new Set([...y,...m.files])].sort()),S(y=>[...new Set([...y,...m.dirs??[]])].sort()),C(y=>new Set([...y,...m.files,...m.dirs??[]]))}catch{s==null||s("Gagal membuka folder","err","x-circle")}},[r,s]),le=h.useCallback(()=>{M.ideWorkingStatus(r).then(q).catch(()=>q(null))},[r]);h.useEffect(()=>{ge()},[ge]),h.useEffect(()=>{le()},[le]),h.useEffect(()=>{M.listBranches(r).then(u).catch(()=>{})},[r]),h.useEffect(()=>{if(!T){I(null),re(null);return}let e=!0;return je(!1),P==="file"?(re(null),M.ideFile(r,T,i).then(m=>{e&&(I(m),V("view"),F("preview"))}).catch(()=>{e&&I(null)})):(I(null),Se("diff"),M.ideFileDiff(r,T,P==="staged").then(m=>{e&&re(m)}).catch(()=>{e&&re(null)})),()=>{e=!1}},[T,P,r,i]);const tt=e=>{W("file"),G(e),ye("viewer")},dt=e=>{W("staged"),G(e),ye("viewer")},We=e=>{W("unstaged"),G(e),ye("viewer")},ut=[{value:"",label:"· working tree ·"},...o.branches.map(e=>({value:e,label:e})),...o.remotes.map(e=>({value:`origin/${e}`,label:`origin/${e}`}))];async function $e(e){try{const m=await M.ideGit(r,e);return N(""),ge(),le(),m}catch(m){throw m instanceof Ye&&m.status===409&&D({op:e,msg:m.message}),m}}async function he(){i&&await $e({op:"checkout",ref:i}).catch(()=>{})}async function De(e,m){try{const y=await M.ideGitMerge(r,{source:e,...m});y.status==="conflict"?(l==null||l(y.sessionId),s==null||s("konflik merge — selesaikan di Terminal","warn","git-merge")):(N(""),ge(),le(),s==null||s(`merge berhasil · ${y.detail}`,"ok","git-merge"))}catch(y){const H=y instanceof Ye?y.status:0;throw s==null||s("gagal merge"+(H===409?" · cek branch/target":""),"err","x-circle"),y}}async function Ae(e,m){try{const y=e==="rebase"?await M.ideGitRebase(r,m):e==="pull"?await M.ideGitPull(r,{source:m}):await M.ideGitDrop(r,m);y.status==="conflict"?(l==null||l(y.sessionId),s==null||s(`konflik ${e} — selesaikan di Terminal`,"warn","git-merge")):(N(""),ge(),s==null||s(`${e} berhasil · ${y.detail}`,"ok","git-branch"))}catch(y){const H=y instanceof Ye?y.status:0;throw s==null||s(`gagal ${e}`+(H===409?" · cek working tree/branch":""),"err","x-circle"),y}}async function nt(){if(!A)return;const e={...A.op,force:!0};D(null),await M.ideGit(r,e).then(()=>{N(""),ge(),le()}).catch(()=>{})}function se(){Q((p==null?void 0:p.content)??""),V("edit")}async function at(){await M.putIdeFile(r,T,X),I(e=>e&&{...e,content:X}),V("view"),le()}const Be=e=>me?`${me}/${e}`:e,Re=()=>{ge(),le()};async function mt(e,m){if(!m.trim())return;const y=Be(m.trim());try{await M.ideCreateEntry(r,y,e),Re(),s==null||s(`${e==="dir"?"folder":"berkas"} dibuat · ${y}`,"ok","file-plus")}catch(H){const fe=H instanceof Ye?H.status:0;s==null||s(fe===409?`sudah ada · ${y}`:`gagal membuat ${y}`,"err","x-circle")}}async function Pe(e,m=!1){if(!e.length)return;let y;try{y=await M.ideUpload(r,me,e,m)}catch{s==null||s("gagal mengunggah","err","x-circle");return}Re();const H=new Set(y.skipped.filter(ie=>ie.reason==="exists").map(ie=>ie.path)),fe=y.skipped.filter(ie=>ie.reason!=="exists");y.written.length&&(s==null||s(`${y.written.length} berkas terunggah`,"ok","upload")),fe.length&&(s==null||s(`${fe.length} berkas dilewati · ${fe[0].reason}`,"warn","alert-triangle")),we(H.size?{files:e.filter(ie=>H.has(Be(ie.path)))}:null)}const ne=P==="file"&&T?{path:T,kind:"file"}:me?{path:me,kind:"dir"}:null;async function Ke(e){if(!(!ne||!e.trim()))try{await M.ideRenameEntry(r,ne.path,e.trim()),Re(),ne.kind==="file"?G(e.trim()):ve(e.trim()),s==null||s(`diganti nama · ${e.trim()}`,"ok","pencil")}catch(m){const y=m instanceof Ye?m.status:0;s==null||s(y===409?"nama tujuan sudah dipakai":"gagal mengganti nama","err","x-circle")}}async function gt(){if(ne){J(null);try{await M.ideDeleteEntry(r,ne.path),Re(),ne.kind==="file"?(G(""),I(null)):ve(""),s==null||s(`dihapus · ${ne.path}`,"ok","trash-2")}catch{s==null||s(`gagal menghapus ${ne.path}`,"err","x-circle")}}}const pe=e=>{const y=Array.from((e==null?void 0:e.files)??[]).map(H=>({path:H.webkitRelativePath||H.name,file:H}));return e&&(e.value=""),y},Te=h.useMemo(()=>{if(!p||p.content===null)return"";const e=ta(T);try{return e?bt.highlight(p.content,{language:e}).value:bt.highlightAuto(p.content).value}catch{return p.content}},[p,T]),be=(()=>{const e=P!=="file",m=e?z:p;return!m||m.binary||m.content===null||!qe(T)?null:{text:m.content,download:e?y=>M.ideFileDiffDownloadUrl(r,T,P==="staged",y):y=>M.ideFileDownloadUrl(r,T,i,y)}})(),rt=t.jsxs("div",{className:"hn-ide-toolbar",children:[t.jsx(Xe,{size:"sm",value:r,onChange:e=>a(e.target.value),options:n.map(e=>({value:e.id,label:e.name}))}),t.jsx(Xe,{size:"sm",value:i,onChange:e=>N(e.target.value),options:ut}),t.jsx(L,{size:"sm",variant:"secondary",leftIcon:"git-branch",onClick:he,disabled:!i,children:"Checkout"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"download-cloud",onClick:()=>{$e({op:"fetch",prune:!0}).then(()=>M.listBranches(r).then(u)).catch(()=>{})},children:"Fetch"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"git-branch",onClick:()=>Ie(!0),children:"Remotes"})]}),Me=P!=="file";return t.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:16,...x==="explorer"?{flex:"1 1 0",minHeight:0}:null},children:[t.jsxs("div",{className:"hn-ide-head",style:{flex:"0 0 auto"},children:[t.jsx(St,{tabs:[{value:"explorer",label:"Explorer"},{value:"graph",label:"Git Graph"},{value:"branches",label:"Branches"},{value:"worktrees",label:"Worktrees"}],value:x,onChange:v}),rt]}),x==="explorer"?t.jsx(Qt,{ariaLabel:"Panel IDE",active:Ce,onActiveChange:e=>ye(e),masterWidth:300,panels:[{id:"files",label:"Files",className:"hn-panel-flex",content:t.jsxs(Oe,{padding:0,fill:!0,children:[t.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"center",gap:8,padding:"10px 14px",borderBottom:"1px solid var(--border-hair)"},children:[t.jsxs("span",{className:"hn-eyebrow",style:{flex:1},children:["changes",B!=null&&B.branch?` · ${B.branch}`:""]}),t.jsx(L,{size:"sm",variant:w?"secondary":"ghost",leftIcon:w?"eye":"eye-off",disabled:!!i,"aria-pressed":w,title:i?"Hanya di working tree":"Tampilkan berkas & folder yang .gitignore sembunyikan",onClick:()=>R(!w),children:"Tersembunyi"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:Re,children:"Muat ulang"})]}),t.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"center",gap:6,flexWrap:"wrap",padding:"8px 14px",borderBottom:"1px solid var(--border-hair)"},children:[t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"file-plus",onClick:()=>de({mode:"file",value:""}),children:"File baru"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"folder-plus",onClick:()=>de({mode:"dir",value:""}),children:"Folder baru"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"upload",onClick:()=>{var e;return(e=Le.current)==null?void 0:e.click()},children:"Unggah"}),et&&t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"folder-up",onClick:()=>{var e;return(e=ze.current)==null?void 0:e.click()},children:"Unggah folder"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"pencil",disabled:!ne,onClick:()=>de({mode:"rename",value:(ne==null?void 0:ne.path)??""}),children:"Ganti nama"}),t.jsx(L,{size:"sm",variant:"ghost",leftIcon:"trash-2",disabled:!ne,onClick:()=>J(ne),children:"Hapus"}),t.jsxs("span",{"data-testid":"ide-entry-dest",style:{flex:"1 1 auto",minWidth:0,textAlign:"right",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",fontFamily:"var(--font-mono)",fontSize:11.5,color:"var(--text-subtle)"},children:["→ ",me||"root"]}),t.jsx("input",{ref:Le,type:"file",multiple:!0,hidden:!0,onChange:()=>void Pe(pe(Le.current))}),t.jsx("input",{ref:ze,type:"file",hidden:!0,webkitdirectory:"",onChange:()=>void Pe(pe(ze.current))})]}),t.jsxs("div",{"data-testid":"ide-tree-scroll",onDragOver:e=>{e.preventDefault(),Ne(!0)},onDragLeave:()=>Ne(!1),onDrop:e=>{e.preventDefault(),Ne(!1),ea(e.dataTransfer).then(m=>Pe(m))},style:{padding:8,flex:"1 1 auto",minHeight:0,overflow:"auto",outline:Ge?"2px dashed var(--brass-500)":"none",outlineOffset:-4},children:[t.jsx(kt,{label:"Staged",changed:(B==null?void 0:B.staged)??[],selected:P==="staged"?T:"",onSelect:dt,view:Ue,onView:ke,emptyText:"Tak ada file staged."}),t.jsx("div",{style:{borderTop:"1px solid var(--border-hair)",margin:"6px 0"}}),t.jsx(kt,{label:"Changed",changed:(B==null?void 0:B.unstaged)??[],selected:P==="unstaged"?T:"",onSelect:We,view:He,onView:b,emptyText:"Tak ada file berubah."}),t.jsxs("div",{className:"hn-eyebrow",style:{padding:"6px 8px",marginTop:8,borderTop:"1px solid var(--border-hair)"},children:["Files · ",i||"working tree"]}),O==="loading"?t.jsx(Y,{kind:"loading",compact:!0,title:"Memuat file…"}):O==="error"?t.jsx(Y,{kind:"error",compact:!0,title:"Gagal memuat file",action:ge}):c.length===0?t.jsx(Y,{kind:"empty",compact:!0,icon:"folder-open",title:"Tak ada file"}):Tt(c,d).map(e=>t.jsx(Mt,{node:e,selected:P==="file"?T:"",onSelect:tt,dirSelected:me,onSelectDir:ve,ignored:E,onExpand:w?ct:void 0},e.path))]})]})},{id:"viewer",label:"Viewer",className:"hn-panel-flex",content:t.jsxs(Oe,{padding:0,fill:!0,children:[t.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"center",gap:12,padding:"10px 16px",borderBottom:"1px solid var(--border-hair)",flexWrap:"wrap"},children:[t.jsx(Fe,{name:"file-text",size:15,color:"var(--text-muted)"}),t.jsx("span",{style:{fontFamily:"var(--font-mono)",fontSize:13,color:"var(--text-strong)"},children:T||"—"}),!Me&&(p==null?void 0:p.truncated)&&t.jsx(ae,{tone:"warn",size:"sm",children:"terpotong"}),Me&&(z==null?void 0:z.status)&&t.jsx(ae,{tone:z.status==="D"?"err":z.status==="A"?"ok":"brass",size:"sm",children:z.status}),t.jsx("span",{style:{flex:1}}),Me?t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[be&&t.jsx(L,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>je(!0),children:"Preview lebar"}),t.jsx("div",{style:{display:"flex",gap:2,background:"var(--bone-100)",borderRadius:"var(--radius-pill)",padding:2},children:["diff","source"].map(e=>t.jsx("button",{onClick:()=>Se(e),style:{padding:"4px 12px",border:"none",cursor:"pointer",borderRadius:"var(--radius-pill)",fontSize:12,textTransform:"capitalize",background:ce===e?"var(--surface-card)":"transparent",color:ce===e?"var(--text-strong)":"var(--text-muted)",fontWeight:ce===e?600:400},children:e},e))})]}):$==="view"?t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[p&&!p.binary&&qe(T)&&t.jsx("div",{style:{display:"flex",gap:2,background:"var(--bone-100)",borderRadius:"var(--radius-pill)",padding:2},children:["preview","source"].map(e=>t.jsx("button",{onClick:()=>F(e),style:{padding:"4px 12px",border:"none",cursor:"pointer",borderRadius:"var(--radius-pill)",fontSize:12,background:j===e?"var(--surface-card)":"transparent",color:j===e?"var(--text-strong)":"var(--text-muted)",fontWeight:j===e?600:400},children:e==="preview"?"Preview":"Source"},e))}),be&&t.jsx(L,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>je(!0),children:"Preview lebar"}),t.jsx(Ct,{href:e=>M.ideFileDownloadUrl(r,T,i,e),disabled:!p||p.binary}),t.jsx(L,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:se,disabled:!p||p.binary,children:"Edit"})]}):t.jsxs("div",{style:{display:"flex",gap:8},children:[t.jsx(L,{size:"sm",variant:"ghost",onClick:()=>V("view"),children:"Batal"}),t.jsx(L,{size:"sm",leftIcon:"check",onClick:at,children:"Simpan"})]})]}),t.jsx("div",{"data-testid":"doc-preview-scroll",style:{flex:"1 1 auto",minHeight:0,overflow:"auto"},children:Me?T?z===null?t.jsx(Y,{kind:"loading",title:"Memuat…",hint:T}):z.binary?t.jsx(Y,{kind:"empty",icon:"file",title:"Berkas biner",hint:T}):ce==="diff"?t.jsxs("div",{style:{padding:"10px 0"},children:[t.jsx(Ot,{diff:z.diff??""}),z.truncated&&t.jsx("div",{style:{padding:"8px 12px",fontSize:11,color:"var(--text-subtle)"},children:"… dipotong pada 256 KB."})]}):z.content===null?t.jsx(Y,{kind:"empty",icon:"trash-2",title:"File dihapus",hint:"Tak ada isi untuk ditampilkan."}):t.jsx("pre",{style:{margin:0,padding:"12px 16px",fontFamily:"var(--font-mono)",fontSize:12.5,lineHeight:1.6,whiteSpace:"pre-wrap",wordBreak:"break-word",color:"var(--text-body)"},children:z.content}):t.jsx(Y,{kind:"empty",icon:"file-text",title:"Pilih file dari Staged/Changed"}):T?p===null?t.jsx(Y,{kind:"loading",title:"Memuat…",hint:T}):p.binary?t.jsx(Y,{kind:"empty",icon:"file",title:"File biner",hint:T}):$==="edit"?t.jsx("textarea",{value:X,onChange:e=>Q(e.target.value),spellCheck:!1,style:{width:"100%",minHeight:"clamp(240px, 50dvh, 560px)",boxSizing:"border-box",resize:"vertical",border:"none",outline:"none",padding:"16px 18px",fontFamily:"var(--font-mono)",fontSize:12.5,lineHeight:1.7,color:"var(--text-body)",background:"var(--surface-card)"}}):qe(T)&&j==="preview"?t.jsx("div",{style:{padding:"16px 20px"},children:t.jsx(Nt,{text:p.content??"",name:T})}):t.jsx("pre",{style:{margin:0,padding:"16px 18px",overflow:"auto"},children:t.jsx("code",{className:"hljs",style:{fontFamily:"var(--font-mono)",fontSize:12.5,lineHeight:1.7},dangerouslySetInnerHTML:{__html:Te}})}):t.jsx(Y,{kind:"empty",icon:"file-text",title:"Pilih file dari pohon di kiri"})})]})}]}):x==="graph"?t.jsx(Hn,{projectId:r,onRunGit:$e,onMerge:De,onRebase:e=>Ae("rebase",e),onPull:e=>Ae("pull",e),onDrop:e=>Ae("drop",e),onOpenFile:(e,m)=>{N(m),tt(e),v("explorer")}}):x==="branches"?t.jsx(Zn,{projectId:r,onOpenWorktree:e=>{k(e.split("/").pop()??""),v("worktrees")}}):t.jsx(Xn,{projectId:r,focus:_,onOpenBranch:()=>v("branches")}),Je&&be&&t.jsx(en,{path:T,text:be.text,eyebrow:i||(B==null?void 0:B.branch)||r,download:be.download,onClose:()=>je(!1)}),oe&&t.jsx(Qe,{open:!0,title:oe.mode==="dir"?"Folder baru":oe.mode==="file"?"Berkas baru":"Ganti nama",eyebrow:oe.mode==="rename"?void 0:`→ ${me||"root"}`,onClose:()=>de(null),width:460,footer:t.jsxs(t.Fragment,{children:[t.jsx(L,{size:"sm",variant:"ghost",onClick:()=>de(null),children:"Batal"}),t.jsx(L,{size:"sm",leftIcon:"check",disabled:!oe.value.trim(),onClick:()=>{const e=oe;de(null),e.mode==="rename"?Ke(e.value):mt(e.mode,e.value)},children:"Simpan"})]}),children:t.jsx(ot,{size:"sm",autoFocus:!0,value:oe.value,"aria-label":oe.mode==="dir"?"Nama folder":oe.mode==="file"?"Nama berkas":"Path baru",placeholder:oe.mode==="dir"?"komponen":"Baru.tsx",onChange:e=>de({...oe,value:e.target.value}),style:{width:"100%"}})}),te&&t.jsxs(Qe,{open:!0,title:`${te.files.length} berkas sudah ada`,onClose:()=>we(null),width:520,footer:t.jsxs(t.Fragment,{children:[t.jsx(L,{size:"sm",variant:"ghost",onClick:()=>we(null),children:"Biarkan"}),t.jsx(L,{size:"sm",leftIcon:"alert-triangle",onClick:()=>{const e=te.files;we(null),Pe(e,!0)},children:"Timpa semua"})]}),children:[t.jsx("div",{style:{fontSize:12.5,color:"var(--text-muted)",marginBottom:10},children:"Berkas berikut dilewati supaya perubahan yang belum di-commit tak hilang."}),t.jsx("pre",{style:{margin:0,fontFamily:"var(--font-mono)",fontSize:12,maxHeight:220,overflow:"auto"},children:te.files.map(e=>Be(e.path)).join(`
|
|
2
|
+
`)})]}),t.jsx(At,{open:!!ee,title:(ee==null?void 0:ee.kind)==="dir"?"Hapus folder beserta isinya?":"Hapus berkas?",eyebrow:ee==null?void 0:ee.path,message:(ee==null?void 0:ee.kind)==="dir"?"Seluruh isi folder ini hilang. Yang belum di-commit tak bisa dikembalikan.":"Yang belum di-commit tak bisa dikembalikan.",requireText:(ee==null?void 0:ee.kind)==="dir"?ee.path.split("/").pop():void 0,onConfirm:()=>void gt(),onCancel:()=>J(null)}),A&&t.jsx(na,{msg:A.msg,onForce:nt,onCancel:()=>D(null)}),ue&&t.jsx(aa,{projectId:r,onClose:()=>Ie(!1)})]})}export{ua as IdeScreen};
|