@leanspec/ui 0.2.26 → 0.2.28-dev.23044283727

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 (222) hide show
  1. package/dist/{_baseUniq-ijHblO0i.js → _baseUniq-DeCRnh20.js} +1 -1
  2. package/dist/{arc-DSoiQqhG.js → arc-C7Ja-5dr.js} +1 -1
  3. package/dist/{architecture-U656AL7Q-0EY1UA93.js → architecture-U656AL7Q-KasuNmTK.js} +1 -1
  4. package/dist/{architectureDiagram-VXUJARFQ-CpZ7MNJ1.js → architectureDiagram-VXUJARFQ-CzHvPXJk.js} +3 -3
  5. package/dist/assets/ChatSettingsPage-Dg4b6Mdg.js +1 -0
  6. package/dist/assets/ContextPage-DLKsvbaY.js +14 -0
  7. package/dist/assets/DashboardPage-D5roDkxO.js +1 -0
  8. package/dist/assets/DependenciesPage-BlTgal-s.js +2 -0
  9. package/dist/assets/FilesPage-BOzy0zBy.css +1 -0
  10. package/dist/assets/FilesPage-u613OfDX.js +3 -0
  11. package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  12. package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  13. package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  14. package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  15. package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  16. package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  17. package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  18. package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  19. package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  20. package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  21. package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  22. package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  23. package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  24. package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  25. package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  26. package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  27. package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  28. package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  29. package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  30. package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  31. package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  32. package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  33. package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  34. package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  35. package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  36. package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  37. package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  38. package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  39. package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  40. package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  41. package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  42. package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  43. package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  44. package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  45. package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  46. package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  47. package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  48. package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  49. package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  50. package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  51. package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  52. package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  53. package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  54. package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  55. package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  56. package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  57. package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  58. package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  59. package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  60. package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  61. package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  62. package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  63. package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  64. package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  65. package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  66. package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  67. package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  68. package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  69. package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  70. package/dist/assets/SessionDetailPage-CmisG8OY.js +4 -0
  71. package/dist/assets/SessionsPage-Ov5FSlG0.js +1 -0
  72. package/dist/assets/SpecDetailPage-BSMc3nst.js +3 -0
  73. package/dist/assets/SpecDetailPage-BmnaB44z.css +1 -0
  74. package/dist/assets/SpecsPage-Cj6pRfOw.js +1 -0
  75. package/dist/assets/StatsPage-fmGNHIOe.js +36 -0
  76. package/dist/assets/_baseUniq-B_33F2hD.js +1 -0
  77. package/dist/assets/arc-eeGjCukK.js +1 -0
  78. package/dist/assets/architectureDiagram-VXUJARFQ-Byc0dVxO.js +36 -0
  79. package/dist/assets/band-CquvqAHh.js +1 -0
  80. package/dist/assets/{blockDiagram-VD42YOAC-De6LVB6b.js → blockDiagram-VD42YOAC-B8mIUKCH.js} +4 -4
  81. package/dist/assets/{c4Diagram-YG6GDRKO-DmO_YZpf.js → c4Diagram-YG6GDRKO-DddzPdre.js} +3 -3
  82. package/dist/assets/channel-DlZlZmTt.js +1 -0
  83. package/dist/assets/{chunk-4BX2VUAB-D_i5DxBx.js → chunk-4BX2VUAB-4RrLP-cY.js} +1 -1
  84. package/dist/assets/{chunk-55IACEB6-CYBqqEaM.js → chunk-55IACEB6-C8ucnnQR.js} +1 -1
  85. package/dist/assets/{chunk-B4BG7PRW-B_kJst0L.js → chunk-B4BG7PRW-DwNhZZ7r.js} +3 -3
  86. package/dist/assets/{chunk-DI55MBZ5-DmQQvuy9.js → chunk-DI55MBZ5-orfhja3l.js} +2 -2
  87. package/dist/assets/{chunk-FMBD7UC4-DIj1fMOC.js → chunk-FMBD7UC4-BuW1I-fC.js} +1 -1
  88. package/dist/assets/{chunk-QN33PNHL-Dob4GXZN.js → chunk-QN33PNHL-BaA5PO8k.js} +1 -1
  89. package/dist/assets/{chunk-QZHKN3VN-B9l1Ct5_.js → chunk-QZHKN3VN-Dqa4tmK4.js} +1 -1
  90. package/dist/assets/{chunk-TZMSLE5B-D5kj2wzj.js → chunk-TZMSLE5B-djzRrJuy.js} +1 -1
  91. package/dist/assets/classDiagram-2ON5EDUG-C2Yf3yFU.js +1 -0
  92. package/dist/assets/classDiagram-v2-WZHVMYZB-C2Yf3yFU.js +1 -0
  93. package/dist/assets/clone-D-4UeXFh.js +1 -0
  94. package/dist/assets/{code-block-37QAKDTI-DPta_cDe.js → code-block-37QAKDTI-AYxzHYF3.js} +1 -1
  95. package/dist/assets/{cose-bilkent-S5V4N54A-CIbyIxy7.js → cose-bilkent-S5V4N54A-Cnp1eSFl.js} +1 -1
  96. package/dist/assets/{dagre-6UL2VRFP-DiNoo8UH.js → dagre-6UL2VRFP-CIAWAhQL.js} +2 -2
  97. package/dist/assets/defaultLocale-C4B-KCzX.js +1 -0
  98. package/dist/assets/diagram-PSM6KHXK-CPeehxEt.js +24 -0
  99. package/dist/assets/diagram-QEK2KX5R-4rkmVp8d.js +43 -0
  100. package/dist/assets/diagram-S2PKOQOG-CHZnsBbD.js +24 -0
  101. package/dist/assets/{erDiagram-Q2GNP2WA-C18-XmOn.js → erDiagram-Q2GNP2WA-C4TTAGaG.js} +2 -2
  102. package/dist/assets/{flowDiagram-NV44I4VS-C_-yn3lU.js → flowDiagram-NV44I4VS-C9c1GVlY.js} +10 -10
  103. package/dist/assets/funnel-x-BvY4n8AU.js +1 -0
  104. package/dist/assets/{ganttDiagram-JELNMOA3-Da95ISpS.js → ganttDiagram-JELNMOA3-DPd-3uLN.js} +4 -4
  105. package/dist/assets/gitGraphDiagram-NY62KEGX-Drq0KNG5.js +65 -0
  106. package/dist/assets/{graph-ByVyFk5n.js → graph-9MjkFnGf.js} +1 -1
  107. package/dist/assets/{index-BUH5BNQv.css → index-DX91j_KV.css} +1 -1
  108. package/dist/assets/index-DoWWshr8.js +2187 -0
  109. package/dist/assets/info-RxIWhHbS.js +1 -0
  110. package/dist/assets/infoDiagram-WHAUD3N6-BEa020kA.js +2 -0
  111. package/dist/assets/init-Dmth1JHB.js +1 -0
  112. package/dist/assets/{journeyDiagram-XKPGCS4Q-Dc0gGxNW.js → journeyDiagram-XKPGCS4Q-mAbpJFG8.js} +4 -4
  113. package/dist/assets/{kanban-definition-3W4ZIXB7-BBl3Os5b.js → kanban-definition-3W4ZIXB7-BbUqw1vO.js} +8 -8
  114. package/dist/assets/{layout-DUjHnQ3q.js → layout-BOFaVoue.js} +1 -1
  115. package/dist/assets/linear-xUbiORsA.js +1 -0
  116. package/dist/assets/min-eHwPCINR.js +1 -0
  117. package/dist/assets/{mindmap-definition-VGOIOE7T-DwXr0an_.js → mindmap-definition-VGOIOE7T-DoP6Td_B.js} +2 -2
  118. package/dist/assets/ordinal-DILIJJjt.js +1 -0
  119. package/dist/assets/page-transition-dCsDSjnv.js +1 -0
  120. package/dist/assets/pieDiagram-ADFJNKIX-Dp_SBNAy.js +30 -0
  121. package/dist/assets/{quadrantDiagram-AYHSOK5B-jzIPJrQC.js → quadrantDiagram-AYHSOK5B-D6Jp00F5.js} +4 -4
  122. package/dist/assets/refresh-ccw-DGe62KT5.js +1 -0
  123. package/dist/assets/{requirementDiagram-UZGBJVZJ-D7lvVmve.js → requirementDiagram-UZGBJVZJ-DOBz3Rdv.js} +3 -3
  124. package/dist/assets/sankeyDiagram-TZEHDZUN-Bz7vjGqd.js +10 -0
  125. package/dist/assets/{sequenceDiagram-WL72ISMW-DWXoU2Xu.js → sequenceDiagram-WL72ISMW-ByPYmOvZ.js} +6 -6
  126. package/dist/assets/session-mode-badge-DCssJwfh.js +1 -0
  127. package/dist/assets/stat-card-ic_H-ddZ.js +1 -0
  128. package/dist/assets/{stateDiagram-FKZM4ZOC-DKMSa2-u.js → stateDiagram-FKZM4ZOC-W833g5qw.js} +1 -1
  129. package/dist/assets/stateDiagram-v2-4FDKWEC3-CwLThngZ.js +1 -0
  130. package/dist/assets/table-of-contents-B4pUXfVp.js +2 -0
  131. package/dist/assets/time-s4hpWI0y.js +1 -0
  132. package/dist/assets/{timeline-definition-IT6M3QCI-i8tdCjji.js → timeline-definition-IT6M3QCI-B3f6ZKjd.js} +3 -3
  133. package/dist/assets/token-utils-x_d_uTQu.js +1 -0
  134. package/dist/assets/{treemap-KMMF4GRG-Bo2ueTP9.js → treemap-KMMF4GRG-CkWhJIwZ.js} +16 -16
  135. package/dist/assets/trending-up-Bp_uZ6i5.js +1 -0
  136. package/dist/assets/validation-badge-B9E1wcwj.js +1 -0
  137. package/dist/assets/{xychartDiagram-PRI3JC2R-C54lHEBd.js → xychartDiagram-PRI3JC2R-Cj3LJwsf.js} +3 -3
  138. package/dist/{blockDiagram-VD42YOAC-ByO9mclR.js → blockDiagram-VD42YOAC-DRN0jNqr.js} +5 -5
  139. package/dist/{c4Diagram-YG6GDRKO-G9IBNezV.js → c4Diagram-YG6GDRKO-CBxJIsoM.js} +2 -2
  140. package/dist/{channel-TVLaQyE6.js → channel-C2ap0mKj.js} +1 -1
  141. package/dist/{chunk-4BX2VUAB-DvQETnkD.js → chunk-4BX2VUAB-CZFPLiei.js} +1 -1
  142. package/dist/{chunk-55IACEB6-Fx760vrL.js → chunk-55IACEB6-CF8NKj4_.js} +1 -1
  143. package/dist/{chunk-B4BG7PRW-BdBF-s3l.js → chunk-B4BG7PRW-C3jkgdyU.js} +4 -4
  144. package/dist/{chunk-DI55MBZ5-Bq1Xpipe.js → chunk-DI55MBZ5-D0hqaHNM.js} +3 -3
  145. package/dist/{chunk-FMBD7UC4-CHwx9e7Z.js → chunk-FMBD7UC4-BMvRco5D.js} +1 -1
  146. package/dist/{chunk-QN33PNHL-29-xlpoh.js → chunk-QN33PNHL-D8WFPrQ5.js} +1 -1
  147. package/dist/{chunk-QZHKN3VN-B4R9UyOO.js → chunk-QZHKN3VN-BBkUib8s.js} +1 -1
  148. package/dist/{chunk-TZMSLE5B-D7ZMH86x.js → chunk-TZMSLE5B-CArYpbwP.js} +1 -1
  149. package/dist/{classDiagram-v2-WZHVMYZB-BZJNp72Q.js → classDiagram-2ON5EDUG-BCig139j.js} +2 -2
  150. package/dist/{classDiagram-2ON5EDUG-BZJNp72Q.js → classDiagram-v2-WZHVMYZB-BCig139j.js} +2 -2
  151. package/dist/{clone-BuM257qi.js → clone-DPyGLWtv.js} +1 -1
  152. package/dist/{cose-bilkent-S5V4N54A-BDx7dcIS.js → cose-bilkent-S5V4N54A-C5SYwGsk.js} +1 -1
  153. package/dist/{dagre-6UL2VRFP-fvMEdLZ9.js → dagre-6UL2VRFP-C8I3plmM.js} +5 -5
  154. package/dist/{diagram-PSM6KHXK-B5DR0Fbv.js → diagram-PSM6KHXK-cXC7AIdZ.js} +4 -4
  155. package/dist/{diagram-QEK2KX5R-DVAmb4ns.js → diagram-QEK2KX5R-CXNiTV6f.js} +3 -3
  156. package/dist/{diagram-S2PKOQOG-oXO-KMCB.js → diagram-S2PKOQOG-CxGzqgZF.js} +3 -3
  157. package/dist/{erDiagram-Q2GNP2WA-Cw3S1xrg.js → erDiagram-Q2GNP2WA-CcY6lgTn.js} +4 -4
  158. package/dist/{flowDiagram-NV44I4VS-B41EhOsx.js → flowDiagram-NV44I4VS-12EmxlpA.js} +5 -5
  159. package/dist/{ganttDiagram-JELNMOA3-CktjaPtm.js → ganttDiagram-JELNMOA3-pNkGSHoM.js} +2 -2
  160. package/dist/{gitGraph-F6HP7TQM-BtaG3hDI.js → gitGraph-F6HP7TQM-DUrKWg_A.js} +1 -1
  161. package/dist/{gitGraphDiagram-NY62KEGX-DoYr9lJ6.js → gitGraphDiagram-NY62KEGX-BXO3EwIS.js} +4 -4
  162. package/dist/{graph-aZrSt0UC.js → graph-D813u3VC.js} +2 -2
  163. package/dist/{index-2ILPnvAG.js → index-ChBmztZR.js} +2732 -2730
  164. package/dist/index.html +2 -2
  165. package/dist/info-NVLQJR56-DBBp-UIi.js +5 -0
  166. package/dist/{infoDiagram-WHAUD3N6-C-9mSXCL.js → infoDiagram-WHAUD3N6-DLh94vHX.js} +2 -2
  167. package/dist/{journeyDiagram-XKPGCS4Q-BZaGhFGN.js → journeyDiagram-XKPGCS4Q-CXPtgCeQ.js} +4 -4
  168. package/dist/{kanban-definition-3W4ZIXB7-DcgJ4LvA.js → kanban-definition-3W4ZIXB7-CdIz6-22.js} +2 -2
  169. package/dist/{katex-r9TeExgs.js → katex-Cj93GM5Y.js} +2529 -2615
  170. package/dist/{layout-CZbv8l1x.js → layout-cIjTHX6V.js} +4 -4
  171. package/dist/lib/hooks/useSpecsQuery.d.ts +5 -0
  172. package/dist/lib/index.js +1 -1
  173. package/dist/lib/lib/api.d.ts +6 -1
  174. package/dist/lib/lib/backend-adapter/core.d.ts +7 -0
  175. package/dist/lib/lib/backend-adapter/http.d.ts +7 -0
  176. package/dist/lib/lib/backend-adapter/tauri.d.ts +7 -0
  177. package/dist/lib/lib/session-stream.d.ts +2 -0
  178. package/dist/lib/locales/en/common.json.d.ts +14 -3
  179. package/dist/lib/locales/zh-CN/common.json.d.ts +14 -3
  180. package/dist/lib/stores/session-create-preferences.d.ts +26 -0
  181. package/dist/lib/types/api.d.ts +5 -1
  182. package/dist/lib/types/generated/RunnerDefinition.d.ts +10 -0
  183. package/dist/lib/types/generated/SessionMode.d.ts +1 -1
  184. package/dist/{linear-DOiEav8w.js → linear-2z6avE3r.js} +1 -1
  185. package/dist/{mermaid-parser.core-CE74cRHV.js → mermaid-parser.core-WMnVe1c0.js} +10 -10
  186. package/dist/{min-iEZRg5We.js → min-DUysNg_V.js} +2 -2
  187. package/dist/{mindmap-definition-VGOIOE7T-B7vK-2rU.js → mindmap-definition-VGOIOE7T-DEm273Z9.js} +3 -3
  188. package/dist/{packet-BFZMPI3H-CRtMZ75O.js → packet-BFZMPI3H-CmSJj4N0.js} +1 -1
  189. package/dist/pie-7BOR55EZ-x5AF7tG5.js +5 -0
  190. package/dist/{pieDiagram-ADFJNKIX-B2CycMp2.js → pieDiagram-ADFJNKIX-Ke8r-mM4.js} +4 -4
  191. package/dist/{quadrantDiagram-AYHSOK5B-DWzMKUVW.js → quadrantDiagram-AYHSOK5B-DLLlZTBr.js} +2 -2
  192. package/dist/radar-NHE76QYJ-CIhcw_Rm.js +5 -0
  193. package/dist/{requirementDiagram-UZGBJVZJ-B1JPpr0N.js → requirementDiagram-UZGBJVZJ-BR4B8eTH.js} +3 -3
  194. package/dist/{sankeyDiagram-TZEHDZUN-DUe4DMeI.js → sankeyDiagram-TZEHDZUN-pDGOsl6Q.js} +1 -1
  195. package/dist/{sequenceDiagram-WL72ISMW-D1ka_qcb.js → sequenceDiagram-WL72ISMW-yt5mqXYT.js} +3 -3
  196. package/dist/{stateDiagram-FKZM4ZOC-kHECs8c-.js → stateDiagram-FKZM4ZOC-C-huUZaG.js} +4 -4
  197. package/dist/{stateDiagram-v2-4FDKWEC3-DtTw2e8h.js → stateDiagram-v2-4FDKWEC3-CSzbVv4p.js} +2 -2
  198. package/dist/{timeline-definition-IT6M3QCI-B9QaWiVQ.js → timeline-definition-IT6M3QCI-DOzsM3OK.js} +2 -2
  199. package/dist/{treemap-KMMF4GRG-Ba6NXlAy.js → treemap-KMMF4GRG-DGnMOcp3.js} +1 -1
  200. package/dist/ui.css +1 -1
  201. package/dist/{xychartDiagram-PRI3JC2R-Cx42bjo1.js → xychartDiagram-PRI3JC2R-C-4j16qj.js} +2 -2
  202. package/package.json +5 -2
  203. package/dist/assets/_baseUniq-CwL8whuW.js +0 -1
  204. package/dist/assets/arc-DQK79yWt.js +0 -1
  205. package/dist/assets/architectureDiagram-VXUJARFQ-0lyQJAFV.js +0 -36
  206. package/dist/assets/channel-CPL3ZhB2.js +0 -1
  207. package/dist/assets/classDiagram-2ON5EDUG-BGtOMy27.js +0 -1
  208. package/dist/assets/classDiagram-v2-WZHVMYZB-BGtOMy27.js +0 -1
  209. package/dist/assets/clone-TRq3RsgR.js +0 -1
  210. package/dist/assets/diagram-PSM6KHXK-oPUYMkQi.js +0 -24
  211. package/dist/assets/diagram-QEK2KX5R-ekYHp-_K.js +0 -43
  212. package/dist/assets/diagram-S2PKOQOG-BjESZsAo.js +0 -24
  213. package/dist/assets/gitGraphDiagram-NY62KEGX-CKst-DTk.js +0 -65
  214. package/dist/assets/index-B-FvbnKr.js +0 -2236
  215. package/dist/assets/infoDiagram-WHAUD3N6-B-KLbNx8.js +0 -2
  216. package/dist/assets/min-B84CwCRn.js +0 -1
  217. package/dist/assets/pieDiagram-ADFJNKIX-kg25OEdx.js +0 -30
  218. package/dist/assets/sankeyDiagram-TZEHDZUN-CkKJUu-X.js +0 -10
  219. package/dist/assets/stateDiagram-v2-4FDKWEC3-fGhjroU9.js +0 -1
  220. package/dist/info-NVLQJR56-5Whifced.js +0 -5
  221. package/dist/pie-7BOR55EZ-CTCOpJ_s.js +0 -5
  222. package/dist/radar-NHE76QYJ-B-kEmJss.js +0 -5
@@ -0,0 +1,4 @@
1
+ import{h as P,cf as ke,u as Ce,bg as Le,bh as De,r,c7 as f,cg as te,ch as Ee,ci as Pe,cj as Te,ck as $e,bv as Me,cl as ze,cm as Ie,j as e,bs as Ae,cn as ae,c8 as ne,a as l,bq as Re,B as v,f as x,bu as re,co as _e,cp as Oe,cq as Fe,bF as Ue,bG as ie,bH as qe,bn as oe,cr as le,bV as ce,cs as de,ct as Je,cu as Ve,cv as me,cw as Be,cx as ue,cy as He}from"./index-DoWWshr8.js";import{P as We}from"./page-transition-dCsDSjnv.js";import{S as Qe}from"./session-mode-badge-DCssJwfh.js";const Ze=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],Ge=P("activity",Ze);const Xe=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}]],xe=P("file-code",Xe);const Ye=[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}]],Ke=P("panel-left",Ye);function es(){return ke()}const E=new Set(["pending","running","paused"]);function rs(){const{t:n}=Ce("common"),{sessionId:d,projectId:N}=Le(),{currentProject:T,loading:b}=De(),$=N??T?.id,M=$?`/projects/${$}`:"/projects",w=!N||T?.id===N,[a,z]=r.useState(null),[S,I]=r.useState([]),[A,R]=r.useState([]),[pe,_]=r.useState(!0),[k,O]=r.useState(!0),[F,U]=r.useState(null),[q,he]=r.useState(null),[fe,J]=r.useState(new Set),[p,V]=r.useState(""),[j,ge]=r.useState("messages"),[B,H]=r.useState(!1),[ve,be]=r.useState(()=>Date.now()),C=r.useRef(null),{setMobileOpen:we}=es(),c=r.useCallback(async(s=!1)=>{if(!(!d||!w||b)){s||_(!0);try{const t=await f.getSession(d);z(t),U(null)}catch(t){U(t instanceof Error?t.message:n("sessions.errors.load"))}finally{s||_(!1)}}},[b,w,d,n]),h=r.useCallback(async(s=!1)=>{if(!(!d||!w||b)){s||O(!0);try{const t=await f.getSessionLogs(d);I(t);const i=t.reduce((o,L)=>te(o,Ee(L)),[]);R(Pe(i))}finally{s||O(!1)}}},[b,w,d]);r.useEffect(()=>{c(),h()},[c,h]),r.useEffect(()=>{if(!a||!E.has(a.status))return;const t=window.location.origin.replace(/^http/,"ws")+`/api/sessions/${a.id}/stream`,i=new WebSocket(t);return i.onmessage=o=>{try{const L=JSON.parse(o.data),u=Te(L);u&&(R(D=>te(D,u)),u.type==="log"&&I(D=>[...D,{id:Date.now(),timestamp:u.timestamp,level:u.level,message:u.message}]),u.type==="complete"&&(c(!0),h(!0)))}catch{}},()=>i.close()},[a,c,h]),r.useEffect(()=>{if(!a||!E.has(a.status))return;const s=window.setInterval(()=>{c(!0),h(!0)},2e3);return()=>window.clearInterval(s)},[h,c,a]),r.useEffect(()=>{if(!a||!E.has(a.status))return;const s=window.setInterval(()=>{be(Date.now())},1e3);return()=>window.clearInterval(s)},[a]),r.useEffect(()=>{const s=C.current;if(!s)return;const t=s.querySelector("[data-radix-scroll-area-viewport]");t?t.scrollTop=t.scrollHeight:s.scrollTop=s.scrollHeight},[S]);const m=$e(a),y=j==="verbose",g=r.useMemo(()=>{const s=p.trim().toLowerCase();return S.filter(t=>!(!y&&t.message.includes("Session still running")||s&&!`${t.level} ${t.message}`.toLowerCase().includes(s)))},[S,p,y]),W=r.useMemo(()=>{if(!m)return[];const s=p.trim().toLowerCase();return A.filter(t=>j==="messages"&&t.type==="log"||t.type==="log"&&!y&&t.message.includes("Session still running")?!1:s?t.type==="acp_message"||t.type==="acp_thought"?t.content.toLowerCase().includes(s):t.type==="acp_tool_call"?`${t.tool} ${JSON.stringify(t.args)} ${JSON.stringify(t.result??"")}`.toLowerCase().includes(s):t.type==="acp_plan"?t.entries.some(i=>i.title.toLowerCase().includes(s)):!1:!0)},[m,p,A,y,j]),Q=a?Me(a,ve):null,Z=a?ze(a.tokenCount):null,G=a?Ie(a.tokenCount):null,je=s=>s.length>12?s.slice(0,8):s,X=async()=>{a&&(await f.stopSession(a.id),await c())},ye=async()=>{a&&(await f.pauseSession(a.id),await c())},Ne=async()=>{a&&(await f.resumeSession(a.id),await c())},Y=()=>m?JSON.stringify(W,null,2):g.map(s=>`[${s.timestamp}] ${s.level.toUpperCase()} ${s.message}`).join(`
2
+ `),K=()=>{const s=Y(),t=new Blob([s],{type:m?"application/json;charset=utf-8":"text/plain;charset=utf-8"}),i=URL.createObjectURL(t),o=document.createElement("a");o.href=i,o.download=`session-${d??n("sessions.export.fallbackName")}.${m?"json":"txt"}`,document.body.appendChild(o),o.click(),o.remove(),URL.revokeObjectURL(i)},ee=5e5,se=async()=>{const s=Y(),t=s.length>ee?s.slice(0,ee)+`
3
+
4
+ … (truncated)`:s;await navigator.clipboard.writeText(t),H(!0),setTimeout(()=>H(!1),2e3)},Se=async(s,t)=>{if(a){J(i=>{const o=new Set(i);return o.add(s),o});try{const i=await f.respondToSessionPermission(a.id,s,t);z(i)}catch(i){he(i instanceof Error?i.message:n("sessions.errors.load"))}finally{J(i=>{const o=new Set(i);return o.delete(s),o})}}};return pe?e.jsx("div",{className:"flex-1 min-w-0 py-10 text-center text-sm text-muted-foreground",children:n("actions.loading")}):F||!a?e.jsx("div",{className:"flex-1 min-w-0 flex items-center justify-center",children:e.jsx(Ae,{icon:ae,title:n("sessionDetail.state.notFoundTitle"),description:F||n("sessionDetail.state.notFoundDescription"),tone:"error",actions:e.jsx(ne,{to:`${M}/sessions`,className:"inline-flex",children:e.jsx(l,{variant:"outline",size:"sm",className:"gap-2",children:n("sessions.actions.back")})})})}):e.jsx(We,{className:"flex-1 min-w-0",children:e.jsxs("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col",children:[e.jsx("header",{className:"shrink-0 border-b bg-card",children:e.jsxs("div",{className:"px-4 sm:px-6 py-2 sm:py-3",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1.5 sm:mb-2",children:[e.jsx(l,{variant:"ghost",size:"sm",className:"h-8 w-8 p-0 lg:hidden shrink-0",onClick:()=>we(!0),children:e.jsx(Ke,{className:"h-4 w-4"})}),e.jsx(Re,{runnerId:a.runner,size:24}),e.jsx("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:n("sessionDetail.title",{id:je(a.id)})})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs",children:[e.jsxs(v,{variant:"outline",className:x("flex items-center gap-1.5 w-fit border-transparent h-5 px-2 py-0.5 text-xs font-medium",re[a.status].className),children:[(()=>{const s=re[a.status].icon;return e.jsx(s,{className:"h-3.5 w-3.5"})})(),n(`sessions.status.${a.status}`)]}),e.jsx(Qe,{mode:a.mode}),e.jsxs(v,{variant:"outline",className:"flex items-center gap-1.5 w-fit border-transparent h-5 px-2 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",children:[e.jsx(Ge,{className:"h-3.5 w-3.5"}),n(m?"sessions.labels.protocolAcp":"sessions.labels.protocolCli")]}),Q&&e.jsxs(v,{variant:"outline",className:"flex items-center gap-1.5 w-fit border-transparent h-5 px-2 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",children:[e.jsx(_e,{className:"h-3.5 w-3.5"}),Q]}),Z&&e.jsxs(v,{variant:"outline",className:"flex items-center gap-1.5 w-fit border-transparent h-5 px-2 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",children:[e.jsx(Oe,{className:"h-3.5 w-3.5"}),Z]}),G!=null&&e.jsxs(v,{variant:"outline",className:"flex items-center gap-1.5 w-fit border-transparent h-5 px-2 py-0.5 text-xs font-medium bg-secondary text-secondary-foreground",children:[e.jsx(Fe,{className:"h-3.5 w-3.5"}),n("sessions.labels.costApprox",{value:G.toFixed(2)})]})]}),a.specIds&&a.specIds.length>0&&e.jsxs("div",{className:"flex flex-wrap gap-2 text-xs text-muted-foreground mt-1.5",children:[e.jsxs("span",{children:[n("sessions.labels.specs"),":"]}),a.specIds.map(s=>e.jsx(ne,{to:`${M}/specs/${s}`,className:"hover:text-primary hover:underline font-medium",children:s},s))]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[a.status==="running"&&e.jsxs(e.Fragment,{children:[e.jsxs(l,{type:"button",variant:"outline",size:"sm",onClick:()=>{ye()},className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx(Ue,{className:"mr-1.5 h-3.5 w-3.5"}),n("sessions.actions.pause")]}),e.jsxs(l,{type:"button",variant:"outline",size:"sm",onClick:()=>{X()},className:"h-8 rounded-full border px-3 text-xs font-medium text-destructive transition-colors hover:bg-destructive/10",children:[e.jsx(ie,{className:"mr-1.5 h-3.5 w-3.5"}),n("sessions.actions.stop")]})]}),a.status==="paused"&&e.jsxs(e.Fragment,{children:[e.jsxs(l,{type:"button",variant:"outline",size:"sm",onClick:()=>{Ne()},className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx(qe,{className:"mr-1.5 h-3.5 w-3.5"}),n("sessions.actions.resume")]}),e.jsxs(l,{type:"button",variant:"outline",size:"sm",onClick:()=>{X()},className:"h-8 rounded-full border px-3 text-xs font-medium text-destructive transition-colors hover:bg-destructive/10",children:[e.jsx(ie,{className:"mr-1.5 h-3.5 w-3.5"}),n("sessions.actions.stop")]})]}),!1]})]})}),q&&e.jsxs("div",{className:"rounded-md border border-destructive/30 bg-destructive/10 px-4 py-3 text-sm text-destructive font-medium flex items-center gap-2",children:[e.jsx(ae,{className:"h-4 w-4"}),q]}),e.jsx("div",{className:"flex-1 min-h-0 flex flex-col overflow-hidden w-full",children:m?e.jsxs(Je,{value:j,onValueChange:s=>ge(s),className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:"border-b px-4 py-2 flex items-center justify-between bg-muted/20 gap-4",children:[e.jsx("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:e.jsxs("div",{className:"relative flex-1 max-w-sm",children:[e.jsx(oe,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground"}),e.jsx("input",{value:p,onChange:s=>V(s.target.value),placeholder:n("sessionDetail.filters.search"),className:"h-8 w-full rounded-md border border-border bg-background pl-8 pr-3 text-xs focus:outline-none focus:ring-1 focus:ring-ring"})]})}),e.jsxs("div",{className:"flex items-center gap-2 justify-end",children:[e.jsxs(Ve,{className:"h-8 bg-muted/50 p-0.5",children:[e.jsx(me,{value:"messages",className:"text-xs h-7 px-3 data-[state=active]:bg-background data-[state=active]:shadow-sm",children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Be,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:n("sessionDetail.displayMode.messages")})]})}),e.jsx(me,{value:"verbose",className:"text-xs h-7 px-3 data-[state=active]:bg-background data-[state=active]:shadow-sm",children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(xe,{className:"h-3.5 w-3.5"}),e.jsx("span",{children:n("sessionDetail.displayMode.verbose")})]})})]}),e.jsx("div",{className:"h-4 w-px bg-border mx-1"}),e.jsx(l,{size:"sm",variant:"ghost",className:"h-8 w-8 p-0",onClick:K,title:n("sessionDetail.actions.download"),children:e.jsx(le,{className:"h-4 w-4"})}),e.jsx(l,{size:"sm",variant:"ghost",className:x("h-8 w-8 p-0",B&&"text-emerald-500"),onClick:()=>{se()},title:n("sessionDetail.actions.copyLogs"),children:e.jsx(ce,{className:"h-4 w-4"})})]})]}),e.jsx(ue,{value:"messages",className:"flex-1 min-h-0 mt-0 data-[state=inactive]:hidden relative",children:e.jsx("div",{className:"absolute inset-0",children:e.jsx(He,{className:"h-full border-0 rounded-none bg-transparent",events:W,loading:k,emptyTitle:n("sessions.emptyLogs"),emptyDescription:n("sessionDetail.logsDescription"),onPermissionResponse:(s,t)=>{Se(s,t)},isPermissionResponding:s=>fe.has(s)})})}),e.jsx(ue,{value:"verbose",className:"flex-1 min-h-0 mt-0 data-[state=inactive]:hidden relative h-full",children:e.jsx(de,{className:"h-full bg-background",ref:C,children:e.jsx("div",{className:"p-4 font-mono text-xs",children:k?e.jsx("div",{className:"text-muted-foreground",children:n("actions.loading")}):g.length===0?e.jsx("div",{className:"text-muted-foreground text-center italic opacity-60 py-8",children:n("sessions.emptyLogs")}):g.map(s=>{const t=s.message.trim().startsWith("{")||s.message.trim().startsWith("[");return e.jsxs("div",{className:"mb-0.5 group hover:bg-muted/30 -mx-4 px-4 py-1 flex gap-3 items-start border-l-2 border-transparent",children:[e.jsxs("span",{className:"text-muted-foreground/40 whitespace-nowrap select-none w-24 shrink-0 text-[10px] pt-0.5 text-right font-light tabular-nums",children:[new Date(s.timestamp).toLocaleTimeString([],{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),".",e.jsx("span",{className:"opacity-50",children:new Date(s.timestamp).getMilliseconds().toString().padStart(3,"0")})]}),e.jsx("span",{className:x("uppercase text-[10px] font-bold w-14 shrink-0 pt-0.5 select-none text-center rounded-sm bg-muted/30",s.level==="error"?"text-rose-600 bg-rose-500/10 dark:text-rose-400":s.level==="warn"?"text-amber-600 bg-amber-500/10 dark:text-amber-400":s.level==="info"?"text-sky-600 bg-sky-500/10 dark:text-sky-400":s.level==="debug"?"text-violet-600 bg-violet-500/10 dark:text-violet-400":"text-muted-foreground"),children:s.level}),e.jsx("div",{className:x("flex-1 min-w-0 break-all whitespace-pre-wrap leading-relaxed",t&&"text-emerald-600 dark:text-emerald-400"),children:s.message})]},`${s.id}-${s.timestamp}`)})})})})]}):e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:"border-b px-4 py-2 flex items-center justify-between bg-muted/20 gap-4",children:[e.jsx("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:e.jsxs("div",{className:"relative flex-1 max-w-sm",children:[e.jsx(oe,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground"}),e.jsx("input",{value:p,onChange:s=>V(s.target.value),placeholder:n("sessionDetail.filters.search"),className:"h-8 w-full rounded-md border border-border bg-background pl-8 pr-3 text-xs focus:outline-none focus:ring-1 focus:ring-ring"})]})}),e.jsxs("div",{className:"flex items-center gap-2 justify-end",children:[e.jsxs("div",{className:"flex items-center gap-2 font-medium text-sm text-muted-foreground mr-2",children:[e.jsx(xe,{className:"h-4 w-4"}),e.jsx("span",{children:"Verbose Logs"})]}),e.jsx("div",{className:"h-4 w-px bg-border mx-1"}),e.jsx(l,{size:"sm",variant:"ghost",className:"h-8 w-8 p-0",onClick:K,title:n("sessionDetail.actions.download"),children:e.jsx(le,{className:"h-4 w-4"})}),e.jsx(l,{size:"sm",variant:"ghost",className:x("h-8 w-8 p-0",B&&"text-emerald-500"),onClick:()=>{se()},title:n("sessionDetail.actions.copyLogs"),children:e.jsx(ce,{className:"h-4 w-4"})})]})]}),e.jsx(de,{className:"flex-1 h-full bg-background",ref:C,children:e.jsx("div",{className:"p-4 font-mono text-xs",children:k?e.jsx("div",{className:"text-muted-foreground",children:n("actions.loading")}):g.length===0?e.jsx("div",{className:"text-muted-foreground text-center italic opacity-60 py-8",children:n("sessions.emptyLogs")}):g.map(s=>{const t=s.message.trim().startsWith("{")||s.message.trim().startsWith("[");return e.jsxs("div",{className:"mb-0.5 group hover:bg-muted/30 -mx-4 px-4 py-1 flex gap-3 items-start border-l-2 border-transparent",children:[e.jsxs("span",{className:"text-muted-foreground/40 whitespace-nowrap select-none w-24 shrink-0 text-[10px] pt-0.5 text-right font-light tabular-nums",children:[new Date(s.timestamp).toLocaleTimeString([],{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"}),".",e.jsx("span",{className:"opacity-50",children:new Date(s.timestamp).getMilliseconds().toString().padStart(3,"0")})]}),e.jsx("span",{className:x("uppercase text-[10px] font-bold w-14 shrink-0 pt-0.5 select-none text-center rounded-sm bg-muted/30",s.level==="error"?"text-rose-600 bg-rose-500/10 dark:text-rose-400":s.level==="warn"?"text-amber-600 bg-amber-500/10 dark:text-amber-400":s.level==="info"?"text-sky-600 bg-sky-500/10 dark:text-sky-400":s.level==="debug"?"text-violet-600 bg-violet-500/10 dark:text-violet-400":"text-muted-foreground"),children:s.level}),e.jsx("div",{className:x("flex-1 min-w-0 break-all whitespace-pre-wrap leading-relaxed",t&&"text-emerald-600 dark:text-emerald-400"),children:s.message})]},`${s.id}-${s.timestamp}`)})})})]})})]})})}export{rs as SessionDetailPage};
@@ -0,0 +1 @@
1
+ import{u as Z,r,j as s,b5 as Ns,b6 as vs,a as m,b7 as ys,b8 as Cs,b9 as ws,ba as Ss,bb as Ps,bc as ks,bd as Ds,be as Fs,bf as Ts,f as _,bg as Rs,bh as Is,bi as Ls,bj as zs,bk as Ms,bl as Bs,aS as X,C as Y,l as K,bm as As,aW as $s,bn as Os,b0 as Es,bo as Vs,aX as I,aY as L,aZ as z,a_ as M,a$ as p,bp as rs,bq as ns,br as qs,bs as ss,bt as Qs,aP as Gs,bu as Hs,bv as Xs,bw as Zs,bx as _s,by as Js,bz as Us,B as es,bA as Ws,bB as Ys,bC as Ks,bD as se,bE as ee,bF as ae,bG as as,bH as te,bI as re,bJ as ts}from"./index-DoWWshr8.js";import{P as ne}from"./page-transition-dCsDSjnv.js";import{S as le}from"./session-mode-badge-DCssJwfh.js";import{F as ie,a as oe}from"./funnel-x-BvY4n8AU.js";import{R as ce}from"./refresh-ccw-DGe62KT5.js";function de({value:a,onValueChange:t,options:x,placeholder:g,searchPlaceholder:h,emptyText:f}){const{t:i}=Z("common"),[j,b]=r.useState(!1);return s.jsxs(Ns,{open:j,onOpenChange:b,children:[s.jsx(vs,{asChild:!0,children:s.jsxs(m,{variant:"outline",role:"combobox","aria-expanded":j,className:"w-full justify-between font-normal",children:[a?x.find(d=>d.value===a)?.label??a:g??i("sessions.select.placeholder"),s.jsx(ys,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),s.jsx(Cs,{className:"w-[--radix-popover-trigger-width] p-0",align:"start",children:s.jsxs(ws,{children:[s.jsx(Ss,{placeholder:h??i("sessions.select.search")}),s.jsxs(Ps,{children:[s.jsx(ks,{children:f??i("sessions.select.empty")}),s.jsx(Ds,{children:x.map(d=>s.jsxs(Fs,{value:d.label,className:"cursor-pointer",onSelect:()=>{t(d.value),b(!1)},children:[s.jsx(Ts,{className:_("mr-2 h-4 w-4",a===d.value?"opacity-100":"opacity-0")}),d.label]},d.value))})]})]})})]})}const N=20;function ue(a){if(a.status==="running"||a.status==="pending")return"active";const t=ts(a.startedAt),g=ts().startOf("day"),h=g.subtract(1,"day"),f=t.startOf("day");return f.isSame(g)?"today":f.isSame(h)?"yesterday":"older"}function me(a){const t={active:[],today:[],yesterday:[],older:[]};return a.forEach(x=>{t[ue(x)].push(x)}),t}function be(){const{t:a}=Z("common"),{projectId:t}=Rs(),{currentProject:x,loading:g}=Is(),h=t??x?.id,f=h?`/projects/${h}`:"/projects",i=Ls(h??null),j=zs(h??null),{stopSession:b,pauseSession:d,resumeSession:D}=Ms(h??null),u=r.useMemo(()=>i.data??[],[i.data]),w=r.useMemo(()=>j.data??[],[j.data]),F=g||i.isLoading,T=i.error?a("sessions.errors.load"):null,[B]=Bs(),[v,A]=r.useState(""),[n,S]=r.useState("all"),[P,ls]=r.useState("all"),[k,is]=r.useState("all"),[C,os]=r.useState(()=>B.get("spec")??"all"),[$,cs]=r.useState("started-desc"),[ds,y]=r.useState(N),[us,O]=r.useState(!1),E=r.useCallback(e=>{A(e),y(N)},[]),V=r.useCallback(e=>{S(e),y(N)},[]),q=r.useCallback(e=>{ls(e),y(N)},[]),Q=r.useCallback(e=>{is(e),y(N)},[]),G=r.useCallback(e=>{os(e),y(N)},[]),ms=r.useCallback(e=>{cs(e),y(N)},[]),H=r.useCallback(async()=>{await i.refetch(),await j.refetch()},[i,j]),xs=r.useMemo(()=>{const e=u.map(o=>o.status).filter(Boolean);return Array.from(new Set(e))},[u]),hs=r.useMemo(()=>{const e=u.map(o=>o.runner).filter(Boolean);return Array.from(new Set(e))},[u]),ps=r.useMemo(()=>{const e=u.map(o=>o.mode).filter(Boolean);return Array.from(new Set(e))},[u]),gs=r.useMemo(()=>w.map(e=>({id:e.specName,label:e.specNumber?`#${e.specNumber} ${e.title??e.specName}`:e.title??e.specName})).sort((e,o)=>e.label.localeCompare(o.label)),[w]),R=r.useMemo(()=>{const o=[...u.filter(l=>{if(v){const c=v.toLowerCase();if(!(l.id.toLowerCase().includes(c)||(l.specIds?.some(W=>W.toLowerCase().includes(c))??!1)||l.runner.toLowerCase().includes(c)||(l.prompt?.toLowerCase().includes(c)??!1)))return!1}return!(n!=="all"&&l.status!==n||P!=="all"&&l.runner!==P||k!=="all"&&l.mode!==k||C!=="all"&&(!l.specIds?.length||!l.specIds.some(c=>c===C||c.includes(C))))})];switch($){case"started-asc":o.sort((l,c)=>new Date(l.startedAt).getTime()-new Date(c.startedAt).getTime());break;case"duration-desc":o.sort((l,c)=>{const U=l.durationMs??0;return(c.durationMs??0)-U});break;case"status":o.sort((l,c)=>l.status.localeCompare(c.status));break;default:o.sort((l,c)=>new Date(c.startedAt).getTime()-new Date(l.startedAt).getTime());break}return o},[k,v,u,$,C,n,P]),J=R.slice(0,ds),js=r.useCallback(async e=>{await b(e)},[b]),fs=r.useCallback(async e=>{await d(e)},[d]),bs=r.useCallback(async e=>{await D(e)},[D]);return F?s.jsx(X,{children:s.jsx(Y,{children:s.jsx(K,{className:"py-10 text-center text-sm text-muted-foreground",children:a("actions.loading")})})}):T?s.jsx(X,{children:s.jsx(Y,{children:s.jsxs(K,{className:"py-10 text-center space-y-3",children:[s.jsx("div",{className:"text-lg font-semibold",children:a("sessionsPage.state.errorTitle")}),s.jsx("p",{className:"text-sm text-muted-foreground",children:T}),s.jsx(m,{variant:"secondary",size:"sm",onClick:H,className:"mt-2",children:a("actions.retry")})]})})}):s.jsxs(ne,{className:_("flex-1 min-w-0"),children:[s.jsxs(X,{className:"h-[calc(100vh-3.5rem)]",contentClassName:"flex h-full flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-col gap-4 sticky top-0 bg-background mt-0 py-2 z-10",children:[s.jsx(As,{title:a("sessionsPage.title"),description:a("sessionsPage.description"),actions:s.jsxs(m,{size:"sm",variant:"outline",className:"gap-2",onClick:()=>O(!0),children:[s.jsx($s,{className:"h-4 w-4"}),a("sessions.actions.new")]})}),s.jsxs("div",{className:"space-y-4",children:[s.jsxs("div",{className:"relative",children:[s.jsx(Os,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-muted-foreground"}),s.jsx(Es,{value:v,onChange:e=>E(e.target.value),placeholder:a("sessionsPage.filters.search"),className:"w-full pl-10 pr-4 py-2"})]}),s.jsxs("div",{className:"flex flex-wrap gap-3 items-center",children:[s.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[s.jsx(Vs,{className:"w-4 h-4"}),s.jsx("span",{className:"text-sm font-medium",children:a("specsNavSidebar.filtersLabel")})]}),s.jsxs(I,{value:n,onValueChange:V,children:[s.jsx(L,{className:"w-[140px] h-9",children:s.jsx(z,{placeholder:a("sessionsPage.filters.status")})}),s.jsxs(M,{children:[s.jsx(p,{value:"all",className:"cursor-pointer",children:a("sessionsPage.filters.status")}),xs.map(e=>s.jsx(p,{value:e,className:"cursor-pointer",children:a(`sessions.status.${e}`)},e))]})]}),s.jsxs(I,{value:P,onValueChange:q,children:[s.jsx(L,{className:"w-[140px] h-9",children:s.jsx(z,{placeholder:a("sessionsPage.filters.runner")})}),s.jsxs(M,{children:[s.jsx(p,{value:"all",className:"cursor-pointer",children:a("sessionsPage.filters.runner")}),hs.map(e=>s.jsx(p,{value:e,className:"cursor-pointer",children:s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(ns,{runnerId:e,size:16}),rs(e,a)]})},e))]})]}),s.jsxs(I,{value:k,onValueChange:Q,children:[s.jsx(L,{className:"w-[140px] h-9",children:s.jsx(z,{placeholder:a("sessionsPage.filters.mode")})}),s.jsxs(M,{children:[s.jsx(p,{value:"all",className:"cursor-pointer",children:a("sessionsPage.filters.mode")}),ps.map(e=>s.jsx(p,{value:e,className:"cursor-pointer",children:a(`sessions.modes.${e}`)},e))]})]}),s.jsx("div",{className:"w-[180px]",children:s.jsx(de,{value:C,onValueChange:G,options:[{value:"all",label:a("sessionsPage.filters.spec")},...gs.map(e=>({value:e.id,label:e.label}))],placeholder:a("sessionsPage.filters.spec"),searchPlaceholder:a("sessions.select.search"),emptyText:a("sessions.select.empty")})}),s.jsxs(I,{value:$,onValueChange:e=>ms(e),children:[s.jsx(L,{className:"w-[160px] h-9",children:s.jsx(z,{placeholder:a("sessionsPage.sort.startedDesc")})}),s.jsxs(M,{children:[s.jsx(p,{value:"started-desc",className:"cursor-pointer",children:a("sessionsPage.sort.startedDesc")}),s.jsx(p,{value:"started-asc",className:"cursor-pointer",children:a("sessionsPage.sort.startedAsc")}),s.jsx(p,{value:"duration-desc",className:"cursor-pointer",children:a("sessionsPage.sort.durationDesc")}),s.jsx(p,{value:"status",className:"cursor-pointer",children:a("sessionsPage.sort.status")})]})]}),(v||n!=="all"||P!=="all"||k!=="all"||C!=="all")&&s.jsxs(m,{onClick:()=>{E(""),V("all"),q("all"),Q("all"),G("all")},variant:"ghost",size:"sm",className:"h-9 gap-1",children:[s.jsx(qs,{className:"w-4 h-4"}),a("specsNavSidebar.clearFilters")]}),s.jsx("span",{className:"text-sm text-muted-foreground",children:a("specsPage.filters.filteredCount",{filtered:R.length,total:u.length})})]})]})]}),s.jsx("div",{className:"flex-1 min-h-0",children:u.length===0?s.jsx(ss,{icon:ie,title:a("sessionsPage.state.emptyTitle"),description:a("sessionsPage.state.emptyDescription"),actions:s.jsx(m,{variant:"secondary",size:"sm",onClick:()=>O(!0),children:a("sessions.actions.new")})}):R.length===0?s.jsx(ss,{icon:oe,title:a("sessionsPage.state.noResultsTitle"),description:a("sessionsPage.state.noResultsDescription"),actions:s.jsxs("div",{className:"flex gap-2 flex-wrap justify-center",children:[s.jsx(m,{variant:"outline",size:"sm",onClick:()=>{E(""),V("all"),q("all"),Q("all"),G("all")},children:a("specsNavSidebar.clearFilters")}),s.jsxs(m,{variant:"secondary",size:"sm",onClick:H,children:[s.jsx(ce,{className:"h-4 w-4 mr-2"}),a("sessionsPage.buttons.refresh")]})]})}):s.jsxs("div",{className:"space-y-6",children:[["active","today","yesterday","older"].map(e=>{const o=me(J)[e];return o.length===0?null:s.jsxs("section",{className:"space-y-2",children:[s.jsxs("h3",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:[a(`sessionsPage.groups.${e}`)," (",o.length,")"]}),s.jsx("div",{className:"space-y-2",children:o.map(l=>s.jsx(xe,{session:l,basePath:f,onStop:js,onPause:fs,onResume:bs},l.id))})]},e)}),J.length<R.length&&s.jsx("div",{className:"flex justify-center",children:s.jsx(m,{variant:"outline",size:"sm",onClick:()=>y(e=>e+N),children:a("sessionsPage.buttons.loadMore")})})]})})]}),s.jsx(Qs,{open:us,onOpenChange:O,projectPath:x?.path,onCreated:()=>{H()}})]})}const xe=r.memo(function({session:t,basePath:x,onStop:g,onPause:h,onResume:f}){const{t:i,i18n:j}=Z("common"),b=Gs(),d=Hs[t.status],D=d.icon,u=Xs(t),[w,F]=r.useState(!1),T=t.prompt||t.id.slice(0,8),B=t.status==="running"||t.status==="paused",v=n=>{n.target.closest("button, a")||b(`${x}/sessions/${t.id}`)},A=n=>{n.stopPropagation(),F(S=>!S)};return s.jsx("div",{className:"block border rounded-lg hover:bg-secondary/50 transition-colors bg-background cursor-pointer",onClick:v,children:s.jsxs("div",{className:"flex items-start",children:[s.jsx("div",{className:"w-8 h-full invisible flex items-center text-muted-foreground"}),s.jsxs("div",{className:"flex-1 p-4 pl-0",children:[s.jsxs("div",{className:"flex items-start justify-between gap-4 mb-2",children:[s.jsxs("div",{className:"flex items-start gap-2 min-w-0 pr-4",children:[s.jsx(Zs,{children:s.jsxs(_s,{children:[s.jsx(Js,{asChild:!0,children:s.jsx("span",{className:"flex-shrink-0 mt-0.5",children:s.jsx(ns,{runnerId:t.runner,size:24})})}),s.jsx(Us,{children:rs(t.runner,i)})]})}),s.jsx("div",{children:s.jsx("h3",{className:"font-medium line-clamp-2 leading-relaxed",children:T})})]}),s.jsxs("div",{className:"flex gap-2 items-center flex-shrink-0 flex-wrap justify-end",children:[s.jsxs(es,{variant:"outline",className:_("flex items-center gap-1.5 w-fit border-transparent h-6 px-2 py-0.5 text-xs font-medium",d.className),children:[s.jsx(D,{className:"h-3.5 w-3.5"}),i(`sessions.status.${t.status}`)]}),s.jsx(le,{mode:t.mode})]})]}),s.jsx("div",{className:"mb-3 flex items-center gap-2 flex-wrap",children:!t.specIds||t.specIds.length===0?s.jsx("span",{className:"text-xs text-muted-foreground italic",children:i("sessionsPage.labels.noSpecs","No specs")}):t.specIds.map(n=>s.jsxs(es,{variant:"secondary",className:"flex items-center gap-1 text-xs hover:bg-secondary/80 cursor-pointer",onClick:S=>{S.stopPropagation(),b(`${x}/specs/${n}`)},children:[s.jsx(Ws,{className:"h-3 w-3"}),n]},n))}),s.jsxs("div",{className:"flex items-center justify-between gap-2",children:[s.jsxs("div",{className:"flex items-center gap-4 text-sm text-muted-foreground min-w-0",children:[t.startedAt&&s.jsx("span",{className:"shrink-0 text-xs",children:Ys(t.startedAt,j.language)}),u?s.jsx(Ks,{duration:u}):null,s.jsxs(m,{variant:"ghost",size:"sm",className:"h-6 px-2 text-xs",onClick:A,children:[w?s.jsx(se,{className:"h-3 w-3 mr-1"}):s.jsx(ee,{className:"h-3 w-3 mr-1"}),"Logs"]})]}),B&&s.jsxs("div",{className:"flex gap-2 items-center flex-shrink-0",children:[t.status==="running"&&s.jsxs(s.Fragment,{children:[s.jsxs(m,{size:"sm",variant:"secondary",className:"gap-1 h-6 text-xs px-2",onClick:n=>{n.stopPropagation(),h(t.id)},children:[s.jsx(ae,{className:"h-3 w-3"}),i("sessions.actions.pause")]}),s.jsxs(m,{size:"sm",variant:"destructive",className:"gap-1 h-6 text-xs px-2",onClick:n=>{n.stopPropagation(),g(t.id)},children:[s.jsx(as,{className:"h-3 w-3"}),i("sessions.actions.stop")]})]}),t.status==="paused"&&s.jsxs(s.Fragment,{children:[s.jsxs(m,{size:"sm",variant:"secondary",className:"gap-1 h-6 text-xs px-2",onClick:n=>{n.stopPropagation(),f(t.id)},children:[s.jsx(te,{className:"h-3 w-3"}),i("sessions.actions.resume")]}),s.jsxs(m,{size:"sm",variant:"destructive",className:"gap-1 h-6 text-xs px-2",onClick:n=>{n.stopPropagation(),g(t.id)},children:[s.jsx(as,{className:"h-3 w-3"}),i("sessions.actions.stop")]})]})]})]}),w&&s.jsx("div",{className:"mt-4 border-t pt-4",onClick:n=>n.stopPropagation(),children:s.jsx("div",{className:"h-[300px] overflow-hidden rounded-md border",children:s.jsx(re,{sessionId:t.id,onBack:()=>F(!1)})})})]})]})})});export{be as SessionsPage};
@@ -0,0 +1,3 @@
1
+ import{h as F,j as e,f as M,dZ as is,bB as Ae,bX as _e,cb as os,d_ as ke,cc as cs,cI as ls,cf as ds,d$ as ms,e0 as us,e1 as Re,e2 as ps,e3 as oe,c4 as hs,bU as xs,u as V,r as i,b5 as ce,b6 as le,a as O,aW as ee,b8 as de,b9 as Pe,bn as fs,ba as ze,bb as Fe,bc as Ie,be as se,bf as gs,B as me,br as $e,aP as Be,c7 as L,D as ue,b as pe,c as he,d as xe,b1 as fe,e4 as ge,aX as Ve,aY as qe,cE as Ne,aZ as Ue,a_ as He,a$ as Ke,e5 as Ns,e6 as js,bd as Ce,aS as je,e7 as ys,e8 as vs,e9 as Te,c8 as Qe,bE as bs,L as ws,bY as De,ea as Ss,eb as ks,ec as Cs,bZ as Ts,b$ as Ds,b_ as Es,ed as Os,c0 as Ms,c1 as Ls,ee as As,ef as _s,bg as Rs,bl as Ps,bh as zs,cU as Fs,eg as Is,bi as $s,eh as Bs,cT as Vs,ei as qs,bs as Us,cn as Hs}from"./index-DoWWshr8.js";import{P as Ks}from"./page-transition-dCsDSjnv.js";import{c as Qs,T as Ee,V as Oe,C as Ws,a as Gs,b as Xs}from"./validation-badge-B9E1wcwj.js";import{T as Ys}from"./trending-up-Bp_uZ6i5.js";import{T as Zs,a as Js}from"./table-of-contents-B4pUXfVp.js";import{R as et}from"./refresh-ccw-DGe62KT5.js";import"./token-utils-x_d_uTQu.js";import"./info-RxIWhHbS.js";const st=[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]],tt=F("database",st);const at=[["path",{d:"M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",key:"1gvzjb"}],["path",{d:"M9 18h6",key:"x1upvd"}],["path",{d:"M10 22h4",key:"ceow96"}]],nt=F("lightbulb",at);const rt=[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]],We=F("link-2",rt);const it=[["path",{d:"M14.106 5.553a2 2 0 0 0 1.788 0l3.659-1.83A1 1 0 0 1 21 4.619v12.764a1 1 0 0 1-.553.894l-4.553 2.277a2 2 0 0 1-1.788 0l-4.212-2.106a2 2 0 0 0-1.788 0l-3.659 1.83A1 1 0 0 1 3 19.381V6.618a1 1 0 0 1 .553-.894l4.553-2.277a2 2 0 0 1 1.788 0z",key:"169xi5"}],["path",{d:"M15 5.764v15",key:"1pn4in"}],["path",{d:"M9 3.236v15",key:"1uimfh"}]],ot=F("map",it);const ct=[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"m21 3-7 7",key:"1l2asr"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M9 21H3v-6",key:"wtvkvv"}]],lt=F("maximize-2",ct);const dt=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],mt=F("minimize-2",dt);const ut=[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]],pt=F("rocket",ut);const ht=[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]],xt=F("shield",ht);const ft=[["path",{d:"M21 10.656V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h12.344",key:"2acyp4"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]],gt=F("square-check-big",ft);const Nt=[["path",{d:"M14.5 2v17.5c0 1.4-1.1 2.5-2.5 2.5c-1.4 0-2.5-1.1-2.5-2.5V2",key:"125lnx"}],["path",{d:"M8.5 2h7",key:"csnxdl"}],["path",{d:"M14.5 16h-5",key:"1ox875"}]],jt=F("test-tube",Nt);const yt=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],vt=F("users",yt),Me={created:"Created",inProgress:"In Progress",complete:"Complete",archived:"Archived",awaiting:"Awaiting",queued:"Queued",pending:"Pending"};function bt({createdAt:s,updatedAt:o,completedAt:x,status:p,className:d,labels:m=Me,language:c="en"}){const t={...Me,...m},u=[];return s&&u.push({label:t.created,date:s,isActive:!0,isFuture:!1,icon:_e,color:"text-blue-600"}),p==="in-progress"||p==="complete"||p==="archived"?u.push({label:t.inProgress,date:o||s,isActive:!0,isFuture:!1,icon:os,color:"text-orange-600"}):u.push({label:t.inProgress,date:null,isActive:!1,isFuture:!0,icon:ke,color:"text-muted-foreground"}),p==="complete"||p==="archived"?u.push({label:t.complete,date:x||o,isActive:!0,isFuture:!1,icon:cs,color:"text-green-600"}):u.push({label:t.complete,date:null,isActive:!1,isFuture:!0,icon:ke,color:"text-muted-foreground"}),p==="archived"&&u.push({label:t.archived,date:o,isActive:!0,isFuture:!1,icon:ls,color:"text-gray-600"}),u.length===0?null:e.jsx("div",{className:M("flex items-start gap-2",d),children:u.map((a,j)=>{const n=a.icon,S=j===u.length-1,w=S?null:u[j+1],b=a.date&&w?.date&&!w.isFuture?is(a.date,w.date,c):"";return e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[e.jsxs("div",{className:"flex flex-col items-center gap-1 min-w-0",children:[e.jsx("div",{className:M("w-8 h-8 rounded-full border-2 bg-background flex items-center justify-center shrink-0",a.isActive&&!a.isFuture?"border-primary":"border-muted-foreground/40"),children:n&&e.jsx(n,{className:M("h-4 w-4",a.isActive&&!a.isFuture?"text-primary":"text-muted-foreground/60")})}),e.jsx("div",{className:M("text-xs font-medium text-center whitespace-nowrap",a.isActive&&!a.isFuture?"text-foreground":"text-muted-foreground"),children:a.label}),e.jsxs("div",{className:"text-[10px] text-center min-h-[14px]",children:[a.date&&!a.isFuture&&e.jsx("span",{className:"text-muted-foreground",children:Ae(a.date,c)}),!a.date&&a.isFuture&&e.jsx("span",{className:"text-muted-foreground/70",children:t.awaiting}),a.date&&a.isFuture&&e.jsx("span",{className:"text-muted-foreground/70",children:t.queued}),!a.date&&!a.isFuture&&e.jsx("span",{className:"text-muted-foreground/60",children:t.pending})]})]}),!S&&e.jsxs("div",{className:"flex flex-col items-center flex-1 min-w-4 gap-0.5",children:[e.jsx("div",{className:M("h-0.5 w-full",a.isActive&&!a.isFuture?"bg-primary":"bg-muted-foreground/40")}),b&&e.jsx("div",{className:"text-[10px] text-muted-foreground font-medium whitespace-nowrap",children:b})]})]},j)})})}function wt(){return ds()}const St={NOT_FOUND:"apiCodes.notFound",PROJECT_NOT_FOUND:"apiCodes.projectNotFound",SPEC_NOT_FOUND:"apiCodes.specNotFound",NO_PROJECT:"apiCodes.noProject",INVALID_REQUEST:"apiCodes.invalidRequest",UNAUTHORIZED:"apiCodes.unauthorized",VALIDATION_FAILED:"apiCodes.validationFailed",DATABASE_ERROR:"apiCodes.databaseError",CONFIG_ERROR:"apiCodes.configError",TOOL_NOT_FOUND:"apiCodes.toolNotFound",TOOL_ERROR:"apiCodes.toolError",INTERNAL_ERROR:"apiCodes.internalError"};function kt(s,o){if(s instanceof ms){if(s.code){const x=St[s.code];if(x)return o(x,{ns:"errors",defaultValue:s.message})}switch(s.status){case 404:return o("specNotFound",{ns:"errors"});case 400:return o("invalidInput",{ns:"errors"});case 500:return o("unknownError",{ns:"errors"});default:return o("loadingError",{ns:"errors"})}}return s instanceof Error&&s.message.includes("Failed to fetch")?o("networkError",{ns:"errors"}):s instanceof Error?s.message:o("unknownError",{ns:"errors"})}const Ct=[{keywords:["architecture","system","structure","diagram"],icon:ot,color:"text-indigo-600"},{keywords:["ui","ux","mockup","wireframe","prototype","design"],icon:us,color:"text-purple-600"},{keywords:["implementation","code","develop","build"],icon:Qs,color:"text-green-600"},{keywords:["api","endpoint","integration","interface"],icon:Re,color:"text-blue-600"},{keywords:["test","qa","quality","validation"],icon:jt,color:"text-orange-600"},{keywords:["task","todo","checklist","milestone"],icon:gt,color:"text-slate-600"},{keywords:["config","setup","settings","environment"],icon:ps,color:"text-amber-600"},{keywords:["deploy","devops","ci","cd","pipeline","release"],icon:pt,color:"text-rose-600"},{keywords:["migration","upgrade","refactor","transition"],icon:oe,color:"text-cyan-600"},{keywords:["security","auth","permission","access","encryption"],icon:xt,color:"text-red-600"},{keywords:["performance","optimization","speed","cache","benchmark"],icon:Ys,color:"text-emerald-600"},{keywords:["database","data","schema","model","query"],icon:tt,color:"text-sky-600"},{keywords:["notes","research","findings","considerations","exploration"],icon:nt,color:"text-yellow-600"},{keywords:["doc","guide","manual","reference","readme"],icon:hs,color:"text-gray-500"},{keywords:["github","git","vcs","version"],icon:oe,color:"text-pink-600"}],Tt={icon:xs,color:"text-gray-600"};function Dt(s){const o=s.toLowerCase();for(const x of Ct)if(x.keywords.some(p=>o.includes(p)))return{icon:x.icon,color:x.color};return Tt}function Et(s){return s.replace(/\.md$/i,"").split(/[-_]/).map(o=>o.charAt(0).toUpperCase()+o.slice(1).toLowerCase()).join(" ")}const Ot=s=>s!=null?s.toString().padStart(3,"0"):null;function Z({specs:s,onSelect:o,disabled:x,excludeSpecNames:p=[],placeholder:d,emptyLabel:m}){const{t:c}=V("common"),[t,u]=i.useState(!1),[a,j]=i.useState(""),n=d??c("search.placeholder"),S=m??c("relationships.empty.noSpecs"),w=i.useMemo(()=>new Set(p),[p]),b=i.useMemo(()=>{const h=a.trim().toLowerCase();return s.filter(N=>!w.has(N.specName)).filter(N=>h?[N.title,N.specName,N.specNumber?.toString()].filter(Boolean).join(" ").toLowerCase().includes(h):!0).slice(0,20)},[w,a,s]);return e.jsxs(ce,{open:t,onOpenChange:u,children:[e.jsx(le,{asChild:!0,children:e.jsxs(O,{type:"button",variant:"outline",size:"sm",disabled:x,className:"h-7 px-2 text-xs gap-1",children:[e.jsx(ee,{className:"h-3.5 w-3.5"}),n]})}),e.jsx(de,{className:"w-72 p-0",align:"start",children:e.jsxs(Pe,{children:[e.jsxs("div",{className:"flex items-center px-3 border-b",children:[e.jsx(fs,{className:"h-4 w-4 text-muted-foreground"}),e.jsx(ze,{placeholder:n,value:a,onValueChange:j,className:"border-0 focus:ring-0"})]}),e.jsxs(Fe,{children:[e.jsx(Ie,{children:S}),b.map(h=>{const N=Ot(h.specNumber??null),l=h.title||h.specName;return e.jsx(se,{value:`${N?`#${N}`:""} ${l}`.trim(),onSelect:()=>{o(h),u(!1),j("")},children:e.jsxs("div",{className:"flex items-start gap-2 w-full",children:[e.jsx(gs,{className:M("mt-0.5 h-4 w-4 text-muted-foreground","opacity-0")}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[N&&e.jsxs("span",{className:"text-xs font-mono text-muted-foreground",children:["#",N]}),e.jsx("span",{className:"truncate text-sm font-medium",children:l})]}),e.jsx("div",{className:"text-xs text-muted-foreground truncate",children:h.specName})]})]})},h.specName)})]})]})})]})}const Mt=s=>s!=null?s.toString().padStart(3,"0"):null;function J({title:s,items:o,emptyLabel:x,canEdit:p,onNavigate:d,onRemove:m,actions:c}){return e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsx("h4",{className:"text-xs font-semibold uppercase tracking-wider text-muted-foreground",children:s}),c]}),o.length===0?e.jsx("div",{className:"text-xs text-muted-foreground italic",children:x}):e.jsx("div",{className:"flex flex-wrap gap-2",children:o.map(t=>{const u=Mt(t.specNumber??null),a=t.title||t.specName;return e.jsxs(me,{variant:"secondary",className:M("flex items-center gap-2 px-2 py-1 text-xs"),children:[e.jsxs("button",{type:"button",onClick:()=>d(t.specName),className:"flex items-center gap-1 text-left hover:text-primary",children:[u&&e.jsxs("span",{className:"font-mono text-[10px] text-muted-foreground",children:["#",u]}),e.jsx("span",{className:"max-w-[160px] truncate",children:a})]}),p&&m&&e.jsx(O,{type:"button",variant:"ghost",size:"icon",className:"h-4 w-4 p-0",onClick:()=>m(t.specName),children:e.jsx($e,{className:"h-3 w-3"})})]},t.specName)})})]})}function Lt({spec:s,open:o,onOpenChange:x,basePath:p,disabled:d,onUpdated:m}){const{t:c}=V("common"),t=Be(),[u,a]=i.useState([]),[j,n]=i.useState(!1),S=i.useMemo(()=>new Map(u.map(r=>[r.specName,r])),[u]),w=i.useCallback(async()=>{try{n(!0);const r=await L.getSpecs();a(r)}catch{a([])}finally{n(!1)}},[]);i.useEffect(()=>{o&&w()},[w,o]);const b=i.useCallback(r=>window.confirm(c("relationships.confirmRemove",{label:r})),[c]),h=i.useCallback(r=>{t(`${p}/specs/${r}`),x(!1)},[p,t,x]),N=i.useCallback(async r=>{await r(),m()},[m]),l=i.useCallback(r=>{const T=S.get(r);return T?{specName:T.specName,title:T.title,specNumber:T.specNumber}:{specName:r}},[S]),C=s.parent?l(s.parent):null,D=(s.children||[]).map(l),f=(s.dependsOn||[]).map(l),z=(s.requiredBy||[]).map(l);return e.jsx(ue,{open:o,onOpenChange:x,children:e.jsxs(pe,{className:"w-[min(720px,95vw)] max-w-3xl max-h-[85vh] overflow-y-auto",children:[e.jsxs(he,{children:[e.jsx(xe,{children:c("relationships.title")}),e.jsx(fe,{children:c("relationships.description")})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(Re,{className:"h-4 w-4"}),c("relationships.sections.hierarchy")]}),e.jsx(J,{title:c("relationships.parent"),items:C?[C]:[],emptyLabel:c("relationships.empty.parent"),canEdit:!d,onNavigate:h,onRemove:C&&!d?()=>{b(C.title||C.specName)&&N(()=>L.updateSpec(s.specName,{parent:null}))}:void 0,actions:d?void 0:e.jsx(Z,{specs:u,onSelect:r=>{N(()=>L.updateSpec(s.specName,{parent:r.specName}))},disabled:j||d,excludeSpecNames:[s.specName],placeholder:c("relationships.actions.setParent"),emptyLabel:c("relationships.empty.noSpecs")})}),e.jsx(J,{title:c("relationships.children"),items:D,emptyLabel:c("relationships.empty.children"),canEdit:!d,onNavigate:h,onRemove:d?void 0:r=>{const T=l(r);b(T.title||T.specName)&&N(()=>L.updateSpec(r,{parent:null}))},actions:d?void 0:e.jsx(Z,{specs:u,onSelect:r=>{r.specName!==s.specName&&N(()=>L.updateSpec(r.specName,{parent:s.specName}))},disabled:j||d,excludeSpecNames:[s.specName,...s.children||[]],placeholder:c("relationships.actions.addChild"),emptyLabel:c("relationships.empty.noSpecs")})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-2 text-sm font-semibold",children:[e.jsx(oe,{className:"h-4 w-4"}),c("relationships.sections.dependencies")]}),e.jsx(J,{title:c("relationships.dependsOn"),items:f,emptyLabel:c("relationships.empty.dependsOn"),canEdit:!d,onNavigate:h,onRemove:d?void 0:r=>{const T=l(r);b(T.title||T.specName)&&N(()=>L.updateSpec(s.specName,{removeDependsOn:[r]}))},actions:d?void 0:e.jsx(Z,{specs:u,onSelect:r=>{r.specName!==s.specName&&N(()=>L.updateSpec(s.specName,{addDependsOn:[r.specName]}))},disabled:j||d,excludeSpecNames:[s.specName,...s.dependsOn||[]],placeholder:c("relationships.actions.addDependsOn"),emptyLabel:c("relationships.empty.noSpecs")})}),e.jsx(J,{title:c("relationships.requiredBy"),items:z,emptyLabel:c("relationships.empty.requiredBy"),canEdit:!d,onNavigate:h,onRemove:d?void 0:r=>{const T=l(r);b(T.title||T.specName)&&N(()=>L.updateSpec(r,{removeDependsOn:[s.specName]}))},actions:d?void 0:e.jsx(Z,{specs:u,onSelect:r=>{r.specName!==s.specName&&N(()=>L.updateSpec(r.specName,{addDependsOn:[s.specName]}))},disabled:j||d,excludeSpecNames:[s.specName,...s.requiredBy||[]],placeholder:c("relationships.actions.addRequiredBy"),emptyLabel:c("relationships.empty.noSpecs")})})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 border-t pt-4",children:[e.jsxs(O,{variant:"outline",size:"sm",type:"button",onClick:()=>t(`${p}/specs?view=board&groupByParent=1`),className:"gap-2",children:[e.jsx(vt,{className:"h-4 w-4"}),c("relationships.actions.viewHierarchy")]}),e.jsxs(O,{variant:"outline",size:"sm",type:"button",onClick:()=>t(`${p}/dependencies?spec=${s.specNumber||s.id}`),className:"gap-2",children:[e.jsx(We,{className:"h-4 w-4"}),c("relationships.actions.viewDependencies")]})]})]})]})})}const re=Object.entries(Ns).map(([s,o])=>({value:s,labelKey:o.labelKey,className:o.className,Icon:o.icon}));function At({specName:s,value:o,onChange:x,expectedContentHash:p,disabled:d=!1,className:m}){const c=o||"planned",[t,u]=i.useState(c),[a,j]=i.useState(!1),[n,S]=i.useState(null),[w,b]=i.useState(null),{t:h}=V("common"),N=ge();i.useEffect(()=>{u(o||"planned"),j(!1),S(null)},[o,s]);const l=re.find(f=>f.value===t)||re[0],C=async(f,z=!1)=>{if(f===t)return;const r=t;u(f),j(!0),S(null);try{await L.updateSpec(s,{status:f,expectedContentHash:p,force:z}),x?.(f),N()}catch(T){u(r);const I=T instanceof Error?T.message:h("editors.statusError");S(I)}finally{j(!1)}},D=f=>{if(f!==t){if(t==="draft"&&(f==="in-progress"||f==="complete")){b(f);return}C(f)}};return e.jsxs("div",{className:"space-y-1",children:[e.jsxs(Ve,{value:t,onValueChange:f=>D(f),disabled:d||a,children:[e.jsx(qe,{className:M("h-7 w-fit min-w-0 sm:min-w-[120px] border-0 px-2 text-xs font-medium justify-center sm:justify-start",l.className,m,a&&"opacity-70"),"aria-label":h("editors.changeStatus"),children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[a?e.jsx(Ne,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(l.Icon,{className:"h-3.5 w-3.5"}),e.jsx(Ue,{placeholder:h("specsPage.filters.status"),children:e.jsx("span",{className:"hidden sm:inline",children:h(l.labelKey)})})]})}),e.jsx(He,{children:re.map(f=>e.jsx(Ke,{value:f.value,className:"flex items-center gap-2",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(f.Icon,{className:"h-4 w-4"}),e.jsx("span",{children:h(f.labelKey)})]})},f.value))})]}),n&&e.jsx("p",{className:"text-xs text-destructive",children:n}),e.jsx(ue,{open:w!==null,onOpenChange:f=>!f&&b(null),children:e.jsxs(pe,{children:[e.jsxs(he,{children:[e.jsx(xe,{children:h("editors.draftSkipTitle")}),e.jsx(fe,{children:h("editors.draftSkipDescription")})]}),e.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[e.jsx(O,{type:"button",variant:"outline",size:"sm",onClick:()=>{b(null),C("planned")},children:h("editors.draftSkipPlanned")}),e.jsx(O,{type:"button",size:"sm",onClick:()=>{if(!w)return;const f=w;b(null),C(f,!0)},children:h("editors.draftSkipForce")})]})]})})]})}const ie=Object.entries(js).map(([s,o])=>({value:s,labelKey:o.labelKey,className:o.className,Icon:o.icon}));function _t({specName:s,value:o,onChange:x,expectedContentHash:p,disabled:d=!1,className:m}){const c=o||"medium",[t,u]=i.useState(c),[a,j]=i.useState(!1),[n,S]=i.useState(null),{t:w}=V("common"),b=ge();i.useEffect(()=>{u(o||"medium"),j(!1),S(null)},[o,s]);const h=ie.find(l=>l.value===t)||ie[1],N=async l=>{if(l===t)return;const C=t;u(l),j(!0),S(null);try{await L.updateSpec(s,{priority:l,expectedContentHash:p}),x?.(l),b()}catch(D){u(C);const f=D instanceof Error?D.message:w("editors.priorityError");S(f)}finally{j(!1)}};return e.jsxs("div",{className:"space-y-1",children:[e.jsxs(Ve,{value:t,onValueChange:l=>N(l),disabled:d||a,children:[e.jsx(qe,{className:M("h-7 w-fit min-w-0 sm:min-w-[100px] border-0 px-2 text-xs font-medium justify-center sm:justify-start",h.className,m,a&&"opacity-70"),"aria-label":w("editors.changePriority"),children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[a?e.jsx(Ne,{className:"h-3.5 w-3.5 animate-spin"}):e.jsx(h.Icon,{className:"h-3.5 w-3.5"}),e.jsx(Ue,{placeholder:w("specsPage.filters.priority"),children:e.jsx("span",{className:"hidden sm:inline",children:w(h.labelKey)})})]})}),e.jsx(He,{children:ie.map(l=>e.jsx(Ke,{value:l.value,className:"flex items-center gap-2",children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(l.Icon,{className:"h-4 w-4"}),e.jsx("span",{children:w(l.labelKey)})]})},l.value))})]}),n&&e.jsx("p",{className:"text-xs text-destructive",children:n})]})}function Rt({specName:s,value:o,onChange:x,expectedContentHash:p,disabled:d=!1,className:m,compact:c=!1}){const[t,u]=i.useState(o||[]),[a,j]=i.useState([]),[n,S]=i.useState(!1),[w,b]=i.useState(null),[h,N]=i.useState(!1),[l,C]=i.useState(""),{t:D}=V("common"),f=ge();i.useEffect(()=>{h&&a.length===0&&(async()=>{try{const E=await L.getSpecs(),R=new Set;E.forEach(H=>H.tags?.forEach(G=>R.add(G))),j(Array.from(R).sort())}catch(E){console.error("Failed to fetch tags:",E)}})()},[h,a.length]);const z=async k=>{const E=t;u(k),S(!0),b(null);try{await L.updateSpec(s,{tags:k,expectedContentHash:p}),x?.(k),f()}catch(R){u(E);const H=R instanceof Error?R.message:D("editors.tagsError");b(H)}finally{S(!1)}},r=k=>{const E=k.trim();if(!E)return;if(t.includes(E)){b(D("editors.tagExists"));return}const R=[...t,E];z(R),C(""),N(!1)},T=k=>{const E=t.filter(R=>R!==k);z(E)},I=i.useMemo(()=>{const k=l.toLowerCase();return a.filter(E=>!t.includes(E)).filter(E=>!k||E.toLowerCase().includes(k))},[a,t,l]),A=l.trim()&&!t.includes(l.trim())&&!a.includes(l.trim()),q=3,Q=c&&t.length>q?t.slice(0,q):t,U=t.length-Q.length,W=k=>e.jsxs(me,{variant:"outline",className:M("text-xs pr-1 gap-1",d&&"opacity-50"),children:[k,!d&&e.jsx("button",{onClick:()=>T(k),disabled:n,className:"ml-1 rounded-full hover:bg-muted p-0.5 transition-colors","aria-label":D("editors.removeTag",{tag:k}),children:e.jsx($e,{className:"h-3 w-3"})})]},k);return e.jsx("div",{className:M("relative",m),children:e.jsxs("div",{className:"flex gap-1 flex-wrap items-center",children:[Q.map(W),U>0&&e.jsxs(ce,{children:[e.jsx(le,{asChild:!0,children:e.jsxs(me,{variant:"outline",className:"cursor-pointer hover:bg-muted h-6 px-2 text-xs",children:["+",U]})}),e.jsx(de,{className:"w-64 p-2",align:"start",children:e.jsx("div",{className:"flex flex-wrap gap-1",children:t.map(W)})})]}),!d&&e.jsxs(ce,{open:h,onOpenChange:N,children:[e.jsx(le,{asChild:!0,children:e.jsx(O,{variant:"outline",size:"sm",className:"h-6 px-2 text-xs",disabled:n,"aria-label":D("editors.addTag"),children:n?e.jsx(Ne,{className:"h-3 w-3 animate-spin"}):e.jsx(ee,{className:"h-3 w-3"})})}),e.jsxs(de,{className:"w-56 p-0",align:"start",children:[e.jsxs(Pe,{children:[e.jsx(ze,{placeholder:D("editors.searchTag"),value:l,onValueChange:C}),e.jsxs(Fe,{children:[e.jsx(Ie,{children:A?e.jsxs(se,{onSelect:()=>r(l),className:"cursor-pointer",children:[e.jsx(ee,{className:"mr-2 h-4 w-4"}),D("editors.createTag",{tag:l.trim()})]}):e.jsx("span",{className:"text-muted-foreground px-2 py-1.5 text-sm",children:D("editors.noTagResults")})}),I.length>0&&e.jsx(Ce,{heading:D("editors.existingTags"),children:I.slice(0,10).map(k=>e.jsx(se,{value:k,onSelect:()=>r(k),className:"cursor-pointer",children:k},k))}),A&&I.length>0&&e.jsx(Ce,{heading:D("editors.createSection"),children:e.jsxs(se,{onSelect:()=>r(l),className:"cursor-pointer",children:[e.jsx(ee,{className:"mr-2 h-4 w-4"}),D("editors.createTag",{tag:l.trim()})]})})]})]}),w&&e.jsx("p",{className:"text-xs text-destructive px-2 pb-2",children:w})]})]})]})})}function Pt({spec:s,basePath:o,displayTitle:x,tags:p,updatedRelative:d,isFocusMode:m,setIsFocusMode:c,headerRef:t,machineModeEnabled:u,isMachineAvailable:a,applySpecPatch:j,onOpenTimeline:n,onOpenRelationships:S,onOpenSessions:w,onOpenMobile:b,timelineDialogOpen:h,setTimelineDialogOpen:N,currentTokenCount:l,currentValidationStatus:C,asyncMetadata:D,onOpenTokenDialog:f,onOpenValidationDialog:z,t:r,i18n:T}){const I=l!==void 0||C!==void 0;return e.jsx("header",{ref:t,className:"lg:sticky lg:top-0 lg:z-20 border-b bg-card",children:e.jsx(je,{padding:"none",contentClassName:M("px-4 sm:px-6 lg:px-8",m?"py-1.5":"py-2 sm:py-3"),children:m?e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsxs("h1",{className:"text-base font-semibold tracking-tight truncate",children:[s.specNumber&&e.jsxs("span",{className:"text-muted-foreground",children:["#",s.specNumber," "]}),x]}),e.jsx(ys,{status:s.status||"planned"}),e.jsx(vs,{priority:s.priority||"medium"}),s.children&&s.children.length>0&&e.jsx(Te,{count:s.children.length}),e.jsx(Ee,{count:l,size:"sm",onClick:f}),e.jsx(Oe,{status:C,errorCount:D.validationErrors,size:"sm",onClick:z})]}),e.jsx(O,{type:"button",variant:"ghost",size:"sm",onClick:()=>c(!1),className:"h-7 px-2 text-xs text-muted-foreground hover:text-foreground shrink-0",title:r("specDetail.buttons.exitFocus"),children:e.jsx(mt,{className:"h-4 w-4"})})]}):e.jsxs(e.Fragment,{children:[s.parent&&e.jsxs("div",{className:"flex items-center gap-1.5 text-xs text-muted-foreground mb-3",children:[e.jsxs(Qe,{to:`${o}/specs/${s.parent}`,className:"hover:text-primary hover:underline flex items-center gap-1 group",children:[e.jsx(Ws,{className:"h-3 w-3 group-hover:text-primary"}),e.jsx("span",{className:"font-medium",children:s.parent})]}),e.jsx(bs,{className:"h-3 w-3 opacity-50"}),e.jsx("span",{className:"truncate opacity-70",children:x})]}),e.jsxs("div",{className:"flex items-center gap-2 mb-1.5 sm:mb-2",children:[s.children&&s.children.length>0&&e.jsx(Te,{iconOnly:!0}),e.jsxs("h1",{className:"text-lg sm:text-xl font-bold tracking-tight",children:[s.specNumber&&e.jsxs("span",{className:"text-muted-foreground",children:["#",s.specNumber," "]}),x]}),e.jsxs(O,{variant:"ghost",size:"icon",className:"lg:hidden h-8 w-8 -mr-2 shrink-0 text-muted-foreground",onClick:b,children:[e.jsx(ws,{className:"h-5 w-5"}),e.jsx("span",{className:"sr-only",children:r("specDetail.toggleSidebar")})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(At,{specName:s.specName,value:s.status,expectedContentHash:s.contentHash,disabled:u&&!a(),onChange:A=>j({status:A})}),e.jsx(_t,{specName:s.specName,value:s.priority,expectedContentHash:s.contentHash,disabled:u&&!a(),onChange:A=>j({priority:A})}),I&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Ee,{count:l,size:"md",onClick:f}),e.jsx(Oe,{status:C,errorCount:D.validationErrors,size:"md",onClick:z})]})]}),e.jsx("div",{className:"h-4 w-px bg-border mx-1 hidden sm:block"}),e.jsx(Rt,{specName:s.specName,value:p,expectedContentHash:s.contentHash,disabled:u&&!a(),onChange:A=>j({tags:A}),compact:!0,className:"min-w-0"})]}),u&&!a()&&e.jsx("div",{className:"text-xs text-destructive mt-2",children:r("machines.unavailable")}),e.jsxs("div",{className:"flex flex-wrap gap-2 sm:gap-4 text-xs text-muted-foreground mt-1.5 sm:mt-2",children:[e.jsxs("span",{className:"hidden sm:inline",children:[r("specDetail.metadata.created"),": ",De(s.createdAt,T.language)]}),e.jsx("span",{className:"hidden sm:inline",children:"•"}),e.jsxs("span",{children:[r("specDetail.metadata.updated"),": ",De(s.updatedAt,T.language),d&&e.jsxs("span",{className:"ml-1 text-[11px] text-muted-foreground/80",children:["(",d,")"]})]}),e.jsx("span",{className:"hidden sm:inline",children:"•"}),e.jsxs("span",{className:"hidden md:inline",children:[r("specDetail.metadata.name"),": ",s.specName]}),s.metadata?.assignee?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"hidden sm:inline",children:"•"}),e.jsxs("span",{className:"hidden sm:inline",children:[r("specDetail.metadata.assignee"),": ",String(s.metadata.assignee)]})]}):null]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mt-2",children:[e.jsxs(ue,{open:h,onOpenChange:N,children:[e.jsxs(O,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog","aria-expanded":h,onClick:n,className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx(_e,{className:"mr-1.5 h-3.5 w-3.5"}),r("specDetail.buttons.viewTimeline")]}),e.jsxs(pe,{className:"w-[min(900px,90vw)] max-w-3xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(he,{children:[e.jsx(xe,{children:r("specDetail.dialogs.timelineTitle")}),e.jsx(fe,{children:r("specDetail.dialogs.timelineDescription")})]}),e.jsx("div",{className:"rounded-xl border border-border bg-muted/30 p-4",children:e.jsx(bt,{createdAt:s.createdAt,updatedAt:s.updatedAt,completedAt:s.completedAt,status:s.status||"planned",labels:{created:r("specTimeline.events.created"),inProgress:r("specTimeline.events.inProgress"),complete:r("specTimeline.events.complete"),archived:r("specTimeline.events.archived"),awaiting:r("specTimeline.state.awaiting"),queued:r("specTimeline.state.queued"),pending:r("specTimeline.state.pending")},language:T.language})})]})]}),e.jsxs(O,{type:"button",variant:"outline",size:"sm","aria-haspopup":"dialog",onClick:S,className:M("h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground"),children:[e.jsx(We,{className:"mr-1.5 h-3.5 w-3.5"}),r("relationships.button")]}),e.jsxs(O,{type:"button",variant:"outline",size:"sm",onClick:w,className:"h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",children:[e.jsx(Ss,{className:"mr-1.5 h-3.5 w-3.5"}),r("navigation.sessions")]}),e.jsxs(O,{type:"button",variant:"outline",size:"sm",onClick:()=>c(!0),className:"hidden lg:inline-flex h-8 rounded-full border px-3 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground",title:r("specDetail.buttons.focus"),children:[e.jsx(lt,{className:"mr-1.5 h-3.5 w-3.5"}),r("specDetail.buttons.focus")]})]})]})})})}function zt({subSpecs:s,currentSubSpec:o,onSwitch:x,t:p}){return s.length===0?null:e.jsx("div",{className:"border-t bg-muted/30",children:e.jsx(je,{padding:"none",contentClassName:"px-4 sm:px-6 lg:px-8 overflow-x-auto",children:e.jsxs("div",{className:"flex gap-1 py-2 min-w-max",children:[e.jsxs("button",{onClick:()=>x(null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${o?"text-muted-foreground hover:text-foreground hover:bg-muted/50":"bg-background text-foreground shadow-sm"}`,children:[e.jsx(ks,{className:"h-4 w-4"}),e.jsx("span",{className:"hidden sm:inline",children:p("specDetail.tabs.overview")})]}),s.map(d=>{const m=d.icon;return e.jsxs("button",{onClick:()=>x(d.file??null),className:`flex items-center gap-2 px-3 sm:px-4 py-2 text-xs sm:text-sm font-medium rounded-md whitespace-nowrap transition-colors ${o===d.file?"bg-background text-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted/50"}`,children:[e.jsx(m,{className:`h-4 w-4 ${d.color}`}),e.jsx("span",{className:"hidden sm:inline",children:d.name})]},d.file)})]})})})}function Ft({content:s,specName:o="",basePath:x="",onChecklistToggle:p}){const d=Cs(o,x,p);return e.jsx("article",{className:"prose prose-sm sm:prose-base dark:prose-invert max-w-none",children:e.jsx(Ts,{remarkPlugins:[Ms,Ls,As],rehypePlugins:[Ds,Es,Os],components:d,children:s})})}function It({displayContent:s,specName:o,basePath:x,hasSubSpecs:p,onChecklistToggle:d}){const[m,c]=i.useState(()=>typeof window<"u"?window.innerWidth>=1024:!0),t=i.useRef(null),u=i.useCallback(a=>{t.current&&(t.current.disconnect(),t.current=null),a&&(c(a.clientWidth>=1024),t.current=new ResizeObserver(j=>{for(const n of j)c(n.contentRect.width>=1024)}),t.current.observe(a))},[]);return i.useEffect(()=>()=>{t.current&&t.current.disconnect()},[]),e.jsxs(e.Fragment,{children:[e.jsx(je,{padding:"none",contentClassName:M("flex flex-col w-full",m?"lg:flex-row items-start":""),children:e.jsxs("div",{ref:u,className:"flex w-full",children:[e.jsx("main",{className:"flex-1 px-4 sm:px-6 lg:px-8 py-3 sm:py-6 min-w-0",children:e.jsx(Ft,{content:s,specName:o,basePath:x,onChecklistToggle:d})}),e.jsx("aside",{className:M("w-72 shrink-0 px-6 py-6 sticky overflow-y-auto scrollbar-auto-hide",m?"block":"hidden",p?"top-[calc(16.375rem-3.5rem)] h-[calc(100vh-16.375rem)]":"top-[calc(13.125rem-3.5rem)] h-[calc(100vh-13.125rem)]"),children:e.jsx(Zs,{content:s})})]})}),e.jsx("div",{className:m?"hidden":"block",children:e.jsx(Js,{content:s})}),e.jsx(_s,{targetId:"spec-detail-main"})]})}function Le(s,o,x){const p=s.split(`
2
+ `),d=o.trim().toLowerCase();for(let m=0;m<p.length;m++){const c=p[m],t=c.trim().toLowerCase();if((t.startsWith("- [ ]")||t.startsWith("- [x]"))&&t.includes(d)){p[m]=x?c.replace(/- \[[ ]\]/,"- [x]"):c.replace(/- \[[xX]\]/,"- [ ]");break}}return p.join(`
3
+ `)}function Gt(){const{specName:s,projectId:o}=Rs(),[x]=Ps(),p=Be(),{currentProject:d}=zs(),m=o??d?.id,c=m?`/projects/${m}`:"/projects",{machineModeEnabled:t,isMachineAvailable:u}=Fs(),{t:a,i18n:j}=V(["common","errors"]),[n,S]=i.useState(null),[w,b]=i.useState(!0),[h,N]=i.useState(null),l=x.get("subspec"),C=i.useRef(null),[D,f]=i.useState(!1),[z,r]=i.useState(!1),[T,I]=i.useState(!1),[A,q]=i.useState(!1),[Q,U]=i.useState(!1),[W,k]=i.useState(null),[E,R]=i.useState(!1),[H,G]=i.useState(!1),[Ge,te]=i.useState(null),[ae,ne]=i.useState({}),{setMobileOpen:ye}=wt(),{openDrawer:Xe}=Is(),X=$s(m??null).data??[],_=Bs(m??null,s??null),B=Vs(),ve=i.useCallback(g=>kt(g,a),[a]),be=i.useCallback(async()=>{b(!0),await _.refetch()},[_]);i.useEffect(()=>{if(!n?.specName||!m)return;ne({});const g=n.specName;(async()=>{try{const y=await B.getSpecTokens(m,g);ne(v=>({...v,tokenCount:y.tokenCount,tokenStatus:y.tokenStatus}))}catch(y){console.debug("Failed to async fetch tokens",y)}})(),(async()=>{try{const y=await B.getSpecValidation(m,g);ne(v=>({...v,validationStatus:y.status,validationErrors:y.errors.length}))}catch(y){console.debug("Failed to async fetch validation",y)}})()},[B,m,n?.specName]),i.useEffect(()=>{_.data&&(S(_.data),N(null),b(!1))},[_.data]),i.useEffect(()=>{_.error&&(N(ve(_.error)),b(!1))},[ve,_.error]),i.useEffect(()=>{_.isLoading&&b(!0)},[_.isLoading,s,m]),i.useEffect(()=>{!A||!m||!n?.specName||(U(!0),B.getSpecTokens(m,n.specName).then(g=>k(g)).catch(()=>k(null)).finally(()=>U(!1)))},[B,m,n?.specName,A]),i.useEffect(()=>{!E||!m||!n?.specName||(G(!0),B.getSpecValidation(m,n.specName).then(g=>te(g)).catch(()=>te(null)).finally(()=>G(!1)))},[B,m,n?.specName,E]);const Ye=i.useMemo(()=>n?.specName?X.filter(g=>(g.specIds?.includes(n.specName)??!1)&&(g.status==="running"||g.status==="pending")).length:0,[X,n?.specName]),Ze=i.useMemo(()=>n?.specName?X.filter(g=>g.specIds?.includes(n.specName)??!1).length:0,[X,n?.specName]),Y=i.useMemo(()=>{const g=n?.subSpecs??n?.metadata?.sub_specs;return Array.isArray(g)?g.map(y=>{if(!y||typeof y!="object")return null;const v=y,$=typeof v.content=="string"?v.content:typeof v.contentMd=="string"?v.contentMd:null;if(typeof $!="string")return null;const P=typeof v.filename=="string"?v.filename:typeof v.file=="string"?v.file:typeof v.name=="string"?v.name:"",K=Dt(P);return{name:Et(P),content:$,file:P,icon:K.icon,color:K.color}}).filter(Boolean):[]},[n]),Je=g=>{S(y=>y&&{...y,...g})},es=i.useCallback(async(g,y)=>{if(n?.specName){S(l?v=>{if(!v||!v.subSpecs)return v;const $=v.subSpecs.map(P=>{if(P.file===l){const K=Le(P.content||P.contentMd||"",g,y);return{...P,content:K,contentMd:K}}return P});return{...v,subSpecs:$}}:v=>{if(!v)return v;const $=Le(v.contentMd||"",g,y);return{...v,contentMd:$}});try{await L.toggleSpecChecklist(n.specName,[{itemText:g,checked:y}],{subspec:l||void 0}),_.refetch()}catch(v){console.error("Failed to toggle checklist item:",v),_.refetch()}}},[n?.specName,l,_]),ss=g=>{const y=g?`${c}/specs/${s}?subspec=${g}`:`${c}/specs/${s}`;p(y)};let we=n?.content||n?.contentMd||"";if(l&&n&&Y.length>0){const g=Y.find(y=>y.file===l);g&&(we=g.content??g.contentMd??"")}const ts=n?.title||n?.specName||"",Se=i.useMemo(()=>n?.tags||[],[n?.tags]),as=n?.updatedAt?Ae(n.updatedAt,j.language):null,ns=ae.tokenCount??n?.tokenCount,rs=ae.validationStatus??n?.validationStatus;return i.useEffect(()=>{const g=()=>{let $=0;window.innerWidth>=1024&&C.current&&($+=C.current.offsetHeight-56);const P=document.querySelector("#spec-detail-main");P&&(P.style.scrollPaddingTop=`${$}px`)};g(),window.addEventListener("resize",g);const y=new ResizeObserver(g);return C.current&&y.observe(C.current),()=>{window.removeEventListener("resize",g),y.disconnect(),document.documentElement.style.scrollPaddingTop=""}},[n,Se]),w?e.jsx(qs,{}):h||!n?e.jsx(Us,{icon:Hs,title:a("specDetail.state.unavailableTitle"),description:h||a("specDetail.state.unavailableDescription"),tone:"error",actions:e.jsxs(e.Fragment,{children:[e.jsx(Qe,{to:`${c}/specs`,className:"inline-flex",children:e.jsx(O,{variant:"outline",size:"sm",className:"gap-2",children:a("specDetail.links.backToSpecs")})}),e.jsxs(O,{variant:"secondary",size:"sm",className:"gap-2",onClick:()=>{be()},children:[e.jsx(et,{className:"h-4 w-4"}),a("actions.retry")]}),e.jsx("a",{href:"https://github.com/codervisor/lean-spec/issues",target:"_blank",rel:"noreferrer",className:"inline-flex",children:e.jsx(O,{variant:"ghost",size:"sm",className:"gap-2",children:a("specDetail.links.reportIssue")})})]})}):e.jsxs(Ks,{className:"flex-1 min-w-0",children:[e.jsxs("div",{id:"spec-detail-main",className:"overflow-y-auto h-[calc(100vh-3.5rem)]",children:[e.jsxs("div",{className:"lg:hidden sticky top-0 z-20 flex items-center justify-between bg-background/95 backdrop-blur border-b px-3 py-2",children:[e.jsx("span",{className:"text-sm font-semibold",children:a("specsNavSidebar.title")}),e.jsx(O,{size:"sm",variant:"outline",onClick:()=>ye(!0),children:a("actions.openSidebar")})]}),e.jsx(Pt,{spec:n,basePath:c,displayTitle:ts,tags:Se,updatedRelative:as,isFocusMode:T,setIsFocusMode:I,headerRef:C,machineModeEnabled:t,isMachineAvailable:u,applySpecPatch:Je,onOpenTimeline:()=>f(!0),onOpenRelationships:()=>r(!0),onOpenSessions:()=>Xe(n.specName),onOpenMobile:()=>ye(!0),timelineDialogOpen:D,setTimelineDialogOpen:f,activeSessionsCount:Ye,totalSessionsCount:Ze,currentTokenCount:ns,currentValidationStatus:rs,asyncMetadata:ae,onOpenTokenDialog:()=>{m&&q(!0)},onOpenValidationDialog:()=>{m&&R(!0)},t:a,i18n:j}),e.jsx(zt,{subSpecs:Y,currentSubSpec:l,onSwitch:ss,t:a}),e.jsx(It,{displayContent:we,specName:s,basePath:c,hasSubSpecs:Y.length>0,onChecklistToggle:es})]}),n&&e.jsx(Lt,{spec:n,open:z,onOpenChange:r,basePath:c,disabled:t&&!u(),onUpdated:()=>{be()}}),n?.specName&&A&&e.jsx(Gs,{open:A,onClose:()=>{q(!1),k(null)},specName:n.specName,data:W,loading:Q}),n?.specName&&E&&e.jsx(Xs,{open:E,onClose:()=>{R(!1),te(null)},specName:n.specName,data:Ge,loading:H})]})}export{Gt as SpecDetailPage};
@@ -0,0 +1 @@
1
+ @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2) format("woff2"),url(/assets/KaTeX_AMS-Regular-DMm9YOAa.woff) format("woff"),url(/assets/KaTeX_AMS-Regular-DRggAlZN.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2) format("woff2"),url(/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff) format("woff"),url(/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff) format("woff"),url(/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2) format("woff2"),url(/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff) format("woff"),url(/assets/KaTeX_Fraktur-Regular-CB_wures.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2) format("woff2"),url(/assets/KaTeX_Main-Bold-Jm3AIy58.woff) format("woff"),url(/assets/KaTeX_Main-Bold-waoOVXN0.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2) format("woff2"),url(/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff) format("woff"),url(/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2) format("woff2"),url(/assets/KaTeX_Main-Italic-BMLOBm91.woff) format("woff"),url(/assets/KaTeX_Main-Italic-3WenGoN9.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2) format("woff2"),url(/assets/KaTeX_Main-Regular-Dr94JaBh.woff) format("woff"),url(/assets/KaTeX_Main-Regular-ypZvNtVU.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2) format("woff2"),url(/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff) format("woff"),url(/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2) format("woff2"),url(/assets/KaTeX_Math-Italic-DA0__PXp.woff) format("woff"),url(/assets/KaTeX_Math-Italic-flOr_0UB.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff) format("woff"),url(/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff) format("woff"),url(/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2) format("woff2"),url(/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff) format("woff"),url(/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2) format("woff2"),url(/assets/KaTeX_Script-Regular-D5yQViql.woff) format("woff"),url(/assets/KaTeX_Script-Regular-C5JkGWo-.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2) format("woff2"),url(/assets/KaTeX_Size1-Regular-C195tn64.woff) format("woff"),url(/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2) format("woff2"),url(/assets/KaTeX_Size2-Regular-oD1tc_U0.woff) format("woff"),url(/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4lyI/R6K/YK0110GzudPRW7Y+UOBGTfNNzHeYT0fiH0taunBpq9HEW8OKSaBGj21L0MqenEmNRWBAWDWAk4CpNoEZJ2tTaPFgbQYj8HxtFilErs3BTRwT8uO1NXQaWfIotchmPkAF5mMBAliEmZiOGVgCG9LgRzpscMAOOwowlT3JhusdazXGSC/hxR3UlmWVwWHpOIKheqONvjyhSiTHIkVUco5bnji8m//zL7PKaT1Vl5I6UE609f+gkr6MZKVyKc7zJRmCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC) format("woff2"),url(/assets/KaTeX_Size3-Regular-CTq5MqoE.woff) format("woff"),url(/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2) format("woff2"),url(/assets/KaTeX_Size4-Regular-BF-4gkZK.woff) format("woff"),url(/assets/KaTeX_Size4-Regular-DWFBv043.ttf) format("truetype")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2) format("woff2"),url(/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff) format("woff"),url(/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf) format("truetype")}.katex{font: 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:"0.16.33"}.katex .katex-mathml{clip:rect(1px,1px,1px,1px);border:0;height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:""}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}
@@ -0,0 +1 @@
1
+ import{h as Xe,r,u as xe,j as e,cI as Oe,cc as Ye,cb as Je,bX as es,bU as ss,f as A,c8 as ge,ca as fe,bW as ts,bD as J,bE as $e,cJ as hs,c9 as as,cK as xs,cL as gs,bn as fs,b0 as Ns,br as Ge,bo as bs,b5 as Se,b6 as De,a as q,b8 as Me,bf as Pe,cM as js,cN as ys,cO as vs,aT as rs,aX as ws,aY as ks,aZ as Cs,a_ as Ss,a$ as Y,cE as Ds,cP as Ms,cQ as Ps,c5 as Ts,cR as Ls,cS as Te,cn as As,L as Is,cT as Os,bg as Es,bh as Vs,cU as Bs,cV as $s,cW as Hs,cX as Le,cY as qs,bl as zs,cZ as _s,c_ as Ks,c7 as Ue,aS as Ae,c$ as Rs,C as Fs,l as Qs,bm as Gs,bs as Ze,D as Us,b as Zs,c as Ws,d as Xs,b1 as Ys}from"./index-DoWWshr8.js";import{C as Js,T as Ne,V as be,a as et,b as st}from"./validation-badge-B9E1wcwj.js";import{F as tt,a as at}from"./funnel-x-BvY4n8AU.js";import{R as We}from"./refresh-ccw-DGe62KT5.js";import"./token-utils-x_d_uTQu.js";import"./info-RxIWhHbS.js";const rt=[["path",{d:"M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"hod4my"}],["path",{d:"M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",key:"w4yl2u"}],["path",{d:"M3 5a2 2 0 0 0 2 2h3",key:"f2jnh7"}],["path",{d:"M3 3v13a2 2 0 0 0 2 2h3",key:"k8epm1"}]],ee=Xe("folder-tree",rt);const nt=[["rect",{width:"7",height:"7",x:"3",y:"3",rx:"1",key:"1g98yp"}],["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["rect",{width:"7",height:"7",x:"14",y:"14",rx:"1",key:"nxv5o0"}],["rect",{width:"7",height:"7",x:"3",y:"14",rx:"1",key:"1bb6yr"}]],ot=Xe("layout-grid",nt),it=3,Ee={draft:{icon:ss,titleKey:"status.draft",colorClass:"text-slate-600 dark:text-slate-300",bgClass:"bg-slate-50 dark:bg-slate-900/20",borderClass:"border-slate-200 dark:border-slate-800"},planned:{icon:es,titleKey:"status.planned",colorClass:"text-blue-600 dark:text-blue-400",bgClass:"bg-blue-50 dark:bg-blue-900/20",borderClass:"border-blue-200 dark:border-blue-800"},"in-progress":{icon:Je,titleKey:"status.inProgress",colorClass:"text-orange-600 dark:text-orange-400",bgClass:"bg-orange-50 dark:bg-orange-900/20",borderClass:"border-orange-200 dark:border-orange-800"},complete:{icon:Ye,titleKey:"status.complete",colorClass:"text-green-600 dark:text-green-400",bgClass:"bg-green-50 dark:bg-green-900/20",borderClass:"border-green-200 dark:border-green-800"},archived:{icon:Oe,titleKey:"status.archived",colorClass:"text-gray-600 dark:text-gray-400",bgClass:"bg-gray-50 dark:bg-gray-900/20",borderClass:"border-gray-200 dark:border-gray-800"}};function Ve({spec:n,basePath:s,canEdit:m=!0,draggingId:o,onDragStart:a,onDragEnd:x,onTokenClick:c,onValidationClick:l,onPriorityChange:N,childCount:j,isExpanded:M,onToggle:h}){const T=j!==void 0&&h!==void 0;return e.jsxs("div",{className:A("bg-background rounded-xl border border-primary/20 shadow-sm relative overflow-hidden group/parent hover:border-primary/50 hover:shadow-md transition-all",o===n.specName&&"opacity-50",m?"cursor-move":"cursor-not-allowed opacity-70"),draggable:m,onDragStart:a?v=>a(n,v):void 0,onDragEnd:x,children:[e.jsx("div",{className:"absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-primary/40 to-primary/10"}),e.jsxs("div",{className:"p-3 pb-2 flex flex-col gap-2",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsxs(ge,{to:`${s}/specs/${n.specName}`,className:"flex-1 min-w-0 group hover:text-primary transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-1.5 mb-0.5",children:[e.jsxs("span",{className:"text-[10px] font-mono font-medium text-primary/70 bg-primary/5 px-1 rounded",children:["#",n.specNumber||n.specName.split("-")[0].replace(/^0+/,"")]}),T&&e.jsx(ee,{className:"h-3 w-3 text-primary/40"})]}),e.jsx("h4",{className:"font-semibold text-sm truncate leading-tight",title:n.title||n.specName,children:n.title||n.specName})]}),T&&e.jsx("button",{onClick:v=>{v.preventDefault(),h()},className:"p-1 hover:bg-muted rounded-md text-muted-foreground transition-colors",children:M?e.jsx(J,{className:"h-4 w-4"}):e.jsx($e,{className:"h-4 w-4"})})]}),n.tags&&n.tags.length>0&&e.jsxs("div",{className:"flex flex-wrap gap-1",children:[n.tags.slice(0,3).map(v=>e.jsx("span",{className:"text-[10px] bg-secondary text-secondary-foreground px-1.5 py-0.5 rounded-full",children:v},v)),n.tags.length>3&&e.jsxs("span",{className:"text-[10px] text-muted-foreground",children:["+",n.tags.length-3]})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2 pt-1",children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[n.status&&Ee[n.status]&&(()=>{const v=Ee[n.status],d=v.icon;return e.jsx(d,{className:A("h-3.5 w-3.5",v.colorClass)})})(),n.priority&&e.jsx(fe,{priority:n.priority,className:"h-5 text-[10px] px-1.5",editable:!!N&&m,onChange:v=>N?.(n,v)}),T&&e.jsxs("span",{className:"text-[10px] text-muted-foreground flex items-center gap-1",title:`${j} children`,children:[e.jsx(ts,{className:"h-3 w-3"}),j]})]}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx(Ne,{count:n.tokenCount,size:"sm",onClick:c?()=>c(n.specName):void 0,className:"h-5 px-1.5 scale-90 origin-right"}),n.validationStatus&&n.validationStatus!=="pass"&&e.jsx(be,{status:n.validationStatus,size:"sm",onClick:l?()=>l(n.specName):void 0,className:"h-5 px-1.5 scale-90 origin-right"})]})]})]}),T&&!M&&e.jsx("div",{onClick:h,className:"bg-muted/30 p-1 flex justify-center cursor-pointer hover:bg-muted/50 transition-colors border-t border-border/20",children:e.jsx(J,{className:"h-3 w-3 text-muted-foreground/50"})})]})}function ct({parentName:n,specs:s,parentSpec:m,basePath:o,onTokenClick:a,onValidationClick:x,onPriorityChange:c,canEdit:l,draggingId:N,onDragStart:j,onDragEnd:M}){const h=`leanspec_board_expanded_${n}`,T=s.length<=it,[v,d]=r.useState(()=>{try{const S=sessionStorage.getItem(h);return S!==null?S==="true":T}catch{return T}}),P=()=>{const S=!v;d(S);try{sessionStorage.setItem(h,String(S))}catch{}};return e.jsxs("div",{className:"space-y-2 mt-4 first:mt-0",children:[m?e.jsx(Ve,{spec:m,childCount:s.length,isExpanded:v,onToggle:P,basePath:o,canEdit:l,draggingId:N,onDragStart:j,onDragEnd:M,onTokenClick:a,onValidationClick:x,onPriorityChange:c}):e.jsxs("div",{className:"flex items-center gap-2 px-1 pb-1 border-b border-border/30 cursor-pointer hover:bg-muted/20 rounded p-1",onClick:P,children:[e.jsx(ee,{className:"h-3.5 w-3.5 text-primary/70"}),e.jsx("h5",{className:"text-xs font-semibold text-foreground/80 truncate flex-1",title:n,children:n}),e.jsx("span",{className:"text-[10px] bg-muted px-1.5 py-0.5 rounded-full text-muted-foreground font-mono",children:s.length}),v?e.jsx(J,{className:"h-3 w-3 text-muted-foreground"}):e.jsx($e,{className:"h-3 w-3 text-muted-foreground"})]}),v&&e.jsx("div",{className:A("space-y-2 transition-all",m&&"pl-2 border-l-2 border-border/30 ml-2"),children:s.map(S=>e.jsx(Ve,{spec:S,basePath:o,canEdit:l,draggingId:N,onDragStart:j,onDragEnd:M,onTokenClick:a,onValidationClick:x,onPriorityChange:c},S.specName))})]})}const lt=r.memo(function({specs:s,onStatusChange:m,onPriorityChange:o,basePath:a="/projects",canEdit:x=!0,groupByParent:c=!1,showArchived:l=!1,onTokenClick:N,onValidationClick:j}){const[M,h]=r.useState(null),[T,v]=r.useState(null),{t:d}=xe("common"),P=r.useMemo(()=>new Map(s.map(t=>[t.specName,t])),[s]),S=r.useMemo(()=>{const p=s.some(w=>w.status==="draft")?["draft","planned","in-progress","complete"]:["planned","in-progress","complete"];return l&&p.push("archived"),p},[l,s]),V=r.useMemo(()=>{const t={draft:[],planned:[],"in-progress":[],complete:[],archived:[]};return s.forEach(p=>{const w=p.status;w&&t[w].push(p)}),t},[s]),z=(t,p)=>{x&&(h(t.specName),p.dataTransfer.effectAllowed="move")},B=()=>{h(null),v(null)},I=t=>{t.currentTarget.contains(t.relatedTarget)||v(null)},F=(t,p)=>{x&&(p.preventDefault(),p.dataTransfer.dropEffect="move",T!==t&&v(t))},G=(t,p)=>{if(x&&(p.preventDefault(),v(null),M)){const w=s.find($=>$.specName===M);w&&w.status!==t&&m(w,t),h(null)}},se=(t,p=!1)=>e.jsx("div",{draggable:x,onDragStart:w=>z(t,w),onDragEnd:B,className:A("bg-background rounded-xl border shadow-sm cursor-move hover:border-primary/50 transition-all group/card relative",p?"p-2.5 border-border/50 text-sm shadow-none bg-background/50":"p-4",M===t.specName&&"opacity-50",!x&&"cursor-not-allowed opacity-70"),children:e.jsxs(ge,{to:`${a}/specs/${t.specName}`,className:"select-none h-full flex flex-col",children:[t.children&&t.children.length>0&&!p&&e.jsx("div",{className:"absolute top-3 right-3 text-primary/50",title:d("specs.hierarchy.umbrella"),children:e.jsx(ee,{className:"w-4 h-4"})}),e.jsxs("div",{className:"text-xs text-muted-foreground font-mono mb-1 flex items-center gap-1",children:[e.jsxs("span",{className:A(p&&"text-[10px]"),children:["#",t.specNumber||t.specName.split("-")[0].replace(/^0+/,"")]}),p&&t.children&&t.children.length>0&&e.jsx(ee,{className:"w-3 h-3 text-primary/40 ml-1"})]}),e.jsxs("div",{className:A("space-y-1 mb-3 flex-1",p?"mb-1.5":"mb-4"),children:[e.jsx("h4",{className:A("font-semibold leading-snug group-hover/card:text-primary transition-colors pr-6",p?"text-xs":"text-base"),children:t.title||t.specName}),!p&&e.jsx("div",{className:"text-xs text-muted-foreground font-mono truncate",children:t.specName}),t.parent&&!c&&e.jsxs("div",{className:"flex items-center text-xs text-muted-foreground mt-1 bg-muted/30 p-1 rounded w-fit max-w-full",children:[e.jsx(Js,{className:"h-3 w-3 mr-1 flex-shrink-0"}),e.jsx("span",{className:"truncate",children:d("specs.hierarchy.inParent",{parent:t.parent})})]})]}),t.tags&&t.tags.length>0&&e.jsxs("div",{className:A("flex flex-wrap gap-1.5 mb-3",p?"mb-1.5":"mb-3"),children:[t.tags.slice(0,p?2:4).map(w=>e.jsx("span",{className:"text-[10px] px-2 py-0.5 bg-secondary/30 border border-border/50 rounded-md text-muted-foreground font-mono truncate max-w-[120px]",children:w},w)),t.tags.length>(p?2:4)&&e.jsxs("span",{className:"text-[10px] px-1.5 py-0.5 bg-secondary/20 border border-border/30 rounded-md text-muted-foreground/70 font-mono",children:["+",t.tags.length-(p?2:4)]})]}),e.jsxs("div",{className:"flex items-center justify-between gap-2 mt-auto",children:[t.priority&&e.jsx(fe,{priority:t.priority,className:A("rounded-md",p?"h-5 text-[10px] px-1.5 scale-90 origin-left":"h-6 px-2.5"),iconOnly:p,editable:!!o&&x,onChange:w=>o?.(t,w)}),e.jsxs("div",{className:"flex items-center gap-1.5 justify-end ml-auto",children:[e.jsx(Ne,{count:t.tokenCount,size:"sm",onClick:N?()=>N(t.specName):void 0,className:A(p&&"px-1.5 h-5 scale-90 origin-right"),showIcon:!p}),e.jsx(be,{status:t.validationStatus,size:"sm",onClick:j?()=>j(t.specName):void 0,className:A(p&&"px-1.5 h-5 scale-90 origin-right")}),t.children&&t.children.length>0&&!p&&e.jsxs("span",{className:"text-[10px] px-2 py-0.5 bg-primary/10 border border-primary/20 rounded-md text-primary font-medium flex items-center gap-1",children:[e.jsx(ts,{className:"h-3 w-3"}),t.children.length]})]})]})]})},t.specName),U=t=>{if(!c)return e.jsx("div",{className:"space-y-2",children:t.map(C=>se(C))});const p=[],w=[],$=new Set;return s.forEach(C=>{C.children&&C.children.length>0&&C.children.forEach(E=>$.add(E))}),t.forEach(C=>{$.has(C.specName)||(C.children&&C.children.length>0?p.push(C):w.push(C))}),p.sort((C,E)=>C.specName.localeCompare(E.specName)),e.jsxs("div",{className:"space-y-2",children:[w.map(C=>e.jsx(Ve,{spec:C,basePath:a,canEdit:x,draggingId:M,onDragStart:z,onDragEnd:B,onTokenClick:N,onValidationClick:j,onPriorityChange:o},C.specName)),p.map(C=>{const E=(C.children||[]).map(R=>P.get(R)).filter(R=>R!==void 0);return e.jsx(ct,{parentName:C.specName,specs:E,parentSpec:C,basePath:a,canEdit:x,draggingId:M,onDragStart:z,onDragEnd:B,onTokenClick:N,onValidationClick:j,onPriorityChange:o},C.specName)})]})},k=t=>{if(!c)return t.length;const p=new Set;return s.forEach(w=>{w.children&&w.children.length>0&&w.children.forEach($=>p.add($))}),t.filter(w=>!p.has(w.specName)).length};return e.jsx("div",{className:"flex flex-col md:flex-row gap-3 sm:gap-4 md:gap-6 h-full pb-2 md:snap-x md:snap-mandatory overflow-y-auto md:overflow-y-hidden md:overflow-x-auto",children:S.map(t=>{const p=Ee[t],w=V[t]||[],$=p.icon,C=T===t;return e.jsxs("div",{className:A("flex-shrink-0 w-80 flex flex-col rounded-lg bg-secondary/30 border border-transparent transition-colors",C&&"bg-secondary/60 border-primary/50 ring-2 ring-primary/20"),onDragOver:E=>F(t,E),onDragLeave:I,onDrop:E=>G(t,E),children:[e.jsx("div",{className:A("p-3 flex items-center justify-between border-b sticky top-0 z-10 backdrop-blur-sm bg-opacity-90",p.borderClass,p.bgClass,"rounded-t-lg"),children:e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx($,{className:A("w-4 h-4",p.colorClass)}),e.jsx("span",{className:A("font-medium text-sm",p.colorClass),children:d(p.titleKey)}),e.jsx("span",{className:"text-xs px-2 py-0.5 bg-background/50 rounded-full text-muted-foreground",children:k(w)})]})}),e.jsx("div",{className:"flex-1 p-2 overflow-y-auto",children:U(w)})]},t)})})});function ns(n,s){const m=[...n];switch(s){case"id-asc":m.sort((o,a)=>(o.specNumber||0)-(a.specNumber||0));break;case"priority-desc":m.sort((o,a)=>{const x={critical:4,high:3,medium:2,low:1},c=x[o.priority||""]||0,N=(x[a.priority||""]||0)-c;return N!==0?N:(a.specNumber||0)-(o.specNumber||0)});break;case"priority-asc":m.sort((o,a)=>{const x={critical:4,high:3,medium:2,low:1},c=x[o.priority||""]||0,l=x[a.priority||""]||0,N=c-l;return N!==0?N:(a.specNumber||0)-(o.specNumber||0)});break;case"updated-desc":m.sort((o,a)=>{const x="updatedAt"in o?o.updatedAt:void 0,c="updatedAt"in a?a.updatedAt:void 0;if(!x)return 1;if(!c)return-1;const l=new Date(x).getTime(),j=new Date(c).getTime()-l;return j!==0?j:(a.specNumber||0)-(o.specNumber||0)});break;case"title-asc":m.sort((o,a)=>{const x=(o.title||o.specName).toLowerCase(),c=(a.title||a.specName).toLowerCase(),l=x.localeCompare(c);return l!==0?l:(a.specNumber||0)-(o.specNumber||0)});break;default:m.sort((o,a)=>(a.specNumber||0)-(o.specNumber||0));break}return m}const dt=r.memo(function n({node:s,basePath:m,depth:o=0,sortBy:a="id-desc",onTokenClick:x,onValidationClick:c,onNodeStatusChange:l,onNodePriorityChange:N}){const[j,M]=r.useState(o<1),h=s.childNodes&&s.childNodes.length>0,T=r.useCallback(d=>{d.stopPropagation(),M(P=>!P)},[]),v=r.useMemo(()=>h?ns(s.childNodes,a):[],[h,s.childNodes,a]);return e.jsxs("div",{className:"space-y-1",children:[e.jsx("div",{className:A("border rounded-lg bg-background transition-colors","hover:bg-secondary/50"),children:e.jsxs("div",{className:"flex items-start",children:[e.jsx("div",{className:A("w-8 h-full px-2 py-5 cursor-pointer text-muted-foreground hover:text-foreground flex items-center",!h&&"invisible pointer-events-none"),onClick:T,children:h&&e.jsx($e,{className:A("h-4 w-4 transition-transform",j&&"rotate-90")})}),e.jsxs(ge,{to:`${m}/specs/${s.specName}`,className:"flex-1 p-4 pl-0 block",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[h&&e.jsx(ee,{className:"h-3.5 w-3.5 text-primary/70"}),e.jsxs("span",{className:"text-xs font-mono text-muted-foreground bg-secondary px-1.5 py-0.5 rounded",children:["#",s.specNumber]}),e.jsx("h3",{className:"font-medium truncate",children:s.title||s.specName})]}),e.jsx("p",{className:"text-sm text-muted-foreground truncate",children:s.specName})]}),e.jsxs("div",{className:"flex gap-2 items-center flex-shrink-0 flex-wrap justify-end",children:[s.status&&e.jsx(as,{status:s.status,editable:!!l,onChange:d=>l?.(s.specName,d)}),s.priority&&e.jsx(fe,{priority:s.priority,editable:!!N,onChange:d=>N?.(s.specName,d)}),e.jsx(Ne,{count:s.tokenCount,size:"sm",onClick:x?()=>x(s.specName):void 0}),e.jsx(be,{status:s.validationStatus,size:"sm",onClick:c?()=>c(s.specName):void 0})]})]}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"flex gap-2 mt-3 flex-wrap",children:s.tags.map(d=>e.jsx("span",{className:"text-xs px-2 py-0.5 bg-secondary rounded text-secondary-foreground",children:d},d))})]})]})}),h&&e.jsx(xs,{open:j,children:e.jsx(gs,{forceMount:j?!0:void 0,children:e.jsx("div",{className:"ml-4 pl-4 border-l-2 border-border/40 space-y-2 mt-2 mb-4",children:v.map(d=>e.jsx(n,{node:d,basePath:m,depth:o+1,sortBy:a,onTokenClick:x,onValidationClick:c,onNodeStatusChange:l,onNodePriorityChange:N},d.specName))})})})]})});function Be(n,s){const m=[];for(const o of n)if(s.has(o.specName)){const a=o.childNodes?Be(o.childNodes,s):[];m.push({...o,childNodes:a})}else if(o.childNodes&&o.childNodes.length>0){const a=Be(o.childNodes,s);a.length>0&&m.push({...o,childNodes:a})}return m}const mt=r.memo(function({specs:s,hierarchy:m,basePath:o="/projects",sortBy:a="id-desc",onTokenClick:x,onValidationClick:c,onStatusChange:l,onPriorityChange:N}){const j=r.useMemo(()=>new Set(s.map(d=>d.specName)),[s]),M=r.useMemo(()=>new Map(s.map(d=>[d.specName,d])),[s]),h=r.useCallback((d,P)=>{const S=M.get(d);S&&l&&l(S,P)},[M,l]),T=r.useCallback((d,P)=>{const S=M.get(d);S&&N&&N(S,P)},[M,N]),v=r.useMemo(()=>{let d;return m!==void 0?d=Be(m,j):d=hs(s),ns(d,a)},[m,s,a,j]);return s.length===0?null:e.jsx("div",{className:"h-full overflow-y-auto space-y-2",children:v.map(d=>e.jsx(dt,{node:d,basePath:o,depth:0,sortBy:a,onTokenClick:x,onValidationClick:c,onNodeStatusChange:l?h:void 0,onNodePriorityChange:N?T:void 0},d.specName))})}),Ie=120,ut=120,pt=r.memo(function({spec:s,basePath:m,onTokenClick:o,onValidationClick:a,onStatusChange:x,onPriorityChange:c}){return e.jsx(ge,{to:`${m}/specs/${s.specName}`,className:"block border rounded-lg hover:bg-secondary/50 transition-colors bg-background",children:e.jsxs("div",{className:"flex items-start",children:[e.jsx("div",{className:"w-8 h-full invisible flex items-center text-muted-foreground"}),e.jsxs("div",{className:"flex-1 p-4 pl-0",children:[e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsxs("span",{className:"text-xs font-mono text-muted-foreground bg-secondary px-1.5 py-0.5 rounded",children:["#",s.specNumber]}),e.jsx("h3",{className:"font-medium truncate",children:s.title})]}),e.jsx("p",{className:"text-sm text-muted-foreground truncate",children:s.specName})]}),e.jsxs("div",{className:"flex gap-2 items-center flex-shrink-0 flex-wrap justify-end",children:[s.status&&e.jsx(as,{status:s.status,editable:!!x,onChange:l=>x?.(s,l)}),s.priority&&e.jsx(fe,{priority:s.priority,editable:!!c,onChange:l=>c?.(s,l)}),e.jsx(Ne,{count:s.tokenCount,size:"sm",onClick:()=>o(s.specName)}),e.jsx(be,{status:s.validationStatus,size:"sm",onClick:()=>a(s.specName)})]})]}),s.tags&&s.tags.length>0&&e.jsx("div",{className:"flex gap-2 mt-3 flex-wrap",children:s.tags.map(l=>e.jsx("span",{className:"text-xs px-2 py-0.5 bg-secondary rounded text-secondary-foreground",children:l},l))})]})]})})}),ht=r.memo(function({specs:s,hierarchy:m,basePath:o="/projects",groupByParent:a=!1,sortBy:x="id-desc",onTokenClick:c,onValidationClick:l,onStatusChange:N,onPriorityChange:j}){const{t:M}=xe("common"),[h,T]=r.useState(Ie);r.useEffect(()=>{if(a)return;const d=s.length,P=Math.min(Ie,d);if(typeof window>"u")return;let S=null,V=!1;const z=()=>{if(V||(T(P),d<=Ie))return;const B=()=>{V||T(I=>{const F=Math.min(I+ut,d);return F<d&&!V&&(S=window.requestAnimationFrame(B)),F})};S=window.requestAnimationFrame(B)};return S=window.requestAnimationFrame(z),()=>{V=!0,S!==null&&window.cancelAnimationFrame(S)}},[a,s.length]);const v=r.useMemo(()=>a?s:s.slice(0,h),[a,s,h]);return s.length===0?e.jsx("div",{className:"text-center py-12 text-muted-foreground border rounded-lg bg-secondary/10",children:M("specsPage.list.empty")}):a?e.jsx(mt,{specs:s,hierarchy:m,basePath:o,sortBy:x,onTokenClick:c,onValidationClick:l,onStatusChange:N,onPriorityChange:j}):e.jsxs("div",{className:"h-full overflow-y-auto space-y-2",children:[v.map(d=>e.jsx(pt,{spec:d,basePath:o,onTokenClick:P=>c?.(P),onValidationClick:P=>l?.(P),onStatusChange:N,onPriorityChange:j},d.specName)),!a&&h<s.length&&e.jsx("div",{className:"py-3 text-center text-xs text-muted-foreground",children:M("specsPage.list.loadingMore",{visible:h,total:s.length,defaultValue:"Rendering {{visible}} / {{total}} specs..."})})]})});function xt({searchQuery:n,onSearchChange:s,statusFilter:m,onStatusFilterChange:o,priorityFilter:a,onPriorityFilterChange:x,tagFilter:c,onTagFilterChange:l,sortBy:N,onSortByChange:j,uniqueStatuses:M,uniquePriorities:h,uniqueTags:T,onClearFilters:v,totalSpecs:d,filteredCount:P,viewMode:S,onViewModeChange:V,groupByParent:z,onGroupByParentChange:B,showValidationIssuesOnly:I,onShowValidationIssuesOnlyChange:F,showArchived:G,onShowArchivedChange:se,loadingValidation:U}){const{t:k}=xe("common"),[t,p]=r.useState(n);r.useEffect(()=>{p(n)},[n]),r.useEffect(()=>{const f=setTimeout(()=>{t!==n&&s(t)},120);return()=>clearTimeout(f)},[t,s,n]);const w={draft:ss,planned:es,"in-progress":Je,complete:Ye,archived:Oe},$={critical:rs,high:vs,medium:ys,low:js},C={draft:"status.draft",planned:"status.planned","in-progress":"status.inProgress",complete:"status.complete",archived:"status.archived"},E={critical:"priority.critical",high:"priority.high",medium:"priority.medium",low:"priority.low"},R=f=>C[f]?k(C[f]):f,Z=f=>E[f]?k(E[f]):f,te=n||m.length>0||a.length>0||c.length>0||I,W=z||I||G,je=f=>{o(m.includes(f)?m.filter(O=>O!==f):[...m,f])},ce=f=>{x(a.includes(f)?a.filter(O=>O!==f):[...a,f])},ye=f=>{l(c.includes(f)?c.filter(O=>O!==f):[...c,f])};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"relative",children:[e.jsx(fs,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-muted-foreground"}),e.jsx(Ns,{type:"text",placeholder:k("specsPage.searchPlaceholder"),value:t,onChange:f=>p(f.target.value),className:"w-full pl-10 pr-10 py-2"}),t&&e.jsx("button",{type:"button",className:"absolute right-3 top-1/2 transform -translate-y-1/2 text-muted-foreground hover:text-foreground",onClick:()=>{p(""),s("")},children:e.jsx(Ge,{className:"w-4 h-4"})})]}),t&&e.jsx("p",{className:"text-xs text-muted-foreground pl-1",children:k("specsPage.searchHint")})]}),e.jsxs("div",{className:"flex flex-wrap gap-3 items-center justify-between",children:[e.jsxs("div",{className:"flex flex-wrap gap-3 items-center",children:[e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(bs,{className:"w-4 h-4"}),e.jsx("span",{className:"text-sm font-medium",children:k("specsNavSidebar.filtersLabel")})]}),e.jsxs(Se,{children:[e.jsx(De,{asChild:!0,children:e.jsxs(q,{variant:"outline",className:"w-[140px] justify-between h-9 px-3",children:[e.jsx("span",{className:"truncate",children:m.length===0?k("specsPage.filters.statusAll"):m.length===1?R(m[0]):`${m.length} ${k("specsNavSidebar.selected")}`}),e.jsx(J,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(Me,{className:"w-[180px] p-1",align:"start",children:e.jsx("div",{className:"space-y-1",children:M.map(f=>{const O=w[f],K=m.includes(f);return e.jsxs("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent cursor-pointer group",onClick:()=>je(f),children:[e.jsx("div",{className:A("flex items-center justify-center w-4 h-4 border rounded transition-colors",K?"bg-primary border-primary text-primary-foreground":"group-hover:border-primary/50"),children:K&&e.jsx(Pe,{className:"h-3 w-3"})}),e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[O&&e.jsx(O,{className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:R(f)})]})]},f)})})})]}),e.jsxs(Se,{children:[e.jsx(De,{asChild:!0,children:e.jsxs(q,{variant:"outline",className:"w-[140px] justify-between h-9 px-3",children:[e.jsx("span",{className:"truncate",children:a.length===0?k("specsPage.filters.priorityAll"):a.length===1?Z(a[0]):`${a.length} ${k("specsNavSidebar.selected")}`}),e.jsx(J,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(Me,{className:"w-[180px] p-1",align:"start",children:e.jsx("div",{className:"space-y-1",children:h.map(f=>{const O=$[f],K=a.includes(f);return e.jsxs("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent cursor-pointer group",onClick:()=>ce(f),children:[e.jsx("div",{className:A("flex items-center justify-center w-4 h-4 border rounded transition-colors",K?"bg-primary border-primary text-primary-foreground":"group-hover:border-primary/50"),children:K&&e.jsx(Pe,{className:"h-3 w-3"})}),e.jsxs("div",{className:"flex items-center gap-2 flex-1",children:[O&&e.jsx(O,{className:"h-4 w-4"}),e.jsx("span",{className:"text-sm",children:Z(f)})]})]},f)})})})]}),e.jsxs(Se,{children:[e.jsx(De,{asChild:!0,children:e.jsxs(q,{variant:"outline",className:"w-[140px] justify-between h-9 px-3",children:[e.jsx("span",{className:"truncate",children:c.length===0?k("specsNavSidebar.select.tag.all"):c.length===1?c[0]:`${c.length} ${k("specsNavSidebar.selected")}`}),e.jsx(J,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(Me,{className:"w-[180px] p-1",align:"start",children:e.jsx("div",{className:"space-y-1 max-h-48 overflow-y-auto",children:T.map(f=>{const O=c.includes(f);return e.jsxs("div",{className:"flex items-center gap-2 px-2 py-1.5 rounded-md hover:bg-accent cursor-pointer group",onClick:()=>ye(f),children:[e.jsx("div",{className:A("flex items-center justify-center w-4 h-4 border rounded transition-colors",O?"bg-primary border-primary text-primary-foreground":"group-hover:border-primary/50"),children:O&&e.jsx(Pe,{className:"h-3 w-3"})}),e.jsx("span",{className:"text-sm flex-1 break-all",children:f})]},f)})})})]}),e.jsxs(ws,{value:N,onValueChange:j,children:[e.jsx(ks,{className:"w-[160px]",children:e.jsx(Cs,{placeholder:k("specsPage.filters.sort")})}),e.jsxs(Ss,{children:[e.jsx(Y,{value:"id-desc",children:k("specsPage.filters.sortOptions.id-desc")}),e.jsx(Y,{value:"id-asc",children:k("specsPage.filters.sortOptions.id-asc")}),e.jsx(Y,{value:"updated-desc",children:k("specsPage.filters.sortOptions.updated-desc")}),e.jsx(Y,{value:"title-asc",children:k("specsPage.filters.sortOptions.title-asc")}),e.jsx(Y,{value:"priority-desc",children:k("specsPage.filters.sortOptions.priority-desc")}),e.jsx(Y,{value:"priority-asc",children:k("specsPage.filters.sortOptions.priority-asc")})]})]}),te&&e.jsxs(q,{onClick:v,variant:"ghost",size:"sm",className:"h-9 gap-1",children:[e.jsx(Ge,{className:"w-4 h-4"}),k("specsNavSidebar.clearFilters")]}),e.jsxs("span",{className:"text-sm text-muted-foreground flex items-center gap-1.5",children:[U&&I&&e.jsx(Ds,{className:"w-3 h-3 animate-spin"}),k("specsPage.filters.filteredCount",{filtered:P,total:d})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(Ms,{children:[e.jsx(Ps,{asChild:!0,children:e.jsxs(q,{variant:W?"secondary":"outline",size:"sm",className:"h-9 gap-1.5",children:[e.jsx(Ts,{className:A("w-4 h-4",W?"text-primary":"text-muted-foreground")}),e.jsx("span",{className:"hidden sm:inline",children:k("specsPage.filters.settings")})]})}),e.jsxs(Ls,{align:"end",className:"w-48",children:[e.jsxs(Te,{checked:z,onCheckedChange:B,children:[e.jsx(ee,{className:"w-4 h-4 mr-2"}),k("specsPage.filters.groupByParent")]}),e.jsxs(Te,{checked:I,onCheckedChange:F,children:[e.jsx(As,{className:"w-4 h-4 mr-2"}),k("specsPage.filters.withErrors")]}),e.jsxs(Te,{checked:G,onCheckedChange:se,children:[e.jsx(Oe,{className:"w-4 h-4 mr-2"}),k("specsPage.filters.showArchived")]})]})]}),e.jsxs("div",{className:"flex items-center gap-1 bg-secondary/50 p-1 rounded-lg border h-9",children:[e.jsxs(q,{variant:S==="list"?"secondary":"ghost",size:"sm",onClick:()=>V("list"),className:A("h-7",S==="list"&&"bg-background shadow-sm"),title:k("specsPage.views.listTooltip"),children:[e.jsx(Is,{className:"w-4 h-4 mr-1.5"}),k("specsPage.views.list")]}),e.jsxs(q,{variant:S==="board"?"secondary":"ghost",size:"sm",onClick:()=>V("board"),className:A("h-7",S==="board"&&"bg-background shadow-sm"),title:k("specsPage.views.boardTooltip"),children:[e.jsx(ot,{className:"w-4 h-4 mr-1.5"}),k("specsPage.views.board")]})]})]})]})]})}function gt(n){const[s,m]=r.useState(null),[o,a]=r.useState(!1),[x,c]=r.useState(!1),[l,N]=r.useState(null),[j,M]=r.useState(!1),[h,T]=r.useState(!1),[v,d]=r.useState(null),P=Os(),S=r.useCallback(()=>{a(!1),c(!1),N(null)},[]),V=r.useCallback(()=>{M(!1),T(!1),d(null)},[]),z=r.useCallback(I=>{n&&(m(I),a(!0))},[n]),B=r.useCallback(I=>{n&&(m(I),M(!0))},[n]);return r.useEffect(()=>{!o||!s||!n||(c(!0),P.getSpecTokens(n,s).then(I=>N(I)).catch(()=>N(null)).finally(()=>c(!1)))},[s,P,n,o]),r.useEffect(()=>{!j||!s||!n||(T(!0),P.getSpecValidation(n,s).then(I=>d(I)).catch(()=>d(null)).finally(()=>T(!1)))},[s,P,n,j]),{activeSpecName:s,tokenDialogOpen:o,tokenDialogLoading:x,tokenDialogData:l,closeTokenDialog:S,handleTokenClick:z,validationDialogOpen:j,validationDialogLoading:h,validationDialogData:v,closeValidationDialog:V,handleValidationClick:B}}const ft=120;function kt(){const{projectId:n}=Es(),{currentProject:s}=Vs(),m=n??s?.id,o=m?`/projects/${m}`:"/projects",{machineModeEnabled:a,isMachineAvailable:x}=Bs(),c=$s(m??null,{hierarchy:!0}),l=r.useMemo(()=>c.data?.specs??[],[c.data]),N=Hs(),j=r.useCallback(g=>{N.setQueriesData({queryKey:Le.lists()},b=>{if(!b)return b;if(Array.isArray(b))return g(b);if(typeof b=="object"&&b&&"specs"in b){const D=b;return{...D,specs:g(D.specs??[])}}return b})},[N]),M=r.useMemo(()=>c.data?.hierarchy,[c.data]),{t:h}=xe("common"),T=c.isLoading&&!c.data,v=c.error?h("specsPage.state.errorDescription"):null,{activeSpecName:d,tokenDialogOpen:P,tokenDialogLoading:S,tokenDialogData:V,closeTokenDialog:z,handleTokenClick:B,validationDialogOpen:I,validationDialogLoading:F,validationDialogData:G,closeValidationDialog:se,handleValidationClick:U}=gt(m),{statusFilter:k,priorityFilter:t,tagFilter:p,sortBy:w,hierarchyView:$,showArchived:C,pageViewMode:E,showValidationIssuesOnly:R,setStatusFilter:Z,setPriorityFilter:te,setTagFilter:W,setSortBy:je,setHierarchyView:ce,setShowArchived:ye,setPageViewMode:f,setShowValidationIssuesOnly:O}=qs(),[K]=zs(),le=r.useMemo(()=>({tag:K.get("tag"),query:K.get("q"),view:K.get("view"),groupByParent:K.get("groupByParent")}),[K]),os=le.query??"",ve=le.tag,de=le.view,we=le.groupByParent,[He,qe]=r.useState(os),ae=r.useDeferredValue(He),me=_s(m??null,ae),re=r.useMemo(()=>k.filter(g=>g!=="archived"),[k]),ue=r.useMemo(()=>ve?[ve]:p,[ve,p]),ne=r.useMemo(()=>we==="1"||we==="true"?!0:$,[we,$]),ze=r.useMemo(()=>de==="board"||de==="list"?de:E,[de,E]),is=r.useCallback(g=>ce(g),[ce]),cs=r.useCallback(g=>f(g),[f]),ls=r.useMemo(()=>l.map(g=>g.specName),[l]),Q=Ks(m??null,ls),[X,pe]=r.useState(null);r.useEffect(()=>{if(!Q.data)return;const g=Q.data;j(b=>b.map(D=>{const y=g.specs[D.specName];return y?{...D,tokenCount:y.tokenCount,tokenStatus:y.tokenStatus,validationStatus:y.validationStatus}:D}))},[Q.data,j]);const _e=r.useMemo(()=>{if(!Q.data)return{};const g={};for(const[b,D]of Object.entries(Q.data.specs))g[b]=D.validationStatus;return g},[Q.data]),ds=Q.isLoading,he=r.useCallback(async(g,b,D=!1)=>{if(!(a&&!x())){j(y=>y.map(u=>u.specName===g.specName?{...u,status:b}:u));try{await Ue.updateSpec(g.specName,{status:b,expectedContentHash:g.contentHash,force:D}),N.invalidateQueries({queryKey:Le.lists()})}catch(y){j(u=>u.map(i=>i.specName===g.specName?{...i,status:g.status}:i)),console.error("Failed to update status:",y)}}},[x,a,N,j]),Ke=r.useCallback((g,b)=>{if(g.status==="draft"&&(b==="in-progress"||b==="complete")){pe({spec:g,nextStatus:b});return}he(g,b)},[he]),Re=r.useCallback(async(g,b)=>{if(a&&!x())return;const D=g.priority;j(y=>y.map(u=>u.specName===g.specName?{...u,priority:b}:u));try{await Ue.updateSpec(g.specName,{priority:b,expectedContentHash:g.contentHash}),N.invalidateQueries({queryKey:Le.lists()})}catch(y){j(u=>u.map(i=>i.specName===g.specName?{...i,priority:D}:i)),console.error("Failed to update priority:",y)}},[x,a,N,j]),ke=r.useCallback(()=>{c.refetch()},[c]),ms=r.useMemo(()=>{const g=l.map(y=>y.status).filter(y=>!!y),b=Array.from(new Set(g)).filter(y=>C||y!=="archived"),D={draft:0,planned:1,"in-progress":2,complete:3,archived:4};return b.sort((y,u)=>D[y]-D[u])},[l,C]),us=r.useMemo(()=>{const g=Array.from(new Set(l.map(D=>D.priority).filter(Boolean))),b={critical:1,high:2,medium:3,low:4};return g.sort((D,y)=>(b[D]||999)-(b[y]||999))},[l]),ps=r.useMemo(()=>Array.from(new Set(l.flatMap(b=>b.tags||[]))).sort((b,D)=>b.toLowerCase().localeCompare(D.toLowerCase())),[l]),Fe=r.useCallback(()=>{qe(""),Z([]),te([]),W([]),O(!1)},[Z,te,W,O]),Qe=r.useCallback((g,b)=>{const D=new Map;for(const i of b){const L=i.parent;L&&(D.has(L)||D.set(L,[]),D.get(L).push(i))}const y=new Set(g.map(i=>i.specName||i.id)),u=i=>{const L=D.get(i);if(L)for(const _ of L){const H=_.specName||_.id;H&&!y.has(H)&&(y.add(H),u(H))}};for(const i of g)u(i.specName||i.id||"");return b.filter(i=>y.has(i.specName||i.id||""))},[]),oe=r.useMemo(()=>{let g=l;const b=ae&&me.data;if(b){const u=new Set(me.data.results.map(i=>i.specName));g=l.filter(i=>u.has(i.specName))}let D=g.filter(u=>{if(!C&&u.status==="archived")return!1;if(ae&&!b){const i=ae.toLowerCase();if(!(u.specName.toLowerCase().includes(i)||(u.title?u.title.toLowerCase().includes(i):!1)||u.tags?.some(_=>_.toLowerCase().includes(i))))return!1}if(re.length>0&&u.status&&!re.includes(u.status)||t.length>0&&u.priority&&!t.includes(u.priority)||ue.length>0&&!u.tags?.some(i=>ue.includes(i)))return!1;if(R){const i=_e[u.specName],L=u.validationStatus||i;if(!(L&&L!=="pass"))return!1}return!0});ne&&(re.length>0||t.length>0)&&(D=Qe(D,l));const y=[...D];if(b){const u=new Map(me.data.results.map((i,L)=>[i.specName,L]));y.sort((i,L)=>(u.get(i.specName)??9999)-(u.get(L.specName)??9999))}else switch(w){case"id-asc":y.sort((u,i)=>(u.specNumber||0)-(i.specNumber||0));break;case"priority-desc":y.sort((u,i)=>{const L={critical:4,high:3,medium:2,low:1},_=L[u.priority||""]||0,ie=(L[i.priority||""]||0)-_;return ie!==0?ie:(i.specNumber||0)-(u.specNumber||0)});break;case"priority-asc":y.sort((u,i)=>{const L={critical:4,high:3,medium:2,low:1},_=L[u.priority||""]||0,H=L[i.priority||""]||0,ie=_-H;return ie!==0?ie:(i.specNumber||0)-(u.specNumber||0)});break;case"updated-desc":y.sort((u,i)=>{if(!u.updatedAt)return 1;if(!i.updatedAt)return-1;const L=new Date(u.updatedAt).getTime(),H=new Date(i.updatedAt).getTime()-L;return H!==0?H:(i.specNumber||0)-(u.specNumber||0)});break;case"title-asc":y.sort((u,i)=>{const L=(u.title||u.specName).toLowerCase(),_=(i.title||i.specName).toLowerCase(),H=L.localeCompare(_);return H!==0?H:(i.specNumber||0)-(u.specNumber||0)});break;default:y.sort((u,i)=>(i.specNumber||0)-(u.specNumber||0));break}return y},[t,ae,w,l,re,ue,ne,Qe,R,C,_e,me.data]),Ce=oe.length<=ft;return T?e.jsx(Ae,{children:e.jsx(Rs,{})}):v?e.jsx(Ae,{children:e.jsx(Fs,{children:e.jsxs(Qs,{className:"py-10 text-center space-y-3",children:[e.jsx("div",{className:"flex justify-center",children:e.jsx(rs,{className:"h-6 w-6 text-destructive"})}),e.jsx("div",{className:"text-lg font-semibold",children:h("specsPage.state.errorTitle")}),e.jsx("p",{className:"text-sm text-muted-foreground",children:v||h("specsPage.state.errorDescription")}),e.jsx(q,{variant:"secondary",size:"sm",onClick:ke,className:"mt-2",children:h("actions.retry")})]})})}):e.jsxs(Ae,{className:"h-[calc(100vh-3.5rem)]",contentClassName:"flex h-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-col gap-4 sticky top-0 bg-background mt-0 py-2 z-10",children:[e.jsx(Gs,{title:h("specsPage.title"),description:h("specsPage.description")}),a&&!x()&&e.jsx("div",{className:"text-xs text-destructive",children:h("machines.unavailable")}),e.jsx(xt,{searchQuery:He,onSearchChange:qe,statusFilter:re,onStatusFilterChange:Z,priorityFilter:t,onPriorityFilterChange:te,tagFilter:ue,onTagFilterChange:W,sortBy:w,onSortByChange:g=>je(g),uniqueStatuses:ms,uniquePriorities:us,uniqueTags:ps,onClearFilters:Fe,totalSpecs:l.length,filteredCount:oe.length,viewMode:ze,onViewModeChange:cs,groupByParent:ne,onGroupByParentChange:is,showValidationIssuesOnly:R,onShowValidationIssuesOnlyChange:O,showArchived:C,onShowArchivedChange:ye,loadingValidation:ds})]}),e.jsx("div",{className:"flex-1 min-h-0",children:l.length===0?e.jsx(Ze,{icon:tt,title:h("specsPage.state.noSpecsTitle"),description:h("specsPage.state.noSpecsDescription"),actions:e.jsxs(q,{variant:"secondary",size:"sm",onClick:ke,children:[e.jsx(We,{className:"h-4 w-4 mr-2"}),h("specsPage.buttons.refreshList")]})}):oe.length===0?e.jsx(Ze,{icon:at,title:h("specsPage.state.noFiltersTitle"),description:h("specsPage.state.noFiltersDescription"),actions:e.jsxs("div",{className:"flex gap-2 flex-wrap justify-center",children:[e.jsx(q,{variant:"outline",size:"sm",onClick:Fe,children:h("specsNavSidebar.clearFilters")}),e.jsxs(q,{variant:"secondary",size:"sm",onClick:ke,children:[e.jsx(We,{className:"h-4 w-4 mr-2"}),h("specsPage.buttons.reloadData")]})]})}):ze==="list"?e.jsx(ht,{specs:oe,hierarchy:M,basePath:o,groupByParent:ne,sortBy:w,onTokenClick:B,onValidationClick:U,onStatusChange:Ce?Ke:void 0,onPriorityChange:Ce?Re:void 0}):e.jsx(lt,{specs:oe,onStatusChange:Ke,onPriorityChange:Ce?Re:void 0,canEdit:!a||x(),basePath:o,groupByParent:ne,showArchived:C,onTokenClick:B,onValidationClick:U})}),d&&P&&e.jsx(et,{open:P,onClose:z,specName:d,data:V,loading:S}),d&&I&&e.jsx(st,{open:I,onClose:se,specName:d,data:G,loading:F}),e.jsx(Us,{open:!!X,onOpenChange:g=>!g&&pe(null),children:e.jsxs(Zs,{children:[e.jsxs(Ws,{children:[e.jsx(Xs,{children:h("editors.draftSkipTitle")}),e.jsx(Ys,{children:h("editors.draftSkipDescription")})]}),e.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[e.jsx(q,{variant:"outline",onClick:()=>{X&&(he(X.spec,"planned"),pe(null))},children:h("editors.draftSkipPlanned")}),e.jsx(q,{onClick:()=>{X&&(he(X.spec,X.nextStatus,!0),pe(null))},children:h("editors.draftSkipForce")})]})]})})]})}export{kt as SpecsPage};