@opentig/cli 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +73 -17
  2. package/dist/bin.mjs +2 -2
  3. package/dist/chunks/{cli-DaYybBfs.mjs → cli-D_aggpu2.mjs} +232 -57
  4. package/dist/chunks/service-manager-DkpSHxsP.mjs +394 -0
  5. package/dist/client/assets/App-CeDVj5Hh.js +118 -0
  6. package/dist/client/assets/{CreatePullRequestDialog-CGnY6nrw.js → CreatePullRequestDialog-DMHY_u8X.js} +2 -2
  7. package/dist/client/assets/{DiffWorkspace-1ZAh7eFX.js → DiffWorkspace-CeYQ0YtE.js} +1 -1
  8. package/dist/client/assets/{EditableFileViewer-DOnxE6ty.js → EditableFileViewer-BhwE-QMO.js} +1 -1
  9. package/dist/client/assets/{File-DM0fcPqi.js → File-C10_BxOu.js} +1 -1
  10. package/dist/client/assets/{FilesView-BuTZiUd4.js → FilesView-BT4eHbFo.js} +1 -1
  11. package/dist/client/assets/{GitHubAvatar-BIZ8KlZ9.js → GitHubAvatar-Ch_PaCv3.js} +1 -1
  12. package/dist/client/assets/{HistoryView-BTo2h2ee.js → HistoryView-CivGwdxV.js} +1 -1
  13. package/dist/client/assets/{HtmlFileViewer-tEtrcHdG.js → HtmlFileViewer-Cufzaec9.js} +1 -1
  14. package/dist/client/assets/{IconEdit-DtVD7NDP.js → IconEdit-RxH71_V-.js} +1 -1
  15. package/dist/client/assets/{IconFolderPlus-D5cPTAyD.js → IconFolderPlus-DSSB-ikf.js} +1 -1
  16. package/dist/client/assets/{ImageFileViewer-C56bQ88S.js → ImageFileViewer-CFUkcXLH.js} +1 -1
  17. package/dist/client/assets/{LocalRefsDialog-DwhpiSyu.js → LocalRefsDialog-B2jUCKTx.js} +1 -1
  18. package/dist/client/assets/{MarkdownFileViewer-BxQfoNnS.js → MarkdownFileViewer-BLfJ-Vof.js} +2 -2
  19. package/dist/client/assets/{PairingPage-Cu1KraeJ.js → PairingPage-C5Ggk-Z_.js} +1 -1
  20. package/dist/client/assets/{PierreDiffViewer-B9IrAdjM.js → PierreDiffViewer-DYj1ZThr.js} +1 -1
  21. package/dist/client/assets/{PierreEditBoundary-DDJlRbaP.js → PierreEditBoundary-UfvbKDbd.js} +1 -1
  22. package/dist/client/assets/{PierreWorkerPool-BJhmuZSy.js → PierreWorkerPool-7EVoquIB.js} +1 -1
  23. package/dist/client/assets/{PullRequestDiff-Di1_Wv1o.js → PullRequestDiff-DxLTcm6L.js} +1 -1
  24. package/dist/client/assets/{PullRequestViewer-CuH0Ze12.js → PullRequestViewer-CyW39MuF.js} +2 -2
  25. package/dist/client/assets/{PullRequestsView-DRKuy94k.js → PullRequestsView-BHcnarLS.js} +1 -1
  26. package/dist/client/assets/{QuickOpenDialog-DSdrgS2H.js → QuickOpenDialog-CasQU7pk.js} +1 -1
  27. package/dist/client/assets/{RepositoryProjectsDialog-CWcakQRC.js → RepositoryProjectsDialog-VAiZrDlA.js} +1 -1
  28. package/dist/client/assets/{SearchView-Btqv-BZZ.js → SearchView-Bv4bA4UJ.js} +1 -1
  29. package/dist/client/assets/{SettingsDialog-CV7hRbtK.js → SettingsDialog-D33V9Fry.js} +2 -2
  30. package/dist/client/assets/{Viewer-bchsRyMu.js → Viewer-I1lC_oJU.js} +2 -2
  31. package/dist/client/assets/{abnfDiagram-N423BO3Z-D6JAOs-X.js → abnfDiagram-N423BO3Z-DrlQwm7W.js} +1 -1
  32. package/dist/client/assets/{arc-YncG-7Bc.js → arc-B9cXI-QL.js} +1 -1
  33. package/dist/client/assets/{architectureDiagram-T3A2C74G-Ckf8dhax.js → architectureDiagram-T3A2C74G-DZz7ZXbI.js} +1 -1
  34. package/dist/client/assets/{blockDiagram-VBNYF7ZC-CGQa9zHO.js → blockDiagram-VBNYF7ZC-DZFMT63B.js} +1 -1
  35. package/dist/client/assets/{c4Diagram-5PPSVZJV-Ctgat2YZ.js → c4Diagram-5PPSVZJV-BnHIZMZp.js} +1 -1
  36. package/dist/client/assets/channel-CE-pdA-6.js +1 -0
  37. package/dist/client/assets/{checkbox-D5IGxs1d.js → checkbox-BpmQTxn7.js} +1 -1
  38. package/dist/client/assets/{chunk-2GRJ4B5K-CyDC0FQq.js → chunk-2GRJ4B5K-CJOlpI9g.js} +1 -1
  39. package/dist/client/assets/{chunk-2Q5K7J3B-DqYRVN1X.js → chunk-2Q5K7J3B-DhsnoUrJ.js} +1 -1
  40. package/dist/client/assets/{chunk-5RXB4S5H-BtrE-Jqe.js → chunk-5RXB4S5H-Nwsk3OIu.js} +1 -1
  41. package/dist/client/assets/{chunk-5VM5RSS4-CEVyxEEH.js → chunk-5VM5RSS4-Dk9FYU9b.js} +1 -1
  42. package/dist/client/assets/{chunk-6Q2QTUOP-CR_RRfTb.js → chunk-6Q2QTUOP-C8lX8T87.js} +1 -1
  43. package/dist/client/assets/{chunk-GF5L2VYU-Uoc_Vpub.js → chunk-GF5L2VYU-DWHvTG6c.js} +1 -1
  44. package/dist/client/assets/{chunk-JWPE2WC7-BAhDzsCx.js → chunk-JWPE2WC7-BLu2-FJl.js} +1 -1
  45. package/dist/client/assets/{chunk-KBJHAD2P-DkGEUlle.js → chunk-KBJHAD2P-CEOb10I1.js} +1 -1
  46. package/dist/client/assets/{chunk-RYQCIY6F-doFXXAJb.js → chunk-RYQCIY6F-BcdMrb_e.js} +1 -1
  47. package/dist/client/assets/{chunk-XXDRQBXY-B44pCuJx.js → chunk-XXDRQBXY-CzPimvfs.js} +1 -1
  48. package/dist/client/assets/classDiagram-JCYQIIEL-2elbt6qi.js +1 -0
  49. package/dist/client/assets/classDiagram-v2-OCEON4UE-2elbt6qi.js +1 -0
  50. package/dist/client/assets/{cose-bilkent-JH36ORCC-CymnJ1xN.js → cose-bilkent-JH36ORCC-BYfzHUkR.js} +1 -1
  51. package/dist/client/assets/{cynefin-VYW2F7L2-BT5dARHp.js → cynefin-VYW2F7L2-B4mEAleX.js} +1 -1
  52. package/dist/client/assets/{cynefinDiagram-MW4NZA55-DVrhZ1A4.js → cynefinDiagram-MW4NZA55-CioMvT6V.js} +1 -1
  53. package/dist/client/assets/{dagre-VZM6K2ZE-BET0T1KQ.js → dagre-VZM6K2ZE-DWPgHi5i.js} +1 -1
  54. package/dist/client/assets/{diagram-7IWD3JNH-mIl4bvgD.js → diagram-7IWD3JNH-94i9EwB_.js} +1 -1
  55. package/dist/client/assets/{diagram-B4RE2ZJO-DKSi3zok.js → diagram-B4RE2ZJO-BRgMOgy8.js} +1 -1
  56. package/dist/client/assets/{diagram-LBJQPF4R-DFzvqR_V.js → diagram-LBJQPF4R-DHaXTl1T.js} +1 -1
  57. package/dist/client/assets/{diagram-Q27KOJAE-C8UUiNSc.js → diagram-Q27KOJAE-DtLuyYm1.js} +1 -1
  58. package/dist/client/assets/{diagram-UB23O5K3-CYuQnggB.js → diagram-UB23O5K3-D8R3grCW.js} +1 -1
  59. package/dist/client/assets/{ebnfDiagram-BXEA7PRR-orsOZEt3.js → ebnfDiagram-BXEA7PRR-voe5GU7W.js} +1 -1
  60. package/dist/client/assets/{erDiagram-JOGREHBK-BPxNY3Or.js → erDiagram-JOGREHBK-BShMJhmY.js} +1 -1
  61. package/dist/client/assets/{flowDiagram-UKHOOZJN-Dj_tbpt_.js → flowDiagram-UKHOOZJN-DASXB2wV.js} +1 -1
  62. package/dist/client/assets/{ganttDiagram-PKOTCBZU-BhG_1m3O.js → ganttDiagram-PKOTCBZU-Da1ElnJN.js} +1 -1
  63. package/dist/client/assets/{gh-utils-CR5JRkW2.js → gh-utils-D00lyruw.js} +1 -1
  64. package/dist/client/assets/{gitGraphDiagram-DS77QQ5N-B6i118FC.js → gitGraphDiagram-DS77QQ5N-DoGRli0p.js} +1 -1
  65. package/dist/client/assets/{index-C_D1kOlX.js → index-BdjG_WtS.js} +2 -2
  66. package/dist/client/assets/{index-CE9Jcx4e.css → index-Uku28hIV.css} +1 -1
  67. package/dist/client/assets/{infoDiagram-6WML65LV-DhHBZSVb.js → infoDiagram-6WML65LV-CxkxF5pn.js} +1 -1
  68. package/dist/client/assets/{ishikawaDiagram-WSZJBQD7-6Vd6XOG_.js → ishikawaDiagram-WSZJBQD7-l6dk2-PS.js} +1 -1
  69. package/dist/client/assets/{journeyDiagram-NVQOT4AX-uH71A9mr.js → journeyDiagram-NVQOT4AX-wJY4ZF5o.js} +1 -1
  70. package/dist/client/assets/{kanban-definition-27J2QSJJ-DbxRwp0h.js → kanban-definition-27J2QSJJ-CIcwUmJo.js} +1 -1
  71. package/dist/client/assets/{linear-CFzmLtpp.js → linear-Tf-dXwQ9.js} +1 -1
  72. package/dist/client/assets/{mermaid.core-B_Mv_eHi.js → mermaid.core-DnaJSnLe.js} +4 -4
  73. package/dist/client/assets/{mindmap-definition-FAOFIHXS-DQf1s9U3.js → mindmap-definition-FAOFIHXS-jFdJ2bLh.js} +1 -1
  74. package/dist/client/assets/{pegDiagram-VL7TDLO6-BxFVTcDJ.js → pegDiagram-VL7TDLO6-vq0WE66k.js} +1 -1
  75. package/dist/client/assets/{pieDiagram-7S7Q4E2Y-CCNbxGSk.js → pieDiagram-7S7Q4E2Y-3edKDMpI.js} +1 -1
  76. package/dist/client/assets/{quadrantDiagram-CIZ2JOQS-BVhzcmm1.js → quadrantDiagram-CIZ2JOQS-B6M8U4XV.js} +1 -1
  77. package/dist/client/assets/{railroadDiagram-AXF67PYL-D3R2-3Og.js → railroadDiagram-AXF67PYL-C-d5-0YS.js} +1 -1
  78. package/dist/client/assets/{render-markdown-DcHo7ihS.js → render-markdown-GXIpf9CM.js} +1 -1
  79. package/dist/client/assets/{requirementDiagram-LRYGKXZP-B-NkzvnF.js → requirementDiagram-LRYGKXZP-FVzmEbFu.js} +1 -1
  80. package/dist/client/assets/{sankeyDiagram-W5VNT64P-BRpIzFiP.js → sankeyDiagram-W5VNT64P-B-qcUamt.js} +1 -1
  81. package/dist/client/assets/{sequenceDiagram-SI44F4Z6-B7cBRL6x.js → sequenceDiagram-SI44F4Z6-DgFXRLSt.js} +1 -1
  82. package/dist/client/assets/{sizeCapture-X5ZJPWSS-BZ6DbjJ6.js → sizeCapture-X5ZJPWSS-CWi_pMb2.js} +1 -1
  83. package/dist/client/assets/{stateDiagram-OKZ733FA-x8ChPNdG.js → stateDiagram-OKZ733FA-amQwzlgU.js} +1 -1
  84. package/dist/client/assets/{stateDiagram-v2-UEYNNEHI-BlYlvm69.js → stateDiagram-v2-UEYNNEHI-TdV8eIV2.js} +1 -1
  85. package/dist/client/assets/{swimlanes-SLNWSIFB-DR21moSS.js → swimlanes-SLNWSIFB-L88WlaUb.js} +2 -2
  86. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-AWimqvIC.js +8 -0
  87. package/dist/client/assets/{timeline-definition-Z64GVDOM-UlAkswoH.js → timeline-definition-Z64GVDOM-D4TJxxc3.js} +1 -1
  88. package/dist/client/assets/{vennDiagram-T6HMQDX7-91kBYEFr.js → vennDiagram-T6HMQDX7-ClJWOyzQ.js} +1 -1
  89. package/dist/client/assets/{viewer-tabs-BHvOJKLx.js → viewer-tabs-Cp_MC_J3.js} +1 -1
  90. package/dist/client/assets/{wardleyDiagram-T6FBY63Y-CqAHibOn.js → wardleyDiagram-T6FBY63Y-Cxfjpd6V.js} +1 -1
  91. package/dist/client/assets/{xychartDiagram-ELKLHX3M-BMFs9l78.js → xychartDiagram-ELKLHX3M-BYqbTvmt.js} +1 -1
  92. package/dist/client/index.html +2 -2
  93. package/dist/dev.mjs +4 -4
  94. package/dist/manifest.json +1 -1
  95. package/dist/server.mjs +5 -5
  96. package/dist/service-update.mjs +12 -10
  97. package/package.json +1 -1
  98. package/dist/chunks/cli-service-CDd3ZvGV.mjs +0 -237
  99. package/dist/client/assets/App-C7Yf3r-l.js +0 -118
  100. package/dist/client/assets/channel-B31JCSE_.js +0 -1
  101. package/dist/client/assets/classDiagram-JCYQIIEL-C6tU-sLq.js +0 -1
  102. package/dist/client/assets/classDiagram-v2-OCEON4UE-C6tU-sLq.js +0 -1
  103. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-DbXYPHRv.js +0 -8
@@ -1,4 +1,4 @@
1
- import{r as m,j as e}from"./react-rd22PHbN.js";import{ay as Ns,az as fe,aA as Ke,aB as Xe,aC as Cs,aD as Ss,aE as Ms,aF as Es,aG as Rs,aH as As,A as N,D as H,c as V,d as W,e as Y,k as X,l as ge,y as Ce,g as K,I as Se,H as Me,B as Q,aI as Is,aJ as xe,aK as Oe,Q as qe,aL as Je,aM as Ze,aN as Ts,aO as Le,aP as Os,aQ as Ls,m as Ee,S as re,E as oe,C as le,F as ce,aR as Ps,G as de,aS as $s,aT as Pe,i as Fs,aU as zs,aV as _s,aW as Ds,aX as Bs,X as Us,aY as je,aZ as Gs}from"./App-C7Yf3r-l.js";import{c as O,d as ee,o as te,B as w,T as F,a as z,b as _,I as $e,w as Fe}from"./index-C_D1kOlX.js";import{b as Qe,t as es,c as ss,r as ts,d as ns}from"./tanstack-Bsd5UOY4.js";import{I as Hs}from"./IconEdit-DtVD7NDP.js";import"./base-ui-D4MeJpa3.js";const Vs=[["path",{d:"M3 9l4 -4l4 4m-4 -4v14",key:"svg-0"}],["path",{d:"M21 15l-4 4l-4 -4m4 4v-14",key:"svg-1"}]],as=O("outline","arrows-sort","ArrowsSort",Vs);const Ws=[["path",{d:"M4 8h16",key:"svg-0"}],["path",{d:"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12",key:"svg-1"}],["path",{d:"M8 4v4",key:"svg-2"}]],Ys=O("outline","browser","Browser",Ws);const Ks=[["path",{d:"M3 5a1 1 0 0 1 1 -1h16a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10",key:"svg-0"}],["path",{d:"M7 20h10",key:"svg-1"}],["path",{d:"M9 16v4",key:"svg-2"}],["path",{d:"M15 16v4",key:"svg-3"}]],is=O("outline","device-desktop","DeviceDesktop",Ks);const Xs=[["path",{d:"M2 8a2 2 0 0 1 2 -2h16a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2 -2l0 -8",key:"svg-0"}],["path",{d:"M6 10l0 .01",key:"svg-1"}],["path",{d:"M10 10l0 .01",key:"svg-2"}],["path",{d:"M14 10l0 .01",key:"svg-3"}],["path",{d:"M18 10l0 .01",key:"svg-4"}],["path",{d:"M6 14l0 .01",key:"svg-5"}],["path",{d:"M18 14l0 .01",key:"svg-6"}],["path",{d:"M10 14l4 .01",key:"svg-7"}]],qs=O("outline","keyboard","Keyboard",Xs);const Js=[["path",{d:"M9 15l6 -6",key:"svg-0"}],["path",{d:"M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464",key:"svg-1"}],["path",{d:"M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463",key:"svg-2"}]],Zs=O("outline","link","Link",Js);const Qs=[["path",{d:"M9 6l11 0",key:"svg-0"}],["path",{d:"M9 12l11 0",key:"svg-1"}],["path",{d:"M9 18l11 0",key:"svg-2"}],["path",{d:"M5 6l0 .01",key:"svg-3"}],["path",{d:"M5 12l0 .01",key:"svg-4"}],["path",{d:"M5 18l0 .01",key:"svg-5"}]],et=O("outline","list","List",Qs);const st=[["path",{d:"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454l0 .008",key:"svg-0"}]],tt=O("outline","moon","Moon",st);const nt=[["path",{d:"M6 9a6 6 0 1 0 12 0a6 6 0 0 0 -12 0",key:"svg-0"}],["path",{d:"M12 3c1.333 .333 2 2.333 2 6s-.667 5.667 -2 6",key:"svg-1"}],["path",{d:"M12 3c-1.333 .333 -2 2.333 -2 6s.667 5.667 2 6",key:"svg-2"}],["path",{d:"M6 9h12",key:"svg-3"}],["path",{d:"M3 20h7",key:"svg-4"}],["path",{d:"M14 20h7",key:"svg-5"}],["path",{d:"M10 20a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-6"}],["path",{d:"M12 15v3",key:"svg-7"}]],at=O("outline","network","Network",nt);const it=[["path",{d:"M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-0"}],["path",{d:"M7 17l0 .01",key:"svg-1"}],["path",{d:"M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-2"}],["path",{d:"M7 7l0 .01",key:"svg-3"}],["path",{d:"M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-4"}],["path",{d:"M17 7l0 .01",key:"svg-5"}],["path",{d:"M14 14l3 0",key:"svg-6"}],["path",{d:"M20 14l0 .01",key:"svg-7"}],["path",{d:"M14 14l0 3",key:"svg-8"}],["path",{d:"M14 20l3 0",key:"svg-9"}],["path",{d:"M17 17l3 0",key:"svg-10"}],["path",{d:"M20 17l0 3",key:"svg-11"}]],rt=O("outline","qrcode","Qrcode",it);const ot=[["path",{d:"M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3",key:"svg-0"}],["path",{d:"M11 11a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M12 12l0 2.5",key:"svg-2"}]],ze=O("outline","shield-lock","ShieldLock",ot);const lt=[["path",{d:"M4 6l7 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l9 0",key:"svg-2"}],["path",{d:"M15 9l3 -3l3 3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]],rs=O("outline","sort-ascending","SortAscending",lt);const ct=[["path",{d:"M4 6l9 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l7 0",key:"svg-2"}],["path",{d:"M15 15l3 3l3 -3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]],os=O("outline","sort-descending","SortDescending",ct);const dt=[["path",{d:"M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6",key:"svg-0"}]],ht=O("outline","sparkles","Sparkles",dt);const ut=[["path",{d:"M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0",key:"svg-0"}],["path",{d:"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7",key:"svg-1"}]],gt=O("outline","sun","Sun",ut);function _e(s,t){if(typeof s=="function")return s(t);s!=null&&(s.current=t)}function mt(...s){return t=>{let n=!1;const a=s.map(i=>{const r=_e(i,t);return!n&&typeof r=="function"&&(n=!0),r});if(n)return()=>{for(let i=0;i<a.length;i++){const r=a[i];typeof r=="function"?r():_e(s[i],null)}}}}function pt(...s){return m.useCallback(mt(...s),s)}class ft extends m.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(fe(n)&&t.isPresent&&!this.props.isPresent&&this.props.pop!==!1){const a=n.offsetParent,i=fe(a)&&a.offsetWidth||0,r=fe(a)&&a.offsetHeight||0,o=getComputedStyle(n),c=this.props.sizeRef.current;c.height=parseFloat(o.height),c.width=parseFloat(o.width),c.top=n.offsetTop,c.left=n.offsetLeft,c.right=i-c.width-c.left,c.bottom=r-c.height-c.top,c.direction=o.direction}return null}componentDidUpdate(){}render(){return this.props.children}}function xt({children:s,isPresent:t,anchorX:n,anchorY:a,root:i,pop:r}){const o=m.useId(),c=m.useRef(null),h=m.useRef({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:"ltr"}),{nonce:f}=m.useContext(Ns),p=r!==!1?s.props?.ref??s?.ref:void 0,u=pt(c,p);return m.useInsertionEffect(()=>{const{width:l,height:x,top:j,left:v,right:y,bottom:S,direction:M}=h.current;if(t||r===!1||!c.current||!l||!x)return;const I=M==="rtl",C=n==="left"?I?`right: ${y}`:`left: ${v}`:I?`left: ${v}`:`right: ${y}`,E=a==="bottom"?`bottom: ${S}`:`top: ${j}`;c.current.dataset.motionPopId=o;const R=document.createElement("style");f&&(R.nonce=f);const L=i??document.head;return L.appendChild(R),R.sheet&&R.sheet.insertRule(`
1
+ import{r as m,j as e}from"./react-rd22PHbN.js";import{ay as Ns,az as fe,aA as Ke,aB as Xe,aC as Cs,aD as Ss,aE as Ms,aF as Es,aG as Rs,aH as As,A as N,D as H,c as V,d as W,e as Y,k as X,l as ge,y as Ce,g as K,I as Se,H as Me,B as Q,aI as Is,aJ as xe,aK as Oe,Q as qe,aL as Je,aM as Ze,aN as Ts,aO as Le,aP as Os,aQ as Ls,m as Ee,S as re,E as oe,C as le,F as ce,aR as Ps,G as de,aS as $s,aT as Pe,i as Fs,aU as zs,aV as _s,aW as Ds,aX as Bs,X as Us,aY as je,aZ as Gs}from"./App-CeDVj5Hh.js";import{c as O,d as ee,o as te,B as w,T as F,a as z,b as _,I as $e,w as Fe}from"./index-BdjG_WtS.js";import{b as Qe,t as es,c as ss,r as ts,d as ns}from"./tanstack-Bsd5UOY4.js";import{I as Hs}from"./IconEdit-RxH71_V-.js";import"./base-ui-D4MeJpa3.js";const Vs=[["path",{d:"M3 9l4 -4l4 4m-4 -4v14",key:"svg-0"}],["path",{d:"M21 15l-4 4l-4 -4m4 4v-14",key:"svg-1"}]],as=O("outline","arrows-sort","ArrowsSort",Vs);const Ws=[["path",{d:"M4 8h16",key:"svg-0"}],["path",{d:"M4 6a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12",key:"svg-1"}],["path",{d:"M8 4v4",key:"svg-2"}]],Ys=O("outline","browser","Browser",Ws);const Ks=[["path",{d:"M3 5a1 1 0 0 1 1 -1h16a1 1 0 0 1 1 1v10a1 1 0 0 1 -1 1h-16a1 1 0 0 1 -1 -1v-10",key:"svg-0"}],["path",{d:"M7 20h10",key:"svg-1"}],["path",{d:"M9 16v4",key:"svg-2"}],["path",{d:"M15 16v4",key:"svg-3"}]],is=O("outline","device-desktop","DeviceDesktop",Ks);const Xs=[["path",{d:"M2 8a2 2 0 0 1 2 -2h16a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-16a2 2 0 0 1 -2 -2l0 -8",key:"svg-0"}],["path",{d:"M6 10l0 .01",key:"svg-1"}],["path",{d:"M10 10l0 .01",key:"svg-2"}],["path",{d:"M14 10l0 .01",key:"svg-3"}],["path",{d:"M18 10l0 .01",key:"svg-4"}],["path",{d:"M6 14l0 .01",key:"svg-5"}],["path",{d:"M18 14l0 .01",key:"svg-6"}],["path",{d:"M10 14l4 .01",key:"svg-7"}]],qs=O("outline","keyboard","Keyboard",Xs);const Js=[["path",{d:"M9 15l6 -6",key:"svg-0"}],["path",{d:"M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464",key:"svg-1"}],["path",{d:"M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463",key:"svg-2"}]],Zs=O("outline","link","Link",Js);const Qs=[["path",{d:"M9 6l11 0",key:"svg-0"}],["path",{d:"M9 12l11 0",key:"svg-1"}],["path",{d:"M9 18l11 0",key:"svg-2"}],["path",{d:"M5 6l0 .01",key:"svg-3"}],["path",{d:"M5 12l0 .01",key:"svg-4"}],["path",{d:"M5 18l0 .01",key:"svg-5"}]],et=O("outline","list","List",Qs);const st=[["path",{d:"M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454l0 .008",key:"svg-0"}]],tt=O("outline","moon","Moon",st);const nt=[["path",{d:"M6 9a6 6 0 1 0 12 0a6 6 0 0 0 -12 0",key:"svg-0"}],["path",{d:"M12 3c1.333 .333 2 2.333 2 6s-.667 5.667 -2 6",key:"svg-1"}],["path",{d:"M12 3c-1.333 .333 -2 2.333 -2 6s.667 5.667 2 6",key:"svg-2"}],["path",{d:"M6 9h12",key:"svg-3"}],["path",{d:"M3 20h7",key:"svg-4"}],["path",{d:"M14 20h7",key:"svg-5"}],["path",{d:"M10 20a2 2 0 1 0 4 0a2 2 0 0 0 -4 0",key:"svg-6"}],["path",{d:"M12 15v3",key:"svg-7"}]],at=O("outline","network","Network",nt);const it=[["path",{d:"M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-0"}],["path",{d:"M7 17l0 .01",key:"svg-1"}],["path",{d:"M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-2"}],["path",{d:"M7 7l0 .01",key:"svg-3"}],["path",{d:"M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4",key:"svg-4"}],["path",{d:"M17 7l0 .01",key:"svg-5"}],["path",{d:"M14 14l3 0",key:"svg-6"}],["path",{d:"M20 14l0 .01",key:"svg-7"}],["path",{d:"M14 14l0 3",key:"svg-8"}],["path",{d:"M14 20l3 0",key:"svg-9"}],["path",{d:"M17 17l3 0",key:"svg-10"}],["path",{d:"M20 17l0 3",key:"svg-11"}]],rt=O("outline","qrcode","Qrcode",it);const ot=[["path",{d:"M12 3a12 12 0 0 0 8.5 3a12 12 0 0 1 -8.5 15a12 12 0 0 1 -8.5 -15a12 12 0 0 0 8.5 -3",key:"svg-0"}],["path",{d:"M11 11a1 1 0 1 0 2 0a1 1 0 1 0 -2 0",key:"svg-1"}],["path",{d:"M12 12l0 2.5",key:"svg-2"}]],ze=O("outline","shield-lock","ShieldLock",ot);const lt=[["path",{d:"M4 6l7 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l9 0",key:"svg-2"}],["path",{d:"M15 9l3 -3l3 3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]],rs=O("outline","sort-ascending","SortAscending",lt);const ct=[["path",{d:"M4 6l9 0",key:"svg-0"}],["path",{d:"M4 12l7 0",key:"svg-1"}],["path",{d:"M4 18l7 0",key:"svg-2"}],["path",{d:"M15 15l3 3l3 -3",key:"svg-3"}],["path",{d:"M18 6l0 12",key:"svg-4"}]],os=O("outline","sort-descending","SortDescending",ct);const dt=[["path",{d:"M16 18a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m0 -12a2 2 0 0 1 2 2a2 2 0 0 1 2 -2a2 2 0 0 1 -2 -2a2 2 0 0 1 -2 2m-7 12a6 6 0 0 1 6 -6a6 6 0 0 1 -6 -6a6 6 0 0 1 -6 6a6 6 0 0 1 6 6",key:"svg-0"}]],ht=O("outline","sparkles","Sparkles",dt);const ut=[["path",{d:"M8 12a4 4 0 1 0 8 0a4 4 0 1 0 -8 0",key:"svg-0"}],["path",{d:"M3 12h1m8 -9v1m8 8h1m-9 8v1m-6.4 -15.4l.7 .7m12.1 -.7l-.7 .7m0 11.4l.7 .7m-12.1 -.7l-.7 .7",key:"svg-1"}]],gt=O("outline","sun","Sun",ut);function _e(s,t){if(typeof s=="function")return s(t);s!=null&&(s.current=t)}function mt(...s){return t=>{let n=!1;const a=s.map(i=>{const r=_e(i,t);return!n&&typeof r=="function"&&(n=!0),r});if(n)return()=>{for(let i=0;i<a.length;i++){const r=a[i];typeof r=="function"?r():_e(s[i],null)}}}}function pt(...s){return m.useCallback(mt(...s),s)}class ft extends m.Component{getSnapshotBeforeUpdate(t){const n=this.props.childRef.current;if(fe(n)&&t.isPresent&&!this.props.isPresent&&this.props.pop!==!1){const a=n.offsetParent,i=fe(a)&&a.offsetWidth||0,r=fe(a)&&a.offsetHeight||0,o=getComputedStyle(n),c=this.props.sizeRef.current;c.height=parseFloat(o.height),c.width=parseFloat(o.width),c.top=n.offsetTop,c.left=n.offsetLeft,c.right=i-c.width-c.left,c.bottom=r-c.height-c.top,c.direction=o.direction}return null}componentDidUpdate(){}render(){return this.props.children}}function xt({children:s,isPresent:t,anchorX:n,anchorY:a,root:i,pop:r}){const o=m.useId(),c=m.useRef(null),h=m.useRef({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:"ltr"}),{nonce:f}=m.useContext(Ns),p=r!==!1?s.props?.ref??s?.ref:void 0,u=pt(c,p);return m.useInsertionEffect(()=>{const{width:l,height:x,top:j,left:v,right:y,bottom:S,direction:M}=h.current;if(t||r===!1||!c.current||!l||!x)return;const I=M==="rtl",C=n==="left"?I?`right: ${y}`:`left: ${v}`:I?`left: ${v}`:`right: ${y}`,E=a==="bottom"?`bottom: ${S}`:`top: ${j}`;c.current.dataset.motionPopId=o;const R=document.createElement("style");f&&(R.nonce=f);const L=i??document.head;return L.appendChild(R),R.sheet&&R.sheet.insertRule(`
2
2
  [data-motion-pop-id="${o}"] {
3
3
  position: absolute !important;
4
4
  width: ${l}px !important;
@@ -6,4 +6,4 @@ import{r as m,j as e}from"./react-rd22PHbN.js";import{ay as Ns,az as fe,aA as Ke
6
6
  ${C}px !important;
7
7
  ${E}px !important;
8
8
  }
9
- `),()=>{c.current?.removeAttribute("data-motion-pop-id"),L.contains(R)&&L.removeChild(R)}},[t]),e.jsx(ft,{isPresent:t,childRef:c,sizeRef:h,pop:r,children:r===!1?s:m.cloneElement(s,{ref:u})})}const jt=({children:s,initial:t,isPresent:n,onExitComplete:a,custom:i,presenceAffectsLayout:r,mode:o,anchorX:c,anchorY:h,root:f})=>{const p=Ke(vt),u=m.useId(),l=m.useRef(n),x=m.useRef(a);Xe(()=>{l.current=n,x.current=a});let j=!0,v=m.useMemo(()=>(j=!1,{id:u,initial:t,isPresent:n,custom:i,onExitComplete:y=>{p.set(y,!0);for(const S of p.values())if(!S)return;a&&a()},register:y=>(p.set(y,!1),()=>{p.delete(y),!l.current&&!p.size&&x.current?.()})}),[n,p,a]);return r&&j&&(v={...v}),m.useMemo(()=>{p.forEach((y,S)=>p.set(S,!1))},[n]),m.useEffect(()=>{!n&&!p.size&&a&&a()},[n]),s=e.jsx(xt,{pop:o==="popLayout",isPresent:n,anchorX:c,anchorY:h,root:f,children:s}),e.jsx(Cs.Provider,{value:v,children:s})};function vt(){return new Map}const ne=s=>s.key||"";function De(s){const t=[];return m.Children.forEach(s,n=>{m.isValidElement(n)&&t.push(n)}),t}const Be=({children:s,custom:t,initial:n=!0,onExitComplete:a,presenceAffectsLayout:i=!0,mode:r="sync",propagate:o=!1,anchorX:c="left",anchorY:h="top",root:f})=>{const[p,u]=Ss(o),l=m.useMemo(()=>De(s),[s]),x=o&&!p?[]:l.map(ne),j=m.useRef(!0),v=m.useRef(l),y=Ke(()=>new Map),S=m.useRef(new Set),[M,I]=m.useState(l),[C,E]=m.useState(l);Xe(()=>{j.current=!1,v.current=l;for(let A=0;A<C.length;A++){const d=ne(C[A]);x.includes(d)?(y.delete(d),S.current.delete(d)):y.get(d)!==!0&&y.set(d,!1)}},[C,x.length,x.join("-")]);const R=[];if(l!==M){let A=[...l];for(let d=0;d<C.length;d++){const b=C[d],k=ne(b);x.includes(k)||(A.splice(d,0,b),R.push(b))}return r==="wait"&&R.length&&(A=R),E(De(A)),I(l),null}const{forceRender:L}=m.useContext(Ms);return e.jsx(e.Fragment,{children:C.map(A=>{const d=ne(A),b=o&&!p?!1:l===C||x.includes(d),k=()=>{if(S.current.has(d))return;if(y.has(d))S.current.add(d),y.set(d,!0);else return;let q=!0;y.forEach(me=>{me||(q=!1)}),q&&(L?.(),E(v.current),o&&u?.(),a&&a())};return e.jsx(jt,{isPresent:b,initial:!j.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:r,root:f,onExitComplete:b?void 0:k,anchorX:c,anchorY:h,children:A},d)})})};function bt(){!Es.current&&Rs();const[s]=m.useState(As.current);return s}function ls({className:s,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full",children:e.jsx("table",{"data-slot":"table",className:ee("w-full caption-bottom text-xs",s),...t})})}function cs({className:s,...t}){return e.jsx("thead",{"data-slot":"table-header",className:ee("[&_tr]:border-b",s),...t})}function ds({className:s,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:ee("[&_tr:last-child]:border-0",s),...t})}function ue({className:s,...t}){return e.jsx("tr",{"data-slot":"table-row",className:ee("border-b border-border transition-colors hover:bg-muted/40 data-[state=selected]:bg-muted",s),...t})}function hs({className:s,...t}){return e.jsx("th",{"data-slot":"table-head",className:ee("h-8 whitespace-nowrap px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",s),...t})}function us({className:s,...t}){return e.jsx("td",{"data-slot":"table-cell",className:ee("px-2 py-1.5 align-middle [&:has([role=checkbox])]:pr-0",s),...t})}const yt={"commit-message":"commit message","pull-request-draft":"pull request draft"};function B({column:s,label:t}){const n=s.getIsSorted();return e.jsxs("button",{type:"button",className:"ai-log-sort-button",onClick:()=>s.toggleSorting(n==="asc"),children:[t,n==="asc"&&e.jsx(rs,{size:13}),n==="desc"&&e.jsx(os,{size:13}),!n&&e.jsx(as,{size:13,className:"ai-log-sort-idle"})]})}const wt=es({rowSortingFeature:ts,sortedRowModel:ns()}),P=ss(),kt=P.columns([P.accessor("status",{header:({column:s})=>e.jsx(B,{column:s,label:"Status"}),cell:({getValue:s})=>{const t=s();return e.jsx(Q,{variant:t==="success"?"secondary":t==="cancelled"?"outline":"destructive",children:t})}}),P.accessor("harness",{header:({column:s})=>e.jsx(B,{column:s,label:"Harness"}),cell:({getValue:s})=>e.jsx("strong",{children:s()})}),P.accessor("model",{header:({column:s})=>e.jsx(B,{column:s,label:"Model"}),cell:({getValue:s})=>e.jsx("span",{className:"ai-log-model",children:s()})}),P.accessor("operation",{header:({column:s})=>e.jsx(B,{column:s,label:"Task"}),cell:({getValue:s})=>yt[s()]}),P.accessor(s=>new Date(s.at).getTime(),{id:"at",header:({column:s})=>e.jsx(B,{column:s,label:"Date"}),cell:({row:s})=>e.jsx("time",{dateTime:s.original.at,children:new Date(s.original.at).toLocaleString()})}),P.accessor("durationMs",{header:({column:s})=>e.jsx(B,{column:s,label:"Duration"}),cell:({getValue:s})=>`${(s()/1e3).toFixed(1)}s`}),P.accessor(s=>(s.usage.inputTokens??0)+(s.usage.outputTokens??0),{id:"usage",header:({column:s})=>e.jsx(B,{column:s,label:"Usage"}),cell:({row:s})=>St(s.original)}),P.accessor("stagedFileCount",{header:({column:s})=>e.jsx(B,{column:s,label:"Staged"}),cell:({getValue:s})=>s()??"—"}),P.display({id:"notes",header:"Notes",cell:({row:s})=>{const t=s.original,n=[];return t.errorCode&&n.push({key:"error",text:t.errorCode,tone:"error"}),t.errorMessage&&n.push({key:"error-message",text:t.errorMessage,tone:"error",detail:t.errorMessage}),t.splitOffered===!0&&n.push({key:"split",text:`split: ${t.splitGroups} commits`}),t.splitRejectedReason&&n.push({key:"rejected",text:`split refused: ${t.splitRejectedReason}`,tone:"warn",detail:t.splitRejectedReason}),t.splitBlockedReason&&n.push({key:"blocked",text:`no split: ${t.splitBlockedReason}`,detail:t.splitBlockedReason}),t.contextTruncated===!0&&n.push({key:"truncated",text:"context trimmed"}),n.length===0?null:e.jsx("div",{className:"ai-log-row-notes",children:n.map(a=>e.jsx(Ct,{text:a.text,tone:a.tone,detail:a.detail},a.key))})}})]);function Nt({open:s,onOpenChange:t}){const[n,a]=m.useState([]),[i,r]=m.useState(!1),[o,c]=m.useState([]),h=m.useCallback(async()=>{r(!0);try{a(await te.ai.log())}catch(l){N.error({title:"Could not read the AI history",description:Ge(l)})}finally{r(!1)}},[]);m.useEffect(()=>{s&&h()},[h,s]);const f=m.useMemo(()=>{const l=n.filter(x=>x.status==="failed").length;return{runs:n.length,failed:l,tokens:n.reduce((x,j)=>x+(j.usage.inputTokens??0)+(j.usage.outputTokens??0),0),cost:n.reduce((x,j)=>x+(j.usage.costUsd??0),0),costed:n.filter(x=>x.usage.costUsd!==null).length}},[n]),p=Qe({features:wt,data:n,columns:kt,onSortingChange:c,state:{sorting:o}}),u=async()=>{if(window.confirm("Delete the whole AI history? This cannot be undone."))try{await te.ai.clearLog(),a([])}catch(l){N.error({title:"Could not clear the AI history",description:Ge(l)})}};return e.jsx(H,{open:s,onOpenChange:t,children:e.jsxs(V,{className:"ai-log-dialog",children:[e.jsxs("header",{className:"ai-log-header",children:[e.jsxs("div",{children:[e.jsx(W,{children:"AI history"}),e.jsx(Y,{children:"Recent generations on this machine. Prompts and file contents are never recorded."})]}),e.jsxs("div",{className:"ai-log-header-actions",children:[e.jsxs(w,{variant:"outline",size:"sm",disabled:i,onClick:()=>{h()},children:[i?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," Refresh"]}),e.jsxs(w,{variant:"ghost",size:"sm",disabled:n.length===0,onClick:()=>{u()},children:[e.jsx(Ce,{})," Clear"]}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close AI history"}),children:e.jsx(Se,{})})]})]}),n.length>0&&e.jsxs("div",{className:"ai-log-totals",children:[e.jsxs("span",{children:[e.jsx("strong",{children:f.runs})," runs"]}),e.jsxs("span",{children:[e.jsx("strong",{children:f.failed})," failed"]}),e.jsxs("span",{children:[e.jsx("strong",{children:we(f.tokens)})," tokens"]}),f.costed>0&&e.jsxs("span",{children:[e.jsxs("strong",{children:["$",f.cost.toFixed(4)]})," reported by ",f.costed," of ",f.runs]})]}),e.jsxs("div",{className:"ai-log-body",children:[i&&n.length===0&&e.jsxs("div",{className:"view-loading",role:"status",children:[e.jsx(X,{className:"spinner"})," ",e.jsx(Me,{text:"Reading history…"})]}),!i&&n.length===0&&e.jsx("p",{className:"ai-log-empty",children:"No generations recorded yet. Generate a commit message and it will show up here."}),n.length>0&&e.jsx("div",{className:"ai-log-table-wrap",children:e.jsxs(ls,{children:[e.jsx(cs,{children:p.getHeaderGroups().map(l=>e.jsx(ue,{children:l.headers.map(x=>e.jsx(hs,{children:x.isPlaceholder?null:e.jsx(p.FlexRender,{header:x})},x.id))},l.id))}),e.jsx(ds,{children:p.getRowModel().rows.map(l=>e.jsx(ue,{className:l.original.status==="failed"?"ai-log-row-failed":void 0,children:l.getAllCells().map(x=>e.jsx(us,{children:e.jsx(p.FlexRender,{cell:x})},x.id))},l.id))})]})})]})]})})}const Ue=140;function Ct({text:s,tone:t,detail:n}){const[a,i]=m.useState(!1),r=s.length>Ue?`${s.slice(0,Ue-1)}…`:s,o=`ai-log-note ${t??""}`;return n?e.jsxs(e.Fragment,{children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("button",{type:"button",className:o,onClick:()=>i(!0),"aria-label":"Read generation details"}),children:r}),e.jsx(_,{className:"max-w-md",children:n})]}),e.jsx(H,{open:a,onOpenChange:i,children:e.jsx(V,{className:"name-dialog",children:e.jsxs("div",{className:"name-dialog-content",children:[e.jsx(W,{children:"Generation details"}),e.jsx(Y,{className:"whitespace-pre-wrap break-words",children:n}),e.jsx("div",{className:"name-dialog-actions",children:e.jsx(K,{render:e.jsx(w,{variant:"outline"}),children:"Close"})})]})})})]}):e.jsx("span",{className:o,children:r})}function St(s){const{inputTokens:t,outputTokens:n,costUsd:a}=s.usage;if(t===null&&n===null)return"no usage reported";const i=`${we(t??0)} in · ${we(n??0)} out`;return a===null?i:`${i} · $${a.toFixed(4)}`}function we(s){return s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}function Ge(s){return s instanceof Error?s.message:"An unexpected error occurred."}function se({column:s,label:t}){const n=s.getIsSorted();return e.jsxs("button",{type:"button",className:"ai-log-sort-button",onClick:()=>s.toggleSorting(n==="asc"),children:[t,n==="asc"&&e.jsx(rs,{size:13}),n==="desc"&&e.jsx(os,{size:13}),!n&&e.jsx(as,{size:13,className:"ai-log-sort-idle"})]})}const Mt=es({rowSortingFeature:ts,sortedRowModel:ns()}),Z=ss(),Et=Z.columns([Z.accessor("level",{header:({column:s})=>e.jsx(se,{column:s,label:"Level"}),cell:({getValue:s})=>{const t=s();return e.jsx(Q,{variant:t==="warn"?"outline":"destructive",children:t})}}),Z.accessor("operation",{header:({column:s})=>e.jsx(se,{column:s,label:"Operation"}),cell:({getValue:s})=>e.jsx("strong",{children:s()})}),Z.accessor("code",{header:({column:s})=>e.jsx(se,{column:s,label:"Code"}),cell:({getValue:s})=>s()??"—"}),Z.accessor(s=>new Date(s.at).getTime(),{id:"at",header:({column:s})=>e.jsx(se,{column:s,label:"Date"}),cell:({row:s})=>e.jsx("time",{dateTime:s.original.at,children:new Date(s.original.at).toLocaleString()})}),Z.accessor("message",{header:({column:s})=>e.jsx(se,{column:s,label:"Message"}),cell:({getValue:s})=>e.jsx("span",{className:"ai-log-model",children:s()})})]);function He(s){return s instanceof Error?s.message:"An unexpected error occurred."}function Rt({open:s,onOpenChange:t}){const[n,a]=m.useState([]),[i,r]=m.useState(!1),[o,c]=m.useState([]),h=m.useCallback(async()=>{r(!0);try{a(await te.diagnostics.list())}catch(l){N.error({title:"Could not read local problems",description:He(l)})}finally{r(!1)}},[]);m.useEffect(()=>{s&&h()},[h,s]);const f=m.useMemo(()=>({all:n.length,errors:n.filter(l=>l.level==="error").length}),[n]),p=Qe({features:Mt,data:n,columns:Et,onSortingChange:c,state:{sorting:o}}),u=async()=>{if(window.confirm("Delete the local problem history? This cannot be undone."))try{await te.diagnostics.clear(),a([])}catch(l){N.error({title:"Could not clear local problems",description:He(l)})}};return e.jsx(H,{open:s,onOpenChange:t,children:e.jsxs(V,{className:"ai-log-dialog",children:[e.jsxs("header",{className:"ai-log-header",children:[e.jsxs("div",{children:[e.jsx(W,{children:"Problem history"}),e.jsx(Y,{children:"Recent local failures on this machine. Prompts and file contents are never recorded."})]}),e.jsxs("div",{className:"ai-log-header-actions",children:[e.jsxs(w,{variant:"outline",size:"sm",disabled:i,onClick:()=>{h()},children:[i?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," Refresh"]}),e.jsxs(w,{variant:"ghost",size:"sm",disabled:n.length===0,onClick:()=>{u()},children:[e.jsx(Ce,{})," Clear"]}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close problem history"}),children:e.jsx(Se,{})})]})]}),n.length>0&&e.jsxs("div",{className:"ai-log-totals",children:[e.jsxs("span",{children:[e.jsx("strong",{children:f.all})," recorded"]}),e.jsxs("span",{children:[e.jsx("strong",{children:f.errors})," errors"]})]}),e.jsxs("div",{className:"ai-log-body",children:[i&&n.length===0&&e.jsxs("div",{className:"view-loading",role:"status",children:[e.jsx(X,{className:"spinner"})," ",e.jsx(Me,{text:"Reading problems…"})]}),!i&&n.length===0&&e.jsx("p",{className:"ai-log-empty",children:"No local problems recorded yet. Failed Git, file, and network operations will show up here."}),n.length>0&&e.jsx("div",{className:"ai-log-table-wrap",children:e.jsxs(ls,{children:[e.jsx(cs,{children:p.getHeaderGroups().map(l=>e.jsx(ue,{children:l.headers.map(x=>e.jsx(hs,{children:x.isPlaceholder?null:e.jsx(p.FlexRender,{header:x})},x.id))},l.id))}),e.jsx(ds,{children:p.getRowModel().rows.map(l=>e.jsx(ue,{className:l.original.level==="error"?"ai-log-row-failed":void 0,children:l.getAllCells().map(x=>e.jsx(us,{children:e.jsx(p.FlexRender,{cell:x})},x.id))},l.id))})]})})]})]})})}const At=new Set(["Control","Shift","Alt","Meta"]);function It({preferences:s,onPreference:t}){const n=m.useMemo(()=>Is(s.shortcutOverrides),[s.shortcutOverrides]),[a,i]=m.useState(null),r=Object.keys(s.shortcutOverrides).length>0,o=m.useMemo(()=>["General","Commit","Editor","Tabs"].map(u=>({category:u,definitions:xe.filter(l=>l.category===u)})),[]),c=m.useMemo(()=>[...new Set(Oe.map(u=>u.category))].map(u=>({category:u,items:Oe.filter(l=>l.category===u)})),[]),h=(p,u)=>{if(u===n[p]){i(null);return}const l=Ts(p,u,n);if(l){const v=l==="reserved"?`${Le(u)} is reserved for a fixed shortcut.`:`${Le(u)} is already used by "${xe.find(y=>y.id===l).label}".`;i({id:p,message:v});return}i(null);const x=xe.find(v=>v.id===p),j={...s.shortcutOverrides};u===x.defaultCombo?delete j[p]:j[p]=u,t({shortcutOverrides:j})},f=p=>{i(null);const u={...s.shortcutOverrides};delete u[p],t({shortcutOverrides:u})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Show and focus from anywhere"}),e.jsx("span",{children:"Double-tap Control to bring OpenTig to the front, even while another app is focused."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Show and focus from anywhere","aria-checked":s.doubleControlShortcutEnabled,className:"settings-switch",onClick:()=>t({doubleControlShortcutEnabled:!s.doubleControlShortcutEnabled}),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Keyboard shortcuts"}),e.jsx("span",{children:"Click a shortcut, then press a new key combination. Press Escape to cancel."})]}),r&&e.jsxs(w,{variant:"outline",size:"sm",className:"shortcuts-reset-all",onClick:()=>{i(null),t({shortcutOverrides:{}})},children:[e.jsx(qe,{})," Reset all to defaults"]}),o.map(({category:p,definitions:u})=>e.jsxs("div",{className:"shortcuts-group",children:[e.jsx("div",{className:"shortcuts-group-heading",children:p}),u.map(l=>e.jsxs("div",{className:"shortcuts-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:l.label}),e.jsx("span",{children:l.description})]}),e.jsx(Tt,{combo:n[l.id],allowBare:l.allowBare,isCustom:s.shortcutOverrides[l.id]!==void 0,error:a?.id===l.id?a.message:null,onCapture:x=>h(l.id,x),onReset:()=>f(l.id)})]},l.id))]},p))]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Fixed shortcuts"}),e.jsx("span",{children:"These follow platform and file-manager conventions and cannot be changed."})]}),c.map(({category:p,items:u})=>e.jsxs("div",{className:"shortcuts-group",children:[e.jsx("div",{className:"shortcuts-group-heading",children:p}),u.map(l=>e.jsxs("div",{className:"shortcuts-fixed-row",children:[e.jsx("span",{children:l.label}),e.jsx(Je,{children:l.combo.split(" / ").flatMap((x,j)=>[...j>0?[e.jsx("span",{className:"shortcuts-fixed-sep",children:" / "},`sep-${x}`)]:[],...x.split(" + ").map((v,y)=>e.jsx(Ze,{children:v},`${x}-${y}`))])})]},l.combo+l.label))]},p))]})]})}function Tt({combo:s,allowBare:t,isCustom:n,error:a,onCapture:i,onReset:r}){const[o,c]=m.useState(!1);return m.useEffect(()=>{if(!o)return;const h=f=>{if(f.preventDefault(),f.stopPropagation(),f.key==="Escape"){c(!1);return}if(At.has(f.key))return;const p=Os(f);c(!1),p&&Ls(p,t)&&i(p)};return window.addEventListener("keydown",h,!0),()=>window.removeEventListener("keydown",h,!0)},[o,t,i]),e.jsxs("div",{className:"shortcut-recorder",children:[a&&e.jsx("span",{className:"shortcut-recorder-error",children:a}),e.jsx("button",{type:"button",className:`shortcut-recorder-button ${o?"listening":""} ${a?"error":""}`,onClick:()=>c(!0),onBlur:()=>c(!1),children:o?"Press a key…":e.jsx(Je,{children:s.split("+").map(h=>e.jsx(Ze,{children:h},h))})}),n&&e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-xs","aria-label":"Reset to default",onClick:r}),children:e.jsx(qe,{})}),e.jsx(_,{children:"Reset to default"})]})]})}var G=(s=>(s[s.Border=-1]="Border",s[s.Data=0]="Data",s[s.Function=1]="Function",s[s.Position=2]="Position",s[s.Timing=3]="Timing",s[s.Alignment=4]="Alignment",s))(G||{});const Ot=[0,1],gs=[1,0],ms=[2,3],ps=[3,2],Lt={L:Ot,M:gs,Q:ms,H:ps},Pt=/^\d*$/,$t=/^[A-Z0-9 $%*+./:-]*$/,ve="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Re=1,Ae=40,Ve=3,Ft=3,ae=40,zt=10,fs=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],xs=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];class _t{constructor(t,n,a,i){if(this.version=t,this.ecc=n,t<Re||t>Ae)throw new RangeError("Version value out of range");if(i<-1||i>7)throw new RangeError("Mask value out of range");this.size=t*4+17;const r=Array.from({length:this.size}).fill(!1);for(let c=0;c<this.size;c++)this.modules.push(r.slice()),this.types.push(r.map(()=>0));this.drawFunctionPatterns();const o=this.addEccAndInterleave(a);if(this.drawCodewords(o),i===-1){let c=1e9;for(let h=0;h<8;h++){this.applyMask(h),this.drawFormatBits(h);const f=this.getPenaltyScore();f<c&&(i=h,c=f),this.applyMask(h)}}this.mask=i,this.applyMask(i),this.drawFormatBits(i)}size;mask;modules=[];types=[];getModule(t,n){return t>=0&&t<this.size&&n>=0&&n<this.size&&this.modules[n][t]}drawFunctionPatterns(){for(let a=0;a<this.size;a++)this.setFunctionModule(6,a,a%2===0,G.Timing),this.setFunctionModule(a,6,a%2===0,G.Timing);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const t=this.getAlignmentPatternPositions(),n=t.length;for(let a=0;a<n;a++)for(let i=0;i<n;i++)a===0&&i===0||a===0&&i===n-1||a===n-1&&i===0||this.drawAlignmentPattern(t[a],t[i]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(t){const n=this.ecc[1]<<3|t;let a=n;for(let r=0;r<10;r++)a=a<<1^(a>>>9)*1335;const i=(n<<10|a)^21522;for(let r=0;r<=5;r++)this.setFunctionModule(8,r,$(i,r));this.setFunctionModule(8,7,$(i,6)),this.setFunctionModule(8,8,$(i,7)),this.setFunctionModule(7,8,$(i,8));for(let r=9;r<15;r++)this.setFunctionModule(14-r,8,$(i,r));for(let r=0;r<8;r++)this.setFunctionModule(this.size-1-r,8,$(i,r));for(let r=8;r<15;r++)this.setFunctionModule(8,this.size-15+r,$(i,r));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let t=this.version;for(let a=0;a<12;a++)t=t<<1^(t>>>11)*7973;const n=this.version<<12|t;for(let a=0;a<18;a++){const i=$(n,a),r=this.size-11+a%3,o=Math.floor(a/3);this.setFunctionModule(r,o,i),this.setFunctionModule(o,r,i)}}drawFinderPattern(t,n){for(let a=-4;a<=4;a++)for(let i=-4;i<=4;i++){const r=Math.max(Math.abs(i),Math.abs(a)),o=t+i,c=n+a;o>=0&&o<this.size&&c>=0&&c<this.size&&this.setFunctionModule(o,c,r!==2&&r!==4,G.Position)}}drawAlignmentPattern(t,n){for(let a=-2;a<=2;a++)for(let i=-2;i<=2;i++)this.setFunctionModule(t+i,n+a,Math.max(Math.abs(i),Math.abs(a))!==1,G.Alignment)}setFunctionModule(t,n,a,i=G.Function){this.modules[n][t]=a,this.types[n][t]=i}addEccAndInterleave(t){const n=this.version,a=this.ecc;if(t.length!==he(n,a))throw new RangeError("Invalid argument");const i=xs[a[0]][n],r=fs[a[0]][n],o=Math.floor(ke(n)/8),c=i-o%i,h=Math.floor(o/i),f=[],p=Kt(r);for(let l=0,x=0;l<i;l++){const j=t.slice(x,x+h-r+(l<c?0:1));x+=j.length;const v=Xt(j,p);l<c&&j.push(0),f.push(j.concat(v))}const u=[];for(let l=0;l<f[0].length;l++)f.forEach((x,j)=>{(l!==h-r||j>=c)&&u.push(x[l])});return u}drawCodewords(t){if(t.length!==Math.floor(ke(this.version)/8))throw new RangeError("Invalid argument");let n=0;for(let a=this.size-1;a>=1;a-=2){a===6&&(a=5);for(let i=0;i<this.size;i++)for(let r=0;r<2;r++){const o=a-r,h=(a+1&2)===0?this.size-1-i:i;!this.types[h][o]&&n<t.length*8&&(this.modules[h][o]=$(t[n>>>3],7-(n&7)),n++)}}}applyMask(t){if(t<0||t>7)throw new RangeError("Mask value out of range");for(let n=0;n<this.size;n++)for(let a=0;a<this.size;a++){let i;switch(t){case 0:i=(a+n)%2===0;break;case 1:i=n%2===0;break;case 2:i=a%3===0;break;case 3:i=(a+n)%3===0;break;case 4:i=(Math.floor(a/3)+Math.floor(n/2))%2===0;break;case 5:i=a*n%2+a*n%3===0;break;case 6:i=(a*n%2+a*n%3)%2===0;break;case 7:i=((a+n)%2+a*n%3)%2===0;break;default:throw new Error("Unreachable")}!this.types[n][a]&&i&&(this.modules[n][a]=!this.modules[n][a])}}getPenaltyScore(){let t=0;for(let r=0;r<this.size;r++){let o=!1,c=0;const h=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[r][f]===o?(c++,c===5?t+=Ve:c>5&&t++):(this.finderPenaltyAddHistory(c,h),o||(t+=this.finderPenaltyCountPatterns(h)*ae),o=this.modules[r][f],c=1);t+=this.finderPenaltyTerminateAndCount(o,c,h)*ae}for(let r=0;r<this.size;r++){let o=!1,c=0;const h=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[f][r]===o?(c++,c===5?t+=Ve:c>5&&t++):(this.finderPenaltyAddHistory(c,h),o||(t+=this.finderPenaltyCountPatterns(h)*ae),o=this.modules[f][r],c=1);t+=this.finderPenaltyTerminateAndCount(o,c,h)*ae}for(let r=0;r<this.size-1;r++)for(let o=0;o<this.size-1;o++){const c=this.modules[r][o];c===this.modules[r][o+1]&&c===this.modules[r+1][o]&&c===this.modules[r+1][o+1]&&(t+=Ft)}let n=0;for(const r of this.modules)n=r.reduce((o,c)=>o+(c?1:0),n);const a=this.size*this.size,i=Math.ceil(Math.abs(n*20-a*10)/a)-1;return t+=i*zt,t}getAlignmentPatternPositions(){if(this.version===1)return[];{const t=Math.floor(this.version/7)+2,n=this.version===32?26:Math.ceil((this.version*4+4)/(t*2-2))*2,a=[6];for(let i=this.size-7;a.length<t;i-=n)a.splice(1,0,i);return a}}finderPenaltyCountPatterns(t){const n=t[1],a=n>0&&t[2]===n&&t[3]===n*3&&t[4]===n&&t[5]===n;return(a&&t[0]>=n*4&&t[6]>=n?1:0)+(a&&t[6]>=n*4&&t[0]>=n?1:0)}finderPenaltyTerminateAndCount(t,n,a){return t&&(this.finderPenaltyAddHistory(n,a),n=0),n+=this.size,this.finderPenaltyAddHistory(n,a),this.finderPenaltyCountPatterns(a)}finderPenaltyAddHistory(t,n){n[0]===0&&(t+=this.size),n.pop(),n.unshift(t)}}function D(s,t,n){if(t<0||t>31||s>>>t)throw new RangeError("Value out of range");for(let a=t-1;a>=0;a--)n.push(s>>>a&1)}function $(s,t){return(s>>>t&1)!==0}class Ie{constructor(t,n,a){if(this.mode=t,this.numChars=n,this.bitData=a,n<0)throw new RangeError("Invalid argument");this.bitData=a.slice()}getData(){return this.bitData.slice()}}const Dt=[1,10,12,14],Bt=[2,9,11,13],Ut=[4,8,16,16];function js(s,t){return s[Math.floor((t+7)/17)+1]}function vs(s){const t=[];for(const n of s)D(n,8,t);return new Ie(Ut,s.length,t)}function Gt(s){if(!bs(s))throw new RangeError("String contains non-numeric characters");const t=[];for(let n=0;n<s.length;){const a=Math.min(s.length-n,3);D(Number.parseInt(s.substring(n,n+a),10),a*3+1,t),n+=a}return new Ie(Dt,s.length,t)}function Ht(s){if(!ys(s))throw new RangeError("String contains unencodable characters in alphanumeric mode");const t=[];let n;for(n=0;n+2<=s.length;n+=2){let a=ve.indexOf(s.charAt(n))*45;a+=ve.indexOf(s.charAt(n+1)),D(a,11,t)}return n<s.length&&D(ve.indexOf(s.charAt(n)),6,t),new Ie(Bt,s.length,t)}function Vt(s){return s===""?[]:bs(s)?[Gt(s)]:ys(s)?[Ht(s)]:[vs(Yt(s))]}function bs(s){return Pt.test(s)}function ys(s){return $t.test(s)}function Wt(s,t){let n=0;for(const a of s){const i=js(a.mode,t);if(a.numChars>=1<<i)return Number.POSITIVE_INFINITY;n+=4+i+a.bitData.length}return n}function Yt(s){s=encodeURI(s);const t=[];for(let n=0;n<s.length;n++)s.charAt(n)!=="%"?t.push(s.charCodeAt(n)):(t.push(Number.parseInt(s.substring(n+1,n+3),16)),n+=2);return t}function ke(s){if(s<Re||s>Ae)throw new RangeError("Version number out of range");let t=(16*s+128)*s+64;if(s>=2){const n=Math.floor(s/7)+2;t-=(25*n-10)*n-55,s>=7&&(t-=36)}return t}function he(s,t){return Math.floor(ke(s)/8)-fs[t[0]][s]*xs[t[0]][s]}function Kt(s){if(s<1||s>255)throw new RangeError("Degree out of range");const t=[];for(let a=0;a<s-1;a++)t.push(0);t.push(1);let n=1;for(let a=0;a<s;a++){for(let i=0;i<t.length;i++)t[i]=Ne(t[i],n),i+1<t.length&&(t[i]^=t[i+1]);n=Ne(n,2)}return t}function Xt(s,t){const n=t.map(a=>0);for(const a of s){const i=a^n.shift();n.push(0),t.forEach((r,o)=>n[o]^=Ne(r,i))}return n}function Ne(s,t){if(s>>>8||t>>>8)throw new RangeError("Byte out of range");let n=0;for(let a=7;a>=0;a--)n=n<<1^(n>>>7)*285,n^=(t>>>a&1)*s;return n}function qt(s,t,n=1,a=40,i=-1,r=!0){if(!(Re<=n&&n<=a&&a<=Ae)||i<-1||i>7)throw new RangeError("Invalid value");let o,c;for(o=n;;o++){const u=he(o,t)*8,l=Wt(s,o);if(l<=u){c=l;break}if(o>=a)throw new RangeError("Data too long")}for(const u of[gs,ms,ps])r&&c<=he(o,u)*8&&(t=u);const h=[];for(const u of s){D(u.mode[0],4,h),D(u.numChars,js(u.mode,o),h);for(const l of u.getData())h.push(l)}const f=he(o,t)*8;D(0,Math.min(4,f-h.length),h),D(0,(8-h.length%8)%8,h);for(let u=236;h.length<f;u^=253)D(u,8,h);const p=Array.from({length:Math.ceil(h.length/8)},()=>0);return h.forEach((u,l)=>p[l>>>3]|=u<<7-(l&7)),new _t(o,t,p,i)}function Jt(s,t){const{ecc:n="L",boostEcc:a=!1,minVersion:i=1,maxVersion:r=40,maskPattern:o=-1,border:c=1}=t||{},h=typeof s=="string"?Vt(s):Array.isArray(s)?[vs(s)]:void 0;if(!h)throw new Error(`uqr only supports encoding string and binary data, but got: ${typeof s}`);const f=qt(h,Lt[n],i,r,o,a),p=Zt({version:f.version,maskPattern:f.mask,size:f.size,data:f.modules,types:f.types},c);return t?.invert&&(p.data=p.data.map(u=>u.map(l=>!l))),t?.onEncoded?.(p),p}function Zt(s,t=1){if(!t)return s;const{size:n}=s,a=n+t*2;s.size=a,s.data.forEach(r=>{for(let o=0;o<t;o++)r.unshift(!1),r.push(!1)});for(let r=0;r<t;r++)s.data.unshift(Array.from({length:a},o=>!1)),s.data.push(Array.from({length:a},o=>!1));const i=G.Border;s.types.forEach(r=>{for(let o=0;o<t;o++)r.unshift(i),r.push(i)});for(let r=0;r<t;r++)s.types.unshift(Array.from({length:a},o=>i)),s.types.push(Array.from({length:a},o=>i));return s}function We(s){return s.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Qt(s,t={}){const n=Jt(s,t),{pixelSize:a=10,whiteColor:i="white",blackColor:r="black"}=t,o=n.size*a,c=n.size*a;let h=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${c} ${o}">`;const f=[];for(let p=0;p<n.size;p++)for(let u=0;u<n.size;u++){const l=u*a,x=p*a;n.data[p][u]&&f.push(`M${l},${x}h${a}v${a}h-${a}z`)}return h+=`<rect fill="${We(i)}" width="${c}" height="${o}"/>`,h+=`<path fill="${We(r)}" d="${f.join("")}"/>`,h+="</svg>",h}async function en(){const s=await fetch("/api/auth/sessions",{credentials:"include"});if(!s.ok)throw new Error(await Te(s,"Could not load owner sessions."));const t=await s.json();if(!Array.isArray(t.sessions))throw new Error("OpenTig returned an invalid session list.");return t.sessions}async function sn(s){return ws("/api/auth/sessions/revoke",{sessionId:s})}async function tn(){return ws("/api/auth/sessions/revoke-all",{})}async function nn(s,t){const n=await fetch("/api/auth/sessions/rename",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:s,clientName:t})});if(!n.ok)throw new Error(await Te(n,"Could not rename the browser session."))}async function ws(s,t){const n=await fetch(s,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(await Te(n,"Could not revoke the browser session."));const a=await n.json();if(!Number.isSafeInteger(a.revokedCount)||Number(a.revokedCount)<0)throw new Error("OpenTig returned an invalid revocation result.");return Number(a.revokedCount)}async function Te(s,t){try{const n=await s.json();return typeof n.error=="string"?n.error:t}catch{return t}}const an={starting:"Starting",ready:"Ready",restarting:"Restarting",failed:"Failed",stopped:"Stopped"};function rn(){const s=window.opentigDesktop?.webAccess,[t,n]=m.useState(null),[a,i]=m.useState([]),[r,o]=m.useState(null),[c,h]=m.useState(""),[f,p]=m.useState(!0),[u,l]=m.useState(null),[x,j]=m.useState(!1),[v,y]=m.useState(null),[S,M]=m.useState(null),[I,C]=m.useState(""),E=m.useCallback(async(g=!0)=>{const T=await Promise.allSettled([s?.getStatus()??Promise.resolve(null),en()]);T[0].status==="fulfilled"?n(T[0].value):g&&N.error({title:"Could not read web access status",description:U(T[0].reason)}),T[1].status==="fulfilled"?i(T[1].value):g&&N.error({title:"Could not read owner sessions",description:U(T[1].reason)}),p(!1)},[s]);m.useEffect(()=>{E();const g=window.setInterval(()=>{E(!1)},2e3);return()=>window.clearInterval(g)},[E]),m.useEffect(()=>{t&&(t.pairingEndpoints.length?t.pairingEndpoints.includes(c)||h(t.pairingEndpoints[0]):h(""))},[c,t]);const R=m.useMemo(()=>r?`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(Qt(r.url,{ecc:"M",border:2}))}`:null,[r]),L=m.useMemo(()=>r?new URLSearchParams(new URL(r.url).hash.slice(1)).get("token")??"":"",[r]);if(f&&(!s||!t)&&a.length===0)return e.jsxs("div",{className:"web-access-loading",role:"status",children:[e.jsx(X,{className:"animate-spin"})," Loading web access…"]});const A=async g=>{if(s){l("toggle"),o(null);try{n(await s.setEnabled(g)),N.success({title:g?"LAN access enabled":"LAN access disabled"})}catch(T){N.error({title:"Could not restart web access",description:U(T)}),await E(!1)}finally{l(null),j(!1)}}},d=async()=>{if(s){l("pair");try{o(await s.createPairingLink(c))}catch(g){N.error({title:"Could not create pairing link",description:U(g)})}finally{l(null)}}},b=async()=>{if(r)try{await Fe(r.url),N.success({title:"Pairing link copied"})}catch(g){N.error({title:"Could not copy pairing link",description:U(g)})}},k=async()=>{if(L)try{await Fe(L),N.success({title:"Pairing code copied"})}catch(g){N.error({title:"Could not copy pairing code",description:U(g)})}},q=async()=>{const g=S,T=I.trim();if(!(!g||!T||T.length>64)){l(`rename:${g.id}`);try{await nn(g.id,T),N.success({title:"Device renamed"}),await E(!1),M(null)}catch(J){N.error({title:"Could not rename device",description:U(J)})}finally{l(null)}}},me=async()=>{const g=v;if(!g)return;const T=g==="all"?"revoke-all":`revoke:${g.id}`;l(T);try{const J=g==="all"?await tn():await sn(g.id);o(null),N.success({title:`${J} browser ${J===1?"session":"sessions"} revoked`}),await E(!1)}catch(J){N.error({title:"Could not revoke session",description:U(J)})}finally{l(null),y(null)}},pe=t?.serverState==="ready",ks=a.filter(g=>g.kind!=="desktop");return e.jsxs("div",{className:"web-access-settings",children:[s&&t&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"web-access-summary",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"LAN access"}),e.jsx("span",{children:"Listen on this computer's network interfaces for trusted local devices."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"LAN access","aria-checked":t.enabled,className:"settings-switch",disabled:u==="toggle"||!pe,onClick:()=>t.enabled?void A(!1):j(!0),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"web-access-facts","aria-live":"polite",children:[e.jsx(ie,{label:"Server status",children:e.jsx(Q,{variant:pe?"secondary":"outline",children:an[t.serverState]})}),e.jsx(ie,{label:"Actual port",children:e.jsx("code",{children:t.actualPort??"Unavailable"})}),e.jsx(ie,{label:"Local endpoint",children:e.jsx(Ye,{value:t.localEndpoint})}),e.jsx(ie,{label:"LAN endpoints",children:e.jsx("div",{className:"web-access-endpoints",children:t.networkEndpoints.length===0?e.jsx("span",{children:"None detected"}):t.networkEndpoints.map(g=>e.jsx(Ye,{value:g,muted:!t.enabled},g))})})]}),t.restartError&&e.jsxs("div",{className:"web-access-error",role:"alert",children:[e.jsx(Ee,{})," ",e.jsx("span",{children:t.restartError})]}),e.jsxs("div",{className:"web-access-actions settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Pair a browser"}),e.jsx("span",{children:"Create a five-minute, one-use link for this computer or a LAN device. The pairing code also works through a same-machine HTTPS tunnel."})]}),e.jsxs(w,{size:"sm",onClick:()=>{d()},disabled:!pe||!c||u!==null,children:[u==="pair"?e.jsx(X,{className:"animate-spin"}):e.jsx(Zs,{})," Create pairing link"]})]}),t.pairingEndpoints.length>0&&e.jsxs("div",{className:"web-access-endpoint-select",children:[e.jsx("label",{htmlFor:"web-access-endpoint",children:"Address to place in the pairing link"}),e.jsxs(re,{value:c,onValueChange:g=>{g&&(h(g),o(null))},disabled:u!==null,children:[e.jsx(oe,{id:"web-access-endpoint",className:"w-full",children:e.jsx(le,{children:c})}),e.jsx(ce,{alignItemWithTrigger:!1,children:e.jsx(Ps,{children:t.pairingEndpoints.map(g=>e.jsx(de,{value:g,children:g},g))})})]})]}),r&&e.jsxs("div",{className:"web-access-pairing",role:"status",children:[e.jsxs("div",{className:"web-access-pairing-copy",children:[e.jsx(rt,{"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"Pairing link ready"}),e.jsxs("span",{children:["Expires ",new Date(r.expiresAt).toLocaleString(),"."]})]})]}),R&&e.jsx("img",{src:R,alt:"QR code for the one-use OpenTig pairing link"}),e.jsxs("div",{className:"web-access-link-row",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:"web-access-link"}),children:r.url}),e.jsx(_,{side:"bottom",children:"One-use link; do not share publicly"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"outline",size:"icon-sm","aria-label":"Copy pairing link",onClick:()=>{b()}}),children:e.jsx($e,{})}),e.jsx(_,{children:"Copy pairing link"})]})]}),e.jsxs("div",{className:"web-access-link-row",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:"web-access-link"}),children:L}),e.jsx(_,{side:"bottom",children:"Paste this code on any /pair page served by this OpenTig instance"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"outline",size:"icon-sm","aria-label":"Copy pairing code",onClick:()=>{k()}}),children:e.jsx($e,{})}),e.jsx(_,{children:"Copy pairing code"})]})]})]})]}),e.jsxs("div",{className:`web-access-session-heading ${s?"settings-field-separated":""}`,children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Owner sessions"}),e.jsx("span",{children:"Desktop authentication stays private. Paired browsers can be disconnected individually."})]}),e.jsxs(w,{variant:"destructive",size:"sm",onClick:()=>y("all"),disabled:ks.length===0||u!==null,children:[e.jsx(ze,{})," Revoke browsers"]})]}),e.jsx("div",{className:"web-access-session-list","aria-live":"polite",children:a.length===0?e.jsx("div",{className:"web-access-empty-session",children:"No owner sessions found."}):a.map(g=>e.jsxs("div",{className:"web-access-session",children:[e.jsx("div",{className:`web-access-session-icon ${g.connected?"connected":""}`,children:g.kind==="desktop"?e.jsx(is,{}):e.jsx(Ys,{})}),e.jsxs("div",{className:"web-access-session-copy",children:[e.jsxs("div",{children:[e.jsx("strong",{children:g.clientName}),g.current&&e.jsx(Q,{variant:"secondary",children:"This session"}),g.kind==="desktop"&&e.jsx(Q,{variant:"outline",children:"Desktop"})]}),e.jsxs("span",{children:[g.connected?`Connected${g.connectionCount>1?` (${g.connectionCount} tabs)`:""}`:g.lastConnectedAt?`Last connected ${on(g.lastConnectedAt)}`:"Not yet connected"," · ",g.browser&&g.os?`${g.browser} on ${g.os}`:g.browser??g.os??ln(g.deviceType),g.viaProxy?" · Via proxy":"",g.remoteAddress?` · ${g.remoteAddress}`:""]})]}),g.kind!=="desktop"&&e.jsxs("div",{className:"web-access-session-controls",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":`Rename ${g.clientName}`,onClick:()=>{M(g),C(g.clientName)},disabled:u!==null}),children:e.jsx(Hs,{})}),e.jsx(_,{children:"Rename this device"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":`Revoke ${g.clientName} session`,onClick:()=>y(g),disabled:u!==null}),children:e.jsx(Ce,{})}),e.jsx(_,{children:"Revoke this browser session"})]})]})]},g.id))}),!s&&e.jsx("p",{className:"web-access-hint",children:"Listener addresses and new pairing links are controlled by the OpenTig desktop app or CLI running the server."}),e.jsx(H,{open:x,onOpenChange:j,children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:"Enable owner-level LAN access?"}),e.jsx(Y,{children:"Any paired browser can edit or delete files and act with your OS user permissions. Use only a trusted LAN or VPN."})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsx(w,{onClick:()=>{A(!0)},disabled:u!==null,children:"Enable LAN access"})]})]})}),e.jsx(H,{open:v!==null,onOpenChange:g=>{g||y(null)},children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:v==="all"?"Revoke all browser sessions?":"Revoke this browser session?"}),e.jsx(Y,{children:v==="all"?"Every paired browser disconnects immediately. The private desktop session remains signed in.":v?.current?"This browser will disconnect immediately and require a new pairing link.":"That browser disconnects immediately and will require a new pairing link."}),v&&v!=="all"&&e.jsx("div",{className:"undo-commit-summary",children:e.jsx("strong",{children:v.clientName})})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsxs(w,{variant:"destructive",onClick:()=>{me()},disabled:u!==null,children:[e.jsx(ze,{})," Revoke"]})]})]})}),e.jsx(H,{open:S!==null,onOpenChange:g=>{g||M(null)},children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:"Rename paired device"}),e.jsx(Y,{children:"Use a name that makes this browser easy to identify later."}),e.jsx("input",{className:"web-access-rename-input",value:I,onChange:g=>C(g.target.value),maxLength:64,"aria-label":"Device name",autoComplete:"off"})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsx(w,{onClick:()=>{q()},disabled:u!==null||!I.trim(),children:"Save"})]})]})})]})}function ie({label:s,children:t}){return e.jsxs("div",{className:"web-access-fact",children:[e.jsx("span",{children:s}),e.jsx("div",{children:t})]})}function Ye({value:s,muted:t=!1}){return s?e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:t?"muted":void 0}),children:s}),e.jsx(_,{side:"bottom",children:t?"Enable LAN access to use this endpoint":s})]}):e.jsx("span",{children:"Unavailable"})}function on(s){const t=new Date(s);return Number.isNaN(t.getTime())?"unknown":t.toLocaleString()}function ln(s){return s==="desktop"?"Desktop browser":s==="mobile"?"Mobile browser":s==="tablet"?"Tablet browser":s==="bot"?"Automated client":"Unknown browser"}function U(s){return s instanceof Error?s.message:String(s)}const cn=[{id:"general",label:"General",icon:$s},{id:"updates",label:"Updates",icon:ge},{id:"shortcuts",label:"Shortcuts",icon:qs},{id:"ai",label:"AI assistance",icon:ht},{id:"diagnostics",label:"Diagnostics",icon:Ee},{id:"webAccess",label:"Web access",icon:at}],dn={updates:{title:"Updates",description:"Check, download, and install new OpenTig releases."},general:{title:"General",description:"OpenTig appearance and behavior."},shortcuts:{title:"Shortcuts",description:"Rebind commands or review the shortcuts that stay fixed."},ai:{title:"AI assistance",description:"Local harness and model used to suggest commit messages and pull-request drafts."},diagnostics:{title:"Diagnostics",description:"Recent local failures on this machine. Prompts and file contents are never recorded."}},hn=[{value:"system",label:"System",icon:is},{value:"light",label:"Light",icon:gt},{value:"dark",label:"Dark",icon:tt}],be=[{value:"geist",label:"Geist",family:"'Geist Variable', sans-serif"},{value:"plus-jakarta-sans",label:"Plus Jakarta Sans",family:"'Plus Jakarta Sans Variable', sans-serif"},{value:"space-grotesk",label:"Space Grotesk",family:"'Space Grotesk Variable', sans-serif"}],ye=[{value:"geist-mono",label:"Geist Mono",family:"'Geist Mono Variable', ui-monospace, monospace"},{value:"jetbrains-mono",label:"JetBrains Mono",family:"'JetBrains Mono Variable', ui-monospace, monospace"},{value:"inconsolata",label:"Inconsolata",family:"'Inconsolata Variable', ui-monospace, monospace"},{value:"departure",label:"Departure Mono",family:"'Departure Mono', ui-monospace, monospace"},{value:"space-grotesk",label:"Space Grotesk",family:"'Space Grotesk Variable', sans-serif"}],un=[{value:"tree",label:"Tree",icon:Fs},{value:"list",label:"List",icon:et}];function kn({preferences:s,onPreference:t,open:n,onOpenChange:a,section:i,onSectionChange:r}){const[o,c]=m.useState([]),[h,f]=m.useState(!1),[p,u]=m.useState(!1),[l,x]=m.useState(!1),j=m.useRef(null),v=bt(),y=v?{duration:0}:{duration:.16,ease:[.22,1,.36,1]},S=m.useCallback(async(d=!1)=>{f(!0);try{c(await te.ai.statuses(d))}catch(b){N.error({title:"Could not check local AI",description:fn(b)})}finally{f(!1)}},[]);m.useEffect(()=>{n&&i==="ai"&&o.length===0&&S()},[S,n,i,o.length]),m.useLayoutEffect(()=>{n&&j.current&&(j.current.scrollTop=0)},[n,i]);const M=s.commitMessageHarness,I=o.find(d=>d.id===M),C=s.commitMessageModels[M]??"default",E=I?.models??[{id:"default",label:"Default (CLI)"}],R=E.some(d=>d.id===C)?E:[...E,{id:C,label:`${C} (unavailable)`}],{title:L,description:A}=i==="webAccess"?{title:"Web access",description:window.opentigDesktop?"Connect trusted browsers locally, over your LAN, or through an HTTPS tunnel.":"Review and disconnect browsers authorised to use this OpenTig server."}:dn[i];return e.jsx(H,{open:n,onOpenChange:a,children:e.jsx(V,{className:"settings-dialog",children:e.jsxs("div",{className:"settings-shell",children:[e.jsxs("aside",{className:"settings-nav",children:[e.jsx("div",{className:"settings-nav-title",children:"Settings"}),cn.map(({id:d,label:b,icon:k})=>e.jsxs("button",{className:`settings-nav-item ${i===d?"active":""}`,onClick:()=>r(d),"aria-current":i===d,children:[e.jsx(k,{})," ",b]},d))]}),e.jsxs("section",{className:"settings-panel",children:[e.jsxs("header",{className:"settings-panel-header",children:[e.jsx(Be,{initial:!1,mode:"wait",children:e.jsxs(Pe.div,{initial:v?!1:{opacity:0,y:4},animate:{opacity:1,y:0},exit:v?{opacity:1}:{opacity:0,y:-3},transition:y,children:[e.jsx(W,{children:L}),e.jsx(Y,{children:A})]},i)}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close settings"}),children:e.jsx(Se,{})})]}),e.jsx("div",{ref:j,className:"settings-panel-body",children:e.jsx(Be,{initial:!1,mode:"wait",children:e.jsx(Pe.div,{className:"settings-panel-section",initial:v?!1:{opacity:0,y:7},animate:{opacity:1,y:0},exit:v?{opacity:1}:{opacity:0,y:-5},transition:y,children:i==="general"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Theme"}),e.jsx("span",{children:"Choose a light, dark, or system appearance."})]}),e.jsx("div",{className:"settings-theme-options",role:"radiogroup","aria-label":"Theme",children:hn.map(({value:d,label:b,icon:k})=>e.jsxs("button",{type:"button",role:"radio","aria-checked":s.theme===d,className:`settings-theme-option ${s.theme===d?"active":""}`,onClick:()=>t({theme:d}),children:[e.jsx(k,{})," ",e.jsx("span",{children:b})]},d))})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Fonts"}),e.jsx("span",{children:"Interface chrome and code, chosen independently. Space Grotesk appears in both lists."})]}),e.jsxs("div",{className:"settings-font-pickers",children:[e.jsxs("label",{className:"settings-font-picker",children:[e.jsx("span",{children:"Interface"}),e.jsxs(re,{value:s.uiFont,onValueChange:d=>{const b=be.find(k=>k.value===d);b&&t({uiFont:b.value})},children:[e.jsx(oe,{className:"settings-font-select","aria-label":"Interface font",style:{fontFamily:be.find(d=>d.value===s.uiFont)?.family},children:e.jsx(le,{})}),e.jsx(ce,{align:"start",alignItemWithTrigger:!1,className:"w-max min-w-[16rem]",children:be.map(d=>e.jsx(de,{value:d.value,children:e.jsx("span",{style:{fontFamily:d.family},children:d.label})},d.value))})]})]}),e.jsxs("label",{className:"settings-font-picker",children:[e.jsx("span",{children:"Code"}),e.jsxs(re,{value:s.monoFont,onValueChange:d=>{const b=ye.find(k=>k.value===d);b&&t({monoFont:b.value})},children:[e.jsx(oe,{className:"settings-font-select","aria-label":"Code font",style:{fontFamily:ye.find(d=>d.value===s.monoFont)?.family},children:e.jsx(le,{})}),e.jsx(ce,{align:"start",alignItemWithTrigger:!1,className:"w-max min-w-[16rem]",children:ye.map(d=>e.jsx(de,{value:d.value,children:e.jsx("span",{style:{fontFamily:d.family},children:d.label})},d.value))})]})]})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Interface size"}),e.jsx("span",{children:"Adjust the zoom for text, icons, and the rest of the application."})]}),e.jsxs("div",{className:"settings-zoom-control",children:[e.jsx("input",{type:"range",min:"80",max:"130",step:"10",value:s.uiZoom,onChange:d=>t({uiZoom:Number(d.target.value)}),"aria-label":"Interface zoom"}),e.jsxs("output",{children:[s.uiZoom,"%"]})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Changes layout"}),e.jsx("span",{children:"Group changed files by folder or show them as a flat list."})]}),e.jsx("div",{className:"settings-theme-options",role:"radiogroup","aria-label":"Changes layout",children:un.map(({value:d,label:b,icon:k})=>e.jsxs("button",{type:"button",role:"radio","aria-checked":s.changesLayout===d,className:`settings-theme-option ${s.changesLayout===d?"active":""}`,onClick:()=>t({changesLayout:d}),children:[e.jsx(k,{})," ",e.jsx("span",{children:b})]},d))})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Remote check interval"}),e.jsx("span",{children:"How often OpenTig fetches remotes so ahead and behind counts stay current. Set to Off to check only when you pull or push."})]}),e.jsxs("div",{className:"settings-zoom-control",children:[e.jsx("input",{type:"range",min:"0",max:_s,step:zs,value:s.remoteFetchIntervalSeconds,onChange:d=>t({remoteFetchIntervalSeconds:Number(d.target.value)}),"aria-label":"Remote check interval"}),e.jsx("output",{children:Ds(s.remoteFetchIntervalSeconds)})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Wrap lines in viewer"}),e.jsx("span",{children:"Wrap long lines to fit the available width."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Wrap lines in viewer","aria-checked":s.wrapLines,className:"settings-switch",onClick:()=>t({wrapLines:!s.wrapLines}),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"settings-field settings-field-separated settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Show files ignored by Git"}),e.jsxs("span",{children:["Include files excluded by ",e.jsx("code",{children:".gitignore"})," rules in the Files view."]})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Show files ignored by Git","aria-checked":s.showDotEnvFiles,className:"settings-switch",onClick:()=>t({showDotEnvFiles:!s.showDotEnvFiles}),children:e.jsx("span",{})})]})]}):i==="updates"?e.jsx(Bs,{}):i==="shortcuts"?e.jsx(It,{preferences:s,onPreference:t}):i==="webAccess"?e.jsx(rn,{}):i==="diagnostics"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Problem history"}),e.jsx("span",{children:"Failed Git, file, and network operations recorded locally. Prompts and file contents are never stored."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>x(!0),children:[e.jsx(Ee,{})," View problems"]})]}),e.jsx(Rt,{open:l,onOpenChange:x})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ai-settings-heading",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Local harness"}),e.jsx("span",{children:"OpenTig uses the selected CLI session. It does not copy or store credentials."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{S(!0)},disabled:h,children:[h?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," ",h?e.jsx(Me,{text:"Checking…"}):"Check again"]})]}),e.jsx("div",{className:"ai-harness-list",role:"radiogroup","aria-label":"Harness for AI assistance",children:["codex","claude","opencode"].map(d=>{const b=o.find(q=>q.id===d),k=M===d;return e.jsxs("button",{type:"button",role:"radio","aria-checked":k,className:`ai-harness-card ${k?"active":""}`,onClick:()=>t({commitMessageHarness:d}),children:[e.jsxs("span",{className:"ai-harness-card-main",children:[e.jsx(Us,{harness:d}),e.jsxs("span",{className:"ai-harness-card-copy",children:[e.jsx("strong",{children:je(d)}),e.jsx("small",{children:b?.version||(h?"Checking…":"Status not checked")})]})]}),e.jsx(Q,{variant:mn(b),className:`ai-status-badge ${b?.availability??"unknown"}`,children:gn(b)}),b?.message&&e.jsx("span",{className:"ai-harness-message",children:b.message})]},d)})}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsxs("strong",{children:[je(M)," model"]}),e.jsx("span",{children:"Default lets the CLI choose. OpenTig remembers a separate selection for each harness."})]}),e.jsxs(re,{value:C,onValueChange:d=>t({commitMessageModels:{...s.commitMessageModels,[M]:d}}),children:[e.jsx(oe,{className:"ai-model-select",children:e.jsx(le,{})}),e.jsx(ce,{children:R.map(d=>e.jsx(de,{value:d.id,children:d.label},d.id))})]}),I?.authStatus==="unauthenticated"&&e.jsxs("p",{className:"ai-login-hint",children:["Sign in from a terminal with ",e.jsx("code",{children:pn(M,I.cliName)})," and check again."]}),I&&!I.installed&&e.jsxs("p",{className:"ai-login-hint",children:["Install ",je(M)," and check its availability again."]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Generation history"}),e.jsx("span",{children:"Outcome, duration, tokens, and cost of recent runs, kept locally for diagnostics."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>u(!0),children:[e.jsx(Gs,{})," View history"]})]}),e.jsx("p",{className:"ai-privacy-note",children:"Only the staged diff, its summary, the branch, and recent subjects are sent to the selected harness. The generated message always remains pending your review, and the history records metadata only."}),e.jsx(Nt,{open:p,onOpenChange:u})]})},i)})})]})]})})})}function gn(s){return s?s.installed?s.authStatus==="unauthenticated"?"Not authenticated":s.availability==="ready"?"Available":"Check":"Not installed":"Not checked"}function mn(s){return s?!s.installed||s.authStatus==="unauthenticated"||s.availability==="error"?"destructive":s.availability==="ready"?"default":"secondary":"outline"}function pn(s,t){return s==="codex"?"codex login":s==="claude"?"claude auth login":t==="opencode2"?"opencode2 auth login":"opencode auth login"}function fn(s){return s instanceof Error?s.message:"An unexpected error occurred."}export{kn as SettingsDialog};
9
+ `),()=>{c.current?.removeAttribute("data-motion-pop-id"),L.contains(R)&&L.removeChild(R)}},[t]),e.jsx(ft,{isPresent:t,childRef:c,sizeRef:h,pop:r,children:r===!1?s:m.cloneElement(s,{ref:u})})}const jt=({children:s,initial:t,isPresent:n,onExitComplete:a,custom:i,presenceAffectsLayout:r,mode:o,anchorX:c,anchorY:h,root:f})=>{const p=Ke(vt),u=m.useId(),l=m.useRef(n),x=m.useRef(a);Xe(()=>{l.current=n,x.current=a});let j=!0,v=m.useMemo(()=>(j=!1,{id:u,initial:t,isPresent:n,custom:i,onExitComplete:y=>{p.set(y,!0);for(const S of p.values())if(!S)return;a&&a()},register:y=>(p.set(y,!1),()=>{p.delete(y),!l.current&&!p.size&&x.current?.()})}),[n,p,a]);return r&&j&&(v={...v}),m.useMemo(()=>{p.forEach((y,S)=>p.set(S,!1))},[n]),m.useEffect(()=>{!n&&!p.size&&a&&a()},[n]),s=e.jsx(xt,{pop:o==="popLayout",isPresent:n,anchorX:c,anchorY:h,root:f,children:s}),e.jsx(Cs.Provider,{value:v,children:s})};function vt(){return new Map}const ne=s=>s.key||"";function De(s){const t=[];return m.Children.forEach(s,n=>{m.isValidElement(n)&&t.push(n)}),t}const Be=({children:s,custom:t,initial:n=!0,onExitComplete:a,presenceAffectsLayout:i=!0,mode:r="sync",propagate:o=!1,anchorX:c="left",anchorY:h="top",root:f})=>{const[p,u]=Ss(o),l=m.useMemo(()=>De(s),[s]),x=o&&!p?[]:l.map(ne),j=m.useRef(!0),v=m.useRef(l),y=Ke(()=>new Map),S=m.useRef(new Set),[M,I]=m.useState(l),[C,E]=m.useState(l);Xe(()=>{j.current=!1,v.current=l;for(let A=0;A<C.length;A++){const d=ne(C[A]);x.includes(d)?(y.delete(d),S.current.delete(d)):y.get(d)!==!0&&y.set(d,!1)}},[C,x.length,x.join("-")]);const R=[];if(l!==M){let A=[...l];for(let d=0;d<C.length;d++){const b=C[d],k=ne(b);x.includes(k)||(A.splice(d,0,b),R.push(b))}return r==="wait"&&R.length&&(A=R),E(De(A)),I(l),null}const{forceRender:L}=m.useContext(Ms);return e.jsx(e.Fragment,{children:C.map(A=>{const d=ne(A),b=o&&!p?!1:l===C||x.includes(d),k=()=>{if(S.current.has(d))return;if(y.has(d))S.current.add(d),y.set(d,!0);else return;let q=!0;y.forEach(me=>{me||(q=!1)}),q&&(L?.(),E(v.current),o&&u?.(),a&&a())};return e.jsx(jt,{isPresent:b,initial:!j.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:r,root:f,onExitComplete:b?void 0:k,anchorX:c,anchorY:h,children:A},d)})})};function bt(){!Es.current&&Rs();const[s]=m.useState(As.current);return s}function ls({className:s,...t}){return e.jsx("div",{"data-slot":"table-container",className:"relative w-full",children:e.jsx("table",{"data-slot":"table",className:ee("w-full caption-bottom text-xs",s),...t})})}function cs({className:s,...t}){return e.jsx("thead",{"data-slot":"table-header",className:ee("[&_tr]:border-b",s),...t})}function ds({className:s,...t}){return e.jsx("tbody",{"data-slot":"table-body",className:ee("[&_tr:last-child]:border-0",s),...t})}function ue({className:s,...t}){return e.jsx("tr",{"data-slot":"table-row",className:ee("border-b border-border transition-colors hover:bg-muted/40 data-[state=selected]:bg-muted",s),...t})}function hs({className:s,...t}){return e.jsx("th",{"data-slot":"table-head",className:ee("h-8 whitespace-nowrap px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",s),...t})}function us({className:s,...t}){return e.jsx("td",{"data-slot":"table-cell",className:ee("px-2 py-1.5 align-middle [&:has([role=checkbox])]:pr-0",s),...t})}const yt={"commit-message":"commit message","pull-request-draft":"pull request draft"};function B({column:s,label:t}){const n=s.getIsSorted();return e.jsxs("button",{type:"button",className:"ai-log-sort-button",onClick:()=>s.toggleSorting(n==="asc"),children:[t,n==="asc"&&e.jsx(rs,{size:13}),n==="desc"&&e.jsx(os,{size:13}),!n&&e.jsx(as,{size:13,className:"ai-log-sort-idle"})]})}const wt=es({rowSortingFeature:ts,sortedRowModel:ns()}),P=ss(),kt=P.columns([P.accessor("status",{header:({column:s})=>e.jsx(B,{column:s,label:"Status"}),cell:({getValue:s})=>{const t=s();return e.jsx(Q,{variant:t==="success"?"secondary":t==="cancelled"?"outline":"destructive",children:t})}}),P.accessor("harness",{header:({column:s})=>e.jsx(B,{column:s,label:"Harness"}),cell:({getValue:s})=>e.jsx("strong",{children:s()})}),P.accessor("model",{header:({column:s})=>e.jsx(B,{column:s,label:"Model"}),cell:({getValue:s})=>e.jsx("span",{className:"ai-log-model",children:s()})}),P.accessor("operation",{header:({column:s})=>e.jsx(B,{column:s,label:"Task"}),cell:({getValue:s})=>yt[s()]}),P.accessor(s=>new Date(s.at).getTime(),{id:"at",header:({column:s})=>e.jsx(B,{column:s,label:"Date"}),cell:({row:s})=>e.jsx("time",{dateTime:s.original.at,children:new Date(s.original.at).toLocaleString()})}),P.accessor("durationMs",{header:({column:s})=>e.jsx(B,{column:s,label:"Duration"}),cell:({getValue:s})=>`${(s()/1e3).toFixed(1)}s`}),P.accessor(s=>(s.usage.inputTokens??0)+(s.usage.outputTokens??0),{id:"usage",header:({column:s})=>e.jsx(B,{column:s,label:"Usage"}),cell:({row:s})=>St(s.original)}),P.accessor("stagedFileCount",{header:({column:s})=>e.jsx(B,{column:s,label:"Staged"}),cell:({getValue:s})=>s()??"—"}),P.display({id:"notes",header:"Notes",cell:({row:s})=>{const t=s.original,n=[];return t.errorCode&&n.push({key:"error",text:t.errorCode,tone:"error"}),t.errorMessage&&n.push({key:"error-message",text:t.errorMessage,tone:"error",detail:t.errorMessage}),t.splitOffered===!0&&n.push({key:"split",text:`split: ${t.splitGroups} commits`}),t.splitRejectedReason&&n.push({key:"rejected",text:`split refused: ${t.splitRejectedReason}`,tone:"warn",detail:t.splitRejectedReason}),t.splitBlockedReason&&n.push({key:"blocked",text:`no split: ${t.splitBlockedReason}`,detail:t.splitBlockedReason}),t.contextTruncated===!0&&n.push({key:"truncated",text:"context trimmed"}),n.length===0?null:e.jsx("div",{className:"ai-log-row-notes",children:n.map(a=>e.jsx(Ct,{text:a.text,tone:a.tone,detail:a.detail},a.key))})}})]);function Nt({open:s,onOpenChange:t}){const[n,a]=m.useState([]),[i,r]=m.useState(!1),[o,c]=m.useState([]),h=m.useCallback(async()=>{r(!0);try{a(await te.ai.log())}catch(l){N.error({title:"Could not read the AI history",description:Ge(l)})}finally{r(!1)}},[]);m.useEffect(()=>{s&&h()},[h,s]);const f=m.useMemo(()=>{const l=n.filter(x=>x.status==="failed").length;return{runs:n.length,failed:l,tokens:n.reduce((x,j)=>x+(j.usage.inputTokens??0)+(j.usage.outputTokens??0),0),cost:n.reduce((x,j)=>x+(j.usage.costUsd??0),0),costed:n.filter(x=>x.usage.costUsd!==null).length}},[n]),p=Qe({features:wt,data:n,columns:kt,onSortingChange:c,state:{sorting:o}}),u=async()=>{if(window.confirm("Delete the whole AI history? This cannot be undone."))try{await te.ai.clearLog(),a([])}catch(l){N.error({title:"Could not clear the AI history",description:Ge(l)})}};return e.jsx(H,{open:s,onOpenChange:t,children:e.jsxs(V,{className:"ai-log-dialog",children:[e.jsxs("header",{className:"ai-log-header",children:[e.jsxs("div",{children:[e.jsx(W,{children:"AI history"}),e.jsx(Y,{children:"Recent generations on this machine. Prompts and file contents are never recorded."})]}),e.jsxs("div",{className:"ai-log-header-actions",children:[e.jsxs(w,{variant:"outline",size:"sm",disabled:i,onClick:()=>{h()},children:[i?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," Refresh"]}),e.jsxs(w,{variant:"ghost",size:"sm",disabled:n.length===0,onClick:()=>{u()},children:[e.jsx(Ce,{})," Clear"]}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close AI history"}),children:e.jsx(Se,{})})]})]}),n.length>0&&e.jsxs("div",{className:"ai-log-totals",children:[e.jsxs("span",{children:[e.jsx("strong",{children:f.runs})," runs"]}),e.jsxs("span",{children:[e.jsx("strong",{children:f.failed})," failed"]}),e.jsxs("span",{children:[e.jsx("strong",{children:we(f.tokens)})," tokens"]}),f.costed>0&&e.jsxs("span",{children:[e.jsxs("strong",{children:["$",f.cost.toFixed(4)]})," reported by ",f.costed," of ",f.runs]})]}),e.jsxs("div",{className:"ai-log-body",children:[i&&n.length===0&&e.jsxs("div",{className:"view-loading",role:"status",children:[e.jsx(X,{className:"spinner"})," ",e.jsx(Me,{text:"Reading history…"})]}),!i&&n.length===0&&e.jsx("p",{className:"ai-log-empty",children:"No generations recorded yet. Generate a commit message and it will show up here."}),n.length>0&&e.jsx("div",{className:"ai-log-table-wrap",children:e.jsxs(ls,{children:[e.jsx(cs,{children:p.getHeaderGroups().map(l=>e.jsx(ue,{children:l.headers.map(x=>e.jsx(hs,{children:x.isPlaceholder?null:e.jsx(p.FlexRender,{header:x})},x.id))},l.id))}),e.jsx(ds,{children:p.getRowModel().rows.map(l=>e.jsx(ue,{className:l.original.status==="failed"?"ai-log-row-failed":void 0,children:l.getAllCells().map(x=>e.jsx(us,{children:e.jsx(p.FlexRender,{cell:x})},x.id))},l.id))})]})})]})]})})}const Ue=140;function Ct({text:s,tone:t,detail:n}){const[a,i]=m.useState(!1),r=s.length>Ue?`${s.slice(0,Ue-1)}…`:s,o=`ai-log-note ${t??""}`;return n?e.jsxs(e.Fragment,{children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("button",{type:"button",className:o,onClick:()=>i(!0),"aria-label":"Read generation details"}),children:r}),e.jsx(_,{className:"max-w-md",children:n})]}),e.jsx(H,{open:a,onOpenChange:i,children:e.jsx(V,{className:"name-dialog",children:e.jsxs("div",{className:"name-dialog-content",children:[e.jsx(W,{children:"Generation details"}),e.jsx(Y,{className:"whitespace-pre-wrap break-words",children:n}),e.jsx("div",{className:"name-dialog-actions",children:e.jsx(K,{render:e.jsx(w,{variant:"outline"}),children:"Close"})})]})})})]}):e.jsx("span",{className:o,children:r})}function St(s){const{inputTokens:t,outputTokens:n,costUsd:a}=s.usage;if(t===null&&n===null)return"no usage reported";const i=`${we(t??0)} in · ${we(n??0)} out`;return a===null?i:`${i} · $${a.toFixed(4)}`}function we(s){return s>=1e3?`${(s/1e3).toFixed(1)}k`:String(s)}function Ge(s){return s instanceof Error?s.message:"An unexpected error occurred."}function se({column:s,label:t}){const n=s.getIsSorted();return e.jsxs("button",{type:"button",className:"ai-log-sort-button",onClick:()=>s.toggleSorting(n==="asc"),children:[t,n==="asc"&&e.jsx(rs,{size:13}),n==="desc"&&e.jsx(os,{size:13}),!n&&e.jsx(as,{size:13,className:"ai-log-sort-idle"})]})}const Mt=es({rowSortingFeature:ts,sortedRowModel:ns()}),Z=ss(),Et=Z.columns([Z.accessor("level",{header:({column:s})=>e.jsx(se,{column:s,label:"Level"}),cell:({getValue:s})=>{const t=s();return e.jsx(Q,{variant:t==="warn"?"outline":"destructive",children:t})}}),Z.accessor("operation",{header:({column:s})=>e.jsx(se,{column:s,label:"Operation"}),cell:({getValue:s})=>e.jsx("strong",{children:s()})}),Z.accessor("code",{header:({column:s})=>e.jsx(se,{column:s,label:"Code"}),cell:({getValue:s})=>s()??"—"}),Z.accessor(s=>new Date(s.at).getTime(),{id:"at",header:({column:s})=>e.jsx(se,{column:s,label:"Date"}),cell:({row:s})=>e.jsx("time",{dateTime:s.original.at,children:new Date(s.original.at).toLocaleString()})}),Z.accessor("message",{header:({column:s})=>e.jsx(se,{column:s,label:"Message"}),cell:({getValue:s})=>e.jsx("span",{className:"ai-log-model",children:s()})})]);function He(s){return s instanceof Error?s.message:"An unexpected error occurred."}function Rt({open:s,onOpenChange:t}){const[n,a]=m.useState([]),[i,r]=m.useState(!1),[o,c]=m.useState([]),h=m.useCallback(async()=>{r(!0);try{a(await te.diagnostics.list())}catch(l){N.error({title:"Could not read local problems",description:He(l)})}finally{r(!1)}},[]);m.useEffect(()=>{s&&h()},[h,s]);const f=m.useMemo(()=>({all:n.length,errors:n.filter(l=>l.level==="error").length}),[n]),p=Qe({features:Mt,data:n,columns:Et,onSortingChange:c,state:{sorting:o}}),u=async()=>{if(window.confirm("Delete the local problem history? This cannot be undone."))try{await te.diagnostics.clear(),a([])}catch(l){N.error({title:"Could not clear local problems",description:He(l)})}};return e.jsx(H,{open:s,onOpenChange:t,children:e.jsxs(V,{className:"ai-log-dialog",children:[e.jsxs("header",{className:"ai-log-header",children:[e.jsxs("div",{children:[e.jsx(W,{children:"Problem history"}),e.jsx(Y,{children:"Recent local failures on this machine. Prompts and file contents are never recorded."})]}),e.jsxs("div",{className:"ai-log-header-actions",children:[e.jsxs(w,{variant:"outline",size:"sm",disabled:i,onClick:()=>{h()},children:[i?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," Refresh"]}),e.jsxs(w,{variant:"ghost",size:"sm",disabled:n.length===0,onClick:()=>{u()},children:[e.jsx(Ce,{})," Clear"]}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close problem history"}),children:e.jsx(Se,{})})]})]}),n.length>0&&e.jsxs("div",{className:"ai-log-totals",children:[e.jsxs("span",{children:[e.jsx("strong",{children:f.all})," recorded"]}),e.jsxs("span",{children:[e.jsx("strong",{children:f.errors})," errors"]})]}),e.jsxs("div",{className:"ai-log-body",children:[i&&n.length===0&&e.jsxs("div",{className:"view-loading",role:"status",children:[e.jsx(X,{className:"spinner"})," ",e.jsx(Me,{text:"Reading problems…"})]}),!i&&n.length===0&&e.jsx("p",{className:"ai-log-empty",children:"No local problems recorded yet. Failed Git, file, and network operations will show up here."}),n.length>0&&e.jsx("div",{className:"ai-log-table-wrap",children:e.jsxs(ls,{children:[e.jsx(cs,{children:p.getHeaderGroups().map(l=>e.jsx(ue,{children:l.headers.map(x=>e.jsx(hs,{children:x.isPlaceholder?null:e.jsx(p.FlexRender,{header:x})},x.id))},l.id))}),e.jsx(ds,{children:p.getRowModel().rows.map(l=>e.jsx(ue,{className:l.original.level==="error"?"ai-log-row-failed":void 0,children:l.getAllCells().map(x=>e.jsx(us,{children:e.jsx(p.FlexRender,{cell:x})},x.id))},l.id))})]})})]})]})})}const At=new Set(["Control","Shift","Alt","Meta"]);function It({preferences:s,onPreference:t}){const n=m.useMemo(()=>Is(s.shortcutOverrides),[s.shortcutOverrides]),[a,i]=m.useState(null),r=Object.keys(s.shortcutOverrides).length>0,o=m.useMemo(()=>["General","Commit","Editor","Tabs"].map(u=>({category:u,definitions:xe.filter(l=>l.category===u)})),[]),c=m.useMemo(()=>[...new Set(Oe.map(u=>u.category))].map(u=>({category:u,items:Oe.filter(l=>l.category===u)})),[]),h=(p,u)=>{if(u===n[p]){i(null);return}const l=Ts(p,u,n);if(l){const v=l==="reserved"?`${Le(u)} is reserved for a fixed shortcut.`:`${Le(u)} is already used by "${xe.find(y=>y.id===l).label}".`;i({id:p,message:v});return}i(null);const x=xe.find(v=>v.id===p),j={...s.shortcutOverrides};u===x.defaultCombo?delete j[p]:j[p]=u,t({shortcutOverrides:j})},f=p=>{i(null);const u={...s.shortcutOverrides};delete u[p],t({shortcutOverrides:u})};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Show and focus from anywhere"}),e.jsx("span",{children:"Double-tap Control to bring OpenTig to the front, even while another app is focused."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Show and focus from anywhere","aria-checked":s.doubleControlShortcutEnabled,className:"settings-switch",onClick:()=>t({doubleControlShortcutEnabled:!s.doubleControlShortcutEnabled}),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Keyboard shortcuts"}),e.jsx("span",{children:"Click a shortcut, then press a new key combination. Press Escape to cancel."})]}),r&&e.jsxs(w,{variant:"outline",size:"sm",className:"shortcuts-reset-all",onClick:()=>{i(null),t({shortcutOverrides:{}})},children:[e.jsx(qe,{})," Reset all to defaults"]}),o.map(({category:p,definitions:u})=>e.jsxs("div",{className:"shortcuts-group",children:[e.jsx("div",{className:"shortcuts-group-heading",children:p}),u.map(l=>e.jsxs("div",{className:"shortcuts-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:l.label}),e.jsx("span",{children:l.description})]}),e.jsx(Tt,{combo:n[l.id],allowBare:l.allowBare,isCustom:s.shortcutOverrides[l.id]!==void 0,error:a?.id===l.id?a.message:null,onCapture:x=>h(l.id,x),onReset:()=>f(l.id)})]},l.id))]},p))]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Fixed shortcuts"}),e.jsx("span",{children:"These follow platform and file-manager conventions and cannot be changed."})]}),c.map(({category:p,items:u})=>e.jsxs("div",{className:"shortcuts-group",children:[e.jsx("div",{className:"shortcuts-group-heading",children:p}),u.map(l=>e.jsxs("div",{className:"shortcuts-fixed-row",children:[e.jsx("span",{children:l.label}),e.jsx(Je,{children:l.combo.split(" / ").flatMap((x,j)=>[...j>0?[e.jsx("span",{className:"shortcuts-fixed-sep",children:" / "},`sep-${x}`)]:[],...x.split(" + ").map((v,y)=>e.jsx(Ze,{children:v},`${x}-${y}`))])})]},l.combo+l.label))]},p))]})]})}function Tt({combo:s,allowBare:t,isCustom:n,error:a,onCapture:i,onReset:r}){const[o,c]=m.useState(!1);return m.useEffect(()=>{if(!o)return;const h=f=>{if(f.preventDefault(),f.stopPropagation(),f.key==="Escape"){c(!1);return}if(At.has(f.key))return;const p=Os(f);c(!1),p&&Ls(p,t)&&i(p)};return window.addEventListener("keydown",h,!0),()=>window.removeEventListener("keydown",h,!0)},[o,t,i]),e.jsxs("div",{className:"shortcut-recorder",children:[a&&e.jsx("span",{className:"shortcut-recorder-error",children:a}),e.jsx("button",{type:"button",className:`shortcut-recorder-button ${o?"listening":""} ${a?"error":""}`,onClick:()=>c(!0),onBlur:()=>c(!1),children:o?"Press a key…":e.jsx(Je,{children:s.split("+").map(h=>e.jsx(Ze,{children:h},h))})}),n&&e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-xs","aria-label":"Reset to default",onClick:r}),children:e.jsx(qe,{})}),e.jsx(_,{children:"Reset to default"})]})]})}var G=(s=>(s[s.Border=-1]="Border",s[s.Data=0]="Data",s[s.Function=1]="Function",s[s.Position=2]="Position",s[s.Timing=3]="Timing",s[s.Alignment=4]="Alignment",s))(G||{});const Ot=[0,1],gs=[1,0],ms=[2,3],ps=[3,2],Lt={L:Ot,M:gs,Q:ms,H:ps},Pt=/^\d*$/,$t=/^[A-Z0-9 $%*+./:-]*$/,ve="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",Re=1,Ae=40,Ve=3,Ft=3,ae=40,zt=10,fs=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],xs=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]];class _t{constructor(t,n,a,i){if(this.version=t,this.ecc=n,t<Re||t>Ae)throw new RangeError("Version value out of range");if(i<-1||i>7)throw new RangeError("Mask value out of range");this.size=t*4+17;const r=Array.from({length:this.size}).fill(!1);for(let c=0;c<this.size;c++)this.modules.push(r.slice()),this.types.push(r.map(()=>0));this.drawFunctionPatterns();const o=this.addEccAndInterleave(a);if(this.drawCodewords(o),i===-1){let c=1e9;for(let h=0;h<8;h++){this.applyMask(h),this.drawFormatBits(h);const f=this.getPenaltyScore();f<c&&(i=h,c=f),this.applyMask(h)}}this.mask=i,this.applyMask(i),this.drawFormatBits(i)}size;mask;modules=[];types=[];getModule(t,n){return t>=0&&t<this.size&&n>=0&&n<this.size&&this.modules[n][t]}drawFunctionPatterns(){for(let a=0;a<this.size;a++)this.setFunctionModule(6,a,a%2===0,G.Timing),this.setFunctionModule(a,6,a%2===0,G.Timing);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const t=this.getAlignmentPatternPositions(),n=t.length;for(let a=0;a<n;a++)for(let i=0;i<n;i++)a===0&&i===0||a===0&&i===n-1||a===n-1&&i===0||this.drawAlignmentPattern(t[a],t[i]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(t){const n=this.ecc[1]<<3|t;let a=n;for(let r=0;r<10;r++)a=a<<1^(a>>>9)*1335;const i=(n<<10|a)^21522;for(let r=0;r<=5;r++)this.setFunctionModule(8,r,$(i,r));this.setFunctionModule(8,7,$(i,6)),this.setFunctionModule(8,8,$(i,7)),this.setFunctionModule(7,8,$(i,8));for(let r=9;r<15;r++)this.setFunctionModule(14-r,8,$(i,r));for(let r=0;r<8;r++)this.setFunctionModule(this.size-1-r,8,$(i,r));for(let r=8;r<15;r++)this.setFunctionModule(8,this.size-15+r,$(i,r));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let t=this.version;for(let a=0;a<12;a++)t=t<<1^(t>>>11)*7973;const n=this.version<<12|t;for(let a=0;a<18;a++){const i=$(n,a),r=this.size-11+a%3,o=Math.floor(a/3);this.setFunctionModule(r,o,i),this.setFunctionModule(o,r,i)}}drawFinderPattern(t,n){for(let a=-4;a<=4;a++)for(let i=-4;i<=4;i++){const r=Math.max(Math.abs(i),Math.abs(a)),o=t+i,c=n+a;o>=0&&o<this.size&&c>=0&&c<this.size&&this.setFunctionModule(o,c,r!==2&&r!==4,G.Position)}}drawAlignmentPattern(t,n){for(let a=-2;a<=2;a++)for(let i=-2;i<=2;i++)this.setFunctionModule(t+i,n+a,Math.max(Math.abs(i),Math.abs(a))!==1,G.Alignment)}setFunctionModule(t,n,a,i=G.Function){this.modules[n][t]=a,this.types[n][t]=i}addEccAndInterleave(t){const n=this.version,a=this.ecc;if(t.length!==he(n,a))throw new RangeError("Invalid argument");const i=xs[a[0]][n],r=fs[a[0]][n],o=Math.floor(ke(n)/8),c=i-o%i,h=Math.floor(o/i),f=[],p=Kt(r);for(let l=0,x=0;l<i;l++){const j=t.slice(x,x+h-r+(l<c?0:1));x+=j.length;const v=Xt(j,p);l<c&&j.push(0),f.push(j.concat(v))}const u=[];for(let l=0;l<f[0].length;l++)f.forEach((x,j)=>{(l!==h-r||j>=c)&&u.push(x[l])});return u}drawCodewords(t){if(t.length!==Math.floor(ke(this.version)/8))throw new RangeError("Invalid argument");let n=0;for(let a=this.size-1;a>=1;a-=2){a===6&&(a=5);for(let i=0;i<this.size;i++)for(let r=0;r<2;r++){const o=a-r,h=(a+1&2)===0?this.size-1-i:i;!this.types[h][o]&&n<t.length*8&&(this.modules[h][o]=$(t[n>>>3],7-(n&7)),n++)}}}applyMask(t){if(t<0||t>7)throw new RangeError("Mask value out of range");for(let n=0;n<this.size;n++)for(let a=0;a<this.size;a++){let i;switch(t){case 0:i=(a+n)%2===0;break;case 1:i=n%2===0;break;case 2:i=a%3===0;break;case 3:i=(a+n)%3===0;break;case 4:i=(Math.floor(a/3)+Math.floor(n/2))%2===0;break;case 5:i=a*n%2+a*n%3===0;break;case 6:i=(a*n%2+a*n%3)%2===0;break;case 7:i=((a+n)%2+a*n%3)%2===0;break;default:throw new Error("Unreachable")}!this.types[n][a]&&i&&(this.modules[n][a]=!this.modules[n][a])}}getPenaltyScore(){let t=0;for(let r=0;r<this.size;r++){let o=!1,c=0;const h=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[r][f]===o?(c++,c===5?t+=Ve:c>5&&t++):(this.finderPenaltyAddHistory(c,h),o||(t+=this.finderPenaltyCountPatterns(h)*ae),o=this.modules[r][f],c=1);t+=this.finderPenaltyTerminateAndCount(o,c,h)*ae}for(let r=0;r<this.size;r++){let o=!1,c=0;const h=[0,0,0,0,0,0,0];for(let f=0;f<this.size;f++)this.modules[f][r]===o?(c++,c===5?t+=Ve:c>5&&t++):(this.finderPenaltyAddHistory(c,h),o||(t+=this.finderPenaltyCountPatterns(h)*ae),o=this.modules[f][r],c=1);t+=this.finderPenaltyTerminateAndCount(o,c,h)*ae}for(let r=0;r<this.size-1;r++)for(let o=0;o<this.size-1;o++){const c=this.modules[r][o];c===this.modules[r][o+1]&&c===this.modules[r+1][o]&&c===this.modules[r+1][o+1]&&(t+=Ft)}let n=0;for(const r of this.modules)n=r.reduce((o,c)=>o+(c?1:0),n);const a=this.size*this.size,i=Math.ceil(Math.abs(n*20-a*10)/a)-1;return t+=i*zt,t}getAlignmentPatternPositions(){if(this.version===1)return[];{const t=Math.floor(this.version/7)+2,n=this.version===32?26:Math.ceil((this.version*4+4)/(t*2-2))*2,a=[6];for(let i=this.size-7;a.length<t;i-=n)a.splice(1,0,i);return a}}finderPenaltyCountPatterns(t){const n=t[1],a=n>0&&t[2]===n&&t[3]===n*3&&t[4]===n&&t[5]===n;return(a&&t[0]>=n*4&&t[6]>=n?1:0)+(a&&t[6]>=n*4&&t[0]>=n?1:0)}finderPenaltyTerminateAndCount(t,n,a){return t&&(this.finderPenaltyAddHistory(n,a),n=0),n+=this.size,this.finderPenaltyAddHistory(n,a),this.finderPenaltyCountPatterns(a)}finderPenaltyAddHistory(t,n){n[0]===0&&(t+=this.size),n.pop(),n.unshift(t)}}function D(s,t,n){if(t<0||t>31||s>>>t)throw new RangeError("Value out of range");for(let a=t-1;a>=0;a--)n.push(s>>>a&1)}function $(s,t){return(s>>>t&1)!==0}class Ie{constructor(t,n,a){if(this.mode=t,this.numChars=n,this.bitData=a,n<0)throw new RangeError("Invalid argument");this.bitData=a.slice()}getData(){return this.bitData.slice()}}const Dt=[1,10,12,14],Bt=[2,9,11,13],Ut=[4,8,16,16];function js(s,t){return s[Math.floor((t+7)/17)+1]}function vs(s){const t=[];for(const n of s)D(n,8,t);return new Ie(Ut,s.length,t)}function Gt(s){if(!bs(s))throw new RangeError("String contains non-numeric characters");const t=[];for(let n=0;n<s.length;){const a=Math.min(s.length-n,3);D(Number.parseInt(s.substring(n,n+a),10),a*3+1,t),n+=a}return new Ie(Dt,s.length,t)}function Ht(s){if(!ys(s))throw new RangeError("String contains unencodable characters in alphanumeric mode");const t=[];let n;for(n=0;n+2<=s.length;n+=2){let a=ve.indexOf(s.charAt(n))*45;a+=ve.indexOf(s.charAt(n+1)),D(a,11,t)}return n<s.length&&D(ve.indexOf(s.charAt(n)),6,t),new Ie(Bt,s.length,t)}function Vt(s){return s===""?[]:bs(s)?[Gt(s)]:ys(s)?[Ht(s)]:[vs(Yt(s))]}function bs(s){return Pt.test(s)}function ys(s){return $t.test(s)}function Wt(s,t){let n=0;for(const a of s){const i=js(a.mode,t);if(a.numChars>=1<<i)return Number.POSITIVE_INFINITY;n+=4+i+a.bitData.length}return n}function Yt(s){s=encodeURI(s);const t=[];for(let n=0;n<s.length;n++)s.charAt(n)!=="%"?t.push(s.charCodeAt(n)):(t.push(Number.parseInt(s.substring(n+1,n+3),16)),n+=2);return t}function ke(s){if(s<Re||s>Ae)throw new RangeError("Version number out of range");let t=(16*s+128)*s+64;if(s>=2){const n=Math.floor(s/7)+2;t-=(25*n-10)*n-55,s>=7&&(t-=36)}return t}function he(s,t){return Math.floor(ke(s)/8)-fs[t[0]][s]*xs[t[0]][s]}function Kt(s){if(s<1||s>255)throw new RangeError("Degree out of range");const t=[];for(let a=0;a<s-1;a++)t.push(0);t.push(1);let n=1;for(let a=0;a<s;a++){for(let i=0;i<t.length;i++)t[i]=Ne(t[i],n),i+1<t.length&&(t[i]^=t[i+1]);n=Ne(n,2)}return t}function Xt(s,t){const n=t.map(a=>0);for(const a of s){const i=a^n.shift();n.push(0),t.forEach((r,o)=>n[o]^=Ne(r,i))}return n}function Ne(s,t){if(s>>>8||t>>>8)throw new RangeError("Byte out of range");let n=0;for(let a=7;a>=0;a--)n=n<<1^(n>>>7)*285,n^=(t>>>a&1)*s;return n}function qt(s,t,n=1,a=40,i=-1,r=!0){if(!(Re<=n&&n<=a&&a<=Ae)||i<-1||i>7)throw new RangeError("Invalid value");let o,c;for(o=n;;o++){const u=he(o,t)*8,l=Wt(s,o);if(l<=u){c=l;break}if(o>=a)throw new RangeError("Data too long")}for(const u of[gs,ms,ps])r&&c<=he(o,u)*8&&(t=u);const h=[];for(const u of s){D(u.mode[0],4,h),D(u.numChars,js(u.mode,o),h);for(const l of u.getData())h.push(l)}const f=he(o,t)*8;D(0,Math.min(4,f-h.length),h),D(0,(8-h.length%8)%8,h);for(let u=236;h.length<f;u^=253)D(u,8,h);const p=Array.from({length:Math.ceil(h.length/8)},()=>0);return h.forEach((u,l)=>p[l>>>3]|=u<<7-(l&7)),new _t(o,t,p,i)}function Jt(s,t){const{ecc:n="L",boostEcc:a=!1,minVersion:i=1,maxVersion:r=40,maskPattern:o=-1,border:c=1}=t||{},h=typeof s=="string"?Vt(s):Array.isArray(s)?[vs(s)]:void 0;if(!h)throw new Error(`uqr only supports encoding string and binary data, but got: ${typeof s}`);const f=qt(h,Lt[n],i,r,o,a),p=Zt({version:f.version,maskPattern:f.mask,size:f.size,data:f.modules,types:f.types},c);return t?.invert&&(p.data=p.data.map(u=>u.map(l=>!l))),t?.onEncoded?.(p),p}function Zt(s,t=1){if(!t)return s;const{size:n}=s,a=n+t*2;s.size=a,s.data.forEach(r=>{for(let o=0;o<t;o++)r.unshift(!1),r.push(!1)});for(let r=0;r<t;r++)s.data.unshift(Array.from({length:a},o=>!1)),s.data.push(Array.from({length:a},o=>!1));const i=G.Border;s.types.forEach(r=>{for(let o=0;o<t;o++)r.unshift(i),r.push(i)});for(let r=0;r<t;r++)s.types.unshift(Array.from({length:a},o=>i)),s.types.push(Array.from({length:a},o=>i));return s}function We(s){return s.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function Qt(s,t={}){const n=Jt(s,t),{pixelSize:a=10,whiteColor:i="white",blackColor:r="black"}=t,o=n.size*a,c=n.size*a;let h=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${c} ${o}">`;const f=[];for(let p=0;p<n.size;p++)for(let u=0;u<n.size;u++){const l=u*a,x=p*a;n.data[p][u]&&f.push(`M${l},${x}h${a}v${a}h-${a}z`)}return h+=`<rect fill="${We(i)}" width="${c}" height="${o}"/>`,h+=`<path fill="${We(r)}" d="${f.join("")}"/>`,h+="</svg>",h}async function en(){const s=await fetch("/api/auth/sessions",{credentials:"include"});if(!s.ok)throw new Error(await Te(s,"Could not load owner sessions."));const t=await s.json();if(!Array.isArray(t.sessions))throw new Error("OpenTig returned an invalid session list.");return t.sessions}async function sn(s){return ws("/api/auth/sessions/revoke",{sessionId:s})}async function tn(){return ws("/api/auth/sessions/revoke-all",{})}async function nn(s,t){const n=await fetch("/api/auth/sessions/rename",{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({sessionId:s,clientName:t})});if(!n.ok)throw new Error(await Te(n,"Could not rename the browser session."))}async function ws(s,t){const n=await fetch(s,{method:"POST",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok)throw new Error(await Te(n,"Could not revoke the browser session."));const a=await n.json();if(!Number.isSafeInteger(a.revokedCount)||Number(a.revokedCount)<0)throw new Error("OpenTig returned an invalid revocation result.");return Number(a.revokedCount)}async function Te(s,t){try{const n=await s.json();return typeof n.error=="string"?n.error:t}catch{return t}}const an={starting:"Starting",ready:"Ready",restarting:"Restarting",failed:"Failed",stopped:"Stopped"};function rn(){const s=window.opentigDesktop?.webAccess,[t,n]=m.useState(null),[a,i]=m.useState([]),[r,o]=m.useState(null),[c,h]=m.useState(""),[f,p]=m.useState(!0),[u,l]=m.useState(null),[x,j]=m.useState(!1),[v,y]=m.useState(null),[S,M]=m.useState(null),[I,C]=m.useState(""),E=m.useCallback(async(g=!0)=>{const T=await Promise.allSettled([s?.getStatus()??Promise.resolve(null),en()]);T[0].status==="fulfilled"?n(T[0].value):g&&N.error({title:"Could not read web access status",description:U(T[0].reason)}),T[1].status==="fulfilled"?i(T[1].value):g&&N.error({title:"Could not read owner sessions",description:U(T[1].reason)}),p(!1)},[s]);m.useEffect(()=>{E();const g=window.setInterval(()=>{E(!1)},2e3);return()=>window.clearInterval(g)},[E]),m.useEffect(()=>{t&&(t.pairingEndpoints.length?t.pairingEndpoints.includes(c)||h(t.pairingEndpoints[0]):h(""))},[c,t]);const R=m.useMemo(()=>r?`data:image/svg+xml;charset=UTF-8,${encodeURIComponent(Qt(r.url,{ecc:"M",border:2}))}`:null,[r]),L=m.useMemo(()=>r?new URLSearchParams(new URL(r.url).hash.slice(1)).get("token")??"":"",[r]);if(f&&(!s||!t)&&a.length===0)return e.jsxs("div",{className:"web-access-loading",role:"status",children:[e.jsx(X,{className:"animate-spin"})," Loading web access…"]});const A=async g=>{if(s){l("toggle"),o(null);try{n(await s.setEnabled(g)),N.success({title:g?"LAN access enabled":"LAN access disabled"})}catch(T){N.error({title:"Could not restart web access",description:U(T)}),await E(!1)}finally{l(null),j(!1)}}},d=async()=>{if(s){l("pair");try{o(await s.createPairingLink(c))}catch(g){N.error({title:"Could not create pairing link",description:U(g)})}finally{l(null)}}},b=async()=>{if(r)try{await Fe(r.url),N.success({title:"Pairing link copied"})}catch(g){N.error({title:"Could not copy pairing link",description:U(g)})}},k=async()=>{if(L)try{await Fe(L),N.success({title:"Pairing code copied"})}catch(g){N.error({title:"Could not copy pairing code",description:U(g)})}},q=async()=>{const g=S,T=I.trim();if(!(!g||!T||T.length>64)){l(`rename:${g.id}`);try{await nn(g.id,T),N.success({title:"Device renamed"}),await E(!1),M(null)}catch(J){N.error({title:"Could not rename device",description:U(J)})}finally{l(null)}}},me=async()=>{const g=v;if(!g)return;const T=g==="all"?"revoke-all":`revoke:${g.id}`;l(T);try{const J=g==="all"?await tn():await sn(g.id);o(null),N.success({title:`${J} browser ${J===1?"session":"sessions"} revoked`}),await E(!1)}catch(J){N.error({title:"Could not revoke session",description:U(J)})}finally{l(null),y(null)}},pe=t?.serverState==="ready",ks=a.filter(g=>g.kind!=="desktop");return e.jsxs("div",{className:"web-access-settings",children:[s&&t&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"web-access-summary",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"LAN access"}),e.jsx("span",{children:"Listen on this computer's network interfaces for trusted local devices."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"LAN access","aria-checked":t.enabled,className:"settings-switch",disabled:u==="toggle"||!pe,onClick:()=>t.enabled?void A(!1):j(!0),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"web-access-facts","aria-live":"polite",children:[e.jsx(ie,{label:"Server status",children:e.jsx(Q,{variant:pe?"secondary":"outline",children:an[t.serverState]})}),e.jsx(ie,{label:"Actual port",children:e.jsx("code",{children:t.actualPort??"Unavailable"})}),e.jsx(ie,{label:"Local endpoint",children:e.jsx(Ye,{value:t.localEndpoint})}),e.jsx(ie,{label:"LAN endpoints",children:e.jsx("div",{className:"web-access-endpoints",children:t.networkEndpoints.length===0?e.jsx("span",{children:"None detected"}):t.networkEndpoints.map(g=>e.jsx(Ye,{value:g,muted:!t.enabled},g))})})]}),t.restartError&&e.jsxs("div",{className:"web-access-error",role:"alert",children:[e.jsx(Ee,{})," ",e.jsx("span",{children:t.restartError})]}),e.jsxs("div",{className:"web-access-actions settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Pair a browser"}),e.jsx("span",{children:"Create a five-minute, one-use link for this computer or a LAN device. The pairing code also works through a same-machine HTTPS tunnel."})]}),e.jsxs(w,{size:"sm",onClick:()=>{d()},disabled:!pe||!c||u!==null,children:[u==="pair"?e.jsx(X,{className:"animate-spin"}):e.jsx(Zs,{})," Create pairing link"]})]}),t.pairingEndpoints.length>0&&e.jsxs("div",{className:"web-access-endpoint-select",children:[e.jsx("label",{htmlFor:"web-access-endpoint",children:"Address to place in the pairing link"}),e.jsxs(re,{value:c,onValueChange:g=>{g&&(h(g),o(null))},disabled:u!==null,children:[e.jsx(oe,{id:"web-access-endpoint",className:"w-full",children:e.jsx(le,{children:c})}),e.jsx(ce,{alignItemWithTrigger:!1,children:e.jsx(Ps,{children:t.pairingEndpoints.map(g=>e.jsx(de,{value:g,children:g},g))})})]})]}),r&&e.jsxs("div",{className:"web-access-pairing",role:"status",children:[e.jsxs("div",{className:"web-access-pairing-copy",children:[e.jsx(rt,{"aria-hidden":"true"}),e.jsxs("div",{children:[e.jsx("strong",{children:"Pairing link ready"}),e.jsxs("span",{children:["Expires ",new Date(r.expiresAt).toLocaleString(),"."]})]})]}),R&&e.jsx("img",{src:R,alt:"QR code for the one-use OpenTig pairing link"}),e.jsxs("div",{className:"web-access-link-row",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:"web-access-link"}),children:r.url}),e.jsx(_,{side:"bottom",children:"One-use link; do not share publicly"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"outline",size:"icon-sm","aria-label":"Copy pairing link",onClick:()=>{b()}}),children:e.jsx($e,{})}),e.jsx(_,{children:"Copy pairing link"})]})]}),e.jsxs("div",{className:"web-access-link-row",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:"web-access-link"}),children:L}),e.jsx(_,{side:"bottom",children:"Paste this code on any /pair page served by this OpenTig instance"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"outline",size:"icon-sm","aria-label":"Copy pairing code",onClick:()=>{k()}}),children:e.jsx($e,{})}),e.jsx(_,{children:"Copy pairing code"})]})]})]})]}),e.jsxs("div",{className:`web-access-session-heading ${s?"settings-field-separated":""}`,children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Owner sessions"}),e.jsx("span",{children:"Desktop authentication stays private. Paired browsers can be disconnected individually."})]}),e.jsxs(w,{variant:"destructive",size:"sm",onClick:()=>y("all"),disabled:ks.length===0||u!==null,children:[e.jsx(ze,{})," Revoke browsers"]})]}),e.jsx("div",{className:"web-access-session-list","aria-live":"polite",children:a.length===0?e.jsx("div",{className:"web-access-empty-session",children:"No owner sessions found."}):a.map(g=>e.jsxs("div",{className:"web-access-session",children:[e.jsx("div",{className:`web-access-session-icon ${g.connected?"connected":""}`,children:g.kind==="desktop"?e.jsx(is,{}):e.jsx(Ys,{})}),e.jsxs("div",{className:"web-access-session-copy",children:[e.jsxs("div",{children:[e.jsx("strong",{children:g.clientName}),g.current&&e.jsx(Q,{variant:"secondary",children:"This session"}),g.kind==="desktop"&&e.jsx(Q,{variant:"outline",children:"Desktop"})]}),e.jsxs("span",{children:[g.connected?`Connected${g.connectionCount>1?` (${g.connectionCount} tabs)`:""}`:g.lastConnectedAt?`Last connected ${on(g.lastConnectedAt)}`:"Not yet connected"," · ",g.browser&&g.os?`${g.browser} on ${g.os}`:g.browser??g.os??ln(g.deviceType),g.viaProxy?" · Via proxy":"",g.remoteAddress?` · ${g.remoteAddress}`:""]})]}),g.kind!=="desktop"&&e.jsxs("div",{className:"web-access-session-controls",children:[e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":`Rename ${g.clientName}`,onClick:()=>{M(g),C(g.clientName)},disabled:u!==null}),children:e.jsx(Hs,{})}),e.jsx(_,{children:"Rename this device"})]}),e.jsxs(F,{children:[e.jsx(z,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":`Revoke ${g.clientName} session`,onClick:()=>y(g),disabled:u!==null}),children:e.jsx(Ce,{})}),e.jsx(_,{children:"Revoke this browser session"})]})]})]},g.id))}),!s&&e.jsx("p",{className:"web-access-hint",children:"Listener addresses and new pairing links are controlled by the OpenTig desktop app or CLI running the server."}),e.jsx(H,{open:x,onOpenChange:j,children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:"Enable owner-level LAN access?"}),e.jsx(Y,{children:"Any paired browser can edit or delete files and act with your OS user permissions. Use only a trusted LAN or VPN."})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsx(w,{onClick:()=>{A(!0)},disabled:u!==null,children:"Enable LAN access"})]})]})}),e.jsx(H,{open:v!==null,onOpenChange:g=>{g||y(null)},children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:v==="all"?"Revoke all browser sessions?":"Revoke this browser session?"}),e.jsx(Y,{children:v==="all"?"Every paired browser disconnects immediately. The private desktop session remains signed in.":v?.current?"This browser will disconnect immediately and require a new pairing link.":"That browser disconnects immediately and will require a new pairing link."}),v&&v!=="all"&&e.jsx("div",{className:"undo-commit-summary",children:e.jsx("strong",{children:v.clientName})})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsxs(w,{variant:"destructive",onClick:()=>{me()},disabled:u!==null,children:[e.jsx(ze,{})," Revoke"]})]})]})}),e.jsx(H,{open:S!==null,onOpenChange:g=>{g||M(null)},children:e.jsxs(V,{className:"undo-commit-dialog",children:[e.jsxs("div",{className:"undo-commit-content",children:[e.jsx(W,{children:"Rename paired device"}),e.jsx(Y,{children:"Use a name that makes this browser easy to identify later."}),e.jsx("input",{className:"web-access-rename-input",value:I,onChange:g=>C(g.target.value),maxLength:64,"aria-label":"Device name",autoComplete:"off"})]}),e.jsxs("div",{className:"undo-commit-actions",children:[e.jsx(K,{render:e.jsx(w,{variant:"ghost"}),children:"Cancel"}),e.jsx(w,{onClick:()=>{q()},disabled:u!==null||!I.trim(),children:"Save"})]})]})})]})}function ie({label:s,children:t}){return e.jsxs("div",{className:"web-access-fact",children:[e.jsx("span",{children:s}),e.jsx("div",{children:t})]})}function Ye({value:s,muted:t=!1}){return s?e.jsxs(F,{children:[e.jsx(z,{render:e.jsx("code",{className:t?"muted":void 0}),children:s}),e.jsx(_,{side:"bottom",children:t?"Enable LAN access to use this endpoint":s})]}):e.jsx("span",{children:"Unavailable"})}function on(s){const t=new Date(s);return Number.isNaN(t.getTime())?"unknown":t.toLocaleString()}function ln(s){return s==="desktop"?"Desktop browser":s==="mobile"?"Mobile browser":s==="tablet"?"Tablet browser":s==="bot"?"Automated client":"Unknown browser"}function U(s){return s instanceof Error?s.message:String(s)}const cn=[{id:"general",label:"General",icon:$s},{id:"updates",label:"Updates",icon:ge},{id:"shortcuts",label:"Shortcuts",icon:qs},{id:"ai",label:"AI assistance",icon:ht},{id:"diagnostics",label:"Diagnostics",icon:Ee},{id:"webAccess",label:"Web access",icon:at}],dn={updates:{title:"Updates",description:"Check, download, and install new OpenTig releases."},general:{title:"General",description:"OpenTig appearance and behavior."},shortcuts:{title:"Shortcuts",description:"Rebind commands or review the shortcuts that stay fixed."},ai:{title:"AI assistance",description:"Local harness and model used to suggest commit messages and pull-request drafts."},diagnostics:{title:"Diagnostics",description:"Recent local failures on this machine. Prompts and file contents are never recorded."}},hn=[{value:"system",label:"System",icon:is},{value:"light",label:"Light",icon:gt},{value:"dark",label:"Dark",icon:tt}],be=[{value:"geist",label:"Geist",family:"'Geist Variable', sans-serif"},{value:"plus-jakarta-sans",label:"Plus Jakarta Sans",family:"'Plus Jakarta Sans Variable', sans-serif"},{value:"space-grotesk",label:"Space Grotesk",family:"'Space Grotesk Variable', sans-serif"}],ye=[{value:"geist-mono",label:"Geist Mono",family:"'Geist Mono Variable', ui-monospace, monospace"},{value:"jetbrains-mono",label:"JetBrains Mono",family:"'JetBrains Mono Variable', ui-monospace, monospace"},{value:"inconsolata",label:"Inconsolata",family:"'Inconsolata Variable', ui-monospace, monospace"},{value:"departure",label:"Departure Mono",family:"'Departure Mono', ui-monospace, monospace"},{value:"space-grotesk",label:"Space Grotesk",family:"'Space Grotesk Variable', sans-serif"}],un=[{value:"tree",label:"Tree",icon:Fs},{value:"list",label:"List",icon:et}];function kn({preferences:s,onPreference:t,open:n,onOpenChange:a,section:i,onSectionChange:r}){const[o,c]=m.useState([]),[h,f]=m.useState(!1),[p,u]=m.useState(!1),[l,x]=m.useState(!1),j=m.useRef(null),v=bt(),y=v?{duration:0}:{duration:.16,ease:[.22,1,.36,1]},S=m.useCallback(async(d=!1)=>{f(!0);try{c(await te.ai.statuses(d))}catch(b){N.error({title:"Could not check local AI",description:fn(b)})}finally{f(!1)}},[]);m.useEffect(()=>{n&&i==="ai"&&o.length===0&&S()},[S,n,i,o.length]),m.useLayoutEffect(()=>{n&&j.current&&(j.current.scrollTop=0)},[n,i]);const M=s.commitMessageHarness,I=o.find(d=>d.id===M),C=s.commitMessageModels[M]??"default",E=I?.models??[{id:"default",label:"Default (CLI)"}],R=E.some(d=>d.id===C)?E:[...E,{id:C,label:`${C} (unavailable)`}],{title:L,description:A}=i==="webAccess"?{title:"Web access",description:window.opentigDesktop?"Connect trusted browsers locally, over your LAN, or through an HTTPS tunnel.":"Review and disconnect browsers authorised to use this OpenTig server."}:dn[i];return e.jsx(H,{open:n,onOpenChange:a,children:e.jsx(V,{className:"settings-dialog",children:e.jsxs("div",{className:"settings-shell",children:[e.jsxs("aside",{className:"settings-nav",children:[e.jsx("div",{className:"settings-nav-title",children:"Settings"}),cn.map(({id:d,label:b,icon:k})=>e.jsxs("button",{className:`settings-nav-item ${i===d?"active":""}`,onClick:()=>r(d),"aria-current":i===d,children:[e.jsx(k,{})," ",b]},d))]}),e.jsxs("section",{className:"settings-panel",children:[e.jsxs("header",{className:"settings-panel-header",children:[e.jsx(Be,{initial:!1,mode:"wait",children:e.jsxs(Pe.div,{initial:v?!1:{opacity:0,y:4},animate:{opacity:1,y:0},exit:v?{opacity:1}:{opacity:0,y:-3},transition:y,children:[e.jsx(W,{children:L}),e.jsx(Y,{children:A})]},i)}),e.jsx(K,{render:e.jsx(w,{variant:"ghost",size:"icon-sm","aria-label":"Close settings"}),children:e.jsx(Se,{})})]}),e.jsx("div",{ref:j,className:"settings-panel-body",children:e.jsx(Be,{initial:!1,mode:"wait",children:e.jsx(Pe.div,{className:"settings-panel-section",initial:v?!1:{opacity:0,y:7},animate:{opacity:1,y:0},exit:v?{opacity:1}:{opacity:0,y:-5},transition:y,children:i==="general"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Theme"}),e.jsx("span",{children:"Choose a light, dark, or system appearance."})]}),e.jsx("div",{className:"settings-theme-options",role:"radiogroup","aria-label":"Theme",children:hn.map(({value:d,label:b,icon:k})=>e.jsxs("button",{type:"button",role:"radio","aria-checked":s.theme===d,className:`settings-theme-option ${s.theme===d?"active":""}`,onClick:()=>t({theme:d}),children:[e.jsx(k,{})," ",e.jsx("span",{children:b})]},d))})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Fonts"}),e.jsx("span",{children:"Interface chrome and code, chosen independently. Space Grotesk appears in both lists."})]}),e.jsxs("div",{className:"settings-font-pickers",children:[e.jsxs("label",{className:"settings-font-picker",children:[e.jsx("span",{children:"Interface"}),e.jsxs(re,{value:s.uiFont,onValueChange:d=>{const b=be.find(k=>k.value===d);b&&t({uiFont:b.value})},children:[e.jsx(oe,{className:"settings-font-select","aria-label":"Interface font",style:{fontFamily:be.find(d=>d.value===s.uiFont)?.family},children:e.jsx(le,{})}),e.jsx(ce,{align:"start",alignItemWithTrigger:!1,className:"w-max min-w-[16rem]",children:be.map(d=>e.jsx(de,{value:d.value,children:e.jsx("span",{style:{fontFamily:d.family},children:d.label})},d.value))})]})]}),e.jsxs("label",{className:"settings-font-picker",children:[e.jsx("span",{children:"Code"}),e.jsxs(re,{value:s.monoFont,onValueChange:d=>{const b=ye.find(k=>k.value===d);b&&t({monoFont:b.value})},children:[e.jsx(oe,{className:"settings-font-select","aria-label":"Code font",style:{fontFamily:ye.find(d=>d.value===s.monoFont)?.family},children:e.jsx(le,{})}),e.jsx(ce,{align:"start",alignItemWithTrigger:!1,className:"w-max min-w-[16rem]",children:ye.map(d=>e.jsx(de,{value:d.value,children:e.jsx("span",{style:{fontFamily:d.family},children:d.label})},d.value))})]})]})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Interface size"}),e.jsx("span",{children:"Adjust the zoom for text, icons, and the rest of the application."})]}),e.jsxs("div",{className:"settings-zoom-control",children:[e.jsx("input",{type:"range",min:"80",max:"130",step:"10",value:s.uiZoom,onChange:d=>t({uiZoom:Number(d.target.value)}),"aria-label":"Interface zoom"}),e.jsxs("output",{children:[s.uiZoom,"%"]})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Changes layout"}),e.jsx("span",{children:"Group changed files by folder or show them as a flat list."})]}),e.jsx("div",{className:"settings-theme-options",role:"radiogroup","aria-label":"Changes layout",children:un.map(({value:d,label:b,icon:k})=>e.jsxs("button",{type:"button",role:"radio","aria-checked":s.changesLayout===d,className:`settings-theme-option ${s.changesLayout===d?"active":""}`,onClick:()=>t({changesLayout:d}),children:[e.jsx(k,{})," ",e.jsx("span",{children:b})]},d))})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Remote check interval"}),e.jsx("span",{children:"How often OpenTig fetches remotes so ahead and behind counts stay current. Set to Off to check only when you pull or push."})]}),e.jsxs("div",{className:"settings-zoom-control",children:[e.jsx("input",{type:"range",min:"0",max:_s,step:zs,value:s.remoteFetchIntervalSeconds,onChange:d=>t({remoteFetchIntervalSeconds:Number(d.target.value)}),"aria-label":"Remote check interval"}),e.jsx("output",{children:Ds(s.remoteFetchIntervalSeconds)})]})]}),e.jsxs("div",{className:"settings-field settings-field-separated settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Wrap lines in viewer"}),e.jsx("span",{children:"Wrap long lines to fit the available width."})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Wrap lines in viewer","aria-checked":s.wrapLines,className:"settings-switch",onClick:()=>t({wrapLines:!s.wrapLines}),children:e.jsx("span",{})})]}),e.jsxs("div",{className:"settings-field settings-field-separated settings-toggle-row",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Show files ignored by Git"}),e.jsxs("span",{children:["Include files excluded by ",e.jsx("code",{children:".gitignore"})," rules in the Files view."]})]}),e.jsx("button",{type:"button",role:"switch","aria-label":"Show files ignored by Git","aria-checked":s.showDotEnvFiles,className:"settings-switch",onClick:()=>t({showDotEnvFiles:!s.showDotEnvFiles}),children:e.jsx("span",{})})]})]}):i==="updates"?e.jsx(Bs,{}):i==="shortcuts"?e.jsx(It,{preferences:s,onPreference:t}):i==="webAccess"?e.jsx(rn,{}):i==="diagnostics"?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"settings-field",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Problem history"}),e.jsx("span",{children:"Failed Git, file, and network operations recorded locally. Prompts and file contents are never stored."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>x(!0),children:[e.jsx(Ee,{})," View problems"]})]}),e.jsx(Rt,{open:l,onOpenChange:x})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"ai-settings-heading",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Local harness"}),e.jsx("span",{children:"OpenTig uses the selected CLI session. It does not copy or store credentials."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>{S(!0)},disabled:h,children:[h?e.jsx(X,{className:"animate-spin"}):e.jsx(ge,{})," ",h?e.jsx(Me,{text:"Checking…"}):"Check again"]})]}),e.jsx("div",{className:"ai-harness-list",role:"radiogroup","aria-label":"Harness for AI assistance",children:["codex","claude","opencode"].map(d=>{const b=o.find(q=>q.id===d),k=M===d;return e.jsxs("button",{type:"button",role:"radio","aria-checked":k,className:`ai-harness-card ${k?"active":""}`,onClick:()=>t({commitMessageHarness:d}),children:[e.jsxs("span",{className:"ai-harness-card-main",children:[e.jsx(Us,{harness:d}),e.jsxs("span",{className:"ai-harness-card-copy",children:[e.jsx("strong",{children:je(d)}),e.jsx("small",{children:h?"Checking…":b?.version||(b?b.installed?"Version unavailable":"Executable not found":"Status not checked")})]})]}),e.jsx(Q,{variant:mn(b),className:`ai-status-badge ${b?.availability??"unknown"}`,children:gn(b)}),b?.message&&e.jsx("span",{className:"ai-harness-message",children:b.message})]},d)})}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsxs("strong",{children:[je(M)," model"]}),e.jsx("span",{children:"Default lets the CLI choose. OpenTig remembers a separate selection for each harness."})]}),e.jsxs(re,{value:C,onValueChange:d=>t({commitMessageModels:{...s.commitMessageModels,[M]:d}}),children:[e.jsx(oe,{className:"ai-model-select",children:e.jsx(le,{})}),e.jsx(ce,{children:R.map(d=>e.jsx(de,{value:d.id,children:d.label},d.id))})]}),I?.authStatus==="unauthenticated"&&e.jsxs("p",{className:"ai-login-hint",children:["Sign in from a terminal with ",e.jsx("code",{children:pn(M,I.cliName)})," and check again."]}),I&&!I.installed&&e.jsxs("p",{className:"ai-login-hint",children:["Install ",je(M)," and check its availability again."]})]}),e.jsxs("div",{className:"settings-field settings-field-separated",children:[e.jsxs("div",{className:"settings-field-label",children:[e.jsx("strong",{children:"Generation history"}),e.jsx("span",{children:"Outcome, duration, tokens, and cost of recent runs, kept locally for diagnostics."})]}),e.jsxs(w,{variant:"outline",size:"sm",onClick:()=>u(!0),children:[e.jsx(Gs,{})," View history"]})]}),e.jsx("p",{className:"ai-privacy-note",children:"Only the staged diff, its summary, the branch, and recent subjects are sent to the selected harness. The generated message always remains pending your review, and the history records metadata only."}),e.jsx(Nt,{open:p,onOpenChange:u})]})},i)})})]})]})})})}function gn(s){return s?s.installed?s.authStatus==="unauthenticated"?"Not authenticated":s.availability==="ready"?"Available":"Check":"Not installed":"Not checked"}function mn(s){return s?!s.installed||s.authStatus==="unauthenticated"||s.availability==="error"?"destructive":s.availability==="ready"?"default":"secondary":"outline"}function pn(s,t){return s==="codex"?"codex login":s==="claude"?"claude auth login":t==="opencode2"?"opencode2 auth login":"opencode auth login"}function fn(s){return s instanceof Error?s.message:"An unexpected error occurred."}export{kn as SettingsDialog};
@@ -1,3 +1,3 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PierreDiffViewer-B9IrAdjM.js","assets/react-rd22PHbN.js","assets/PierreWorkerPool-BJhmuZSy.js","assets/platform-BMNQ8V5r.js","assets/one-light-CoLDteqg.js","assets/index-BgLrS_2D.js","assets/index-C_D1kOlX.js","assets/tanstack-Bsd5UOY4.js","assets/base-ui-D4MeJpa3.js","assets/index-CE9Jcx4e.css","assets/index-CtEztN1P.js","assets/App-C7Yf3r-l.js","assets/File-DM0fcPqi.js","assets/EditContext-CvJWfVl1.js","assets/DiffWorkspace-1ZAh7eFX.js","assets/PierreEditBoundary-DDJlRbaP.js","assets/edit-ready-context-D77R8XU8.js","assets/MarkdownFileViewer-BxQfoNnS.js","assets/viewer-tabs-BHvOJKLx.js","assets/viewer-tabs-D8o-L3pM.css","assets/EditableFileViewer-DOnxE6ty.js","assets/EditableFileViewer-B2G3Xa33.css","assets/render-markdown-DcHo7ihS.js","assets/markdown-BpzjXclZ.css","assets/PullRequestViewer-CuH0Ze12.js","assets/gh-utils-CR5JRkW2.js","assets/GitHubAvatar-BIZ8KlZ9.js","assets/HtmlFileViewer-tEtrcHdG.js","assets/HtmlFileViewer-D6UPnZvW.css","assets/ImageFileViewer-C56bQ88S.js","assets/ImageFileViewer-D8TdwFTO.css"])))=>i.map(i=>d[i]);
2
- import{o as _,B as U,_ as x,T as se,a as ae,b as ne}from"./index-C_D1kOlX.js";import{r as n,j as t}from"./react-rd22PHbN.js";import{J as le,K as re,L as oe,k as R,M as fe,H as Y}from"./App-C7Yf3r-l.js";import"./tanstack-Bsd5UOY4.js";import"./base-ui-D4MeJpa3.js";class de{constructor(e){if(this.options=e,!Number.isInteger(e.maxEntries)||e.maxEntries<1)throw new RangeError("maxEntries must be a positive integer.");if(!Number.isFinite(e.maxBytes)||e.maxBytes<1)throw new RangeError("maxBytes must be a positive number.")}options;entries=new Map;totalBytes=0;get size(){return this.entries.size}get bytes(){return this.totalBytes}get(e){const o=this.entries.get(e);if(o)return this.entries.delete(e),this.entries.set(e,o),o.value}set(e,o){const d=ce(this.options.sizeOf(o)),v=this.entries.get(e);return v&&(this.entries.delete(e),this.totalBytes-=v.bytes),d>this.options.maxBytes?!1:(this.entries.set(e,{value:o,bytes:d}),this.totalBytes+=d,this.evictToBudget(),this.entries.has(e))}delete(e){const o=this.entries.get(e);return o?(this.entries.delete(e),this.totalBytes-=o.bytes,!0):!1}clear(){this.entries.clear(),this.totalBytes=0}evictToBudget(){for(;this.entries.size>this.options.maxEntries||this.totalBytes>this.options.maxBytes;){const e=this.entries.keys().next();if(e.done)break;this.delete(e.value)}}}function ce(i){if(!Number.isFinite(i)||i<0)throw new RangeError("sizeOf must return a finite, non-negative number.");return Math.ceil(i)}const G=n.lazy(()=>x(()=>import("./PierreDiffViewer-B9IrAdjM.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),ue=n.lazy(()=>x(()=>import("./PierreEditBoundary-DDJlRbaP.js"),__vite__mapDeps([15,6,1,7,8,9,13,11,16])).then(i=>({default:i.PierreEditBoundary}))),me=n.lazy(()=>x(()=>import("./MarkdownFileViewer-BxQfoNnS.js"),__vite__mapDeps([17,1,11,6,7,8,9,18,19,20,2,3,4,5,10,12,13,16,21,22,23])).then(i=>({default:i.MarkdownFileViewer}))),he=n.lazy(()=>x(()=>import("./PullRequestViewer-CuH0Ze12.js"),__vite__mapDeps([24,6,1,7,8,9,11,18,19,25,26,23])).then(i=>({default:i.PullRequestViewer}))),pe=n.lazy(()=>x(()=>import("./EditableFileViewer-DOnxE6ty.js").then(i=>i.E),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13,16,21])).then(i=>({default:i.EditableFileViewer}))),xe=n.lazy(()=>x(()=>import("./HtmlFileViewer-tEtrcHdG.js"),__vite__mapDeps([27,1,18,6,7,8,9,19,20,2,3,4,5,10,11,12,13,16,21,28])).then(i=>({default:i.HtmlFileViewer}))),ve=n.lazy(()=>x(()=>import("./ImageFileViewer-C56bQ88S.js"),__vite__mapDeps([29,1,6,7,8,9,18,19,20,2,3,4,5,10,11,12,13,16,21,30])).then(i=>({default:i.ImageFileViewer}))),ye=n.lazy(()=>x(()=>import("./ImageFileViewer-C56bQ88S.js"),__vite__mapDeps([29,1,6,7,8,9,18,19,20,2,3,4,5,10,11,12,13,16,21,30])).then(i=>({default:i.SvgFileViewer}))),F=new de({maxEntries:8,maxBytes:16*1024*1024,sizeOf:i=>i.patch.length*2+i.path.length*2+256});let Q=null;function Se({repositoryId:i,selection:e,diffView:o,wrapLines:d,theme:v,revision:y,readOnly:g,commits:T,draftFor:E,onSelect:$,onOpenFile:Z,onDiffViewChange:K,onWrapLinesChange:M,onDraftChange:O,onDraftSaved:A,onUpdateConflict:W,onResolveConflict:I}){const[a,w]=n.useState(null),[ee,L]=n.useState(!1),[D,q]=n.useState(null),[V,H]=n.useState(!1),b=n.useRef(0),C=n.useRef(!1),u=je(i,e);n.useEffect(()=>{H(!1),C.current=!1},[e]),n.useEffect(()=>{Q!==i&&(F.clear(),Q=i);const s=++b.current;if(q(null),!e||e.type==="pull-request"){w(null),L(!1);return}L(!0),(async()=>{try{if(e.type==="file"||e.type==="conflict"){if(e.type==="file"&&fe(e.path)){const l=await _.repository.readImage(i,e.path);if(s!==b.current)return;w({docKey:u,type:"image",value:l});return}const f=await _.repository.readFile(i,e.path,e.type==="conflict"?!0:V);if(s!==b.current)return;if(e.type==="conflict"){w({docKey:u,type:"conflict",value:f});return}w(l=>l&&l.docKey===u&&l.type==="file"&&C.current||l&&l.docKey===u&&l.type==="file"&&l.value.content===f.content&&l.value.size===f.size&&l.value.binary===f.binary&&l.value.tooLarge===f.tooLarge?l:{docKey:u,type:"file",value:f})}else{const f=e.type!=="diff";let l=f?F.get(u):void 0;if(l||(l=e.type==="commit"?await _.diff.getCommit(i,e.oid):e.type==="commit-file"?await _.diff.getCommitFile(i,e.oid,e.path,e.oldPath):await _.diff.get({repositoryId:i,path:e.path,kind:e.kind}),f&&F.set(u,l)),s!==b.current)return;const p=l;w(c=>c&&c.docKey===u&&c.type==="diff"&&c.value.patch===p.patch&&c.value.binary===p.binary?c:{docKey:u,type:"diff",value:p})}}catch(f){s===b.current&&q(f instanceof Error?f.message:"Could not load the viewer.")}finally{s===b.current&&L(!1)}})()},[V,u,i,y,e]);const j=v==="system"?"system":v,te=d?"wrap":"scroll",N=n.useCallback(s=>{C.current=s},[]),S=n.useCallback(async(s,h,f)=>{const l=E(s),p=await _.repository.writeFile(i,s,h,l?.expectedContent??f);return p.status==="saved"&&(C.current=!1,A(s),w(c=>c?.type==="file"&&c.value.path===s?{...c,value:{...c.value,content:h,binary:!1,tooLarge:!1,size:p.size,mtimeMs:p.mtimeMs}}:c)),p},[E,A,i]),B=n.useCallback(s=>s.path,[]),k=n.useCallback(s=>E(s.path)?.content??s.content,[E]),z=n.useCallback(s=>h=>O(s.path,h,s.content,s.mtimeMs),[O]),ie=ee&&a!==null&&!D;let r,P=null;if(!e)r=t.jsx(we,{});else if(e.type==="pull-request")r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(he,{repositoryId:i,prNumber:e.number,diffView:o,themeType:j,wrapLines:d,onDiffViewChange:K,onWrapLinesChange:M,onClose:()=>$(null)},`${i}:${e.number}`)});else if(D)r=t.jsx("div",{className:"viewer-message text-destructive",children:D});else if(!a)r=t.jsxs("div",{className:"viewer-message",children:[t.jsx(R,{className:"spinner"})," ",t.jsx(Y,{text:"Loading…"})]});else if(a.type==="image")r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ve,{image:a.value},`${a.value.path}:${a.value.mtimeMs}`)});else if(a.type!=="diff"&&a.value.binary)r=t.jsxs("div",{className:"viewer-message",children:["Binary file · ",X(a.value.size)]});else if(a.type==="file"&&a.value.tooLarge&&!V)r=t.jsxs("div",{className:"viewer-message flex-col gap-3",children:[t.jsxs("p",{children:["The file is ",X(a.value.size),". Preview is limited to protect performance."]}),t.jsx(U,{variant:"outline",onClick:()=>H(!0),children:"Load preview"})]});else if(a.type==="file"&&a.value.tooLarge)r=t.jsx("div",{className:"viewer-message text-destructive",children:"The file exceeds the built-in editor's 8 MB safety limit."});else if(a.type==="conflict"&&a.value.tooLarge)r=t.jsx("div",{className:"viewer-message text-destructive",children:"The conflicted file exceeds the viewer's safe limit. Open it in an external editor to resolve it."});else if(a.type==="conflict")r=null,P=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(G,{kind:"conflict",contentKey:a.docKey,file:a.value,themeType:j,overflow:te,onUpdate:W,onResolve:I})});else if(a.type==="file"&&le(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(me,{file:s,initialContent:k(s),revision:y,themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onOpenFile:Z,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"&&re(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ye,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"&&oe(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(xe,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(pe,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="diff"&&a.value.patch){const s=e.type==="commit"||e.type==="commit-file"?e:null,h=s?T.find(l=>l.oid===s.oid):void 0,f=e.type==="commit-file"?t.jsx(U,{type:"button",variant:"outline",size:"xs",onClick:()=>$({type:"commit",oid:e.oid,subject:h?.subject??e.oid.slice(0,8)}),children:"All files"}):void 0;r=null,P=t.jsxs("div",{className:s?"commit-diff-viewer":"standalone-diff-viewer",children:[s&&t.jsx(ge,{commit:h,fallbackSubject:"subject"in s?s.subject:""},s.oid),t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(G,{kind:"diff",contentKey:a.docKey,value:a.value,diffView:o,themeType:j,wrapLines:d,initiallyCollapsed:e.type==="commit",compact:e.type==="diff",scopeControl:f,onDiffViewChange:K,onWrapLinesChange:M,onClose:()=>$(null)})})]})}else a.type==="diff"?r=t.jsx("div",{className:"viewer-message",children:"No differences to show."}):r=t.jsx("div",{className:"viewer-message",children:"This file cannot be edited."});const J=t.jsxs(t.Fragment,{children:[P??t.jsx("div",{className:"viewer-transition",children:r},a?a.docKey:u),ie&&t.jsx("span",{className:"viewer-reloading","aria-hidden":"true",children:t.jsx(R,{className:"spinner"})})]});return a?.type!=="file"?J:t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ue,{enabled:!0,children:J})})}function ge({commit:i,fallbackSubject:e}){const o=i?.date?new Date(i.date):null,[d,v]=n.useState(!1),y=i?.body??"",g=y.length>240||y.split(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/PierreDiffViewer-DYj1ZThr.js","assets/react-rd22PHbN.js","assets/PierreWorkerPool-7EVoquIB.js","assets/platform-BMNQ8V5r.js","assets/one-light-CoLDteqg.js","assets/index-BgLrS_2D.js","assets/index-BdjG_WtS.js","assets/tanstack-Bsd5UOY4.js","assets/base-ui-D4MeJpa3.js","assets/index-Uku28hIV.css","assets/index-CtEztN1P.js","assets/App-CeDVj5Hh.js","assets/File-C10_BxOu.js","assets/EditContext-CvJWfVl1.js","assets/DiffWorkspace-CeYQ0YtE.js","assets/PierreEditBoundary-UfvbKDbd.js","assets/edit-ready-context-D77R8XU8.js","assets/MarkdownFileViewer-BLfJ-Vof.js","assets/viewer-tabs-Cp_MC_J3.js","assets/viewer-tabs-D8o-L3pM.css","assets/EditableFileViewer-BhwE-QMO.js","assets/EditableFileViewer-B2G3Xa33.css","assets/render-markdown-GXIpf9CM.js","assets/markdown-BpzjXclZ.css","assets/PullRequestViewer-CyW39MuF.js","assets/gh-utils-D00lyruw.js","assets/GitHubAvatar-Ch_PaCv3.js","assets/HtmlFileViewer-Cufzaec9.js","assets/HtmlFileViewer-D6UPnZvW.css","assets/ImageFileViewer-CFUkcXLH.js","assets/ImageFileViewer-D8TdwFTO.css"])))=>i.map(i=>d[i]);
2
+ import{o as _,B as U,_ as x,T as se,a as ae,b as ne}from"./index-BdjG_WtS.js";import{r as n,j as t}from"./react-rd22PHbN.js";import{J as le,K as re,L as oe,k as R,M as fe,H as Y}from"./App-CeDVj5Hh.js";import"./tanstack-Bsd5UOY4.js";import"./base-ui-D4MeJpa3.js";class de{constructor(e){if(this.options=e,!Number.isInteger(e.maxEntries)||e.maxEntries<1)throw new RangeError("maxEntries must be a positive integer.");if(!Number.isFinite(e.maxBytes)||e.maxBytes<1)throw new RangeError("maxBytes must be a positive number.")}options;entries=new Map;totalBytes=0;get size(){return this.entries.size}get bytes(){return this.totalBytes}get(e){const o=this.entries.get(e);if(o)return this.entries.delete(e),this.entries.set(e,o),o.value}set(e,o){const d=ce(this.options.sizeOf(o)),v=this.entries.get(e);return v&&(this.entries.delete(e),this.totalBytes-=v.bytes),d>this.options.maxBytes?!1:(this.entries.set(e,{value:o,bytes:d}),this.totalBytes+=d,this.evictToBudget(),this.entries.has(e))}delete(e){const o=this.entries.get(e);return o?(this.entries.delete(e),this.totalBytes-=o.bytes,!0):!1}clear(){this.entries.clear(),this.totalBytes=0}evictToBudget(){for(;this.entries.size>this.options.maxEntries||this.totalBytes>this.options.maxBytes;){const e=this.entries.keys().next();if(e.done)break;this.delete(e.value)}}}function ce(i){if(!Number.isFinite(i)||i<0)throw new RangeError("sizeOf must return a finite, non-negative number.");return Math.ceil(i)}const G=n.lazy(()=>x(()=>import("./PierreDiffViewer-DYj1ZThr.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]))),ue=n.lazy(()=>x(()=>import("./PierreEditBoundary-UfvbKDbd.js"),__vite__mapDeps([15,6,1,7,8,9,13,11,16])).then(i=>({default:i.PierreEditBoundary}))),me=n.lazy(()=>x(()=>import("./MarkdownFileViewer-BLfJ-Vof.js"),__vite__mapDeps([17,1,11,6,7,8,9,18,19,20,2,3,4,5,10,12,13,16,21,22,23])).then(i=>({default:i.MarkdownFileViewer}))),he=n.lazy(()=>x(()=>import("./PullRequestViewer-CyW39MuF.js"),__vite__mapDeps([24,6,1,7,8,9,11,18,19,25,26,23])).then(i=>({default:i.PullRequestViewer}))),pe=n.lazy(()=>x(()=>import("./EditableFileViewer-BhwE-QMO.js").then(i=>i.E),__vite__mapDeps([20,1,2,3,4,5,6,7,8,9,10,11,12,13,16,21])).then(i=>({default:i.EditableFileViewer}))),xe=n.lazy(()=>x(()=>import("./HtmlFileViewer-Cufzaec9.js"),__vite__mapDeps([27,1,18,6,7,8,9,19,20,2,3,4,5,10,11,12,13,16,21,28])).then(i=>({default:i.HtmlFileViewer}))),ve=n.lazy(()=>x(()=>import("./ImageFileViewer-CFUkcXLH.js"),__vite__mapDeps([29,1,6,7,8,9,18,19,20,2,3,4,5,10,11,12,13,16,21,30])).then(i=>({default:i.ImageFileViewer}))),ye=n.lazy(()=>x(()=>import("./ImageFileViewer-CFUkcXLH.js"),__vite__mapDeps([29,1,6,7,8,9,18,19,20,2,3,4,5,10,11,12,13,16,21,30])).then(i=>({default:i.SvgFileViewer}))),F=new de({maxEntries:8,maxBytes:16*1024*1024,sizeOf:i=>i.patch.length*2+i.path.length*2+256});let Q=null;function Se({repositoryId:i,selection:e,diffView:o,wrapLines:d,theme:v,revision:y,readOnly:g,commits:T,draftFor:E,onSelect:$,onOpenFile:Z,onDiffViewChange:K,onWrapLinesChange:M,onDraftChange:O,onDraftSaved:A,onUpdateConflict:W,onResolveConflict:I}){const[a,w]=n.useState(null),[ee,L]=n.useState(!1),[D,q]=n.useState(null),[V,H]=n.useState(!1),b=n.useRef(0),C=n.useRef(!1),u=je(i,e);n.useEffect(()=>{H(!1),C.current=!1},[e]),n.useEffect(()=>{Q!==i&&(F.clear(),Q=i);const s=++b.current;if(q(null),!e||e.type==="pull-request"){w(null),L(!1);return}L(!0),(async()=>{try{if(e.type==="file"||e.type==="conflict"){if(e.type==="file"&&fe(e.path)){const l=await _.repository.readImage(i,e.path);if(s!==b.current)return;w({docKey:u,type:"image",value:l});return}const f=await _.repository.readFile(i,e.path,e.type==="conflict"?!0:V);if(s!==b.current)return;if(e.type==="conflict"){w({docKey:u,type:"conflict",value:f});return}w(l=>l&&l.docKey===u&&l.type==="file"&&C.current||l&&l.docKey===u&&l.type==="file"&&l.value.content===f.content&&l.value.size===f.size&&l.value.binary===f.binary&&l.value.tooLarge===f.tooLarge?l:{docKey:u,type:"file",value:f})}else{const f=e.type!=="diff";let l=f?F.get(u):void 0;if(l||(l=e.type==="commit"?await _.diff.getCommit(i,e.oid):e.type==="commit-file"?await _.diff.getCommitFile(i,e.oid,e.path,e.oldPath):await _.diff.get({repositoryId:i,path:e.path,kind:e.kind}),f&&F.set(u,l)),s!==b.current)return;const p=l;w(c=>c&&c.docKey===u&&c.type==="diff"&&c.value.patch===p.patch&&c.value.binary===p.binary?c:{docKey:u,type:"diff",value:p})}}catch(f){s===b.current&&q(f instanceof Error?f.message:"Could not load the viewer.")}finally{s===b.current&&L(!1)}})()},[V,u,i,y,e]);const j=v==="system"?"system":v,te=d?"wrap":"scroll",N=n.useCallback(s=>{C.current=s},[]),S=n.useCallback(async(s,h,f)=>{const l=E(s),p=await _.repository.writeFile(i,s,h,l?.expectedContent??f);return p.status==="saved"&&(C.current=!1,A(s),w(c=>c?.type==="file"&&c.value.path===s?{...c,value:{...c.value,content:h,binary:!1,tooLarge:!1,size:p.size,mtimeMs:p.mtimeMs}}:c)),p},[E,A,i]),B=n.useCallback(s=>s.path,[]),k=n.useCallback(s=>E(s.path)?.content??s.content,[E]),z=n.useCallback(s=>h=>O(s.path,h,s.content,s.mtimeMs),[O]),ie=ee&&a!==null&&!D;let r,P=null;if(!e)r=t.jsx(we,{});else if(e.type==="pull-request")r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(he,{repositoryId:i,prNumber:e.number,diffView:o,themeType:j,wrapLines:d,onDiffViewChange:K,onWrapLinesChange:M,onClose:()=>$(null)},`${i}:${e.number}`)});else if(D)r=t.jsx("div",{className:"viewer-message text-destructive",children:D});else if(!a)r=t.jsxs("div",{className:"viewer-message",children:[t.jsx(R,{className:"spinner"})," ",t.jsx(Y,{text:"Loading…"})]});else if(a.type==="image")r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ve,{image:a.value},`${a.value.path}:${a.value.mtimeMs}`)});else if(a.type!=="diff"&&a.value.binary)r=t.jsxs("div",{className:"viewer-message",children:["Binary file · ",X(a.value.size)]});else if(a.type==="file"&&a.value.tooLarge&&!V)r=t.jsxs("div",{className:"viewer-message flex-col gap-3",children:[t.jsxs("p",{children:["The file is ",X(a.value.size),". Preview is limited to protect performance."]}),t.jsx(U,{variant:"outline",onClick:()=>H(!0),children:"Load preview"})]});else if(a.type==="file"&&a.value.tooLarge)r=t.jsx("div",{className:"viewer-message text-destructive",children:"The file exceeds the built-in editor's 8 MB safety limit."});else if(a.type==="conflict"&&a.value.tooLarge)r=t.jsx("div",{className:"viewer-message text-destructive",children:"The conflicted file exceeds the viewer's safe limit. Open it in an external editor to resolve it."});else if(a.type==="conflict")r=null,P=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(G,{kind:"conflict",contentKey:a.docKey,file:a.value,themeType:j,overflow:te,onUpdate:W,onResolve:I})});else if(a.type==="file"&&le(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(me,{file:s,initialContent:k(s),revision:y,themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onOpenFile:Z,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"&&re(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ye,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"&&oe(a.value.path)){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(xe,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g||s.tooLarge,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="file"){const s=a.value;r=t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(pe,{file:s,initialContent:k(s),themeType:j,wrapLines:d,readOnly:g,onDirtyChange:N,onDraftChange:z(s),onSave:S},B(s))})}else if(a.type==="diff"&&a.value.patch){const s=e.type==="commit"||e.type==="commit-file"?e:null,h=s?T.find(l=>l.oid===s.oid):void 0,f=e.type==="commit-file"?t.jsx(U,{type:"button",variant:"outline",size:"xs",onClick:()=>$({type:"commit",oid:e.oid,subject:h?.subject??e.oid.slice(0,8)}),children:"All files"}):void 0;r=null,P=t.jsxs("div",{className:s?"commit-diff-viewer":"standalone-diff-viewer",children:[s&&t.jsx(ge,{commit:h,fallbackSubject:"subject"in s?s.subject:""},s.oid),t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(G,{kind:"diff",contentKey:a.docKey,value:a.value,diffView:o,themeType:j,wrapLines:d,initiallyCollapsed:e.type==="commit",compact:e.type==="diff",scopeControl:f,onDiffViewChange:K,onWrapLinesChange:M,onClose:()=>$(null)})})]})}else a.type==="diff"?r=t.jsx("div",{className:"viewer-message",children:"No differences to show."}):r=t.jsx("div",{className:"viewer-message",children:"This file cannot be edited."});const J=t.jsxs(t.Fragment,{children:[P??t.jsx("div",{className:"viewer-transition",children:r},a?a.docKey:u),ie&&t.jsx("span",{className:"viewer-reloading","aria-hidden":"true",children:t.jsx(R,{className:"spinner"})})]});return a?.type!=="file"?J:t.jsx(n.Suspense,{fallback:t.jsx(m,{}),children:t.jsx(ue,{enabled:!0,children:J})})}function ge({commit:i,fallbackSubject:e}){const o=i?.date?new Date(i.date):null,[d,v]=n.useState(!1),y=i?.body??"",g=y.length>240||y.split(`
3
3
  `).length>3;return t.jsxs("header",{className:"commit-diff-header",children:[t.jsx("h2",{children:i?.subject||e||"(no subject)"}),y&&t.jsxs("div",{className:"commit-diff-description-wrap",children:[t.jsx("p",{className:`commit-diff-description ${g&&!d?"collapsed":""}`,children:y}),g&&t.jsx("button",{type:"button",className:"commit-description-toggle","aria-expanded":d,onClick:()=>v(T=>!T),children:d?"Show less":"Show full description"})]}),t.jsxs("div",{className:"commit-diff-meta",children:[t.jsx("code",{children:i?.shortOid??"commit"}),i?.author&&t.jsxs("span",{children:[i.author,i.email?` <${i.email}>`:""]}),o&&Number.isFinite(o.getTime())&&t.jsxs(se,{children:[t.jsx(ae,{render:t.jsx("time",{dateTime:i?.date}),children:o.toLocaleString()}),t.jsx(ne,{children:o.toLocaleString()})]}),i?.parentCount&&i.parentCount>1?t.jsx("span",{children:"Merge commit"}):null,i?.upstreamState==="local-only"&&t.jsx("span",{className:"commit-local-label",children:"Local only"})]})]})}function je(i,e){return e?e.type==="pull-request"?`${i}:pull:${e.number}`:e.type==="commit"?`${i}:commit:${e.oid}`:e.type==="commit-file"?`${i}:commit-file:${e.oid}:${e.oldPath??""}:${e.path}`:e.type==="diff"?`${i}:diff:${e.kind}:${e.path}`:`${i}:${e.type}:${e.path}`:`${i}:empty`}function m(){return t.jsxs("div",{className:"viewer-message",children:[t.jsx(R,{className:"spinner"})," ",t.jsx(Y,{text:"Loading viewer…"})]})}function we(){return t.jsxs("div",{className:"viewer-empty",children:[t.jsx("h2",{children:"Nothing selected"}),t.jsx("p",{children:"Select a change, file, commit, or pull request."})]})}function X(i){return i?i<1024?`${i} B`:i<1024*1024?`${(i/1024).toFixed(1)} KB`:`${(i/1024/1024).toFixed(1)} MB`:"unknown size"}export{Se as default};
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-CR_RRfTb.js";import{p as f}from"./chunk-JWPE2WC7-BAhDzsCx.js";import{_ as n,l as s}from"./mermaid.core-B_Mv_eHi.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-BT5dARHp.js";import"./index-C_D1kOlX.js";import"./react-rd22PHbN.js";import"./tanstack-Bsd5UOY4.js";import"./base-ui-D4MeJpa3.js";import"./render-markdown-DcHo7ihS.js";import"./App-C7Yf3r-l.js";import"./one-light-CoLDteqg.js";import"./index-BgLrS_2D.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,o]=e.split("*"),m=t?parseInt(t,10):0,l=o?parseInt(o,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:o}=b(e.repeat);return t===0&&o===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:o}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),s.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;s.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),s.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},$={parser:R,db:a,renderer:u,styles:p};export{$ as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-C8lX8T87.js";import{p as f}from"./chunk-JWPE2WC7-BLu2-FJl.js";import{_ as n,l as s}from"./mermaid.core-DnaJSnLe.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-B4mEAleX.js";import"./index-BdjG_WtS.js";import"./react-rd22PHbN.js";import"./tanstack-Bsd5UOY4.js";import"./base-ui-D4MeJpa3.js";import"./render-markdown-GXIpf9CM.js";import"./App-CeDVj5Hh.js";import"./one-light-CoLDteqg.js";import"./index-BgLrS_2D.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,o]=e.split("*"),m=t?parseInt(t,10):0,l=o?parseInt(o,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:o}=b(e.repeat);return t===0&&o===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:o}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),s.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;s.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),s.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},$={parser:R,db:a,renderer:u,styles:p};export{$ as diagram};
@@ -1 +1 @@
1
- import{G as ln,H as un,I as N,J as I,K as J,L as an,M as y,N as tn,O as j,P as _,Q as rn,R as o,S as on,T as sn,V as fn}from"./mermaid.core-B_Mv_eHi.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,q,O,v,R,K,u){var D=q-l,i=O-h,n=K-v,d=u-R,a=d*D-n*i;if(!(a*a<y))return a=(n*(h-R)-d*(l-v))/a,[l+a*D,h+a*i]}function W(l,h,q,O,v,R,K){var u=l-q,D=h-O,i=(K?R:-R)/j(u*u+D*D),n=i*D,d=-i*u,a=l+n,s=h+d,f=q+n,c=O+d,L=(a+f)/2,t=(s+c)/2,m=f-a,g=c-s,A=m*m+g*g,T=v-R,P=a*c-f*s,E=(g<0?-1:1)*j(on(0,T*T*A-P*P)),G=(P*g-m*E)/A,H=(-P*m-g*E)/A,w=(P*g+m*E)/A,p=(-P*m+g*E)/A,x=G-L,e=H-t,r=w-L,M=p-t;return x*x+e*e>r*r+M*M&&(G=w,H=p),{cx:G,cy:H,x01:-n,y01:-d,x11:G*(v/T-1),y11:H*(v/T-1)}}function hn(){var l=cn,h=yn,q=J(0),O=null,v=gn,R=dn,K=mn,u=null,D=ln(i);function i(){var n,d,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=R.apply(this,arguments)-an,L=rn(c-f),t=c>f;if(u||(u=n=D()),s<a&&(d=s,s=a,a=d),!(s>y))u.moveTo(0,0);else if(L>tn-y)u.moveTo(s*N(f),s*I(f)),u.arc(0,0,s,f,c,!t),a>y&&(u.moveTo(a*N(c),a*I(c)),u.arc(0,0,a,c,f,t));else{var m=f,g=c,A=f,T=c,P=L,E=L,G=K.apply(this,arguments)/2,H=G>y&&(O?+O.apply(this,arguments):j(a*a+s*s)),w=_(rn(s-a)/2,+q.apply(this,arguments)),p=w,x=w,e,r;if(H>y){var M=sn(H/a*I(G)),z=sn(H/s*I(G));(P-=M*2)>y?(M*=t?1:-1,A+=M,T-=M):(P=0,A=T=(f+c)/2),(E-=z*2)>y?(z*=t?1:-1,m+=z,g-=z):(E=0,m=g=(f+c)/2)}var Q=s*N(m),V=s*I(m),B=a*N(T),C=a*I(T);if(w>y){var F=s*N(g),U=s*I(g),X=a*N(A),Y=a*I(A),S;if(L<un)if(S=pn(Q,V,X,Y,F,U,B,C)){var Z=Q-S[0],$=V-S[1],k=F-S[0],b=U-S[1],nn=1/I(fn((Z*k+$*b)/(j(Z*Z+$*$)*j(k*k+b*b)))/2),en=j(S[0]*S[0]+S[1]*S[1]);p=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}E>y?x>y?(e=W(X,Y,Q,V,s,x,t),r=W(F,U,B,C,s,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),u.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(u.moveTo(Q,V),u.arc(0,0,s,m,g,!t)):u.moveTo(Q,V),!(a>y)||!(P>y)?u.lineTo(B,C):p>y?(e=W(B,C,F,U,a,-p,t),r=W(Q,V,X,Y,a,-p,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?u.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,a,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),u.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):u.arc(0,0,a,T,A,t)}if(u.closePath(),n)return u=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +R.apply(this,arguments))/2-un/2;return[N(d)*n,I(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:J(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:J(+n),i):h},i.cornerRadius=function(n){return arguments.length?(q=typeof n=="function"?n:J(+n),i):q},i.padRadius=function(n){return arguments.length?(O=n==null?null:typeof n=="function"?n:J(+n),i):O},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:J(+n),i):v},i.endAngle=function(n){return arguments.length?(R=typeof n=="function"?n:J(+n),i):R},i.padAngle=function(n){return arguments.length?(K=typeof n=="function"?n:J(+n),i):K},i.context=function(n){return arguments.length?(u=n??null,i):u},i}export{hn as d};
1
+ import{G as ln,H as un,I as N,J as I,K as J,L as an,M as y,N as tn,O as j,P as _,Q as rn,R as o,S as on,T as sn,V as fn}from"./mermaid.core-DnaJSnLe.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,q,O,v,R,K,u){var D=q-l,i=O-h,n=K-v,d=u-R,a=d*D-n*i;if(!(a*a<y))return a=(n*(h-R)-d*(l-v))/a,[l+a*D,h+a*i]}function W(l,h,q,O,v,R,K){var u=l-q,D=h-O,i=(K?R:-R)/j(u*u+D*D),n=i*D,d=-i*u,a=l+n,s=h+d,f=q+n,c=O+d,L=(a+f)/2,t=(s+c)/2,m=f-a,g=c-s,A=m*m+g*g,T=v-R,P=a*c-f*s,E=(g<0?-1:1)*j(on(0,T*T*A-P*P)),G=(P*g-m*E)/A,H=(-P*m-g*E)/A,w=(P*g+m*E)/A,p=(-P*m+g*E)/A,x=G-L,e=H-t,r=w-L,M=p-t;return x*x+e*e>r*r+M*M&&(G=w,H=p),{cx:G,cy:H,x01:-n,y01:-d,x11:G*(v/T-1),y11:H*(v/T-1)}}function hn(){var l=cn,h=yn,q=J(0),O=null,v=gn,R=dn,K=mn,u=null,D=ln(i);function i(){var n,d,a=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=R.apply(this,arguments)-an,L=rn(c-f),t=c>f;if(u||(u=n=D()),s<a&&(d=s,s=a,a=d),!(s>y))u.moveTo(0,0);else if(L>tn-y)u.moveTo(s*N(f),s*I(f)),u.arc(0,0,s,f,c,!t),a>y&&(u.moveTo(a*N(c),a*I(c)),u.arc(0,0,a,c,f,t));else{var m=f,g=c,A=f,T=c,P=L,E=L,G=K.apply(this,arguments)/2,H=G>y&&(O?+O.apply(this,arguments):j(a*a+s*s)),w=_(rn(s-a)/2,+q.apply(this,arguments)),p=w,x=w,e,r;if(H>y){var M=sn(H/a*I(G)),z=sn(H/s*I(G));(P-=M*2)>y?(M*=t?1:-1,A+=M,T-=M):(P=0,A=T=(f+c)/2),(E-=z*2)>y?(z*=t?1:-1,m+=z,g-=z):(E=0,m=g=(f+c)/2)}var Q=s*N(m),V=s*I(m),B=a*N(T),C=a*I(T);if(w>y){var F=s*N(g),U=s*I(g),X=a*N(A),Y=a*I(A),S;if(L<un)if(S=pn(Q,V,X,Y,F,U,B,C)){var Z=Q-S[0],$=V-S[1],k=F-S[0],b=U-S[1],nn=1/I(fn((Z*k+$*b)/(j(Z*Z+$*$)*j(k*k+b*b)))/2),en=j(S[0]*S[0]+S[1]*S[1]);p=_(w,(a-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}E>y?x>y?(e=W(X,Y,Q,V,s,x,t),r=W(F,U,B,C,s,x,t),u.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),u.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(u.moveTo(Q,V),u.arc(0,0,s,m,g,!t)):u.moveTo(Q,V),!(a>y)||!(P>y)?u.lineTo(B,C):p>y?(e=W(B,C,F,U,a,-p,t),r=W(Q,V,X,Y,a,-p,t),u.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?u.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(u.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),u.arc(0,0,a,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),u.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):u.arc(0,0,a,T,A,t)}if(u.closePath(),n)return u=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +R.apply(this,arguments))/2-un/2;return[N(d)*n,I(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:J(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:J(+n),i):h},i.cornerRadius=function(n){return arguments.length?(q=typeof n=="function"?n:J(+n),i):q},i.padRadius=function(n){return arguments.length?(O=n==null?null:typeof n=="function"?n:J(+n),i):O},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:J(+n),i):v},i.endAngle=function(n){return arguments.length?(R=typeof n=="function"?n:J(+n),i):R},i.padAngle=function(n){return arguments.length?(K=typeof n=="function"?n:J(+n),i):K},i.context=function(n){return arguments.length?(u=n??null,i):u},i}export{hn as d};