hanoman 0.9.20 → 0.9.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/cli.js +2822 -253
- package/dist/server.js +15501 -12231
- package/docs/agent-integration.md +199 -23
- package/package.json +1 -1
- package/prisma/migrations/20261012100000_spec_reviewed_at/migration.sql +13 -0
- package/prisma/schema.prisma +6 -0
- package/web/assets/DalangHanomanScreen--M-xLwH5.js +16 -0
- package/web/assets/DalangHanomanScreen-DhDPV6e8.css +1 -0
- package/web/assets/{DocPreviewModal-Chk-jQ51.js → DocPreviewModal-CYdmHEb_.js} +1 -1
- package/web/assets/DocsWorkspace-BFzb87Ye.js +3 -0
- package/web/assets/DocsWorkspace-CSak7xFX.css +1 -0
- package/web/assets/IdeScreen-CDMJaERU.js +2 -0
- package/web/assets/IdeScreen-CppUucs0.css +10 -0
- package/web/assets/LeadScreen-CN53yR_e.css +1 -0
- package/web/assets/LeadScreen-DJjFTkyZ.js +1 -0
- package/web/assets/ReviewScreen-DG0xSBou.js +1 -0
- package/web/assets/SchedulerScreen-ChEZ01CH.js +1 -0
- package/web/assets/SettingsScreen-BnINOj5X.js +62 -0
- package/web/assets/SettingsScreen-DQZ3K43g.css +1 -0
- package/web/assets/TeamScreen-5cFDPm3o.js +1 -0
- package/web/assets/TeamScreen-CtkpFpCF.css +1 -0
- package/web/assets/TerminalScreen-CIROrYjO.js +2 -0
- package/web/assets/TerminalScreen-D0NdFmR-.css +1 -0
- package/web/assets/TriageScreen-B6_KrS6l.css +1 -0
- package/web/assets/TriageScreen-BWnuGOmQ.js +1 -0
- package/web/assets/VpsScreen-BzXpc3le.css +1 -0
- package/web/assets/VpsScreen-PqOkFriA.js +2 -0
- package/web/assets/index-DYWU10xI.js +1012 -0
- package/web/assets/index-T4aiSGoI.css +32 -0
- package/web/assets/live-C90Zx0h6.js +1 -0
- package/web/assets/sched-lead-shared-Qn3NA7WO.js +1 -0
- package/web/assets/scheduler-CQt-VP9-.css +1 -0
- package/web/assets/settings-rebase-3Z15zUKI.js +1 -0
- package/web/index.html +10 -3
- package/web/assets/DalangHanomanScreen-DqzYitwv.js +0 -1
- package/web/assets/DocsWorkspace-DuNVIjTg.js +0 -3
- package/web/assets/IdeScreen-BZGVyFT5.js +0 -2
- package/web/assets/IdeScreen-BfC0goYb.css +0 -10
- package/web/assets/LeadScreen-35VgddUo.js +0 -1
- package/web/assets/ReviewScreen-EkG8ywTU.js +0 -1
- package/web/assets/SchedulerScreen-ClaLLB8Y.js +0 -1
- package/web/assets/SettingsScreen-liOlVCeT.js +0 -62
- package/web/assets/TeamScreen-Dzl6Ruju.js +0 -1
- package/web/assets/TerminalScreen-CK3SzzgP.js +0 -2
- package/web/assets/TriageScreen-EtBRNg-t.js +0 -1
- package/web/assets/VpsScreen-9qeTHo1w.js +0 -2
- package/web/assets/hnm-dalang-six-arms-v01-DeBacuq8.webp +0 -0
- package/web/assets/hnm-wayang-project-v01-BG9EZqzn.webp +0 -0
- package/web/assets/index-D5w059cP.js +0 -1063
- package/web/assets/index-DI8I0VA5.css +0 -32
- package/web/assets/live-Bz-jmiWI.js +0 -1
|
@@ -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-DYWU10xI.js";import{R as m}from"./react-DfGhg7ZW.js";import{H as Ga}from"./highlight-HK3IjCTX.js";import{D as Zn}from"./DocPreviewModal-CYdmHEb_.js";import{L as Vn}from"./live-C90Zx0h6.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,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 @@
|
|
|
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}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as Ee,q as X,r as Fe,h as L,i as O,K as ze,G as Me,j as e,L as Re,m as _e,x as Oe,Q as qe,w as Ke,g as ke,bb as fe,aX as Z,C as $e,R as Ge,X as Je,n as G,B as g,e as Q,f as Y,V as pe,D as Te,aI as ye,Z as te,bc as He,bd as Ue,be as We,bf as Ve,bg as Xe,bh as Qe,l as Ze,bi as Ye,a2 as ea}from"./index-DYWU10xI.js";import{R as l}from"./react-DfGhg7ZW.js";import{L as aa}from"./live-C90Zx0h6.js";import"./markdown-CWEY34jk.js";import{u as na,I as je,a as we,c as ie}from"./sched-lead-shared-Qn3NA7WO.js";import"./xterm-3VOAfa_q.js";/* empty css */const sa=5e3,K=20,be=400,ia={aktif:"aktif",jeda:"dijeda",mati:"mati"},ta=[{key:"semua",label:"Semua"},{key:"keputusan",label:"Keputusan"},{key:"rangkaian",label:"Rangkaian"}],la={berlaku:"ok",ditimpa:"warn",dibatalkan:"neutral",gagal:"err"},ra={menunggu:"warn",sebagian:"info",selesai:"ok",dibatalkan:"neutral"},da=new Set(["menunggu","sebagian"]),q=n=>({everyMin:String(n.everyMin),timeoutSec:String(n.timeoutSec),maxAutoAnswers:String(n.maxAutoAnswers),requireGreen:n.requireGreenBeforeIntegrate}),ca={everyMin:"5",timeoutSec:"600",maxAutoAnswers:"3",requireGreen:!0};function xe({total:n,page:o,onPage:i,unit:u}){const k=te(n,o,K);return e.jsx(ea,{page:k.page,pageCount:k.pageCount,total:n,from:k.from,to:k.to,onPage:i,unit:u})}function oa({page:n,pageCount:o,onPage:i}){return o<=1?null:e.jsxs("div",{className:"hn-lead-footer",children:[e.jsxs("span",{children:["Halaman ",n," dari ",o," · keputusan dan rangkaian"]}),e.jsxs("span",{className:"hn-lead-chips",children:[e.jsx(g,{size:"sm",variant:"ghost","aria-label":"Sebelumnya",disabled:n<=1,onClick:()=>i(n-1),children:"Sebelumnya"}),e.jsx(g,{size:"sm",variant:"ghost","aria-label":"Berikutnya",disabled:n>=o,onClick:()=>i(n+1),children:"Berikutnya"})]})]})}function ua({sid:n,title:o,label:i,needsYou:u,onGoto:k,onAnswered:h,onError:t}){const[N,P]=l.useState(null),[A,C]=l.useState("idle"),[D,f]=l.useState([]),[w,E]=l.useState(!1);l.useEffect(()=>{if(!u)return;let d=!0;return C("loading"),Promise.resolve().then(()=>L.sessionDialog(n)).then(b=>{d&&(P(b),C(b&&b.dialog.options.length>0?"ready":"unavailable"))},()=>{d&&C("unavailable")}),()=>{d=!1}},[n,u]);async function F(d,b){if(N){E(!0);try{await L.answerSessionDialog(n,b?{screenHash:N.screenHash,choice:d[0]}:{screenHash:N.screenHash,choices:d}),f([]),h()}catch(I){t(O("menjawab sesi",I))}finally{E(!1)}}}const v=d=>f(b=>b.includes(d)?b.filter(I=>I!==d):[...b,d]),p=N==null?void 0:N.dialog;return e.jsxs("li",{className:"hn-lead-wait",children:[e.jsxs("div",{className:"hn-lead-wait-head",children:[e.jsx("span",{className:"hn-lead-wait-title",children:o}),e.jsx(G,{tone:u?"warn":"ok",size:"sm",children:i})]}),u&&A==="loading"&&e.jsx("p",{className:"hn-lead-note",children:"Membaca pertanyaannya…"}),u&&A==="unavailable"&&e.jsx("p",{className:"hn-lead-note",children:"Pertanyaan ini belum bisa dijawab dari sini. Jawab di Terminal."}),u&&A==="ready"&&p&&e.jsxs(e.Fragment,{children:[p.title&&e.jsx("p",{className:"hn-lead-wait-question",children:p.title}),p.multi?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"hn-lead-options-multi",role:"group","aria-label":p.title||"Pilihan jawaban",children:p.options.map(d=>e.jsx(ye,{checked:D.includes(d.n),label:d.label,disabled:w,onChange:()=>v(d.n)},d.n))}),e.jsx("div",{className:"hn-lead-wait-foot",children:e.jsx(g,{size:"sm",disabled:w||D.length===0,onClick:()=>void F(D,!1),children:"Kirim pilihan"})})]}):e.jsx("div",{className:"hn-lead-options",role:"group","aria-label":p.title||"Pilihan jawaban",children:p.options.map(d=>e.jsx(g,{size:"sm",variant:"secondary",disabled:w,onClick:()=>void F([d.n],!0),children:d.label},d.n))}),(p.freeIndex!=null||p.notes)&&e.jsx("p",{className:"hn-lead-note",children:"Jawaban bebas: jawab di Terminal."})]}),e.jsx("div",{className:"hn-lead-wait-foot",children:e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"terminal",onClick:k,children:"Buka di Terminal"})})]})}function ha({label:n,options:o,multi:i,value:u,onChange:k}){return i?e.jsx("div",{role:"group","aria-label":n,className:"hn-lead-options-multi",children:o.map(h=>e.jsx(ye,{checked:u.includes(h),label:h,onChange:()=>k(u.includes(h)?u.filter(t=>t!==h):[...u,h])},h))}):e.jsx(fe,{"aria-label":n,value:u[0]??"",onChange:h=>k([h]),children:o.map(h=>e.jsx(Z,{value:h,label:h},h))})}function ma({d:n,projectName:o,onOverride:i,onCancel:u,busyId:k,ask:h}){var M;const[t,N]=l.useState(!1),[P,A]=l.useState(""),[C,D]=l.useState([]),f=(n.choices??[]).length>0?n.choices:n.choiceIndex!=null&&n.choice?[{index:n.choiceIndex,option:n.choice}]:[],w=n.options??[],E=((M=n.select)==null?void 0:M.mode)==="multi",F=[o(n.projectId),n.specId].filter(Boolean).join(" · "),v=n.action!=="none"?He[n.action]:void 0,p=n.question.length>be?`${n.question.slice(0,be)}…`:n.question,d=k===n.id,b=()=>{N(!1),A(""),D([])},I=f.length?f.map(y=>y.option).join(" · "):n.answer||"tidak ada jawaban",z=P.trim()||C.join("; "),J=async()=>{let y=!1;await h({title:"Ubah jawaban keputusan ini?",eyebrow:"lead · ubah jawaban",impact:[`Jawaban sekarang: ${I}`,`Jadi: ${z}`],confirmLabel:"Ubah jawaban",icon:"edit-3",tone:"default",run:async()=>{y=await i(n.id,z,C)}}),y&&b()};return e.jsxs("li",{className:"hn-lead-item",children:[e.jsxs("div",{className:"hn-lead-item-head",children:[e.jsx(G,{tone:la[n.status]??"neutral",size:"sm",children:Ue[n.status]??n.status}),n.weighty&&e.jsx(G,{tone:"warn",size:"sm",children:"berbobot"}),e.jsx("span",{className:"hn-lead-item-time",children:we(n.createdAt)})]}),e.jsx("div",{className:"hn-lead-item-question",children:p}),e.jsx("div",{className:"hn-lead-item-answer",children:f.length?f.map(y=>y.option).join(" · "):n.answer||e.jsx("em",{children:"tidak ada jawaban"})}),n.reason&&e.jsx("div",{className:"hn-lead-item-reason",children:n.reason}),e.jsxs("div",{className:"hn-lead-item-meta",children:[e.jsx("span",{children:We[n.kind]??n.kind}),e.jsx("span",{children:Ve[n.gate]??n.gate}),e.jsx("span",{children:Xe[n.confidence]??n.confidence}),f.length>0&&w.length>0&&e.jsx("span",{children:f.length>1?`${f.length} dari ${w.length} opsi`:`opsi ${f[0].index} dari ${w.length}`}),(n.missing??[]).length>0&&e.jsx("span",{children:"kurang konteks"}),e.jsxs("span",{children:[F,v?` · ${v}`:""]})]}),(n.missing??[]).length>0&&e.jsxs("div",{className:"hn-lead-item-reason",children:["Yang kurang: ",n.missing.join(" · ")]}),n.refs.length>0&&e.jsx("div",{className:"hn-lead-refs",children:n.refs.map(y=>e.jsx("span",{className:"hn-lead-ref",children:y},y))}),n.status==="berlaku"&&!t&&e.jsx("div",{className:"hn-lead-item-foot",children:e.jsxs("span",{className:"hn-lead-chips",children:[e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"edit-3",onClick:()=>N(!0),children:"Ubah jawaban"}),e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"x-circle",disabled:d,onClick:()=>u(n),children:"Batalkan"})]})}),t&&e.jsxs("div",{className:"hn-lead-change",children:[w.length>0&&e.jsx(ha,{label:`Pilihan jawaban${n.specId?` untuk ${n.specId}`:""}`,options:w,multi:E,value:C,onChange:D}),e.jsxs("div",{className:"hn-lead-change-row",children:[e.jsx(Y,{className:"hn-lead-change-input","aria-label":`Jawaban kamu${n.specId?` untuk ${n.specId}`:""}`,placeholder:"mis. pilih opsi 2, pakai Node 22",value:P,onChange:y=>A(y.target.value)}),e.jsx(g,{size:"sm",variant:"ghost",disabled:d,onClick:b,children:"Batal"}),e.jsx(g,{size:"sm",leftIcon:"check",disabled:!P.trim()&&C.length===0||d,onClick:()=>void J(),children:"Kirim jawaban"})]})]})]})}function ga({f:n,busyId:o,onClose:i}){return e.jsxs("li",{className:"hn-lead-item",children:[e.jsxs("div",{className:"hn-lead-item-head",children:[e.jsx(G,{tone:ra[n.status]??"neutral",size:"sm",children:Qe[n.status]??n.status}),e.jsx("span",{className:"hn-lead-item-time",children:we(n.openedAt)})]}),e.jsx("div",{className:"hn-lead-item-answer",children:n.title}),e.jsxs("div",{className:"hn-lead-item-meta",children:[e.jsxs("span",{children:[n.steps," langkah"]}),n.closeReason&&e.jsx("span",{children:Ze(Ye,n.closeReason)})]}),da.has(n.status)&&e.jsx("div",{className:"hn-lead-item-foot",children:e.jsxs("span",{className:"hn-lead-chips",children:[e.jsx(g,{size:"sm",leftIcon:"check",disabled:o===n.id,onClick:()=>i(n,"submit"),children:"Kirim rangkaian"}),e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"x-circle",disabled:o===n.id,onClick:()=>i(n,"cancel"),children:"Batalkan rangkaian"})]})})]})}function va({projects:n,onProjectChanged:o,onToast:i,onGotoTerminal:u}){var ge;const{confirm:k,dialog:h}=Ee(),[t,N]=l.useState(null),[P,A]=l.useState([]),[C,D]=l.useState([]),[f,w]=l.useState(!1),[E,F]=l.useState(0),[v,p]=X("lead","decPage",1,pe),[d,b]=l.useState(0),[I,z]=X("lead","flowPage",1,pe),[J,M]=l.useState("loading"),[y,ee]=l.useState(null),[R,le]=l.useState(!1),[T,B]=l.useState(null),[S,ae]=X("lead","filter","all",Te),[_,ve]=X("lead","kind","semua",Fe("semua","keputusan","rangkaian")),H=l.useRef(!1),U=l.useCallback(a=>{var s;return((s=n.find(r=>r.id===a))==null?void 0:s.name)??"Project lain"},[n]),m=l.useCallback((a=!1)=>{!a&&!H.current&&M("loading"),Promise.all([L.getLeadStatus(),L.getLeadDecisions({projectId:S==="all"?void 0:S,page:v,limit:K}),L.getLeadFlows({projectId:S==="all"?void 0:S,page:I,limit:K}).catch(()=>null)]).then(([s,r,x])=>{H.current=!0,N(s),A(r.items??[]),F(r.total??0),x?(D(x.items??[]),b(x.total??0),w(!1)):w(!0),ee(null),M("ready")}).catch(s=>{if(!H.current){M("error");return}a||ee(O("memuat keputusan",s))})},[S,v,I]);l.useEffect(()=>{m()},[m]),ze(S,()=>{p(1),z(1)}),Me({topic:"lead",params:{projectId:S==="all"?void 0:S,decPage:v,flowPage:I,limit:K},apply:a=>{H.current=!0,N(a.status),A(a.decisions.items),F(a.decisions.total),D(a.flows.items),b(a.flows.total),w(!1),ee(null),M("ready")},refetch:()=>m(!0),pollMs:sa});const j=(t==null?void 0:t.config)??null,c=na(j?q(j):ca),ne=c.dirty,$=l.useCallback(async(a,s=!1)=>{le(!0);try{return await L.putLeadConfig(a),s||i("Setelan lead tersimpan","ok","save"),m(!0),!0}catch(r){return i(O("menyimpan setelan lead",r),"err","x-circle"),!1}finally{le(!1)}},[m,i]),Ne=async()=>{if(!j)return;const a={...j,everyMin:ie(c.draft.everyMin,1,1440,j.everyMin),timeoutSec:ie(c.draft.timeoutSec,10,900,j.timeoutSec),maxAutoAnswers:ie(c.draft.maxAutoAnswers,1,20,j.maxAutoAnswers),requireGreenBeforeIntegrate:c.draft.requireGreen};if(JSON.stringify(q(a))===JSON.stringify(q(j))){c.setDraft(q(j));return}c.setDraft(q(a)),await $(a)},re=l.useCallback(async(a,s)=>{B(a);try{await L.updateProject(a,{leadOptIn:s}),await o(a),m(!0),i(s?"Project diserahkan ke lead":"Project ditarik dari lead","ok")}catch(r){i(O("mengubah lead untuk project",r),"err","x-circle")}finally{B(null)}},[m,o,i]),de=l.useCallback(async(a,s)=>{if(!t)return;const r=new Set(t.config.pausedProjects);s?r.add(a):r.delete(a),await $({...t.config,pausedProjects:[...r]},!0)},[t,$]),Se=l.useCallback(async(a,s,r=[])=>{B(a);try{const x=await L.overrideLeadDecision(a,s,"",r);return i(x.delivered?"Jawaban kamu dikirim ke sesi":"Keputusan diubah","ok","check"),m(!0),!0}catch(x){return i(O("mengubah keputusan",x),"err","x-circle"),!1}finally{B(null)}},[m,i]),ce=l.useCallback(async(a,s)=>{B(a);try{await(s==="submit"?L.submitLeadFlow(a):L.cancelLeadFlow(a)),i(s==="submit"?"Rangkaian dikirim":"Rangkaian ditutup tanpa dikirim","ok","check"),m(!0)}catch(r){i(O("menutup rangkaian",r),"err","x-circle")}finally{B(null)}},[m,i]),Le=l.useCallback(async a=>{B(a);try{await L.cancelLeadDecision(a),i("Keputusan dibatalkan","ok"),m(!0)}catch(s){i(O("membatalkan keputusan",s),"err","x-circle")}finally{B(null)}},[m,i]),Ce=(a,s)=>{k(s==="submit"?{title:"Kirim rangkaian ini?",eyebrow:"lead · rangkaian",message:"Semua jawaban yang sudah terkumpul dikirim ke sesi peminta. Rangkaian lalu ditutup dan tidak bisa ditambah lagi.",confirmLabel:"Kirim rangkaian",icon:"check",tone:"default",run:()=>ce(a.id,"submit")}:{title:"Batalkan rangkaian ini?",eyebrow:"lead · rangkaian",message:"Rangkaian ditutup tanpa dikirim. Jawaban yang sudah terkumpul tidak sampai ke sesi peminta.",confirmLabel:"Tutup tanpa mengirim",icon:"x-circle",tone:"danger",run:()=>ce(a.id,"cancel")})},Ie=a=>{k({title:"Batalkan keputusan ini?",eyebrow:"lead · keputusan",message:"Keputusan ini ditandai dibatalkan dan tidak lagi berlaku.",confirmLabel:"Batalkan keputusan",icon:"x-circle",tone:"danger",run:()=>Le(a.id)})},Ae=a=>{if(j){if(a==="mati"){k({title:"Matikan lead?",eyebrow:"lead · kendali",message:"Lead berhenti memutuskan untuk semua project. Sesi yang sudah berjalan tidak diubah, dan pertanyaan yang menunggu tetap menunggu kamu.",confirmLabel:"Matikan lead",icon:"ban",tone:"danger",run:()=>$({...j,enabled:!1,paused:!1}).then(()=>{})});return}$({...j,enabled:!0,paused:a==="jeda"})}};if(J==="loading")return e.jsx(Re,{rows:4,label:"Memuat lead…"});if(J==="error"||!t)return e.jsx(_e,{kind:"error",hint:"Gagal memuat status lead.",action:()=>m(),actionLabel:"Coba lagi"});const oe=t.config.enabled?t.config.paused?"jeda":"aktif":"mati",ue=new Set(t.projects.map(a=>a.projectId)),W=t.waiting,he=new Set(t.deciding),se=new Set(t.queued??[]),V=t.gate??{inFlight:0,queued:0,capacity:1},De=a=>{const s=(t.queue??[]).find(x=>x.sessionId===a);if(s)return[U(s.projectId),s.specId].filter(Boolean).join(" · ");const r=P.find(x=>x.sessionId===a);return r?[U(r.projectId),r.specId].filter(Boolean).join(" · "):"Sesi (rincian ada di riwayat)"},me=[..._!=="rangkaian"?P.map(a=>({key:`d:${a.id}`,at:a.createdAt,d:a})):[],..._!=="keputusan"&&!f?C.map(a=>({key:`f:${a.id}`,at:a.openedAt,f:a})):[]].sort((a,s)=>Date.parse(s.at)-Date.parse(a.at)),Pe=_==="semua"?e.jsx(oa,{page:v,pageCount:Math.max(te(E,v,K).pageCount,te(d,v,K).pageCount),onPage:a=>{p(a),z(a)}}):_==="keputusan"?e.jsx(xe,{total:E,page:v,onPage:p,unit:"keputusan"}):e.jsx(xe,{total:d,page:I,onPage:z,unit:"rangkaian"}),Be=S==="all"?[]:[{key:"project",label:`Project: ${U(S)}`,onRemove:()=>ae("all")}];return e.jsxs("div",{className:"hn-lead",children:[e.jsxs("p",{className:"hn-lead-summary",children:["Lead ",ia[oe]," · ",W.length," menunggu kamu · ",se.size," antre"]}),e.jsxs("div",{className:"hn-lead-layout",children:[e.jsxs("div",{className:"hn-lead-main",children:[e.jsxs("section",{className:"hn-lead-section","aria-labelledby":"lead-menunggu-h",children:[e.jsxs("h2",{id:"lead-menunggu-h",className:"hn-lead-h",children:["Menunggu kamu (",W.length,")"]}),V.queued>0&&e.jsxs("p",{className:"hn-lead-note",children:["Antrean keputusan penuh: ",V.inFlight," dari ",V.capacity," sedang diputuskan, ",V.queued," menunggu giliran."]}),W.length===0?e.jsx("p",{className:"hn-lead-note",children:"Tidak ada sesi yang menunggu keputusanmu. Lead menangani sisanya."}):e.jsx("ul",{className:"hn-lead-waits",children:W.map(a=>{const s=he.has(a)?"Sedang diputuskan":se.has(a)?"Antre giliran":"Menunggu kamu",r=!he.has(a)&&!se.has(a);return e.jsx(ua,{sid:a,title:De(a),label:s,needsYou:r,onGoto:()=>u(a),onAnswered:()=>{i("Jawaban kamu dikirim ke sesi","ok","check"),m(!0)},onError:x=>i(x,"err","x-circle")},a)})})]}),e.jsxs("section",{className:"hn-lead-section","aria-labelledby":"lead-riwayat-h",children:[e.jsx("h2",{id:"lead-riwayat-h",className:"hn-lead-h",children:"Riwayat"}),e.jsx("div",{className:"hn-lead-chips",role:"group","aria-label":"Jenis riwayat",children:ta.map(a=>e.jsx("button",{type:"button",className:"hn-lead-chip","aria-pressed":_===a.key,onClick:()=>{a.key==="semua"&&z(v),ve(a.key)},children:a.label},a.key))}),e.jsx(Oe,{label:"Filter riwayat",chips:Be,filters:e.jsx(Ke,{gap:3,children:e.jsx(ke,{size:"sm",value:S,"aria-label":"saring project",onChange:a=>ae(a.target.value),options:[{value:"all",label:"semua project"},...n.map(a=>({value:a.id,label:a.name}))]})}),filtersLabel:"Project",onReset:()=>ae("all"),resetLabel:"Hapus filter",actions:e.jsxs(e.Fragment,{children:[e.jsx(qe,{screen:"lead",active:S==="all"?0:1}),e.jsx(aa,{})]})}),y&&e.jsx(je,{message:y,onRetry:()=>m()}),f&&_!=="keputusan"&&e.jsx(je,{message:"Gagal memuat rangkaian keputusan.",onRetry:()=>m()}),me.length===0?e.jsx("p",{className:"hn-lead-note",children:_==="rangkaian"?"Belum ada rangkaian. Satu rangkaian adalah satu urusan: beberapa pertanyaan berurutan sampai kamu kirim.":"Belum ada keputusan. Lead menulis satu baris di sini setiap kali ia memutuskan."}):e.jsx("ul",{className:"hn-lead-timeline","aria-label":"Riwayat keputusan dan rangkaian",children:me.map(a=>a.d?e.jsx(ma,{d:a.d,projectName:U,onOverride:Se,onCancel:Ie,busyId:T,ask:k},a.key):e.jsx(ga,{f:a.f,busyId:T,onClose:Ce},a.key))}),Pe]})]}),e.jsxs("aside",{className:"hn-lead-side","aria-label":"Kendali lead",children:[e.jsxs("section",{className:"hn-lead-section","aria-labelledby":"lead-kendali-h",children:[e.jsx("h2",{id:"lead-kendali-h",className:"hn-lead-h",children:"Kendali"}),e.jsx("div",{className:"hn-lead-mode",children:e.jsxs(fe,{label:"Mode lead",value:oe,onChange:a=>Ae(a),children:[e.jsx(Z,{value:"aktif",label:"Aktif",description:"Lead memutuskan untuk project yang diurusnya.",disabled:R}),e.jsx(Z,{value:"jeda",label:"Jeda",description:"Keputusan baru berhenti. Sesi yang berjalan tidak diubah.",disabled:R}),e.jsx(Z,{value:"mati",label:"Mati",description:"Lead berhenti total. Pertanyaan yang menunggu tetap menunggu kamu.",disabled:R})]})}),e.jsx($e,{tone:"info",title:"Dikunci secara teknis",children:"Produksi, VPS, dan penghapusan data tetap terkunci untuk lead, apa pun setelannya."})]}),e.jsxs("details",{className:"hn-lead-disclosure",children:[e.jsxs("summary",{children:["Project yang dipimpin · ",ue.size," dari ",n.length," diurus lead"]}),e.jsx("p",{className:"hn-lead-hint",children:"Lead hanya menyentuh project yang diserahkan kepadanya. Default: tidak diserahkan."}),n.length===0?e.jsx("p",{className:"hn-lead-note",children:"Belum ada project."}):e.jsx(Ge,{label:"Project yang dipimpin lead",children:n.map(a=>{const s=t.projects.find(x=>x.projectId===a.id),r=ue.has(a.id);return e.jsxs(Je,{actions:e.jsxs(e.Fragment,{children:[r&&(s!=null&&s.paused?e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"play",disabled:R,onClick:()=>de(a.id,!1),children:"Lanjutkan"}):e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"pause",disabled:R,onClick:()=>de(a.id,!0),children:"Jeda"})),r?e.jsx(g,{size:"sm",variant:"ghost",leftIcon:"ban",disabled:T===a.id,onClick:()=>re(a.id,!1),children:"Tarik dari lead"}):e.jsx(g,{size:"sm",leftIcon:"check",disabled:T===a.id,onClick:()=>re(a.id,!0),children:"Serahkan ke lead"})]}),children:[e.jsx("span",{className:"hn-lead-project-name",children:a.name}),s&&e.jsxs("span",{className:"hn-lead-project-meta",children:[s.decisions24h," keputusan 24 jam terakhir · ",s.openSessions," sesi terbuka"]}),e.jsx(G,{tone:r?s!=null&&s.paused?"warn":"ok":"neutral",size:"sm",children:r?s!=null&&s.paused?"dijeda":"diurus lead":"tidak diurus"})]},a.id)})})]}),e.jsxs("details",{className:"hn-lead-disclosure",children:[e.jsx("summary",{children:"Pengaturan lead"}),e.jsxs("div",{className:"hn-lead-settings",children:[e.jsxs("div",{className:"hn-lead-settings-grid",children:[e.jsx(Q,{label:"Lead memeriksa tiap (menit)",hint:"1–1440. Berlaku setelah Simpan.",children:e.jsx(Y,{type:"number",min:1,max:1440,"aria-label":"lead memeriksa tiap (menit)",placeholder:"mis. 5",value:c.draft.everyMin,disabled:!j,onChange:a=>c.setDraft({...c.draft,everyMin:a.target.value})})}),e.jsx(Q,{label:"Batas waktu keputusan (detik)",hint:"10–900. Lewat dari ini, keputusan gagal.",children:e.jsx(Y,{type:"number",min:10,max:900,"aria-label":"batas waktu keputusan (detik)",placeholder:"mis. 600",value:c.draft.timeoutSec,disabled:!j,onChange:a=>c.setDraft({...c.draft,timeoutSec:a.target.value})})}),e.jsx(Q,{label:"Jawaban otomatis per sesi (maks)",hint:"1–20. Setelah batas, sesi diserahkan ke kamu.",children:e.jsx(Y,{type:"number",min:1,max:20,"aria-label":"maksimum jawaban otomatis per sesi",placeholder:"mis. 3",value:c.draft.maxAutoAnswers,disabled:!j,onChange:a=>c.setDraft({...c.draft,maxAutoAnswers:a.target.value})})}),e.jsx(Q,{label:"Syarat integrasi ke main",hint:"Berlaku untuk integrasi yang diputuskan lead.",children:e.jsx(ke,{size:"sm","aria-label":"syarat integrasi ke main",value:c.draft.requireGreen?"wajib":"bebas",onChange:a=>c.setDraft({...c.draft,requireGreen:a.target.value==="wajib"}),options:[{value:"wajib",label:"plan harus tuntas dulu"},{value:"bebas",label:"tanpa syarat"}]})})]}),e.jsxs("div",{"data-testid":"lead-engine-line",className:"hn-lead-note",children:["Model lead: ",(ge=t.config.engine)!=null&&ge.enabled?e.jsxs(e.Fragment,{children:[t.config.engine.agent==="codex"?"Codex CLI":"Claude Code"," · ",e.jsx("code",{children:t.config.engine.model})," · ",e.jsx("code",{children:t.config.engine.effort})]}):e.jsx(e.Fragment,{children:"ikut default global · atur di Settings → Model sesi"})]}),e.jsxs("div",{className:"hn-lead-footer",children:[e.jsx("span",{role:"status","aria-live":"polite",children:ne?"Ada perubahan yang belum disimpan.":""}),e.jsxs("span",{className:"hn-lead-chips",children:[e.jsx(g,{size:"sm",variant:"ghost",disabled:!ne||R,onClick:()=>c.setDraft(q(t.config)),children:"Batal"}),e.jsx(g,{size:"sm",leftIcon:"check",disabled:!ne||R||!j,onClick:()=>void Ne(),children:"Simpan pengaturan"})]})]})]})]})]})]}),h]})}export{va as LeadScreen};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as Ne,aL as Te,aN as Ce,j as e,m as h,bj as De,B as d,U as Re,bk as Fe,aK as Me,aM as Pe,I as Ee,n as $e,aP as ze,C as Ke,O as Ae,h as b,bl as Le,i as T}from"./index-DYWU10xI.js";import{R as s}from"./react-DfGhg7ZW.js";import{D as Ue}from"./DocPreviewModal-CYdmHEb_.js";import"./markdown-CWEY34jk.js";import"./xterm-3VOAfa_q.js";const He="(max-width: 399px)";function Ve(){const n=()=>typeof window<"u"&&typeof window.matchMedia=="function"?window.matchMedia(He):null,[C,j]=s.useState(()=>{var t;return((t=n())==null?void 0:t.matches)??!1});return s.useEffect(()=>{var u;const t=n();if(!t)return;const o=()=>j(t.matches);return o(),(u=t.addEventListener)==null||u.call(t,"change",o),()=>{var v;return(v=t.removeEventListener)==null?void 0:v.call(t,"change",o)}},[]),C}function Ze({specId:n,title:C,onBack:j,kind:t="spec",onGoto:o,onIntegrate:u,integrateTarget:v,onRevert:p,onDiscard:L,reviewed:w=!1,onMarkReviewed:x}){const le=t==="session"?b.sessionReview:b.specReview,ce=t==="session"?b.sessionReviewFile:b.specReviewFile,[k,U]=s.useState(null),[D,y]=s.useState("loading"),[oe,_e]=s.useState(""),[R,H]=s.useState(),[l,V]=s.useState(""),[r,F]=s.useState(null),[de,S]=s.useState("loading"),[ue,me]=s.useState(0),[_,he]=s.useState("diff"),[ke,M]=s.useState(0),[fe,ge]=s.useState("list"),[be,P]=s.useState(!1),[we,O]=s.useState("files"),{confirm:E,dialog:je}=Ne(),[W,m]=s.useState(""),$=Ve();s.useEffect(()=>{let a=!0;return y("loading"),le(n).then(i=>{var c;if(a){if(i.empty){U(null),H(i.reason),y("empty");return}U(i),H(void 0),y("ready"),V(((c=i.changed[0])==null?void 0:c.path)??i.files[0]??"")}}).catch(i=>{a&&(console.debug("review: gagal memuat",i==null?void 0:i.message),y("error"))}),()=>{a=!1}},[n,ke]),s.useEffect(()=>{if(!l){F(null),S("ready");return}let a=!0;return F(null),P(!1),S("loading"),ce(n,l).then(i=>{a&&(F(i),S("ready"))}).catch(()=>{a&&S("error")}),()=>{a=!1}},[n,l,ue]);const J=s.useMemo(()=>Te((k==null?void 0:k.files)??[]),[k]),f=(k==null?void 0:k.changed)??[],Q=f.reduce((a,i)=>a+i.add,0),Y=f.reduce((a,i)=>a+i.del,0),z=f.find(a=>a.path===l),X=!!r&&!r.binary&&r.content!==null&&Ce(l),Z=t==="session"?b.sessionReviewFileDownloadUrl:b.specReviewFileDownloadUrl,I=a=>{V(a),O("viewer")},q=t==="session"?"Kembali ke terminal":"Kembali ke backlog",K=!!(u||p||x),ve=`hanoman/${n.toLowerCase().replace(/[^a-z0-9_-]/g,"_")}`,pe=K?u?"Integrasi menggabungkan branch item ke cabang tujuan. Konflik dibereskan sesi agen di Terminal.":"Tinjau perubahan, lalu putuskan.":t==="session"?"Merge dan konflik dikerjakan di Terminal.":"Merge dan konflik dikerjakan di Backlog. Buka Terminal untuk melanjutkan sesinya.",B={section:"terminal"},G={section:"ide"},A={section:"backlog",specId:n},N=a=>o==null?void 0:o(a),g=(a,i,c,re)=>o?e.jsx(d,{size:"sm",variant:re,leftIcon:c,onClick:()=>N(a),children:i}):e.jsx(d,{size:"sm",variant:re,leftIcon:c,as:"a",href:Le(a),children:i});async function ee(){const a=u;if(a){m("");try{await E({title:`Integrasikan ${n}?`,eyebrow:n,icon:"git-merge",confirmLabel:"Integrasikan",tone:"default",message:"Branch item di-merge ke cabang tujuan. Bila ada konflik, sesi agen membereskannya di Terminal. Rebase tetap di Backlog.",impact:[`Branch: ${ve}`,`${f.length} berkas berubah, +${Q} −${Y} baris`,`Cabang tujuan: ${v??"cabang asal item (default project)"}`],run:()=>a(n)})}catch(i){m(T("mengintegrasikan item",i))}}}async function ae(){const a=p;if(a){m("");try{const i=await a(n);if(!i||!("pending"in i))return;const c=i.wouldDelete;await E({title:`Kembalikan ${n} ke Dikerjakan?`,eyebrow:`${n} → Dikerjakan`,icon:"rotate-ccw",tone:c.length?"danger":"default",confirmLabel:c.length?"Hapus dokumen & kembalikan":"Kembalikan",message:c.length?`${c.length} berkas dokumen fase akan dihapus dari disk. Kode dan commit tidak disentuh.`:"Tak ada dokumen fase yang dihapus. Kode dan commit tidak disentuh.",impact:c,run:()=>a(n,!0)})}catch(i){m(T("mengembalikan status",i))}}}async function xe(){const a=L;if(a){m("");try{await E({title:`Hapus worktree ${n}?`,eyebrow:n,icon:"trash-2",tone:"danger",confirmLabel:"Hapus worktree",message:"Direktori worktree dipindah ke tempat sampah repo, lalu dibersihkan. Branch dan commit item tetap ada.",impact:["Sesi yang masih berjalan di worktree ini ditutup.","Perubahan yang belum di-commit di worktree ini ikut dibersihkan."],run:async()=>{await a(n),M(i=>i+1)}})}catch(i){m(T("menghapus worktree",i))}}}async function ie(){const a=x;if(a){m("");try{await a(n,!w)}catch(i){m(T("menandai ditinjau",i))}}}const ye={key:"backlog",label:"Buka di Backlog",icon:"list-checks",onSelect:()=>N(A)},Se={key:"terminal",label:"Buka di Terminal",icon:"terminal",onSelect:()=>N(B)},ne={key:"ide",label:"Buka di IDE",icon:"code",onSelect:()=>N(G)},te=t==="spec"?[ye]:[],Be=o?$?[...te,Se,ne]:K?[...te,ne]:[]:[],se=[...$?[...u?[{key:"integrate",label:"Integrasikan",icon:"git-merge",onSelect:()=>void ee()}]:[],...p?[{key:"revert",label:"Kembalikan ke Dikerjakan",icon:"rotate-ccw",onSelect:()=>void ae()}]:[],...x?[{key:"reviewed",label:w?"Batalkan tanda ditinjau":"Tandai ditinjau",icon:w?"rotate-ccw":"circle-check",onSelect:()=>void ie()}]:[]]:[],...Be,...L?[{key:"discard",label:"Hapus worktree",icon:"trash-2",tone:"danger",onSelect:()=>void xe()}]:[]];return D==="loading"?e.jsx(h,{kind:"loading",title:"Memuat review…",hint:n}):D==="error"?e.jsx(h,{kind:"error",title:"Gagal memuat review",hint:n,action:()=>M(a=>a+1)}):D==="empty"?e.jsxs("div",{className:"hn-review-empty","data-review-state":"empty","data-reason":R??"409","data-status":R?"200":"409","data-detail":oe||void 0,children:[e.jsx(h,{kind:"empty",icon:"git-branch",title:"Belum ada perubahan untuk ditinjau",hint:R==="no-commit"?"Worktree sudah dilepas dan belum ada commit untuk ditinjau. Jalankan sesinya lagi bila perlu.":"Sesi belum membuat worktree. Jalankan atau lanjutkan sesinya dulu, lalu muat ulang."}),e.jsxs(De,{gap:2,justify:"center",children:[t==="spec"&&g(A,"Buka di Backlog","list-checks","primary"),g(B,"Buka di Terminal","terminal",t==="session"?"primary":"secondary"),e.jsx(d,{size:"sm",variant:"ghost",leftIcon:"arrow-left",onClick:j,children:q})]})]}):e.jsxs("div",{className:"hn-review",children:[e.jsxs("header",{className:"hn-review-topbar",children:[e.jsx(d,{size:"sm",variant:"ghost",leftIcon:"arrow-left",onClick:j,children:q}),e.jsx(d,{size:"sm",variant:"ghost",leftIcon:"rotate-ccw",onClick:()=>M(a=>a+1),children:"Muat ulang"})]}),e.jsxs("div",{className:"hn-review-head",children:[e.jsx("span",{className:"hn-eyebrow",children:n}),e.jsx("h2",{className:"hn-review-title",children:C||n}),e.jsxs("p",{className:"hn-review-stat",children:[f.length," berkas berubah · ",e.jsx("span",{className:"hn-review-delta",children:`+${Q} −${Y}`})," baris"]})]}),e.jsx(Re,{ariaLabel:"Panel Review",active:we,onActiveChange:a=>O(a),masterWidth:300,panels:[{id:"files",label:"Files",content:e.jsxs("section",{className:"hn-review-pane","aria-label":"Daftar berkas",children:[e.jsxs("div",{className:"hn-review-list",children:[e.jsx(Fe,{label:"Changed",changed:f,selected:l,onSelect:I,view:fe,onView:ge}),e.jsx("div",{className:"hn-eyebrow hn-review-sep",children:"Semua berkas"}),e.jsx(Me,{label:"Pohon berkas",nodes:J,children:J.map(a=>e.jsx(Pe,{node:a,selected:l,onSelect:I},a.path))})]}),e.jsx("p",{className:"hn-review-legend",children:"A = baru · M = diubah · D = dihapus"})]})},{id:"viewer",label:"Viewer",content:e.jsxs("section",{className:"hn-review-viewer","aria-label":"Isi berkas",children:[e.jsxs("div",{className:"hn-review-viewbar",children:[e.jsx(Ee,{name:"file-text",size:15,color:"var(--text-muted)"}),e.jsx("span",{className:"hn-review-path",children:l||"—"}),(r==null?void 0:r.status)&&e.jsx($e,{tone:r.status==="D"?"err":r.status==="A"?"ok":"brass",size:"sm",children:r.status}),z&&e.jsxs("span",{className:"hn-review-filestat",children:["+",z.add," −",z.del]}),X&&e.jsx(d,{size:"sm",variant:"secondary",leftIcon:"book-open",onClick:()=>P(!0),children:"Preview"}),e.jsx("div",{className:"hn-review-seg",children:["diff","source"].map(a=>e.jsx("button",{type:"button","aria-pressed":_===a,onClick:()=>he(a),children:a==="diff"?"Diff":"Sumber"},a))})]}),e.jsx("div",{className:"hn-review-body",children:l?de==="error"?e.jsx(h,{kind:"error",title:"Gagal memuat berkas",hint:l,action:()=>me(a=>a+1)}):r?r.binary?e.jsx(h,{kind:"empty",icon:"file",title:"Berkas biner",hint:"Tak dapat di-review dari dashboard."}):_==="diff"?e.jsxs("div",{className:"hn-review-diff",children:[e.jsx(ze,{diff:r.diff??"",emptyHint:"File ini bagian dari project, tetapi tidak diubah oleh item ini."}),r.truncated&&e.jsxs("div",{className:"hn-review-truncated",children:[e.jsx("span",{children:"… dipotong pada 256 KB."}),e.jsx("a",{href:Z(n,l,"md"),download:!0,children:"Unduh berkas utuh"})]})]}):r.content===null?e.jsx(h,{kind:"empty",icon:"trash-2",title:"File dihapus",hint:"Tak ada isi untuk ditampilkan."}):e.jsx("pre",{className:"hn-review-pre",children:r.content}):e.jsx(h,{kind:"loading",title:"Memuat file…",hint:l}):e.jsx(h,{kind:"empty",icon:"file-text",title:"Pilih file",hint:"Pilih file dari changed atau tree."})})]})}]}),e.jsxs("div",{className:"hn-review-decide",role:"region","aria-label":"Keputusan",children:[W&&e.jsx(Ke,{tone:"err",className:"hn-review-decide-err",children:W}),e.jsx("p",{className:"hn-review-decide-hint",children:pe}),e.jsxs("div",{className:"hn-review-decide-actions",children:[!$&&(K?e.jsxs(e.Fragment,{children:[p&&e.jsx(d,{size:"sm",variant:"secondary",leftIcon:"rotate-ccw",onClick:()=>void ae(),children:"Kembalikan ke Dikerjakan"}),x&&e.jsx(d,{size:"sm",variant:"secondary",leftIcon:w?"rotate-ccw":"circle-check",onClick:()=>void ie(),children:w?"Batalkan tanda ditinjau":"Tandai ditinjau"}),u&&e.jsx(d,{size:"sm",variant:"primary",leftIcon:"git-merge",onClick:()=>void ee(),children:"Integrasikan"}),g(B,"Buka di Terminal","terminal","secondary")]}):e.jsxs(e.Fragment,{children:[t==="spec"&&g(A,"Buka di Backlog","list-checks","primary"),g(B,"Buka di Terminal","terminal",t==="session"?"primary":"secondary"),g(G,"Buka di IDE","code","secondary")]})),se.length>0&&e.jsx("div",{className:"hn-review-more",children:e.jsx(Ae,{label:"Aksi lain",items:se})})]})]}),je,be&&X&&e.jsx(Ue,{path:l,text:r.content??"",eyebrow:n,download:a=>Z(n,l,a),onClose:()=>P(!1)})]})}export{Ze as ReviewScreen};
|