@leanspec/ui 0.2.28-dev.23044283727 → 0.2.28

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 (140) hide show
  1. package/dist/{_baseUniq-DeCRnh20.js → _baseUniq-BtJuknnJ.js} +1 -1
  2. package/dist/{arc-C7Ja-5dr.js → arc-O-rE7YCB.js} +1 -1
  3. package/dist/{architecture-U656AL7Q-KasuNmTK.js → architecture-U656AL7Q-BeYqAAo7.js} +1 -1
  4. package/dist/{architectureDiagram-VXUJARFQ-CzHvPXJk.js → architectureDiagram-VXUJARFQ-DlDB9-tN.js} +3 -3
  5. package/dist/assets/{ChatSettingsPage-Dg4b6Mdg.js → ChatSettingsPage-DftRMMtU.js} +1 -1
  6. package/dist/assets/{ContextPage-DLKsvbaY.js → ContextPage-CbK7ew6E.js} +1 -1
  7. package/dist/assets/{DashboardPage-D5roDkxO.js → DashboardPage-DQH28Es5.js} +1 -1
  8. package/dist/assets/{DependenciesPage-BlTgal-s.js → DependenciesPage-E93gHx4A.js} +1 -1
  9. package/dist/assets/{FilesPage-u613OfDX.js → FilesPage-BBVU37eW.js} +1 -1
  10. package/dist/assets/{SessionDetailPage-CmisG8OY.js → SessionDetailPage-7Nyk2Vvu.js} +1 -1
  11. package/dist/assets/{SessionsPage-Ov5FSlG0.js → SessionsPage-aHydkWMy.js} +1 -1
  12. package/dist/assets/{SpecDetailPage-BSMc3nst.js → SpecDetailPage-C2P-OlXI.js} +1 -1
  13. package/dist/assets/{SpecsPage-Cj6pRfOw.js → SpecsPage-CYIBmjhJ.js} +1 -1
  14. package/dist/assets/{StatsPage-fmGNHIOe.js → StatsPage-BE2SnGB_.js} +1 -1
  15. package/dist/assets/{_baseUniq-B_33F2hD.js → _baseUniq-Dacov6Rp.js} +1 -1
  16. package/dist/assets/{arc-eeGjCukK.js → arc-C1vHYpyW.js} +1 -1
  17. package/dist/assets/{architectureDiagram-VXUJARFQ-Byc0dVxO.js → architectureDiagram-VXUJARFQ-CJuppwvY.js} +1 -1
  18. package/dist/assets/{blockDiagram-VD42YOAC-B8mIUKCH.js → blockDiagram-VD42YOAC-JKuFC2tB.js} +1 -1
  19. package/dist/assets/{c4Diagram-YG6GDRKO-DddzPdre.js → c4Diagram-YG6GDRKO-BGNHTjgV.js} +1 -1
  20. package/dist/assets/channel-BBhsr-rR.js +1 -0
  21. package/dist/assets/{chunk-4BX2VUAB-4RrLP-cY.js → chunk-4BX2VUAB-Dn9K_Ir6.js} +1 -1
  22. package/dist/assets/{chunk-55IACEB6-C8ucnnQR.js → chunk-55IACEB6-CEO6q7uK.js} +1 -1
  23. package/dist/assets/{chunk-B4BG7PRW-DwNhZZ7r.js → chunk-B4BG7PRW-DeXdKUh1.js} +1 -1
  24. package/dist/assets/{chunk-DI55MBZ5-orfhja3l.js → chunk-DI55MBZ5-CoaAvDwo.js} +1 -1
  25. package/dist/assets/{chunk-FMBD7UC4-BuW1I-fC.js → chunk-FMBD7UC4-D6UFHN61.js} +1 -1
  26. package/dist/assets/{chunk-QN33PNHL-BaA5PO8k.js → chunk-QN33PNHL-BhFNOvzX.js} +1 -1
  27. package/dist/assets/{chunk-QZHKN3VN-Dqa4tmK4.js → chunk-QZHKN3VN-XfElTSSy.js} +1 -1
  28. package/dist/assets/{chunk-TZMSLE5B-djzRrJuy.js → chunk-TZMSLE5B-DAIUJ9YL.js} +1 -1
  29. package/dist/assets/classDiagram-2ON5EDUG-DWsZgeAJ.js +1 -0
  30. package/dist/assets/classDiagram-v2-WZHVMYZB-DWsZgeAJ.js +1 -0
  31. package/dist/assets/clone-C2afIJUs.js +1 -0
  32. package/dist/assets/{code-block-37QAKDTI-AYxzHYF3.js → code-block-37QAKDTI-B3a0lz6t.js} +1 -1
  33. package/dist/assets/{cose-bilkent-S5V4N54A-Cnp1eSFl.js → cose-bilkent-S5V4N54A-BMI_fEV7.js} +1 -1
  34. package/dist/assets/{dagre-6UL2VRFP-CIAWAhQL.js → dagre-6UL2VRFP-Llr-yTYV.js} +1 -1
  35. package/dist/assets/{diagram-PSM6KHXK-CPeehxEt.js → diagram-PSM6KHXK-DwgNF44T.js} +1 -1
  36. package/dist/assets/{diagram-QEK2KX5R-4rkmVp8d.js → diagram-QEK2KX5R-ITZ8Vmt3.js} +1 -1
  37. package/dist/assets/{diagram-S2PKOQOG-CHZnsBbD.js → diagram-S2PKOQOG-BIRpYLio.js} +1 -1
  38. package/dist/assets/{erDiagram-Q2GNP2WA-C4TTAGaG.js → erDiagram-Q2GNP2WA-BqqB9yVU.js} +1 -1
  39. package/dist/assets/{flowDiagram-NV44I4VS-C9c1GVlY.js → flowDiagram-NV44I4VS-BNAcE_z4.js} +1 -1
  40. package/dist/assets/{funnel-x-BvY4n8AU.js → funnel-x-DD5BpUpW.js} +1 -1
  41. package/dist/assets/{ganttDiagram-JELNMOA3-DPd-3uLN.js → ganttDiagram-JELNMOA3-DXHyY80Y.js} +1 -1
  42. package/dist/assets/{gitGraphDiagram-NY62KEGX-Drq0KNG5.js → gitGraphDiagram-NY62KEGX-BgdesX0s.js} +1 -1
  43. package/dist/assets/{graph-9MjkFnGf.js → graph-0GUv5NSb.js} +1 -1
  44. package/dist/assets/index-C5tD8lpO.css +1 -0
  45. package/dist/assets/{index-DoWWshr8.js → index-DSWQaVP_.js} +280 -280
  46. package/dist/assets/{info-RxIWhHbS.js → info-BoE52mzX.js} +1 -1
  47. package/dist/assets/{infoDiagram-WHAUD3N6-BEa020kA.js → infoDiagram-WHAUD3N6-C_TEtQdE.js} +1 -1
  48. package/dist/assets/{journeyDiagram-XKPGCS4Q-mAbpJFG8.js → journeyDiagram-XKPGCS4Q-JFcsNaoS.js} +1 -1
  49. package/dist/assets/{kanban-definition-3W4ZIXB7-BbUqw1vO.js → kanban-definition-3W4ZIXB7-D74EewjL.js} +1 -1
  50. package/dist/assets/{layout-BOFaVoue.js → layout-DlGkdPxn.js} +1 -1
  51. package/dist/assets/{linear-xUbiORsA.js → linear-DMzKEHWt.js} +1 -1
  52. package/dist/assets/{min-eHwPCINR.js → min-D9GrKucE.js} +1 -1
  53. package/dist/assets/{mindmap-definition-VGOIOE7T-DoP6Td_B.js → mindmap-definition-VGOIOE7T-bEmI6QdX.js} +1 -1
  54. package/dist/assets/{page-transition-dCsDSjnv.js → page-transition-BMYHE1EG.js} +1 -1
  55. package/dist/assets/{pieDiagram-ADFJNKIX-Dp_SBNAy.js → pieDiagram-ADFJNKIX-LrgsuoFm.js} +1 -1
  56. package/dist/assets/{quadrantDiagram-AYHSOK5B-D6Jp00F5.js → quadrantDiagram-AYHSOK5B-XAEnrTcF.js} +1 -1
  57. package/dist/assets/{refresh-ccw-DGe62KT5.js → refresh-ccw-CqpLwlfM.js} +1 -1
  58. package/dist/assets/{requirementDiagram-UZGBJVZJ-DOBz3Rdv.js → requirementDiagram-UZGBJVZJ-DQ1RBDeF.js} +1 -1
  59. package/dist/assets/{sankeyDiagram-TZEHDZUN-Bz7vjGqd.js → sankeyDiagram-TZEHDZUN-4LprtsUC.js} +1 -1
  60. package/dist/assets/{sequenceDiagram-WL72ISMW-ByPYmOvZ.js → sequenceDiagram-WL72ISMW-ClnYRNdC.js} +1 -1
  61. package/dist/assets/{session-mode-badge-DCssJwfh.js → session-mode-badge-auIgZbxq.js} +1 -1
  62. package/dist/assets/{stat-card-ic_H-ddZ.js → stat-card-BdyKZs20.js} +1 -1
  63. package/dist/assets/{stateDiagram-FKZM4ZOC-W833g5qw.js → stateDiagram-FKZM4ZOC-xdSWJeM-.js} +1 -1
  64. package/dist/assets/stateDiagram-v2-4FDKWEC3-DyupCcgD.js +1 -0
  65. package/dist/assets/{table-of-contents-B4pUXfVp.js → table-of-contents-B56zI3O0.js} +1 -1
  66. package/dist/assets/{time-s4hpWI0y.js → time-BvMRJTpu.js} +1 -1
  67. package/dist/assets/{timeline-definition-IT6M3QCI-B3f6ZKjd.js → timeline-definition-IT6M3QCI-BMCplyxv.js} +1 -1
  68. package/dist/assets/{treemap-KMMF4GRG-CkWhJIwZ.js → treemap-KMMF4GRG-DXswoz8b.js} +1 -1
  69. package/dist/assets/{trending-up-Bp_uZ6i5.js → trending-up-qrMVjIzR.js} +1 -1
  70. package/dist/assets/{validation-badge-B9E1wcwj.js → validation-badge-DKLDRlSe.js} +1 -1
  71. package/dist/assets/{xychartDiagram-PRI3JC2R-Cj3LJwsf.js → xychartDiagram-PRI3JC2R-LmjJ6LwN.js} +1 -1
  72. package/dist/{blockDiagram-VD42YOAC-DRN0jNqr.js → blockDiagram-VD42YOAC-Cvqa8noV.js} +5 -5
  73. package/dist/{c4Diagram-YG6GDRKO-CBxJIsoM.js → c4Diagram-YG6GDRKO-D4hwame5.js} +2 -2
  74. package/dist/{channel-C2ap0mKj.js → channel-C59vLj3i.js} +1 -1
  75. package/dist/{chunk-4BX2VUAB-CZFPLiei.js → chunk-4BX2VUAB-BwnJRlDR.js} +1 -1
  76. package/dist/{chunk-55IACEB6-CF8NKj4_.js → chunk-55IACEB6-CUvZDifa.js} +1 -1
  77. package/dist/{chunk-B4BG7PRW-C3jkgdyU.js → chunk-B4BG7PRW-0lyBGfGe.js} +4 -4
  78. package/dist/{chunk-DI55MBZ5-D0hqaHNM.js → chunk-DI55MBZ5-DzuHPqVn.js} +3 -3
  79. package/dist/{chunk-FMBD7UC4-BMvRco5D.js → chunk-FMBD7UC4-CXI1mAvv.js} +1 -1
  80. package/dist/{chunk-QN33PNHL-D8WFPrQ5.js → chunk-QN33PNHL-BX4buhkI.js} +1 -1
  81. package/dist/{chunk-QZHKN3VN-BBkUib8s.js → chunk-QZHKN3VN-p7skz8XQ.js} +1 -1
  82. package/dist/{chunk-TZMSLE5B-CArYpbwP.js → chunk-TZMSLE5B-BaJuPr6J.js} +1 -1
  83. package/dist/{classDiagram-v2-WZHVMYZB-BCig139j.js → classDiagram-2ON5EDUG-Be0dkyy-.js} +2 -2
  84. package/dist/{classDiagram-2ON5EDUG-BCig139j.js → classDiagram-v2-WZHVMYZB-Be0dkyy-.js} +2 -2
  85. package/dist/{clone-DPyGLWtv.js → clone-DDo6Ol2x.js} +1 -1
  86. package/dist/{cose-bilkent-S5V4N54A-C5SYwGsk.js → cose-bilkent-S5V4N54A-Bt2GyPMu.js} +1 -1
  87. package/dist/{dagre-6UL2VRFP-C8I3plmM.js → dagre-6UL2VRFP-B4GNvmUo.js} +5 -5
  88. package/dist/{diagram-PSM6KHXK-cXC7AIdZ.js → diagram-PSM6KHXK-CXpX_sN2.js} +4 -4
  89. package/dist/{diagram-QEK2KX5R-CXNiTV6f.js → diagram-QEK2KX5R-BTpahbEj.js} +3 -3
  90. package/dist/{diagram-S2PKOQOG-CxGzqgZF.js → diagram-S2PKOQOG-BAp1IJGB.js} +3 -3
  91. package/dist/{erDiagram-Q2GNP2WA-CcY6lgTn.js → erDiagram-Q2GNP2WA-RpXtWNOz.js} +4 -4
  92. package/dist/{flowDiagram-NV44I4VS-12EmxlpA.js → flowDiagram-NV44I4VS-DVAeihFU.js} +5 -5
  93. package/dist/{ganttDiagram-JELNMOA3-pNkGSHoM.js → ganttDiagram-JELNMOA3-NnFNN967.js} +2 -2
  94. package/dist/{gitGraph-F6HP7TQM-DUrKWg_A.js → gitGraph-F6HP7TQM-BA0p69BL.js} +1 -1
  95. package/dist/{gitGraphDiagram-NY62KEGX-BXO3EwIS.js → gitGraphDiagram-NY62KEGX-STAanBwe.js} +4 -4
  96. package/dist/{graph-D813u3VC.js → graph-Cl7g8mJo.js} +2 -2
  97. package/dist/{index-ChBmztZR.js → index-OMQgmcXQ.js} +4104 -4091
  98. package/dist/index.html +2 -2
  99. package/dist/info-NVLQJR56-iVvUDnHs.js +5 -0
  100. package/dist/{infoDiagram-WHAUD3N6-DLh94vHX.js → infoDiagram-WHAUD3N6-Ch5c_x3A.js} +2 -2
  101. package/dist/{journeyDiagram-XKPGCS4Q-CXPtgCeQ.js → journeyDiagram-XKPGCS4Q-BT3WQmRa.js} +4 -4
  102. package/dist/{kanban-definition-3W4ZIXB7-CdIz6-22.js → kanban-definition-3W4ZIXB7-CiJoVHr_.js} +2 -2
  103. package/dist/{layout-cIjTHX6V.js → layout-BsDPuqRL.js} +4 -4
  104. package/dist/lib/components/library/ui/index.d.ts +1 -0
  105. package/dist/lib/components/library/ui/label.d.ts +3 -0
  106. package/dist/lib/components/projects/github-import-dialog.d.ts +6 -0
  107. package/dist/lib/index.js +350 -349
  108. package/dist/lib/lib/api.d.ts +12 -0
  109. package/dist/lib/lib/backend-adapter/core.d.ts +14 -2
  110. package/dist/lib/lib/backend-adapter/http.d.ts +13 -1
  111. package/dist/lib/lib/backend-adapter/tauri.d.ts +13 -1
  112. package/dist/lib/types/api.d.ts +35 -0
  113. package/dist/{linear-2z6avE3r.js → linear-mOFrDt-p.js} +1 -1
  114. package/dist/{mermaid-parser.core-WMnVe1c0.js → mermaid-parser.core-BKozsbnK.js} +10 -10
  115. package/dist/{min-DUysNg_V.js → min-BiKl7Djw.js} +2 -2
  116. package/dist/{mindmap-definition-VGOIOE7T-DEm273Z9.js → mindmap-definition-VGOIOE7T-BD-DdVQV.js} +3 -3
  117. package/dist/{packet-BFZMPI3H-CmSJj4N0.js → packet-BFZMPI3H-BCwLzQdp.js} +1 -1
  118. package/dist/pie-7BOR55EZ-0JoXf6-u.js +5 -0
  119. package/dist/{pieDiagram-ADFJNKIX-Ke8r-mM4.js → pieDiagram-ADFJNKIX-Bu8RN200.js} +4 -4
  120. package/dist/{quadrantDiagram-AYHSOK5B-DLLlZTBr.js → quadrantDiagram-AYHSOK5B-DI1Je7Nn.js} +2 -2
  121. package/dist/radar-NHE76QYJ-FdQK6UPP.js +5 -0
  122. package/dist/{requirementDiagram-UZGBJVZJ-BR4B8eTH.js → requirementDiagram-UZGBJVZJ-Ddx_vMRb.js} +3 -3
  123. package/dist/{sankeyDiagram-TZEHDZUN-pDGOsl6Q.js → sankeyDiagram-TZEHDZUN-iAFyjtkY.js} +1 -1
  124. package/dist/{sequenceDiagram-WL72ISMW-yt5mqXYT.js → sequenceDiagram-WL72ISMW-NRQcqxnw.js} +3 -3
  125. package/dist/{stateDiagram-FKZM4ZOC-C-huUZaG.js → stateDiagram-FKZM4ZOC-3S1hbbmf.js} +4 -4
  126. package/dist/{stateDiagram-v2-4FDKWEC3-CSzbVv4p.js → stateDiagram-v2-4FDKWEC3-E5a40kZz.js} +2 -2
  127. package/dist/{timeline-definition-IT6M3QCI-DOzsM3OK.js → timeline-definition-IT6M3QCI-BCFa3ZrF.js} +2 -2
  128. package/dist/{treemap-KMMF4GRG-DGnMOcp3.js → treemap-KMMF4GRG-BGlzeb2l.js} +1 -1
  129. package/dist/ui.css +1 -1
  130. package/dist/{xychartDiagram-PRI3JC2R-C-4j16qj.js → xychartDiagram-PRI3JC2R-CopvajdE.js} +2 -2
  131. package/package.json +2 -2
  132. package/dist/assets/channel-DlZlZmTt.js +0 -1
  133. package/dist/assets/classDiagram-2ON5EDUG-C2Yf3yFU.js +0 -1
  134. package/dist/assets/classDiagram-v2-WZHVMYZB-C2Yf3yFU.js +0 -1
  135. package/dist/assets/clone-D-4UeXFh.js +0 -1
  136. package/dist/assets/index-DX91j_KV.css +0 -1
  137. package/dist/assets/stateDiagram-v2-4FDKWEC3-CwLThngZ.js +0 -1
  138. package/dist/info-NVLQJR56-DBBp-UIi.js +0 -5
  139. package/dist/pie-7BOR55EZ-x5AF7tG5.js +0 -5
  140. package/dist/radar-NHE76QYJ-CIhcw_Rm.js +0 -5
@@ -1,4 +1,4 @@
1
- import { aV as L, bq as ln, aE as A, aT as P, br as gn, bs as dn, aD as W, bt as hn, bu as z, bv as pn, bl as An, bw as m, aW as N, a$ as U, b2 as T, bx as _n, aZ as on, by as wn, bo as On, aF as V, bm as vn, bz as I } from "./index-ChBmztZR.js";
1
+ import { aV as L, bq as ln, aE as A, aT as P, br as gn, bs as dn, aD as W, bt as hn, bu as z, bv as pn, bl as An, bw as m, aW as N, a$ as U, b2 as T, bx as _n, aZ as on, by as wn, bo as On, aF as V, bm as vn, bz as I } from "./index-OMQgmcXQ.js";
2
2
  var Pn = "[object Symbol]";
3
3
  function x(n) {
4
4
  return typeof n == "symbol" || L(n) && ln(n) == Pn;
@@ -1,4 +1,4 @@
1
- import { a0 as ln, a1 as an, a2 as y, a3 as tn, a4 as H, a5 as q, a6 as _, a7 as un, a8 as B, a9 as rn, aa as L, ab as o, ac as sn, ad as on, ae as fn } from "./index-ChBmztZR.js";
1
+ import { a0 as ln, a1 as an, a2 as y, a3 as tn, a4 as H, a5 as q, a6 as _, a7 as un, a8 as B, a9 as rn, aa as L, ab as o, ac as sn, ad as on, ae as fn } from "./index-OMQgmcXQ.js";
2
2
  function cn(l) {
3
3
  return l.innerRadius;
4
4
  }
@@ -1,4 +1,4 @@
1
- import { A as c, e as t } from "./mermaid-parser.core-WMnVe1c0.js";
1
+ import { A as c, e as t } from "./mermaid-parser.core-BKozsbnK.js";
2
2
  export {
3
3
  c as ArchitectureModule,
4
4
  t as createArchitectureServices
@@ -1,6 +1,6 @@
1
- import { aG as ke, _ as dt, H as Ze, V as qe, l as Se, b as Qe, a as Je, p as Ke, q as je, g as _e, s as tr, y as er, D as rr, E as ir, F as ar, c as Ee, ak as me, aH as pe, i as nr, d as or, x as sr, aI as hr, aJ as lr } from "./index-ChBmztZR.js";
2
- import { p as fr } from "./chunk-4BX2VUAB-CZFPLiei.js";
3
- import { p as cr } from "./mermaid-parser.core-WMnVe1c0.js";
1
+ import { aG as ke, _ as dt, H as Ze, V as qe, l as Se, b as Qe, a as Je, p as Ke, q as je, g as _e, s as tr, y as er, D as rr, E as ir, F as ar, c as Ee, ak as me, aH as pe, i as nr, d as or, x as sr, aI as hr, aJ as lr } from "./index-OMQgmcXQ.js";
2
+ import { p as fr } from "./chunk-4BX2VUAB-BwnJRlDR.js";
3
+ import { p as cr } from "./mermaid-parser.core-BKozsbnK.js";
4
4
  import { c as Fe } from "./cytoscape.esm-Cvf3sx9F.js";
5
5
  var he = { exports: {} }, le = { exports: {} }, fe = { exports: {} }, gr = fe.exports, we;
6
6
  function ur() {
@@ -1 +1 @@
1
- import{h as de,u as U,aP as re,aQ as ce,aR as oe,r as x,j as e,aS as H,C as F,l as z,aT as Z,a as r,aU as he,i as O,k as q,aV as B,aW as G,aX as V,aY as $,aZ as _,a_ as Q,a$ as W,b0 as p,D as S,b as T,c as P,d as M,b1 as L,b2 as R,B as A,b3 as xe,b4 as X}from"./index-DoWWshr8.js";const me=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],Y=de("pen",me);function m({htmlFor:t,children:u,className:l=""}){return e.jsx("label",{htmlFor:t,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 ${l}`,children:u})}function ve(){const{t}=U("common"),u=re(),{data:l,isLoading:j,error:a,refetch:i}=ce(),{updateProvider:o,deleteProvider:d,updateModel:c,deleteModel:h,updateDefaults:f}=oe(),v=a?.message??null,[n,y]=x.useState(!1),[J,C]=x.useState(null),[ee,b]=x.useState(!1),[N,k]=x.useState(null),[K,D]=x.useState(null),[I,w]=x.useState(null),se=s=>{D(s)},te=async()=>{!l||!K||(await d({config:l,providerId:K}),D(null))},ae=async s=>{l&&(await o({config:l,provider:s}),y(!1),C(null))},ie=async(s,g)=>{l&&(await c({config:l,providerId:s,model:g}),b(!1),k(null))},ne=(s,g)=>{w({providerId:s,modelId:g})},le=async()=>{!l||!I||(await h({config:l,providerId:I.providerId,modelId:I.modelId}),w(null))},E=async(s,g)=>{l&&await f({config:l,field:s,value:g})};return j?e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx("div",{className:"animate-pulse text-muted-foreground",children:t("actions.loading")})}):v||!l?e.jsx(H,{children:e.jsx(F,{children:e.jsxs(z,{className:"p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(Z,{className:"h-5 w-5"}),e.jsx("p",{children:v||t("chat.settings.errors.loadConfiguration")})]}),e.jsx(r,{onClick:()=>i(),className:"mt-4",children:t("actions.retry")})]})})}):e.jsxs("div",{className:"h-full overflow-auto",children:[e.jsxs(H,{contentClassName:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(r,{variant:"ghost",size:"icon",onClick:()=>u(-1),children:e.jsx(he,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:t("chat.settings.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("chat.settings.description")})]})]}),e.jsxs(F,{children:[e.jsx(O,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(q,{children:t("chat.settings.providers")}),e.jsx(B,{children:t("chat.settings.providersDescription")})]}),e.jsxs(r,{onClick:()=>{C(null),y(!0)},size:"sm",children:[e.jsx(G,{className:"h-4 w-4 mr-2"}),t("chat.settings.addProvider")]})]})}),e.jsx(z,{className:"space-y-4",children:l.providers.map(s=>e.jsx(ue,{provider:s,isDefault:l.settings.defaultProviderId===s.id,onEdit:()=>{C(s),y(!0)},onDelete:()=>se(s.id),onAddModel:()=>{k({providerId:s.id,model:null}),b(!0)},onEditModel:g=>{k({providerId:s.id,model:g}),b(!0)},onDeleteModel:g=>ne(s.id,g)},s.id))})]}),e.jsxs(F,{children:[e.jsxs(O,{children:[e.jsx(q,{children:t("chat.settings.defaults")}),e.jsx(B,{children:t("chat.settings.defaultsDescription")})]}),e.jsx(z,{className:"space-y-4",children:e.jsxs("div",{className:"grid gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"default-provider",children:t("chat.settings.defaultProvider")}),e.jsxs(V,{value:l.settings.defaultProviderId,onValueChange:s=>E("defaultProviderId",s),children:[e.jsx($,{id:"default-provider",children:e.jsx(_,{})}),e.jsx(Q,{children:l.providers.map(s=>e.jsx(W,{value:s.id,disabled:!s.hasApiKey,children:s.name},s.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"default-model",children:t("chat.settings.defaultModel")}),e.jsxs(V,{value:l.settings.defaultModelId,onValueChange:s=>E("defaultModelId",s),children:[e.jsx($,{id:"default-model",children:e.jsx(_,{})}),e.jsx(Q,{children:l.providers.find(s=>s.id===l.settings.defaultProviderId)?.models.map(s=>e.jsx(W,{value:s.id,children:s.name},s.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"max-steps",children:t("chat.settings.maxSteps")}),e.jsx(p,{id:"max-steps",type:"number",min:1,max:50,value:l.settings.maxSteps,onChange:s=>E("maxSteps",Number(s.target.value))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("chat.settings.maxStepsHelp")})]})]})})]})]}),n&&e.jsx(je,{provider:J,existingIds:l.providers.map(s=>s.id),onSave:ae,onCancel:()=>{y(!1),C(null)}}),ee&&N&&e.jsx(ge,{model:N.model,providerId:N.providerId,existingIds:l.providers.find(s=>s.id===N.providerId)?.models.map(s=>s.id)??[],onSave:s=>ie(N.providerId,s),onCancel:()=>{b(!1),k(null)}}),e.jsx(S,{open:!!K,onOpenChange:s=>!s&&D(null),children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:t("chat.settings.deleteProviderTitle")}),e.jsx(L,{children:t("chat.settings.confirmDeleteProvider")})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:()=>D(null),children:t("actions.cancel")}),e.jsx(r,{variant:"destructive",onClick:te,children:t("actions.delete")})]})]})}),e.jsx(S,{open:!!I,onOpenChange:s=>!s&&w(null),children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:t("chat.settings.deleteModelTitle")}),e.jsx(L,{children:t("chat.settings.confirmDeleteModel")})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:()=>w(null),children:t("actions.cancel")}),e.jsx(r,{variant:"destructive",onClick:le,children:t("actions.delete")})]})]})})]})}function ue({provider:t,isDefault:u,onEdit:l,onDelete:j,onAddModel:a,onEditModel:i,onDeleteModel:o}){const{t:d}=U("common");return e.jsxs("div",{className:"border rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"font-semibold",children:t.name}),u&&e.jsx(A,{variant:"secondary",className:"text-xs",children:d("chat.settings.default")}),t.hasApiKey?e.jsxs(A,{variant:"outline",className:"text-xs gap-1",children:[e.jsx(xe,{className:"h-3 w-3"}),d("chat.settings.keyConfigured")]}):e.jsxs(A,{variant:"destructive",className:"text-xs gap-1",children:[e.jsx(Z,{className:"h-3 w-3"}),d("chat.settings.noKey")]})]}),e.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[t.id," ",t.baseURL&&`• ${t.baseURL}`]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(r,{variant:"ghost",size:"icon",onClick:l,children:e.jsx(Y,{className:"h-4 w-4"})}),e.jsx(r,{variant:"ghost",size:"icon",onClick:j,children:e.jsx(X,{className:"h-4 w-4"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:d("chat.settings.models")}),e.jsxs(r,{variant:"ghost",size:"sm",onClick:a,children:[e.jsx(G,{className:"h-3 w-3 mr-1"}),d("chat.settings.addModel")]})]}),e.jsx("div",{className:"space-y-1",children:t.models.map(c=>e.jsxs("div",{className:"flex items-center justify-between text-sm py-1 px-2 rounded hover:bg-muted",children:[e.jsxs("div",{children:[e.jsx("span",{className:"font-mono text-xs",children:c.id}),e.jsx("span",{className:"mx-2 text-muted-foreground",children:"•"}),e.jsx("span",{children:c.name}),c.maxTokens&&e.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["(",c.maxTokens.toLocaleString()," tokens)"]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(r,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>i(c),children:e.jsx(Y,{className:"h-3 w-3"})}),e.jsx(r,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>o(c.id),children:e.jsx(X,{className:"h-3 w-3"})})]})]},c.id))})]})]})}function je({provider:t,existingIds:u,onSave:l,onCancel:j}){const{t:a}=U("common"),[i,o]=x.useState({id:t?.id??"",name:t?.name??"",baseURL:t?.baseURL??"",apiKey:"",hasApiKey:t?.hasApiKey??!1}),[d,c]=x.useState({}),h=!!t,f=()=>{const n={};return i.id.trim()?!h&&u.includes(i.id)?n.id=a("chat.settings.errors.idExists"):/^[a-z0-9-]+$/.test(i.id)||(n.id=a("chat.settings.errors.idInvalid")):n.id=a("chat.settings.errors.idRequired"),i.name.trim()||(n.name=a("chat.settings.errors.nameRequired")),i.baseURL&&!i.baseURL.match(/^https?:\/\//)&&(n.baseURL=a("chat.settings.errors.urlInvalid")),c(n),Object.keys(n).length===0},v=()=>{if(!f())return;const n=i.apiKey.trim();l({id:i.id,name:i.name,baseURL:i.baseURL||void 0,models:t?.models??[],hasApiKey:n?!0:i.hasApiKey,apiKey:n||void 0})};return e.jsx(S,{open:!0,onOpenChange:j,children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:a(h?"chat.settings.editProvider":"chat.settings.addProvider")}),e.jsx(L,{children:a("chat.settings.providerDialogDescription")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"provider-id",children:[a("chat.settings.providerId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"provider-id",value:i.id,onChange:n=>o({...i,id:n.target.value}),placeholder:a("chat.settings.placeholders.providerId"),disabled:h}),d.id&&e.jsx("p",{className:"text-xs text-destructive",children:d.id}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.providerIdHelp")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"provider-name",children:[a("chat.settings.providerName")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"provider-name",value:i.name,onChange:n=>o({...i,name:n.target.value}),placeholder:a("chat.settings.placeholders.providerName")}),d.name&&e.jsx("p",{className:"text-xs text-destructive",children:d.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"provider-baseurl",children:a("chat.settings.baseURL")}),e.jsx(p,{id:"provider-baseurl",value:i.baseURL,onChange:n=>o({...i,baseURL:n.target.value}),placeholder:a("chat.settings.placeholders.baseUrl")}),d.baseURL&&e.jsx("p",{className:"text-xs text-destructive",children:d.baseURL}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.baseURLHelp")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"provider-apikey",children:a("chat.settings.apiKey")}),e.jsx(p,{id:"provider-apikey",type:"password",value:i.apiKey,onChange:n=>o({...i,apiKey:n.target.value}),placeholder:a(h?"chat.settings.placeholders.apiKeyMasked":"chat.settings.placeholders.apiKeyEnv")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.apiKeyHelp")})]})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:j,children:a("actions.cancel")}),e.jsx(r,{onClick:v,children:a("actions.save")})]})]})})}function ge({model:t,existingIds:u,onSave:l,onCancel:j}){const{t:a}=U("common"),[i,o]=x.useState({id:t?.id??"",name:t?.name??"",maxTokens:t?.maxTokens?.toString()??""}),[d,c]=x.useState({}),h=!!t,f=()=>{const n={};return i.id.trim()?!h&&u.includes(i.id)&&(n.id=a("chat.settings.errors.modelIdExists")):n.id=a("chat.settings.errors.modelIdRequired"),i.name.trim()||(n.name=a("chat.settings.errors.modelNameRequired")),i.maxTokens&&Number.isNaN(Number(i.maxTokens))&&(n.maxTokens=a("chat.settings.errors.maxTokensInvalid")),c(n),Object.keys(n).length===0},v=()=>{f()&&l({id:i.id,name:i.name,maxTokens:i.maxTokens?Number(i.maxTokens):void 0})};return e.jsx(S,{open:!0,onOpenChange:j,children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:a(h?"chat.settings.editModel":"chat.settings.addModel")}),e.jsx(L,{children:a("chat.settings.modelDialogDescription")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"model-id",children:[a("chat.settings.modelId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"model-id",value:i.id,onChange:n=>o({...i,id:n.target.value}),placeholder:a("chat.settings.placeholders.modelId"),disabled:h}),d.id&&e.jsx("p",{className:"text-xs text-destructive",children:d.id})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"model-name",children:[a("chat.settings.modelName")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"model-name",value:i.name,onChange:n=>o({...i,name:n.target.value}),placeholder:a("chat.settings.placeholders.modelName")}),d.name&&e.jsx("p",{className:"text-xs text-destructive",children:d.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"model-maxtokens",children:a("chat.settings.maxTokens")}),e.jsx(p,{id:"model-maxtokens",type:"number",value:i.maxTokens,onChange:n=>o({...i,maxTokens:n.target.value}),placeholder:a("chat.settings.placeholders.maxTokens")}),d.maxTokens&&e.jsx("p",{className:"text-xs text-destructive",children:d.maxTokens}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.maxTokensHelp")})]})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:j,children:a("actions.cancel")}),e.jsx(r,{onClick:v,children:a("actions.save")})]})]})})}export{ve as ChatSettingsPage};
1
+ import{h as de,u as U,aP as re,aQ as ce,aR as oe,r as x,j as e,aS as H,C as F,l as z,aT as Z,a as r,aU as he,i as O,k as q,aV as B,aW as G,aX as V,aY as $,aZ as _,a_ as Q,a$ as W,b0 as p,D as S,b as T,c as P,d as M,b1 as L,b2 as R,B as A,b3 as xe,b4 as X}from"./index-DSWQaVP_.js";const me=[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],Y=de("pen",me);function m({htmlFor:t,children:u,className:l=""}){return e.jsx("label",{htmlFor:t,className:`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 ${l}`,children:u})}function ve(){const{t}=U("common"),u=re(),{data:l,isLoading:j,error:a,refetch:i}=ce(),{updateProvider:o,deleteProvider:d,updateModel:c,deleteModel:h,updateDefaults:f}=oe(),v=a?.message??null,[n,y]=x.useState(!1),[J,C]=x.useState(null),[ee,b]=x.useState(!1),[N,k]=x.useState(null),[K,D]=x.useState(null),[I,w]=x.useState(null),se=s=>{D(s)},te=async()=>{!l||!K||(await d({config:l,providerId:K}),D(null))},ae=async s=>{l&&(await o({config:l,provider:s}),y(!1),C(null))},ie=async(s,g)=>{l&&(await c({config:l,providerId:s,model:g}),b(!1),k(null))},ne=(s,g)=>{w({providerId:s,modelId:g})},le=async()=>{!l||!I||(await h({config:l,providerId:I.providerId,modelId:I.modelId}),w(null))},E=async(s,g)=>{l&&await f({config:l,field:s,value:g})};return j?e.jsx("div",{className:"flex items-center justify-center h-full",children:e.jsx("div",{className:"animate-pulse text-muted-foreground",children:t("actions.loading")})}):v||!l?e.jsx(H,{children:e.jsx(F,{children:e.jsxs(z,{className:"p-6",children:[e.jsxs("div",{className:"flex items-center gap-2 text-destructive",children:[e.jsx(Z,{className:"h-5 w-5"}),e.jsx("p",{children:v||t("chat.settings.errors.loadConfiguration")})]}),e.jsx(r,{onClick:()=>i(),className:"mt-4",children:t("actions.retry")})]})})}):e.jsxs("div",{className:"h-full overflow-auto",children:[e.jsxs(H,{contentClassName:"space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx(r,{variant:"ghost",size:"icon",onClick:()=>u(-1),children:e.jsx(he,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-2xl font-bold",children:t("chat.settings.title")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t("chat.settings.description")})]})]}),e.jsxs(F,{children:[e.jsx(O,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(q,{children:t("chat.settings.providers")}),e.jsx(B,{children:t("chat.settings.providersDescription")})]}),e.jsxs(r,{onClick:()=>{C(null),y(!0)},size:"sm",children:[e.jsx(G,{className:"h-4 w-4 mr-2"}),t("chat.settings.addProvider")]})]})}),e.jsx(z,{className:"space-y-4",children:l.providers.map(s=>e.jsx(ue,{provider:s,isDefault:l.settings.defaultProviderId===s.id,onEdit:()=>{C(s),y(!0)},onDelete:()=>se(s.id),onAddModel:()=>{k({providerId:s.id,model:null}),b(!0)},onEditModel:g=>{k({providerId:s.id,model:g}),b(!0)},onDeleteModel:g=>ne(s.id,g)},s.id))})]}),e.jsxs(F,{children:[e.jsxs(O,{children:[e.jsx(q,{children:t("chat.settings.defaults")}),e.jsx(B,{children:t("chat.settings.defaultsDescription")})]}),e.jsx(z,{className:"space-y-4",children:e.jsxs("div",{className:"grid gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"default-provider",children:t("chat.settings.defaultProvider")}),e.jsxs(V,{value:l.settings.defaultProviderId,onValueChange:s=>E("defaultProviderId",s),children:[e.jsx($,{id:"default-provider",children:e.jsx(_,{})}),e.jsx(Q,{children:l.providers.map(s=>e.jsx(W,{value:s.id,disabled:!s.hasApiKey,children:s.name},s.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"default-model",children:t("chat.settings.defaultModel")}),e.jsxs(V,{value:l.settings.defaultModelId,onValueChange:s=>E("defaultModelId",s),children:[e.jsx($,{id:"default-model",children:e.jsx(_,{})}),e.jsx(Q,{children:l.providers.find(s=>s.id===l.settings.defaultProviderId)?.models.map(s=>e.jsx(W,{value:s.id,children:s.name},s.id))})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"max-steps",children:t("chat.settings.maxSteps")}),e.jsx(p,{id:"max-steps",type:"number",min:1,max:50,value:l.settings.maxSteps,onChange:s=>E("maxSteps",Number(s.target.value))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t("chat.settings.maxStepsHelp")})]})]})})]})]}),n&&e.jsx(je,{provider:J,existingIds:l.providers.map(s=>s.id),onSave:ae,onCancel:()=>{y(!1),C(null)}}),ee&&N&&e.jsx(ge,{model:N.model,providerId:N.providerId,existingIds:l.providers.find(s=>s.id===N.providerId)?.models.map(s=>s.id)??[],onSave:s=>ie(N.providerId,s),onCancel:()=>{b(!1),k(null)}}),e.jsx(S,{open:!!K,onOpenChange:s=>!s&&D(null),children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:t("chat.settings.deleteProviderTitle")}),e.jsx(L,{children:t("chat.settings.confirmDeleteProvider")})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:()=>D(null),children:t("actions.cancel")}),e.jsx(r,{variant:"destructive",onClick:te,children:t("actions.delete")})]})]})}),e.jsx(S,{open:!!I,onOpenChange:s=>!s&&w(null),children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:t("chat.settings.deleteModelTitle")}),e.jsx(L,{children:t("chat.settings.confirmDeleteModel")})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:()=>w(null),children:t("actions.cancel")}),e.jsx(r,{variant:"destructive",onClick:le,children:t("actions.delete")})]})]})})]})}function ue({provider:t,isDefault:u,onEdit:l,onDelete:j,onAddModel:a,onEditModel:i,onDeleteModel:o}){const{t:d}=U("common");return e.jsxs("div",{className:"border rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h3",{className:"font-semibold",children:t.name}),u&&e.jsx(A,{variant:"secondary",className:"text-xs",children:d("chat.settings.default")}),t.hasApiKey?e.jsxs(A,{variant:"outline",className:"text-xs gap-1",children:[e.jsx(xe,{className:"h-3 w-3"}),d("chat.settings.keyConfigured")]}):e.jsxs(A,{variant:"destructive",className:"text-xs gap-1",children:[e.jsx(Z,{className:"h-3 w-3"}),d("chat.settings.noKey")]})]}),e.jsxs("p",{className:"text-sm text-muted-foreground mt-1",children:[t.id," ",t.baseURL&&`• ${t.baseURL}`]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(r,{variant:"ghost",size:"icon",onClick:l,children:e.jsx(Y,{className:"h-4 w-4"})}),e.jsx(r,{variant:"ghost",size:"icon",onClick:j,children:e.jsx(X,{className:"h-4 w-4"})})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:d("chat.settings.models")}),e.jsxs(r,{variant:"ghost",size:"sm",onClick:a,children:[e.jsx(G,{className:"h-3 w-3 mr-1"}),d("chat.settings.addModel")]})]}),e.jsx("div",{className:"space-y-1",children:t.models.map(c=>e.jsxs("div",{className:"flex items-center justify-between text-sm py-1 px-2 rounded hover:bg-muted",children:[e.jsxs("div",{children:[e.jsx("span",{className:"font-mono text-xs",children:c.id}),e.jsx("span",{className:"mx-2 text-muted-foreground",children:"•"}),e.jsx("span",{children:c.name}),c.maxTokens&&e.jsxs("span",{className:"ml-2 text-xs text-muted-foreground",children:["(",c.maxTokens.toLocaleString()," tokens)"]})]}),e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(r,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>i(c),children:e.jsx(Y,{className:"h-3 w-3"})}),e.jsx(r,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:()=>o(c.id),children:e.jsx(X,{className:"h-3 w-3"})})]})]},c.id))})]})]})}function je({provider:t,existingIds:u,onSave:l,onCancel:j}){const{t:a}=U("common"),[i,o]=x.useState({id:t?.id??"",name:t?.name??"",baseURL:t?.baseURL??"",apiKey:"",hasApiKey:t?.hasApiKey??!1}),[d,c]=x.useState({}),h=!!t,f=()=>{const n={};return i.id.trim()?!h&&u.includes(i.id)?n.id=a("chat.settings.errors.idExists"):/^[a-z0-9-]+$/.test(i.id)||(n.id=a("chat.settings.errors.idInvalid")):n.id=a("chat.settings.errors.idRequired"),i.name.trim()||(n.name=a("chat.settings.errors.nameRequired")),i.baseURL&&!i.baseURL.match(/^https?:\/\//)&&(n.baseURL=a("chat.settings.errors.urlInvalid")),c(n),Object.keys(n).length===0},v=()=>{if(!f())return;const n=i.apiKey.trim();l({id:i.id,name:i.name,baseURL:i.baseURL||void 0,models:t?.models??[],hasApiKey:n?!0:i.hasApiKey,apiKey:n||void 0})};return e.jsx(S,{open:!0,onOpenChange:j,children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:a(h?"chat.settings.editProvider":"chat.settings.addProvider")}),e.jsx(L,{children:a("chat.settings.providerDialogDescription")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"provider-id",children:[a("chat.settings.providerId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"provider-id",value:i.id,onChange:n=>o({...i,id:n.target.value}),placeholder:a("chat.settings.placeholders.providerId"),disabled:h}),d.id&&e.jsx("p",{className:"text-xs text-destructive",children:d.id}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.providerIdHelp")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"provider-name",children:[a("chat.settings.providerName")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"provider-name",value:i.name,onChange:n=>o({...i,name:n.target.value}),placeholder:a("chat.settings.placeholders.providerName")}),d.name&&e.jsx("p",{className:"text-xs text-destructive",children:d.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"provider-baseurl",children:a("chat.settings.baseURL")}),e.jsx(p,{id:"provider-baseurl",value:i.baseURL,onChange:n=>o({...i,baseURL:n.target.value}),placeholder:a("chat.settings.placeholders.baseUrl")}),d.baseURL&&e.jsx("p",{className:"text-xs text-destructive",children:d.baseURL}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.baseURLHelp")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"provider-apikey",children:a("chat.settings.apiKey")}),e.jsx(p,{id:"provider-apikey",type:"password",value:i.apiKey,onChange:n=>o({...i,apiKey:n.target.value}),placeholder:a(h?"chat.settings.placeholders.apiKeyMasked":"chat.settings.placeholders.apiKeyEnv")}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.apiKeyHelp")})]})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:j,children:a("actions.cancel")}),e.jsx(r,{onClick:v,children:a("actions.save")})]})]})})}function ge({model:t,existingIds:u,onSave:l,onCancel:j}){const{t:a}=U("common"),[i,o]=x.useState({id:t?.id??"",name:t?.name??"",maxTokens:t?.maxTokens?.toString()??""}),[d,c]=x.useState({}),h=!!t,f=()=>{const n={};return i.id.trim()?!h&&u.includes(i.id)&&(n.id=a("chat.settings.errors.modelIdExists")):n.id=a("chat.settings.errors.modelIdRequired"),i.name.trim()||(n.name=a("chat.settings.errors.modelNameRequired")),i.maxTokens&&Number.isNaN(Number(i.maxTokens))&&(n.maxTokens=a("chat.settings.errors.maxTokensInvalid")),c(n),Object.keys(n).length===0},v=()=>{f()&&l({id:i.id,name:i.name,maxTokens:i.maxTokens?Number(i.maxTokens):void 0})};return e.jsx(S,{open:!0,onOpenChange:j,children:e.jsxs(T,{children:[e.jsxs(P,{children:[e.jsx(M,{children:a(h?"chat.settings.editModel":"chat.settings.addModel")}),e.jsx(L,{children:a("chat.settings.modelDialogDescription")})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"model-id",children:[a("chat.settings.modelId")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"model-id",value:i.id,onChange:n=>o({...i,id:n.target.value}),placeholder:a("chat.settings.placeholders.modelId"),disabled:h}),d.id&&e.jsx("p",{className:"text-xs text-destructive",children:d.id})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(m,{htmlFor:"model-name",children:[a("chat.settings.modelName")," ",e.jsx("span",{className:"text-destructive",children:"*"})]}),e.jsx(p,{id:"model-name",value:i.name,onChange:n=>o({...i,name:n.target.value}),placeholder:a("chat.settings.placeholders.modelName")}),d.name&&e.jsx("p",{className:"text-xs text-destructive",children:d.name})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(m,{htmlFor:"model-maxtokens",children:a("chat.settings.maxTokens")}),e.jsx(p,{id:"model-maxtokens",type:"number",value:i.maxTokens,onChange:n=>o({...i,maxTokens:n.target.value}),placeholder:a("chat.settings.placeholders.maxTokens")}),d.maxTokens&&e.jsx("p",{className:"text-xs text-destructive",children:d.maxTokens}),e.jsx("p",{className:"text-xs text-muted-foreground",children:a("chat.settings.maxTokensHelp")})]})]}),e.jsxs(R,{children:[e.jsx(r,{variant:"outline",onClick:j,children:a("actions.cancel")}),e.jsx(r,{onClick:v,children:a("actions.save")})]})]})})}export{ve as ChatSettingsPage};
@@ -1,4 +1,4 @@
1
- import{h as z,r as m,u as P,j as e,aS as v,a as k,aU as _,bU as M,bA as H,bV as $,B as f,bW as V,bX as J,bY as W,bZ as U,b_ as q,b$ as R,c0 as X,c1 as G,c2 as Y,bm as Z,bf as K,bn as Q,b0 as ee,br as te,C as N,l as y,c3 as A,f as I,c4 as E,c5 as se,i as ne,k as ae,aV as oe,aT as S,bh as ce,c6 as re,c7 as le}from"./index-DoWWshr8.js";import{T as ie,a as de}from"./table-of-contents-B4pUXfVp.js";import{I as xe}from"./info-RxIWhHbS.js";const me=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],ge=z("external-link",me);const he=[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]],pe=z("type",he);function ue(t){return e.jsx("input",{type:"checkbox",...t,className:"appearance-none h-4 w-4 shrink-0 rounded-sm border border-input bg-background disabled:cursor-default checked:bg-primary checked:border-primary relative mr-2 top-[3px] align-middle after:content-[''] after:hidden checked:after:block after:absolute after:left-[5px] after:top-[1px] after:w-[4px] after:h-[8px] after:border-r-[2px] after:border-b-[2px] after:border-primary-foreground after:rotate-45"})}function fe(t,o){return`vscode://file${o.startsWith("/")?o:`${t}/${o}`}`}function je({file:t,projectRoot:o,onBack:i}){const[s,x]=m.useState(!1),r=t.name.toLowerCase().endsWith(".md"),c=t.name.toLowerCase().endsWith(".json"),{t:n,i18n:l}=P("common"),h=m.useMemo(()=>t.content,[t.content]),g=async()=>{try{await navigator.clipboard.writeText(t.content),x(!0),setTimeout(()=>x(!1),1500)}catch(a){console.error("Failed to copy context content",a)}},p=()=>{o&&window.open(fe(o,t.path),"_blank")};return e.jsxs(v,{contentClassName:"space-y-6",children:[e.jsxs("header",{className:"flex flex-col gap-3 sticky top-14 bg-background py-2 z-10",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:i,className:"h-8 px-2",children:[e.jsx(_,{className:"h-4 w-4 mr-1"}),n("contextPage.detail.back")]}),e.jsx(M,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("h2",{className:"text-lg sm:text-xl font-semibold leading-tight break-words",children:t.name}),e.jsx("span",{className:"text-xs text-muted-foreground break-all",children:t.path})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[o&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:p,className:"h-8 px-3 text-xs",children:[e.jsx(ge,{className:"h-3.5 w-3.5 mr-1"}),n("contextPage.detail.openInEditor")]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:g,className:"h-8 px-3 text-xs",children:[s?e.jsx(H,{className:"h-3.5 w-3.5 mr-1 text-green-600"}):e.jsx($,{className:"h-3.5 w-3.5 mr-1"}),n(s?"contextPage.detail.copySuccess":"contextPage.detail.copy")]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(pe,{className:"h-3 w-3"}),t.fileType||n("contextPage.detail.defaultFileType")]}),e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(V,{className:"h-3 w-3"}),n("contextPage.badges.tokens",{formattedCount:t.tokenCount.toLocaleString()})]}),e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(M,{className:"h-3 w-3"}),n("contextPage.detail.lines",{count:t.lineCount})]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(J,{className:"h-3.5 w-3.5"}),n("contextPage.detail.modified",{date:W(t.modified??t.modifiedAt,l.language)})]}),e.jsx("span",{className:"text-muted-foreground",children:"•"}),e.jsx("span",{children:n("contextPage.detail.size",{size:(t.size/1024).toFixed(1)})})]})]}),e.jsxs("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1fr)_320px]",children:[e.jsx("div",{className:"overflow-hidden p-4 sm:p-6",children:c?e.jsx("pre",{className:"p-3 text-sm overflow-x-auto bg-muted/40 rounded-md border whitespace-pre-wrap",children:(()=>{try{return JSON.stringify(JSON.parse(t.content),null,2)}catch(a){return console.error("Failed to parse JSON context file",a),t.content}})()}):r?e.jsx("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:e.jsx(U,{remarkPlugins:[X,G],rehypePlugins:[q,R],components:{input:a=>a.type==="checkbox"?e.jsx(ue,{...a}):e.jsx("input",{...a}),pre:({children:a,...d})=>{const j=(Array.isArray(a)?a:[a])[0];if(j&&typeof j=="object"&&"props"in j&&typeof j.props?.className=="string"&&j.props?.className?.includes("language-mermaid")){const C=j.props?.children,F=typeof C=="string"?C:"";return e.jsx(Y,{chart:F})}return e.jsx("pre",{...d,children:a})}},children:t.content})}):e.jsx("pre",{className:"p-3 text-sm overflow-x-auto bg-muted/40 rounded-md border whitespace-pre-wrap",children:t.content})}),r&&e.jsx("aside",{className:"hidden xl:block sticky top-28 h-[calc(100vh-8rem)] overflow-y-auto",children:e.jsx(ie,{content:h})})]}),r&&e.jsx("div",{className:"xl:hidden",children:e.jsx(de,{content:h})})]})}function L(t){return t<5e3?"text-green-600 dark:text-green-400":t<1e4?"text-blue-600 dark:text-blue-400":t<2e4?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function b(t,o){if(!o||o.length<2)return 0;const i=new RegExp(o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),s=t.match(i);return s?s.length:0}function O({icon:t,title:o,description:i,suggestion:s}){return e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(t,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),e.jsx("h3",{className:"text-sm font-medium text-muted-foreground",children:o}),e.jsx("p",{className:"text-xs text-muted-foreground/70 mt-1 max-w-xs",children:i}),s&&e.jsx("p",{className:"text-xs text-primary mt-2",children:s})]})}function Ne({file:t,searchQuery:o,onClick:i}){const{t:s}=P("common"),x=o?b(t.content,o):0;if(!(!o||x>0||t.name.toLowerCase().includes(o.toLowerCase())))return null;const c=x===1?s("contextPage.badges.matchesSingular",{count:x}):s("contextPage.badges.matchesPlural",{count:x}),n=s("contextPage.badges.tokens",{formattedCount:t.tokenCount.toLocaleString()});return e.jsx("button",{onClick:i,className:"w-full text-left p-4 rounded-lg border border-border bg-card hover:bg-accent transition-colors",children:e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx(M,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium truncate",children:t.name}),e.jsx("div",{className:"text-xs text-muted-foreground truncate",children:t.path})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[o&&x>0&&e.jsx(f,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900",children:c}),e.jsxs(f,{variant:"outline",className:"text-xs",children:[e.jsx(A,{className:"h-3 w-3 mr-1"}),n]})]})]})})}function T({title:t,description:o,icon:i,files:s,emptyMessage:x,emptySuggestion:r,searchQuery:c,onFileSelect:n}){const{t:l}=P("common"),h=s.reduce((u,w)=>u+w.tokenCount,0),g=m.useMemo(()=>!c||c.length<2?s:s.filter(u=>{const w=b(u.content,c),B=u.name.toLowerCase().includes(c.toLowerCase());return w>0||B}),[s,c]),p=m.useMemo(()=>!c||c.length<2?0:g.reduce((u,w)=>u+b(w.content,c),0),[g,c]),a=g.length,d=m.useMemo(()=>p===1?l("contextPage.badges.matchesSingular",{count:p}):l("contextPage.badges.matchesPlural",{count:p}),[l,p]),D=m.useMemo(()=>a===s.length?a===1?l("contextPage.badges.filesSingular",{count:a}):l("contextPage.badges.filesPlural",{count:a}):l("contextPage.badges.filesFiltered",{count:a,total:s.length}),[s.length,a,l]),j=m.useMemo(()=>l("contextPage.badges.tokens",{formattedCount:h.toLocaleString()}),[l,h]),C=c?l("contextPage.search.noMatchesTitle"):x,F=l(c?"contextPage.search.noMatchesDescription":"contextPage.search.noFilesDescription");return e.jsxs(N,{children:[e.jsx(ne,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 rounded-lg bg-primary/10",children:e.jsx(i,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{children:[e.jsx(ae,{className:"text-lg",children:t}),e.jsx(oe,{children:o})]})]}),s.length>0&&e.jsxs("div",{className:"flex items-center gap-2",children:[c&&p>0&&e.jsx(f,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:d}),e.jsx(f,{variant:"secondary",className:"text-xs",children:D}),e.jsxs(f,{variant:"outline",className:I("text-xs",L(h)),children:[e.jsx(A,{className:"h-3 w-3 mr-1"}),j]})]})]})}),e.jsx(y,{children:g.length===0?e.jsx(O,{icon:S,title:C,description:F,suggestion:c?void 0:r}):e.jsx("div",{className:"space-y-3",children:g.map(u=>e.jsx(Ne,{file:u,searchQuery:c,onClick:()=>n?.(u)},u.path))})})]})}function ye({context:t}){const[o,i]=m.useState(!1),[s,x]=m.useState(""),[r,c]=m.useState(null),{t:n}=P("common"),l=async()=>{const a=[];for(const d of t.agentInstructions)a.push(`# ${d.path}
1
+ import{h as z,r as m,u as P,j as e,aS as v,a as k,aU as _,bU as M,bA as H,bV as $,B as f,bW as V,bX as J,bY as W,bZ as U,b_ as q,b$ as R,c0 as X,c1 as G,c2 as Y,bm as Z,bf as K,bn as Q,b0 as ee,br as te,C as N,l as y,c3 as A,f as I,c4 as E,c5 as se,i as ne,k as ae,aV as oe,aT as S,bh as ce,c6 as re,c7 as le}from"./index-DSWQaVP_.js";import{T as ie,a as de}from"./table-of-contents-B56zI3O0.js";import{I as xe}from"./info-BoE52mzX.js";const me=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]],ge=z("external-link",me);const he=[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]],pe=z("type",he);function ue(t){return e.jsx("input",{type:"checkbox",...t,className:"appearance-none h-4 w-4 shrink-0 rounded-sm border border-input bg-background disabled:cursor-default checked:bg-primary checked:border-primary relative mr-2 top-[3px] align-middle after:content-[''] after:hidden checked:after:block after:absolute after:left-[5px] after:top-[1px] after:w-[4px] after:h-[8px] after:border-r-[2px] after:border-b-[2px] after:border-primary-foreground after:rotate-45"})}function fe(t,o){return`vscode://file${o.startsWith("/")?o:`${t}/${o}`}`}function je({file:t,projectRoot:o,onBack:i}){const[s,x]=m.useState(!1),r=t.name.toLowerCase().endsWith(".md"),c=t.name.toLowerCase().endsWith(".json"),{t:n,i18n:l}=P("common"),h=m.useMemo(()=>t.content,[t.content]),g=async()=>{try{await navigator.clipboard.writeText(t.content),x(!0),setTimeout(()=>x(!1),1500)}catch(a){console.error("Failed to copy context content",a)}},p=()=>{o&&window.open(fe(o,t.path),"_blank")};return e.jsxs(v,{contentClassName:"space-y-6",children:[e.jsxs("header",{className:"flex flex-col gap-3 sticky top-14 bg-background py-2 z-10",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[i&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:i,className:"h-8 px-2",children:[e.jsx(_,{className:"h-4 w-4 mr-1"}),n("contextPage.detail.back")]}),e.jsx(M,{className:"h-5 w-5 text-primary"}),e.jsxs("div",{className:"flex flex-col",children:[e.jsx("h2",{className:"text-lg sm:text-xl font-semibold leading-tight break-words",children:t.name}),e.jsx("span",{className:"text-xs text-muted-foreground break-all",children:t.path})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[o&&e.jsxs(k,{variant:"ghost",size:"sm",onClick:p,className:"h-8 px-3 text-xs",children:[e.jsx(ge,{className:"h-3.5 w-3.5 mr-1"}),n("contextPage.detail.openInEditor")]}),e.jsxs(k,{variant:"ghost",size:"sm",onClick:g,className:"h-8 px-3 text-xs",children:[s?e.jsx(H,{className:"h-3.5 w-3.5 mr-1 text-green-600"}):e.jsx($,{className:"h-3.5 w-3.5 mr-1"}),n(s?"contextPage.detail.copySuccess":"contextPage.detail.copy")]})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(pe,{className:"h-3 w-3"}),t.fileType||n("contextPage.detail.defaultFileType")]}),e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(V,{className:"h-3 w-3"}),n("contextPage.badges.tokens",{formattedCount:t.tokenCount.toLocaleString()})]}),e.jsxs(f,{variant:"outline",className:"text-xs flex items-center gap-1",children:[e.jsx(M,{className:"h-3 w-3"}),n("contextPage.detail.lines",{count:t.lineCount})]}),e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(J,{className:"h-3.5 w-3.5"}),n("contextPage.detail.modified",{date:W(t.modified??t.modifiedAt,l.language)})]}),e.jsx("span",{className:"text-muted-foreground",children:"•"}),e.jsx("span",{children:n("contextPage.detail.size",{size:(t.size/1024).toFixed(1)})})]})]}),e.jsxs("div",{className:"grid gap-6 xl:grid-cols-[minmax(0,1fr)_320px]",children:[e.jsx("div",{className:"overflow-hidden p-4 sm:p-6",children:c?e.jsx("pre",{className:"p-3 text-sm overflow-x-auto bg-muted/40 rounded-md border whitespace-pre-wrap",children:(()=>{try{return JSON.stringify(JSON.parse(t.content),null,2)}catch(a){return console.error("Failed to parse JSON context file",a),t.content}})()}):r?e.jsx("article",{className:"prose prose-slate dark:prose-invert max-w-none prose-sm sm:prose-base",children:e.jsx(U,{remarkPlugins:[X,G],rehypePlugins:[q,R],components:{input:a=>a.type==="checkbox"?e.jsx(ue,{...a}):e.jsx("input",{...a}),pre:({children:a,...d})=>{const j=(Array.isArray(a)?a:[a])[0];if(j&&typeof j=="object"&&"props"in j&&typeof j.props?.className=="string"&&j.props?.className?.includes("language-mermaid")){const C=j.props?.children,F=typeof C=="string"?C:"";return e.jsx(Y,{chart:F})}return e.jsx("pre",{...d,children:a})}},children:t.content})}):e.jsx("pre",{className:"p-3 text-sm overflow-x-auto bg-muted/40 rounded-md border whitespace-pre-wrap",children:t.content})}),r&&e.jsx("aside",{className:"hidden xl:block sticky top-28 h-[calc(100vh-8rem)] overflow-y-auto",children:e.jsx(ie,{content:h})})]}),r&&e.jsx("div",{className:"xl:hidden",children:e.jsx(de,{content:h})})]})}function L(t){return t<5e3?"text-green-600 dark:text-green-400":t<1e4?"text-blue-600 dark:text-blue-400":t<2e4?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400"}function b(t,o){if(!o||o.length<2)return 0;const i=new RegExp(o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"gi"),s=t.match(i);return s?s.length:0}function O({icon:t,title:o,description:i,suggestion:s}){return e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 text-center",children:[e.jsx(t,{className:"h-12 w-12 text-muted-foreground/50 mb-4"}),e.jsx("h3",{className:"text-sm font-medium text-muted-foreground",children:o}),e.jsx("p",{className:"text-xs text-muted-foreground/70 mt-1 max-w-xs",children:i}),s&&e.jsx("p",{className:"text-xs text-primary mt-2",children:s})]})}function Ne({file:t,searchQuery:o,onClick:i}){const{t:s}=P("common"),x=o?b(t.content,o):0;if(!(!o||x>0||t.name.toLowerCase().includes(o.toLowerCase())))return null;const c=x===1?s("contextPage.badges.matchesSingular",{count:x}):s("contextPage.badges.matchesPlural",{count:x}),n=s("contextPage.badges.tokens",{formattedCount:t.tokenCount.toLocaleString()});return e.jsx("button",{onClick:i,className:"w-full text-left p-4 rounded-lg border border-border bg-card hover:bg-accent transition-colors",children:e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[e.jsx(M,{className:"h-4 w-4 text-primary shrink-0"}),e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-sm font-medium truncate",children:t.name}),e.jsx("div",{className:"text-xs text-muted-foreground truncate",children:t.path})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[o&&x>0&&e.jsx(f,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900",children:c}),e.jsxs(f,{variant:"outline",className:"text-xs",children:[e.jsx(A,{className:"h-3 w-3 mr-1"}),n]})]})]})})}function T({title:t,description:o,icon:i,files:s,emptyMessage:x,emptySuggestion:r,searchQuery:c,onFileSelect:n}){const{t:l}=P("common"),h=s.reduce((u,w)=>u+w.tokenCount,0),g=m.useMemo(()=>!c||c.length<2?s:s.filter(u=>{const w=b(u.content,c),B=u.name.toLowerCase().includes(c.toLowerCase());return w>0||B}),[s,c]),p=m.useMemo(()=>!c||c.length<2?0:g.reduce((u,w)=>u+b(w.content,c),0),[g,c]),a=g.length,d=m.useMemo(()=>p===1?l("contextPage.badges.matchesSingular",{count:p}):l("contextPage.badges.matchesPlural",{count:p}),[l,p]),D=m.useMemo(()=>a===s.length?a===1?l("contextPage.badges.filesSingular",{count:a}):l("contextPage.badges.filesPlural",{count:a}):l("contextPage.badges.filesFiltered",{count:a,total:s.length}),[s.length,a,l]),j=m.useMemo(()=>l("contextPage.badges.tokens",{formattedCount:h.toLocaleString()}),[l,h]),C=c?l("contextPage.search.noMatchesTitle"):x,F=l(c?"contextPage.search.noMatchesDescription":"contextPage.search.noFilesDescription");return e.jsxs(N,{children:[e.jsx(ne,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("div",{className:"p-2 rounded-lg bg-primary/10",children:e.jsx(i,{className:"h-5 w-5 text-primary"})}),e.jsxs("div",{children:[e.jsx(ae,{className:"text-lg",children:t}),e.jsx(oe,{children:o})]})]}),s.length>0&&e.jsxs("div",{className:"flex items-center gap-2",children:[c&&p>0&&e.jsx(f,{variant:"secondary",className:"text-xs bg-yellow-100 dark:bg-yellow-900 text-yellow-800 dark:text-yellow-200",children:d}),e.jsx(f,{variant:"secondary",className:"text-xs",children:D}),e.jsxs(f,{variant:"outline",className:I("text-xs",L(h)),children:[e.jsx(A,{className:"h-3 w-3 mr-1"}),j]})]})]})}),e.jsx(y,{children:g.length===0?e.jsx(O,{icon:S,title:C,description:F,suggestion:c?void 0:r}):e.jsx("div",{className:"space-y-3",children:g.map(u=>e.jsx(Ne,{file:u,searchQuery:c,onClick:()=>n?.(u)},u.path))})})]})}function ye({context:t}){const[o,i]=m.useState(!1),[s,x]=m.useState(""),[r,c]=m.useState(null),{t:n}=P("common"),l=async()=>{const a=[];for(const d of t.agentInstructions)a.push(`# ${d.path}
2
2
 
3
3
  ${d.content}
4
4
  `);t.config.file&&a.push(`# ${t.config.file.path}
@@ -1 +1 @@
1
- import{h as $,j as e,c8 as p,B,c9 as F,ca as E,u as T,bB as I,aS as w,bU as R,bX as A,cb as S,cc as U,C as m,i as u,k as j,l as x,a as f,L as M,bh as q,bj as V,cd as z,r as P,ce as Q,aT as _}from"./index-DoWWshr8.js";import{S as N}from"./stat-card-ic_H-ddZ.js";import{T as D}from"./trending-up-Bp_uZ6i5.js";const H=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],W=$("calendar",H);function C({spec:s,basePath:i="/projects"}){const l=s.title||s.specName,c=`${i}/specs/${s.specName}`;return e.jsx(p,{to:c,className:"block p-3 rounded-lg hover:bg-accent transition-colors",title:s.specName,children:e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.specNumber&&e.jsxs("span",{className:"text-sm font-mono text-muted-foreground shrink-0",children:["#",s.specNumber]}),e.jsx("h4",{className:"text-sm font-medium truncate",children:l})]}),l!==s.specName&&e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:s.specName}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:s.tags.slice(0,3).map(r=>e.jsx(B,{variant:"secondary",className:"text-xs",children:r},r))})]}),e.jsxs("div",{className:"flex flex-col items-end gap-1 shrink-0",children:[s.status&&e.jsx(F,{status:s.status,className:"text-[11px]"}),s.priority&&e.jsx(E,{priority:s.priority,className:"text-[11px]"})]})]})})}function X({spec:s,action:i,time:l,basePath:c="/projects"}){const r=s.title||s.specName,a=`${c}/specs/${s.specName}`,{i18n:d}=T("common"),o=I(l,d.language);return e.jsxs("div",{className:"flex items-start gap-3 py-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-primary mt-2 shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-sm",children:[e.jsxs(p,{to:a,className:"font-medium hover:underline",title:s.specName,children:[s.specNumber&&`#${s.specNumber} `,r]})," ",e.jsx("span",{className:"text-muted-foreground",children:i})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:o})]})]})}function G({specs:s,stats:i,projectColor:l,projectName:c,basePath:r="/projects"}){const{t:a}=T("common"),d=s.filter(t=>t.status==="in-progress").sort((t,n)=>(n.specNumber||0)-(t.specNumber||0)).slice(0,5),o=s.filter(t=>t.status==="planned").sort((t,n)=>(n.specNumber||0)-(t.specNumber||0)).slice(0,5),b=s.slice().sort((t,n)=>{if(!t.createdAt)return 1;if(!n.createdAt)return-1;const v=new Date(t.createdAt).getTime();return new Date(n.createdAt).getTime()-v}).slice(0,5),g=s.filter(t=>t.updatedAt).sort((t,n)=>{if(!t.updatedAt)return 1;if(!n.updatedAt)return-1;const v=new Date(t.updatedAt).getTime();return new Date(n.updatedAt).getTime()-v}).slice(0,10),h=(i.specsByStatus??[]).reduce((t,n)=>(t[n.status]=n.count,t),{}),y=h.complete||0,k=i.completionRate??0;return e.jsxs(w,{contentClassName:"space-y-6 sm:space-y-8",children:[e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-3",children:[l&&e.jsx("div",{className:"h-8 w-2 rounded-full shrink-0",style:{backgroundColor:l}}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl sm:text-4xl font-bold tracking-tight",children:a("dashboard.title")}),e.jsx("p",{className:"text-muted-foreground mt-2",children:c?a("dashboard.subtitleWithProject",{projectName:c}):a("dashboard.subtitle")})]})]})}),e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4",children:[e.jsx(N,{title:a("dashboard.cards.total"),value:i.totalSpecs,icon:R,iconColor:"text-blue-600",gradientFrom:"from-blue-500/10"}),e.jsx(N,{title:a("dashboard.cards.planned"),value:h.planned||0,icon:A,iconColor:"text-purple-600",gradientFrom:"from-purple-500/10"}),e.jsx(N,{title:a("dashboard.cards.inProgress"),value:h["in-progress"]||0,icon:S,iconColor:"text-orange-600",gradientFrom:"from-orange-500/10"}),e.jsx(N,{title:a("dashboard.cards.completed"),value:y,icon:U,iconColor:"text-green-600",gradientFrom:"from-green-500/10",subtext:e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(D,{className:"h-3 w-3"}),a("dashboard.cards.completionRate",{rate:k.toFixed(1)})]})})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4 sm:gap-6",children:[e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(W,{className:"h-5 w-5 text-blue-600"}),a("dashboard.recentlyAdded")]})}),e.jsx(x,{className:"space-y-1",children:b.slice(0,5).map(t=>e.jsx(C,{spec:t,basePath:r},t.id))})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(A,{className:"h-5 w-5 text-purple-600"}),a("dashboard.plannedSection",{count:o.length})]})}),e.jsx(x,{className:"space-y-1",children:o.length>0?o.map(t=>e.jsx(C,{spec:t,basePath:r},t.id)):e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:a("dashboard.noPlanned")})})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(S,{className:"h-5 w-5 text-orange-600"}),a("dashboard.inProgressSection",{count:d.length})]})}),e.jsx(x,{className:"space-y-1",children:d.length>0?d.map(t=>e.jsx(C,{spec:t,basePath:r},t.id)):e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:a("dashboard.noInProgress")})})]})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsx(j,{className:"text-lg",children:a("dashboard.recentActivity")})}),e.jsx(x,{children:e.jsx("div",{className:"border-l-2 border-muted pl-4 space-y-1",children:g.map(t=>e.jsx(X,{spec:t,action:a("dashboard.actionUpdated"),time:t.updatedAt??null,basePath:r},t.id))})})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsx(j,{className:"text-lg",children:a("dashboard.quickActions")})}),e.jsx(x,{children:e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(f,{asChild:!0,children:e.jsxs(p,{to:`${r}/specs`,children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),a("dashboard.viewAllSpecs")]})}),e.jsx(f,{variant:"outline",asChild:!0,children:e.jsxs(p,{to:`${r}/stats`,children:[e.jsx(D,{className:"h-4 w-4 mr-2"}),a("dashboard.viewStats")]})})]})})]})]})}function Y(){const{currentProject:s,loading:i}=q(),l=s?.id??null,c=V(l),r=z(l),{t:a}=T("common"),d=s&&"color"in s?s.color:void 0,o=s?.id?`/projects/${s.id}`:"/projects",b=P.useMemo(()=>Array.isArray(c.data)?c.data:[],[c.data]),g=r.data??null,h=P.useCallback(async()=>{await Promise.all([c.refetch(),r.refetch()])},[c,r]),y=i||c.isLoading||r.isLoading,t=c.error||r.error?a("dashboard.state.errorDescription"):null;return y?e.jsx(Q,{}):s?t?e.jsx(w,{children:e.jsx(m,{children:e.jsxs(x,{className:"py-10 text-center space-y-3",children:[e.jsx("div",{className:"flex justify-center",children:e.jsx(_,{className:"h-6 w-6 text-destructive"})}),e.jsx("div",{className:"text-lg font-semibold",children:a("dashboard.state.errorTitle")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t||a("dashboard.state.errorDescription")}),e.jsx(f,{variant:"secondary",size:"sm",onClick:h,className:"mt-2",children:a("actions.retry")})]})})}):g?e.jsx(G,{specs:b,stats:g,projectColor:d,projectName:s?.name,basePath:o}):null:e.jsx(w,{children:e.jsx(m,{children:e.jsxs(x,{className:"py-10 text-center space-y-3",children:[e.jsx("div",{className:"text-lg font-semibold",children:a("dashboard.state.noProjectTitle",{defaultValue:"No project selected"})}),e.jsx("p",{className:"text-sm text-muted-foreground",children:a("dashboard.state.noProjectDescription",{defaultValue:"Select or create a project to view the dashboard."})}),e.jsx(p,{to:"/projects",className:"inline-flex",children:e.jsx(f,{variant:"secondary",size:"sm",children:a("projectsPage.title",{defaultValue:"Projects"})})})]})})})}export{Y as DashboardPage};
1
+ import{h as $,j as e,c8 as p,B,c9 as F,ca as E,u as T,bB as I,aS as w,bU as R,bX as A,cb as S,cc as U,C as m,i as u,k as j,l as x,a as f,L as M,bh as q,bj as V,cd as z,r as P,ce as Q,aT as _}from"./index-DSWQaVP_.js";import{S as N}from"./stat-card-BdyKZs20.js";import{T as D}from"./trending-up-qrMVjIzR.js";const H=[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]],W=$("calendar",H);function C({spec:s,basePath:i="/projects"}){const l=s.title||s.specName,c=`${i}/specs/${s.specName}`;return e.jsx(p,{to:c,className:"block p-3 rounded-lg hover:bg-accent transition-colors",title:s.specName,children:e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[s.specNumber&&e.jsxs("span",{className:"text-sm font-mono text-muted-foreground shrink-0",children:["#",s.specNumber]}),e.jsx("h4",{className:"text-sm font-medium truncate",children:l})]}),l!==s.specName&&e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:s.specName}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1",children:s.tags.slice(0,3).map(r=>e.jsx(B,{variant:"secondary",className:"text-xs",children:r},r))})]}),e.jsxs("div",{className:"flex flex-col items-end gap-1 shrink-0",children:[s.status&&e.jsx(F,{status:s.status,className:"text-[11px]"}),s.priority&&e.jsx(E,{priority:s.priority,className:"text-[11px]"})]})]})})}function X({spec:s,action:i,time:l,basePath:c="/projects"}){const r=s.title||s.specName,a=`${c}/specs/${s.specName}`,{i18n:d}=T("common"),o=I(l,d.language);return e.jsxs("div",{className:"flex items-start gap-3 py-2",children:[e.jsx("div",{className:"w-2 h-2 rounded-full bg-primary mt-2 shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("p",{className:"text-sm",children:[e.jsxs(p,{to:a,className:"font-medium hover:underline",title:s.specName,children:[s.specNumber&&`#${s.specNumber} `,r]})," ",e.jsx("span",{className:"text-muted-foreground",children:i})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-0.5",children:o})]})]})}function G({specs:s,stats:i,projectColor:l,projectName:c,basePath:r="/projects"}){const{t:a}=T("common"),d=s.filter(t=>t.status==="in-progress").sort((t,n)=>(n.specNumber||0)-(t.specNumber||0)).slice(0,5),o=s.filter(t=>t.status==="planned").sort((t,n)=>(n.specNumber||0)-(t.specNumber||0)).slice(0,5),b=s.slice().sort((t,n)=>{if(!t.createdAt)return 1;if(!n.createdAt)return-1;const v=new Date(t.createdAt).getTime();return new Date(n.createdAt).getTime()-v}).slice(0,5),g=s.filter(t=>t.updatedAt).sort((t,n)=>{if(!t.updatedAt)return 1;if(!n.updatedAt)return-1;const v=new Date(t.updatedAt).getTime();return new Date(n.updatedAt).getTime()-v}).slice(0,10),h=(i.specsByStatus??[]).reduce((t,n)=>(t[n.status]=n.count,t),{}),y=h.complete||0,k=i.completionRate??0;return e.jsxs(w,{contentClassName:"space-y-6 sm:space-y-8",children:[e.jsx("div",{children:e.jsxs("div",{className:"flex items-center gap-3",children:[l&&e.jsx("div",{className:"h-8 w-2 rounded-full shrink-0",style:{backgroundColor:l}}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl sm:text-4xl font-bold tracking-tight",children:a("dashboard.title")}),e.jsx("p",{className:"text-muted-foreground mt-2",children:c?a("dashboard.subtitleWithProject",{projectName:c}):a("dashboard.subtitle")})]})]})}),e.jsxs("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4",children:[e.jsx(N,{title:a("dashboard.cards.total"),value:i.totalSpecs,icon:R,iconColor:"text-blue-600",gradientFrom:"from-blue-500/10"}),e.jsx(N,{title:a("dashboard.cards.planned"),value:h.planned||0,icon:A,iconColor:"text-purple-600",gradientFrom:"from-purple-500/10"}),e.jsx(N,{title:a("dashboard.cards.inProgress"),value:h["in-progress"]||0,icon:S,iconColor:"text-orange-600",gradientFrom:"from-orange-500/10"}),e.jsx(N,{title:a("dashboard.cards.completed"),value:y,icon:U,iconColor:"text-green-600",gradientFrom:"from-green-500/10",subtext:e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(D,{className:"h-3 w-3"}),a("dashboard.cards.completionRate",{rate:k.toFixed(1)})]})})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4 sm:gap-6",children:[e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(W,{className:"h-5 w-5 text-blue-600"}),a("dashboard.recentlyAdded")]})}),e.jsx(x,{className:"space-y-1",children:b.slice(0,5).map(t=>e.jsx(C,{spec:t,basePath:r},t.id))})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(A,{className:"h-5 w-5 text-purple-600"}),a("dashboard.plannedSection",{count:o.length})]})}),e.jsx(x,{className:"space-y-1",children:o.length>0?o.map(t=>e.jsx(C,{spec:t,basePath:r},t.id)):e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:a("dashboard.noPlanned")})})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsxs(j,{className:"text-lg flex items-center gap-2",children:[e.jsx(S,{className:"h-5 w-5 text-orange-600"}),a("dashboard.inProgressSection",{count:d.length})]})}),e.jsx(x,{className:"space-y-1",children:d.length>0?d.map(t=>e.jsx(C,{spec:t,basePath:r},t.id)):e.jsx("p",{className:"text-sm text-muted-foreground py-4 text-center",children:a("dashboard.noInProgress")})})]})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsx(j,{className:"text-lg",children:a("dashboard.recentActivity")})}),e.jsx(x,{children:e.jsx("div",{className:"border-l-2 border-muted pl-4 space-y-1",children:g.map(t=>e.jsx(X,{spec:t,action:a("dashboard.actionUpdated"),time:t.updatedAt??null,basePath:r},t.id))})})]}),e.jsxs(m,{children:[e.jsx(u,{children:e.jsx(j,{className:"text-lg",children:a("dashboard.quickActions")})}),e.jsx(x,{children:e.jsxs("div",{className:"flex flex-wrap gap-3",children:[e.jsx(f,{asChild:!0,children:e.jsxs(p,{to:`${r}/specs`,children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),a("dashboard.viewAllSpecs")]})}),e.jsx(f,{variant:"outline",asChild:!0,children:e.jsxs(p,{to:`${r}/stats`,children:[e.jsx(D,{className:"h-4 w-4 mr-2"}),a("dashboard.viewStats")]})})]})})]})]})}function Y(){const{currentProject:s,loading:i}=q(),l=s?.id??null,c=V(l),r=z(l),{t:a}=T("common"),d=s&&"color"in s?s.color:void 0,o=s?.id?`/projects/${s.id}`:"/projects",b=P.useMemo(()=>Array.isArray(c.data)?c.data:[],[c.data]),g=r.data??null,h=P.useCallback(async()=>{await Promise.all([c.refetch(),r.refetch()])},[c,r]),y=i||c.isLoading||r.isLoading,t=c.error||r.error?a("dashboard.state.errorDescription"):null;return y?e.jsx(Q,{}):s?t?e.jsx(w,{children:e.jsx(m,{children:e.jsxs(x,{className:"py-10 text-center space-y-3",children:[e.jsx("div",{className:"flex justify-center",children:e.jsx(_,{className:"h-6 w-6 text-destructive"})}),e.jsx("div",{className:"text-lg font-semibold",children:a("dashboard.state.errorTitle")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:t||a("dashboard.state.errorDescription")}),e.jsx(f,{variant:"secondary",size:"sm",onClick:h,className:"mt-2",children:a("actions.retry")})]})})}):g?e.jsx(G,{specs:b,stats:g,projectColor:d,projectName:s?.name,basePath:o}):null:e.jsx(w,{children:e.jsx(m,{children:e.jsxs(x,{className:"py-10 text-center space-y-3",children:[e.jsx("div",{className:"text-lg font-semibold",children:a("dashboard.state.noProjectTitle",{defaultValue:"No project selected"})}),e.jsx("p",{className:"text-sm text-muted-foreground",children:a("dashboard.state.noProjectDescription",{defaultValue:"Select or create a project to view the dashboard."})}),e.jsx(p,{to:"/projects",className:"inline-flex",children:e.jsx(f,{variant:"secondary",size:"sm",children:a("projectsPage.title",{defaultValue:"Projects"})})})]})})})}export{Y as DashboardPage};
@@ -1,2 +1,2 @@
1
- import{r as f,d5 as _e,d6 as me,x as Je,d7 as et,d8 as y,d9 as Le,da as ge,db as tt,dc as nt,dd as st,de as ve,df as rt,dg as ot,dh as at,u as Ne,j as e,cI as Oe,cc as Re,cb as Te,bX as he,cM as Fe,cN as pe,cO as Ae,aT as Be,f as C,di as ye,b5 as it,b6 as ct,a as lt,b7 as dt,b8 as ut,b9 as mt,ba as gt,bb as ht,bc as pt,bd as xt,be as De,br as ft,bf as bt,dj as Ie,dk as we,dl as yt,bg as wt,aP as vt,bl as Nt,bh as jt,c7 as kt,dm as $e,dn as St,aS as Ee,bm as Et}from"./index-DoWWshr8.js";const Ve=({id:t,x:n,y:c,width:l,height:r,style:a,color:g,strokeColor:x,strokeWidth:d,className:i,borderRadius:m,shapeRendering:h,onClick:N,selected:s})=>{const{background:v,backgroundColor:k}=a||{},P=g||v||k;return y.createElement("rect",{className:ge(["react-flow__minimap-node",{selected:s},i]),x:n,y:c,rx:m,ry:m,width:l,height:r,fill:P,stroke:x,strokeWidth:d,shapeRendering:h,onClick:N?M=>N(M,t):void 0})};Ve.displayName="MiniMapNode";var Ct=f.memo(Ve);const Mt=t=>t.nodeOrigin,Pt=t=>t.getNodes().filter(n=>!n.hidden&&n.width&&n.height),Ce=t=>t instanceof Function?t:()=>t;function Dt({nodeStrokeColor:t="transparent",nodeColor:n="#e2e2e2",nodeClassName:c="",nodeBorderRadius:l=5,nodeStrokeWidth:r=2,nodeComponent:a=Ct,onClick:g}){const x=me(Pt,ve),d=me(Mt),i=Ce(n),m=Ce(t),h=Ce(c),N=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return y.createElement(y.Fragment,null,x.map(s=>{const{x:v,y:k}=st(s,d).positionAbsolute;return y.createElement(a,{key:s.id,x:v,y:k,width:s.width,height:s.height,style:s.style,selected:s.selected,className:h(s),color:i(s),borderRadius:l,strokeColor:m(s),strokeWidth:r,shapeRendering:N,onClick:g,id:s.id})}))}var It=f.memo(Dt);const $t=200,zt=150,Ht=t=>{const n=t.getNodes(),c={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:c,boundingRect:n.length>0?rt(ot(n,t.nodeOrigin),c):c,rfId:t.rfId}},_t="react-flow__minimap-desc";function We({style:t,className:n,nodeStrokeColor:c="transparent",nodeColor:l="#e2e2e2",nodeClassName:r="",nodeBorderRadius:a=5,nodeStrokeWidth:g=2,nodeComponent:x,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:i="none",maskStrokeWidth:m=1,position:h="bottom-right",onClick:N,onNodeClick:s,pannable:v=!1,zoomable:k=!1,ariaLabel:P="React Flow mini map",inversePan:M=!1,zoomStep:E=10,offsetScale:S=5}){const T=_e(),I=f.useRef(null),{boundingRect:O,viewBB:$,rfId:Q}=me(Ht,ve),b=t?.width??$t,L=t?.height??zt,G=O.width/b,xe=O.height/L,B=Math.max(G,xe),ce=B*b,oe=B*L,z=S*B,R=O.x-(ce-O.width)/2-z,q=O.y-(oe-O.height)/2-z,X=ce+z*2,ae=oe+z*2,fe=`${_t}-${Q}`,Y=f.useRef(0);Y.current=B,f.useEffect(()=>{if(I.current){const K=Je(I.current),J=U=>{const{transform:o,d3Selection:p,d3Zoom:w}=T.getState();if(U.sourceEvent.type!=="wheel"||!p||!w)return;const D=-U.sourceEvent.deltaY*(U.sourceEvent.deltaMode===1?.05:U.sourceEvent.deltaMode?1:.002)*E,H=o[2]*Math.pow(2,D);w.scaleTo(p,H)},le=U=>{const{transform:o,d3Selection:p,d3Zoom:w,translateExtent:D,width:H,height:F}=T.getState();if(U.sourceEvent.type!=="mousemove"||!p||!w)return;const A=Y.current*Math.max(1,o[2])*(M?-1:1),V={x:o[0]-U.sourceEvent.movementX*A,y:o[1]-U.sourceEvent.movementY*A},ee=[[0,0],[H,F]],ie=tt.translate(V.x,V.y).scale(o[2]),re=w.constrain()(ie,ee,D);w.transform(p,re)},ke=et().on("zoom",v?le:null).on("zoom.wheel",k?J:null);return K.call(ke),()=>{K.on("zoom",null)}}},[v,k,M,E]);const se=N?K=>{const J=nt(K);N(K,{x:J[0],y:J[1]})}:void 0,je=s?(K,J)=>{const le=T.getState().nodeInternals.get(J);s(K,le)}:void 0;return y.createElement(Le,{position:h,style:t,className:ge(["react-flow__minimap",n]),"data-testid":"rf__minimap"},y.createElement("svg",{width:b,height:L,viewBox:`${R} ${q} ${X} ${ae}`,role:"img","aria-labelledby":fe,ref:I,onClick:se},P&&y.createElement("title",{id:fe},P),y.createElement(It,{onClick:je,nodeColor:l,nodeStrokeColor:c,nodeBorderRadius:a,nodeClassName:r,nodeStrokeWidth:g,nodeComponent:x}),y.createElement("path",{className:"react-flow__minimap-mask",d:`M${R-z},${q-z}h${X+z*2}v${ae+z*2}h${-X-z*2}z
1
+ import{r as f,d5 as _e,d6 as me,x as Je,d7 as et,d8 as y,d9 as Le,da as ge,db as tt,dc as nt,dd as st,de as ve,df as rt,dg as ot,dh as at,u as Ne,j as e,cI as Oe,cc as Re,cb as Te,bX as he,cM as Fe,cN as pe,cO as Ae,aT as Be,f as C,di as ye,b5 as it,b6 as ct,a as lt,b7 as dt,b8 as ut,b9 as mt,ba as gt,bb as ht,bc as pt,bd as xt,be as De,br as ft,bf as bt,dj as Ie,dk as we,dl as yt,bg as wt,aP as vt,bl as Nt,bh as jt,c7 as kt,dm as $e,dn as St,aS as Ee,bm as Et}from"./index-DSWQaVP_.js";const Ve=({id:t,x:n,y:c,width:l,height:r,style:a,color:g,strokeColor:x,strokeWidth:d,className:i,borderRadius:m,shapeRendering:h,onClick:N,selected:s})=>{const{background:v,backgroundColor:k}=a||{},P=g||v||k;return y.createElement("rect",{className:ge(["react-flow__minimap-node",{selected:s},i]),x:n,y:c,rx:m,ry:m,width:l,height:r,fill:P,stroke:x,strokeWidth:d,shapeRendering:h,onClick:N?M=>N(M,t):void 0})};Ve.displayName="MiniMapNode";var Ct=f.memo(Ve);const Mt=t=>t.nodeOrigin,Pt=t=>t.getNodes().filter(n=>!n.hidden&&n.width&&n.height),Ce=t=>t instanceof Function?t:()=>t;function Dt({nodeStrokeColor:t="transparent",nodeColor:n="#e2e2e2",nodeClassName:c="",nodeBorderRadius:l=5,nodeStrokeWidth:r=2,nodeComponent:a=Ct,onClick:g}){const x=me(Pt,ve),d=me(Mt),i=Ce(n),m=Ce(t),h=Ce(c),N=typeof window>"u"||window.chrome?"crispEdges":"geometricPrecision";return y.createElement(y.Fragment,null,x.map(s=>{const{x:v,y:k}=st(s,d).positionAbsolute;return y.createElement(a,{key:s.id,x:v,y:k,width:s.width,height:s.height,style:s.style,selected:s.selected,className:h(s),color:i(s),borderRadius:l,strokeColor:m(s),strokeWidth:r,shapeRendering:N,onClick:g,id:s.id})}))}var It=f.memo(Dt);const $t=200,zt=150,Ht=t=>{const n=t.getNodes(),c={x:-t.transform[0]/t.transform[2],y:-t.transform[1]/t.transform[2],width:t.width/t.transform[2],height:t.height/t.transform[2]};return{viewBB:c,boundingRect:n.length>0?rt(ot(n,t.nodeOrigin),c):c,rfId:t.rfId}},_t="react-flow__minimap-desc";function We({style:t,className:n,nodeStrokeColor:c="transparent",nodeColor:l="#e2e2e2",nodeClassName:r="",nodeBorderRadius:a=5,nodeStrokeWidth:g=2,nodeComponent:x,maskColor:d="rgb(240, 240, 240, 0.6)",maskStrokeColor:i="none",maskStrokeWidth:m=1,position:h="bottom-right",onClick:N,onNodeClick:s,pannable:v=!1,zoomable:k=!1,ariaLabel:P="React Flow mini map",inversePan:M=!1,zoomStep:E=10,offsetScale:S=5}){const T=_e(),I=f.useRef(null),{boundingRect:O,viewBB:$,rfId:Q}=me(Ht,ve),b=t?.width??$t,L=t?.height??zt,G=O.width/b,xe=O.height/L,B=Math.max(G,xe),ce=B*b,oe=B*L,z=S*B,R=O.x-(ce-O.width)/2-z,q=O.y-(oe-O.height)/2-z,X=ce+z*2,ae=oe+z*2,fe=`${_t}-${Q}`,Y=f.useRef(0);Y.current=B,f.useEffect(()=>{if(I.current){const K=Je(I.current),J=U=>{const{transform:o,d3Selection:p,d3Zoom:w}=T.getState();if(U.sourceEvent.type!=="wheel"||!p||!w)return;const D=-U.sourceEvent.deltaY*(U.sourceEvent.deltaMode===1?.05:U.sourceEvent.deltaMode?1:.002)*E,H=o[2]*Math.pow(2,D);w.scaleTo(p,H)},le=U=>{const{transform:o,d3Selection:p,d3Zoom:w,translateExtent:D,width:H,height:F}=T.getState();if(U.sourceEvent.type!=="mousemove"||!p||!w)return;const A=Y.current*Math.max(1,o[2])*(M?-1:1),V={x:o[0]-U.sourceEvent.movementX*A,y:o[1]-U.sourceEvent.movementY*A},ee=[[0,0],[H,F]],ie=tt.translate(V.x,V.y).scale(o[2]),re=w.constrain()(ie,ee,D);w.transform(p,re)},ke=et().on("zoom",v?le:null).on("zoom.wheel",k?J:null);return K.call(ke),()=>{K.on("zoom",null)}}},[v,k,M,E]);const se=N?K=>{const J=nt(K);N(K,{x:J[0],y:J[1]})}:void 0,je=s?(K,J)=>{const le=T.getState().nodeInternals.get(J);s(K,le)}:void 0;return y.createElement(Le,{position:h,style:t,className:ge(["react-flow__minimap",n]),"data-testid":"rf__minimap"},y.createElement("svg",{width:b,height:L,viewBox:`${R} ${q} ${X} ${ae}`,role:"img","aria-labelledby":fe,ref:I,onClick:se},P&&y.createElement("title",{id:fe},P),y.createElement(It,{onClick:je,nodeColor:l,nodeStrokeColor:c,nodeBorderRadius:a,nodeClassName:r,nodeStrokeWidth:g,nodeComponent:x}),y.createElement("path",{className:"react-flow__minimap-mask",d:`M${R-z},${q-z}h${X+z*2}v${ae+z*2}h${-X-z*2}z
2
2
  M${$.x},${$.y}h${$.width}v${$.height}h${-$.width}z`,fill:d,fillRule:"evenodd",stroke:i,strokeWidth:m,pointerEvents:"none"})))}We.displayName="MiniMap";var Lt=f.memo(We);function Ot(){return y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32"},y.createElement("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"}))}function Rt(){return y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5"},y.createElement("path",{d:"M0 0h32v4.2H0z"}))}function Tt(){return y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30"},y.createElement("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"}))}function Ft(){return y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},y.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"}))}function At(){return y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32"},y.createElement("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"}))}const ue=({children:t,className:n,...c})=>y.createElement("button",{type:"button",className:ge(["react-flow__controls-button",n]),...c},t);ue.displayName="ControlButton";const Bt=t=>({isInteractive:t.nodesDraggable||t.nodesConnectable||t.elementsSelectable,minZoomReached:t.transform[2]<=t.minZoom,maxZoomReached:t.transform[2]>=t.maxZoom}),Ze=({style:t,showZoom:n=!0,showFitView:c=!0,showInteractive:l=!0,fitViewOptions:r,onZoomIn:a,onZoomOut:g,onFitView:x,onInteractiveChange:d,className:i,children:m,position:h="bottom-left"})=>{const N=_e(),[s,v]=f.useState(!1),{isInteractive:k,minZoomReached:P,maxZoomReached:M}=me(Bt,ve),{zoomIn:E,zoomOut:S,fitView:T}=at();if(f.useEffect(()=>{v(!0)},[]),!s)return null;const I=()=>{E(),a?.()},O=()=>{S(),g?.()},$=()=>{T(r),x?.()},Q=()=>{N.setState({nodesDraggable:!k,nodesConnectable:!k,elementsSelectable:!k}),d?.(!k)};return y.createElement(Le,{className:ge(["react-flow__controls",i]),position:h,style:t,"data-testid":"rf__controls"},n&&y.createElement(y.Fragment,null,y.createElement(ue,{onClick:I,className:"react-flow__controls-zoomin",title:"zoom in","aria-label":"zoom in",disabled:M},y.createElement(Ot,null)),y.createElement(ue,{onClick:O,className:"react-flow__controls-zoomout",title:"zoom out","aria-label":"zoom out",disabled:P},y.createElement(Rt,null))),c&&y.createElement(ue,{className:"react-flow__controls-fitview",onClick:$,title:"fit view","aria-label":"fit view"},y.createElement(Tt,null)),l&&y.createElement(ue,{className:"react-flow__controls-interactive",onClick:Q,title:"toggle interactivity","aria-label":"toggle interactivity"},k?y.createElement(At,null):y.createElement(Ft,null)),m)};Ze.displayName="Controls";var Vt=f.memo(Ze),Z;(function(t){t.Lines="lines",t.Dots="dots",t.Cross="cross"})(Z||(Z={}));function Wt({color:t,dimensions:n,lineWidth:c}){return y.createElement("path",{stroke:t,strokeWidth:c,d:`M${n[0]/2} 0 V${n[1]} M0 ${n[1]/2} H${n[0]}`})}function Zt({color:t,radius:n}){return y.createElement("circle",{cx:n,cy:n,r:n,fill:t})}const Ut={[Z.Dots]:"#91919a",[Z.Lines]:"#eee",[Z.Cross]:"#e2e2e2"},Gt={[Z.Dots]:1,[Z.Lines]:1,[Z.Cross]:6},qt=t=>({transform:t.transform,patternId:`pattern-${t.rfId}`});function Ue({id:t,variant:n=Z.Dots,gap:c=20,size:l,lineWidth:r=1,offset:a=2,color:g,style:x,className:d}){const i=f.useRef(null),{transform:m,patternId:h}=me(qt,ve),N=g||Ut[n],s=l||Gt[n],v=n===Z.Dots,k=n===Z.Cross,P=Array.isArray(c)?c:[c,c],M=[P[0]*m[2]||1,P[1]*m[2]||1],E=s*m[2],S=k?[E,E]:M,T=v?[E/a,E/a]:[S[0]/a,S[1]/a];return y.createElement("svg",{className:ge(["react-flow__background",d]),style:{...x,position:"absolute",width:"100%",height:"100%",top:0,left:0},ref:i,"data-testid":"rf__background"},y.createElement("pattern",{id:h+t,x:m[0]%M[0],y:m[1]%M[1],width:M[0],height:M[1],patternUnits:"userSpaceOnUse",patternTransform:`translate(-${T[0]},-${T[1]})`},v?y.createElement(Zt,{color:N,radius:E/a}):y.createElement(Wt,{dimensions:S,color:N,lineWidth:r})),y.createElement("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:`url(#${h+t})`}))}Ue.displayName="Background";var Xt=f.memo(Ue);const Ge={planned:he,"in-progress":Te,complete:Re,archived:Oe},qe={critical:Be,high:Ae,medium:pe,low:Fe};function ze({spec:t,type:n,depth:c,onClick:l}){const{t:r}=Ne(),a={upstream:"border-l-amber-500",downstream:"border-l-emerald-500"},g=c===1?r("dependenciesPage.sidebar.depth.direct"):r("dependenciesPage.sidebar.depth.level",{depth:c}),x=Ge[t.status]||he,d=qe[t.priority]||pe;return e.jsxs("button",{onClick:l,className:C("w-full text-left px-2 py-1.5 rounded border-l-2 bg-muted/30 hover:bg-muted/50 transition-colors",a[n]),children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs("span",{className:"text-[10px] font-bold text-muted-foreground",children:["#",t.number]}),e.jsx("div",{className:C("rounded p-0.5 flex items-center justify-center",t.status==="planned"&&"bg-blue-500/20",t.status==="in-progress"&&"bg-orange-500/20",t.status==="complete"&&"bg-green-500/20",t.status==="archived"&&"bg-gray-500/20"),title:r(`status.${t.status}`),children:e.jsx(x,{className:C("h-2.5 w-2.5",t.status==="planned"&&"text-blue-600 dark:text-blue-400",t.status==="in-progress"&&"text-orange-600 dark:text-orange-400",t.status==="complete"&&"text-green-600 dark:text-green-400",t.status==="archived"&&"text-gray-500 dark:text-gray-400")})}),e.jsx("div",{className:C("rounded p-0.5 flex items-center justify-center",t.priority==="critical"&&"bg-red-500/20",t.priority==="high"&&"bg-orange-500/20",t.priority==="medium"&&"bg-blue-500/20",t.priority==="low"&&"bg-gray-500/20"),title:t.priority?r(`priority.${t.priority}`):void 0,children:e.jsx(d,{className:C("h-2.5 w-2.5",t.priority==="critical"&&"text-red-600 dark:text-red-400",t.priority==="high"&&"text-orange-600 dark:text-orange-400",t.priority==="medium"&&"text-blue-600 dark:text-blue-400",t.priority==="low"&&"text-gray-500 dark:text-gray-400")})}),e.jsx("span",{className:"text-[8px] px-1 py-0.5 rounded bg-muted text-muted-foreground font-medium ml-auto",children:g})]}),e.jsx("p",{className:"text-[11px] text-foreground truncate leading-tight mt-0.5",children:t.name})]})}function Yt({focusedDetails:t,onSelectSpec:n,onOpenSpec:c}){const{t:l}=Ne();if(!t)return e.jsx("div",{className:"w-64 shrink-0 rounded-lg border border-border bg-background/95 overflow-hidden flex flex-col",children:e.jsx("div",{className:"flex-1 flex items-center justify-center p-4",children:e.jsxs("div",{className:"text-center text-muted-foreground",children:[e.jsx("div",{className:"w-12 h-12 mx-auto mb-3 rounded-full bg-muted/50 flex items-center justify-center",children:e.jsx("svg",{className:"w-6 h-6",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:e.jsx("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122"})})}),e.jsx("p",{className:"text-sm font-medium",children:l("dependenciesPage.sidebar.emptyTitle")}),e.jsx("p",{className:"text-xs mt-1",children:l("dependenciesPage.sidebar.emptyDescription")})]})})});const{node:r,upstream:a,downstream:g}=t,x=Ge[r.status]||he,d=qe[r.priority]||pe;return e.jsxs("div",{className:"w-64 shrink-0 rounded-lg border border-border bg-background/95 overflow-hidden flex flex-col",children:[e.jsxs("div",{className:"p-3 border-b border-border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxs("span",{className:"font-bold text-sm",children:["#",r.number]}),e.jsx("div",{className:C("rounded p-1 flex items-center justify-center",r.status==="planned"&&"bg-blue-500/20",r.status==="in-progress"&&"bg-orange-500/20",r.status==="complete"&&"bg-green-500/20",r.status==="archived"&&"bg-gray-500/20"),title:r.status,children:e.jsx(x,{className:C("h-3 w-3",r.status==="planned"&&"text-blue-600 dark:text-blue-300",r.status==="in-progress"&&"text-orange-600 dark:text-orange-300",r.status==="complete"&&"text-green-600 dark:text-green-300",r.status==="archived"&&"text-gray-500 dark:text-gray-300")})}),e.jsx("div",{className:C("rounded p-1 flex items-center justify-center",r.priority==="critical"&&"bg-red-500/20",r.priority==="high"&&"bg-orange-500/20",r.priority==="medium"&&"bg-blue-500/20",r.priority==="low"&&"bg-gray-500/20"),title:r.priority,children:e.jsx(d,{className:C("h-3 w-3",r.priority==="critical"&&"text-red-600 dark:text-red-300",r.priority==="high"&&"text-orange-600 dark:text-orange-300",r.priority==="medium"&&"text-blue-600 dark:text-blue-300",r.priority==="low"&&"text-gray-500 dark:text-gray-300")})})]}),e.jsx("p",{className:"text-sm font-medium text-foreground leading-snug",children:r.name}),e.jsx("button",{onClick:()=>c(r.number),className:"mt-2 w-full rounded bg-primary/20 border border-primary/40 px-2 py-1.5 text-xs text-primary hover:bg-primary/30 font-medium",children:l("dependenciesPage.sidebar.openSpec")})]}),e.jsxs("div",{className:"flex-1 overflow-auto p-3 space-y-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-amber-500"}),e.jsx("span",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide",children:l("dependenciesPage.sidebar.dependsOnHeading",{count:a.reduce((i,m)=>i+m.specs.length,0)})})]}),a.length>0?e.jsx("div",{className:"space-y-1.5",children:a.flatMap(i=>i.specs.map(m=>e.jsx(ze,{spec:m,type:"upstream",depth:i.depth,onClick:()=>n(m.id)},m.id)))}):e.jsx("p",{className:"text-xs text-muted-foreground/60 italic",children:l("dependenciesPage.sidebar.emptyUpstream")})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx("span",{className:"inline-block w-2 h-2 rounded-full bg-emerald-500"}),e.jsx("span",{className:"text-xs font-semibold text-muted-foreground uppercase tracking-wide",children:l("dependenciesPage.sidebar.requiredByHeading",{count:g.reduce((i,m)=>i+m.specs.length,0)})})]}),g.length>0?e.jsx("div",{className:"space-y-1.5",children:g.flatMap(i=>i.specs.map(m=>e.jsx(ze,{spec:m,type:"downstream",depth:i.depth,onClick:()=>n(m.id)},m.id)))}):e.jsx("p",{className:"text-xs text-muted-foreground/60 italic",children:l("dependenciesPage.sidebar.emptyDownstream")})]})]})]})}const Me=180,Xe=60,Pe=120,Ye=40,be="#f59e0b",Kt={planned:"border-blue-500 bg-blue-100 text-blue-800 dark:bg-blue-950/60 dark:text-blue-200","in-progress":"border-orange-500 bg-orange-100 text-orange-800 dark:bg-orange-950/60 dark:text-orange-200",complete:"border-green-500 bg-green-100 text-green-800 dark:bg-green-950/60 dark:text-green-200",archived:"border-gray-400 bg-gray-100 text-gray-600 dark:border-gray-500/80 dark:bg-gray-900/60 dark:text-gray-400"},Qt={planned:"#3b82f6","in-progress":"#f97316",complete:"#22c55e",archived:"#6b7280"};function Jt(t,n,c=2){const l=new Map;l.set(t,0);const r=new Map,a=new Map;n.forEach(d=>{r.has(d.source)||r.set(d.source,new Set),r.get(d.source).add(d.target),a.has(d.target)||a.set(d.target,new Set),a.get(d.target).add(d.source)});let g=new Set([t]),x=1;for(;g.size>0&&x<=c;){const d=new Set;g.forEach(i=>{const m=r.get(i);m&&m.forEach(h=>{l.has(h)||(l.set(h,x),d.add(h))})}),g=d,x++}for(g=new Set([t]),x=1;g.size>0&&x<=c;){const d=new Set;g.forEach(i=>{const m=a.get(i);m&&m.forEach(h=>{l.has(h)||(l.set(h,x),d.add(h))})}),g=d,x++}return l}function He(t,n,c,l,r={}){if(t.length===0)return{nodes:[],edges:[]};if((r.mode??"graph")==="focus"&&r.focusedNodeId)return en(t,n,c);const g=c?Pe:Me,x=c?Ye:Xe,d=c?30:50,i=new Set;n.forEach(s=>{i.add(s.source),i.add(s.target)});const m=t.filter(s=>i.has(s.id)),h=l?t.filter(s=>!i.has(s.id)):[],N=[];if(m.length>0){const s=new ye.graphlib.Graph;s.setGraph({rankdir:"LR",align:"UL",nodesep:c?30:50,ranksep:c?80:120,marginx:40,marginy:40}),s.setDefaultEdgeLabel(()=>({})),m.forEach(E=>{s.setNode(E.id,{width:g,height:x})}),n.forEach(E=>{i.has(E.source)&&i.has(E.target)&&s.setEdge(E.source,E.target)}),ye.layout(s);let v=1/0,k=1/0,P=0,M=0;if(m.forEach(E=>{const S=s.node(E.id);v=Math.min(v,S.x-g/2),k=Math.min(k,S.y-x/2),P=Math.max(P,S.x+g/2),M=Math.max(M,S.y+x/2)}),m.forEach(E=>{const S=s.node(E.id);N.push({...E,position:{x:S.x-v,y:S.y-k}})}),h.length>0){const E=M-k,S=P-v,T=E+d*2,I=Math.ceil(Math.sqrt(h.length*1.5)),O=I*(g+d),$=S>O?Math.floor((S-O)/2):0;h.forEach((Q,b)=>{const L=b%I,G=Math.floor(b/I);N.push({...Q,position:{x:$+L*(g+d),y:T+G*(x+d)}})})}}else{const s=Math.ceil(Math.sqrt(h.length*1.5));h.forEach((v,k)=>{const P=k%s,M=Math.floor(k/s);N.push({...v,position:{x:P*(g+d),y:M*(x+d)}})})}return{nodes:N,edges:n}}function en(t,n,c){const l=c?Pe:Me,r=c?Ye:Xe,a=new ye.graphlib.Graph;a.setGraph({rankdir:"LR",align:"UL",nodesep:c?30:50,ranksep:c?80:120,marginx:40,marginy:40}),a.setDefaultEdgeLabel(()=>({})),t.forEach(i=>{a.setNode(i.id,{width:l,height:r})}),n.forEach(i=>{a.setEdge(i.source,i.target)}),ye.layout(a);let g=1/0,x=1/0;return t.forEach(i=>{const m=a.node(i.id);g=Math.min(g,m.x-l/2),x=Math.min(x,m.y-r/2)}),{nodes:t.map(i=>{const m=a.node(i.id);return{...i,position:{x:m.x-g,y:m.y-x}}}),edges:n}}function tn({statusFilter:t,statusCounts:n,showStandalone:c,isCompact:l,viewMode:r,focusedNodeId:a,connectionStats:g,onToggleStatus:x,onToggleStandalone:d,onToggleCompact:i,onToggleViewMode:m,onClear:h,t:N}){const s=t.length>0||a;return e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5 text-xs",children:[["draft","planned","in-progress","complete","archived"].map(v=>{const k=t.length===0||t.includes(v),P=N(`status.${v}`),M=n[v]||0;return e.jsxs("button",{onClick:()=>x(v),className:C("rounded border px-2 py-1 font-medium transition-colors",k&&v==="draft"&&"border-slate-500/60 bg-slate-500/20 text-slate-700 dark:text-slate-200",k&&v==="planned"&&"border-blue-500/60 bg-blue-500/20 text-blue-700 dark:text-blue-300",k&&v==="in-progress"&&"border-orange-500/60 bg-orange-500/20 text-orange-700 dark:text-orange-300",k&&v==="complete"&&"border-green-500/60 bg-green-500/20 text-green-700 dark:text-green-300",k&&v==="archived"&&"border-gray-500/60 bg-gray-500/20 text-gray-600 dark:text-gray-300",!k&&"border-border bg-background text-muted-foreground/40"),children:[P,e.jsx("span",{className:"ml-1 opacity-60",children:N("dependenciesPage.filters.count",{count:M})})]},v)}),e.jsx("span",{className:"h-3 w-px bg-border"}),e.jsx("button",{onClick:d,className:C("rounded border px-2 py-1 font-medium transition-colors",c?"border-violet-500/60 bg-violet-500/20 text-violet-700 dark:text-violet-300":"border-border bg-background hover:bg-accent text-muted-foreground"),children:N("dependenciesPage.filters.showStandalone",{count:g.standalone})}),e.jsx("span",{className:"h-3 w-px bg-border"}),e.jsx("button",{onClick:i,className:C("rounded border px-2 py-1 font-medium transition-colors",l?"border-primary/60 bg-primary/20 text-primary":"border-border bg-background hover:bg-accent text-muted-foreground"),children:N("dependenciesPage.filters.compact")}),a&&e.jsx("button",{onClick:m,className:C("rounded border px-2 py-1 font-medium transition-colors",r==="focus"?"border-primary/60 bg-primary/20 text-primary":"border-border bg-background hover:bg-accent text-muted-foreground"),children:N("dependenciesPage.filters.focusMode")}),s&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"h-3 w-px bg-border"}),e.jsx("button",{onClick:h,className:"rounded border border-red-500/40 bg-red-500/10 px-2 py-1 font-medium text-red-400 hover:bg-red-500/20",children:N("dependenciesPage.filters.clear")})]})]})}function nn({data:t,focusedNodeId:n,onSelectSpec:c,onClearSelection:l,t:r}){const[a,g]=f.useState(!1),[x,d]=f.useState(""),i=f.useMemo(()=>n?t.nodes.find(h=>h.id===n):null,[n,t]),m=f.useMemo(()=>{const h=[...t.nodes].sort((s,v)=>v.number-s.number);if(!x.trim())return h.slice(0,15);const N=x.toLowerCase();return h.filter(s=>s.name.toLowerCase().includes(N)||s.number.toString().includes(N)||s.tags.some(v=>v.toLowerCase().includes(N))).slice(0,15)},[t,x]);return e.jsxs(it,{open:a,onOpenChange:g,children:[e.jsx(ct,{asChild:!0,children:e.jsxs(lt,{variant:"outline",role:"combobox","aria-expanded":a,className:C("w-[240px] h-9 justify-between px-3 text-xs",n&&"border-primary/60 bg-primary/10 text-foreground"),children:[i?e.jsxs("span",{className:"truncate flex items-center",children:[e.jsxs("span",{className:"text-muted-foreground mr-2 font-mono",children:["#",i.number]}),e.jsx("span",{className:"truncate",children:i.name})]}):e.jsx("span",{className:"text-muted-foreground font-normal",children:r("dependenciesPage.selector.placeholder")}),e.jsx(dt,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(ut,{className:"w-[300px] p-0",align:"end",children:e.jsxs(mt,{shouldFilter:!1,children:[e.jsx(gt,{placeholder:r("dependenciesPage.selector.filterPlaceholder"),value:x,onValueChange:d,className:"text-xs"}),e.jsxs(ht,{children:[e.jsx(pt,{className:"py-2 text-center text-xs text-muted-foreground",children:r("dependenciesPage.selector.empty")}),e.jsxs(xt,{children:[n&&e.jsxs(De,{onSelect:()=>{l(),g(!1),d("")},className:"text-muted-foreground",children:[e.jsx(ft,{className:"mr-2 h-3.5 w-3.5"}),r("dependenciesPage.selector.clearSelection")]}),m.map(h=>e.jsxs(De,{value:h.id,onSelect:()=>{c(h.id),g(!1),d("")},children:[e.jsxs("span",{className:"text-muted-foreground font-mono mr-2",children:["#",h.number]}),e.jsx("span",{className:"truncate flex-1",children:h.name}),e.jsx("span",{className:C("text-[9px] px-1 py-0.5 rounded uppercase font-medium ml-2 shrink-0",h.status==="draft"&&"bg-slate-500/20 text-slate-600 dark:text-slate-300",h.status==="planned"&&"bg-blue-500/20 text-blue-600 dark:text-blue-400",h.status==="in-progress"&&"bg-orange-500/20 text-orange-600 dark:text-orange-400",h.status==="complete"&&"bg-green-500/20 text-green-600 dark:text-green-400",h.status==="archived"&&"bg-gray-500/20 text-gray-500 dark:text-gray-400"),children:h.status==="in-progress"?"WIP":h.status.slice(0,3)}),e.jsx("div",{className:C("mr-2 flex h-4 w-4 items-center justify-center",n===h.id?"opacity-100":"opacity-0"),children:e.jsx(bt,{className:"h-4 w-4"})})]},h.id))]})]})]})})]})}const sn={planned:he,"in-progress":Te,complete:Re,archived:Oe},rn={critical:Be,high:Ae,medium:pe,low:Fe},Ke=f.memo(function({data:n}){const{t:c}=Ne(),l=n.isCompact,r=n.isSecondary,a=n.connectionDepth===0?1:n.connectionDepth===1?.95:n.connectionDepth===2?.7:n.isDimmed?.15:1,g=r?.65:1,x=sn[n.tone]||he,d=rn[n.priority]||pe;return e.jsxs("div",{className:C("flex flex-col rounded-lg shadow-lg transition-all duration-200",Kt[n.tone],n.interactive&&"cursor-pointer hover:scale-105 hover:shadow-xl hover:border-gray-400 dark:hover:border-white/50",n.isFocused&&"ring-2 ring-gray-800 dark:ring-white ring-offset-2 ring-offset-background scale-110 z-50",n.connectionDepth===1&&"ring-1 ring-gray-400 dark:ring-white/40",l?"px-2 py-1 gap-0.5":"px-2.5 py-1.5 gap-0.5",r?"border border-dashed":"border-2"),style:{width:l?Pe:Me,opacity:a*g,transform:n.isDimmed?"scale(0.9)":void 0},children:[e.jsx(Ie,{type:"target",position:we.Left,className:"opacity-0"}),e.jsxs("div",{className:"flex items-center justify-between gap-1",children:[e.jsxs("span",{className:C("font-bold",l?"text-[9px]":"text-[10px]"),children:["#",n.number.toString().padStart(3,"0")]}),e.jsxs("div",{className:"flex items-center gap-0.5",children:[e.jsx("div",{className:C("rounded flex items-center justify-center",l?"p-0.5":"p-1",n.tone==="planned"&&"bg-blue-500/30",n.tone==="in-progress"&&"bg-orange-500/30",n.tone==="complete"&&"bg-green-500/30",n.tone==="archived"&&"bg-gray-500/30"),title:c(`status.${n.tone}`),children:e.jsx(x,{className:C(l?"h-2 w-2":"h-2.5 w-2.5")})}),e.jsx("div",{className:C("rounded flex items-center justify-center",l?"p-0.5":"p-1",n.priority==="critical"&&"bg-red-500/30",n.priority==="high"&&"bg-orange-500/30",n.priority==="medium"&&"bg-blue-500/30",n.priority==="low"&&"bg-gray-500/30"),title:n.priority?c(`priority.${n.priority}`):void 0,children:e.jsx(d,{className:C(l?"h-2 w-2":"h-2.5 w-2.5")})}),n.connectionDepth!==void 0&&n.connectionDepth>0&&e.jsx("span",{className:C("font-medium rounded bg-muted/50 text-muted-foreground",l?"text-[7px] px-0.5 py-0.5":"text-[8px] px-1 py-0.5"),title:c("dependenciesPage.graph.levelTitle",{depth:n.connectionDepth}),children:c("dependenciesPage.graph.levelBadge",{depth:n.connectionDepth})})]})]}),e.jsx("span",{className:C("font-medium leading-tight truncate",l?"text-[8px]":"text-[10px]"),title:n.label,children:l?n.shortLabel:n.label}),e.jsx(Ie,{type:"source",position:we.Right,className:"opacity-0"})]})});Ke.displayName="SpecNode";const on={specNode:Ke};function an({nodes:t,edges:n,showStandalone:c,onNodeClick:l,onPaneClick:r,onInstance:a,t:g}){const x=f.useCallback(d=>{a(d),requestAnimationFrame(()=>{d.fitView({padding:.15,duration:300})})},[a]);return t.length===0?e.jsx("div",{className:"flex h-full items-center justify-center text-muted-foreground",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-sm font-medium",children:g("dependenciesPage.empty.title")}),e.jsx("p",{className:"text-xs mt-1",children:g(c?"dependenciesPage.empty.filters":"dependenciesPage.empty.standaloneHint")})]})}):e.jsxs(yt,{nodes:t,edges:n,nodeTypes:on,onInit:x,className:"h-full w-full",fitView:!0,proOptions:{hideAttribution:!0},nodesDraggable:!0,nodesConnectable:!1,elementsSelectable:!0,panOnScroll:!0,panOnDrag:!0,zoomOnScroll:!0,zoomOnPinch:!0,minZoom:.05,maxZoom:2,onNodeClick:l,onPaneClick:r,children:[e.jsx(Xt,{gap:20,size:1,color:"rgba(100, 116, 139, 0.06)"}),e.jsx(Vt,{showInteractive:!1,className:"!bg-background/90 !border-border !rounded-md"}),e.jsx(Lt,{nodeColor:d=>{const i=d.data;return Qt[i.tone]||"#6b7280"},maskColor:"rgba(128, 128, 128, 0.6)",className:"!bg-white/95 dark:!bg-background/95 !border-border !rounded-md",style:{width:120,height:80},pannable:!0,zoomable:!0})]})}function ln(){const{specName:t,projectId:n}=wt(),c=vt(),[l,r]=Nt(),{t:a}=Ne(),{currentProject:g,loading:x}=jt(),d=!n||g?.id===n,i=l.get("spec"),m=n??g?.id,h=m?`/projects/${m}`:"/projects",N=f.useCallback(o=>`${h}/specs/${o}`,[h]),[s,v]=f.useState(null),[k,P]=f.useState(!0),[M,E]=f.useState(null),[S,T]=f.useState(null),[I,O]=f.useState(!1),[$,Q]=f.useState([]),[b,L]=f.useState(null),[G,xe]=f.useState("graph"),[B,ce]=f.useState(!1),oe=f.useRef(!1),z=f.useRef(null);f.useEffect(()=>{!d||x||(P(!0),kt.getDependencies(t).then(o=>{v(o),ce(o.nodes.length>30)}).catch(o=>E(o instanceof Error?o.message:a("errors:loadingError"))).finally(()=>P(!1)))},[x,d,t,a]),f.useEffect(()=>{if(s&&!oe.current){if(i){const o=s.nodes.find(p=>p.number.toString()===i);o&&(z.current=o.id,L(o.id))}oe.current=!0}},[i,s]),f.useEffect(()=>{if(!s||!oe.current)return;if(z.current!==null){if(b===z.current){z.current=null;return}z.current=null}const o=b?s.nodes.find(w=>w.id===b):null,p=o?o.number.toString():null;if(p!==i){const w=new URLSearchParams(l);p?w.set("spec",p):w.delete("spec"),r(w,{replace:!0})}},[b,s,i,l,r]);const R=f.useMemo(()=>(s?.edges||[]).filter(o=>o.type==="dependsOn"),[s?.edges]),q=f.useMemo(()=>{const o=new Map,p=new Map;return R.forEach(w=>{o.has(w.source)||o.set(w.source,new Set),o.get(w.source).add(w.target),p.has(w.target)||p.set(w.target,new Set),p.get(w.target).add(w.source)}),{upstream:o,downstream:p}},[R]),X=f.useMemo(()=>b?Jt(b,R,1/0):null,[b,R]);f.useEffect(()=>{!b&&G==="focus"&&xe("graph")},[b,G]);const ae=f.useCallback((o,p)=>{const w=new Set,D=[o];for(;D.length>0;){const H=D.shift(),F=p.get(H);F&&F.forEach(A=>{w.has(A)||(w.add(A),D.push(A))})}return w},[]),fe=f.useMemo(()=>{if(!b||!s)return null;const o=s.nodes.find(D=>D.id===b);if(!o)return null;const p=new Map(s.nodes.map(D=>[D.id,D])),w=(D,H)=>{const F=new Set([D]),A=[];let V=new Set([D]),ee=1;for(;V.size>0;){const ie=new Set,re=[];V.forEach(Se=>{const u=H.get(Se);u&&u.forEach(j=>{if(!F.has(j)){F.add(j),ie.add(j);const W=p.get(j);W&&re.push(W)}})}),re.length>0&&A.push({depth:ee,specs:re}),V=ie,ee++}return A};return{node:o,upstream:w(b,q.upstream),downstream:w(b,q.downstream)}},[b,s,q]),Y=f.useMemo(()=>{if(!s)return{nodes:[],edges:[]};const o=G==="focus"&&!!b,p=(u,j)=>({id:u.id,type:"specNode",data:{label:u.name,shortLabel:u.name.length>14?u.name.slice(0,12)+"…":u.name,badge:u.status==="in-progress"?"WIP":u.status.slice(0,3).toUpperCase(),number:u.number,tone:u.status,priority:u.priority,href:N(u.number),interactive:!0,isFocused:j.isFocused,connectionDepth:j.connectionDepth,isDimmed:j.isDimmed,isCompact:B,isSecondary:j.isSecondary},position:{x:0,y:0},draggable:!0,selectable:!0,sourcePosition:we.Right,targetPosition:we.Left});if(o&&b){const u=ae(b,q.upstream),j=ae(b,q.downstream),W=new Set([b,...u,...j]),ne=s.nodes.filter(_=>W.has(_.id)).map(_=>{const de=b===_.id;return p(_,{isFocused:de,connectionDepth:de?0:X?.get(_.id),isDimmed:!1,isSecondary:!1})}),Qe=R.filter(_=>W.has(_.source)&&W.has(_.target)).map(_=>{const de=_.source===b||_.target===b;return{id:`${_.source}-${_.target}-dependsOn`,source:_.source,target:_.target,type:"smoothstep",animated:de,markerEnd:{type:$e.ArrowClosed,color:be,width:18,height:18},style:{stroke:be,strokeWidth:de?2.75:2,opacity:1}}});return He(ne,Qe,B,!1,{mode:"focus",focusedNodeId:b})}const w=s.nodes.filter(u=>$.length===0||$.includes(u.status)),D=new Set(w.map(u=>u.id)),H=new Set(D),F=[...D];for(;F.length>0;){const u=F.shift();R.forEach(j=>{j.source===u&&!H.has(j.target)&&(H.add(j.target),F.push(j.target)),j.target===u&&!H.has(j.source)&&(H.add(j.source),F.push(j.source))})}const A=R.filter(u=>H.has(u.source)&&H.has(u.target));let V=s.nodes.filter(u=>H.has(u.id));if(!I){const u=new Set;A.forEach(j=>{u.add(j.source),u.add(j.target)}),V=V.filter(j=>u.has(j.id))}const ee=new Set(V.map(u=>u.id)),ie=new Set([...ee].filter(u=>!D.has(u))),re=V.map(u=>{const j=b===u.id,W=ie.has(u.id);let te,ne=!1;return b&&(te=X?.get(u.id),ne=te===void 0),p(u,{isFocused:j,connectionDepth:te,isDimmed:ne,isSecondary:W})}),Se=A.filter(u=>ee.has(u.source)&&ee.has(u.target)).map(u=>{let j=!0,W=.7;if(b){const te=X?.get(u.source),ne=X?.get(u.target);j=te!==void 0&&ne!==void 0&&(te===0||ne===0),W=j?1:te!==void 0&&ne!==void 0?.4:.1}return{id:`${u.source}-${u.target}-dependsOn`,source:u.source,target:u.target,type:"smoothstep",animated:j&&b!==null,markerEnd:{type:$e.ArrowClosed,color:be,width:18,height:18},style:{stroke:be,strokeWidth:j?2.5:1.5,opacity:W}}});return He(re,Se,B,I,{mode:"graph"})},[s,R,$,b,X,B,I,q,G,N,ae]),se=f.useMemo(()=>{if(!s)return{connected:0,standalone:0};const o=new Set;return R.forEach(p=>{o.add(p.source),o.add(p.target)}),{connected:o.size,standalone:s.nodes.length-o.size}},[R,s]),je=f.useMemo(()=>{if(!s)return{};const o={};return s.nodes.forEach(p=>{o[p.status]=(o[p.status]||0)+1}),o},[s]);f.useEffect(()=>{if(!S)return;const o=setTimeout(()=>{S.fitView({padding:.15,duration:300})},50);return()=>clearTimeout(o)},[S,Y,$,I]),f.useEffect(()=>{if(!S||!b||!i)return;const o=Y.nodes.find(p=>p.id===b);if(o){const p=setTimeout(()=>{S.setCenter(o.position.x+80,o.position.y+30,{duration:400,zoom:1})},400);return()=>clearTimeout(p)}},[S,b,i,Y.nodes]);const K=f.useCallback((o,p)=>{if(p?.data){if(o.detail===2&&p.data.href){c(p.data.href);return}L(w=>w===p.id?null:p.id)}},[c]),J=f.useCallback(()=>{L(null)},[]),le=o=>{Q(p=>p.includes(o)?p.filter(w=>w!==o):[...p,o]),L(null)},ke=()=>{Q([]),L(null)},U=o=>{if(L(o),S){const p=Y.nodes.find(w=>w.id===o);p&&S.setCenter(p.position.x+80,p.position.y+30,{duration:400,zoom:1})}};return k?e.jsx(St,{}):M||!s?e.jsx(Ee,{children:e.jsx("div",{className:"flex items-center justify-center h-[calc(100vh-10rem)]",children:e.jsxs("div",{className:"text-center",children:[e.jsx("p",{className:"text-lg font-semibold text-destructive mb-2",children:a("dependenciesPage.state.errorTitle")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:M||a("dependenciesPage.state.errorDescription")})]})})}):s.nodes.length===0?e.jsx(Ee,{children:e.jsxs("div",{className:"rounded-lg border border-border bg-muted/30 p-8 text-center",children:[e.jsx("h2",{className:"text-xl font-semibold mb-2",children:a("dependenciesPage.empty.noDependencies")}),e.jsx("p",{className:"text-muted-foreground",children:a("dependenciesPage.empty.noDependenciesDescription")})]})}):e.jsx(Ee,{className:"h-[calc(100vh-7rem)]",contentClassName:"flex h-full flex-col gap-4",children:e.jsxs("div",{className:"flex h-full flex-col gap-4",children:[e.jsx(Et,{title:a("dependenciesPage.title"),description:a("dependenciesPage.description"),actions:e.jsx(nn,{data:s,focusedNodeId:b,onSelectSpec:U,onClearSelection:()=>L(null),t:a})}),e.jsx("div",{className:"text-sm text-muted-foreground",children:se.connected>0?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400",children:a("dependenciesPage.header.summary.connected",{count:se.connected})}),se.standalone>0&&e.jsxs(e.Fragment,{children:[" • ",e.jsx("span",{className:"text-muted-foreground",children:a("dependenciesPage.header.summary.standalone",{count:se.standalone})})]})]}):e.jsx("span",{children:a("dependenciesPage.header.summary.none")})}),e.jsx(tn,{statusFilter:$,statusCounts:je,showStandalone:I,isCompact:B,viewMode:G,focusedNodeId:b,connectionStats:se,onToggleStatus:le,onToggleStandalone:()=>O(!I),onToggleCompact:()=>ce(!B),onToggleViewMode:()=>xe(o=>o==="graph"?"focus":"graph"),onClear:ke,t:a}),e.jsxs("div",{className:"flex flex-1 gap-3 min-h-0",children:[e.jsx("div",{className:"flex-1 overflow-hidden rounded-lg border border-border bg-gray-50 dark:bg-[#080c14]",children:e.jsx(an,{nodes:Y.nodes,edges:Y.edges,showStandalone:I,onNodeClick:K,onPaneClick:J,onInstance:T,t:a})}),e.jsx(Yt,{focusedDetails:fe,onSelectSpec:L,onOpenSpec:o=>c(N(o))})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-4 text-[10px] text-muted-foreground",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5",children:[e.jsx("span",{className:"inline-block h-0.5 w-6 bg-amber-400 rounded"}),a("dependenciesPage.legend.dependsOn")]}),e.jsx("span",{className:"text-muted-foreground/50 ml-auto",children:a("dependenciesPage.legend.instructions")})]})]})})}export{ln as DependenciesPage};