@nextclaw/ui 0.26.4 → 0.27.0

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 (376) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/.vite/manifest.json +1271 -1227
  3. package/dist/assets/{abnfDiagram-VRR7QNED-Dcw10Yt1.js → abnfDiagram-VRR7QNED-DmeCRAkd.js} +1 -1
  4. package/dist/assets/account-panel-BYxGT4m4.js +1 -0
  5. package/dist/assets/{aiden0z-pptx-renderer.es--oNqetPA.js → aiden0z-pptx-renderer.es-ChX5DHqP.js} +1 -1
  6. package/dist/assets/api-CG22BskB.js +20 -0
  7. package/dist/assets/app-presenter-provider-CJFjhVYI.js +28 -0
  8. package/dist/assets/app-presenter-provider-D3BuuOyZ.css +1 -0
  9. package/dist/assets/appearance-settings-page-BcXr0vHp.js +1 -0
  10. package/dist/assets/{arc-DBRedCax.js → arc-Cu6Ols44.js} +1 -1
  11. package/dist/assets/architecture-TIHT7OUA-CLjV_xu4.js +1 -0
  12. package/dist/assets/{architectureDiagram-ZJ3FMSHR-Dufhtuv-.js → architectureDiagram-ZJ3FMSHR-DrNB0eLE.js} +1 -1
  13. package/dist/assets/{blockDiagram-677ZJIJ3-BUk0vtJ7.js → blockDiagram-677ZJIJ3-08rHt6DJ.js} +1 -1
  14. package/dist/assets/{book-open-CmRdT3N1.js → book-open-ClbJmmxP.js} +1 -1
  15. package/dist/assets/{c4Diagram-LMCZKHZV-CxDcVE9p.js → c4Diagram-LMCZKHZV-CCVgRG-u.js} +1 -1
  16. package/dist/assets/{card-CdRBL1E0.js → card-BdC01NFF.js} +1 -1
  17. package/dist/assets/channel-BgpbPyEH.js +1 -0
  18. package/dist/assets/channels-list-page-BrIvJlop.js +8 -0
  19. package/dist/assets/chunk-2Q5K7J3B-DjhMPqAC.js +1 -0
  20. package/dist/assets/{chunk-32BRIVSS-DSF3KElA.js → chunk-32BRIVSS-BeCaI-JN.js} +1 -1
  21. package/dist/assets/{chunk-52WLFC77-Costxzr3.js → chunk-52WLFC77-ZXIcYPYs.js} +1 -1
  22. package/dist/assets/{chunk-5FCAYU7R-rhqzGGZo.js → chunk-5FCAYU7R-DDwTPcy8.js} +1 -1
  23. package/dist/assets/{chunk-5HE753X5-BsEsmIao.js → chunk-5HE753X5-WygrMYPL.js} +1 -1
  24. package/dist/assets/{chunk-5JV3BV7I-Dqw_DCoN.js → chunk-5JV3BV7I-o8T3KZgk.js} +1 -1
  25. package/dist/assets/{chunk-5TONJI2A-Cft82fp8.js → chunk-5TONJI2A-BKFbUT7J.js} +1 -1
  26. package/dist/assets/{chunk-5VM5RSS4-DqNHn9Dl.js → chunk-5VM5RSS4-DYxCRV86.js} +1 -1
  27. package/dist/assets/{chunk-7BUUIJ7U-A5SBEMYY.js → chunk-7BUUIJ7U-CvSeJlKZ.js} +1 -1
  28. package/dist/assets/{chunk-BIQX33UG-1Ng3mTrH.js → chunk-BIQX33UG-BhH3RHCY.js} +1 -1
  29. package/dist/assets/{chunk-C7G6YPKG-DRJEy8ZI.js → chunk-C7G6YPKG-BTL0-xL3.js} +1 -1
  30. package/dist/assets/{chunk-CQNSW5MT-Bydv_J3J.js → chunk-CQNSW5MT-DWAU4QaD.js} +1 -1
  31. package/dist/assets/{chunk-CYSBUYHQ-HkMIg12u.js → chunk-CYSBUYHQ-B7ZBMXTx.js} +1 -1
  32. package/dist/assets/{chunk-EMLP6XTP-C5ndDvm3.js → chunk-EMLP6XTP-D92HvnHE.js} +1 -1
  33. package/dist/assets/{chunk-EX3LRPZG-DzeloZRo.js → chunk-EX3LRPZG-DfOGKwW8.js} +1 -1
  34. package/dist/assets/{chunk-FWX5IMBZ-n_2_CLTQ.js → chunk-FWX5IMBZ-DUuJUrXJ.js} +2 -2
  35. package/dist/assets/{chunk-HOUHSVGY-kx_slvu3.js → chunk-HOUHSVGY-i3MDyUY5.js} +1 -1
  36. package/dist/assets/{chunk-ICXQ74PX-sQLMURqL.js → chunk-ICXQ74PX-F_pmNX6t.js} +1 -1
  37. package/dist/assets/{chunk-JG7HCLWE-CMUn5Elc.js → chunk-JG7HCLWE-DygOelrU.js} +1 -1
  38. package/dist/assets/{chunk-JWPE2WC7-Cra3s-Uk.js → chunk-JWPE2WC7-BpiZMeRl.js} +1 -1
  39. package/dist/assets/{chunk-MOJQB5TN-umcrg5Bi.js → chunk-MOJQB5TN-CV10sB1I.js} +1 -1
  40. package/dist/assets/{chunk-MOZMSUNE-BnljD1ig.js → chunk-MOZMSUNE-Cf1WZNm0.js} +1 -1
  41. package/dist/assets/{chunk-OGEWGWER-BXx5pQjU.js → chunk-OGEWGWER-DuSw54VR.js} +1 -1
  42. package/dist/assets/{chunk-OSBZ3O6U-D-1qfdWu.js → chunk-OSBZ3O6U-_rt_XKSZ.js} +1 -1
  43. package/dist/assets/{chunk-PUDLZKDR-DLzX78LC.js → chunk-PUDLZKDR-BFPaAGNW.js} +1 -1
  44. package/dist/assets/{chunk-Q4XR5HBZ-DTK-rtW6.js → chunk-Q4XR5HBZ-GE0v_E5y.js} +1 -1
  45. package/dist/assets/{chunk-QBLGF6JB-CsFeIGfr.js → chunk-QBLGF6JB-BK_FpnlJ.js} +1 -1
  46. package/dist/assets/{chunk-R7FJI6CG-4xNYUeng.js → chunk-R7FJI6CG-CpYh6rGo.js} +1 -1
  47. package/dist/assets/{chunk-RYQCIY6F-DJiHiTE5.js → chunk-RYQCIY6F-htnxL_Cl.js} +1 -1
  48. package/dist/assets/{chunk-U6XO7XAA-BVYkauHz.js → chunk-U6XO7XAA-wDbE4BZ7.js} +1 -1
  49. package/dist/assets/{chunk-V7JOEXUC-BsazE8cS.js → chunk-V7JOEXUC-DDRSVFTB.js} +1 -1
  50. package/dist/assets/chunk-VAUOI2AC-GYimZYx9.js +1 -0
  51. package/dist/assets/{chunk-VR4S4FIN-7RoZQffO.js → chunk-VR4S4FIN-COdhHR1o.js} +1 -1
  52. package/dist/assets/{chunk-WYO6CB5R-DEuS6N1R.js → chunk-WYO6CB5R-DPDGhyF6.js} +3 -3
  53. package/dist/assets/chunk-XXDRQBXY-KKCf0HV5.js +1 -0
  54. package/dist/assets/{chunk-YOTPTUD7-9KBrosZL.js → chunk-YOTPTUD7-D8ir9Nx5.js} +1 -1
  55. package/dist/assets/{chunk-ZGVPDNZ5-IYgN9f5A.js → chunk-ZGVPDNZ5-BuNKD836.js} +1 -1
  56. package/dist/assets/{chunk-ZIRB5QZD-BUo0-zcp.js → chunk-ZIRB5QZD-DyHzq8jH.js} +1 -1
  57. package/dist/assets/{circle-dashed-HOgt3gIJ.js → circle-dashed-nDaMRmP-.js} +1 -1
  58. package/dist/assets/classDiagram-OUVF2IWQ-iRMPRR8M.js +1 -0
  59. package/dist/assets/classDiagram-v2-EOCWNBFH-BguFy_wj.js +1 -0
  60. package/dist/assets/{client-DKKbdJ6Q.js → client-DlFB5dW5.js} +1 -1
  61. package/dist/assets/config-split-page-C06fU9OQ.js +1 -0
  62. package/dist/assets/confirm-dialog-DpcmlXhd.js +1 -0
  63. package/dist/assets/{app-presenter-provider-jNGlmBLe.css → context-menu-DEcVZfaU.css} +1 -1
  64. package/dist/assets/context-menu-DKIEaY7f.js +211 -0
  65. package/dist/assets/{cose-bilkent-JH36ORCC-DhqbC1fR.js → cose-bilkent-JH36ORCC-B1I1_P6a.js} +1 -1
  66. package/dist/assets/{createLucideIcon-DE0sB9Nu.js → createLucideIcon-Lnt-4LMC.js} +1 -1
  67. package/dist/assets/cynefin-VYW2F7L2-CtbjXuCW.js +1 -0
  68. package/dist/assets/{cynefinDiagram-TSTJHNR4-C-TBRi5V.js → cynefinDiagram-TSTJHNR4-DcOnhnCo.js} +1 -1
  69. package/dist/assets/{dagre-VKFMJZFB-BmafJymp.js → dagre-VKFMJZFB-hAX89lg3.js} +1 -1
  70. package/dist/assets/{dagre-CrgsRasE.js → dagre-nSYhf9yY.js} +1 -1
  71. package/dist/assets/{desktop-capabilities-page-B9-B9k1A.js → desktop-capabilities-page-DPORyZAu.js} +1 -1
  72. package/dist/assets/desktop-update-config-BMTeWZmn.js +1 -0
  73. package/dist/assets/{diagram-FQU43EPY-BoOMwa6D.js → diagram-FQU43EPY-C1mRMD2k.js} +1 -1
  74. package/dist/assets/{diagram-G47NLZAW-Le7N6Uym.js → diagram-G47NLZAW-D2XBn5al.js} +1 -1
  75. package/dist/assets/{diagram-NH7WQ7WH-Fbpj3-MO.js → diagram-NH7WQ7WH-3LmRsmkC.js} +1 -1
  76. package/dist/assets/{diagram-OA4YK3LP-D3QuGGuu.js → diagram-OA4YK3LP-CFWn-osC.js} +1 -1
  77. package/dist/assets/{diagram-WEI45ONY-Cxu1uiN6.js → diagram-WEI45ONY-BqNRbUvU.js} +1 -1
  78. package/dist/assets/dialog-BNXSPMX_.js +1 -0
  79. package/dist/assets/dist-Cuiqqp1O.js +41 -0
  80. package/dist/assets/doc-browser-CDEapjmj.js +1 -0
  81. package/dist/assets/{doc-browser-context-ClLgMbxd.js → doc-browser-context-0QDWYorh.js} +1 -1
  82. package/dist/assets/{docx-preview-CkU2psnd.js → docx-preview-CunAATyC.js} +1 -1
  83. package/dist/assets/{download-CKqS1Ksj.js → download-f_sPcoLZ.js} +1 -1
  84. package/dist/assets/{ebnfDiagram-CCIWWBDH-CCAjuQM6.js → ebnfDiagram-CCIWWBDH-CYb8IwqD.js} +1 -1
  85. package/dist/assets/{erDiagram-Q63AITRT-BuzUAq-d.js → erDiagram-Q63AITRT-H47mUoeK.js} +1 -1
  86. package/dist/assets/eventmodeling-45OFAUF4-Djd6id_u.js +1 -0
  87. package/dist/assets/extensions-B-0xQz3L.js +1 -0
  88. package/dist/assets/external-link-CbVlnlNy.js +1 -0
  89. package/dist/assets/flowDiagram-23GEKE2U-DUrsM_ZL.js +1 -0
  90. package/dist/assets/{form-actions-CCoxz33Q.js → form-actions-BoTqELHB.js} +1 -1
  91. package/dist/assets/{ganttDiagram-NO4QXBWP-cJmWVY8F.js → ganttDiagram-NO4QXBWP-hSX45zfV.js} +1 -1
  92. package/dist/assets/gitGraph-TEB2WS4Q-CU6P_2Cm.js +1 -0
  93. package/dist/assets/{gitGraphDiagram-IHSO6WYX-F58o-vtP.js → gitGraphDiagram-IHSO6WYX-Br0UW2qg.js} +1 -1
  94. package/dist/assets/{i18n-OGmF0Ws_.js → i18n-B0V5NkFj.js} +2 -2
  95. package/dist/assets/inbox-Bna8iUy0.js +1 -0
  96. package/dist/assets/info-DKCQHKI2-Bj2P_7RC.js +1 -0
  97. package/dist/assets/{infoDiagram-FWYZ7A6U-Gt59b83C.js → infoDiagram-FWYZ7A6U-DQmP_67w.js} +1 -1
  98. package/dist/assets/{ishikawaDiagram-FXEZZL3T-1u4IAj1I.js → ishikawaDiagram-FXEZZL3T-BHAV2oes.js} +1 -1
  99. package/dist/assets/{journeyDiagram-5HDEW3XC-CCQsfV-5.js → journeyDiagram-5HDEW3XC-CFHax4_d.js} +1 -1
  100. package/dist/assets/{kanban-definition-HUTT4EX6-vlB6O_Zn.js → kanban-definition-HUTT4EX6-B4ZA9rp5.js} +1 -1
  101. package/dist/assets/katex-BprZ-Wwb.js +1 -0
  102. package/dist/assets/{keyboard-shortcuts-settings-page-D8rosOVh.js → keyboard-shortcuts-settings-page-BluWKrSo.js} +1 -1
  103. package/dist/assets/{line-D_bHubTL.js → line-BboM0HLF.js} +1 -1
  104. package/dist/assets/{linear-ChlwuS5y.js → linear-4K_M1oYM.js} +1 -1
  105. package/dist/assets/login-page-BMHW0Hh0.js +1 -0
  106. package/dist/assets/{login-page-BT3GV3Sb.js → login-page-JNr5JCEw.js} +1 -1
  107. package/dist/assets/main-BCX_Untx.css +1 -0
  108. package/dist/assets/main-C5kbmGUV.js +2 -0
  109. package/dist/assets/main-i18n-catalog.config-DO4wNT7T.js +1 -0
  110. package/dist/assets/{map-oGHTsIu8.js → map-26GpO1wn.js} +1 -1
  111. package/dist/assets/mcp-marketplace-page-CV-PHKTN.js +1 -0
  112. package/dist/assets/{mermaid-parser.core-CuRe1ZG4.js → mermaid-parser.core-BTJFnvRC.js} +2 -2
  113. package/dist/assets/{mermaid.core-u4YCFKRf.js → mermaid.core-B7ufoXgq.js} +3 -3
  114. package/dist/assets/{mindmap-definition-LN4V7U3C-DeJAQYTu.js → mindmap-definition-LN4V7U3C-BHyru6KE.js} +1 -1
  115. package/dist/assets/model-config-page-C-wbM6Fe.js +1 -0
  116. package/dist/assets/{navigation-link-DC-Pku0Y.js → navigation-link-DFLSVIut.js} +2 -2
  117. package/dist/assets/{ordinal-C6JFfkKN.js → ordinal-BqFe2ePF.js} +1 -1
  118. package/dist/assets/packet-7NZHBO7P-ti5ge2jr.js +1 -0
  119. package/dist/assets/panel-app-CSQmm_7E.js +1 -0
  120. package/dist/assets/panel-app-i18n-catalog.config-Bo52dPuF.js +1 -0
  121. package/dist/assets/panelStandalone-PuuMF65O.js +2 -0
  122. package/dist/assets/panelStandalone-XRlWxbRS.css +1 -0
  123. package/dist/assets/{pegDiagram-2B236MQR-nVMkxShH.js → pegDiagram-2B236MQR-PVTatU5j.js} +1 -1
  124. package/dist/assets/pie-RZYD4A2V-Bnep8TyV.js +1 -0
  125. package/dist/assets/{pieDiagram-ENE6RG2P-8aUH44QZ.js → pieDiagram-ENE6RG2P-CGc-QCc7.js} +1 -1
  126. package/dist/assets/plus-CywSlIbG.js +1 -0
  127. package/dist/assets/privacy-settings-page-CPdEiouE.js +1 -0
  128. package/dist/assets/projects-D_cd_t4G.js +1 -0
  129. package/dist/assets/provider-models-XRArsply.js +1 -0
  130. package/dist/assets/provider-scoped-model-input-C8JI-hus.js +1 -0
  131. package/dist/assets/providers-config-page-fyMlVgvq.js +1 -0
  132. package/dist/assets/puzzle-Bk3ud1KI.js +1 -0
  133. package/dist/assets/pwa-Cx6Fnox4.js +1 -0
  134. package/dist/assets/{quadrantDiagram-ABIIQ3AL-EY8hpFv8.js → quadrantDiagram-ABIIQ3AL-DGL36riv.js} +1 -1
  135. package/dist/assets/radar-I7S5WNFK-BYg-icAP.js +1 -0
  136. package/dist/assets/railroad-3IZDKUUU-_CHO-Fi1.js +1 -0
  137. package/dist/assets/railroad-abnf-AHOZXSZD-hbQDevHe.js +1 -0
  138. package/dist/assets/railroad-ebnf-EBAXGLYW-v4RZkOfi.js +1 -0
  139. package/dist/assets/railroad-peg-LSFZ7HO6-bC9BqkI5.js +1 -0
  140. package/dist/assets/{railroadDiagram-RFXS5EU6-CNhcIeji.js → railroadDiagram-RFXS5EU6-CyNwvhSb.js} +1 -1
  141. package/dist/assets/{refresh-cw-BG8VfcdA.js → refresh-cw-Ca2napNx.js} +1 -1
  142. package/dist/assets/remote-D5MBQNZE.js +1 -0
  143. package/dist/assets/{requirementDiagram-TGXJPOKE-D8Dcs-Rt.js → requirementDiagram-TGXJPOKE-C31NMKJ0.js} +1 -1
  144. package/dist/assets/{rotate-cw-DPEegUU2.js → rotate-cw-DXg7sNUE.js} +1 -1
  145. package/dist/assets/runtime-config-page--ivCxBT4.js +1 -0
  146. package/dist/assets/{sankeyDiagram-HTMAVEWB-HTrb6aa-.js → sankeyDiagram-HTMAVEWB-CwrQ_7PA.js} +1 -1
  147. package/dist/assets/{save-CPlctBjT.js → save-DNigywZ9.js} +1 -1
  148. package/dist/assets/search-U9C0oTQJ.js +1 -0
  149. package/dist/assets/search-config-page-Bdx_RR1q.js +1 -0
  150. package/dist/assets/secrets-config-page-CvMIcsfJ.js +3 -0
  151. package/dist/assets/security-config-CQmMqQ8v.js +1 -0
  152. package/dist/assets/select-DxwDeKUR.js +1 -0
  153. package/dist/assets/{sequenceDiagram-DBY2YBRQ-6f_4X16Y.js → sequenceDiagram-DBY2YBRQ-EFD482_y.js} +1 -1
  154. package/dist/assets/service-apps-panel-CiYO1Be4.js +1 -0
  155. package/dist/assets/{settings-2-CrGx9_De.js → settings-2-BrBUdRoY.js} +1 -1
  156. package/dist/assets/{sizeCapture-X5ZJPWSS-Ck9rsuwL.js → sizeCapture-X5ZJPWSS-TDvULTE1.js} +1 -1
  157. package/dist/assets/{src-C8AUg09O.js → src-CI2AvEMj.js} +1 -1
  158. package/dist/assets/{stateDiagram-2N3HPSRC-Cm33MLHu.js → stateDiagram-2N3HPSRC-JdPsIYHo.js} +1 -1
  159. package/dist/assets/stateDiagram-v2-6OUMAXLB-4_aAQfB_.js +1 -0
  160. package/dist/assets/{status-dot-Cb8ewlUr.js → status-dot-BbGsrkIX.js} +1 -1
  161. package/dist/assets/{swimlanes-5IMT3BWC-B107vmvM.js → swimlanes-5IMT3BWC-BnxpKeK_.js} +2 -2
  162. package/dist/assets/swimlanesDiagram-G3AALYLV-wCqfwsw-.js +8 -0
  163. package/dist/assets/tag-chip-BDbxcf6P.js +1 -0
  164. package/dist/assets/theme-provider-D98XGa-c.js +1 -0
  165. package/dist/assets/{timeline-definition-FHXFAJF6-CJEoAj33.js → timeline-definition-FHXFAJF6-2IL22-uC.js} +1 -1
  166. package/dist/assets/trash-2-DwSkRfeB.js +1 -0
  167. package/dist/assets/treeView-QDETBFTQ-BAyOb14Z.js +1 -0
  168. package/dist/assets/treemap-6X3UGDF4-DgPDM0zS.js +1 -0
  169. package/dist/assets/{use-config-BM5jC65L.js → use-config-D3cNzk2k.js} +1 -1
  170. package/dist/assets/{use-desktop-capabilities-ezKJwKqg.js → use-desktop-capabilities-D7odgaTB.js} +1 -1
  171. package/dist/assets/use-viewport-layout-BANU5E1t.js +1 -0
  172. package/dist/assets/{vennDiagram-L72KCM5P-DzsUHk5I.js → vennDiagram-L72KCM5P-Cjf6n5Va.js} +1 -1
  173. package/dist/assets/wardley-OPB4EBWU-eCElh8z5.js +1 -0
  174. package/dist/assets/{wardleyDiagram-EHGQE667-1NfFs5ua.js → wardleyDiagram-EHGQE667-yv4qKbBO.js} +1 -1
  175. package/dist/assets/x-BqGj6_Vq.js +1 -0
  176. package/dist/assets/{xychartDiagram-FW5EYKEG-Ci8AI3Qo.js → xychartDiagram-FW5EYKEG-Bmp8Ck8X.js} +1 -1
  177. package/dist/index.html +43 -106
  178. package/dist/panel-standalone.html +18 -12
  179. package/index.html +15 -66
  180. package/package.json +5 -5
  181. package/src/app/configs/__tests__/app-navigation.config.test.ts +4 -2
  182. package/src/app/configs/app-navigation.config.ts +7 -2
  183. package/src/app/styles/design-system.css +85 -1
  184. package/src/app/styles/island-theme.css +8 -6
  185. package/src/features/agents/components/agent-details-dialog.tsx +5 -3
  186. package/src/features/app-data/components/app-retained-data-section.tsx +2 -2
  187. package/src/features/apps/components/__tests__/app-marketplace-catalog.test.tsx +2 -2
  188. package/src/features/apps/components/__tests__/app-packages-panel.test.tsx +94 -23
  189. package/src/features/apps/components/__tests__/apps-panel.test.tsx +5 -3
  190. package/src/features/apps/components/app-document-access-section.tsx +17 -14
  191. package/src/features/apps/components/app-marketplace-catalog.tsx +66 -39
  192. package/src/features/apps/components/app-marketplace-cover.tsx +5 -2
  193. package/src/features/apps/components/app-marketplace-detail.tsx +9 -6
  194. package/src/features/apps/components/app-marketplace-operation.tsx +8 -3
  195. package/src/features/apps/components/app-marketplace-panel.tsx +168 -0
  196. package/src/features/apps/components/app-package-card.tsx +224 -147
  197. package/src/features/apps/components/app-package-details-dialog.tsx +103 -0
  198. package/src/features/apps/components/app-packages-panel.tsx +159 -144
  199. package/src/features/apps/components/apps-panel.tsx +40 -11
  200. package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +1 -1
  201. package/src/features/chat/components/conversation/chat-conversation-header.tsx +1 -1
  202. package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +2 -2
  203. package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +9 -7
  204. package/src/features/chat/features/conversation/components/floating-session-conversation.tsx +2 -3
  205. package/src/features/chat/features/conversation/components/session-conversation-area.tsx +1 -0
  206. package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-input-state.test.tsx +33 -0
  207. package/src/features/chat/features/message/components/chat-message-list.container.tsx +0 -2
  208. package/src/features/chat/features/message/utils/__tests__/chat-message-process-summary.utils.test.ts +4 -6
  209. package/src/features/chat/features/message/utils/chat-message-execution-summary.utils.ts +3 -0
  210. package/src/features/chat/features/message/utils/chat-message-process-summary.utils.ts +2 -10
  211. package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +2 -0
  212. package/src/features/chat/features/message/utils/chat-message-trigger-details.utils.ts +3 -0
  213. package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +2 -1
  214. package/src/features/chat/features/session/components/session-header/chat-session-metadata-dialog.tsx +1 -1
  215. package/src/features/chat/features/session/components/session-header/chat-session-project-badge.tsx +2 -2
  216. package/src/features/chat/features/welcome/components/__tests__/chat-welcome.test.tsx +31 -6
  217. package/src/features/chat/features/welcome/components/chat-conversation-welcome.tsx +13 -1
  218. package/src/features/chat/features/welcome/components/chat-welcome-agent-picker.tsx +1 -1
  219. package/src/features/chat/features/welcome/components/chat-welcome-project-picker.tsx +1 -1
  220. package/src/features/chat/features/welcome/components/chat-welcome-prompt-suggestions.tsx +56 -13
  221. package/src/features/chat/features/welcome/components/chat-welcome-session-type-picker.tsx +3 -3
  222. package/src/features/chat/features/welcome/components/chat-welcome.tsx +14 -4
  223. package/src/features/chat/features/welcome/utils/__tests__/chat-welcome-continuation.utils.test.ts +40 -0
  224. package/src/features/chat/features/welcome/utils/chat-welcome-continuation.utils.ts +21 -0
  225. package/src/features/chat/features/workspace/components/chat-session-workspace-directory-browser.tsx +1 -1
  226. package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumbs.tsx +5 -9
  227. package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +6 -4
  228. package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +27 -27
  229. package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +1 -1
  230. package/src/features/chat/features/workspace/components/overview/chat-session-continuous-attention.tsx +11 -11
  231. package/src/features/chat/features/workspace/components/overview/chat-session-token-usage.tsx +15 -15
  232. package/src/features/chat/features/workspace/components/project-files/workspace-directory-tree.tsx +2 -2
  233. package/src/features/chat/features/workspace/components/project-files/workspace-new-folder-tree-item.tsx +1 -1
  234. package/src/features/chat/features/workspace/components/project-files/workspace-project-files-toolbar.tsx +2 -2
  235. package/src/features/chat/features/workspace/components/session-cron-job-content.tsx +7 -4
  236. package/src/features/cron/components/cron-job-row.tsx +5 -4
  237. package/src/features/desktop-capabilities/components/desktop-authorization-dialog.tsx +5 -5
  238. package/src/features/inbox/components/inbox-reader-dialog.test.tsx +46 -6
  239. package/src/features/inbox/components/inbox-reader-dialog.tsx +38 -29
  240. package/src/features/inbox/managers/inbox.manager.test.ts +28 -0
  241. package/src/features/inbox/managers/inbox.manager.ts +18 -4
  242. package/src/features/inbox/pages/inbox-page.test.ts +16 -5
  243. package/src/features/inbox/pages/inbox-page.tsx +37 -29
  244. package/src/features/panel-apps/components/panel-app-list-item.tsx +4 -3
  245. package/src/features/panel-apps/components/panel-app-service-action-authorization-dialog.tsx +2 -2
  246. package/src/features/panel-apps/utils/panel-app-doc-browser.utils.tsx +5 -24
  247. package/src/features/projects/components/work/project-work-items.tsx +1 -1
  248. package/src/features/projects/pages/project-home-page.tsx +4 -2
  249. package/src/features/pwa/managers/__tests__/pwa-shell-theme.manager.test.ts +3 -3
  250. package/src/features/pwa/managers/pwa-shell-theme.manager.ts +8 -3
  251. package/src/features/right-panel-resources/components/__tests__/page-resource-icon.test.tsx +13 -2
  252. package/src/features/right-panel-resources/components/page-resource-icon.tsx +15 -7
  253. package/src/features/right-panel-resources/configs/right-panel-resource-routes.config.ts +1 -1
  254. package/src/features/right-panel-resources/index.ts +3 -0
  255. package/src/features/right-panel-resources/utils/__tests__/right-panel-resource-route-resolver.utils.test.ts +5 -0
  256. package/src/features/right-panel-resources/utils/right-panel-resource-uri.utils.ts +3 -2
  257. package/src/features/service-apps/components/service-action-row.tsx +4 -3
  258. package/src/features/service-apps/components/service-app-delete-dialog.tsx +2 -2
  259. package/src/features/service-apps/components/service-app-list-item.tsx +5 -4
  260. package/src/features/settings/components/config/provider-model-suggestions-panel.tsx +1 -1
  261. package/src/features/settings/pages/providers-config-page.tsx +3 -2
  262. package/src/index.css +42 -8
  263. package/src/platforms/mobile/components/__tests__/mobile-app-shell.test.tsx +9 -0
  264. package/src/platforms/mobile/components/mobile-app-shell.tsx +4 -2
  265. package/src/platforms/mobile/components/mobile-topbar.tsx +2 -2
  266. package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +2 -2
  267. package/src/shared/components/path-picker/server-path-picker-dialog.tsx +5 -3
  268. package/src/shared/components/ui/__tests__/dialog.test.tsx +37 -1
  269. package/src/shared/components/ui/actions/action-feedback.ts +1 -8
  270. package/src/shared/components/ui/actions/icon-action-button.tsx +1 -1
  271. package/src/shared/components/ui/confirm-dialog.tsx +1 -2
  272. package/src/shared/components/ui/context-menu/context-menu-items.tsx +2 -2
  273. package/src/shared/components/ui/dialog.tsx +29 -7
  274. package/src/shared/components/ui/popover.tsx +14 -3
  275. package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +5 -5
  276. package/src/shared/components/ui/tooltip.tsx +2 -1
  277. package/src/shared/components/workbench/__tests__/workbench-surface.test.tsx +21 -0
  278. package/src/shared/components/workbench/workbench-surface-toolbar.tsx +4 -0
  279. package/src/shared/components/workbench/workbench-surface.tsx +5 -2
  280. package/src/shared/lib/i18n/locales/en-US/chat.json +14 -9
  281. package/src/shared/lib/i18n/locales/en-US/core.json +5 -1
  282. package/src/shared/lib/i18n/locales/en-US/doc-browser.json +10 -5
  283. package/src/shared/lib/i18n/locales/en-US/inbox.json +1 -0
  284. package/src/shared/lib/i18n/locales/zh-CN/chat.json +14 -9
  285. package/src/shared/lib/i18n/locales/zh-CN/core.json +5 -1
  286. package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +11 -6
  287. package/src/shared/lib/i18n/locales/zh-CN/inbox.json +1 -0
  288. package/src/shared/lib/theme/index.test.ts +28 -1
  289. package/src/shared/lib/theme/index.ts +14 -3
  290. package/dist/assets/account-panel-DVi_jhkG.js +0 -1
  291. package/dist/assets/api-BZvNpFOS.js +0 -20
  292. package/dist/assets/app-presenter-provider-BcYL-VNe.js +0 -124
  293. package/dist/assets/appearance-settings-page-AZNBzLmT.js +0 -1
  294. package/dist/assets/architecture-TIHT7OUA-CvnC-LeA.js +0 -1
  295. package/dist/assets/channel-CpMstUPF.js +0 -1
  296. package/dist/assets/channels-list-page-eZN74FN3.js +0 -8
  297. package/dist/assets/chunk-2Q5K7J3B-Djp3VF0s.js +0 -1
  298. package/dist/assets/chunk-VAUOI2AC-BrbiIC1Q.js +0 -1
  299. package/dist/assets/chunk-XXDRQBXY-Cx9N40wF.js +0 -1
  300. package/dist/assets/classDiagram-OUVF2IWQ-DFN1v3PQ.js +0 -1
  301. package/dist/assets/classDiagram-v2-EOCWNBFH-DRvglADa.js +0 -1
  302. package/dist/assets/config-split-page-BA3V6b3Q.js +0 -1
  303. package/dist/assets/confirm-dialog-8vqYZ0wy.js +0 -1
  304. package/dist/assets/context-menu-DHVVdHzN.js +0 -1
  305. package/dist/assets/cynefin-VYW2F7L2-DXUGnpJH.js +0 -1
  306. package/dist/assets/desktop-update-config-Cfr3IRUe.js +0 -1
  307. package/dist/assets/dialog-BUfWO8hr.js +0 -5
  308. package/dist/assets/doc-browser-w8q1j0jL.js +0 -1
  309. package/dist/assets/es2015-BiB05Sav.js +0 -41
  310. package/dist/assets/eventmodeling-45OFAUF4-ZBfVS3ZC.js +0 -1
  311. package/dist/assets/extensions-vPD4dGqt.js +0 -1
  312. package/dist/assets/eye-bKzylu3p.js +0 -1
  313. package/dist/assets/flowDiagram-23GEKE2U-CqdsKk6x.js +0 -1
  314. package/dist/assets/gitGraph-TEB2WS4Q-fHYFd9Es.js +0 -1
  315. package/dist/assets/info-DKCQHKI2-CSaOL_bb.js +0 -1
  316. package/dist/assets/katex-B4FQSo9k.js +0 -1
  317. package/dist/assets/loader-circle-Clq1Gtb1.js +0 -1
  318. package/dist/assets/login-page-DKId3By8.js +0 -1
  319. package/dist/assets/main-bEWCGDHr.js +0 -2
  320. package/dist/assets/main-i18n-catalog.config-Bpu5GcwF.js +0 -1
  321. package/dist/assets/main-kqMRTwOs.css +0 -1
  322. package/dist/assets/mcp-marketplace-page-CZIP6j3L.js +0 -1
  323. package/dist/assets/model-config-page-D21a-BO0.js +0 -1
  324. package/dist/assets/packet-7NZHBO7P-D-YFTczs.js +0 -1
  325. package/dist/assets/panel-app-BYfQu_TS.js +0 -1
  326. package/dist/assets/panel-app-i18n-catalog.config-D44qmtfk.js +0 -1
  327. package/dist/assets/panelStandalone-BRg7B1EI.css +0 -1
  328. package/dist/assets/panelStandalone-CX8X2hjh.js +0 -2
  329. package/dist/assets/pie-RZYD4A2V-VEnYu9s5.js +0 -1
  330. package/dist/assets/privacy-settings-page-e0LFHZJm.js +0 -1
  331. package/dist/assets/projects-Rki7Fmth.js +0 -1
  332. package/dist/assets/provider-models-DFQgF4hS.js +0 -1
  333. package/dist/assets/provider-scoped-model-input-DaONL0j_.js +0 -1
  334. package/dist/assets/providers-config-page-CEOhQlMe.js +0 -1
  335. package/dist/assets/puzzle-D_TiFXOv.js +0 -1
  336. package/dist/assets/pwa-C9ac_1dg.js +0 -1
  337. package/dist/assets/radar-I7S5WNFK-BFNIekC1.js +0 -1
  338. package/dist/assets/railroad-3IZDKUUU-lVqJ3Hak.js +0 -1
  339. package/dist/assets/railroad-abnf-AHOZXSZD-DYaefdFC.js +0 -1
  340. package/dist/assets/railroad-ebnf-EBAXGLYW-CTAk6lVq.js +0 -1
  341. package/dist/assets/railroad-peg-LSFZ7HO6-Cob294tg.js +0 -1
  342. package/dist/assets/remote-DkSx5x4R.js +0 -1
  343. package/dist/assets/runtime-config-page-DDT1dVLt.js +0 -1
  344. package/dist/assets/search-config-page-CDwmd6eX.js +0 -1
  345. package/dist/assets/secrets-config-page-1OvgmwPv.js +0 -3
  346. package/dist/assets/security-config-Pv4CM-kw.js +0 -1
  347. package/dist/assets/select-Y9IEbx9x.js +0 -1
  348. package/dist/assets/service-apps-panel-DPrLeF3N.js +0 -1
  349. package/dist/assets/stateDiagram-v2-6OUMAXLB-BrNv-raG.js +0 -1
  350. package/dist/assets/swimlanesDiagram-G3AALYLV-ntcxaPXp.js +0 -8
  351. package/dist/assets/tag-chip-D-6aPuuh.js +0 -1
  352. package/dist/assets/theme-provider-BjF1Eowc.js +0 -1
  353. package/dist/assets/trash-2-DER2EJKK.js +0 -1
  354. package/dist/assets/treeView-QDETBFTQ-DbFmr-gw.js +0 -1
  355. package/dist/assets/treemap-6X3UGDF4-C8aY96pi.js +0 -1
  356. package/dist/assets/use-viewport-layout-vmbQUNT6.js +0 -1
  357. package/dist/assets/wardley-OPB4EBWU-D8d6DbbJ.js +0 -1
  358. package/dist/assets/x-DSz9cGhy.js +0 -1
  359. package/src/features/apps/components/app-marketplace-dialog.tsx +0 -168
  360. /package/dist/assets/{array-BV9OtnO8.js → array-DstOKG9P.js} +0 -0
  361. /package/dist/assets/{chunk-KEIR6QF5-Cx-8EJ4_.js → chunk-KEIR6QF5-0TA8nwgf.js} +0 -0
  362. /package/dist/assets/{chunk-Y2CYZVJY-Dy1ufvjf.js → chunk-Y2CYZVJY-rfGCG6pM.js} +0 -0
  363. /package/dist/assets/{config-hints-DbmiyTKg.js → config-hints-BfGoD7-o.js} +0 -0
  364. /package/dist/assets/{cytoscape.esm-CSCjuT4Z.js → cytoscape.esm-DdIcNEda.js} +0 -0
  365. /package/dist/assets/{defaultLocale-DWTiNsbT.js → defaultLocale-CzXix2iJ.js} +0 -0
  366. /package/dist/assets/{dist-BVCSkfWY.js → dist-D5dwMwKA.js} +0 -0
  367. /package/dist/assets/{graphlib-B1yb1Wl8.js → graphlib-BKOe0eFe.js} +0 -0
  368. /package/dist/assets/{host-capabilities-DuIFVsvM.js → host-capabilities-CnSVTaot.js} +0 -0
  369. /package/dist/assets/{init-BF6GH5oe.js → init-OCFb3zgY.js} +0 -0
  370. /package/dist/assets/{jszip.min-D12teKzP.js → jszip.min-B2uhSxvV.js} +0 -0
  371. /package/dist/assets/{katex-CsAM73R9.js → katex-dBrYsE7B.js} +0 -0
  372. /package/dist/assets/{middleware-B--6mAUM.js → middleware-CAXxl-af.js} +0 -0
  373. /package/dist/assets/{path-C56XkznJ.js → path-T5eoIRSJ.js} +0 -0
  374. /package/dist/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
  375. /package/dist/assets/{rough.esm-CGfeEbtE.js → rough.esm-DmGXmZEB.js} +0 -0
  376. /package/dist/assets/{xlsx-sds5nUpL.js → xlsx-CoYacou7.js} +0 -0
@@ -21,8 +21,11 @@ const PopoverAnchor = PopoverPrimitive.Anchor;
21
21
 
22
22
  const PopoverContent = React.forwardRef<
23
23
  React.ElementRef<typeof PopoverPrimitive.Content>,
24
- React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & { variant?: 'default' | 'menu' }
25
- >(({ className, variant = 'default', sideOffset = 8, align = 'start', collisionPadding = 12, style, ...props }, ref) => (
24
+ React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {
25
+ variant?: 'default' | 'menu';
26
+ matchTriggerWidth?: boolean;
27
+ }
28
+ >(({ className, variant = 'default', matchTriggerWidth = false, sideOffset = 8, align = 'start', collisionPadding = 12, style, ...props }, ref) => (
26
29
  <PopoverPrimitive.Portal>
27
30
  <PopoverPrimitive.Content
28
31
  ref={ref}
@@ -35,7 +38,15 @@ const PopoverContent = React.forwardRef<
35
38
  className,
36
39
  variant === 'menu' && CONTEXT_MENU_SURFACE_CLASS
37
40
  )}
38
- style={{ maxHeight: POPOVER_CONTENT_MAX_HEIGHT, ...style }}
41
+ style={{
42
+ maxHeight: POPOVER_CONTENT_MAX_HEIGHT,
43
+ ...(matchTriggerWidth && {
44
+ width: 'var(--radix-popover-trigger-width)',
45
+ minWidth: 0,
46
+ maxWidth: 'var(--radix-popover-content-available-width)',
47
+ }),
48
+ ...style,
49
+ }}
39
50
  {...props}
40
51
  onEscapeKeyDown={(event) => {
41
52
  if (!deferEscapeToNestedMenu(event)) props.onEscapeKeyDown?.(event);
@@ -204,7 +204,7 @@ function CompactTabLabelButton({
204
204
  <TooltipProvider delayDuration={250}>
205
205
  <Tooltip>
206
206
  <TooltipTrigger asChild>{button}</TooltipTrigger>
207
- <TooltipContent side="bottom" className="text-xs">
207
+ <TooltipContent className="text-xs">
208
208
  {tooltip}
209
209
  </TooltipContent>
210
210
  </Tooltip>
@@ -233,12 +233,12 @@ function CompactTabItem({
233
233
  onClick={(event) => event.target === event.currentTarget && tab.onSelect()}
234
234
  className={cn(
235
235
  tabBaseClassName ??
236
- "flex max-w-[180px] cursor-pointer items-center gap-1.5 border-r border-gray-200/70 border-b-2 px-2.5 py-2 transition-colors",
236
+ "flex h-8 max-w-[180px] cursor-pointer items-center gap-1.5 border-r border-border/50 px-2.5 transition-colors",
237
237
  "group relative",
238
238
  tab.active
239
- ? (activeTabClassName ?? "border-b-primary bg-[var(--interaction-selection)] text-foreground")
239
+ ? (activeTabClassName ?? "bg-background text-foreground")
240
240
  : (inactiveTabClassName ??
241
- "border-b-transparent bg-transparent text-muted-foreground hover:bg-[var(--interaction-hover)]"),
241
+ "bg-transparent text-muted-foreground hover:bg-[var(--interaction-hover)]"),
242
242
  )}
243
243
  >
244
244
  <CompactTabLabelButton tab={tab} labelClassName={labelClassName} />
@@ -287,7 +287,7 @@ export function CompactTabStrip({
287
287
  >
288
288
  <div
289
289
  className={cn(
290
- "flex min-w-0 flex-1 items-stretch overflow-x-auto overflow-y-hidden",
290
+ "compact-tab-scrollbar flex min-w-0 flex-1 items-stretch overflow-x-auto overflow-y-hidden",
291
291
  scrollClassName,
292
292
  )}
293
293
  onPointerDown={onScrollPointerDown}
@@ -27,12 +27,13 @@ TooltipTrigger.displayName = TooltipPrimitive.Trigger.displayName;
27
27
  const TooltipContent = React.forwardRef<
28
28
  React.ElementRef<typeof TooltipPrimitive.Content>,
29
29
  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
30
- >(({ className, sideOffset = 4, ...props }, ref) => (
30
+ >(({ className, side = 'top', sideOffset = 4, ...props }, ref) => (
31
31
  <TooltipPrimitive.Portal>
32
32
  <TooltipPrimitive.Content
33
33
  ref={ref}
34
34
  data-theme-overlay="tooltip"
35
35
  sideOffset={sideOffset}
36
+ side={side}
36
37
  className={cn(
37
38
  'z-[var(--z-tooltip,10150)] overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
38
39
  className
@@ -13,6 +13,27 @@ beforeEach(() => {
13
13
  });
14
14
  });
15
15
 
16
+ it("keeps more actions immediately before close across window states", () => {
17
+ render(<WorkbenchSurface id="resource" manager={manager} title="A long session title"
18
+ onClose={vi.fn()} onOpenMain={vi.fn()} moreActions={<button>More actions</button>}>
19
+ <textarea aria-label="Draft" />
20
+ </WorkbenchSurface>);
21
+ const assertOrder = () => {
22
+ const toolbar = screen.getByRole("button", { name: "More actions" }).parentElement!;
23
+ const buttons = within(toolbar).getAllByRole("button");
24
+ expect(buttons.slice(-2).map((button) => button.getAttribute("aria-label") || button.textContent))
25
+ .toEqual(["More actions", "Close view"]);
26
+ };
27
+ assertOrder();
28
+ fireEvent.click(screen.getByRole("button", { name: "Float view group" }));
29
+ assertOrder();
30
+ fireEvent.click(screen.getByRole("button", { name: "Collapse view" }));
31
+ assertOrder();
32
+ fireEvent.click(screen.getByRole("button", { name: "Expand view" }));
33
+ expect(screen.getByTitle("A long session title")).toBeTruthy();
34
+ assertOrder();
35
+ });
36
+
16
37
  it("retains the exact input and iframe nodes through every presentation transition and hiding", () => {
17
38
  const props = {
18
39
  id: "resource",
@@ -7,6 +7,7 @@ import {
7
7
  PictureInPicture2,
8
8
  X,
9
9
  } from "lucide-react";
10
+ import type { ReactNode } from "react";
10
11
  import { IconActionButton, IconActionGroup } from "@/shared/components/ui/actions/icon-action-button";
11
12
  import { t } from "@/shared/lib/i18n";
12
13
  import type { WorkbenchSurfaceState } from "./types/workbench-surface.types";
@@ -21,6 +22,7 @@ export function WorkbenchSurfaceToolbar({
21
22
  onClose,
22
23
  closeLabel,
23
24
  onOpenMain,
25
+ moreActions,
24
26
  }: {
25
27
  state: WorkbenchSurfaceState;
26
28
  compact: boolean;
@@ -31,6 +33,7 @@ export function WorkbenchSurfaceToolbar({
31
33
  onClose: () => void;
32
34
  closeLabel: string;
33
35
  onOpenMain?: () => void;
36
+ moreActions?: ReactNode;
34
37
  }) {
35
38
  return (
36
39
  <IconActionGroup
@@ -90,6 +93,7 @@ export function WorkbenchSurfaceToolbar({
90
93
  onClick={onMaximize}
91
94
  />
92
95
  )}
96
+ {moreActions}
93
97
  <IconActionButton
94
98
  size="sm"
95
99
  icon={<X className="h-4 w-4" />}
@@ -22,6 +22,7 @@ type WorkbenchSurfaceProps = {
22
22
  title: string;
23
23
  children: ReactNode;
24
24
  navigation?: ReactNode;
25
+ moreActions?: ReactNode;
25
26
  icon?: ReactNode;
26
27
  onClose: () => void;
27
28
  closeLabel?: string;
@@ -67,6 +68,7 @@ export function WorkbenchSurface({
67
68
  title,
68
69
  icon,
69
70
  navigation,
71
+ moreActions,
70
72
  children,
71
73
  onClose,
72
74
  closeLabel = t("workbenchCloseView"),
@@ -265,7 +267,7 @@ export function WorkbenchSurface({
265
267
  }}
266
268
  >
267
269
  <header
268
- className="flex min-h-10 shrink-0 select-none items-center gap-1 border-b border-border/60 bg-muted/30 px-2"
270
+ className={cn("flex shrink-0 select-none items-center gap-1 border-b border-border/60 bg-muted/30 pr-2", navigation && !state.minimized ? "min-h-8 pl-0" : "min-h-10 pl-2")}
269
271
  style={{ touchAction: floating ? "none" : undefined, paddingTop: isCompact ? "env(safe-area-inset-top, 0px)" : undefined }}
270
272
  onPointerDown={(event) => startInteraction(event)}
271
273
  onDoubleClick={(event) => {
@@ -290,7 +292,7 @@ export function WorkbenchSurface({
290
292
  )}
291
293
  >
292
294
  {icon}
293
- <span className="truncate">{title}</span>
295
+ <span className="truncate" title={title}>{title}</span>
294
296
  </span>
295
297
  <WorkbenchSurfaceToolbar
296
298
  state={state}
@@ -308,6 +310,7 @@ export function WorkbenchSurface({
308
310
  onClose={close}
309
311
  closeLabel={closeLabel}
310
312
  onOpenMain={onOpenMain}
313
+ moreActions={moreActions}
311
314
  />
312
315
  </header>
313
316
  <div
@@ -282,8 +282,6 @@
282
282
  "chatHistoryLoadFailed": "Couldn’t load earlier messages",
283
283
  "chatHistoryRetry": "Retry",
284
284
  "chatProcessSummaryProcessed": "Processed",
285
- "chatProcessSummaryError": "Failed",
286
- "chatProcessSummaryStopped": "Stopped",
287
285
  "chatProcessDurationHoursMinutes": "{hours}h {minutes}m",
288
286
  "chatProcessDurationHours": "{hours}h",
289
287
  "chatProcessDurationMinutesSeconds": "{minutes}m {seconds}s",
@@ -364,7 +362,7 @@
364
362
  "chatRuntimeInitializationFailed": "Chat startup failed. Please retry in a moment or inspect the service logs.",
365
363
  "chatInputPlaceholder": "Type a message, / for commands, apps or skills, @ for files, folders, projects or panel apps, Enter to send, Shift + Enter for newline",
366
364
  "chatInputPlaceholderCompact": "Message NextClaw...",
367
- "chatWelcomeInputPlaceholder": "Describe what you want to get done…",
365
+ "chatWelcomeInputPlaceholder": "Share what you want to do, or what’s on your mind…",
368
366
  "chatInputHint": "Multi-turn context is preserved in the current session.",
369
367
  "chatSlashSection": "Slash menu",
370
368
  "chatSlashSectionCommands": "Commands",
@@ -610,6 +608,8 @@
610
608
  "chatMessageCopy": "Copy",
611
609
  "chatMessageCopied": "Copied",
612
610
  "chatMermaidDiagram": "Diagram",
611
+ "chatMarkdownFrontmatter": "Document properties",
612
+ "chatMarkdownDetails": "Details",
613
613
  "chatMermaidExpand": "Expand diagram",
614
614
  "chatMermaidLoading": "Rendering diagram…",
615
615
  "chatMermaidRenderError": "Diagram could not be rendered; showing source instead",
@@ -654,7 +654,7 @@
654
654
  "chatPanelDock": "Dock to right sidebar",
655
655
  "chatPanelOpen": "Chat in right sidebar",
656
656
  "chatPanelUnavailable": "This conversation cannot be opened. Open it again from the conversation list.",
657
- "chatWelcomeTitle": "What would you like to get done?",
657
+ "chatWelcomeTitle": "Where shall we start today?",
658
658
  "chatWelcomeContextLabel": "Task context",
659
659
  "chatWelcomeProjectPickerLabel": "Choose working directory",
660
660
  "chatWelcomeProjectPickerPlaceholder": "Choose working directory",
@@ -663,12 +663,17 @@
663
663
  "chatWelcomeProjectNoRecent": "No recent projects yet",
664
664
  "chatWelcomeProjectOpenFolder": "Open folder",
665
665
  "chatWelcomeSessionTypePickerLabel": "Choose session type",
666
- "chatWelcomeSuggestion1Label": "Review this project",
666
+ "chatWelcomeSuggestion1Label": "Move this project forward",
667
+ "chatWelcomeContinueLabel": "Pick up where you left off",
668
+ "chatWelcomeContinueHint": "Return to the original conversation with its context",
669
+ "chatWelcomeDismissContinue": "Hide this conversation suggestion for now",
670
+ "chatWelcomeOpenStartLabel": "Talk about how I’ve been",
671
+ "chatWelcomeOpenStartPrompt": "I'd like to talk about how things have been lately. Listen to what I have been experiencing and what matters to me. We can take our time without rushing into advice or a task list.",
667
672
  "chatWelcomeSuggestion1Prompt": "Help me understand this project and propose the next three concrete things we should build.",
668
- "chatWelcomeSuggestion2Label": "Find useful skills",
669
- "chatWelcomeSuggestion2Prompt": "Review the skills that would be useful for this project and recommend which ones I should enable first.",
670
- "chatWelcomeSuggestion3Label": "Create a scheduled task",
671
- "chatWelcomeSuggestion3Prompt": "Help me design a scheduled automation for this project, including the trigger, message, and safety checks.",
673
+ "chatWelcomeSuggestion2Label": "Help me think through an idea",
674
+ "chatWelcomeSuggestion2Prompt": "I have an idea that is still taking shape. Hear me out, then help me explore its possibilities, open questions, and potential directions.",
675
+ "chatWelcomeSuggestion3Label": "Start something together",
676
+ "chatWelcomeSuggestion3Prompt": "There is something I would like us to work on together. Let me explain what I have in mind and what materials I have, then we can decide where to begin.",
672
677
  "chatSkillsPickerTitle": "Skills",
673
678
  "chatSkillsPickerEmpty": "No skills installed",
674
679
  "chatSkillsPickerSearchPlaceholder": "Search skills",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "close": "Close",
2
3
  "refresh": "Refresh",
3
4
  "chat": "Chat",
4
5
  "model": "Model",
@@ -100,7 +101,10 @@
100
101
  "language": "Language",
101
102
  "theme": "Theme",
102
103
  "themeNatural": "Natural",
103
- "themeWork": "Default",
104
+ "themeDefault": "Default",
105
+ "themePaperInk": "Paper & Ink",
106
+ "themePlainPaper": "Plain Paper",
107
+ "themeWork": "Soft White",
104
108
  "themeMinimal": "Minimal",
105
109
  "themeWarm": "Paper",
106
110
  "themeCool": "Mist",
@@ -38,9 +38,13 @@
38
38
  "appPackagesNoDataYet": "No data yet",
39
39
  "appPackagesLoadFailed": "Failed to load apps",
40
40
  "appPackagesRefresh": "Refresh apps",
41
+ "appPackagesOpen": "Open",
42
+ "appPackagesDetails": "App details",
43
+ "appPackagesMarketplaceSource": "Browse app marketplace",
44
+ "appPackagesCustomSource": "Install from a source",
41
45
  "appPackagesBrowse": "Add apps",
42
- "appPackagesMarketplaceTitle": "Add apps",
43
- "appPackagesMarketplaceDescription": "Choose apps that fit the way you use NextClaw. You can keep browsing or leave while an install continues.",
46
+ "appPackagesMarketplaceTitle": "App marketplace",
47
+ "appPackagesMarketplaceDescription": "Discover apps that make your everyday work easier.",
44
48
  "appPackagesMarketplaceSearch": "Search apps, features, or tags",
45
49
  "appPackagesMarketplaceLoading": "Loading the app marketplace…",
46
50
  "appPackagesMarketplaceLoadMore": "Load more",
@@ -75,7 +79,6 @@
75
79
  "appPackagesAllPlatforms": "All platforms",
76
80
  "appPackagesPlatformOnly": "{platforms} only",
77
81
  "appPackagesUnavailableOnDevice": "Unavailable on this device",
78
- "appPackagesUnavailable": "Unavailable",
79
82
  "appPackagesTemporarilyUnavailable": "Temporarily unavailable",
80
83
  "appPackagesCompatibilityUnknown": "Compatibility could not be confirmed",
81
84
  "appPackagesCompatibilityUnknownReason": "NextClaw could not confirm whether this app supports this device. Refresh and try again.",
@@ -104,7 +107,7 @@
104
107
  "appPackagesFilterAll": "All",
105
108
  "appPackagesFilterPersonal": "Personal",
106
109
  "appPackagesFilterLocal": "Local-first",
107
- "appPackagesBackToMarketplace": "Back to apps",
110
+ "appPackagesBackToMarketplace": "Back to marketplace",
108
111
  "appPackagesAboutApp": "About this app",
109
112
  "appPackagesPanelsAdded": "App views",
110
113
  "appPackagesServicesAdded": "Local services",
@@ -211,5 +214,7 @@
211
214
  "appPackagesDocumentAccessChooseDescription": "Choose the folder this app may access.",
212
215
  "appPackagesDocumentAccessPath": "Granted folder",
213
216
  "appPackagesDocumentAccessWriteWarning": "Read and write access lets this app modify the original files in this folder. You can revoke it from the app card at any time.",
214
- "appPackagesDocumentAccessReadHint": "Read-only access lets this app view the folder but not modify files through this mount."
217
+ "appPackagesDocumentAccessReadHint": "Read-only access lets this app view the folder but not modify files through this mount.",
218
+ "appPackagesViewInstalled": "View installed",
219
+ "appPackagesClearSearch": "Clear search"
215
220
  }
@@ -20,6 +20,7 @@
20
20
  "inboxRestore": "Restore",
21
21
  "inboxDelete": "Delete",
22
22
  "inboxContinueChat": "Continue in chat",
23
+ "inboxContinueChatCompact": "Continue",
23
24
  "inboxDeleteTitle": "Delete this item?",
24
25
  "inboxDeleteDescription": "It cannot be recovered from Inbox. Any chat already created will remain.",
25
26
  "inboxDeleteConfirm": "Delete",
@@ -282,8 +282,6 @@
282
282
  "chatHistoryLoadFailed": "较早消息加载失败",
283
283
  "chatHistoryRetry": "重试",
284
284
  "chatProcessSummaryProcessed": "已处理",
285
- "chatProcessSummaryError": "处理失败",
286
- "chatProcessSummaryStopped": "已停止",
287
285
  "chatProcessDurationHoursMinutes": "{hours}小时{minutes}分钟",
288
286
  "chatProcessDurationHours": "{hours}小时",
289
287
  "chatProcessDurationMinutesSeconds": "{minutes}分钟{seconds}秒",
@@ -364,7 +362,7 @@
364
362
  "chatRuntimeInitializationFailed": "聊天能力启动失败,请稍后重试或检查服务日志。",
365
363
  "chatInputPlaceholder": "输入消息,/ 选命令、应用或技能,@ 引用文件、文件夹、项目或面板应用,Enter 发送,Shift + Enter 换行",
366
364
  "chatInputPlaceholderCompact": "发消息...",
367
- "chatWelcomeInputPlaceholder": "描述你想完成的目标……",
365
+ "chatWelcomeInputPlaceholder": "说说你想做的事,或正在想的问题……",
368
366
  "chatInputHint": "支持多轮上下文,默认走当前会话。",
369
367
  "chatSlashSection": "斜杠菜单",
370
368
  "chatSlashSectionCommands": "命令",
@@ -610,6 +608,8 @@
610
608
  "chatMessageCopy": "复制",
611
609
  "chatMessageCopied": "已复制",
612
610
  "chatMermaidDiagram": "图表",
611
+ "chatMarkdownFrontmatter": "文档属性",
612
+ "chatMarkdownDetails": "详细内容",
613
613
  "chatMermaidExpand": "放大图表",
614
614
  "chatMermaidLoading": "正在渲染图表…",
615
615
  "chatMermaidRenderError": "图表无法渲染,已显示源代码",
@@ -654,7 +654,7 @@
654
654
  "chatPanelDock": "停靠到右侧栏",
655
655
  "chatPanelOpen": "在右侧栏中对话",
656
656
  "chatPanelUnavailable": "无法打开此会话,请从会话列表重新打开。",
657
- "chatWelcomeTitle": "今天想完成什么?",
657
+ "chatWelcomeTitle": "今天,想从哪里开始?",
658
658
  "chatWelcomeContextLabel": "任务上下文",
659
659
  "chatWelcomeProjectPickerLabel": "选择工作目录",
660
660
  "chatWelcomeProjectPickerPlaceholder": "选择工作目录",
@@ -663,12 +663,17 @@
663
663
  "chatWelcomeProjectNoRecent": "暂无最近项目",
664
664
  "chatWelcomeProjectOpenFolder": "打开文件夹",
665
665
  "chatWelcomeSessionTypePickerLabel": "选择会话类型",
666
- "chatWelcomeSuggestion1Label": "梳理当前项目",
666
+ "chatWelcomeContinueLabel": "接着上次的话题",
667
+ "chatWelcomeContinueHint": "回到原会话,接着之前的上下文继续",
668
+ "chatWelcomeDismissContinue": "暂时收起这条会话建议",
669
+ "chatWelcomeOpenStartLabel": "聊聊我最近的状态",
670
+ "chatWelcomeOpenStartPrompt": "想和你聊聊最近的近况。先听听我最近在经历什么、在意什么,我们慢慢聊,不用急着给建议或安排任务。",
671
+ "chatWelcomeSuggestion1Label": "推进这个项目",
667
672
  "chatWelcomeSuggestion1Prompt": "帮我理解当前项目,并给出接下来最值得推进的三个具体建设方向。",
668
- "chatWelcomeSuggestion2Label": "推荐实用技能",
669
- "chatWelcomeSuggestion2Prompt": "帮我看看这个项目适合启用哪些技能,并推荐我优先配置哪些能力。",
670
- "chatWelcomeSuggestion3Label": "创建定时任务",
671
- "chatWelcomeSuggestion3Prompt": "帮我设计一个适合当前项目的定时自动化任务,包括触发条件、消息内容和安全检查。",
673
+ "chatWelcomeSuggestion2Label": "帮我理清一个想法",
674
+ "chatWelcomeSuggestion2Prompt": "我有个还没想成熟的想法,想和你一起讨论。先听我说,再帮我看看其中的机会、疑问和可能的方向。",
675
+ "chatWelcomeSuggestion3Label": "一起开始做一件事",
676
+ "chatWelcomeSuggestion3Prompt": "有件事想和你一起做。先让我说说想做什么、目前有什么材料,再一起确定从哪里开始。",
672
677
  "chatSkillsPickerTitle": "技能",
673
678
  "chatSkillsPickerEmpty": "暂无已安装技能",
674
679
  "chatSkillsPickerSearchPlaceholder": "搜索技能",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "close": "关闭",
2
3
  "refresh": "刷新",
3
4
  "chat": "对话",
4
5
  "model": "模型",
@@ -100,7 +101,10 @@
100
101
  "language": "语言",
101
102
  "theme": "主题",
102
103
  "themeNatural": "自然",
103
- "themeWork": "默认",
104
+ "themeDefault": "默认",
105
+ "themePaperInk": "纸墨",
106
+ "themePlainPaper": "素笺",
107
+ "themeWork": "素白",
104
108
  "themeMinimal": "简白",
105
109
  "themeWarm": "纸暖",
106
110
  "themeCool": "雾蓝",
@@ -38,9 +38,13 @@
38
38
  "appPackagesNoDataYet": "尚无数据",
39
39
  "appPackagesLoadFailed": "应用加载失败",
40
40
  "appPackagesRefresh": "刷新应用",
41
+ "appPackagesOpen": "打开",
42
+ "appPackagesDetails": "应用详情",
43
+ "appPackagesMarketplaceSource": "浏览应用市场",
44
+ "appPackagesCustomSource": "从指定来源安装",
41
45
  "appPackagesBrowse": "添加应用",
42
- "appPackagesMarketplaceTitle": "添加应用",
43
- "appPackagesMarketplaceDescription": "挑选适合自己的应用。开始安装后,你可以继续浏览或直接离开这里。",
46
+ "appPackagesMarketplaceTitle": "应用市场",
47
+ "appPackagesMarketplaceDescription": "发现适合你的应用,让日常工作更顺手。",
44
48
  "appPackagesMarketplaceSearch": "搜索应用、功能或标签",
45
49
  "appPackagesMarketplaceLoading": "正在加载应用市场…",
46
50
  "appPackagesMarketplaceLoadMore": "加载更多",
@@ -62,7 +66,7 @@
62
66
  "appPackagesEmptyTitle": "还没有可用应用",
63
67
  "appPackagesEmptyDescription": "安装一个 Mini APP,或升级到包含内置应用的 NextClaw 版本。",
64
68
  "appPackagesEnabled": "已启用",
65
- "appPackagesUnavailable": "不可用",
69
+ "appPackagesUnavailable": "无法安装",
66
70
  "appPackagesAvailable": "可用",
67
71
  "appPackagesNeedsCapability": "需要额外能力",
68
72
  "appPackagesNeedsConfiguration": "需要完成设置",
@@ -75,7 +79,6 @@
75
79
  "appPackagesAllPlatforms": "全部平台",
76
80
  "appPackagesPlatformOnly": "仅支持 {platforms}",
77
81
  "appPackagesUnavailableOnDevice": "这台设备无法安装",
78
- "appPackagesUnavailable": "无法安装",
79
82
  "appPackagesTemporarilyUnavailable": "暂无法安装",
80
83
  "appPackagesCompatibilityUnknown": "暂时无法确认兼容性",
81
84
  "appPackagesCompatibilityUnknownReason": "NextClaw 暂时无法确认这台设备是否支持此应用,请刷新后再试。",
@@ -104,7 +107,7 @@
104
107
  "appPackagesFilterAll": "全部",
105
108
  "appPackagesFilterPersonal": "个人",
106
109
  "appPackagesFilterLocal": "本地优先",
107
- "appPackagesBackToMarketplace": "返回应用列表",
110
+ "appPackagesBackToMarketplace": "返回应用市场",
108
111
  "appPackagesAboutApp": "关于这个应用",
109
112
  "appPackagesPanelsAdded": "可打开的界面",
110
113
  "appPackagesServicesAdded": "本机服务",
@@ -211,5 +214,7 @@
211
214
  "appPackagesDocumentAccessChooseDescription": "选择此应用可以访问的目录。",
212
215
  "appPackagesDocumentAccessPath": "授权目录",
213
216
  "appPackagesDocumentAccessWriteWarning": "读写授权允许应用直接修改这个目录中的原始文件;你可以随时在应用卡片中撤销。",
214
- "appPackagesDocumentAccessReadHint": "只读授权允许应用查看这个目录,但不能通过此挂载修改文件。"
217
+ "appPackagesDocumentAccessReadHint": "只读授权允许应用查看这个目录,但不能通过此挂载修改文件。",
218
+ "appPackagesViewInstalled": "查看已安装",
219
+ "appPackagesClearSearch": "清除搜索"
215
220
  }
@@ -20,6 +20,7 @@
20
20
  "inboxRestore": "恢复",
21
21
  "inboxDelete": "删除",
22
22
  "inboxContinueChat": "继续聊",
23
+ "inboxContinueChatCompact": "继续聊",
23
24
  "inboxDeleteTitle": "删除这项内容?",
24
25
  "inboxDeleteDescription": "删除后将无法从收件箱恢复,但已经创建的会话不会被删除。",
25
26
  "inboxDeleteConfirm": "删除",
@@ -4,6 +4,8 @@ import {
4
4
  getThemeAppearance,
5
5
  normalizeTheme,
6
6
  resolveInitialTheme,
7
+ resolveTheme,
8
+ setTheme,
7
9
  THEME_OPTIONS,
8
10
  } from './index';
9
11
 
@@ -13,7 +15,7 @@ describe('ui theme defaults', () => {
13
15
  });
14
16
 
15
17
  it('uses the default theme when no preference is saved', () => {
16
- expect(DEFAULT_UI_THEME).toBe('work');
18
+ expect(DEFAULT_UI_THEME).toBe('default');
17
19
  expect(resolveInitialTheme()).toBe(DEFAULT_UI_THEME);
18
20
  });
19
21
 
@@ -21,6 +23,31 @@ describe('ui theme defaults', () => {
21
23
  expect(THEME_OPTIONS[0]?.value).toBe(DEFAULT_UI_THEME);
22
24
  });
23
25
 
26
+ it('renders the alias identically while preserving the selected preference', () => {
27
+ setTheme('work');
28
+ setTheme('default');
29
+ expect(document.documentElement.getAttribute('data-theme')).toBe('plain-paper');
30
+ expect(window.localStorage.getItem('nextclaw.ui.theme')).toBe('default');
31
+ expect(resolveInitialTheme()).toBe('default');
32
+ setTheme('plain-paper');
33
+ expect(document.documentElement.getAttribute('data-theme')).toBe('plain-paper');
34
+ expect(window.localStorage.getItem('nextclaw.ui.theme')).toBe('plain-paper');
35
+ expect(resolveTheme('default')).toBe('plain-paper');
36
+ });
37
+
38
+ it('keeps paper ink available independently of the default', () => {
39
+ setTheme('paper-ink');
40
+ expect(document.documentElement.getAttribute('data-theme')).toBe('paper-ink');
41
+ expect(resolveInitialTheme()).toBe('paper-ink');
42
+ expect(THEME_OPTIONS).toContainEqual({ value: 'paper-ink', labelKey: 'themePaperInk' });
43
+ });
44
+
45
+ it('preserves the old default as a named theme', () => {
46
+ window.localStorage.setItem('nextclaw.ui.theme', 'work');
47
+ expect(resolveInitialTheme()).toBe('work');
48
+ expect(THEME_OPTIONS).toContainEqual({ value: 'work', labelKey: 'themeWork' });
49
+ });
50
+
24
51
  it('recognizes charcoal as a dark theme', () => {
25
52
  expect(normalizeTheme('charcoal')).toBe('charcoal');
26
53
  expect(getThemeAppearance('charcoal')).toBe('dark');
@@ -1,4 +1,7 @@
1
1
  export type UiTheme =
2
+ | 'default'
3
+ | 'paper-ink'
4
+ | 'plain-paper'
2
5
  | 'natural'
3
6
  | 'work'
4
7
  | 'minimal'
@@ -19,9 +22,17 @@ type UiThemeDefinition = {
19
22
  };
20
23
 
21
24
  const THEME_STORAGE_KEY = 'nextclaw.ui.theme';
22
- export const DEFAULT_UI_THEME: UiTheme = 'work';
25
+ export const DEFAULT_UI_THEME: UiTheme = 'default';
26
+ export const DEFAULT_THEME_TARGET = 'plain-paper';
27
+
28
+ export function resolveTheme(theme: UiTheme): Exclude<UiTheme, 'default'> {
29
+ return theme === 'default' ? DEFAULT_THEME_TARGET : theme;
30
+ }
23
31
 
24
32
  const THEME_DEFINITIONS: readonly UiThemeDefinition[] = [
33
+ { value: 'default', labelKey: 'themeDefault', appearance: 'light' },
34
+ { value: 'plain-paper', labelKey: 'themePlainPaper', appearance: 'light' },
35
+ { value: 'paper-ink', labelKey: 'themePaperInk', appearance: 'light' },
25
36
  { value: 'work', labelKey: 'themeWork', appearance: 'light' },
26
37
  { value: 'night', labelKey: 'themeNight', appearance: 'dark' },
27
38
  { value: 'charcoal', labelKey: 'themeCharcoal', appearance: 'dark' },
@@ -59,7 +70,7 @@ export function normalizeTheme(value: unknown): UiTheme | null {
59
70
 
60
71
  export function getThemeAppearance(theme: UiTheme): UiThemeAppearance {
61
72
  return (
62
- THEME_DEFINITIONS.find((definition) => definition.value === theme)
73
+ THEME_DEFINITIONS.find((definition) => definition.value === resolveTheme(theme))
63
74
  ?.appearance ?? 'light'
64
75
  );
65
76
  }
@@ -123,7 +134,7 @@ class UiThemeOwner {
123
134
  return;
124
135
  }
125
136
  const appearance = getThemeAppearance(theme);
126
- document.documentElement.setAttribute('data-theme', theme);
137
+ document.documentElement.setAttribute('data-theme', resolveTheme(theme));
127
138
  document.documentElement.setAttribute('data-theme-appearance', appearance);
128
139
  document.documentElement.style.colorScheme = appearance;
129
140
  };
@@ -1 +0,0 @@
1
- import{i as e}from"./chunk-DF37yw5_.js";import{Gt as t,Wt as n,Yt as r,cr as i,yr as a}from"./api-BZvNpFOS.js";import{I as o,J as s,c,kt as l,r as u}from"./app-presenter-provider-BcYL-VNe.js";import{t as d}from"./createLucideIcon-DE0sB9Nu.js";import{a as f}from"./use-viewport-layout-vmbQUNT6.js";import{n as p,s as m}from"./i18n-OGmF0Ws_.js";import{a as h,n as g,o as _,r as v,t as y}from"./dialog-BUfWO8hr.js";var b=d(`LogOut`,[[`path`,{d:`M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4`,key:`1uf3rs`}],[`polyline`,{points:`16 17 21 12 16 7`,key:`1gabdz`}],[`line`,{x1:`21`,x2:`9`,y1:`12`,y2:`12`,key:`1uyos4`}]]),x=e(a(),1),S=i();function C({label:e,value:t}){return(0,S.jsxs)(`div`,{className:`flex items-start justify-between gap-4 py-2 text-sm`,children:[(0,S.jsx)(`span`,{className:`text-gray-500`,children:e}),(0,S.jsx)(`span`,{className:`text-right text-gray-900`,children:t?.trim()||`-`})]})}function w(e){let{email:i,username:a,role:o,canSubmitUsername:c,savingUsername:u,usernameDraft:d,onUsernameDraftChange:f,onSubmitUsername:p,onOpenDeviceList:h,onLogout:g}=e;return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(s,{tone:`success`,title:m(`accountPanelSignedInTitle`),description:m(`accountPanelSignedInDescription`)}),(0,S.jsxs)(s,{tone:`neutral`,children:[(0,S.jsx)(C,{label:m(`remoteAccountEmail`),value:i}),(0,S.jsx)(C,{label:m(`remoteAccountUsername`),value:a}),(0,S.jsx)(C,{label:m(`remoteAccountRole`),value:o})]}),a?(0,S.jsx)(`p`,{className:`text-xs text-gray-500`,children:m(`remoteAccountUsernameLockedHelp`)}):(0,S.jsxs)(s,{tone:`warning`,title:m(`remoteAccountUsernameRequiredTitle`),description:m(`remoteAccountUsernameRequiredDescription`),children:[(0,S.jsxs)(`div`,{className:`mt-4 space-y-2`,children:[(0,S.jsx)(n,{htmlFor:`account-panel-username`,children:m(`remoteAccountUsername`)}),(0,S.jsx)(t,{id:`account-panel-username`,value:d,onChange:e=>f(e.target.value),placeholder:m(`remoteAccountUsernamePlaceholder`),autoCapitalize:`none`,autoCorrect:`off`,spellCheck:!1})]}),(0,S.jsx)(`div`,{className:`mt-4 flex flex-wrap gap-3`,children:(0,S.jsx)(r,{disabled:!c,onClick:()=>void p(),children:m(u?`remoteAccountUsernameSaving`:`remoteAccountUsernameSave`)})})]}),(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,S.jsxs)(r,{onClick:()=>void h(),children:[(0,S.jsx)(l,{className:`mr-2 h-4 w-4`}),m(`remoteOpenDeviceList`)]}),(0,S.jsxs)(r,{variant:`outline`,onClick:()=>void g(),children:[(0,S.jsx)(b,{className:`mr-2 h-4 w-4`}),m(`remoteLogout`)]})]})]})}function T(e){let{authSessionId:t,authExpiresAt:n,authStatusMessage:i,authVerificationUri:a,onStartBrowserSignIn:o,onResumeBrowserSignIn:c}=e;return(0,S.jsxs)(`div`,{className:`space-y-4`,children:[(0,S.jsx)(s,{tone:`neutral`,title:m(`accountPanelSignedOutTitle`),description:m(`accountPanelSignedOutDescription`),children:t?(0,S.jsxs)(`div`,{className:`mt-3 border-t border-white/80 pt-3`,children:[(0,S.jsx)(C,{label:m(`remoteBrowserAuthSession`),value:t}),(0,S.jsx)(C,{label:m(`remoteBrowserAuthExpiresAt`),value:n?p(n):`-`})]}):null}),i?(0,S.jsx)(`p`,{className:`text-sm text-gray-600`,children:i}):null,(0,S.jsxs)(`div`,{className:`flex flex-wrap gap-3`,children:[(0,S.jsx)(r,{onClick:()=>void o(),children:m(t?`remoteBrowserAuthActionRetry`:`remoteBrowserAuthAction`)}),a?(0,S.jsx)(r,{variant:`outline`,onClick:()=>void c(),children:m(`remoteBrowserAuthResume`)}):null]})]})}function E(){let e=u(),t=o(),n=c(e=>e.panelOpen),r=c(e=>e.authSessionId),i=c(e=>e.authVerificationUri),a=c(e=>e.authExpiresAt),s=c(e=>e.authStatusMessage),l=t.data,[d,p]=(0,x.useState)(``),[b,C]=(0,x.useState)(!1);(0,x.useEffect)(()=>{e.accountManager.syncRemoteStatus(l)},[e,l]);let E=!b&&d.trim().length>0&&!l?.account.username;return(0,S.jsx)(y,{open:n,onOpenChange:t=>t?e.accountManager.openAccountPanel():e.accountManager.closeAccountPanel(),children:(0,S.jsxs)(g,{className:`max-w-xl`,children:[(0,S.jsxs)(h,{children:[(0,S.jsxs)(_,{className:`flex items-center gap-2`,children:[(0,S.jsx)(f,{className:`h-5 w-5 text-primary`}),m(`accountPanelTitle`)]}),(0,S.jsx)(v,{children:m(`accountPanelDescription`)})]}),l?.account.loggedIn?(0,S.jsx)(w,{email:l.account.email,username:l.account.username,role:l.account.role,canSubmitUsername:E,savingUsername:b,usernameDraft:d,onUsernameDraftChange:p,onSubmitUsername:async()=>{C(!0);try{await e.accountManager.updateUsername(d)}finally{C(!1)}},onOpenDeviceList:()=>e.accountManager.openNextClawWeb(`/account`),onLogout:()=>e.accountManager.logout()}):(0,S.jsx)(T,{authSessionId:r,authExpiresAt:a,authStatusMessage:s,authVerificationUri:i,onStartBrowserSignIn:()=>e.accountManager.startBrowserSignIn(),onResumeBrowserSignIn:()=>e.accountManager.resumeBrowserSignIn()})]})})}export{E as AccountPanel};