hanoman 0.9.19 → 0.9.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/cli.js +2966 -775
  3. package/dist/server.js +10106 -8155
  4. package/docs/agent-integration.md +208 -97
  5. package/package.json +1 -1
  6. package/prisma/migrations/20261010070000_remove_memory_changelog/migration.sql +40 -0
  7. package/prisma/migrations/20261012100000_spec_reviewed_at/migration.sql +13 -0
  8. package/prisma/schema.prisma +7 -80
  9. package/web/assets/DalangHanomanScreen-Us_5qG25.js +13 -0
  10. package/web/assets/DalangHanomanScreen-gk7fa9dl.css +1 -0
  11. package/web/assets/{DocPreviewModal-CHrsP0pL.js → DocPreviewModal-CJP6d0Hx.js} +1 -1
  12. package/web/assets/DocsWorkspace-CSak7xFX.css +1 -0
  13. package/web/assets/DocsWorkspace-zGpPd7u3.js +3 -0
  14. package/web/assets/IdeScreen-CppUucs0.css +10 -0
  15. package/web/assets/IdeScreen-DTvfuR2n.js +2 -0
  16. package/web/assets/LeadScreen-CN53yR_e.css +1 -0
  17. package/web/assets/LeadScreen-DWbunLkQ.js +1 -0
  18. package/web/assets/ReviewScreen-Ch9UiKlx.js +1 -0
  19. package/web/assets/SchedulerScreen-zIUh-Vbe.js +1 -0
  20. package/web/assets/SettingsScreen-CLMuCJ6R.js +62 -0
  21. package/web/assets/SettingsScreen-DQZ3K43g.css +1 -0
  22. package/web/assets/TeamScreen-CV1R5Ekk.js +1 -0
  23. package/web/assets/TeamScreen-CtkpFpCF.css +1 -0
  24. package/web/assets/TerminalScreen-DrgZKlw2.css +1 -0
  25. package/web/assets/TerminalScreen-QVjhjrxx.js +2 -0
  26. package/web/assets/TriageScreen-B6_KrS6l.css +1 -0
  27. package/web/assets/TriageScreen-Dpj4YrBQ.js +1 -0
  28. package/web/assets/VpsScreen-BzXpc3le.css +1 -0
  29. package/web/assets/VpsScreen-DX_HEquM.js +2 -0
  30. package/web/assets/index-CL0_zz87.css +32 -0
  31. package/web/assets/index-DmnwLncG.js +1012 -0
  32. package/web/assets/live-B193WtZm.js +1 -0
  33. package/web/assets/sched-lead-shared-BjMO8Q_k.js +1 -0
  34. package/web/assets/scheduler-CQt-VP9-.css +1 -0
  35. package/web/assets/settings-rebase-BI7-Bk98.js +1 -0
  36. package/web/index.html +10 -3
  37. package/web/assets/ChangelogScreen-DL5v_FZf.js +0 -1
  38. package/web/assets/DalangHanomanScreen-aLBtUGE4.js +0 -1
  39. package/web/assets/DocsWorkspace-D262CVxH.js +0 -3
  40. package/web/assets/IdeScreen-BfC0goYb.css +0 -10
  41. package/web/assets/IdeScreen-D2GI3KYh.js +0 -2
  42. package/web/assets/LeadScreen-eb_DK1j6.js +0 -1
  43. package/web/assets/ReviewScreen-DarOFH_a.js +0 -1
  44. package/web/assets/SchedulerScreen-DKoMf2LT.js +0 -1
  45. package/web/assets/SettingsScreen-BAUhwd5K.js +0 -62
  46. package/web/assets/TeamScreen-C2fSsQ8C.js +0 -1
  47. package/web/assets/TerminalScreen-GsfOMtu5.js +0 -2
  48. package/web/assets/TriageScreen-DdKMAroz.js +0 -1
  49. package/web/assets/VpsScreen-CDAjvyT1.js +0 -2
  50. package/web/assets/hnm-blencong-v01-CBBfchr0.webp +0 -0
  51. package/web/assets/hnm-dalang-six-arms-v01-DeBacuq8.webp +0 -0
  52. package/web/assets/hnm-hero-rig-arm-ml-v01-Kts3pjTf.webp +0 -0
  53. package/web/assets/hnm-hero-rig-arm-mr-v01-DQgnE6bD.webp +0 -0
  54. package/web/assets/hnm-hero-rig-arm-ul-v01-CIAWAxFe.webp +0 -0
  55. package/web/assets/hnm-hero-rig-arm-ur-v01-C0R0CZnp.webp +0 -0
  56. package/web/assets/hnm-hero-rig-body-v01-DmbKJJHB.webp +0 -0
  57. package/web/assets/hnm-wayang-panakawan-v01-1LGv-V8N.webp +0 -0
  58. package/web/assets/hnm-wayang-project-v01-BG9EZqzn.webp +0 -0
  59. package/web/assets/hnm-wayang-putri-v01-F6p69kHq.webp +0 -0
  60. package/web/assets/hnm-wayang-satria-alus-v01-CpfoXKTy.webp +0 -0
  61. package/web/assets/hnm-wayang-satria-gagah-v01-bLfIYAsv.webp +0 -0
  62. package/web/assets/index-DI8I0VA5.css +0 -32
  63. package/web/assets/index-gNO91_qw.js +0 -1063
  64. package/web/assets/live-Cz6dWAau.js +0 -1
@@ -0,0 +1,13 @@
1
+ import{j as n,u as B,I as M,l as w,S as R,F as S}from"./index-DmnwLncG.js";import{R as C}from"./react-DfGhg7ZW.js";import"./markdown-CWEY34jk.js";import"./xterm-3VOAfa_q.js";function $({height:a,color:s,rod:t}){return n.jsxs("svg",{viewBox:"0 0 64 128",width:a*64/128,height:a,"aria-hidden":"true",focusable:"false",children:[n.jsx("path",{d:"M31.2 74 L30.2 127 L33.8 127 L32.8 74 Z",fill:t}),n.jsx("path",{d:"M51 79 L50.2 122 L53 122 L52.4 79 Z",fill:t}),n.jsx("path",{d:`M32 73
2
+ C 24 76, 19 88, 17.5 103 C 17 106, 20 107, 24 106.4
3
+ C 28 106, 30 104, 32 104 C 34 104, 36 106, 40 106.4 C 44 107, 47 106, 46.5 103
4
+ C 45 88, 40 76, 32 73 Z`,fill:s}),n.jsx("path",{d:"M32 74 C 29.5 66, 29.5 60, 31 53 L 37 53 C 38.5 60, 37.5 67, 34.5 74 Z",fill:s}),n.jsx("path",{d:`M31 53
5
+ C 28.5 48, 29 43.5, 31.5 40.5
6
+ C 28 38.5, 25 34, 25.5 28.5
7
+ C 26 22, 30 16.5, 36 15
8
+ C 34 20, 34.5 24, 37.5 27.5
9
+ C 41 31.5, 44.5 33.5, 46.5 37.5
10
+ C 48 40.5, 47 43.5, 44.5 44.5
11
+ C 46 46.5, 46.5 49, 45 51.5
12
+ C 43 54.5, 38 55, 34.5 53.8 Z`,fill:s}),n.jsx("path",{d:`M35 55 C 40 58, 44.5 63, 47.5 69 C 49.5 73, 51 76, 51.8 79.5 L 49.4 80.5
13
+ C 47 76.5, 44.5 72.5, 41.5 68.5 C 38.5 64.5, 35.5 61, 33 58.5 Z`,fill:s})]})}const N=a=>!!a.decision&&!a.deciding,y={wait:{color:"var(--amber-500)",rod:"var(--brass-300)"},run:{color:"var(--brass-400)",rod:"var(--brass-300)"},off:{color:"var(--term-dim)",rod:"var(--term-line)"}};function g({tone:a,name:s,fase:t,sesi:d,aksi:o,onClick:h}){return n.jsxs("button",{type:"button",className:`hn-dlg-row hn-dlg-row--${a}`,onClick:h,children:[n.jsx("span",{className:"hn-dlg-glyph","aria-hidden":"true",children:n.jsx($,{height:24,color:y[a].color,rod:y[a].rod})}),n.jsx("span",{className:"hn-dlg-name",children:s}),n.jsx("span",{className:"hn-dlg-fase",children:t}),d&&n.jsx("span",{className:"hn-dlg-sesi",children:d}),n.jsx("span",{className:"hn-dlg-aksi",children:o})]})}function K(a,s){return a?{tone:"ok",text:"Terhubung"}:s?{tone:"idle",text:"Jeda · tab tersembunyi"}:{tone:"err",text:"Koneksi terputus · menyambung ulang"}}function A({projects:a,backlog:s,sessions:t,onOpenSession:d,onOpenProject:o,onGoto:h,onExit:v,previous:l}){const u=B(),m=l?l.onBack:v,j=C.useRef(m);j.current=m,C.useEffect(()=>{const e=i=>{i.key==="Escape"&&j.current()};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[]);const r=t.filter(e=>!e.exited).sort((e,i)=>e.id.localeCompare(i.id)),L=new Set(r.map(e=>e.projectId)),c=r.filter(N),x=r.filter(e=>!N(e)),p=a.filter(e=>!L.has(e.id)),I=new Map(s.map(e=>[e.id,e])),f=new Map(a.map(e=>[e.id,e.name])),b=e=>{const i=e.specId?I.get(e.specId):void 0;return i?w(R,i.stage):e.flow?w(S,e.flow):"Sesi terminal"},E=[r.length===0?"Tidak ada sesi berjalan":`${r.length} sesi berjalan`,c.length>0?`${c.length} menunggu jawabanmu`:null,`${a.length} project`].filter(Boolean).join(" · "),k=K(u.connected,u.paused);return n.jsxs("div",{className:"hn-dlg",children:[n.jsxs("header",{className:"hn-dlg-top",children:[n.jsxs("div",{className:"hn-dlg-head",children:[n.jsx("h2",{className:"hn-dlg-title",children:"Dalang Hanoman"}),n.jsx("p",{className:"hn-dlg-summary",children:E}),n.jsxs("p",{className:`hn-dlg-link hn-dlg-link--${k.tone}`,role:"status",children:[n.jsx("span",{className:"hn-dlg-dot","aria-hidden":"true"}),k.text]})]}),n.jsxs("div",{className:"hn-dlg-actions",children:[n.jsx("button",{type:"button",className:"hn-dlg-btn",onClick:()=>h("terminal"),children:"Buka terminal"}),n.jsx("button",{type:"button",className:"hn-dlg-exit",onClick:m,"aria-label":l?`Kembali ke ${l.label}`:"Keluar dari panggung (Esc)",title:l?`Kembali ke ${l.label}`:"Keluar dari panggung (Esc)",children:n.jsx(M,{name:l?"arrow-left":"x",size:18})})]})]}),c.length>0&&n.jsxs("section",{className:"hn-dlg-section","aria-labelledby":"dlg-wait",children:[n.jsx("h3",{id:"dlg-wait",className:"hn-dlg-rt",children:"Menunggu jawabanmu"}),n.jsx("ul",{className:"hn-dlg-list",children:c.map(e=>n.jsx("li",{children:n.jsx(g,{tone:"wait",name:f.get(e.projectId)??e.projectId,fase:b(e),sesi:e.specId??"",aksi:"Jawab",onClick:()=>d(e.id)})},e.id))})]}),n.jsxs("section",{className:"hn-dlg-section","aria-labelledby":"dlg-prj",children:[n.jsx("h3",{id:"dlg-prj",className:"hn-dlg-rt",children:"Project"}),a.length===0?n.jsxs("div",{className:"hn-dlg-empty",children:[n.jsx("div",{children:"Panggung sunyi — belum ada project di workspace."}),n.jsx("div",{className:"hn-dlg-empty-hint",children:"Tambahkan project dan sang dalang mengangkat wayangnya."})]}):x.length+p.length>0&&n.jsxs("ul",{className:"hn-dlg-list",children:[x.map(e=>n.jsx("li",{children:n.jsx(g,{tone:"run",name:f.get(e.projectId)??e.projectId,fase:b(e),sesi:e.specId??"",aksi:"Buka terminal",onClick:()=>d(e.id)})},e.id)),p.map(e=>n.jsx("li",{children:n.jsx(g,{tone:"off",name:e.name,fase:"Tidak ada sesi",sesi:"",aksi:"Buka project",onClick:()=>o(e)})},e.id))]})]})]})}export{A as DalangHanomanScreen};
@@ -0,0 +1 @@
1
+ .hn-dlg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;overflow-y:auto;overscroll-behavior:contain;background:var(--term-bg);color:var(--term-fg);padding:calc(var(--space-5) + var(--safe-top)) var(--space-6) calc(var(--space-4) + var(--safe-bottom))}.hn-dlg-top{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:var(--space-3) var(--space-4)}.hn-dlg-head{flex:1 1 260px;min-width:0}.hn-dlg-title{margin:0;font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--weight-semibold);line-height:var(--leading-tight);color:var(--term-fg)}.hn-dlg-summary{margin:var(--space-1) 0 0;font-size:var(--text-md);color:var(--term-fg)}.hn-dlg-link{display:inline-flex;align-items:center;gap:var(--space-2);margin:var(--space-1) 0 0;font-size:var(--text-xs);color:var(--term-dim)}.hn-dlg-dot{flex:none;width:7px;height:7px;margin:0;border-radius:50%;background:var(--term-dim)}.hn-dlg-link--ok .hn-dlg-dot{background:var(--leaf-500)}.hn-dlg-link--err .hn-dlg-dot{background:var(--clay-500)}.hn-dlg-actions{display:flex;align-items:center;gap:var(--space-2);flex:0 0 auto}.hn-dlg-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;min-height:var(--touch-target);padding:0 var(--space-4);display:inline-flex;align-items:center;border:1px solid var(--term-line);border-radius:var(--radius-md);background:none;color:var(--brass-300);font:var(--weight-medium) var(--text-sm)/1 var(--font-ui);cursor:pointer}.hn-dlg-btn:hover{border-color:var(--brass-700)}.hn-dlg-exit{-webkit-appearance:none;-moz-appearance:none;appearance:none;flex:none;width:var(--touch-target);height:var(--touch-target);padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--term-line);border-radius:var(--radius-md);background:none;color:var(--term-dim);cursor:pointer}.hn-dlg-exit:hover{color:var(--term-fg);border-color:var(--brass-700)}.hn-dlg-btn:focus-visible,.hn-dlg-exit:focus-visible,.hn-dlg-row:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}.hn-dlg-section{margin-top:var(--space-6);min-width:0}.hn-dlg-rt{margin:0 0 var(--space-2);font-family:var(--font-mono);font-size:var(--text-2xs);font-weight:var(--weight-medium);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--brass-300)}.hn-dlg-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--term-line)}.hn-dlg-list>li{border-bottom:1px solid var(--term-line)}.hn-dlg-row{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;min-height:var(--touch-target);margin:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-1) var(--space-3);padding:var(--space-2) var(--space-2);border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.hn-dlg-row:hover{background:color-mix(in srgb,var(--term-fg) 4%,transparent)}.hn-dlg-glyph{flex:0 0 24px;display:inline-flex;justify-content:center}.hn-dlg-name{flex:1 1 160px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--term-fg)}.hn-dlg-fase{font-size:var(--text-xs);color:var(--term-fg)}.hn-dlg-sesi{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--term-dim)}.hn-dlg-aksi{margin-left:auto;font-size:var(--text-xs);font-weight:var(--weight-medium);color:var(--brass-300);white-space:nowrap}.hn-dlg-row--wait .hn-dlg-aksi{color:var(--amber-500)}.hn-dlg-row--off .hn-dlg-name,.hn-dlg-row--off .hn-dlg-fase,.hn-dlg-row--off .hn-dlg-aksi{color:var(--term-dim)}.hn-dlg-empty{margin-top:var(--space-6);font-size:var(--text-md);color:var(--term-fg)}.hn-dlg-empty-hint{margin-top:var(--space-1);font-size:var(--text-sm);color:var(--term-dim)}@media (max-width: 767px){.hn-dlg{padding-inline:var(--page-gutter-x, var(--space-4))}.hn-dlg-aksi{margin-left:0}}
@@ -1 +1 @@
1
- import{j as e,M as r,ay as d,aA as a,f as x}from"./index-gNO91_qw.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};
1
+ import{j as e,M as r,aO as d,aQ as a,m as x}from"./index-DmnwLncG.js";import"./react-DfGhg7ZW.js";function f({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{f as D};
@@ -0,0 +1 @@
1
+ .hn-docs-index{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;background:var(--surface-card);border:1px solid var(--border-hair);border-radius:var(--radius-lg);overflow:hidden}.hn-docs-index-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-2);padding:var(--space-3) var(--space-3);border-bottom:1px solid var(--border-hair);min-width:0;flex-wrap:wrap}.hn-docs-index-actions{display:flex;align-items:center;gap:var(--space-2)}.hn-docs-index-tools{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-2) var(--space-3) var(--space-3);border-bottom:1px solid var(--border-hair)}.hn-docs-cov{align-self:flex-start;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted);background:var(--bone-200);border-radius:var(--radius-pill);padding:2px 10px}.hn-docs-tree-scroll{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--space-1) var(--space-2) var(--space-2)}.hn-docs-tree{display:flex;flex-direction:column;min-width:0}.hn-docs-group{display:flex;flex-direction:column;gap:1px;padding-bottom:2px}.hn-docs-node{display:flex;align-items:center;gap:var(--space-2);width:100%;box-sizing:border-box;min-height:34px;padding:6px 8px;border-radius:var(--radius-sm);cursor:pointer;text-align:left;color:var(--text-body)}.hn-docs-node:hover{background:var(--bone-200)}.hn-docs-node:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.hn-docs-node-dir{font-weight:var(--weight-medium)}.hn-docs-dir-label{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-strong);font-weight:var(--weight-medium)}.hn-docs-node-file.is-selected{background:var(--brass-100)}.hn-docs-file-label{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-body);overflow-wrap:anywhere}.hn-docs-file-label.is-unlinked{color:var(--text-muted)}.hn-docs-node-file.is-selected .hn-docs-file-label{color:var(--brass-700);font-weight:var(--weight-semibold)}.hn-docs-unscored{margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--border-hair)}.hn-docs-unscored-label{padding:4px 8px;color:var(--text-subtle)}.hn-docs-results{display:flex;flex-direction:column;gap:1px}.hn-docs-result{display:flex;align-items:center;gap:var(--space-2);width:100%;box-sizing:border-box;min-height:34px;padding:6px 8px;border:0;border-radius:var(--radius-sm);background:transparent;color:var(--text-body);font:inherit;text-align:left;cursor:pointer;min-width:0}.hn-docs-result:hover{background:var(--bone-200)}.hn-docs-result.is-selected{background:var(--brass-100)}.hn-docs-result:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.hn-docs-result .hn-prj-mono{font-size:var(--text-xs);overflow-wrap:anywhere;min-width:0}.hn-docs-result-kind{margin-left:auto;flex:0 0 auto;font-size:var(--text-2xs);color:var(--text-subtle);text-transform:uppercase;letter-spacing:.3px}.hn-docs-viewer{display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;background:var(--surface-card);border:1px solid var(--border-hair);border-radius:var(--radius-lg);overflow:hidden}.hn-docs-viewer-head{display:flex;align-items:center;gap:var(--space-3);flex:0 0 auto;flex-wrap:wrap;padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-hair);min-width:0}.hn-docs-path{font-size:var(--text-sm);color:var(--text-strong);font-weight:var(--weight-medium);overflow-wrap:anywhere;min-width:0}.hn-docs-savebar{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;flex:0 0 auto;padding:var(--space-2) var(--space-4);background:var(--bone-100);border-bottom:1px solid var(--border-hair)}.hn-docs-error{flex:0 0 auto;padding:var(--space-2) var(--space-4);font-size:var(--text-sm);color:var(--clay-600);border-bottom:1px solid var(--border-hair)}.hn-docs-body{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--space-2) var(--space-6) var(--space-8)}.hn-docs-read{max-width:72ch}.hn-docs-edit{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);flex:1 1 auto;min-height:0}.hn-docs-edit-pane{display:flex;flex-direction:column;min-height:0;min-width:0}.hn-docs-edit-pane+.hn-docs-edit-pane{border-left:1px solid var(--border-hair)}.hn-docs-edit-label{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair);background:var(--bone-100)}.hn-docs-textarea{flex:1 1 auto;width:100%;box-sizing:border-box;resize:none;border:0;min-height:320px;padding:var(--space-4) var(--space-4);font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.7;color:var(--text-body);background:var(--surface-card)}.hn-docs-textarea:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.hn-docs-preview{flex:1 1 auto;overflow:auto;padding:var(--space-1) var(--space-6) var(--space-6);min-height:0}@media (max-width: 767px){.hn-docs-edit{grid-template-columns:minmax(0,1fr)}.hn-docs-edit-pane+.hn-docs-edit-pane{border-left:0;border-top:1px solid var(--border-hair)}.hn-docs-body{padding:var(--space-2) var(--space-4) var(--space-6)}.hn-docs-preview{padding:var(--space-1) var(--space-4) var(--space-4)}}
@@ -0,0 +1,3 @@
1
+ import{q as Ne,d as De,h as S,j as e,m as w,I as N,U as Se,Y as Ce,B as O,f as Ke,n as q,O as Le,aO as Me,aQ as te,D as $e,aT as ze,i as ie}from"./index-DmnwLncG.js";import{R as o}from"./react-DfGhg7ZW.js";import"./markdown-CWEY34jk.js";import"./xterm-3VOAfa_q.js";function de(n){let t={...n,kids:n.kids.map(de)};for(;!t.cat&&t.kids.length===1;){const i=t.kids[0];t={...i,label:t.label+"/"+i.label}}return t}function re(n){const t={path:"",kids:[]};for(const i of n){if(i.cat==="."){t.kids.push({path:".",label:".",cat:i,kids:[]});continue}let l=t;for(const u of i.cat.split("/")){const k=l.path?l.path+"/"+u:u;let m=l.kids.find(s=>s.path===k);m||(m={path:k,label:u,kids:[]},l.kids.push(m)),l=m}l.cat=i}return t.kids.map(de)}function le(n){const t=n.find(i=>i.scored&&i.linked)??n.find(i=>i.scored)??n[0];return t&&t.files[0]?`${t.cat}/${t.files[0]}`:""}function oe(n){return/(^|\/)adr(s)?(\/|$)/i.test(n)?"ADR":/(^|\/)prd(s)?(\/|$)/i.test(n)?"PRD":/(^|\/)spec(s|ification)?(\/|$)/i.test(n)?"Spec":"Lainnya"}const Fe=["PRD","Spec","ADR","Lainnya"],ue=n=>`dir:${n}`,Pe=(n,t)=>!!t&&t.startsWith(n.path+"/");function he({node:n,depth:t,ctx:i}){var h,p,y;const l=Pe(n,i.selected),[u,k]=o.useState(l);o.useEffect(()=>{l&&k(!0)},[l]);const m=((h=n.cat)==null?void 0:h.scored)??!0,s=((p=n.cat)==null?void 0:p.linked)??!0,v=ue(n.path),b=()=>k(d=>!d),c=d=>{d.key==="Enter"||d.key===" "?(d.preventDefault(),b()):d.key==="ArrowRight"&&!u?(d.preventDefault(),k(!0)):d.key==="ArrowLeft"&&u&&(d.preventDefault(),k(!1))};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{role:"treeitem","aria-level":t+1,"aria-expanded":u,tabIndex:i.tabbable===v?0:-1,className:"hn-docs-node hn-docs-node-dir",style:{paddingLeft:6+t*12},onClick:b,onKeyDown:c,onFocus:()=>i.setFocusKey(v),children:[e.jsx(N,{name:u?"chevron-down":"chevron-right",size:14,color:"var(--text-subtle)"}),e.jsx(N,{name:"folder",size:15,color:m?s?"var(--brass-500)":"var(--clay-500)":"var(--text-subtle)"}),e.jsxs("span",{className:"hn-docs-dir-label",children:[n.label,"/"]}),n.cat&&m&&(n.cat.linked?e.jsx(N,{name:"link",size:13,color:"var(--leaf-600)"}):e.jsx(N,{name:"unlink",size:13,color:"var(--clay-500)"}))]}),u&&e.jsxs("div",{role:"group",className:"hn-docs-group",children:[n.kids.map(d=>e.jsx(he,{node:d,depth:t+1,ctx:i},d.path)),(y=n.cat)==null?void 0:y.files.map(d=>{const f=n.path+"/"+d,j=f===i.selected;return e.jsxs("div",{role:"treeitem","aria-level":t+2,"aria-selected":j,"aria-current":j?"true":void 0,tabIndex:i.tabbable===f?0:-1,className:`hn-docs-node hn-docs-node-file${j?" is-selected":""}`,style:{paddingLeft:18+t*12},onClick:()=>i.onSelect(f),onFocus:()=>i.setFocusKey(f),onKeyDown:g=>{(g.key==="Enter"||g.key===" ")&&(g.preventDefault(),i.onSelect(f))},children:[e.jsx(N,{name:"file-text",size:13,color:j?"var(--brass-700)":"var(--text-subtle)"}),e.jsx("span",{className:`hn-docs-file-label${!m||s?"":" is-unlinked"}`,children:d})]},d)})]})]})}function ce({label:n,nodes:t,selected:i,onSelect:l}){const[u,k]=o.useState(null),m=t[0]?ue(t[0].path):"",v={selected:i,onSelect:l,tabbable:u??(i||m),setFocusKey:c=>k(c)},b=c=>{if(c.key!=="ArrowDown"&&c.key!=="ArrowUp")return;const h=Array.from(c.currentTarget.querySelectorAll('[role="treeitem"]')),p=h.indexOf(document.activeElement);if(p<0)return;c.preventDefault();const y=h[Math.min(h.length-1,Math.max(0,p+(c.key==="ArrowDown"?1:-1)))];y==null||y.focus()};return e.jsx("div",{role:"tree","aria-label":n,className:"hn-docs-tree",onKeyDown:b,children:t.map(c=>e.jsx(he,{node:c,depth:0,ctx:v},c.path))})}function Ie({projectId:n,projectName:t,docStatus:i}){const[l,u]=o.useState([]),[k,m]=o.useState(0),[s,v]=Ne(ze("docs",n),"selected","",$e),[b,c]=o.useState({}),[h,p]=o.useState("preview"),[y,d]=o.useState("tree"),[f,j]=o.useState(""),[g,U]=o.useState(!1),[L,W]=o.useState(!1),[G,C]=o.useState(""),[$,Q]=o.useState(""),[D,z]=o.useState("all"),{confirm:J,dialog:me}=De(),[F,K]=o.useState("loading"),[pe,ke]=o.useState(0);o.useEffect(()=>{let a=!0;return K("loading"),S.getDocs(n).then(r=>{if(!a)return;const x=r.tree;u(x),m(r.coverage),c({}),p("preview"),K("ready"),C(""),Q(""),z("all"),v(le(x))}).catch(()=>{a&&(u([]),v(""),K("error"))}),()=>{a=!1}},[n,pe]),o.useEffect(()=>{if(!s||s in b)return;let a=!0;return S.getDoc(n,s).then(r=>{a&&c(x=>({...x,[s]:r.content}))}).catch(()=>{a&&c(r=>({...r,[s]:null}))}),()=>{a=!1}},[s,n,b]);const P=!!s&&!(s in b),A=s?b[s]===null:!1,fe=()=>c(a=>{const r={...a};return delete r[s],r}),V=a=>D==="all"||oe(a.cat)===D,xe=re(l.filter(a=>a.scored&&V(a))),Y=re(l.filter(a=>!a.scored&&V(a))),B=b[s]??"",be=s.includes("/")?s.slice(0,s.lastIndexOf("/")):".",T=l.find(a=>a.cat===be),_=s,E=h==="edit"&&f!==B,I=o.useMemo(()=>l.flatMap(a=>a.files.map(r=>({key:`${a.cat}/${r}`,scored:a.scored,linked:a.linked,kind:oe(a.cat)}))),[l]),R=$.trim().toLowerCase(),X=R?I.filter(a=>(D==="all"||a.kind===D)&&a.key.toLowerCase().includes(R)):[],ve=o.useMemo(()=>{const a={PRD:0,Spec:0,ADR:0,Lainnya:0};for(const r of I)a[r.kind]+=1;return a},[I]),ye=i==="broken"?"broken":i==="drift"?"drift":"ok";function Z(a){if(!E){p("preview"),a();return}J({title:"Buang perubahan?",eyebrow:s,message:"Isi dokumen yang kamu ubah belum disimpan.",impact:["Perubahan di editor hilang dan tak bisa dikembalikan dari dashboard."],confirmLabel:"Buang perubahan",cancelLabel:"Lanjut mengedit",tone:"danger",icon:"trash-2"}).then(r=>{r&&(p("preview"),a())})}function ge(){C(""),j(B),p("edit")}const ee=()=>Z(()=>{});async function ae(){if(!(L||!s)){W(!0),C("");try{await S.putDoc(n,s,f),c(a=>({...a,[s]:f})),p("preview")}catch(a){C(ie("menyimpan dokumen",a))}finally{W(!1)}}}function H(a){Z(()=>{v(a),p("preview"),d("viewer")})}async function se(){const a=await S.getDocs(n),r=a.tree;u(r),m(a.coverage),r.some(x=>x.files.some(M=>`${x.cat}/${M}`===s))||v(le(r))}async function ne(){if(!g){U(!0);try{await se()}catch{K("error")}finally{U(!1)}}}async function je(){if(!s)return;const a=s;let r=!1;try{r=await J({title:`Hapus ${a}?`,eyebrow:"Source of Truth",message:"Dokumen ini adalah Source of Truth project. Berkas aslinya di disk ikut dihapus.",impact:["Berkas di disk dihapus dan tak bisa dikembalikan dari dashboard.","Kategori indeks dihitung ulang setelah penghapusan."],confirmLabel:"Hapus dokumen",tone:"danger",icon:"trash-2",run:()=>S.deleteDoc(n,a)})}catch(x){C(ie("menghapus dokumen",x));return}if(r){c(x=>{const M={...x};return delete M[a],M});try{await se()}catch{K("error")}}}const we=F==="loading"?e.jsx(w,{kind:"loading",compact:!0,title:"Memuat indeks…"}):F==="error"?e.jsx(w,{kind:"error",compact:!0,title:"Gagal memuat indeks dokumen",hint:t,action:()=>ke(a=>a+1)}):l.length===0?e.jsx(w,{kind:"empty",compact:!0,icon:"folder-open",title:"Belum ada dokumen",hint:"Belum ada Markdown di repo ini.",action:ne,actionLabel:"Muat ulang",actionIcon:"radar"}):R?X.length===0?e.jsx(w,{kind:"empty",compact:!0,icon:"search",title:"Tak ada berkas cocok",hint:`Tak ada yang cocok dengan “${$.trim()}”.`}):e.jsx("div",{role:"list","aria-label":"Hasil pencarian berkas",className:"hn-docs-results",children:X.map(a=>e.jsxs("button",{type:"button","aria-current":a.key===s?"true":void 0,onClick:()=>H(a.key),className:`hn-docs-result${a.key===s?" is-selected":""}`,children:[e.jsx(N,{name:"file-text",size:13,color:"var(--text-subtle)"}),e.jsx("span",{className:"hn-prj-mono",children:a.key}),e.jsx("span",{className:"hn-docs-result-kind",children:a.kind})]},a.key))}):e.jsxs(e.Fragment,{children:[e.jsx(ce,{label:"Berkas dokumen",nodes:xe,selected:s,onSelect:H}),Y.length>0&&e.jsxs("div",{className:"hn-docs-unscored",children:[e.jsx("div",{className:"hn-eyebrow hn-docs-unscored-label",children:"Lainnya (tidak dinilai)"}),e.jsx(ce,{label:"Dokumen tidak dinilai",nodes:Y,selected:s,onSelect:H})]})]});return e.jsxs(e.Fragment,{children:[e.jsx(Se,{ariaLabel:"Panel Dokumen",active:y,onActiveChange:a=>d(a),masterWidth:288,className:"hn-workspace-panels",panels:[{id:"tree",label:"Indeks",className:"hn-panel-flex",content:e.jsxs("aside",{"aria-label":"Indeks dokumen",className:"hn-docs-index",children:[e.jsxs("div",{className:"hn-docs-index-head",children:[e.jsxs("span",{className:"hn-eyebrow",children:["dokumen · ",t]}),e.jsxs("div",{className:"hn-docs-index-actions",children:[e.jsx(Ce,{status:ye,size:"sm"}),e.jsx(O,{size:"sm",variant:"ghost",leftIcon:g?"loader":"radar",onClick:ne,disabled:g,children:g?"Memuat…":"Muat ulang"})]})]}),F==="ready"&&l.length>0&&e.jsxs("div",{className:"hn-docs-index-tools",children:[e.jsx(Ke,{size:"sm","aria-label":"Cari berkas dokumen",leftIcon:"search",value:$,placeholder:"mis. product/prd",onChange:a=>Q(a.target.value),className:"hn-prj-full"}),e.jsxs("div",{role:"group","aria-label":"Kategori dokumen",className:"hn-prj-chips",children:[e.jsx("button",{type:"button",className:"hn-prj-chip hn-touch-target","aria-pressed":D==="all",onClick:()=>z("all"),children:"Semua"}),Fe.map(a=>e.jsxs("button",{type:"button",className:"hn-prj-chip hn-touch-target","aria-pressed":D===a,onClick:()=>z(a),children:[a,e.jsx("span",{className:"hn-prj-chip-count",children:ve[a]})]},a))]}),e.jsxs("span",{className:"hn-docs-cov",title:"Persentase kategori yang terindeks",children:["Cakupan ",Math.round(k),"%"]})]}),e.jsx("div",{className:"hn-docs-tree-scroll",children:we})]})},{id:"viewer",label:"Dokumen",className:"hn-panel-flex",content:e.jsxs("section",{"aria-label":"Isi dokumen",className:"hn-docs-viewer",style:{display:"flex",flexDirection:"column",minHeight:0},children:[e.jsxs("div",{className:"hn-docs-viewer-head",children:[e.jsx(N,{name:"file-text",size:15,color:"var(--text-muted)"}),e.jsx("span",{className:"hn-prj-mono hn-docs-path",children:_}),T&&T.scored&&(T.linked?e.jsx(q,{tone:"ok",size:"sm",icon:"link",children:"terindeks"}):e.jsx(q,{tone:"err",size:"sm",icon:"unlink",children:"tak tertaut"})),e.jsx("span",{className:"hn-grow"}),e.jsxs("div",{role:"group","aria-label":"Mode dokumen",className:"hn-prj-seg",children:[e.jsx("button",{type:"button","aria-pressed":h==="preview",className:"hn-touch-target",onClick:()=>{h==="edit"&&ee()},children:"Baca"}),e.jsx("button",{type:"button","aria-pressed":h==="edit",className:"hn-touch-target",onClick:()=>{h!=="edit"&&ge()},disabled:!s||P||A,children:"Edit"})]}),h==="preview"&&e.jsx(Le,{label:"Aksi untuk dokumen",icon:"ellipsis",items:[{key:"delete",label:"Hapus dokumen…",icon:"trash-2",tone:"danger",disabled:!s,onSelect:()=>{je()}}],children:e.jsx(Me,{href:a=>S.docDownloadUrl(n,s,a),disabled:!s||P||A})})]}),h==="edit"&&e.jsxs("div",{role:"region","aria-label":"Simpan perubahan",className:"hn-docs-savebar",children:[E?e.jsx(q,{tone:"warn",size:"sm",children:"belum disimpan"}):e.jsx("span",{className:"hn-prj-hint",children:"Tak ada perubahan"}),e.jsx("span",{className:"hn-grow"}),e.jsx(O,{size:"sm",variant:"ghost",onClick:ee,disabled:L,children:"Batal"}),e.jsx(O,{size:"sm",leftIcon:"check",onClick:()=>void ae(),loading:L,disabled:L||!E,children:"Simpan"})]}),G&&e.jsx("div",{role:"alert",className:"hn-docs-error",children:G}),h==="preview"?e.jsx("div",{"data-testid":"doc-preview-scroll",className:"hn-docs-body",style:{flex:"1 1 auto",minHeight:0,overflow:"auto"},children:s?P?e.jsx(w,{kind:"loading",title:"Memuat dokumen…",hint:s}):A?e.jsx(w,{kind:"error",title:"Gagal memuat dokumen",hint:s,action:fe}):e.jsx("div",{className:"hn-docs-read",children:e.jsx(te,{text:B,name:s})}):e.jsx(w,{kind:"empty",icon:"file-text",title:"Tidak ada dokumen dipilih",hint:"Pilih file dari indeks di kiri."})}):e.jsxs("div",{className:"hn-docs-edit",children:[e.jsxs("div",{className:"hn-docs-edit-pane",children:[e.jsx("div",{className:"hn-docs-edit-label",children:e.jsx("span",{className:"hn-eyebrow",children:"Markdown"})}),e.jsx("textarea",{"aria-label":`Isi ${_}`,value:f,spellCheck:!1,onChange:a=>j(a.target.value),onKeyDown:a=>{(a.metaKey||a.ctrlKey)&&a.key.toLowerCase()==="s"&&(a.preventDefault(),ae())},placeholder:`# Judul dokumen
2
+
3
+ Paragraf pembuka…`,className:"hn-docs-textarea"})]}),e.jsxs("div",{className:"hn-docs-edit-pane",children:[e.jsx("div",{className:"hn-docs-edit-label",children:e.jsx("span",{className:"hn-eyebrow",children:"Pratinjau langsung"})}),e.jsx("div",{className:"hn-docs-preview",children:e.jsx(te,{text:f,name:s})})]})]})]})}]}),me]})}export{Ie as DocsWorkspace,re as buildTree,oe as docKind,le 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}.hn-ide-changes-bar{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair)}.hn-ide-changes-legend{flex:1 1 200px;min-width:0;font-size:var(--text-xs);color:var(--text-muted)}.hn-ide-changes-hint{margin:0;padding:var(--space-2) var(--space-3);font-size:var(--text-xs);color:var(--text-subtle);border-bottom:1px solid var(--border-hair)}.hn-ide-section-head{display:flex;align-items:center;gap:var(--space-1);padding:var(--space-2) var(--space-2)}.hn-ide-section-head .hn-eyebrow{flex:1 1 auto;min-width:0}.hn-ide-view-toggle{display:inline-flex;align-items:center;justify-content:center;padding:3px;border:none;border-radius:var(--radius-sm);background:transparent;cursor:pointer}.hn-ide-view-toggle[aria-pressed=true]{background:var(--brass-100)}.hn-ide-change-path{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-body)}.hn-ide-change-count{font-family:var(--font-mono);font-size:var(--text-2xs);flex:0 0 auto}.hn-ide-empty-line{padding:var(--space-1) var(--space-2);font-size:var(--text-xs);color:var(--text-subtle)}.hn-ide-scroll{flex:1 1 auto;min-height:0;overflow:auto;padding:var(--space-2)}.hn-ide-files-pane{position:relative;display:flex;flex-direction:column;flex:1 1 auto;min-height:0;min-width:0}.hn-ide-split{position:absolute;top:0;bottom:0;right:-12px;width:12px;z-index:2;display:flex;align-items:center;justify-content:center;cursor:col-resize;touch-action:none}.hn-ide-split:before{content:"";width:2px;height:56px;border-radius:2px;background:var(--border-hair)}.hn-ide-split:hover:before,.hn-ide-split:focus-visible:before{background:var(--brass-500)}.hn-ide-split:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px;border-radius:4px}.hn-responsive-panels[data-split=false] .hn-ide-split{display:none}.hn-ide-files-bar{display:flex;align-items:center;gap:var(--space-1);flex-wrap:wrap;padding:var(--space-2) var(--space-2);border-bottom:1px solid var(--border-hair)}.hn-ide-files-eyebrow{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hn-ide-dest{flex:1 1 auto;min-width:0;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--text-subtle)}.hn-ide-viewer-bar{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair)}.hn-ide-viewer-path{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-strong)}.hn-ide-seg{display:inline-flex;gap:2px;background:var(--bone-100);border-radius:var(--radius-pill);padding:2px}.hn-ide-seg button{padding:4px 12px;border:none;cursor:pointer;border-radius:var(--radius-pill);font-size:var(--text-xs);background:transparent;color:var(--text-muted);font-weight:400}.hn-ide-seg button[aria-pressed=true]{background:var(--surface-card);color:var(--text-strong);font-weight:600}.hn-ide-graph-row:hover{background:var(--bone-100)}.hn-ide-graph-bar{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:6px var(--space-3);border-bottom:1px solid var(--border-hair);font-size:var(--text-xs)}.hn-ide-graph-view{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:6px var(--space-3);border-bottom:1px solid var(--border-hair);background:var(--surface-sunken)}.hn-ide-menu-group+.hn-ide-menu-group{border-top:1px solid var(--border-hair);margin-top:4px;padding-top:4px}.hn-ide-menu-group-title{padding:6px 10px 2px;font-size:var(--text-2xs);color:var(--text-subtle)}.hn-ide-menu-item:hover,.hn-ide-menu-item:focus-visible{background:var(--bone-200);outline:none}.hn-ide-cabang-bar{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair)}.hn-ide-cabang-title{flex:1 1 200px;min-width:0}.hn-ide-cabang-opts{display:flex;align-items:center;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair);background:var(--surface-sunken)}.hn-ide-cabang-banner{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair);font-size:var(--text-xs)}.hn-ide-cabang-banner-text{flex:1 1 260px;min-width:0}.hn-ide-cabang-results{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair);font-size:var(--text-xs)}.hn-ide-cabang-results-sum{color:var(--text-strong)}.hn-ide-cabang-results-line{color:var(--text-muted);font-family:var(--font-mono)}.hn-ide-cabang-list{max-height:620px;overflow:auto}.hn-ide-cabang-pickall{display:flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border-hair)}.hn-ide-cabang-meta{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap;min-width:0;font-size:var(--text-xs);color:var(--text-muted)}.hn-ide-cabang-branch{font-family:var(--font-mono);color:var(--brass-700)}.hn-ide-cabang-sha{font-family:var(--font-mono);color:var(--text-subtle)}.hn-ide-cabang-when{font-size:var(--text-2xs);color:var(--text-subtle)}.hn-ide-cabang-link{padding:0;border:0;background:none;cursor:pointer;color:var(--brass-700);font:inherit}.hn-ide-cabang-more{padding:var(--space-2);text-align:center}@media (pointer: coarse),(max-width: 767px){.hn-ide-menu-item{min-height:44px}.hn-ide-split{width:20px;right:-16px}.hn-ide-cabang-list .hn-dense-row button{min-height:44px}}@media (max-width: 767px){.hn-ide-files-bar{flex-wrap:nowrap}.hn-ide-files-eyebrow{display:none}.hn-ide-dest{font-size:var(--text-2xs)}.hn-ide-viewer-bar{gap:var(--space-1)}}@media (prefers-reduced-motion: reduce){.hn-ide-split:before{transition:none}}.hn-ide-screen{min-width:0;display:flex;flex-direction:column;gap:16px}.hn-ide-scroll-body{flex:1 1 auto;min-height:0;overflow:auto}.hn-ide-section-gap{border-top:1px solid var(--border-hair);margin:var(--space-1) 0}.hn-ide-drop{outline:2px dashed var(--brass-500);outline-offset:-4px}.hn-ide-viewer-actions{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.hn-ide-diff-pad{padding:var(--space-2) 0}.hn-ide-truncated{padding:var(--space-2) var(--space-3);font-size:var(--text-2xs);color:var(--text-subtle)}.hn-ide-source-pre{margin:0;padding:var(--space-3) var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--text-body)}.hn-ide-code-pre{margin:0;padding:var(--space-3);overflow:auto}.hn-ide-code{font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.7}.hn-ide-md-pad{padding:var(--space-3) var(--space-3)}.hn-ide-editor{width:100%;min-height:clamp(240px,50dvh,560px);box-sizing:border-box;resize:vertical;border:none;padding:var(--space-3);font-family:var(--font-mono);font-size:var(--text-xs);line-height:1.7;color:var(--text-body);background:var(--surface-card)}.hn-ide-muted-line{font-size:var(--text-xs);color:var(--text-subtle);margin-bottom:var(--space-2)}.hn-ide-warn-line{font-size:var(--text-xs);color:var(--clay-600);margin-bottom:var(--space-2)}.hn-ide-pre-msg{font-family:var(--font-mono);font-size:var(--text-xs);white-space:pre-wrap;color:var(--text-muted);margin:0 0 var(--space-3)}.hn-ide-conflict-list{margin:0;font-family:var(--font-mono);font-size:var(--text-xs);max-height:220px;overflow:auto}.hn-ide-remote-row{display:flex;align-items:center;gap:var(--space-2);padding:5px 0;border-bottom:1px solid var(--border-hair)}.hn-ide-remote-name{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:600;width:90px}.hn-ide-remote-url{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:var(--text-2xs);color:var(--text-muted)}.hn-ide-remote-add{display:flex;gap:var(--space-2);margin-top:var(--space-3)}@media (max-width: 640px){.hn-ide-remote-add{flex-direction:column;align-items:stretch}.hn-ide-remote-add>.hn-ide-input-100{width:100%}}.hn-ide-changes-bar .hn-ide-changes-legend{min-width:0}.hn-ide-head>.hn-ide-toolbar{flex-wrap:wrap;overflow:visible}.hn-ide-head>.hn-ide-toolbar>.hn-ide-proyek,.hn-ide-head>.hn-ide-toolbar>.hn-ide-ref{min-width:0;max-width:100%}.hn-ide-head>.hn-ide-toolbar>.hn-ide-proyek{flex:1 1 140px;max-width:min(100%,320px)}.hn-ide-head>.hn-ide-toolbar>.hn-ide-ref{flex:1 1 140px;max-width:min(100%,220px)}.hn-ide-head>.hn-ide-toolbar .hn-select select{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width: 767px){.hn-ide-head>.hn-ide-toolbar>.hn-ide-proyek{flex-basis:100%;max-width:100%}}.hn-ide-screen .hn-responsive-panel:focus{outline:none}.hn-ide-screen .hn-responsive-panels[data-split=false] .hn-responsive-panel:focus-visible{outline:2px solid var(--border-focus);outline-offset:-2px}.hn-ide-seg button{min-height:24px;min-width:24px;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center}@media (pointer: coarse),(max-width: 767px){.hn-ide-seg button{min-height:44px;min-width:44px}}.hn-git-graph-layout{display:grid;grid-template-columns:var(--git-cols, minmax(0, 1fr));gap:16px;align-items:start;min-width:0;--graph-lane-0: #a9791c;--graph-lane-1: #3b7a57;--graph-lane-2: #8a5a44;--graph-lane-3: #4a6fa5;--graph-lane-4: #7d5ba6;--graph-lane-5: #b0503a}.hn-git-panel{min-width:0}.hn-git-find{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 12px;border-bottom:1px solid var(--border-hair)}.hn-git-find-input{flex:1 1 0%;border:none;background:transparent;font-size:12.5px;font-family:var(--font-ui);color:var(--text-body)}.hn-git-find-count{font-family:var(--font-mono);font-size:11px;color:var(--text-subtle)}.hn-git-find-hint{margin-left:auto;font-size:11px;color:var(--text-subtle)}@media (pointer: coarse),(max-width: 640px){.hn-git-find-hint{display:none}}.hn-git-branch-select{font-size:12px;padding:3px 6px;border:1px solid var(--border-hair);border-radius:var(--radius-sm);background:var(--surface-card);color:var(--text-body)}.hn-git-stash-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:6px 12px;border-bottom:1px solid var(--border-hair)}.hn-git-stash-label{margin-right:4px}.hn-git-stash-chip{font-family:var(--font-mono);font-size:10.5px;padding:2px 8px;border-radius:999px;border:none;cursor:pointer;background:var(--bone-200);color:var(--text-muted);flex:0 0 auto}.hn-git-rows{min-width:var(--graph-min-w, 0px)}.hn-git-scroll{background:linear-gradient(var(--surface-card),var(--surface-card)) left / 12px 100% no-repeat local,linear-gradient(var(--surface-card),var(--surface-card)) right / 12px 100% no-repeat local,linear-gradient(to right,color-mix(in srgb,var(--ink-900) 16%,transparent),transparent) left / 10px 100% no-repeat scroll,linear-gradient(to left,color-mix(in srgb,var(--ink-900) 16%,transparent),transparent) right / 10px 100% no-repeat scroll}.hn-ide-graph-row{display:flex;align-items:center;gap:10px;height:var(--row-h, 30px);padding:0 12px;cursor:pointer;border-bottom:1px solid var(--border-hair)}.hn-ide-graph-row.is-sel{background:var(--brass-100)}.hn-ide-graph-row.is-active{background:var(--brass-300)}.hn-ide-graph-row.is-hit{background:var(--bone-100)}.hn-graph-lane{flex:0 0 auto}.hn-graph-edge{fill:none;stroke:var(--lane);stroke-width:1.5px}.hn-graph-node{fill:var(--lane);stroke:var(--surface-card);stroke-width:1.5px}.hn-graph-node[data-merge=true]{fill:var(--surface-card);stroke:var(--lane)}.hn-graph-node--open{fill:none;stroke:var(--graph-lane-0)}.hn-git-main{display:flex;align-items:center;gap:6px;min-width:0;flex:1 1 0%}.hn-git-refs{display:contents}.hn-git-ref{font-family:var(--font-mono);font-size:10.5px;padding:1px 6px;cursor:pointer;border:none;border-radius:999px;background:var(--brass-100);color:var(--brass-700);flex:0 0 auto}.hn-git-ref--head{background:var(--brass-700);color:var(--bone-000)}.hn-git-tag{font-family:var(--font-mono);font-size:10.5px;padding:1px 6px 1px 4px;border:none;border-radius:999px;display:inline-flex;align-items:center;gap:3px;background:var(--leaf-100);color:var(--leaf-600);flex:0 0 auto}.hn-git-merge{flex:0 0 auto;font-family:var(--font-mono);font-size:10px;padding:0 5px;border-radius:999px;border:1px solid var(--border-strong);color:var(--text-muted)}.hn-git-subject{min-width:160px;padding:0;border:0;background:transparent;cursor:pointer;text-align:left;font-size:12.5px;color:var(--text-body);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hn-git-subject--muted{color:var(--text-muted)}.hn-git-author{flex:0 0 auto;width:88px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-family:var(--font-mono);font-size:11px;color:var(--text-subtle)}.hn-git-date{flex:0 0 auto;width:40px;text-align:right;font-family:var(--font-mono);font-size:11px;color:var(--text-subtle)}.hn-git-wt{flex:0 0 auto;width:88px;text-align:right;font-family:var(--font-mono);font-size:11px;color:var(--text-subtle)}.hn-git-wt-gap{flex:0 0 auto;width:40px}.hn-git-text{display:contents}.hn-git-date-under{display:none}@media (max-width: 640px){.hn-git-author,.hn-git-wt,.hn-git-wt-gap,.hn-git-date{display:none}.hn-git-rows{min-width:max(0px,calc(var(--graph-min-w, 0px) - 148px))}.hn-git-main{flex-direction:column;align-items:stretch;justify-content:center;gap:0}.hn-git-text{display:flex;align-items:center;gap:8px;height:18px;min-width:0;order:-1;position:relative;z-index:1}.hn-git-main>.hn-git-text>button.hn-git-subject{flex:1 1 0%;min-width:0;min-height:0;height:18px;line-height:18px}.hn-git-date-under{display:block;flex:0 0 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);font-size:10.5px;line-height:18px;color:var(--text-subtle)}.hn-git-refs{display:flex;align-items:center;gap:6px;min-width:0;height:26px}}.hn-git-uncommitted{flex:1 1 0%;border:0;padding:0;background:transparent;text-align:left;cursor:pointer;font-size:12.5px;font-style:italic;color:var(--text-muted)}.hn-git-uncommitted{min-height:24px;display:flex;align-items:center}.hn-git-uncommitted--static{cursor:default}.hn-git-more{display:flex;align-items:center;justify-content:center;gap:10px;padding:9px 12px;border-top:1px solid var(--border-hair)}.hn-git-more-count{font-size:11.5px;color:var(--text-subtle)}.hn-git-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.hn-git-cluster{display:flex;align-items:center;gap:6px}.hn-git-detail-title{font-size:13px;color:var(--text-strong);font-weight:600;margin-bottom:4px}.hn-git-detail-meta{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--text-subtle);margin-bottom:6px}.hn-git-avatar{border-radius:999px}.hn-git-detail-body{font-family:var(--font-mono);font-size:11.5px;white-space:pre-wrap;color:var(--text-muted);margin-bottom:10px}.hn-git-changed-head{display:flex;align-items:center;gap:6px;margin-bottom:6px}.hn-git-count{margin-bottom:6px}.hn-git-empty{font-size:12px;color:var(--text-subtle)}.hn-git-view-btn{display:flex;padding:3px;border:none;cursor:pointer;border-radius:4px;background:transparent}.hn-git-view-btn[aria-pressed=true]{background:var(--brass-100)}.hn-git-file{display:flex;align-items:center;gap:6px;padding:3px 6px}.hn-git-file-path{flex:1 1 0%;min-width:0;text-align:left;border:none;background:transparent;cursor:pointer;font-family:var(--font-mono);font-size:11.5px;color:var(--text-body);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hn-git-compare-pill{position:fixed;bottom:max(16px,var(--safe-bottom));left:50%;transform:translate(-50%);z-index:140;background:var(--brass-500);color:#fff;padding:6px 14px;border-radius:999px;font-size:12.5px;box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:10px}.hn-git-compare-close{border:none;background:transparent;color:#fff;cursor:pointer;font-weight:700}.hn-git-diff-body{height:100%;min-height:0;display:flex;flex-direction:column}.hn-git-diff-bar{flex:0 0 auto;display:flex;align-items:center;gap:12px;padding-bottom:10px;border-bottom:1px solid var(--border-hair)}.hn-git-diff-tabs{display:flex;gap:2px;background:var(--bone-100);border-radius:var(--radius-pill);padding:2px}.hn-git-diff-tab{padding:4px 12px;border:none;cursor:pointer;border-radius:var(--radius-pill);font-size:12px;text-transform:capitalize;background:transparent;color:var(--text-muted);font-weight:400}.hn-git-diff-tab--on{background:var(--surface-card);color:var(--text-strong);font-weight:600}.hn-git-diff-scroll{flex:1 1 auto;min-height:0;overflow:auto;padding:10px 0}.hn-git-md{padding:0 16px}.hn-git-source{margin:0;padding:0 16px;font-family:var(--font-mono);font-size:12.5px;line-height:1.6;white-space:pre-wrap;word-break:break-word;color:var(--text-body)}.hn-ide-input-full{width:100%}.hn-ide-input-100{width:100px}.hn-ide-screen--fill{flex:1 1 0;min-height:0}.hn-ide-tree-scroll{padding:8px;flex:1 1 auto;min-height:0;overflow:auto;outline-offset:-4px}.hn-ide-read-root{display:flex;flex-direction:column;gap:16px;flex:1 1 0;min-height:0}.hn-ide-read-head{flex:0 0 auto;padding:10px 14px;border-bottom:1px solid var(--border-hair)}.hn-ide-read-tree{padding:8px;flex:1 1 auto;min-height:0;overflow:auto}.hn-ide-read-divider{border-top:1px solid var(--border-hair);margin:6px 0}.hn-ide-read-section{padding:6px 8px;margin-top:8px;border-top:1px solid var(--border-hair)}.hn-ide-read-viewer-head{flex:0 0 auto;display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid var(--border-hair)}.hn-ide-read-path{font-family:var(--font-mono);font-size:13px;color:var(--text-strong)}.hn-ide-read-diff{padding:10px 0}.hn-ide-read-md{padding:16px 20px}.hn-ide-read-pre{margin:0;padding:16px 18px;overflow:auto;font-family:var(--font-mono);font-size:12.5px;line-height:1.7}.hn-ide-read-from{padding:6px 14px;font-size:11.5px;color:var(--text-subtle)}.hn-ide-read-compare{padding:8px 14px;border-bottom:1px solid var(--border-hair)}.hn-ide-read-empty{font-size:12px;color:var(--text-subtle)}.hn-ide-read-cpath{font-family:var(--font-mono);font-size:11.5px;padding:2px 0}.hn-ide-read-alert{padding:8px 14px;font-size:12px;color:var(--status-err);border-bottom:1px solid var(--border-hair)}.hn-ide-read-list{padding:8px;overflow:auto}.hn-ide-read-commit{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;padding:6px 10px;border:none;cursor:pointer;text-align:left;background:transparent}.hn-ide-read-commit--from{background:var(--brass-100)}.hn-ide-read-subject{font-family:var(--font-mono);font-size:12.5px}.hn-ide-read-meta{font-family:var(--font-mono);font-size:11px;color:var(--text-subtle)}.hn-git-refs>button.hn-git-ref,.hn-git-refs>button.hn-git-tag{position:relative;display:inline-flex;align-items:center;box-sizing:border-box;min-width:0;min-height:0;height:16px;max-width:min(100%,168px);padding:0 6px;line-height:14px;flex:0 0 auto}@media (max-width: 640px){.hn-git-refs>button.hn-git-ref,.hn-git-refs>button.hn-git-tag{max-width:72px;flex:0 1 auto}}.hn-git-refs>button.hn-git-ref:after,.hn-git-refs>button.hn-git-tag:after{content:"";position:absolute;left:0;right:0;top:50%;height:24px;transform:translateY(-50%)}.hn-git-ref-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hn-git-main .hn-git-subject{min-height:24px}@media (pointer: coarse),(max-width: 767px){.hn-git-refs>button.hn-git-ref:after,.hn-git-refs>button.hn-git-tag:after{height:var(--touch-target)}.hn-git-main .hn-git-subject{min-height:var(--touch-target)}}.hn-ide-view-toggle{min-width:24px;min-height:24px;box-sizing:border-box}
@@ -0,0 +1,2 @@
1
+ import{j as a,d as qa,ag as ea,i as Re,b as gn,am as Bn,h as $,G as Pn,m as ee,c as bn,aH as Ze,I as We,B,aI as aa,aJ as zn,n as Me,aK as Xa,aL as $a,aM as Qa,M as ga,aN as ma,aO as pn,aP as fn,aQ as kn,e as en,f as ba,g as Na,v as Fa,aR as an,a1 as Un,q as Ie,r as _a,O as nn,U as tn,aS as Fn,aT as Hn,D as Ha,aA as Gn,R as Kn,X as Wn}from"./index-DmnwLncG.js";import{R as m}from"./react-DfGhg7ZW.js";import{H as Ga}from"./highlight-HK3IjCTX.js";import{D as Zn}from"./DocPreviewModal-CJP6d0Hx.js";import{L as Vn}from"./live-B193WtZm.js";import"./markdown-CWEY34jk.js";import"./xterm-3VOAfa_q.js";const La="[A-Za-z$_][0-9A-Za-z$_]*",xn=["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"],vn=["true","false","null","undefined","NaN","Infinity"],yn=["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"],wn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],En=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],_n=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],Nn=[].concat(En,yn,wn);function Yn(e){const t=e.regex,r=(D,{after:G})=>{const q="</"+D[0].slice(1);return D.input.indexOf(q,G)!==-1},n=La,d={begin:"<>",end:"</>"},p=/<[A-Za-z0-9\\._:-]+\s*\/>/,y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(D,G)=>{const q=D[0].length+D.index,P=D.input[q];if(P==="<"||P===","){G.ignoreMatch();return}P===">"&&(r(D,{after:q})||G.ignoreMatch());let U;const se=D.input.substring(q);if(U=se.match(/^\s*=/)){G.ignoreMatch();return}if((U=se.match(/^\s+extends\s+/))&&U.index===0){G.ignoreMatch();return}}},b={$pattern:La,keyword:xn,literal:vn,built_in:Nn,"variable.language":_n},v="[0-9](_?[0-9])*",f=`\\.(${v})`,l="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",N={className:"number",variants:[{begin:`(\\b(${l})((${f})|\\.)?|(${f}))[eE][+-]?(${v})\\b`},{begin:`\\b(${l})\\b((${f})\\b|\\.)?|(${f})\\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:b,contains:[]},h={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},g={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},c={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"graphql"}},u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]},E={className:"comment",variants:[e.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:n+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},w=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,h,g,c,u,{match:/\$\d+/},N];o.contains=w.concat({begin:/\{/,end:/\}/,keywords:b,contains:["self"].concat(w)});const C=[].concat(E,o.contains),j=C.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:["self"].concat(C)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:j},le={variants:[{match:[/class/,/\s+/,n,/\s+/,/extends/,/\s+/,t.concat(n,"(",t.concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}}]},Z={relevance:0,match:t.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:{_:[...yn,...wn]}},W={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ue={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},L={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function I(D){return t.concat("(?!",D.join("|"),")")}const te={match:t.concat(/\b/,I([...En,"super","import"].map(D=>`${D}\\s*\\(`)),n,t.lookahead(/\s*\(/)),className:"title.function",relevance:0},ge={begin:t.concat(/\./,t.lookahead(t.concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},pe={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},ye="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",ce={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(ye)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:b,exports:{PARAMS_CONTAINS:j,CLASS_REFERENCE:Z},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),W,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,h,g,c,u,E,{match:/\$\d+/},N,Z,{scope:"attr",match:n+t.lookahead(":"),relevance:0},ce,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[E,e.REGEXP_MODE,{className:"function",begin:ye,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:j}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:p},{begin:y.begin,"on:begin":y.isTrulyOpeningTag,end:y.end}],subLanguage:"xml",contains:[{begin:y.begin,end:y.end,skip:!0,contains:["self"]}]}]},ue,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,e.inherit(e.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},ge,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},te,L,le,pe,{match:/\$[(.]/}]}}function qn(e){const t=e.regex,r=Yn(e),n=La,d=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],p={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},y={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:d},contains:[r.exports.CLASS_REFERENCE]},b={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},v=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],f={$pattern:La,keyword:xn.concat(v),literal:vn,built_in:Nn.concat(d),"variable.language":_n},l={className:"meta",begin:"@"+n},N=(c,u,A)=>{const E=c.contains.findIndex(w=>w.label===u);if(E===-1)throw new Error("can not find mode to replace");c.contains.splice(E,1,A)};Object.assign(r.keywords,f),r.exports.PARAMS_CONTAINS.push(l);const o=r.contains.find(c=>c.scope==="attr"),h=Object.assign({},o,{match:t.concat(n,t.lookahead(/\s*\?:/))});r.exports.PARAMS_CONTAINS.push([r.exports.CLASS_REFERENCE,o,h]),r.contains=r.contains.concat([l,p,y,h]),N(r,"shebang",e.SHEBANG()),N(r,"use_strict",b);const g=r.contains.find(c=>c.label==="func.def");return g.relevance=0,Object.assign(r,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),r}const sn="[A-Za-z$_][0-9A-Za-z$_]*",Xn=["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"],Qn=["true","false","null","undefined","NaN","Infinity"],Sn=["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"],Cn=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],An=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],Jn=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],et=[].concat(An,Sn,Cn);function at(e){const t=e.regex,r=(D,{after:G})=>{const q="</"+D[0].slice(1);return D.input.indexOf(q,G)!==-1},n=sn,d={begin:"<>",end:"</>"},p=/<[A-Za-z0-9\\._:-]+\s*\/>/,y={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(D,G)=>{const q=D[0].length+D.index,P=D.input[q];if(P==="<"||P===","){G.ignoreMatch();return}P===">"&&(r(D,{after:q})||G.ignoreMatch());let U;const se=D.input.substring(q);if(U=se.match(/^\s*=/)){G.ignoreMatch();return}if((U=se.match(/^\s+extends\s+/))&&U.index===0){G.ignoreMatch();return}}},b={$pattern:sn,keyword:Xn,literal:Qn,built_in:et,"variable.language":Jn},v="[0-9](_?[0-9])*",f=`\\.(${v})`,l="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",N={className:"number",variants:[{begin:`(\\b(${l})((${f})|\\.)?|(${f}))[eE][+-]?(${v})\\b`},{begin:`\\b(${l})\\b((${f})\\b|\\.)?|(${f})\\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:b,contains:[]},h={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"xml"}},g={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"css"}},c={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,o],subLanguage:"graphql"}},u={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,o]},E={className:"comment",variants:[e.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:n+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},w=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,h,g,c,u,{match:/\$\d+/},N];o.contains=w.concat({begin:/\{/,end:/\}/,keywords:b,contains:["self"].concat(w)});const C=[].concat(E,o.contains),j=C.concat([{begin:/(\s*)\(/,end:/\)/,keywords:b,contains:["self"].concat(C)}]),O={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:j},le={variants:[{match:[/class/,/\s+/,n,/\s+/,/extends/,/\s+/,t.concat(n,"(",t.concat(/\./,n),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,n],scope:{1:"keyword",3:"title.class"}}]},Z={relevance:0,match:t.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:{_:[...Sn,...Cn]}},W={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ue={variants:[{match:[/function/,/\s+/,n,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[O],illegal:/%/},L={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function I(D){return t.concat("(?!",D.join("|"),")")}const te={match:t.concat(/\b/,I([...An,"super","import"].map(D=>`${D}\\s*\\(`)),n,t.lookahead(/\s*\(/)),className:"title.function",relevance:0},ge={begin:t.concat(/\./,t.lookahead(t.concat(n,/(?![0-9A-Za-z$_(])/))),end:n,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},pe={match:[/get|set/,/\s+/,n,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},O]},ye="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",ce={match:[/const|var|let/,/\s+/,n,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(ye)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[O]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:b,exports:{PARAMS_CONTAINS:j,CLASS_REFERENCE:Z},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),W,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,h,g,c,u,E,{match:/\$\d+/},N,Z,{scope:"attr",match:n+t.lookahead(":"),relevance:0},ce,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[E,e.REGEXP_MODE,{className:"function",begin:ye,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:j}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:d.begin,end:d.end},{match:p},{begin:y.begin,"on:begin":y.isTrulyOpeningTag,end:y.end}],subLanguage:"xml",contains:[{begin:y.begin,end:y.end,skip:!0,contains:["self"]}]}]},ue,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[O,e.inherit(e.TITLE_MODE,{begin:n,className:"title.function"})]},{match:/\.\.\./,relevance:0},ge,{match:"\\$"+n,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[O]},te,L,le,pe,{match:/\$[(.]/}]}}function nt(e){const t={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},r={match:/[{}[\],:]/,className:"punctuation",relevance:0},n=["true","false","null"],d={scope:"literal",beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:n},contains:[t,r,e.QUOTE_STRING_MODE,d,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function tt(e){const t=e.regex,r={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},n={begin:"^[-\\*]{3,}",end:"$"},d={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}]},p={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},y={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},b=/[A-Za-z][A-Za-z0-9+.-]*/,v={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:t.concat(/\[.+?\]\(/,b,/:\/\/.*?\)/),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}]},f={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},l={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},N=e.inherit(f,{contains:[]}),o=e.inherit(l,{contains:[]});f.contains.push(o),l.contains.push(N);let h=[r,v];return[f,l,N,o].forEach(A=>{A.contains=A.contains.concat(h)}),h=h.concat(f,l),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:h},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:h}]}]},r,p,f,l,{className:"quote",begin:"^>\\s+",contains:h,end:"$"},d,n,v,y,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}const st=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.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:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.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_-]*/}}),it=["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"],rt=["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"],lt=[...it,...rt],ot=["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(),ct=["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(),dt=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),ut=["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 ht(e){const t=e.regex,r=st(e),n={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},d="and or not only",p=/@-?\w[\w]*(-\w+)*/,y="[a-zA-Z-][a-zA-Z0-9_-]*",b=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[r.BLOCK_COMMENT,n,r.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+y,relevance:0},r.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+ct.join("|")+")"},{begin:":(:)?("+dt.join("|")+")"}]},r.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ut.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[r.BLOCK_COMMENT,r.HEXCOLOR,r.IMPORTANT,r.CSS_NUMBER_MODE,...b,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...b,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},r.FUNCTION_DISPATCH]},{begin:t.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:p},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:d,attribute:ot.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...b,r.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+lt.join("|")+")\\b"}]}}function mt(e){const t=e.regex,r=t.concat(/[\p{L}_]/u,t.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),n=/[\p{L}0-9._:-]+/u,d={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},p={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},y=e.inherit(p,{begin:/\(/,end:/\)/}),b=e.inherit(e.APOS_STRING_MODE,{className:"string"}),v=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),f={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:n,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[d]},{begin:/'/,end:/'/,contains:[d]},{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:[p,v,b,y,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[p,y,v,b]}]}]},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},d,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[v]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[f],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[f],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:t.concat(/</,t.lookahead(t.concat(r,t.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:r,relevance:0,starts:f}]},{className:"tag",begin:t.concat(/<\//,t.lookahead(t.concat(r,/>/))),contains:[{className:"name",begin:r,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function gt(e){const t=e.regex,r={},n={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[r]}]};Object.assign(r,{className:"variable",variants:[{begin:t.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const d={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},p=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),y={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},b={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r,d]};d.contains.push(b);const v={match:/\\"/},f={className:"string",begin:/'/,end:/'/},l={match:/\\'/},N={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,r]},o=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],h=e.SHEBANG({binary:`(${o.join("|")})`,relevance:10}),g={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},c=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],u=["true","false"],A={match:/(\/[a-z._-]+)+/},E=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],w=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],C=["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"],j=["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:c,literal:u,built_in:[...E,...w,"set","shopt",...C,...j]},contains:[h,e.SHEBANG(),g,N,p,y,A,b,v,f,l,r]}}function bt(e){const t=e.regex,r=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),n=["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"],b={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:n,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"]},v={className:"meta",begin:/^(>>>|\.\.\.) /},f={className:"subst",begin:/\{/,end:/\}/,keywords:b,illegal:/#/},l={begin:/\{\{/,relevance:0},N={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,v],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,v],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,v,l,f]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,v,l,f]},{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:[e.BACKSLASH_ESCAPE,l,f]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,l,f]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},o="[0-9](_?[0-9])*",h=`(\\b(${o}))?\\.(${o})|\\b(${o})\\.`,g=`\\b|${n.join("|")}`,c={className:"number",relevance:0,variants:[{begin:`(\\b(${o})|(${h}))[eE][+-]?(${o})[jJ]?(?=${g})`},{begin:`(${h})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${o})[jJ](?=${g})`}]},u={className:"comment",begin:t.lookahead(/# type:/),end:/$/,keywords:b,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},A={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:["self",v,c,N,e.HASH_COMMENT_MODE]}]};return f.contains=[N,c,v],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:b,illegal:/(<\/|\?)|=>/,contains:[v,c,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},N,u,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[A]},{variants:[{match:[/\bclass/,/\s+/,r,/\s*/,/\(\s*/,r,/\s*\)/]},{match:[/\bclass/,/\s+/,r]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[c,A,N]}]}}function pt(e){const t="true false yes no null",r="[\\w#;/?:@&=+$,.~*'()[\\]]+",n={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},d={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},p={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},y={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,d]},b=e.inherit(y,{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"},h={end:",",endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},g={begin:/\{/,end:/\}/,contains:[h],illegal:"\\n",relevance:0},c={begin:"\\[",end:"\\]",contains:[h],illegal:"\\n",relevance:0},u=[n,{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+!"+r},{className:"type",begin:"!<"+r+">"},{className:"type",begin:"!"+r},{className:"type",begin:"!!"+r},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},o,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},g,c,p,y],A=[...u];return A.pop(),A.push(b),h.contains=A,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:u}}function ft(e){const t=e.regex,r=e.COMMENT("--","$"),n={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},d={begin:/"/,end:/"/,contains:[{match:/""/}]},p=["true","false","unknown"],y=["double precision","large object","with timezone","without timezone"],b=["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"],v=["add","asc","collation","desc","final","first","last","view"],f=["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"],l=["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"],h=l,g=[...f,...v].filter(j=>!l.includes(j)),c={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},u={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},A={match:t.concat(/\b/,t.either(...h),/\s*\(/),relevance:0,keywords:{built_in:h}};function E(j){return t.concat(/\b/,t.either(...j.map(O=>O.replace(/\s+/,"\\s+"))),/\b/)}const w={scope:"keyword",match:E(o),relevance:0};function C(j,{exceptions:O,when:le}={}){const Z=le;return O=O||[],j.map(W=>W.match(/\|\d+$/)||O.includes(W)?W:Z(W)?`${W}|0`:W)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:C(g,{when:j=>j.length<3}),literal:p,type:b,built_in:N},contains:[{scope:"type",match:E(y)},w,A,c,n,d,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,r,u]}}function kt(e){const t=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:t.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:t.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 rn(e){const t=[],r=[];for(const n of e){let d=r.indexOf(n.sha);for(d===-1&&(d=r.indexOf(null),d===-1&&(d=r.length,r.push(null))),r[d]=null,n.parents.forEach((p,y)=>{if(r.indexOf(p)!==-1)return;if(y===0){r[d]=p;return}let b=r.indexOf(null);b===-1&&(b=r.length,r.push(null)),r[b]=p});r.length&&r[r.length-1]===null;)r.pop();t.push({commit:n,lane:d,lanes:[...r],width:Math.max(r.length,d+1)})}return t}function xt(e){return e.map((t,r)=>{const n=r>0?e[r-1].lanes:[],d=t.lanes,p=t.commit.sha,y=[],b=n.indexOf(p);b!==-1&&y.push({fromLane:b,toLane:t.lane,half:"top",colorLane:t.lane});for(const v of t.commit.parents){const f=d.indexOf(v);f!==-1&&y.push({fromLane:t.lane,toLane:f,half:"bottom",colorLane:f})}return n.forEach((v,f)=>{if(!v||v===p)return;const l=d.indexOf(v);l!==-1&&y.push({fromLane:f,toLane:l,half:"full",colorLane:l})}),y})}const vt={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 Ka(e){return e.replace(/:([a-z0-9_+-]+):/g,(t,r)=>vt[r]??t)}function yt(e,t=24){return`https://www.gravatar.com/avatar/${Nt((e||"").trim().toLowerCase())}?s=${t}&d=identicon`}function wt(e,t){const r=[],n=/(https?:\/\/[^\s]+)|(#\d+)|(\b[0-9a-f]{7,40}\b)/g;let d=0,p,y=0;for(;p=n.exec(e);){p.index>d&&r.push(e.slice(d,p.index));const b=(v,f)=>m.createElement("a",{key:y++,href:v,target:"_blank",rel:"noreferrer",style:{color:"var(--brass-700)"}},f);p[1]?r.push(b(p[1],p[1])):p[2]&&t?r.push(b(t.replace("$1",p[2].slice(1)),p[2])):p[2]?r.push(p[2]):p[3]&&r.push(m.createElement("span",{key:y++,style:{fontFamily:"var(--font-mono)",color:"var(--text-muted)"}},p[3])),d=n.lastIndex}return d<e.length&&r.push(e.slice(d)),r}function Et(e,t={}){const r=t.emoji===!1?e:Ka(e),n=wt(r,t.issuePattern);return t.markdown===!1?n:n.flatMap(d=>typeof d=="string"?_t(d):[d])}function _t(e){const t=[],r=/\*\*([^*]+)\*\*|\*([^*]+)\*|`([^`]+)`/g;let n=0,d,p=0;for(;d=r.exec(e);)d.index>n&&t.push(e.slice(n,d.index)),d[1]?t.push(m.createElement("strong",{key:p++},d[1])):d[2]?t.push(m.createElement("em",{key:p++},d[2])):d[3]&&t.push(m.createElement("code",{key:p++,style:{fontFamily:"var(--font-mono)",background:"var(--bone-100)",padding:"0 3px",borderRadius:3}},d[3])),n=r.lastIndex;return n<e.length&&t.push(e.slice(n)),t}function Nt(e){function t(u,A){return u<<A|u>>>32-A}function r(u,A){const E=(u&65535)+(A&65535);return(u>>16)+(A>>16)+(E>>16)<<16|E&65535}function n(u,A,E,w,C,j){return r(t(r(r(A,u),r(w,j)),C),E)}function d(u,A,E,w,C,j,O){return n(A&E|~A&w,u,A,C,j,O)}function p(u,A,E,w,C,j,O){return n(A&w|E&~w,u,A,C,j,O)}function y(u,A,E,w,C,j,O){return n(A^E^w,u,A,C,j,O)}function b(u,A,E,w,C,j,O){return n(E^(A|~w),u,A,C,j,O)}function v(u){const A=u.length,E=[];for(let w=0;w<A*8;w+=8)E[w>>5]=(E[w>>5]??0)|(u.charCodeAt(w/8)&255)<<w%32;return E}function f(u){let A="";for(let E=0;E<u.length*4;E++)A+=((u[E>>2]??0)>>E%4*8+4&15).toString(16)+((u[E>>2]??0)>>E%4*8&15).toString(16);return A}const l=v(e),N=e.length*8;l[N>>5]=(l[N>>5]??0)|128<<N%32,l[(N+64>>>9<<4)+14]=N;let o=1732584193,h=-271733879,g=-1732584194,c=271733878;for(let u=0;u<l.length;u+=16){const A=o,E=h,w=g,C=c;o=d(o,h,g,c,l[u]||0,7,-680876936),c=d(c,o,h,g,l[u+1]||0,12,-389564586),g=d(g,c,o,h,l[u+2]||0,17,606105819),h=d(h,g,c,o,l[u+3]||0,22,-1044525330),o=d(o,h,g,c,l[u+4]||0,7,-176418897),c=d(c,o,h,g,l[u+5]||0,12,1200080426),g=d(g,c,o,h,l[u+6]||0,17,-1473231341),h=d(h,g,c,o,l[u+7]||0,22,-45705983),o=d(o,h,g,c,l[u+8]||0,7,1770035416),c=d(c,o,h,g,l[u+9]||0,12,-1958414417),g=d(g,c,o,h,l[u+10]||0,17,-42063),h=d(h,g,c,o,l[u+11]||0,22,-1990404162),o=d(o,h,g,c,l[u+12]||0,7,1804603682),c=d(c,o,h,g,l[u+13]||0,12,-40341101),g=d(g,c,o,h,l[u+14]||0,17,-1502002290),h=d(h,g,c,o,l[u+15]||0,22,1236535329),o=p(o,h,g,c,l[u+1]||0,5,-165796510),c=p(c,o,h,g,l[u+6]||0,9,-1069501632),g=p(g,c,o,h,l[u+11]||0,14,643717713),h=p(h,g,c,o,l[u]||0,20,-373897302),o=p(o,h,g,c,l[u+5]||0,5,-701558691),c=p(c,o,h,g,l[u+10]||0,9,38016083),g=p(g,c,o,h,l[u+15]||0,14,-660478335),h=p(h,g,c,o,l[u+4]||0,20,-405537848),o=p(o,h,g,c,l[u+9]||0,5,568446438),c=p(c,o,h,g,l[u+14]||0,9,-1019803690),g=p(g,c,o,h,l[u+3]||0,14,-187363961),h=p(h,g,c,o,l[u+8]||0,20,1163531501),o=p(o,h,g,c,l[u+13]||0,5,-1444681467),c=p(c,o,h,g,l[u+2]||0,9,-51403784),g=p(g,c,o,h,l[u+7]||0,14,1735328473),h=p(h,g,c,o,l[u+12]||0,20,-1926607734),o=y(o,h,g,c,l[u+5]||0,4,-378558),c=y(c,o,h,g,l[u+8]||0,11,-2022574463),g=y(g,c,o,h,l[u+11]||0,16,1839030562),h=y(h,g,c,o,l[u+14]||0,23,-35309556),o=y(o,h,g,c,l[u+1]||0,4,-1530992060),c=y(c,o,h,g,l[u+4]||0,11,1272893353),g=y(g,c,o,h,l[u+7]||0,16,-155497632),h=y(h,g,c,o,l[u+10]||0,23,-1094730640),o=y(o,h,g,c,l[u+13]||0,4,681279174),c=y(c,o,h,g,l[u]||0,11,-358537222),g=y(g,c,o,h,l[u+3]||0,16,-722521979),h=y(h,g,c,o,l[u+6]||0,23,76029189),o=y(o,h,g,c,l[u+9]||0,4,-640364487),c=y(c,o,h,g,l[u+12]||0,11,-421815835),g=y(g,c,o,h,l[u+15]||0,16,530742520),h=y(h,g,c,o,l[u+2]||0,23,-995338651),o=b(o,h,g,c,l[u]||0,6,-198630844),c=b(c,o,h,g,l[u+7]||0,10,1126891415),g=b(g,c,o,h,l[u+14]||0,15,-1416354905),h=b(h,g,c,o,l[u+5]||0,21,-57434055),o=b(o,h,g,c,l[u+12]||0,6,1700485571),c=b(c,o,h,g,l[u+3]||0,10,-1894986606),g=b(g,c,o,h,l[u+10]||0,15,-1051523),h=b(h,g,c,o,l[u+1]||0,21,-2054922799),o=b(o,h,g,c,l[u+8]||0,6,1873313359),c=b(c,o,h,g,l[u+15]||0,10,-30611744),g=b(g,c,o,h,l[u+6]||0,15,-1560198380),h=b(h,g,c,o,l[u+13]||0,21,1309151649),o=b(o,h,g,c,l[u+4]||0,6,-145523070),c=b(c,o,h,g,l[u+11]||0,10,-1120210379),g=b(g,c,o,h,l[u+2]||0,15,718787259),h=b(h,g,c,o,l[u+9]||0,21,-343485551),o=r(o,A),h=r(h,E),g=r(g,w),c=r(c,C)}return f([o,h,g,c])}function ha({x:e,y:t,items:r,onClose:n,returnFocus:d}){const p=m.useRef(null),y=m.useRef(n);y.current=n,m.useLayoutEffect(()=>{var C,j;const E=document.activeElement instanceof HTMLElement?document.activeElement:null,w=E&&E!==document.body?E:d;return(j=(C=p.current)==null?void 0:C.querySelector('[role="menuitem"]'))==null||j.focus(),()=>w==null?void 0:w.focus()},[]),m.useEffect(()=>{const E=w=>{var C;(C=p.current)!=null&&C.contains(w.target)||y.current()};return window.addEventListener("pointerdown",E),()=>window.removeEventListener("pointerdown",E)},[]);const b=E=>{var O,le;const w=Array.from(((O=p.current)==null?void 0:O.querySelectorAll('[role="menuitem"]'))??[]),C=Math.max(0,w.indexOf(document.activeElement));let j=null;if(E.key==="Escape")y.current();else if(E.key==="ArrowDown")j=(C+1)%w.length;else if(E.key==="ArrowUp")j=(C-1+w.length)%w.length;else if(E.key==="Home")j=0;else if(E.key==="End")j=w.length-1;else return;E.preventDefault(),j!==null&&((le=w[j])==null||le.focus())},v=E=>Number.parseFloat(getComputedStyle(document.documentElement).getPropertyValue(E))||0,f=v("--safe-left"),l=v("--safe-right"),N=v("--safe-top"),o=v("--safe-bottom"),h=Math.min(360,r.length*44+8,window.innerHeight-N-o-16),g=Math.max(8+f,Math.min(e,window.innerWidth-l-228)),c=Math.max(8+N,Math.min(t,window.innerHeight-o-h-8)),u=(E,w)=>a.jsx("button",{role:"menuitem",onClick:()=>{E.run(),y.current()},className:"hn-ide-menu-item",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:E.label},`${w}-${E.label}`),A=[];return r.forEach((E,w)=>{const C=A[A.length-1];C&&C.group===E.group?C.items.push({it:E,index:w}):A.push({group:E.group,items:[{it:E,index:w}]})}),a.jsx("div",{ref:p,role:"menu",onKeyDown:b,className:"hn-ide-menu",style:{position:"fixed",left:g,top:c,zIndex:150,background:"var(--surface-card)",border:"1px solid var(--border-hair)",borderRadius:"var(--radius-sm)",boxShadow:"var(--shadow-lg)",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((E,w)=>E.group?a.jsxs("div",{role:"group","aria-label":E.group,className:"hn-ide-menu-group",children:[a.jsx("div",{"aria-hidden":"true",className:"hn-ide-menu-group-title",children:E.group}),E.items.map(({it:C,index:j})=>u(C,j))]},`g${w}`):E.items.map(({it:C,index:j})=>u(C,j)))})}function St({ask:e,onClose:t}){const[r,n]=m.useState(e.initial??""),[d,p]=m.useState(""),[y,b]=m.useState(!1),v=r.trim().length>0,f=()=>{v&&(t(),e.onSubmit(r.trim(),e.second?{message:d.trim(),push:y}:void 0))};return a.jsx(ga,{open:!0,title:e.title,eyebrow:e.eyebrow,onClose:t,width:460,footer:a.jsxs(a.Fragment,{children:[a.jsx(B,{size:"sm",variant:"ghost",onClick:t,children:"Batal"}),a.jsx(B,{size:"sm",leftIcon:"check",disabled:!v,onClick:f,children:e.submit})]}),children:a.jsxs("form",{onSubmit:l=>{l.preventDefault(),f()},children:[a.jsx(en,{label:e.label,children:a.jsx(ba,{size:"sm",autoFocus:!0,value:r,"aria-label":e.label,placeholder:e.placeholder,onChange:l=>n(l.target.value),className:"hn-ide-input-full"})}),e.second&&a.jsxs(a.Fragment,{children:[a.jsx(en,{label:e.second.label,hint:e.second.hint,children:a.jsx(ba,{size:"sm",value:d,"aria-label":e.second.label,placeholder:e.second.placeholder,onChange:l=>p(l.target.value),className:"hn-ide-input-full"})}),a.jsx(aa,{checked:y,onChange:b,label:e.second.pushLabel})]})]})})}const Ct={checkout:"checkout",branch:"membuat branch",merge:"merge","cherry-pick":"cherry-pick",revert:"revert","delete-branch":"menghapus branch",reset:"reset",tag:"membuat tag","delete-tag":"menghapus tag","push-tag":"push tag","reset-worktree":"reset working tree",clean:"membersihkan berkas untracked",stash:"stash","stash-apply":"apply stash","stash-pop":"pop stash","stash-drop":"drop stash","stash-branch":"membuat branch dari stash","rename-branch":"mengganti nama branch","push-branch":"push branch",fetch:"fetch"};function Wa(e){const t=e.slice(0,3).join(", ");return e.length>3?`${t} dan ${e.length-3} lainnya`:t}const Ve=14,At=30,Rn=4,Rt=460,Mt=4e3,Ta=200,Za=["var(--graph-lane-0)","var(--graph-lane-1)","var(--graph-lane-2)","var(--graph-lane-3)","var(--graph-lane-4)","var(--graph-lane-5)"],ln=(e,t=Za)=>t[e%t.length]??Za[0],Da=e=>e,on=e=>{const t=new Date(e).getTime();if(!t)return"";const r=Math.max(0,(Date.now()-t)/1e3);return r<3600?`${Math.floor(r/60)}m`:r<86400?`${Math.floor(r/3600)}h`:r<2592e3?`${Math.floor(r/86400)}d`:new Date(e).toLocaleDateString()};function jt(e,t,r){const n=f=>Ve/2+f*Ve,d=e.half==="bottom"?r/2:0,p=e.half==="top"?r/2:r,y=n(e.fromLane),b=n(e.toLane),v=(d+p)/2;return y===b?`M${y} ${d}V${p}`:t==="angular"?`M${y} ${d}V${v}H${b}V${p}`:`M${y} ${d}C${y} ${v},${b} ${v},${b} ${p}`}function Tt({row:e,edges:t,maxLanes:r,style:n,palette:d,height:p}){const y=Ve/2+e.lane*Ve,b=e.commit.parents.length>1;return a.jsxs("svg",{"aria-hidden":"true",width:r*Ve,height:p,className:"hn-graph-lane",children:[t.map((v,f)=>a.jsx("path",{d:jt(v,n,p),className:"hn-graph-edge","data-lane":v.colorLane,style:Da({"--lane":ln(v.colorLane,d)})},f)),a.jsx("circle",{cx:y,cy:p/2,r:Rn,className:"hn-graph-node","data-lane":e.lane,"data-merge":b?"true":void 0,style:Da({"--lane":ln(e.lane,d)})})]})}function Ot(e,t,r){const{act:n,merge:d,rebase:p,drop:y,ask:b,guard:v,cmp:f}=r,l=e.refs.filter(w=>!w.startsWith("origin/")),N=e.refs.filter(w=>w.startsWith("origin/")&&w!=="origin/HEAD").map(w=>w.slice(7)),o=[...new Set([...l,...N])],h=w=>{var C;(C=navigator.clipboard)==null||C.writeText(w)},g=e.sha.slice(0,7),c=[`Commit di atas ${g} lepas dari branch ${t||"saat ini"}; pemulihannya hanya lewat reflog.`,r.dirty.length?`Perubahan tak ter-commit di ${r.dirty.length} berkas dibuang: ${Wa(r.dirty)}.`:"Tak ada perubahan tak ter-commit yang ikut dibuang."],u=[{label:`Checkout ${g}`,group:"Navigasi",run:()=>n({op:"checkout",ref:e.sha})},{label:"Salin hash",group:"Navigasi",run:()=>h(e.sha)},{label:"Salin subject",group:"Navigasi",run:()=>h(e.subject)},...f.from===null?[{label:"Tandai untuk dibandingkan",group:"Navigasi",run:()=>f.mark(e.sha)}]:f.from===e.sha?[{label:"Batal tandai perbandingan",group:"Navigasi",run:()=>f.mark(null)}]:[{label:`Bandingkan dengan ${f.from.slice(0,7)}`,group:"Navigasi",run:()=>f.compare(f.from,e.sha)}]],A=[{label:"Merge (fast-forward bila bisa)",group:"Cabang & tag",run:()=>d(e.sha)},{label:"Merge tanpa fast-forward",group:"Cabang & tag",run:()=>d(e.sha,{ff:"no-ff"})},{label:"Merge fast-forward saja",group:"Cabang & tag",run:()=>d(e.sha,{ff:"ff-only"})},{label:"Rebase current → sini",group:"Cabang & tag",run:()=>p(e.sha)},{label:"Buat branch di sini…",group:"Cabang & tag",run:()=>b({title:`Branch baru di ${g}`,label:"Nama branch baru",placeholder:"mis. fitur/login",submit:"Buat branch",onSubmit:w=>{n({op:"branch",name:w,at:e.sha,checkout:!0})}})},{label:"Tambah tag…",group:"Cabang & tag",run:()=>b({title:`Tag baru di ${g}`,label:"Nama tag",placeholder:"mis. v1.2.0",submit:"Buat tag",second:{label:"Pesan (opsional)",placeholder:"mis. rilis stabil",hint:"Kosong = tag ringan tanpa pesan.",pushLabel:"Dorong tag ke origin"},onSubmit:(w,C)=>{n({op:"tag",name:w,message:(C==null?void 0:C.message)||void 0,at:e.sha,push:(C==null?void 0:C.push)??!1})}})},...l.filter(w=>w!==t).map(w=>({label:`Merge ${w} lalu hapus (local${N.includes(w)?" + origin":""})`,group:"Cabang & tag",run:()=>d(w,{deleteBranch:w})})),...o.flatMap(w=>{const C=l.includes(w)&&w!==t,j=N.includes(w),O=[];return C&&j&&O.push({label:`Hapus ${w} (local + origin)`,group:"Cabang & tag",run:()=>n({op:"delete-branch",name:w,remote:!0})}),C&&O.push({label:`Hapus ${w} (local)`,group:"Cabang & tag",run:()=>n({op:"delete-branch",name:w})}),j&&O.push({label:`Hapus origin/${w}`,group:"Cabang & tag",run:()=>n({op:"delete-branch",name:w,local:!1,remote:!0})}),O})],E=[{label:"Cherry-pick",group:"Lanjutan",run:()=>n({op:"cherry-pick",sha:e.sha})},{label:"Revert",group:"Lanjutan",run:()=>n({op:"revert",sha:e.sha})},{label:"Reset current → sini (soft)",group:"Lanjutan",run:()=>n({op:"reset",sha:e.sha,mode:"soft"})},{label:"Reset current → sini (mixed)",group:"Lanjutan",run:()=>n({op:"reset",sha:e.sha,mode:"mixed"})},{label:"Reset current → sini (hard)",group:"Lanjutan",run:()=>v({title:`Reset ${t||"branch"} ke ${g} secara hard?`,eyebrow:"Reset hard",tone:"danger",icon:"rotate-ccw",message:"Reset hard memindahkan branch dan membuang perubahan tak ter-commit.",impact:c,confirmLabel:"Reset hard"},()=>n({op:"reset",sha:e.sha,mode:"hard"}))},{label:"Drop commit…",group:"Lanjutan",run:()=>v({title:`Drop commit ${g}?`,eyebrow:e.subject,tone:"danger",icon:"trash-2",message:"Commit ini dibuang dari riwayat branch.",impact:["Riwayat branch ditulis ulang tanpa commit ini; pemulihannya hanya lewat reflog."],confirmLabel:"Drop commit"},()=>y(e.sha))}];return[...u,...A,...E]}function $t(e,t,r,n,d,p,y,b,v,f){const l=e.startsWith("origin/"),N=l?e.slice(7):e,o=()=>{var u;(u=navigator.clipboard)==null||u.writeText(e)};if(l)return[{label:`Checkout ${e}`,run:()=>n({op:"checkout",ref:e})},{label:`Merge ${e} → current`,run:()=>d(e)},{label:`Pull ${N} → current`,run:()=>y(N)},{label:"Buat Pull Request",run:()=>b(N)},{label:"Buat arsip",run:()=>v(e)},{label:`Hapus origin/${N}`,run:()=>n({op:"delete-branch",name:N,local:!1,remote:!0})},{label:"Salin nama branch",run:o}];const h=e===t,g=r.includes(`origin/${N}`),c=[];return h||c.push({label:`Checkout ${e}`,run:()=>n({op:"checkout",ref:e})}),c.push({label:"Ganti nama…",run:()=>f({title:`Ganti nama ${e}`,label:"Nama baru",initial:e,placeholder:"mis. fitur/login-ulang",submit:"Ganti nama",onSubmit:u=>{u!==e&&n({op:"rename-branch",from:e,to:u})}})}),c.push({label:"Push ke origin",run:()=>n({op:"push-branch",name:e,setUpstream:!0})}),h||c.push({label:`Merge ${e} → current`,run:()=>d(e)}),h||c.push({label:`Rebase current → ${e}`,run:()=>p(e)}),c.push({label:"Buat Pull Request",run:()=>b(e)}),c.push({label:"Buat arsip",run:()=>v(e)}),h||(c.push({label:g?`Hapus ${e} (local + origin)`:`Hapus ${e} (local)`,run:()=>n({op:"delete-branch",name:e,remote:g})}),g&&c.push({label:`Hapus ${e} (local saja)`,run:()=>n({op:"delete-branch",name:e})})),c.push({label:"Salin nama branch",run:o}),c}function Lt({projectId:e,onRunGit:t,onMerge:r,onRebase:n,onPull:d,onDrop:p,onOpenFile:y,onToast:b,onOpenCabang:v}){var Je,ja;const[f,l]=m.useState("loading"),[N,o]=m.useState(null),{confirm:h,dialog:g}=qa(),c=m.useCallback((i,k)=>{k instanceof ea&&k.status===409||b==null||b(Re(i,k),"err","x-circle")},[b]),[u,A]=m.useState([]),[E,w]=m.useState(!1),[C,j]=m.useState(0),[O,le]=m.useState(!1),Z=m.useRef(null),[W,ue]=m.useState(""),[L,I]=m.useState(null),[te,ge]=m.useState("graph"),pe=gn(),ye=Bn(),[ce,D]=m.useState(null),[G,q]=m.useState(null),[P,U]=m.useState(null),[se,fe]=m.useState(null),[Ye,qe]=m.useState([]),[ke,X]=m.useState(null),[we,xe]=m.useState(null),na=m.useMemo(()=>u.flatMap(i=>i.commit.refs),[u]),[Be,ta]=m.useState("list"),[F,Ee]=m.useState(null),He=m.useCallback((i,k,S)=>{Ee({path:i,sha:k,from:S,data:null,tab:"diff"}),(S?$.ideCompareFile(e,S,k,i):$.ideCommitFile(e,k,i)).then(Le=>Ee(Se=>Se&&Se.path===i?{...Se,data:Le}:Se)).catch(Le=>Ee(Se=>Se&&Se.path===i?{...Se,err:Re("memuat diff",Le)}:Se))},[e]),[x,z]=m.useState(null),[T,V]=m.useState(null),de=m.useCallback((i,k)=>{z(null),$.ideCompare(e,i,k).then(S=>{V(S),I(null),ge("detail")}).catch(S=>c("membandingkan commit",S))},[e,c]),Xe=m.useRef(new Map),[ie,Ce]=m.useState(!1),[oe,je]=m.useState(""),[_e,$e]=m.useState(0),re=m.useCallback(i=>{var k;(k=Xe.current.get(i))==null||k.scrollIntoView({block:"center",behavior:"smooth"})},[]),ae=m.useMemo(()=>{const i=oe.trim().toLowerCase();return i?u.filter(k=>{const S=k.commit;return S.subject.toLowerCase().includes(i)||S.author.toLowerCase().includes(i)||S.sha.toLowerCase().startsWith(i)||S.refs.some(he=>he.toLowerCase().includes(i))||S.tags.some(he=>he.toLowerCase().includes(i))}).map(k=>k.commit.sha):[]},[oe,u]),Te=m.useCallback(i=>{if(!ae.length)return;const k=(i%ae.length+ae.length)%ae.length;$e(k),re(ae[k])},[ae,re]),Ge=m.useCallback(()=>{const i=u.find(k=>k.commit.refs.includes(W));i&&re(i.commit.sha)},[u,W,re]),[R,J]=m.useState({branch:"",showRemote:!0,showTags:!0,limit:Ta}),Y=m.useCallback(i=>J(k=>({...k,...i,limit:Ta})),[]),[ne,Sa]=m.useState(!0),[pa,Ca]=m.useState("rounded"),[Qe,fa]=m.useState(!1),sa=m.useMemo(()=>[...new Set(u.flatMap(i=>i.commit.refs).filter(i=>!i.startsWith("origin/")))].sort(),[u]),[Ke,ia]=m.useState({});m.useEffect(()=>{$.getConfig().then(i=>{const k={};for(const S of i.entries){const he=S.value;S.key.startsWith("gitGraph.")&&he!=null&&(k[S.key]=he)}ia(k),k["gitGraph.style"]&&Ca(k["gitGraph.style"]==="angular"?"angular":"rounded"),k["gitGraph.muteMergeCommits"]&&Sa(k["gitGraph.muteMergeCommits"]!=="0"),J(S=>{const he=k["gitGraph.showRemoteBranches"]!=="0",Le=k["gitGraph.showTags"]!=="0";return S.showRemote===he&&S.showTags===Le?S:{...S,showRemote:he,showTags:Le}})}).catch(()=>{})},[]);const De=m.useMemo(()=>{var k;const i=(k=Ke["gitGraph.colours"])==null?void 0:k.split(",").map(S=>S.trim()).filter(Boolean);return i&&i.length?i:Za},[Ke]),ka={emoji:Ke["gitGraph.emoji"]!=="0",markdown:Ke["gitGraph.markdown"]!=="0",issuePattern:Ke["gitGraph.issueLinkPattern"]||void 0},Pe=Ke["gitGraph.fetchAvatars"]==="1",xa=m.useCallback((i,k)=>{if(i.metaKey||i.ctrlKey){if(!x){z(k);return}x!==k&&de(x,k),z(null);return}$.ideCommit(e,k).then(S=>{I(S),ge("detail")}).catch(S=>c("membuka commit",S))},[e,x,de,c]),be=m.useCallback((i=!1)=>{i||l("loading"),$.ideGraph(e,R.limit,{branches:R.branch?[R.branch]:void 0,showRemote:R.showRemote?void 0:!1,showTags:R.showTags?void 0:!1}).then(k=>{A(rn(k.commits)),ue(k.current),j(k.total??0),w(k.commits.length>=R.limit),l("ready")}).catch(()=>{i||l("error")}).finally(()=>le(!1)),$.ideStatus(e).then(U).catch(()=>{i||U(null)}),$.ideStashes(e).then(qe).catch(()=>{i||qe([])})},[e,R]),ra=m.useRef(!1);m.useEffect(()=>{be(ra.current),ra.current=!1},[be]);const va=m.useCallback(()=>{ra.current||(ra.current=!0,le(!0),J(i=>({...i,limit:i.limit+Ta})))},[]);m.useEffect(()=>{const i=Z.current;if(!i||!E||O||typeof IntersectionObserver>"u")return;const k=new IntersectionObserver(S=>{S.some(he=>he.isIntersecting)&&va()});return k.observe(i),()=>k.disconnect()},[E,O,va]),Pn({topic:"git",params:{projectId:e,limit:R.limit,branch:R.branch,showRemote:R.showRemote,showTags:R.showTags},apply:i=>{A(rn(i.graph.commits)),ue(i.graph.current),j(i.graph.total??0),w(i.graph.commits.length>=R.limit),l("ready"),U(i.status),qe(i.stashes)},refetch:()=>be(!0),pollMs:Mt}),m.useEffect(()=>{const i=k=>{k.key==="Escape"&&(Ee(null),V(null),z(null),Ce(!1)),(k.metaKey||k.ctrlKey)&&k.key.toLowerCase()==="f"&&(k.preventDefault(),Ce(!0)),(k.metaKey||k.ctrlKey)&&k.key.toLowerCase()==="h"&&(k.preventDefault(),Ge())};return window.addEventListener("keydown",i),()=>window.removeEventListener("keydown",i)},[Ge]);function Aa(i,k){i.preventDefault(),D({x:i.clientX,y:i.clientY,c:k,anchor:i.currentTarget})}async function ve(i){D(null);try{await t(i),be()}catch(k){c(`menjalankan ${Ct[i.op]??i.op}`,k)}}async function Ra(i,k){D(null);try{await r(i,k),be()}catch{}}async function la(i){D(null),xe(null);try{await n(i),be()}catch{}}async function Ma(i){D(null),xe(null);try{await d(i),be()}catch{}}async function Ia(i){D(null);try{await p(i),be()}catch{}}const ya=m.useCallback((i,k)=>{h({...i,run:async()=>{await k()}}).catch(S=>c("menjalankan aksi",S))},[h,c]);function wa(i){xe(null),$.idePrUrl(e,i).then(k=>{k.url?window.open(k.url,"_blank","noreferrer"):b==null||b("origin bukan github/gitlab/bitbucket — tak bisa buat PR otomatis","warn","git-branch")}).catch(k=>c("membuat Pull Request",k))}function Ba(i){xe(null),window.open($.ideArchiveUrl(e,i),"_blank")}const ze={act:ve,merge:Ra,rebase:la,drop:Ia,ask:o,guard:ya,cmp:{from:x,mark:z,compare:de},dirty:[...(P==null?void 0:P.staged)??[],...(P==null?void 0:P.unstaged)??[]],untracked:(P==null?void 0:P.untracked)??[]},oa=Math.max(1,...u.map(i=>i.width)),Pa=m.useMemo(()=>xt(u),[u]),Ea=f==="loading"?a.jsx(ee,{kind:"loading",title:"Memuat git graph…"}):f==="error"?a.jsx(ee,{kind:"error",title:"Gagal memuat git graph",action:()=>be()}):u.length===0?a.jsx(ee,{kind:"empty",icon:"git-commit",title:"Belum ada commit"}):null,Ne=pe!=="desktop",Ue=pe==="mobile"||ye?44:At,ca=!!(L||T);return a.jsxs(a.Fragment,{children:[Ne&&ca&&a.jsx(bn,{"aria-label":"Panel Git Graph",variant:"pill",value:te,onChange:i=>ge(i),tabs:[{value:"graph",label:"Graph"},{value:"detail",label:"Detail"}]}),a.jsxs("div",{className:"hn-git-graph-layout",style:Da({"--git-cols":Ne?"minmax(0, 1fr)":ca?"minmax(0, 1fr) 340px":"minmax(0, 1fr)"}),children:[a.jsx("section",{"data-panel":"graph","aria-label":"Graph","aria-hidden":Ne&&ca&&te!=="graph"?"true":"false",hidden:Ne&&ca&&te!=="graph",className:"hn-git-panel",children:a.jsxs(Ze,{padding:0,children:[a.jsx("div",{className:"hn-git-find",children:ie?a.jsxs(a.Fragment,{children:[a.jsx(We,{name:"search",size:13,color:"var(--text-subtle)"}),a.jsx("input",{autoFocus:!0,value:oe,"aria-label":"Cari commit",onChange:i=>{je(i.target.value),$e(0)},onKeyDown:i=>{i.key==="Enter"&&Te(_e+(i.shiftKey?-1:1)),i.key==="Escape"&&Ce(!1)},placeholder:"mis. auto-merge, 3a3e7e0, atau hanoman/spec-490",className:"hn-git-find-input"}),a.jsx("span",{className:"hn-git-find-count",children:ae.length?`${_e+1}/${ae.length}`:oe?"0":""}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"chevron-up","aria-label":"Hasil sebelumnya",disabled:!ae.length,onClick:()=>Te(_e-1)}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"chevron-down","aria-label":"Hasil berikutnya",disabled:!ae.length,onClick:()=>Te(_e+1)}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"x","aria-label":"Tutup pencarian",onClick:()=>{Ce(!1),je("")}})]}):a.jsxs(a.Fragment,{children:[a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"search",onClick:()=>Ce(!0),children:"Cari"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"crosshair",onClick:Ge,children:"HEAD"}),a.jsx("span",{className:"hn-git-find-hint",children:"⌘F cari · ⌘H ke HEAD"})]})}),a.jsxs("div",{className:"hn-ide-graph-bar",children:[a.jsxs("select",{"aria-label":"Filter branch",value:R.branch,onChange:i=>Y({branch:i.target.value}),className:"hn-git-branch-select",children:[a.jsx("option",{value:"",children:"semua branch"}),R.branch&&!sa.includes(R.branch)&&a.jsx("option",{value:R.branch,children:R.branch}),sa.map(i=>a.jsx("option",{value:i,children:i},i))]}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"eye","aria-expanded":Qe,"aria-controls":Qe?"ide-graph-view":void 0,onClick:()=>fa(i=>!i),children:"Tampilan"}),a.jsx(Vn,{})]}),Qe&&a.jsxs("div",{id:"ide-graph-view",role:"group","aria-label":"Tampilan graph",className:"hn-ide-graph-view",children:[a.jsx(aa,{checked:R.showRemote,onChange:i=>Y({showRemote:i}),label:"remote"}),a.jsx(aa,{checked:R.showTags,onChange:i=>Y({showTags:i}),label:"tag"}),a.jsx(aa,{checked:ne,onChange:i=>Sa(i),label:"redupkan merge"}),a.jsxs(B,{size:"sm",variant:"ghost",onClick:()=>Ca(i=>i==="rounded"?"angular":"rounded"),children:["Gaya: ",pa==="rounded"?"lengkung":"siku"]})]}),Ye.length>0&&a.jsxs("div",{className:"hn-git-stash-row",children:[a.jsx("span",{className:"hn-eyebrow hn-git-stash-label",children:"stash"}),Ye.map(i=>a.jsxs("button",{type:"button",title:i.message,"aria-label":`Aksi ${i.ref}`,onClick:k=>{k.stopPropagation(),X({x:k.clientX,y:k.clientY,s:i,anchor:k.currentTarget})},onContextMenu:k=>{k.preventDefault(),k.stopPropagation(),X({x:k.clientX,y:k.clientY,s:i,anchor:k.currentTarget})},className:"hn-git-stash-chip",children:[i.ref,": ",i.message.length>40?i.message.slice(0,40)+"…":i.message]},i.ref))]}),Ea??a.jsxs(a.Fragment,{children:[a.jsx(zn,{className:"hn-git-scroll","data-testid":"ide-graph-rows",children:a.jsxs("div",{role:"list","aria-label":"Riwayat commit",className:"hn-git-rows",style:Da({"--graph-min-w":`${oa*Ve+Rt}px`,"--row-h":`${Ue}px`}),children:[P&&!P.clean&&(()=>{const i=P.staged.length+P.unstaged.length+P.untracked.length,k=P.unstaged[0]??P.untracked[0]??P.staged[0];return a.jsxs("div",{role:"listitem",className:"hn-ide-graph-row",onClick:()=>{k&&y(k,"")},onContextMenu:S=>{S.preventDefault(),fe({x:S.clientX,y:S.clientY,anchor:S.currentTarget})},children:[a.jsx("svg",{"aria-hidden":"true",width:oa*Ve,height:Ue,className:"hn-graph-lane",children:a.jsx("circle",{cx:Ve/2,cy:Ue/2,r:Rn,className:"hn-graph-node hn-graph-node--open"})}),a.jsxs("button",{type:"button",onClick:S=>{S.stopPropagation(),k&&y(k,"")},className:k?"hn-git-uncommitted":"hn-git-uncommitted hn-git-uncommitted--static",children:["Perubahan belum di-commit · ",i," berkas"]}),a.jsx("button",{type:"button",className:"hn-graph-action","aria-label":"Aksi working tree",onClick:S=>{S.stopPropagation(),fe({x:S.clientX,y:S.clientY,anchor:S.currentTarget})},children:"⋮"}),a.jsx("span",{className:"hn-git-wt",children:"working tree"}),a.jsx("span",{className:"hn-git-wt-gap"})]})})(),u.map((i,k)=>{const S=i.commit,he=S.refs.includes(W),Le=(L==null?void 0:L.sha)===S.sha,Se=ae.includes(S.sha),za=ae[_e]===S.sha,me=Le?"is-sel":za?"is-active":Se?"is-hit":"",Ae=ka.emoji?Ka(S.subject):S.subject;return a.jsxs("div",{ref:K=>{K&&Xe.current.set(S.sha,K)},role:"listitem",className:me?`hn-ide-graph-row ${me}`:"hn-ide-graph-row",onClick:K=>xa(K,S.sha),onContextMenu:K=>Aa(K,S),title:x?"Ctrl/Cmd-klik untuk bandingkan dengan commit pertama":"Ctrl/Cmd-klik untuk mulai compare",children:[a.jsx(Tt,{row:i,edges:Pa[k]??[],maxLanes:oa,style:pa,palette:De,height:Ue}),a.jsxs("div",{className:"hn-git-main",children:[a.jsxs("span",{className:"hn-git-refs",children:[S.refs.map(K=>a.jsx("button",{type:"button",title:he&&K===W?`${K} · branch aktif (HEAD) — pilih untuk aksi`:`${K} · branch — pilih untuk aksi`,"aria-label":`Aksi branch ${K}`,onClick:Q=>{Q.preventDefault(),Q.stopPropagation(),xe({x:Q.clientX,y:Q.clientY,ref:K,anchor:Q.currentTarget})},onContextMenu:Q=>{Q.preventDefault(),Q.stopPropagation(),xe({x:Q.clientX,y:Q.clientY,ref:K,anchor:Q.currentTarget})},className:he&&K===W?"hn-git-ref hn-git-ref--head":"hn-git-ref",children:a.jsx("span",{className:"hn-git-ref-text",children:K})},K)),S.tags.map(K=>a.jsx("button",{type:"button",title:`${K} · tag — pilih untuk aksi`,"aria-label":`Aksi tag ${K}`,onClick:Q=>{Q.preventDefault(),Q.stopPropagation(),q({x:Q.clientX,y:Q.clientY,tag:K,anchor:Q.currentTarget})},onContextMenu:Q=>{Q.preventDefault(),Q.stopPropagation(),q({x:Q.clientX,y:Q.clientY,tag:K,anchor:Q.currentTarget})},className:"hn-git-tag",children:a.jsxs("span",{className:"hn-git-ref-text",children:["⌂",K]})},`tag:${K}`)),S.parents.length>1&&a.jsx("span",{className:"hn-git-merge",children:"merge"})]}),a.jsxs("span",{className:"hn-git-text",children:[a.jsx("button",{type:"button","aria-label":`Buka commit ${S.sha}`,title:Ae,onClick:K=>{K.stopPropagation(),xa(K,S.sha)},className:ne&&S.parents.length>1?"hn-git-subject hn-git-subject--muted":"hn-git-subject",children:Ae}),a.jsx("span",{className:"hn-git-date-under",children:on(S.at)})]})]}),a.jsx("button",{type:"button",className:"hn-graph-action","aria-label":`Aksi commit ${S.sha}`,onClick:K=>{K.stopPropagation(),Aa(K,S)},children:"⋮"}),a.jsx("span",{className:"hn-git-author",children:S.author}),a.jsx("span",{className:"hn-git-date",children:on(S.at)})]},S.sha)})]})}),a.jsxs("div",{ref:Z,className:"hn-git-more",children:[a.jsxs("span",{className:"hn-git-more-count",children:[C>0?`${u.length} dari ${C} commit`:`${u.length} commit dimuat`,E?"":" · seluruh history"]}),E&&a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"chevron-down",disabled:O,onClick:va,children:O?"Memuat…":`Muat ${Ta} lagi`})]})]})]})}),L&&a.jsx("section",{"data-panel":"detail","aria-label":"Detail","aria-hidden":Ne&&te!=="detail"?"true":"false",hidden:Ne&&te!=="detail",className:"hn-git-panel",children:a.jsxs(Ze,{padding:16,children:[a.jsxs("div",{className:"hn-git-head",children:[a.jsxs("span",{className:"hn-eyebrow",children:["commit ",L.sha.slice(0,8)]}),a.jsxs("div",{className:"hn-git-cluster",children:[L.signed&&a.jsx(Me,{tone:"ok",size:"sm",children:"signed"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"copy",onClick:()=>{var i;return void((i=navigator.clipboard)==null?void 0:i.writeText(L.sha))},children:"Hash"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"x",onClick:()=>{I(null),ge("graph")},children:"Tutup"})]})]}),a.jsx("div",{className:"hn-git-detail-title",children:ka.emoji?Ka(L.subject):L.subject}),a.jsxs("div",{className:"hn-git-detail-meta",children:[Pe&&L.authorEmail&&a.jsx("img",{src:yt(L.authorEmail,20),width:18,height:18,alt:"",className:"hn-git-avatar"}),a.jsxs("span",{children:[L.author,L.committer&&L.committer!==L.author?` · committed by ${L.committer}`:""]})]}),L.body&&a.jsx("pre",{className:"hn-git-detail-body",children:Et(L.body,ka)}),a.jsxs("div",{className:"hn-eyebrow hn-git-changed-head",children:[a.jsxs("span",{className:"hn-grow",children:[L.changed.length," file berubah"]}),["list","tree"].map(i=>a.jsx("button",{type:"button","aria-label":i==="list"?"Tampilan daftar":"Tampilan pohon","aria-pressed":Be===i,onClick:()=>ta(i),className:"hn-git-view-btn",children:a.jsx(We,{name:i==="list"?"list":"folder-tree",size:13,color:Be===i?"var(--brass-700)":"var(--text-subtle)"})},i))]}),Be==="tree"?a.jsx(Xa,{label:"Berkas commit",nodes:$a(L.changed.map(i=>i.path)),children:$a(L.changed.map(i=>i.path)).map(i=>a.jsx(Qa,{node:i,selected:(F==null?void 0:F.path)??"",onSelect:k=>He(k,L.sha),defaultOpen:!0},i.path))}):L.changed.map(i=>a.jsxs("div",{className:"hn-git-file",children:[a.jsx(Me,{tone:i.status==="A"?"ok":i.status==="D"?"err":"warn",size:"sm",children:i.status}),a.jsx("button",{onClick:()=>He(i.path,L.sha),title:"lihat diff",className:"hn-git-file-path",children:i.path}),a.jsx("button",{type:"button",className:"hn-graph-action","aria-label":`Lihat ${i.path} pada commit ini`,title:"Lihat pada revisi ini",onClick:()=>y(i.path,L.sha),children:a.jsx(We,{name:"git-commit",size:12,color:"var(--text-subtle)"})}),a.jsx("button",{type:"button",className:"hn-graph-action","aria-label":`Buka ${i.path} dari working tree`,title:"Buka dari working tree",onClick:()=>y(i.path,""),children:a.jsx(We,{name:"external-link",size:12,color:"var(--text-subtle)"})}),a.jsx("button",{type:"button",className:"hn-graph-action","aria-label":`Salin path ${i.path}`,title:"Salin path",onClick:()=>{var k;return void((k=navigator.clipboard)==null?void 0:k.writeText(i.path))},children:a.jsx(We,{name:"copy",size:12,color:"var(--text-subtle)"})})]},i.path))]})}),T&&a.jsx("section",{"data-panel":"detail","aria-label":"Detail","aria-hidden":Ne&&te!=="detail"?"true":"false",hidden:Ne&&te!=="detail",className:"hn-git-panel",children:a.jsxs(Ze,{padding:16,children:[a.jsxs("div",{className:"hn-git-head",children:[a.jsxs("span",{className:"hn-eyebrow",children:["compare ",T.from.slice(0,7)," … ",T.to.slice(0,7)]}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"x",onClick:()=>{V(null),ge("graph")},children:"Tutup"})]}),a.jsxs("div",{className:"hn-eyebrow hn-git-count",children:[T.changed.length," file berbeda"]}),T.changed.length===0&&a.jsx("div",{className:"hn-git-empty",children:"Tak ada perbedaan."}),T.changed.map(i=>a.jsxs("div",{className:"hn-git-file",children:[a.jsx(Me,{tone:i.status==="A"?"ok":i.status==="D"?"err":"warn",size:"sm",children:i.status}),a.jsx("button",{onClick:()=>He(i.path,T.to,T.from),className:"hn-git-file-path",children:i.path})]},i.path))]})}),x&&a.jsxs("div",{className:"hn-git-compare-pill",children:["Compare dari ",x.slice(0,7)," — Ctrl/Cmd-klik commit kedua",a.jsx("button",{type:"button","aria-label":"Batalkan perbandingan",onClick:()=>z(null),className:"hn-git-compare-close",children:"✕"})]}),ce&&a.jsx(ha,{x:ce.x,y:ce.y,returnFocus:ce.anchor,onClose:()=>D(null),items:Ot(ce.c,W,ze)}),G&&a.jsx(ha,{x:G.x,y:G.y,returnFocus:G.anchor,onClose:()=>q(null),items:[{label:`Hapus tag ${G.tag} (local)`,run:()=>{q(null),ve({op:"delete-tag",name:G.tag})}},{label:`Hapus tag ${G.tag} (local + origin)`,run:()=>{q(null),ve({op:"delete-tag",name:G.tag,remote:!0})}},{label:"Push tag ke origin",run:()=>{q(null),ve({op:"push-tag",name:G.tag})}},{label:"Salin nama tag",run:()=>{var i;q(null),(i=navigator.clipboard)==null||i.writeText(G.tag)}}]}),se&&a.jsx(ha,{x:se.x,y:se.y,returnFocus:se.anchor,onClose:()=>fe(null),items:[{label:"Stash perubahan…",run:()=>{fe(null),o({title:"Stash perubahan",label:"Pesan stash (opsional)",placeholder:"mis. WIP login",submit:"Stash",onSubmit:i=>{ve({op:"stash",message:i||void 0,includeUntracked:!0})}})}},{label:"Reset working tree (mixed — unstage)",run:()=>{fe(null),ve({op:"reset-worktree",mode:"mixed"})}},{label:"Reset working tree (hard — buang semua)",run:()=>{fe(null),ya({title:"Buang semua perubahan tak ter-commit?",eyebrow:"Reset hard",tone:"danger",icon:"rotate-ccw",message:"Berkas yang diubah atau di-stage kembali ke isi commit HEAD.",impact:[ze.dirty.length?`${ze.dirty.length} berkas diubah kembali: ${Wa(ze.dirty)}. Isinya tak bisa dikembalikan.`:"Tak ada berkas tracked yang berubah.","Berkas untracked tidak tersentuh oleh reset ini."],confirmLabel:"Buang perubahan"},()=>ve({op:"reset-worktree",mode:"hard"}))}},{label:"Hapus berkas untracked…",run:()=>{fe(null),ya({title:"Hapus berkas untracked?",eyebrow:"Clean untracked",tone:"danger",icon:"trash-2",message:"Berkas dan folder yang tak pernah di-add ke git dihapus permanen.",impact:[ze.untracked.length?`${ze.untracked.length} berkas/folder dihapus: ${Wa(ze.untracked)}.`:"Tak ada berkas untracked.","Tidak ada di riwayat git, sehingga tak bisa dipulihkan."],confirmLabel:"Hapus berkas"},()=>ve({op:"clean",directories:!0}))}}]}),ke&&a.jsx(ha,{x:ke.x,y:ke.y,returnFocus:ke.anchor,onClose:()=>X(null),items:[{label:"Apply (jaga stash)",run:()=>{const i=ke.s;X(null),ve({op:"stash-apply",ref:i.ref})}},{label:"Pop (apply + buang)",run:()=>{const i=ke.s;X(null),ve({op:"stash-pop",ref:i.ref})}},{label:"Drop (buang stash)",run:()=>{const i=ke.s;X(null),ve({op:"stash-drop",ref:i.ref})}},{label:"Buat branch dari stash…",run:()=>{const i=ke.s;X(null),o({title:`Branch dari ${i.ref}`,label:"Nama branch baru",placeholder:"mis. fitur/dari-stash",submit:"Buat branch",onSubmit:k=>{ve({op:"stash-branch",ref:i.ref,name:k})}})}},{label:"Salin nama stash",run:()=>{var k;const i=ke.s;X(null),(k=navigator.clipboard)==null||k.writeText(i.ref)}}]}),we&&a.jsx(ha,{x:we.x,y:we.y,returnFocus:we.anchor,onClose:()=>xe(null),items:[...$t(we.ref,W,na,ve,Ra,la,Ma,wa,Ba,o),...v?[{label:"Kelola di tab Cabang",run:()=>{xe(null),v()}}]:[]]}),N&&a.jsx(St,{ask:N,onClose:()=>o(null)}),g,F&&a.jsx(ga,{open:!0,title:`Diff ${F.path}`,eyebrow:`@ ${F.sha.slice(0,8)}`,width:900,fillHeight:!0,onClose:()=>Ee(null),children:a.jsxs("div",{className:"hn-panel-flex hn-git-diff-body",children:[a.jsxs("div",{className:"hn-git-diff-bar",children:[a.jsx("div",{className:"hn-git-diff-tabs",children:(ma(F.path)?["diff","source","preview"]:["diff","source"]).map(i=>a.jsx("button",{onClick:()=>Ee(k=>k&&{...k,tab:i}),className:F.tab===i?"hn-git-diff-tab hn-git-diff-tab--on":"hn-git-diff-tab",children:i},i))}),ma(F.path)&&!((Je=F.data)!=null&&Je.binary)&&((ja=F.data)==null?void 0:ja.content)!=null&&a.jsx(pn,{href:i=>F.from?$.ideCompareFileDownloadUrl(e,F.from,F.sha,F.path,i):$.ideCommitFileDownloadUrl(e,F.sha,F.path,i)})]}),a.jsx("div",{"data-testid":"gitgraph-file-scroll",className:"hn-git-diff-scroll",children:F.data?F.data.binary?a.jsx(ee,{kind:"empty",icon:"file",title:"Berkas biner"}):F.tab==="diff"?a.jsx(fn,{diff:F.data.diff??"",emptyHint:"File tak berubah di commit ini."}):F.tab==="preview"?a.jsx("div",{className:"hn-git-md",children:a.jsx(kn,{text:F.data.content??"",name:F.path})}):a.jsx("pre",{className:"hn-git-source",children:F.data.content??"(kosong / dihapus)"}):F.err?a.jsx(ee,{kind:"error",title:"Diff belum bisa dibuka",hint:F.err}):a.jsx(ee,{kind:"loading",title:"Memuat diff…",hint:F.path})})]})})]})]})}const cn=[{value:"both",label:"local + origin"},{value:"local",label:"local saja"},{value:"remote",label:"origin saja"}],Dt=[{value:"all",label:"semua status"},{value:"merged",label:"ter-merge saja"},{value:"unmerged",label:"belum ter-merge"}],Oa=100,dn=e=>Un(e??"",Date.now())||"—",It=e=>e===null?"—":e<1024*1024?`${Math.max(1,Math.round(e/1024))} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(1)} GB`,Bt=e=>e.local&&e.remote?"local + origin":e.local?"local":"origin",Pt=e=>e.locks.length===0;function zt({projectId:e}){const[t,r]=m.useState("loading"),[n,d]=m.useState(null),[p,y]=m.useState(null),[b,v]=m.useState({}),[f,l]=m.useState([]),[N,o]=m.useState(""),[h,g]=m.useState("both"),[c,u]=m.useState("all"),[A,E]=m.useState(""),[w,C]=m.useState(Oa),[j,O]=m.useState(new Set),[le,Z]=m.useState(!1),[W,ue]=m.useState(!1),[L,I]=m.useState(null),[te,ge]=m.useState(""),{confirm:pe,dialog:ye}=qa(),ce=m.useCallback(()=>{r("loading"),Promise.all([$.branchesUnused(e,N||void 0,"all"),$.worktrees(e)]).then(([x,z])=>{d(x),y(z),O(new Set),v({}),ge(""),r("ready")}).catch(()=>r("error"))},[e,N]);m.useEffect(()=>{ce()},[ce]),m.useEffect(()=>{$.listBranches(e).then(x=>l([...new Set([...x.branches,...x.remotes])].sort())).catch(()=>l([]))},[e]);const D=(p==null?void 0:p.worktrees)??[];m.useEffect(()=>{if(!p)return;let x=!0;return(async()=>{for(const z of p.worktrees){if(!x)return;const T=await $.worktreeStats(e,z.name).catch(()=>null);x&&T&&v(V=>({...V,[z.name]:T}))}})(),()=>{x=!1}},[p,e]);const G=(n==null?void 0:n.branches)??[],q=m.useMemo(()=>new Map(G.map(x=>[x.name,x])),[G]),P=m.useMemo(()=>{const x=new Set,z=[];for(const T of D)T.branch&&x.add(T.branch),z.push({key:`wt:${T.name}`,name:T.name,kind:"worktree",wt:T,br:T.branch?q.get(T.branch):void 0,deletable:T.deletable});for(const T of G)x.has(T.name)||z.push({key:`br:${T.name}`,name:T.name,kind:"branch",br:T,deletable:Pt(T)});return z},[D,G,q]),U=m.useMemo(()=>{const x=A.trim().toLowerCase();return P.filter(z=>{var de;const T=((de=z.br)==null?void 0:de.merged)??null;return(c==="all"||(c==="merged"?T===!0:T===!1))&&(!x||z.name.toLowerCase().includes(x))})},[P,c,A]);m.useEffect(()=>{C(Oa),O(new Set)},[c,A]);const se=U.slice(0,w),fe=se.filter(x=>x.deletable).map(x=>x.key),Ye=fe.length>0&&fe.every(x=>j.has(x)),qe=x=>O(z=>{const T=new Set(z);return T.has(x)?T.delete(x):T.add(x),T}),ke=se.filter(x=>j.has(x.key)),X=P.some(x=>{var z;return x.kind==="worktree"&&x.deletable&&((z=x.wt)==null?void 0:z.branch)}),we=P.filter(x=>{var z;return(z=x.wt)==null?void 0:z.orphan}),xe=we.filter(x=>x.deletable),na=cn.find(x=>x.value===h).label,Be=(x,z=!1)=>{x.length!==0&&(async()=>{const T={...b},V=x.filter(R=>R.kind==="worktree"&&R.wt),de=x.filter(R=>R.kind==="branch"&&R.br);for(const R of V){const J=await $.worktreeStats(e,R.name).catch(()=>null);J?T[R.name]=J:delete T[R.name]}v(T);const Xe=V.filter(R=>R.wt.session).length,ie=V.reduce((R,J)=>{var Y;return R+(((Y=T[J.name])==null?void 0:Y.dirtyFiles)??0)},0),Ce=V.reduce((R,J)=>{var Y;return R+(((Y=T[J.name])==null?void 0:Y.orphanCommits)??0)},0),oe=V.filter(R=>{var J,Y;return((J=T[R.name])==null?void 0:J.dirtyFiles)==null||((Y=T[R.name])==null?void 0:Y.orphanCommits)==null}).length,je=V.map(R=>R.wt.branch).filter(R=>!!R),_e=de.filter(R=>R.br.merged===!1),$e=_e.length>0,re=[];Xe&&re.push(`${Xe} sesi aktif akan ditutup lebih dulu`),Ce&&re.push(`${Ce} commit tak ada di tempat lain — hilang`),ie&&re.push(`${ie} berkas belum tersimpan`),oe&&re.push(`Dampak ${oe} worktree belum diketahui — statistik git gagal dibaca`),!z&&W&&je.length&&re.push(`branch ikut dihapus: ${je.join(", ")}`),V.length&&re.push("Seluruh isi direktori akan hilang, termasuk berkas ignored seperti .env dan node_modules"),$e&&(re.push(`${_e.length} branch belum ter-merge ke ${(n==null?void 0:n.base)??"base"}: ${_e.map(R=>R.name).join(", ")}.`),re.push("Commit yang hanya ada di branch itu akan hilang dan tak bisa dipulihkan dari dashboard."));const ae=[de.length?`${de.length} branch akan dihapus (${na}).`:"",V.length?`${V.length} worktree akan dihapus.`:"","Tindakan ini tak bisa dibatalkan."].filter(Boolean),Te=V.length&&!de.length?`Hapus ${V.length} worktree?`:de.length&&!V.length?`Hapus ${de.length} branch?`:`Hapus ${x.length} cabang?`,Ge=async()=>{const R=[];if(V.length){const J=V.map(Y=>Y.name);try{const Y=await $.deleteWorktrees(e,{names:J,...z?{orphanOnly:!0}:W?{deleteBranch:!0}:{}});for(const ne of Y.results)R.push({name:ne.name,kind:"worktree",ok:ne.ok,error:ne.error,...ne.branch?{branch:ne.branch}:{}})}catch(Y){for(const ne of J)R.push({name:ne,kind:"worktree",ok:!1,error:Fa(Y,"gagal")})}}if(de.length){const J=de.map(Y=>Y.name);try{const Y=await $.deleteBranches(e,{names:J,scope:h,...$e?{allowUnmerged:!0}:{}});for(const ne of Y.results)R.push({name:ne.name,kind:"branch",ok:ne.ok,error:ne.error,...ne.forced?{forced:!0}:{}})}catch(Y){for(const ne of J)R.push({name:ne,kind:"branch",ok:!1,error:Fa(Y,"gagal")})}}I(R),ce()};pe({eyebrow:"cabang",title:Te,confirmLabel:"Ya, hapus",message:z?"Worktree sesi terputus ini akan dihapus. Sesi yang kembali hidup akan dilewati.":ae.join(" "),impact:re,requireText:$e?x.length===1?x[0].name:"hapus paksa":void 0,run:Ge}).catch(R=>I(x.map(J=>({name:J.name,kind:J.kind,ok:!1,error:Fa(R,"gagal")}))))})()},ta=(L??[]).filter(x=>x.ok).length,F=(L??[]).filter(x=>!x.ok),Ee=(L??[]).filter(x=>x.ok&&x.branch&&!x.branch.ok),He=(L??[]).filter(x=>x.ok&&x.forced).length;return a.jsxs(Ze,{padding:0,children:[a.jsxs("div",{className:"hn-ide-cabang-bar",children:[a.jsxs("span",{className:"hn-eyebrow hn-ide-cabang-title",children:["cabang & worktree",n!=null&&n.base?` · base ${n.base}`:""]}),a.jsx(ba,{size:"sm","data-testid":"cari",leftIcon:"search","aria-label":"Cari cabang",placeholder:"mis. fitur/login",value:A,onChange:x=>E(x.target.value),style:{width:180}}),a.jsx(Na,{size:"sm","data-testid":"status","aria-label":"Status branch",value:c,onChange:x=>u(x.target.value),options:Dt}),a.jsx(B,{size:"sm",variant:"ghost","aria-expanded":le,"aria-controls":le?"cabang-opsi":void 0,onClick:()=>Z(x=>!x),children:"Opsi"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:ce,children:"Muat ulang"}),a.jsxs(B,{size:"sm",variant:"primary",leftIcon:"trash-2","data-testid":"bulk-delete",disabled:ke.length===0,onClick:()=>Be(ke),children:["Hapus terpilih (",ke.length,")"]})]}),le&&a.jsxs("div",{id:"cabang-opsi",role:"group","aria-label":"Opsi pembersihan",className:"hn-ide-cabang-opts",children:[a.jsx(Na,{size:"sm","data-testid":"base","aria-label":"Base pembanding",value:N,onChange:x=>o(x.target.value),options:[{value:"",label:`base otomatis${n!=null&&n.base?` (${n.base})`:""}`},...f.map(x=>({value:x,label:x}))]}),a.jsx(Na,{size:"sm","data-testid":"scope","aria-label":"Cakupan hapus branch",value:h,onChange:x=>g(x.target.value),options:cn}),X&&a.jsx(aa,{"data-testid":"with-branch",checked:W,onChange:()=>ue(!W),label:"Hapus branch worktree juga",description:"Mati: branch tetap ada. Branch tanpa worktree dihapus lewat barisnya."})]}),we.length>0&&t==="ready"&&a.jsxs("div",{className:"hn-ide-cabang-banner",children:[a.jsxs("span",{className:"hn-ide-cabang-banner-text",children:[we.length," worktree sesi terputus — disimpan sampai kamu membersihkannya. Sesi yang sudah hidup kembali dilewati."]}),a.jsxs(B,{size:"sm",variant:"ghost",leftIcon:"trash-2",disabled:!xe.length,onClick:()=>Be(xe,!0),children:["Bersihkan sesi terputus (",xe.length,")"]})]}),L&&a.jsxs("div",{className:"hn-ide-cabang-results",children:[a.jsxs("div",{className:"hn-ide-cabang-results-sum",children:[ta," terhapus",He?` (${He} dipaksa)`:""," · ",F.length," gagal"]}),F.map(x=>a.jsxs("div",{className:"hn-ide-cabang-results-line",children:[x.name," — ",x.error??"gagal"]},`f-${x.kind}-${x.name}`)),Ee.map(x=>a.jsxs("div",{className:"hn-ide-cabang-results-line",children:[x.branch.name," — ",x.branch.error??"branch gagal dihapus"]},`b-${x.name}`))]}),t==="loading"?a.jsx(ee,{kind:"loading",title:"Memuat cabang…"}):t==="error"?a.jsx(ee,{kind:"error",title:"Gagal memuat cabang",action:()=>ce()}):P.length===0?a.jsx(ee,{kind:"empty",icon:"git-branch",title:"Tak ada branch atau worktree",hint:"Project ini belum punya branch local, origin, maupun checkout lokal."}):U.length===0?a.jsx(ee,{kind:"empty",icon:"filter",title:"Tak ada branch cocok filter",hint:"Longgarkan filter status atau kosongkan pencarian."}):a.jsxs("div",{className:"hn-ide-cabang-list",children:[a.jsx("div",{className:"hn-ide-cabang-pickall",children:a.jsx(aa,{"data-testid":"pick-all",checked:Ye,disabled:fe.length===0,onChange:()=>O(Ye?new Set:new Set(fe)),label:`Pilih semua yang boleh (${fe.length})`})}),se.map(x=>a.jsx(Ut,{row:x,stats:x.wt?b[x.name]:void 0,picked:j.has(x.key),focused:te===x.key,onToggle:()=>qe(x.key),onDelete:()=>Be([x]),onFocusWorktree:z=>{const T=D.find(V=>V.path===z);T&&ge(`wt:${T.name}`)}},x.key)),U.length>se.length&&a.jsx("div",{className:"hn-ide-cabang-more",children:a.jsxs(B,{size:"sm",variant:"ghost","data-testid":"show-more",onClick:()=>C(x=>x+Oa),children:["Tampilkan ",Math.min(Oa,U.length-se.length)," lagi (",U.length-se.length," tersisa)"]})})]}),ye]})}function Ut({row:e,stats:t,picked:r,focused:n,onToggle:d,onDelete:p,onFocusWorktree:y}){const{wt:b,br:v}=e,f=e.kind==="worktree",l=!!(b!=null&&b.orphan),N=(t==null?void 0:t.dirtyFiles)??0;return a.jsxs("div",{className:"hn-dense-row","data-testid":f?`row-${e.name}`:`branch-row-${e.name}`,style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"8px 14px",borderBottom:"1px solid var(--border-hair)",background:n?"var(--surface-sunken)":void 0},children:[a.jsx(aa,{"data-testid":`pick-${e.name}`,"aria-label":`Pilih ${e.name}`,checked:r,disabled:!e.deletable,onChange:d}),a.jsx("span",{className:"hn-grow",style:{fontFamily:"var(--font-mono)",fontSize:12.5,color:"var(--text-strong)",flex:1},children:e.name}),f&&b&&a.jsxs(a.Fragment,{children:[l?a.jsx(Me,{size:"sm",tone:"warn",children:"sesi terputus"}):b.session?a.jsx(Me,{size:"sm",tone:"warn",children:"sesi aktif"}):N>0?a.jsxs(Me,{size:"sm",tone:"warn",children:[N," kotor"]}):b.branch?null:a.jsx(Me,{size:"sm",tone:"brass",children:"detached"}),b.spec&&a.jsxs(Me,{size:"sm",tone:"brass",children:[b.spec.id," · ",b.spec.stage]})]}),!f&&v&&a.jsx(Me,{size:"sm",tone:v.merged?"ok":"warn",children:v.merged?"ter-merge":"belum ter-merge"}),a.jsxs("span",{className:"hn-ide-cabang-meta",children:[f&&b&&(b.branch?a.jsx("span",{className:"hn-ide-cabang-branch",children:b.branch}):a.jsx("span",{className:"hn-ide-cabang-sha",children:b.head.slice(0,7)||"—"})),f&&(b==null?void 0:b.prunable)&&a.jsx("span",{children:"prunable"}),f&&(b==null?void 0:b.locked)&&a.jsx("span",{children:"terkunci git"}),f&&(b==null?void 0:b.blocked)&&a.jsx("span",{children:b.blocked}),!f&&v&&a.jsx("span",{children:Bt(v)}),!f&&(v==null?void 0:v.locks.map(o=>o==="worktree"&&v.worktree?a.jsxs("button",{type:"button","data-testid":`goto-worktree-${e.name}`,className:"hn-ide-cabang-link",onClick:()=>y(v.worktree),children:[an[o]," →"]},o):a.jsx("span",{children:an[o]},o)))]}),f?a.jsxs("span",{className:"hn-ide-cabang-when",style:{minWidth:130,marginLeft:"auto",textAlign:"right"},children:[t?It(t.sizeBytes):"…"," · ",dn(b==null?void 0:b.createdAt)]}):a.jsx("span",{className:"hn-ide-cabang-when",style:{minWidth:200,marginLeft:"auto",textAlign:"right"},children:v!=null&&v.lastCommit?`${v.lastCommit.subject} · ${dn(v.lastCommit.at)}`:"—"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"trash-2","data-testid":`row-delete-${e.name}`,disabled:!e.deletable,onClick:p,children:"Hapus"})]})}const Ft=e=>new Promise(t=>{if(!e.file)return t(null);e.file(r=>t(r),()=>t(null))}),Ht=e=>new Promise(t=>{var p;const r=(p=e.createReader)==null?void 0:p.call(e);if(!r)return t([]);const n=[],d=()=>r.readEntries(y=>{if(!y.length)return t(n);n.push(...y),d()},()=>t(n));d()});async function Mn(e,t,r){const n=t?`${t}/${e.name}`:e.name;if(e.isFile){const d=await Ft(e);d&&r.push({path:n,file:d});return}if(e.isDirectory)for(const d of await Ht(e))await Mn(d,n,r)}async function Gt(e){const r=(e.items?Array.from(e.items):[]).map(d=>{var p;return(p=d.webkitGetAsEntry)==null?void 0:p.call(d)}).filter(d=>!!d);if(!r.length)return Array.from(e.files??[]).map(d=>({path:d.name,file:d}));const n=[];for(const d of r)await Mn(d,"",n);return n}for(const[e,t]of Object.entries({typescript:qn,javascript:at,json:nt,markdown:tt,css:ht,xml:mt,bash:gt,python:bt,yaml:pt,sql:ft,diff:kt}))Ga.registerLanguage(e,t);const Kt=["perubahan","riwayat","cabang","berkas"],Wt=new Map([["explorer","berkas"],["graph","riwayat"],["branches","cabang"],["worktrees","cabang"]]);function un(e){return Kt.includes(e)?e:Wt.get(e)??"perubahan"}const Va=220,Ya=560,Zt=300,Vt=e=>typeof e=="number"&&Number.isFinite(e),hn=e=>Math.min(Ya,Math.max(Va,Math.round(e))),jn={A:"ok",D:"err",M:"brass"},da=e=>e.split("/").pop()??e,Yt=e=>e.includes("/")?e.slice(0,e.lastIndexOf("/")):"",ua=(e,t,r)=>e===t||e.startsWith(t+"/")?r+e.slice(t.length):e,qt=e=>{const t=e.slice(e.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"}[t]??""};function Xt({msg:e,onForce:t,onCancel:r}){return a.jsxs(ga,{open:!0,title:"Operasi ditolak",onClose:r,width:460,footer:a.jsxs(a.Fragment,{children:[a.jsx(B,{size:"sm",variant:"ghost",onClick:r,children:"Batal"}),a.jsx(B,{size:"sm",leftIcon:"alert-triangle",onClick:t,children:"Paksa"})]}),children:[a.jsx("pre",{className:"hn-ide-pre-msg",children:e}),a.jsx("div",{className:"hn-ide-warn-line",children:"Paksa bisa membuang perubahan tak ter-commit & mengganggu sesi Claude yang jalan."})]})}function Qt({projectId:e,onClose:t}){const[r,n]=m.useState([]),[d,p]=m.useState(""),[y,b]=m.useState(""),[v,f]=m.useState(""),l=m.useCallback(()=>{$.ideRemotes(e).then(N=>{n(N),f("")}).catch(N=>{n([]),f(Re("memuat remote",N))})},[e]);return m.useEffect(()=>{l()},[l]),a.jsxs(ga,{open:!0,title:"Remote",onClose:t,width:560,children:[v&&a.jsx("div",{role:"alert",className:"hn-ide-warn-line",children:v}),r.length===0&&!v&&a.jsx("div",{className:"hn-ide-muted-line",children:"Belum ada remote."}),r.map(N=>a.jsxs("div",{className:"hn-dense-row hn-ide-remote-row",children:[a.jsx("span",{className:"hn-ide-remote-name",children:N.name}),a.jsx("span",{className:"hn-grow hn-ide-remote-url",children:N.fetch}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"trash-2","aria-label":`Hapus remote ${N.name}`,onClick:()=>$.ideDeleteRemote(e,N.name).then(o=>{n(o),f("")}).catch(o=>f(Re(`menghapus remote ${N.name}`,o)))})]},N.name)),a.jsxs("div",{className:"hn-stack-mobile hn-ide-remote-add",children:[a.jsx(ba,{size:"sm",value:d,"aria-label":"Nama remote",onChange:N=>p(N.target.value),placeholder:"origin",className:"hn-ide-input-100"}),a.jsx(ba,{size:"sm",value:y,"aria-label":"URL remote",onChange:N=>b(N.target.value),placeholder:"https://github.com/org/repo.git",className:"hn-grow"}),a.jsx(B,{size:"sm",leftIcon:"plus",disabled:!d||!y,onClick:()=>$.ideAddRemote(e,d,y).then(N=>{n(N),p(""),b(""),f("")}).catch(N=>f(Re("menambah remote",N))),children:"Tambah"})]})]})}function mn({label:e,changed:t,selected:r,onSelect:n,view:d,onView:p,emptyText:y}){const b=m.useMemo(()=>$a(t.map(f=>f.path)),[t]),v=m.useMemo(()=>Object.fromEntries(t.map(f=>[f.path,f])),[t]);return a.jsxs("section",{"aria-label":e,children:[a.jsxs("div",{className:"hn-ide-section-head",children:[a.jsxs("span",{className:"hn-eyebrow",children:[e," · ",t.length]}),t.length>0&&["list","tree"].map(f=>a.jsx("button",{type:"button",className:"hn-ide-view-toggle","aria-label":`${f==="list"?"List":"Tree"} ${e}`,"aria-pressed":d===f,onClick:()=>p(f),children:a.jsx(We,{name:f==="list"?"list":"folder-tree",size:14,color:d===f?"var(--brass-700)":"var(--text-subtle)"})},f))]}),t.length===0?a.jsx("div",{className:"hn-ide-empty-line",children:y}):d==="tree"?a.jsx(Xa,{label:`Pohon ${e}`,nodes:b,children:b.map(f=>a.jsx(Qa,{node:f,selected:r,onSelect:n,meta:v,defaultOpen:!0},f.path))}):a.jsx(Kn,{label:`Berkas ${e}`,children:t.map(f=>a.jsxs(Wn,{selected:f.path===r,onClick:()=>n(f.path),children:[a.jsx(Me,{size:"sm",tone:jn[f.status]??"brass",children:f.status}),a.jsx("span",{className:"hn-ide-change-path",children:f.path}),!f.binary&&a.jsxs("span",{className:"hn-ide-change-count",children:["+",f.add," −",f.del]})]},f.path))})]})}function rs({projects:e,projectId:t,onProject:r,onToast:n,onGotoTerminal:d}){var Ja;const p=Hn("ide",t),[y,b]=Ie(p,"tab","perubahan",Ha),v=un(y),f=s=>b(s),[l,N]=Ie(p,"viewRef","",Ha),[o,h]=m.useState({branches:[],remotes:[]}),[g,c]=m.useState([]),[u,A]=m.useState([]),[E,w]=m.useState(new Set),[C,j]=Ie(p,"hidden",!1,Gn),[O,le]=m.useState("loading"),[Z,W]=Ie(p,"selected","",Ha),[ue,L]=Ie(p,"selKind","file",_a("file","staged","unstaged")),[I,te]=m.useState(null),[ge,pe]=m.useState("view"),[ye,ce]=m.useState(""),[D,G]=Ie(p,"mdView","preview",_a("preview","source")),[q,P]=m.useState(null),[U,se]=m.useState(null),[fe,Ye]=Ie(p,"stagedView","list",_a("list","tree")),[qe,ke]=Ie(p,"changedView","list",_a("list","tree")),[X,we]=m.useState(null),[xe,na]=Ie(p,"diffTab","diff",_a("diff","source")),[Be,ta]=m.useState(!1),[F,Ee]=m.useState(!1),[He,x]=m.useState("files"),[z,T]=m.useState("daftar"),[V,de]=Ie(p,"treeW",Zt,Vt),Xe=gn(),[ie,Ce]=m.useState(""),[oe,je]=m.useState(null),[_e,$e]=m.useState(null),[re,ae]=m.useState(null),[Te,Ge]=m.useState(null),{confirm:R,dialog:J}=qa(),[Y,ne]=m.useState(""),[Sa,pa]=m.useState(0),[Ca,Qe]=m.useState(!1),fa=m.useRef(null),sa=m.useRef(null),Ke=typeof HTMLInputElement<"u"&&"webkitdirectory"in HTMLInputElement.prototype,ia=m.useRef(null),De=m.useCallback(()=>{le("loading"),$.ideTree(t,l,{hidden:C}).then(s=>{c(s.files),A(s.dirs??[]),w(new Set(s.ignored??[])),le("ready")}).catch(()=>le("error"))},[t,l,C]),ka=m.useCallback(async s=>{try{const _=await $.ideTree(t,"",{under:s});c(M=>[...new Set([...M,..._.files])].sort()),A(M=>[...new Set([...M,..._.dirs??[]])].sort()),w(M=>new Set([...M,..._.files,..._.dirs??[]]))}catch{n==null||n("Gagal membuka folder","err","x-circle")}},[t,n]),Pe=m.useCallback(()=>{$.ideWorkingStatus(t).then(se).catch(()=>se(null))},[t]);m.useEffect(()=>{De()},[De]),m.useEffect(()=>{Pe()},[Pe]),m.useEffect(()=>{$.listBranches(t).then(h).catch(s=>n==null?void 0:n(Re("memuat daftar branch",s),"err","x-circle"))},[t]),m.useEffect(()=>{if(ne(""),!Z){te(null),we(null);return}let s=!0;return Ee(!1),ue==="file"?(we(null),$.ideFile(t,Z,l).then(_=>{s&&(te(_),pe("view"),G("preview"))}).catch(_=>{s&&(te(null),ne(Re("membuka berkas",_)))})):(te(null),na("diff"),$.ideFileDiff(t,Z,ue==="staged").then(_=>{s&&we(_)}).catch(_=>{s&&(we(null),ne(Re("memuat diff",_)))})),()=>{s=!1}},[Z,ue,t,l,Sa]),m.useEffect(()=>{Ee(!1)},[v]);const xa=ge==="edit"&&!!I&&ye!==(I.content??"");function be(s){if(!xa){pe("view"),s();return}R({title:"Buang perubahan?",eyebrow:Z||void 0,message:"Isi berkas yang kamu ubah di editor belum disimpan.",impact:["Perubahan di editor hilang dan tak bisa dikembalikan dari hanoman."],confirmLabel:"Buang perubahan",cancelLabel:"Lanjut mengedit",tone:"danger",icon:"trash-2"}).then(_=>{_&&(pe("view"),s())})}const ra=s=>be(()=>{L("staged"),W(s),T("diff")}),va=s=>be(()=>{L("unstaged"),W(s),T("diff")}),Aa=s=>be(()=>{ae({path:s,kind:"file"}),L("file"),W(s),x("viewer")}),ve=s=>{Ce(s),ae({path:s,kind:"dir"})},Ra=[{value:"",label:"Belum di-commit"},...o.branches.map(s=>({value:s,label:s})),...o.remotes.map(s=>({value:`origin/${s}`,label:`origin/${s}`}))];async function la(s){try{const _=await $.ideGit(t,s);return N(""),De(),Pe(),_}catch(_){throw _ instanceof ea&&_.status===409&&P({op:s,msg:_.message}),_}}const Ma=(s,_)=>{_ instanceof ea&&_.status===409||n==null||n(Re(s,_),"err","x-circle")};async function Ia(){l&&await la({op:"checkout",ref:l}).catch(s=>Ma("checkout",s))}async function ya(s,_){try{const M=await $.ideGitMerge(t,{source:s,..._});M.status==="conflict"?(d==null||d(M.sessionId),n==null||n("konflik merge — selesaikan di Terminal","warn","git-merge")):(N(""),De(),Pe(),n==null||n(`merge berhasil · ${M.detail}`,"ok","git-merge"))}catch(M){const H=M instanceof ea?M.status:0;throw n==null||n("gagal merge"+(H===409?" · cek branch/target":""),"err","x-circle"),M}}async function wa(s,_){try{const M=s==="rebase"?await $.ideGitRebase(t,_):s==="pull"?await $.ideGitPull(t,{source:_}):await $.ideGitDrop(t,_);M.status==="conflict"?(d==null||d(M.sessionId),n==null||n(`konflik ${s} — selesaikan di Terminal`,"warn","git-merge")):(N(""),De(),n==null||n(`${s} berhasil · ${M.detail}`,"ok","git-branch"))}catch(M){const H=M instanceof ea?M.status:0;throw n==null||n(`gagal ${s}`+(H===409?" · cek working tree/branch":""),"err","x-circle"),M}}async function Ba(){if(!q)return;const s={...q.op,force:!0};P(null),await $.ideGit(t,s).then(()=>{N(""),De(),Pe()}).catch(_=>n==null?void 0:n(Re("menjalankan operasi paksa",_),"err","x-circle"))}function ze(){!I||I.binary||l||(ce(I.content??""),pe("edit"))}async function oa(){if(!(!Z||l))try{await $.putIdeFile(t,Z,ye),te(s=>s&&{...s,content:ye}),pe("view"),Pe()}catch(s){n==null||n(Re("menyimpan berkas",s),"err","x-circle")}}const Pa=()=>be(()=>{}),Ea=s=>ie?`${ie}/${s}`:s,Ne=()=>{De(),Pe()};function Ue(s,_){Ce(_),je({mode:s,value:""})}async function ca(s,_){if(!_.trim())return;const M=Ea(_.trim());try{await $.ideCreateEntry(t,M,s),Ne(),n==null||n(`${s==="dir"?"folder":"berkas"} dibuat · ${M}`,"ok","file-plus")}catch(H){const Oe=H instanceof ea?H.status:0;n==null||n(Oe===409?`sudah ada · ${M}`:`gagal membuat ${M}`,"err","x-circle")}}async function Je(s,_=!1){if(!s.length)return;let M;try{M=await $.ideUpload(t,ie,s,_)}catch{n==null||n("gagal mengunggah","err","x-circle");return}Ne();const H=new Set(M.skipped.filter(Fe=>Fe.reason==="exists").map(Fe=>Fe.path)),Oe=M.skipped.filter(Fe=>Fe.reason!=="exists");M.written.length&&(n==null||n(`${M.written.length} berkas terunggah`,"ok","upload")),Oe.length&&(n==null||n(`${Oe.length} berkas dilewati · ${Oe[0].reason}`,"warn","alert-triangle")),$e(H.size?{files:s.filter(Fe=>H.has(Ea(Fe.path)))}:null)}async function ja(s){const _=re;if(!_||!s.trim())return;const M=_.path,H=s.trim();try{await $.ideRenameEntry(t,M,H),Ne(),ae({path:H,kind:_.kind}),ue==="file"&&ua(Z,M,H)!==Z&&W(ua(Z,M,H)),ie&&ua(ie,M,H)!==ie&&Ce(ua(ie,M,H)),n==null||n(`diganti nama · ${H}`,"ok","pencil")}catch(Oe){const Fe=Oe instanceof ea?Oe.status:0;n==null||n(Fe===409?"nama tujuan sudah dipakai":Re(`mengganti nama ${da(M)}`,Oe),"err","x-circle")}}function i(s=re){const _=s;if(!_)return;const M=_.kind==="dir";ae(_),R({title:M?"Hapus folder beserta isinya?":"Hapus berkas?",eyebrow:_.path,impact:M?[`Folder ${da(_.path)}/ dan seluruh isinya dihapus dari working tree.`,"Yang belum di-commit tak bisa dikembalikan dari hanoman."]:[`Berkas ${da(_.path)} dihapus dari working tree.`,"Yang belum di-commit tak bisa dikembalikan dari hanoman."],confirmLabel:"Hapus",tone:"danger",icon:"trash-2",requireText:M?da(_.path):void 0,run:()=>k(_)})}async function k(s){try{await $.ideDeleteEntry(t,s.path),Ne(),ae(null),ue==="file"&&ua(Z,s.path,"")!==Z&&(W(""),te(null),pe("view")),ie&&ua(ie,s.path,"")!==ie&&Ce(""),n==null||n(`dihapus · ${s.path}`,"ok","trash-2")}catch(_){n==null||n(Re(`menghapus ${da(s.path)}`,_),"err","x-circle")}}const S=(s,_,M,H)=>{const Oe=M.getBoundingClientRect();Ge({x:(H==null?void 0:H.x)??Oe.left,y:(H==null?void 0:H.y)??Oe.bottom,anchor:M,path:s,kind:_})};function he(s){const _=s.kind==="dir"?s.path:Yt(s.path),M=_?`${_}/`:"root",H=[{label:`Berkas baru di ${M}`,run:()=>Ue("file",_)}];return s.kind==="dir"&&H.push({label:`Folder baru di ${M}`,run:()=>Ue("dir",_)}),H.push({label:"Ganti nama…",run:()=>{ae(s),je({mode:"rename",value:s.path})}}),H.push({label:s.kind==="dir"?"Hapus folder…":"Hapus berkas…",run:()=>i(s)}),H}const Le=s=>{const M=Array.from((s==null?void 0:s.files)??[]).map(H=>({path:H.webkitRelativePath||H.name,file:H}));return s&&(s.value=""),M},Se=m.useMemo(()=>$a(g,u),[g,u]),za=m.useMemo(()=>{if(!I||I.content===null)return"";const s=qt(Z);try{return s?Ga.highlight(I.content,{language:s}).value:Ga.highlightAuto(I.content).value}catch{return I.content}},[I,Z]),me=ue==="file"?Z:"",Ae=ue!=="file"?Z:"",K=Ae&&X&&!X.binary&&X.content!==null&&ma(Ae)?{text:X.content,download:s=>$.ideFileDiffDownloadUrl(t,Ae,ue==="staged",s)}:null,Q=me&&I&&!I.binary&&I.content!==null&&ma(me)?{text:I.content,download:s=>$.ideFileDownloadUrl(t,me,l,s)}:null,Ua=v==="perubahan"?K:v==="berkas"?Q:null,Tn=v==="perubahan"?Ae:me,On=((U==null?void 0:U.staged.length)??0)+((U==null?void 0:U.unstaged.length)??0),$n=a.jsxs("div",{className:"hn-ide-toolbar",children:[a.jsx(Na,{size:"sm",className:"hn-ide-proyek","aria-label":"Proyek",title:(Ja=e.find(s=>s.id===t))==null?void 0:Ja.name,value:t,onChange:s=>r(s.target.value),options:e.map(s=>({value:s.id,label:s.name}))}),a.jsx(Na,{size:"sm",className:"hn-ide-ref","aria-label":"Ref yang dilihat",value:l,title:"Belum di-commit: berkas di disk, termasuk perubahan yang belum di-commit. Pilih branch untuk melihat isinya di sana.",onChange:s=>{const _=s.target.value;be(()=>N(_))},options:Ra}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"download-cloud",onClick:()=>{la({op:"fetch",prune:!0}).then(()=>$.listBranches(t).then(h)).catch(s=>Ma("fetch",s))},children:"Fetch"}),a.jsx(B,{size:"sm",variant:C?"secondary":"ghost",leftIcon:C?"eye":"eye-off",disabled:!!l,"aria-pressed":C,title:l?"Hanya untuk kondisi belum di-commit":"Tampilkan berkas & folder yang diabaikan .gitignore",onClick:()=>j(!C),children:"Diabaikan git"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:Ne,children:"Muat ulang"}),a.jsx(nn,{label:"Aksi lain IDE",items:[{key:"checkout",label:l?`Checkout ${l}`:"Checkout",icon:"git-branch",disabled:!l,onSelect:()=>void Ia()},{key:"remotes",label:"Kelola remote",icon:"git-branch",onSelect:()=>ta(!0)}]})]}),Ln=a.jsx(tn,{ariaLabel:"Panel perubahan",active:z,onActiveChange:s=>T(s),masterWidth:320,panels:[{id:"daftar",label:"Daftar",className:"hn-panel-flex",content:a.jsxs(Ze,{padding:0,fill:!0,children:[a.jsxs("div",{className:"hn-ide-changes-bar",children:[a.jsx(Fn,{size:12,tone:"muted",as:"span",className:"hn-ide-changes-legend",children:"M diubah · A ditambah · D dihapus"}),a.jsx(B,{size:"sm",variant:"primary",leftIcon:"git-commit",disabled:!d,onClick:()=>d==null?void 0:d(),children:"Commit dari Terminal"})]}),a.jsx("p",{className:"hn-ide-changes-hint",children:"Commit dibuat dari sesi Terminal, supaya pesan commit dan hook git berjalan seperti biasa."}),a.jsxs("div",{"data-testid":"ide-changes-scroll",className:"hn-ide-scroll",children:[a.jsx(mn,{label:"Staged",changed:(U==null?void 0:U.staged)??[],selected:Ae,onSelect:ra,view:fe,onView:Ye,emptyText:"Tak ada file staged."}),a.jsx("div",{className:"hn-ide-section-gap"}),a.jsx(mn,{label:"Changed",changed:(U==null?void 0:U.unstaged)??[],selected:Ae,onSelect:va,view:qe,onView:ke,emptyText:"Tak ada file berubah."})]})]})},{id:"diff",label:"Diff",className:"hn-panel-flex",content:a.jsxs(Ze,{padding:0,fill:!0,children:[a.jsxs("div",{className:"hn-ide-viewer-bar",children:[a.jsx(We,{name:"file-text",size:15,color:"var(--text-muted)"}),a.jsx("span",{className:"hn-ide-viewer-path",children:Ae||"—"}),(X==null?void 0:X.status)&&a.jsx(Me,{tone:jn[X.status]??"brass",size:"sm",children:X.status}),a.jsx("span",{className:"hn-grow"}),K&&a.jsx(B,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>Ee(!0),children:"Preview lebar"}),a.jsx("div",{className:"hn-ide-seg",children:["diff","source"].map(s=>a.jsx("button",{type:"button",className:"hn-touch-target","aria-pressed":xe===s,onClick:()=>na(s),children:s},s))})]}),a.jsx("div",{"data-testid":"doc-preview-scroll",className:"hn-ide-scroll-body",children:Ae?X===null?Y?a.jsx(ee,{kind:"error",title:"Diff belum bisa dibuka",hint:Y,action:()=>pa(s=>s+1)}):a.jsx(ee,{kind:"loading",title:"Memuat…",hint:Ae}):X.binary?a.jsx(ee,{kind:"empty",icon:"file",title:"Berkas biner",hint:Ae}):xe==="diff"?a.jsxs("div",{className:"hn-ide-diff-pad",children:[a.jsx(fn,{diff:X.diff??""}),X.truncated&&a.jsx("div",{className:"hn-ide-truncated",children:"… dipotong pada 256 KB."})]}):X.content===null?a.jsx(ee,{kind:"empty",icon:"trash-2",title:"File dihapus",hint:"Tak ada isi untuk ditampilkan."}):a.jsx("pre",{className:"hn-ide-source-pre",children:X.content}):a.jsx(ee,{kind:"empty",icon:"file-text",title:"Pilih file dari daftar Perubahan"})})]})}]}),Dn=[{label:"Folder baru",run:()=>Ue("dir",ie)},...Ke?[{label:"Unggah folder",run:()=>{var s;return(s=sa.current)==null?void 0:s.click()}}]:[]],In=a.jsx(tn,{ariaLabel:"Panel IDE",active:He,onActiveChange:s=>x(s),masterWidth:V,panels:[{id:"files",label:"Berkas",className:"hn-panel-flex",content:a.jsxs("div",{className:"hn-ide-files-pane",children:[a.jsxs(Ze,{padding:0,fill:!0,children:[a.jsxs("div",{className:"hn-ide-files-bar",children:[a.jsxs("span",{className:"hn-eyebrow hn-ide-files-eyebrow",children:["berkas · ",l||"working tree"]}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"file-plus",onClick:()=>Ue("file",ie),children:"Berkas baru"}),a.jsx(B,{size:"sm",variant:"ghost",leftIcon:"upload",onClick:()=>{var s;return(s=fa.current)==null?void 0:s.click()},children:"Unggah"}),a.jsx(nn,{label:"Aksi lain berkas",items:Dn.map((s,_)=>({key:`more-${_}`,label:s.label,onSelect:s.run}))}),a.jsxs("span",{"data-testid":"ide-entry-dest",className:"hn-ide-dest",children:["→ ",ie||"root"]}),a.jsx("input",{ref:fa,type:"file",multiple:!0,hidden:!0,onChange:()=>void Je(Le(fa.current))}),a.jsx("input",{ref:sa,type:"file",hidden:!0,webkitdirectory:"",onChange:()=>void Je(Le(sa.current))})]}),a.jsx("div",{"data-testid":"ide-tree-scroll",onDragOver:s=>{s.preventDefault(),Qe(!0)},onDragLeave:()=>Qe(!1),onDrop:s=>{s.preventDefault(),Qe(!1),Gt(s.dataTransfer).then(_=>Je(_))},className:Ca?"hn-ide-tree-scroll hn-ide-drop":"hn-ide-tree-scroll",children:O==="loading"?a.jsx(ee,{kind:"loading",compact:!0,title:"Memuat file…"}):O==="error"?a.jsx(ee,{kind:"error",compact:!0,title:"Gagal memuat file",action:()=>De()}):g.length===0?a.jsx(ee,{kind:"empty",compact:!0,icon:"folder-open",title:"Tak ada file"}):a.jsx(Xa,{label:"Pohon berkas",nodes:Se,children:Se.map(s=>a.jsx(Qa,{node:s,selected:me,onSelect:Aa,dirSelected:ie,onSelectDir:ve,ignored:E,onExpand:C?ka:void 0,menu:S},s.path))})})]}),Xe!=="mobile"&&a.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":"Lebar panel berkas",tabIndex:0,"aria-valuemin":Va,"aria-valuemax":Ya,"aria-valuenow":V,className:"hn-ide-split",onKeyDown:s=>{const _=s.shiftKey?48:16,M=s.key==="ArrowLeft"?V-_:s.key==="ArrowRight"?V+_:s.key==="Home"?Va:s.key==="End"?Ya:null;M!==null&&(s.preventDefault(),de(hn(M)))},onPointerDown:s=>{var _,M;ia.current={x:s.clientX,w:V},(M=(_=s.currentTarget).setPointerCapture)==null||M.call(_,s.pointerId)},onPointerMove:s=>{const _=ia.current;_&&de(hn(_.w+(s.clientX-_.x)))},onPointerUp:()=>{ia.current=null},onPointerCancel:()=>{ia.current=null}})]})},{id:"viewer",label:"Isi",className:"hn-panel-flex",content:a.jsxs(Ze,{padding:0,fill:!0,children:[a.jsxs("div",{className:"hn-ide-viewer-bar",children:[a.jsx(We,{name:"file-text",size:15,color:"var(--text-muted)"}),a.jsx("span",{className:"hn-ide-viewer-path",children:me||"—"}),(I==null?void 0:I.truncated)&&a.jsx(Me,{tone:"warn",size:"sm",children:"terpotong"}),a.jsx("span",{className:"hn-grow"}),ge==="view"?a.jsxs("div",{className:"hn-ide-viewer-actions",children:[I&&!I.binary&&ma(me)&&a.jsx("div",{className:"hn-ide-seg",children:["preview","source"].map(s=>a.jsx("button",{type:"button",className:"hn-touch-target","aria-pressed":D===s,onClick:()=>G(s),children:s==="preview"?"Preview":"Source"},s))}),Q&&a.jsx(B,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>Ee(!0),children:"Preview lebar"}),a.jsx(pn,{href:s=>$.ideFileDownloadUrl(t,me,l,s),disabled:!I||I.binary}),a.jsx(B,{size:"sm",variant:"secondary",leftIcon:"pencil",onClick:ze,disabled:!I||I.binary||!!l,title:l?"Edit hanya di working tree — pilih working tree dulu":void 0,children:"Edit"})]}):a.jsxs("div",{className:"hn-ide-viewer-actions",children:[xa&&a.jsx(Me,{tone:"warn",size:"sm",children:"belum disimpan"}),a.jsx(B,{size:"sm",variant:"ghost",onClick:Pa,children:"Batal"}),a.jsx(B,{size:"sm",leftIcon:"check",onClick:()=>void oa(),children:"Simpan"})]})]}),a.jsx("div",{"data-testid":"doc-preview-scroll",className:"hn-ide-scroll-body",children:me?I===null?Y?a.jsx(ee,{kind:"error",title:"Berkas belum bisa dibuka",hint:Y,action:()=>pa(s=>s+1)}):a.jsx(ee,{kind:"loading",title:"Memuat…",hint:me}):I.binary?a.jsx(ee,{kind:"empty",icon:"file",title:"File biner",hint:me}):ge==="edit"?a.jsx("textarea",{"aria-label":`Isi ${da(me)}`,value:ye,spellCheck:!1,onChange:s=>ce(s.target.value),onKeyDown:s=>{(s.metaKey||s.ctrlKey)&&s.key.toLowerCase()==="s"&&(s.preventDefault(),oa())},className:"hn-ide-editor"}):ma(me)&&D==="preview"?a.jsx("div",{className:"hn-ide-md-pad",children:a.jsx(kn,{text:I.content??"",name:me})}):a.jsx("pre",{className:"hn-ide-code-pre",children:a.jsx("code",{className:"hljs hn-ide-code",dangerouslySetInnerHTML:{__html:za}})}):a.jsx(ee,{kind:"empty",icon:"file-text",title:"Pilih file dari pohon di kiri"})})]})}]});return a.jsxs("div",{className:v==="perubahan"||v==="berkas"?"hn-ide-screen hn-ide-screen--fill":"hn-ide-screen",children:[a.jsxs("div",{className:"hn-ide-head",children:[a.jsx(bn,{"aria-label":"Bagian IDE",tabs:[{value:"perubahan",label:"Perubahan",count:On||void 0},{value:"riwayat",label:"Riwayat"},{value:"cabang",label:"Cabang"},{value:"berkas",label:"Berkas"}],value:v,onChange:s=>f(un(s))}),$n]}),v==="perubahan"?Ln:v==="riwayat"?a.jsx(Lt,{projectId:t,onRunGit:la,onMerge:ya,onRebase:s=>wa("rebase",s),onPull:s=>wa("pull",s),onDrop:s=>wa("drop",s),onToast:n,onOpenFile:(s,_)=>be(()=>{N(_),L("file"),W(s),x("viewer"),f("berkas")}),onOpenCabang:()=>f("cabang")}):v==="cabang"?a.jsx(zt,{projectId:t}):In,Ua&&F&&a.jsx(Zn,{path:Tn,text:Ua.text,eyebrow:l||(U==null?void 0:U.branch)||t,download:Ua.download,onClose:()=>Ee(!1)}),oe&&a.jsx(ga,{open:!0,title:oe.mode==="dir"?"Folder baru":oe.mode==="file"?"Berkas baru":"Ganti nama",eyebrow:oe.mode==="rename"?`Dari ${(re==null?void 0:re.path)??""}`:`→ ${ie||"root"}`,onClose:()=>je(null),width:460,footer:a.jsxs(a.Fragment,{children:[a.jsx(B,{size:"sm",variant:"ghost",onClick:()=>je(null),children:"Batal"}),a.jsx(B,{size:"sm",leftIcon:"check",disabled:!oe.value.trim(),onClick:()=>{const s=oe;je(null),s.mode==="rename"?ja(s.value):ca(s.mode,s.value)},children:"Simpan"})]}),children:a.jsx(ba,{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:s=>je({...oe,value:s.target.value}),className:"hn-ide-input-full"})}),_e&&a.jsxs(ga,{open:!0,title:`${_e.files.length} berkas sudah ada`,onClose:()=>$e(null),width:520,footer:a.jsxs(a.Fragment,{children:[a.jsx(B,{size:"sm",variant:"ghost",onClick:()=>$e(null),children:"Biarkan"}),a.jsx(B,{size:"sm",leftIcon:"alert-triangle",onClick:()=>{const s=_e.files;$e(null),Je(s,!0)},children:"Timpa semua"})]}),children:[a.jsx("div",{className:"hn-ide-muted-line",children:"Berkas berikut dilewati supaya perubahan yang belum di-commit tak hilang."}),a.jsx("pre",{className:"hn-ide-conflict-list",children:_e.files.map(s=>Ea(s.path)).join(`
2
+ `)})]}),Te&&a.jsx(ha,{x:Te.x,y:Te.y,returnFocus:Te.anchor,onClose:()=>Ge(null),items:he({path:Te.path,kind:Te.kind})}),J,q&&a.jsx(Xt,{msg:q.msg,onForce:Ba,onCancel:()=>P(null)}),Be&&a.jsx(Qt,{projectId:t,onClose:()=>ta(!1)})]})}export{rs as IdeScreen};
@@ -0,0 +1 @@
1
+ .hn-lead{display:flex;flex-direction:column;gap:var(--space-4);min-height:0}.hn-lead-summary{margin:0;font-size:var(--text-md);color:var(--text-strong);font-weight:500}.hn-lead-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-5);align-items:start}@media (min-width: 1200px){.hn-lead-layout{grid-template-columns:minmax(0,1fr) minmax(300px,380px)}}.hn-lead-main,.hn-lead-side{display:flex;flex-direction:column;gap:var(--space-5);min-width:0}.hn-lead-section{display:flex;flex-direction:column;gap:var(--space-3);min-width:0}.hn-lead-h{margin:0;font-size:var(--text-md);font-weight:600;color:var(--text-strong)}.hn-lead-hint{margin:0;font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-waits{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.hn-lead-wait{display:flex;flex-direction:column;gap:var(--space-2);padding:var(--space-3);border:1px solid var(--border-hair);border-radius:var(--radius-lg);background:var(--surface-card)}.hn-lead-wait-head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.hn-lead-wait-title{flex:1 1 auto;min-width:0;font-size:var(--text-sm);font-weight:600;color:var(--text-strong);overflow-wrap:anywhere}.hn-lead-wait-question{margin:0;font-size:var(--text-sm);color:var(--text-body);white-space:pre-wrap}.hn-lead-options{display:flex;flex-wrap:wrap;gap:var(--space-2)}.hn-lead-options-multi{display:flex;flex-direction:column;gap:var(--space-1)}.hn-lead-wait-foot{display:flex;align-items:center;justify-content:flex-end;flex-wrap:wrap;gap:var(--space-2)}.hn-lead-note{margin:0;font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-chips{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}.hn-lead-chip{min-height:36px;padding:var(--space-1) var(--space-3);border:1px solid var(--border-hair);border-radius:var(--radius-pill);background:var(--surface-card);color:var(--text-muted);font:inherit;font-size:var(--text-xs);cursor:pointer}.hn-lead-chip:hover{background:var(--surface-sunken);color:var(--text-strong)}.hn-lead-chip[aria-pressed=true]{background:var(--brass-050);border-color:var(--brass-600);color:var(--text-strong);font-weight:600}.hn-lead-timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--space-2)}.hn-lead-item{display:flex;flex-direction:column;gap:var(--space-1);padding:var(--space-3);border:1px solid var(--border-hair);border-radius:var(--radius-md);background:var(--surface-card);min-width:0}.hn-lead-item-head{display:flex;align-items:center;gap:var(--space-2);flex-wrap:wrap}.hn-lead-item-time{margin-left:auto;font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-item-question{font-size:var(--text-sm);color:var(--text-subtle);white-space:pre-wrap}.hn-lead-item-answer{font-size:var(--text-sm);color:var(--text-strong);font-weight:500;white-space:pre-wrap}.hn-lead-item-reason{font-size:var(--text-xs);color:var(--text-subtle);white-space:pre-wrap}.hn-lead-item-meta{display:flex;flex-wrap:wrap;gap:var(--space-1) var(--space-3);font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-item-foot{display:flex;align-items:center;flex-wrap:wrap;gap:var(--space-2);justify-content:space-between}.hn-lead-refs{display:flex;flex-wrap:wrap;gap:var(--space-1)}.hn-lead-ref{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-muted);border:1px solid var(--border-hair);border-radius:var(--radius-sm);padding:1px var(--space-2)}.hn-lead-change{display:flex;flex-direction:column;gap:var(--space-2);padding-top:var(--space-2);border-top:1px dashed var(--border-hair)}.hn-lead-change-row{display:flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}.hn-lead-change-row .hn-lead-change-input{flex:1 1 200px;min-width:0}.hn-lead-footer{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-2);padding:var(--space-2) 0 0;font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-mode{display:flex;flex-direction:column;gap:var(--space-2)}.hn-lead-disclosure{border-top:1px solid var(--border-hair);padding-top:var(--space-2)}.hn-lead-disclosure>summary{min-height:44px;display:flex;align-items:center;cursor:pointer;font-size:var(--text-sm);font-weight:600;color:var(--text-strong)}.hn-lead-disclosure[open]>summary{margin-bottom:var(--space-2)}.hn-lead-project-name{flex:1 1 160px;min-width:0;font-size:var(--text-sm);font-weight:500;color:var(--text-strong)}.hn-lead-project-meta{font-size:var(--text-xs);color:var(--text-muted)}.hn-lead-settings{display:flex;flex-direction:column;gap:var(--space-3)}.hn-lead-settings-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-3)}@media (min-width: 560px){.hn-lead-settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (pointer: coarse),(max-width: 767px){.hn-lead-chip{min-height:44px}}