@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.
- package/CHANGELOG.md +63 -0
- package/dist/.vite/manifest.json +1271 -1227
- package/dist/assets/{abnfDiagram-VRR7QNED-Dcw10Yt1.js → abnfDiagram-VRR7QNED-DmeCRAkd.js} +1 -1
- package/dist/assets/account-panel-BYxGT4m4.js +1 -0
- package/dist/assets/{aiden0z-pptx-renderer.es--oNqetPA.js → aiden0z-pptx-renderer.es-ChX5DHqP.js} +1 -1
- package/dist/assets/api-CG22BskB.js +20 -0
- package/dist/assets/app-presenter-provider-CJFjhVYI.js +28 -0
- package/dist/assets/app-presenter-provider-D3BuuOyZ.css +1 -0
- package/dist/assets/appearance-settings-page-BcXr0vHp.js +1 -0
- package/dist/assets/{arc-DBRedCax.js → arc-Cu6Ols44.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-CLjV_xu4.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-Dufhtuv-.js → architectureDiagram-ZJ3FMSHR-DrNB0eLE.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-BUk0vtJ7.js → blockDiagram-677ZJIJ3-08rHt6DJ.js} +1 -1
- package/dist/assets/{book-open-CmRdT3N1.js → book-open-ClbJmmxP.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-CxDcVE9p.js → c4Diagram-LMCZKHZV-CCVgRG-u.js} +1 -1
- package/dist/assets/{card-CdRBL1E0.js → card-BdC01NFF.js} +1 -1
- package/dist/assets/channel-BgpbPyEH.js +1 -0
- package/dist/assets/channels-list-page-BrIvJlop.js +8 -0
- package/dist/assets/chunk-2Q5K7J3B-DjhMPqAC.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-DSF3KElA.js → chunk-32BRIVSS-BeCaI-JN.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-Costxzr3.js → chunk-52WLFC77-ZXIcYPYs.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-rhqzGGZo.js → chunk-5FCAYU7R-DDwTPcy8.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-BsEsmIao.js → chunk-5HE753X5-WygrMYPL.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-Dqw_DCoN.js → chunk-5JV3BV7I-o8T3KZgk.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-Cft82fp8.js → chunk-5TONJI2A-BKFbUT7J.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-DqNHn9Dl.js → chunk-5VM5RSS4-DYxCRV86.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-A5SBEMYY.js → chunk-7BUUIJ7U-CvSeJlKZ.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-1Ng3mTrH.js → chunk-BIQX33UG-BhH3RHCY.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-DRJEy8ZI.js → chunk-C7G6YPKG-BTL0-xL3.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-Bydv_J3J.js → chunk-CQNSW5MT-DWAU4QaD.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-HkMIg12u.js → chunk-CYSBUYHQ-B7ZBMXTx.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-C5ndDvm3.js → chunk-EMLP6XTP-D92HvnHE.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-DzeloZRo.js → chunk-EX3LRPZG-DfOGKwW8.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-n_2_CLTQ.js → chunk-FWX5IMBZ-DUuJUrXJ.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-kx_slvu3.js → chunk-HOUHSVGY-i3MDyUY5.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-sQLMURqL.js → chunk-ICXQ74PX-F_pmNX6t.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-CMUn5Elc.js → chunk-JG7HCLWE-DygOelrU.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-Cra3s-Uk.js → chunk-JWPE2WC7-BpiZMeRl.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-umcrg5Bi.js → chunk-MOJQB5TN-CV10sB1I.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-BnljD1ig.js → chunk-MOZMSUNE-Cf1WZNm0.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-BXx5pQjU.js → chunk-OGEWGWER-DuSw54VR.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-D-1qfdWu.js → chunk-OSBZ3O6U-_rt_XKSZ.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-DLzX78LC.js → chunk-PUDLZKDR-BFPaAGNW.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-DTK-rtW6.js → chunk-Q4XR5HBZ-GE0v_E5y.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-CsFeIGfr.js → chunk-QBLGF6JB-BK_FpnlJ.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-4xNYUeng.js → chunk-R7FJI6CG-CpYh6rGo.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DJiHiTE5.js → chunk-RYQCIY6F-htnxL_Cl.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-BVYkauHz.js → chunk-U6XO7XAA-wDbE4BZ7.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-BsazE8cS.js → chunk-V7JOEXUC-DDRSVFTB.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-GYimZYx9.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-7RoZQffO.js → chunk-VR4S4FIN-COdhHR1o.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-DEuS6N1R.js → chunk-WYO6CB5R-DPDGhyF6.js} +3 -3
- package/dist/assets/chunk-XXDRQBXY-KKCf0HV5.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-9KBrosZL.js → chunk-YOTPTUD7-D8ir9Nx5.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-IYgN9f5A.js → chunk-ZGVPDNZ5-BuNKD836.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-BUo0-zcp.js → chunk-ZIRB5QZD-DyHzq8jH.js} +1 -1
- package/dist/assets/{circle-dashed-HOgt3gIJ.js → circle-dashed-nDaMRmP-.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-iRMPRR8M.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-BguFy_wj.js +1 -0
- package/dist/assets/{client-DKKbdJ6Q.js → client-DlFB5dW5.js} +1 -1
- package/dist/assets/config-split-page-C06fU9OQ.js +1 -0
- package/dist/assets/confirm-dialog-DpcmlXhd.js +1 -0
- package/dist/assets/{app-presenter-provider-jNGlmBLe.css → context-menu-DEcVZfaU.css} +1 -1
- package/dist/assets/context-menu-DKIEaY7f.js +211 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-DhqbC1fR.js → cose-bilkent-JH36ORCC-B1I1_P6a.js} +1 -1
- package/dist/assets/{createLucideIcon-DE0sB9Nu.js → createLucideIcon-Lnt-4LMC.js} +1 -1
- package/dist/assets/cynefin-VYW2F7L2-CtbjXuCW.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-C-TBRi5V.js → cynefinDiagram-TSTJHNR4-DcOnhnCo.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-BmafJymp.js → dagre-VKFMJZFB-hAX89lg3.js} +1 -1
- package/dist/assets/{dagre-CrgsRasE.js → dagre-nSYhf9yY.js} +1 -1
- package/dist/assets/{desktop-capabilities-page-B9-B9k1A.js → desktop-capabilities-page-DPORyZAu.js} +1 -1
- package/dist/assets/desktop-update-config-BMTeWZmn.js +1 -0
- package/dist/assets/{diagram-FQU43EPY-BoOMwa6D.js → diagram-FQU43EPY-C1mRMD2k.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-Le7N6Uym.js → diagram-G47NLZAW-D2XBn5al.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-Fbpj3-MO.js → diagram-NH7WQ7WH-3LmRsmkC.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-D3QuGGuu.js → diagram-OA4YK3LP-CFWn-osC.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-Cxu1uiN6.js → diagram-WEI45ONY-BqNRbUvU.js} +1 -1
- package/dist/assets/dialog-BNXSPMX_.js +1 -0
- package/dist/assets/dist-Cuiqqp1O.js +41 -0
- package/dist/assets/doc-browser-CDEapjmj.js +1 -0
- package/dist/assets/{doc-browser-context-ClLgMbxd.js → doc-browser-context-0QDWYorh.js} +1 -1
- package/dist/assets/{docx-preview-CkU2psnd.js → docx-preview-CunAATyC.js} +1 -1
- package/dist/assets/{download-CKqS1Ksj.js → download-f_sPcoLZ.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-CCAjuQM6.js → ebnfDiagram-CCIWWBDH-CYb8IwqD.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-BuzUAq-d.js → erDiagram-Q63AITRT-H47mUoeK.js} +1 -1
- package/dist/assets/eventmodeling-45OFAUF4-Djd6id_u.js +1 -0
- package/dist/assets/extensions-B-0xQz3L.js +1 -0
- package/dist/assets/external-link-CbVlnlNy.js +1 -0
- package/dist/assets/flowDiagram-23GEKE2U-DUrsM_ZL.js +1 -0
- package/dist/assets/{form-actions-CCoxz33Q.js → form-actions-BoTqELHB.js} +1 -1
- package/dist/assets/{ganttDiagram-NO4QXBWP-cJmWVY8F.js → ganttDiagram-NO4QXBWP-hSX45zfV.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-CU6P_2Cm.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-F58o-vtP.js → gitGraphDiagram-IHSO6WYX-Br0UW2qg.js} +1 -1
- package/dist/assets/{i18n-OGmF0Ws_.js → i18n-B0V5NkFj.js} +2 -2
- package/dist/assets/inbox-Bna8iUy0.js +1 -0
- package/dist/assets/info-DKCQHKI2-Bj2P_7RC.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-Gt59b83C.js → infoDiagram-FWYZ7A6U-DQmP_67w.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-1u4IAj1I.js → ishikawaDiagram-FXEZZL3T-BHAV2oes.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-CCQsfV-5.js → journeyDiagram-5HDEW3XC-CFHax4_d.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-vlB6O_Zn.js → kanban-definition-HUTT4EX6-B4ZA9rp5.js} +1 -1
- package/dist/assets/katex-BprZ-Wwb.js +1 -0
- package/dist/assets/{keyboard-shortcuts-settings-page-D8rosOVh.js → keyboard-shortcuts-settings-page-BluWKrSo.js} +1 -1
- package/dist/assets/{line-D_bHubTL.js → line-BboM0HLF.js} +1 -1
- package/dist/assets/{linear-ChlwuS5y.js → linear-4K_M1oYM.js} +1 -1
- package/dist/assets/login-page-BMHW0Hh0.js +1 -0
- package/dist/assets/{login-page-BT3GV3Sb.js → login-page-JNr5JCEw.js} +1 -1
- package/dist/assets/main-BCX_Untx.css +1 -0
- package/dist/assets/main-C5kbmGUV.js +2 -0
- package/dist/assets/main-i18n-catalog.config-DO4wNT7T.js +1 -0
- package/dist/assets/{map-oGHTsIu8.js → map-26GpO1wn.js} +1 -1
- package/dist/assets/mcp-marketplace-page-CV-PHKTN.js +1 -0
- package/dist/assets/{mermaid-parser.core-CuRe1ZG4.js → mermaid-parser.core-BTJFnvRC.js} +2 -2
- package/dist/assets/{mermaid.core-u4YCFKRf.js → mermaid.core-B7ufoXgq.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-DeJAQYTu.js → mindmap-definition-LN4V7U3C-BHyru6KE.js} +1 -1
- package/dist/assets/model-config-page-C-wbM6Fe.js +1 -0
- package/dist/assets/{navigation-link-DC-Pku0Y.js → navigation-link-DFLSVIut.js} +2 -2
- package/dist/assets/{ordinal-C6JFfkKN.js → ordinal-BqFe2ePF.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-ti5ge2jr.js +1 -0
- package/dist/assets/panel-app-CSQmm_7E.js +1 -0
- package/dist/assets/panel-app-i18n-catalog.config-Bo52dPuF.js +1 -0
- package/dist/assets/panelStandalone-PuuMF65O.js +2 -0
- package/dist/assets/panelStandalone-XRlWxbRS.css +1 -0
- package/dist/assets/{pegDiagram-2B236MQR-nVMkxShH.js → pegDiagram-2B236MQR-PVTatU5j.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-Bnep8TyV.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-8aUH44QZ.js → pieDiagram-ENE6RG2P-CGc-QCc7.js} +1 -1
- package/dist/assets/plus-CywSlIbG.js +1 -0
- package/dist/assets/privacy-settings-page-CPdEiouE.js +1 -0
- package/dist/assets/projects-D_cd_t4G.js +1 -0
- package/dist/assets/provider-models-XRArsply.js +1 -0
- package/dist/assets/provider-scoped-model-input-C8JI-hus.js +1 -0
- package/dist/assets/providers-config-page-fyMlVgvq.js +1 -0
- package/dist/assets/puzzle-Bk3ud1KI.js +1 -0
- package/dist/assets/pwa-Cx6Fnox4.js +1 -0
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-EY8hpFv8.js → quadrantDiagram-ABIIQ3AL-DGL36riv.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-BYg-icAP.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-_CHO-Fi1.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-hbQDevHe.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-v4RZkOfi.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-bC9BqkI5.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-CNhcIeji.js → railroadDiagram-RFXS5EU6-CyNwvhSb.js} +1 -1
- package/dist/assets/{refresh-cw-BG8VfcdA.js → refresh-cw-Ca2napNx.js} +1 -1
- package/dist/assets/remote-D5MBQNZE.js +1 -0
- package/dist/assets/{requirementDiagram-TGXJPOKE-D8Dcs-Rt.js → requirementDiagram-TGXJPOKE-C31NMKJ0.js} +1 -1
- package/dist/assets/{rotate-cw-DPEegUU2.js → rotate-cw-DXg7sNUE.js} +1 -1
- package/dist/assets/runtime-config-page--ivCxBT4.js +1 -0
- package/dist/assets/{sankeyDiagram-HTMAVEWB-HTrb6aa-.js → sankeyDiagram-HTMAVEWB-CwrQ_7PA.js} +1 -1
- package/dist/assets/{save-CPlctBjT.js → save-DNigywZ9.js} +1 -1
- package/dist/assets/search-U9C0oTQJ.js +1 -0
- package/dist/assets/search-config-page-Bdx_RR1q.js +1 -0
- package/dist/assets/secrets-config-page-CvMIcsfJ.js +3 -0
- package/dist/assets/security-config-CQmMqQ8v.js +1 -0
- package/dist/assets/select-DxwDeKUR.js +1 -0
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-6f_4X16Y.js → sequenceDiagram-DBY2YBRQ-EFD482_y.js} +1 -1
- package/dist/assets/service-apps-panel-CiYO1Be4.js +1 -0
- package/dist/assets/{settings-2-CrGx9_De.js → settings-2-BrBUdRoY.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-Ck9rsuwL.js → sizeCapture-X5ZJPWSS-TDvULTE1.js} +1 -1
- package/dist/assets/{src-C8AUg09O.js → src-CI2AvEMj.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-Cm33MLHu.js → stateDiagram-2N3HPSRC-JdPsIYHo.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-4_aAQfB_.js +1 -0
- package/dist/assets/{status-dot-Cb8ewlUr.js → status-dot-BbGsrkIX.js} +1 -1
- package/dist/assets/{swimlanes-5IMT3BWC-B107vmvM.js → swimlanes-5IMT3BWC-BnxpKeK_.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-wCqfwsw-.js +8 -0
- package/dist/assets/tag-chip-BDbxcf6P.js +1 -0
- package/dist/assets/theme-provider-D98XGa-c.js +1 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-CJEoAj33.js → timeline-definition-FHXFAJF6-2IL22-uC.js} +1 -1
- package/dist/assets/trash-2-DwSkRfeB.js +1 -0
- package/dist/assets/treeView-QDETBFTQ-BAyOb14Z.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-DgPDM0zS.js +1 -0
- package/dist/assets/{use-config-BM5jC65L.js → use-config-D3cNzk2k.js} +1 -1
- package/dist/assets/{use-desktop-capabilities-ezKJwKqg.js → use-desktop-capabilities-D7odgaTB.js} +1 -1
- package/dist/assets/use-viewport-layout-BANU5E1t.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-DzsUHk5I.js → vennDiagram-L72KCM5P-Cjf6n5Va.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-eCElh8z5.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-1NfFs5ua.js → wardleyDiagram-EHGQE667-yv4qKbBO.js} +1 -1
- package/dist/assets/x-BqGj6_Vq.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-Ci8AI3Qo.js → xychartDiagram-FW5EYKEG-Bmp8Ck8X.js} +1 -1
- package/dist/index.html +43 -106
- package/dist/panel-standalone.html +18 -12
- package/index.html +15 -66
- package/package.json +5 -5
- package/src/app/configs/__tests__/app-navigation.config.test.ts +4 -2
- package/src/app/configs/app-navigation.config.ts +7 -2
- package/src/app/styles/design-system.css +85 -1
- package/src/app/styles/island-theme.css +8 -6
- package/src/features/agents/components/agent-details-dialog.tsx +5 -3
- package/src/features/app-data/components/app-retained-data-section.tsx +2 -2
- package/src/features/apps/components/__tests__/app-marketplace-catalog.test.tsx +2 -2
- package/src/features/apps/components/__tests__/app-packages-panel.test.tsx +94 -23
- package/src/features/apps/components/__tests__/apps-panel.test.tsx +5 -3
- package/src/features/apps/components/app-document-access-section.tsx +17 -14
- package/src/features/apps/components/app-marketplace-catalog.tsx +66 -39
- package/src/features/apps/components/app-marketplace-cover.tsx +5 -2
- package/src/features/apps/components/app-marketplace-detail.tsx +9 -6
- package/src/features/apps/components/app-marketplace-operation.tsx +8 -3
- package/src/features/apps/components/app-marketplace-panel.tsx +168 -0
- package/src/features/apps/components/app-package-card.tsx +224 -147
- package/src/features/apps/components/app-package-details-dialog.tsx +103 -0
- package/src/features/apps/components/app-packages-panel.tsx +159 -144
- package/src/features/apps/components/apps-panel.tsx +40 -11
- package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +1 -1
- package/src/features/chat/components/conversation/chat-conversation-header.tsx +1 -1
- package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +2 -2
- package/src/features/chat/components/layout/chat-sidebar-utility-menu.tsx +9 -7
- package/src/features/chat/features/conversation/components/floating-session-conversation.tsx +2 -3
- package/src/features/chat/features/conversation/components/session-conversation-area.tsx +1 -0
- package/src/features/chat/features/conversation/hooks/__tests__/use-session-conversation-input-state.test.tsx +33 -0
- package/src/features/chat/features/message/components/chat-message-list.container.tsx +0 -2
- package/src/features/chat/features/message/utils/__tests__/chat-message-process-summary.utils.test.ts +4 -6
- package/src/features/chat/features/message/utils/chat-message-execution-summary.utils.ts +3 -0
- package/src/features/chat/features/message/utils/chat-message-process-summary.utils.ts +2 -10
- package/src/features/chat/features/message/utils/chat-message-texts.utils.ts +2 -0
- package/src/features/chat/features/message/utils/chat-message-trigger-details.utils.ts +3 -0
- package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +2 -1
- package/src/features/chat/features/session/components/session-header/chat-session-metadata-dialog.tsx +1 -1
- package/src/features/chat/features/session/components/session-header/chat-session-project-badge.tsx +2 -2
- package/src/features/chat/features/welcome/components/__tests__/chat-welcome.test.tsx +31 -6
- package/src/features/chat/features/welcome/components/chat-conversation-welcome.tsx +13 -1
- package/src/features/chat/features/welcome/components/chat-welcome-agent-picker.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-project-picker.tsx +1 -1
- package/src/features/chat/features/welcome/components/chat-welcome-prompt-suggestions.tsx +56 -13
- package/src/features/chat/features/welcome/components/chat-welcome-session-type-picker.tsx +3 -3
- package/src/features/chat/features/welcome/components/chat-welcome.tsx +14 -4
- package/src/features/chat/features/welcome/utils/__tests__/chat-welcome-continuation.utils.test.ts +40 -0
- package/src/features/chat/features/welcome/utils/chat-welcome-continuation.utils.ts +21 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-directory-browser.tsx +1 -1
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-breadcrumbs.tsx +5 -9
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +6 -4
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +27 -27
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +1 -1
- package/src/features/chat/features/workspace/components/overview/chat-session-continuous-attention.tsx +11 -11
- package/src/features/chat/features/workspace/components/overview/chat-session-token-usage.tsx +15 -15
- package/src/features/chat/features/workspace/components/project-files/workspace-directory-tree.tsx +2 -2
- package/src/features/chat/features/workspace/components/project-files/workspace-new-folder-tree-item.tsx +1 -1
- package/src/features/chat/features/workspace/components/project-files/workspace-project-files-toolbar.tsx +2 -2
- package/src/features/chat/features/workspace/components/session-cron-job-content.tsx +7 -4
- package/src/features/cron/components/cron-job-row.tsx +5 -4
- package/src/features/desktop-capabilities/components/desktop-authorization-dialog.tsx +5 -5
- package/src/features/inbox/components/inbox-reader-dialog.test.tsx +46 -6
- package/src/features/inbox/components/inbox-reader-dialog.tsx +38 -29
- package/src/features/inbox/managers/inbox.manager.test.ts +28 -0
- package/src/features/inbox/managers/inbox.manager.ts +18 -4
- package/src/features/inbox/pages/inbox-page.test.ts +16 -5
- package/src/features/inbox/pages/inbox-page.tsx +37 -29
- package/src/features/panel-apps/components/panel-app-list-item.tsx +4 -3
- package/src/features/panel-apps/components/panel-app-service-action-authorization-dialog.tsx +2 -2
- package/src/features/panel-apps/utils/panel-app-doc-browser.utils.tsx +5 -24
- package/src/features/projects/components/work/project-work-items.tsx +1 -1
- package/src/features/projects/pages/project-home-page.tsx +4 -2
- package/src/features/pwa/managers/__tests__/pwa-shell-theme.manager.test.ts +3 -3
- package/src/features/pwa/managers/pwa-shell-theme.manager.ts +8 -3
- package/src/features/right-panel-resources/components/__tests__/page-resource-icon.test.tsx +13 -2
- package/src/features/right-panel-resources/components/page-resource-icon.tsx +15 -7
- package/src/features/right-panel-resources/configs/right-panel-resource-routes.config.ts +1 -1
- package/src/features/right-panel-resources/index.ts +3 -0
- package/src/features/right-panel-resources/utils/__tests__/right-panel-resource-route-resolver.utils.test.ts +5 -0
- package/src/features/right-panel-resources/utils/right-panel-resource-uri.utils.ts +3 -2
- package/src/features/service-apps/components/service-action-row.tsx +4 -3
- package/src/features/service-apps/components/service-app-delete-dialog.tsx +2 -2
- package/src/features/service-apps/components/service-app-list-item.tsx +5 -4
- package/src/features/settings/components/config/provider-model-suggestions-panel.tsx +1 -1
- package/src/features/settings/pages/providers-config-page.tsx +3 -2
- package/src/index.css +42 -8
- package/src/platforms/mobile/components/__tests__/mobile-app-shell.test.tsx +9 -0
- package/src/platforms/mobile/components/mobile-app-shell.tsx +4 -2
- package/src/platforms/mobile/components/mobile-topbar.tsx +2 -2
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +2 -2
- package/src/shared/components/path-picker/server-path-picker-dialog.tsx +5 -3
- package/src/shared/components/ui/__tests__/dialog.test.tsx +37 -1
- package/src/shared/components/ui/actions/action-feedback.ts +1 -8
- package/src/shared/components/ui/actions/icon-action-button.tsx +1 -1
- package/src/shared/components/ui/confirm-dialog.tsx +1 -2
- package/src/shared/components/ui/context-menu/context-menu-items.tsx +2 -2
- package/src/shared/components/ui/dialog.tsx +29 -7
- package/src/shared/components/ui/popover.tsx +14 -3
- package/src/shared/components/ui/tab-strip/compact-tab-strip.tsx +5 -5
- package/src/shared/components/ui/tooltip.tsx +2 -1
- package/src/shared/components/workbench/__tests__/workbench-surface.test.tsx +21 -0
- package/src/shared/components/workbench/workbench-surface-toolbar.tsx +4 -0
- package/src/shared/components/workbench/workbench-surface.tsx +5 -2
- package/src/shared/lib/i18n/locales/en-US/chat.json +14 -9
- package/src/shared/lib/i18n/locales/en-US/core.json +5 -1
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +10 -5
- package/src/shared/lib/i18n/locales/en-US/inbox.json +1 -0
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +14 -9
- package/src/shared/lib/i18n/locales/zh-CN/core.json +5 -1
- package/src/shared/lib/i18n/locales/zh-CN/doc-browser.json +11 -6
- package/src/shared/lib/i18n/locales/zh-CN/inbox.json +1 -0
- package/src/shared/lib/theme/index.test.ts +28 -1
- package/src/shared/lib/theme/index.ts +14 -3
- package/dist/assets/account-panel-DVi_jhkG.js +0 -1
- package/dist/assets/api-BZvNpFOS.js +0 -20
- package/dist/assets/app-presenter-provider-BcYL-VNe.js +0 -124
- package/dist/assets/appearance-settings-page-AZNBzLmT.js +0 -1
- package/dist/assets/architecture-TIHT7OUA-CvnC-LeA.js +0 -1
- package/dist/assets/channel-CpMstUPF.js +0 -1
- package/dist/assets/channels-list-page-eZN74FN3.js +0 -8
- package/dist/assets/chunk-2Q5K7J3B-Djp3VF0s.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-BrbiIC1Q.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-Cx9N40wF.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-DFN1v3PQ.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-DRvglADa.js +0 -1
- package/dist/assets/config-split-page-BA3V6b3Q.js +0 -1
- package/dist/assets/confirm-dialog-8vqYZ0wy.js +0 -1
- package/dist/assets/context-menu-DHVVdHzN.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-DXUGnpJH.js +0 -1
- package/dist/assets/desktop-update-config-Cfr3IRUe.js +0 -1
- package/dist/assets/dialog-BUfWO8hr.js +0 -5
- package/dist/assets/doc-browser-w8q1j0jL.js +0 -1
- package/dist/assets/es2015-BiB05Sav.js +0 -41
- package/dist/assets/eventmodeling-45OFAUF4-ZBfVS3ZC.js +0 -1
- package/dist/assets/extensions-vPD4dGqt.js +0 -1
- package/dist/assets/eye-bKzylu3p.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-CqdsKk6x.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-fHYFd9Es.js +0 -1
- package/dist/assets/info-DKCQHKI2-CSaOL_bb.js +0 -1
- package/dist/assets/katex-B4FQSo9k.js +0 -1
- package/dist/assets/loader-circle-Clq1Gtb1.js +0 -1
- package/dist/assets/login-page-DKId3By8.js +0 -1
- package/dist/assets/main-bEWCGDHr.js +0 -2
- package/dist/assets/main-i18n-catalog.config-Bpu5GcwF.js +0 -1
- package/dist/assets/main-kqMRTwOs.css +0 -1
- package/dist/assets/mcp-marketplace-page-CZIP6j3L.js +0 -1
- package/dist/assets/model-config-page-D21a-BO0.js +0 -1
- package/dist/assets/packet-7NZHBO7P-D-YFTczs.js +0 -1
- package/dist/assets/panel-app-BYfQu_TS.js +0 -1
- package/dist/assets/panel-app-i18n-catalog.config-D44qmtfk.js +0 -1
- package/dist/assets/panelStandalone-BRg7B1EI.css +0 -1
- package/dist/assets/panelStandalone-CX8X2hjh.js +0 -2
- package/dist/assets/pie-RZYD4A2V-VEnYu9s5.js +0 -1
- package/dist/assets/privacy-settings-page-e0LFHZJm.js +0 -1
- package/dist/assets/projects-Rki7Fmth.js +0 -1
- package/dist/assets/provider-models-DFQgF4hS.js +0 -1
- package/dist/assets/provider-scoped-model-input-DaONL0j_.js +0 -1
- package/dist/assets/providers-config-page-CEOhQlMe.js +0 -1
- package/dist/assets/puzzle-D_TiFXOv.js +0 -1
- package/dist/assets/pwa-C9ac_1dg.js +0 -1
- package/dist/assets/radar-I7S5WNFK-BFNIekC1.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-lVqJ3Hak.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-DYaefdFC.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-CTAk6lVq.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-Cob294tg.js +0 -1
- package/dist/assets/remote-DkSx5x4R.js +0 -1
- package/dist/assets/runtime-config-page-DDT1dVLt.js +0 -1
- package/dist/assets/search-config-page-CDwmd6eX.js +0 -1
- package/dist/assets/secrets-config-page-1OvgmwPv.js +0 -3
- package/dist/assets/security-config-Pv4CM-kw.js +0 -1
- package/dist/assets/select-Y9IEbx9x.js +0 -1
- package/dist/assets/service-apps-panel-DPrLeF3N.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-BrNv-raG.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-ntcxaPXp.js +0 -8
- package/dist/assets/tag-chip-D-6aPuuh.js +0 -1
- package/dist/assets/theme-provider-BjF1Eowc.js +0 -1
- package/dist/assets/trash-2-DER2EJKK.js +0 -1
- package/dist/assets/treeView-QDETBFTQ-DbFmr-gw.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-C8aY96pi.js +0 -1
- package/dist/assets/use-viewport-layout-vmbQUNT6.js +0 -1
- package/dist/assets/wardley-OPB4EBWU-D8d6DbbJ.js +0 -1
- package/dist/assets/x-DSz9cGhy.js +0 -1
- package/src/features/apps/components/app-marketplace-dialog.tsx +0 -168
- /package/dist/assets/{array-BV9OtnO8.js → array-DstOKG9P.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-Cx-8EJ4_.js → chunk-KEIR6QF5-0TA8nwgf.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-Dy1ufvjf.js → chunk-Y2CYZVJY-rfGCG6pM.js} +0 -0
- /package/dist/assets/{config-hints-DbmiyTKg.js → config-hints-BfGoD7-o.js} +0 -0
- /package/dist/assets/{cytoscape.esm-CSCjuT4Z.js → cytoscape.esm-DdIcNEda.js} +0 -0
- /package/dist/assets/{defaultLocale-DWTiNsbT.js → defaultLocale-CzXix2iJ.js} +0 -0
- /package/dist/assets/{dist-BVCSkfWY.js → dist-D5dwMwKA.js} +0 -0
- /package/dist/assets/{graphlib-B1yb1Wl8.js → graphlib-BKOe0eFe.js} +0 -0
- /package/dist/assets/{host-capabilities-DuIFVsvM.js → host-capabilities-CnSVTaot.js} +0 -0
- /package/dist/assets/{init-BF6GH5oe.js → init-OCFb3zgY.js} +0 -0
- /package/dist/assets/{jszip.min-D12teKzP.js → jszip.min-B2uhSxvV.js} +0 -0
- /package/dist/assets/{katex-CsAM73R9.js → katex-dBrYsE7B.js} +0 -0
- /package/dist/assets/{middleware-B--6mAUM.js → middleware-CAXxl-af.js} +0 -0
- /package/dist/assets/{path-C56XkznJ.js → path-T5eoIRSJ.js} +0 -0
- /package/dist/assets/{preload-helper-ca-nBW7U.js → preload-helper-DWTEM3RW.js} +0 -0
- /package/dist/assets/{rough.esm-CGfeEbtE.js → rough.esm-DmGXmZEB.js} +0 -0
- /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> & {
|
|
25
|
-
|
|
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={{
|
|
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
|
|
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-
|
|
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 ?? "
|
|
239
|
+
? (activeTabClassName ?? "bg-background text-foreground")
|
|
240
240
|
: (inactiveTabClassName ??
|
|
241
|
-
"
|
|
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
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
669
|
-
"chatWelcomeSuggestion2Prompt": "
|
|
670
|
-
"chatWelcomeSuggestion3Label": "
|
|
671
|
-
"chatWelcomeSuggestion3Prompt": "
|
|
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
|
-
"
|
|
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": "
|
|
43
|
-
"appPackagesMarketplaceDescription": "
|
|
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
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
}
|
|
@@ -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('
|
|
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 = '
|
|
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};
|