@nextclaw/ui 0.25.3 → 0.26.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 +40 -0
- package/dist/.vite/manifest.json +1146 -1390
- package/dist/assets/{abnfDiagram-VRR7QNED-DX_u5BBX.js → abnfDiagram-VRR7QNED-Bjrmb5-o.js} +1 -1
- package/dist/assets/account-panel-C1S3xtUB.js +1 -0
- package/dist/assets/{aiden0z-pptx-renderer.es-C-E9e5yB.js → aiden0z-pptx-renderer.es-DO4DCX3e.js} +1 -1
- package/dist/assets/api-D9e9cHtW.js +20 -0
- package/dist/assets/app-presenter-provider-J9IgTbc9.js +124 -0
- package/dist/assets/appearance-settings-page-BljTr6nB.js +1 -0
- package/dist/assets/{arc-Cxwa624o.js → arc-g4XaP3S4.js} +1 -1
- package/dist/assets/architecture-TIHT7OUA-BWywYH_m.js +1 -0
- package/dist/assets/{architectureDiagram-ZJ3FMSHR-D8mCj0H1.js → architectureDiagram-ZJ3FMSHR-CAP7YDux.js} +1 -1
- package/dist/assets/{blockDiagram-677ZJIJ3-CbGC1IHl.js → blockDiagram-677ZJIJ3-DhaP0zUG.js} +1 -1
- package/dist/assets/{book-open-xqEj1OLE.js → book-open-vxpV2eSM.js} +1 -1
- package/dist/assets/{c4Diagram-LMCZKHZV-BQhGC1Vc.js → c4Diagram-LMCZKHZV-DHCQJJkD.js} +1 -1
- package/dist/assets/card-D9NYhSdf.js +1 -0
- package/dist/assets/channel-1nKIAEXr.js +1 -0
- package/dist/assets/channels-list-page-BiHA1zZd.js +8 -0
- package/dist/assets/chunk-2Q5K7J3B-CAwv72v4.js +1 -0
- package/dist/assets/{chunk-32BRIVSS-B74ZZwYG.js → chunk-32BRIVSS-BcQlxl4v.js} +1 -1
- package/dist/assets/{chunk-52WLFC77-BvmxW_f_.js → chunk-52WLFC77-ClPpG-2S.js} +1 -1
- package/dist/assets/{chunk-5FCAYU7R-DQvBRnwL.js → chunk-5FCAYU7R-B_qmYOdX.js} +1 -1
- package/dist/assets/{chunk-5HE753X5-CDIH0_y3.js → chunk-5HE753X5-DTO-V56q.js} +1 -1
- package/dist/assets/{chunk-5JV3BV7I-CcevlKd-.js → chunk-5JV3BV7I-CU1SOaaG.js} +1 -1
- package/dist/assets/{chunk-5TONJI2A-_3dxVdnY.js → chunk-5TONJI2A-CzSDkWNa.js} +1 -1
- package/dist/assets/{chunk-5VM5RSS4-pGO5vvo-.js → chunk-5VM5RSS4-ChkfqIRE.js} +1 -1
- package/dist/assets/{chunk-7BUUIJ7U-DEKF5uAN.js → chunk-7BUUIJ7U-Du3Ozi62.js} +1 -1
- package/dist/assets/{chunk-BIQX33UG-CjBFgq2r.js → chunk-BIQX33UG-C-HVafHB.js} +1 -1
- package/dist/assets/{chunk-C7G6YPKG-e_K9OGTz.js → chunk-C7G6YPKG-BSjZ86D0.js} +1 -1
- package/dist/assets/{chunk-CQNSW5MT-C2IiHyHz.js → chunk-CQNSW5MT-1D1W2lF6.js} +1 -1
- package/dist/assets/{chunk-CYSBUYHQ-DCC6KmGp.js → chunk-CYSBUYHQ-ISpyj_lK.js} +1 -1
- package/dist/assets/{chunk-EMLP6XTP-BYGgekQ0.js → chunk-EMLP6XTP-Cp8iUBt2.js} +1 -1
- package/dist/assets/{chunk-EX3LRPZG-FGcwuVsA.js → chunk-EX3LRPZG-BN5RzF5j.js} +1 -1
- package/dist/assets/{chunk-FWX5IMBZ-CV3Ih_Os.js → chunk-FWX5IMBZ-DecJDW4r.js} +2 -2
- package/dist/assets/{chunk-HOUHSVGY-CXpq_hfV.js → chunk-HOUHSVGY-BE_XNgGk.js} +1 -1
- package/dist/assets/{chunk-ICXQ74PX-CZIpjupq.js → chunk-ICXQ74PX-BFOKMkWV.js} +1 -1
- package/dist/assets/{chunk-JG7HCLWE-CdgwBpW7.js → chunk-JG7HCLWE-DL-pl8VB.js} +1 -1
- package/dist/assets/{chunk-JWPE2WC7-BPjAZpOQ.js → chunk-JWPE2WC7-B-bcwfmh.js} +1 -1
- package/dist/assets/{chunk-MOJQB5TN-DbJDm8to.js → chunk-MOJQB5TN-BC0taFro.js} +1 -1
- package/dist/assets/{chunk-MOZMSUNE-BUa1fqKn.js → chunk-MOZMSUNE-RrhfU6MO.js} +1 -1
- package/dist/assets/{chunk-OGEWGWER-CtnzLgRu.js → chunk-OGEWGWER-TuI7SR7i.js} +1 -1
- package/dist/assets/{chunk-OSBZ3O6U-fUgdpTUM.js → chunk-OSBZ3O6U-C5jMBKlU.js} +1 -1
- package/dist/assets/{chunk-PUDLZKDR-CtDWZT9-.js → chunk-PUDLZKDR-C5lMBn0K.js} +1 -1
- package/dist/assets/{chunk-Q4XR5HBZ-BxnK2qxr.js → chunk-Q4XR5HBZ-B-kzUbwT.js} +1 -1
- package/dist/assets/{chunk-QBLGF6JB-CH4UKoCF.js → chunk-QBLGF6JB-CRb_WAEj.js} +1 -1
- package/dist/assets/{chunk-R7FJI6CG-BxwFoF1v.js → chunk-R7FJI6CG-De6Y7ozO.js} +1 -1
- package/dist/assets/{chunk-RYQCIY6F-DpHAmq7O.js → chunk-RYQCIY6F-Igv92q8k.js} +1 -1
- package/dist/assets/{chunk-U6XO7XAA-BjH2VUHU.js → chunk-U6XO7XAA-bCjRshkT.js} +1 -1
- package/dist/assets/{chunk-V7JOEXUC-DKJZ3HGj.js → chunk-V7JOEXUC-0J1s_Kgq.js} +1 -1
- package/dist/assets/chunk-VAUOI2AC-DnaryNw2.js +1 -0
- package/dist/assets/{chunk-VR4S4FIN-Cf-o2GtI.js → chunk-VR4S4FIN-DX6lXnNx.js} +1 -1
- package/dist/assets/{chunk-WYO6CB5R-zeNXGm20.js → chunk-WYO6CB5R-DLqMXfFC.js} +3 -3
- package/dist/assets/chunk-XXDRQBXY-BToo1uqb.js +1 -0
- package/dist/assets/{chunk-YOTPTUD7-Ck87Kqxe.js → chunk-YOTPTUD7-CY4obsV0.js} +1 -1
- package/dist/assets/{chunk-ZGVPDNZ5-BbfK6Bfd.js → chunk-ZGVPDNZ5-BleImZKe.js} +1 -1
- package/dist/assets/{chunk-ZIRB5QZD-BDpzh4Yl.js → chunk-ZIRB5QZD-C1TfdjpX.js} +1 -1
- package/dist/assets/{circle-dashed-CU3yApvP.js → circle-dashed-CEEssYIw.js} +1 -1
- package/dist/assets/classDiagram-OUVF2IWQ-D_TusZGx.js +1 -0
- package/dist/assets/classDiagram-v2-EOCWNBFH-B1NFZTmS.js +1 -0
- package/dist/assets/client-C6YQx7A-.js +1 -0
- package/dist/assets/config-split-page-DKPelvjR.js +1 -0
- package/dist/assets/confirm-dialog-BCGeh61X.js +1 -0
- package/dist/assets/{cose-bilkent-JH36ORCC-CQfMxKCT.js → cose-bilkent-JH36ORCC-CVgUHXkj.js} +1 -1
- package/dist/assets/createLucideIcon-CF8U9dh7.js +1 -0
- package/dist/assets/cynefin-VYW2F7L2-CJZSs5s_.js +1 -0
- package/dist/assets/{cynefinDiagram-TSTJHNR4-CxFTiC-p.js → cynefinDiagram-TSTJHNR4-cdfImbfI.js} +1 -1
- package/dist/assets/{dagre-CaBNMcB1.js → dagre-CHNN9L9I.js} +1 -1
- package/dist/assets/{dagre-VKFMJZFB-S_7Hc7bI.js → dagre-VKFMJZFB-PscaENwr.js} +1 -1
- package/dist/assets/desktop-capabilities-page-BENHdKfk.js +1 -0
- package/dist/assets/desktop-update-config-BJMTQMRS.js +1 -0
- package/dist/assets/{diagram-FQU43EPY-C7zENvFb.js → diagram-FQU43EPY-CH_wye41.js} +1 -1
- package/dist/assets/{diagram-G47NLZAW-DqYTCqZA.js → diagram-G47NLZAW-Dtjpmi6D.js} +1 -1
- package/dist/assets/{diagram-NH7WQ7WH-BfSJtXRc.js → diagram-NH7WQ7WH-UdjLHyaz.js} +1 -1
- package/dist/assets/{diagram-OA4YK3LP-CFO-j67H.js → diagram-OA4YK3LP-DYsToEaL.js} +1 -1
- package/dist/assets/{diagram-WEI45ONY-DBQDbTaJ.js → diagram-WEI45ONY-CA7kuIer.js} +1 -1
- package/dist/assets/dialog-DQXou6pg.js +5 -0
- package/dist/assets/dist-CiC9Fd9J.js +1 -0
- package/dist/assets/doc-browser-CCYS_csH.js +1 -0
- package/dist/assets/doc-browser-context-CPLWVFLd.js +1 -0
- package/dist/assets/{docx-preview-B4-aDfvO.js → docx-preview-D--EsUWi.js} +1 -1
- package/dist/assets/{ebnfDiagram-CCIWWBDH-CfDNIXFN.js → ebnfDiagram-CCIWWBDH-BrjaoOuq.js} +1 -1
- package/dist/assets/{erDiagram-Q63AITRT-D95rFXMM.js → erDiagram-Q63AITRT-nZQa2kCM.js} +1 -1
- package/dist/assets/es2015-DHRpDU-q.js +41 -0
- package/dist/assets/eventmodeling-45OFAUF4-rc7kUq4V.js +1 -0
- package/dist/assets/extensions-CsWT7x3v.js +1 -0
- package/dist/assets/{eye-C84inPcV.js → eye-DJtw5KJ5.js} +1 -1
- package/dist/assets/flowDiagram-23GEKE2U-DAjaeGO8.js +1 -0
- package/dist/assets/form-actions-DDQk0END.js +1 -0
- package/dist/assets/{ganttDiagram-NO4QXBWP-Bawg0P0r.js → ganttDiagram-NO4QXBWP-CyFZHIHN.js} +1 -1
- package/dist/assets/gitGraph-TEB2WS4Q-Ce0gf6ps.js +1 -0
- package/dist/assets/{gitGraphDiagram-IHSO6WYX-BbKh9nbL.js → gitGraphDiagram-IHSO6WYX-Dfpq3z2M.js} +1 -1
- package/dist/assets/{i18n-20rSH40D.js → i18n-BjPkAKMQ.js} +2 -2
- package/dist/assets/info-DKCQHKI2-Cp-Tr78m.js +1 -0
- package/dist/assets/{infoDiagram-FWYZ7A6U-DPffZXYh.js → infoDiagram-FWYZ7A6U-Diiz0k1E.js} +1 -1
- package/dist/assets/{ishikawaDiagram-FXEZZL3T-CBMsLwZ2.js → ishikawaDiagram-FXEZZL3T-B3R3SN4M.js} +1 -1
- package/dist/assets/{journeyDiagram-5HDEW3XC-Mz5U4OzU.js → journeyDiagram-5HDEW3XC-DFOLKiNv.js} +1 -1
- package/dist/assets/{kanban-definition-HUTT4EX6-FXZq2k19.js → kanban-definition-HUTT4EX6-BMXpDp3g.js} +1 -1
- package/dist/assets/katex-B4FQSo9k.js +1 -0
- package/dist/assets/keyboard-shortcuts-settings-page-hqTP7akj.js +1 -0
- package/dist/assets/{line-BZwCgT9K.js → line-64_FhCoJ.js} +1 -1
- package/dist/assets/{linear-CTe9mKUw.js → linear-aF1fg7bK.js} +1 -1
- package/dist/assets/loader-circle-B-4WwzBj.js +1 -0
- package/dist/assets/login-page-BUwshAq4.js +1 -0
- package/dist/assets/login-page-CdlI6B8e.js +1 -0
- package/dist/assets/main-BVYdyT60.css +1 -0
- package/dist/assets/main-DYEALeoQ.js +2 -0
- package/dist/assets/main-i18n-catalog.config-1o2hjZ0m.js +1 -0
- package/dist/assets/{map-Ci48ZwAp.js → map-BC3Amra3.js} +1 -1
- package/dist/assets/mcp-marketplace-page-CRRQT6SP.js +1 -0
- package/dist/assets/{mermaid-parser.core-CzPD3U_z.js → mermaid-parser.core-DdMcZwnE.js} +2 -2
- package/dist/assets/{mermaid.core-geIMNPbV.js → mermaid.core-BHdiEBbI.js} +3 -3
- package/dist/assets/{mindmap-definition-LN4V7U3C-xqlKxsr_.js → mindmap-definition-LN4V7U3C-CtHVaZyV.js} +1 -1
- package/dist/assets/model-config-page-BSsHOhV7.js +1 -0
- package/dist/assets/navigation-history-CyawyVz0.js +1 -0
- package/dist/assets/navigation-link-D-fxdv0i.js +3 -0
- package/dist/assets/{ordinal-MxnX8yhv.js → ordinal-6b3jw4cz.js} +1 -1
- package/dist/assets/packet-7NZHBO7P-BOJuCraS.js +1 -0
- package/dist/assets/panel-app-i18n-catalog.config-kQO7QAwH.js +1 -0
- package/dist/assets/panelStandalone-BeI0Ndsx.js +2 -0
- package/dist/assets/{pegDiagram-2B236MQR-D50MFTN1.js → pegDiagram-2B236MQR-BtbG3Bgu.js} +1 -1
- package/dist/assets/pie-RZYD4A2V-D-FEO81x.js +1 -0
- package/dist/assets/{pieDiagram-ENE6RG2P-CpA13oiC.js → pieDiagram-ENE6RG2P-FmLl2hzN.js} +1 -1
- package/dist/assets/privacy-settings-page-pW_1naDz.js +1 -0
- package/dist/assets/projects-k6SLda_A.js +1 -0
- package/dist/assets/provider-models-mVzuEQBS.js +1 -0
- package/dist/assets/provider-scoped-model-input-CVbtT8L9.js +1 -0
- package/dist/assets/providers-config-page-rBlVrHkb.js +1 -0
- package/dist/assets/{puzzle-D6gulz7u.js → puzzle-kKiVft9-.js} +1 -1
- package/dist/assets/pwa-BgGM4kkY.js +1 -0
- package/dist/assets/{quadrantDiagram-ABIIQ3AL-CYCgaj4l.js → quadrantDiagram-ABIIQ3AL-7-OzMNpF.js} +1 -1
- package/dist/assets/radar-I7S5WNFK-Bq3eK1vK.js +1 -0
- package/dist/assets/railroad-3IZDKUUU-C3uZ1esg.js +1 -0
- package/dist/assets/railroad-abnf-AHOZXSZD-D3iZd1KT.js +1 -0
- package/dist/assets/railroad-ebnf-EBAXGLYW-Dl0FWqZu.js +1 -0
- package/dist/assets/railroad-peg-LSFZ7HO6-B51SbzGp.js +1 -0
- package/dist/assets/{railroadDiagram-RFXS5EU6-4LKDGlXN.js → railroadDiagram-RFXS5EU6-B_UVtLJO.js} +1 -1
- package/dist/assets/{refresh-cw-h9Xq3LY3.js → refresh-cw-BeG0y6yZ.js} +1 -1
- package/dist/assets/remote-wYWqir2w.js +1 -0
- package/dist/assets/{requirementDiagram-TGXJPOKE-CxNOU0JH.js → requirementDiagram-TGXJPOKE-D8TO2YeZ.js} +1 -1
- package/dist/assets/{rotate-cw-B6xm41Wn.js → rotate-cw-Ci2dcTO5.js} +1 -1
- package/dist/assets/runtime-config-page-DCXN0nkS.js +1 -0
- package/dist/assets/{sankeyDiagram-HTMAVEWB-DbCBDe2S.js → sankeyDiagram-HTMAVEWB-CUzIcq0B.js} +1 -1
- package/dist/assets/{save-fff_WpY2.js → save-Cr895abt.js} +1 -1
- package/dist/assets/search-config-page-CNQd481d.js +1 -0
- package/dist/assets/secrets-config-page--q7M58L8.js +3 -0
- package/dist/assets/security-config-CJb2pK2O.js +1 -0
- package/dist/assets/select-Bq-UmfCK.js +1 -0
- package/dist/assets/{sequenceDiagram-DBY2YBRQ-DA6W2BS_.js → sequenceDiagram-DBY2YBRQ-kqJzXbwu.js} +1 -1
- package/dist/assets/service-apps-panel-iLLEByRF.js +1 -0
- package/dist/assets/{settings-2-CE3ELQyk.js → settings-2-IodCcaXd.js} +1 -1
- package/dist/assets/{sizeCapture-X5ZJPWSS-T_q_d_VW.js → sizeCapture-X5ZJPWSS-D9ISogq1.js} +1 -1
- package/dist/assets/{src-CYpUlx-4.js → src-Bc0PoUJ1.js} +1 -1
- package/dist/assets/{stateDiagram-2N3HPSRC-mi8z2G0a.js → stateDiagram-2N3HPSRC-CqH5xc9W.js} +1 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-CcOGfDdx.js +1 -0
- package/dist/assets/status-dot-DUYSKRCU.js +1 -0
- package/dist/assets/{swimlanes-5IMT3BWC-DkBEhWE4.js → swimlanes-5IMT3BWC-mwejV-rW.js} +2 -2
- package/dist/assets/swimlanesDiagram-G3AALYLV-BMI2k8RZ.js +8 -0
- package/dist/assets/tag-chip-CQU51ST3.js +1 -0
- package/dist/assets/theme-provider-D-zZkXxS.js +1 -0
- package/dist/assets/{timeline-definition-FHXFAJF6-BoFmqBw1.js → timeline-definition-FHXFAJF6-CuikIDlX.js} +1 -1
- package/dist/assets/trash-2-BDdqDh6E.js +1 -0
- package/dist/assets/treeView-QDETBFTQ-C0_07QI1.js +1 -0
- package/dist/assets/treemap-6X3UGDF4-Djpx6ccG.js +1 -0
- package/dist/assets/use-config-Bxx7DdaL.js +1 -0
- package/dist/assets/{use-desktop-capabilities-BkuRd2cY.js → use-desktop-capabilities-BTgdFgJy.js} +1 -1
- package/dist/assets/use-viewport-layout-CDcca0YL.js +1 -0
- package/dist/assets/{vennDiagram-L72KCM5P-BlZ3Or5U.js → vennDiagram-L72KCM5P-BD0P0qHh.js} +1 -1
- package/dist/assets/wardley-OPB4EBWU-DZVFxu81.js +1 -0
- package/dist/assets/{wardleyDiagram-EHGQE667-yDfr33i3.js → wardleyDiagram-EHGQE667-C6ma3t5D.js} +1 -1
- package/dist/assets/x-LUUwl8rK.js +1 -0
- package/dist/assets/{xychartDiagram-FW5EYKEG-mIXwIGAQ.js → xychartDiagram-FW5EYKEG-D7E40NBk.js} +1 -1
- package/dist/index.html +37 -54
- package/dist/panel-standalone.html +11 -15
- package/package.json +5 -5
- package/src/app/components/layout/__tests__/app-layout.test.tsx +8 -0
- package/src/app/components/layout/app-layout.tsx +18 -46
- package/src/app/configs/__tests__/app-navigation.config.test.ts +4 -0
- package/src/app/configs/app-navigation.config.ts +2 -0
- package/src/app/configs/page-resource-renderers.config.ts +13 -0
- package/src/app/hooks/__tests__/use-app-event-consumers.test.ts +66 -3
- package/src/app/hooks/use-app-event-consumers.ts +5 -0
- package/src/app/index.tsx +4 -0
- package/src/app/presenters/app.presenter.ts +13 -2
- package/src/features/agents/components/__tests__/agents-page.test.tsx +4 -0
- package/src/features/agents/components/agent-details-dialog.tsx +3 -0
- package/src/features/agents/components/agents-page.tsx +7 -3
- package/src/features/apps/components/app-package-card.tsx +2 -2
- package/src/features/chat/components/conversation/chat-conversation-content.tsx +32 -19
- package/src/features/chat/components/conversation/chat-conversation-header-section.tsx +1 -0
- package/src/features/chat/components/conversation/chat-conversation-header.tsx +1 -1
- package/src/features/chat/components/conversation/chat-conversation-panel.tsx +2 -2
- package/src/features/chat/components/conversation/chat-conversation-workspace-section.tsx +1 -0
- package/src/features/chat/components/layout/__tests__/chat-page-shell.test.tsx +7 -6
- package/src/features/chat/components/layout/__tests__/chat-sidebar-toolbar.test.tsx +14 -12
- package/src/features/chat/components/layout/chat-page-shell.tsx +33 -64
- package/src/features/chat/components/layout/chat-sidebar-desktop-layout.tsx +8 -4
- package/src/features/chat/components/layout/chat-sidebar-toolbar.tsx +64 -256
- package/src/features/chat/components/layout/chat-sidebar.tsx +8 -30
- package/src/features/chat/components/providers/chat-runtime.provider.tsx +62 -0
- package/src/features/chat/features/conversation/components/__tests__/floating-session-conversation.test.tsx +70 -0
- package/src/features/chat/features/conversation/components/floating-session-conversation.tsx +27 -0
- package/src/features/chat/features/conversation/components/session-conversation-area.tsx +1 -0
- package/src/features/chat/features/conversation/components/session-conversation-panel-tab.tsx +25 -0
- package/src/features/chat/features/conversation/hooks/use-chat-composer-reference-intent.ts +2 -1
- package/src/features/chat/features/message/components/__tests__/chat-inline-panel-app-card.test.tsx +2 -1
- package/src/features/chat/features/message/components/__tests__/chat-message-assistant-header.container.test.tsx +3 -0
- package/src/features/chat/features/message/components/__tests__/chat-message-list-skill-preview.container.test.tsx +3 -0
- package/src/features/chat/features/message/components/__tests__/chat-message-list.container.test.tsx +3 -0
- package/src/features/chat/features/message/hooks/use-chat-inline-token-actions.ts +7 -3
- package/src/features/chat/features/ncp/hooks/__tests__/use-ncp-session-list-view.test.tsx +44 -1
- package/src/features/chat/features/ncp/hooks/use-ncp-child-session-tabs-view.ts +10 -2
- package/src/features/chat/features/ncp/hooks/use-ncp-session-list-view.ts +6 -2
- package/src/features/chat/features/session/components/__tests__/chat-sidebar-session-item.test.tsx +20 -0
- package/src/features/chat/features/session/components/chat-mobile-session-row.tsx +61 -0
- package/src/features/chat/features/session/components/chat-sidebar-project-groups.tsx +0 -35
- package/src/features/chat/features/session/components/chat-sidebar-session-entry.tsx +2 -0
- package/src/features/chat/features/session/components/chat-sidebar-session-item.tsx +13 -5
- package/src/features/chat/features/session/components/chat-sidebar-session-list.tsx +5 -3
- package/src/features/chat/features/session/components/session-header/__tests__/chat-session-header-actions.test.tsx +8 -0
- package/src/features/chat/features/session/components/session-header/chat-session-header-actions.tsx +3 -0
- package/src/features/chat/features/session/components/session-header/chat-session-more-actions-menu.tsx +6 -0
- package/src/features/chat/features/session/utils/chat-session-route.utils.ts +12 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-child-sessions.test.tsx +28 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-file-preview.test.tsx +9 -0
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel-content.test.tsx +6 -2
- package/src/features/chat/features/workspace/components/__tests__/chat-session-workspace-panel.test.tsx +49 -12
- package/src/features/chat/features/workspace/components/chat-session-workspace-file-preview.tsx +13 -6
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-content.tsx +6 -0
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel-nav.tsx +21 -36
- package/src/features/chat/features/workspace/components/chat-session-workspace-panel.tsx +40 -31
- package/src/features/chat/features/workspace/components/child-sessions/chat-session-child-sessions.tsx +6 -1
- 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-project-files-toolbar.tsx +2 -2
- package/src/features/chat/features/workspace/utils/__tests__/chat-workspace-panel-view-model.utils.test.ts +27 -0
- package/src/features/chat/features/workspace/utils/__tests__/workspace-file-panel-route.utils.test.ts +94 -0
- package/src/features/chat/features/workspace/utils/chat-workspace-file-tab-persistence.utils.ts +2 -0
- package/src/features/chat/features/workspace/utils/chat-workspace-file-tab.utils.ts +15 -0
- package/src/features/chat/features/workspace/utils/chat-workspace-panel-view-model.utils.ts +11 -0
- package/src/features/chat/features/workspace/utils/workspace-file-panel-route.utils.ts +147 -0
- package/src/features/chat/index.ts +20 -4
- package/src/features/chat/managers/__tests__/chat-completion-notification.manager.test.ts +8 -0
- package/src/features/chat/managers/__tests__/chat-thread-workspace.manager.test.ts +7 -2
- package/src/features/chat/managers/__tests__/session-surface.manager.test.ts +45 -0
- package/src/features/chat/managers/chat-completion-notification.manager.ts +5 -0
- package/src/features/chat/managers/chat-composer-intent.manager.ts +16 -0
- package/src/features/chat/managers/chat-thread.manager.ts +18 -27
- package/src/features/chat/managers/session-surface.manager.ts +46 -0
- package/src/features/chat/pages/__tests__/ncp-chat-page.test.tsx +23 -5
- package/src/features/chat/pages/ncp-chat-page.tsx +6 -86
- package/src/features/chat/presenters/chat.presenter.ts +2 -1
- package/src/features/chat/stores/__tests__/chat-thread.store.test.ts +2 -2
- package/src/features/chat/stores/chat-session-list.store.ts +27 -1
- package/src/features/chat/stores/chat-thread.store.ts +7 -1
- package/src/features/chat/stores/floating-session.store.ts +11 -0
- package/src/features/cron/components/__tests__/cron-config.test.tsx +4 -0
- package/src/features/cron/components/cron-job-detail-dialog.tsx +3 -1
- package/src/features/cron/components/cron-job-row.tsx +5 -1
- package/src/features/inbox/components/inbox-reader-dialog.test.tsx +3 -0
- package/src/features/inbox/components/inbox-reader-dialog.tsx +3 -0
- package/src/features/inbox/pages/inbox-page.test.ts +3 -0
- package/src/features/inbox/pages/inbox-page.tsx +3 -0
- package/src/features/marketplace/components/__tests__/marketplace-page-detail.test.tsx +5 -1
- package/src/features/marketplace/components/__tests__/marketplace-page.test.tsx +3 -0
- package/src/features/marketplace/components/curated-shelves/__tests__/marketplace-curated-scene-route.test.tsx +2 -0
- package/src/features/marketplace/components/marketplace-list-card.tsx +4 -0
- package/src/features/marketplace/components/mcp/__tests__/mcp-marketplace-page.test.tsx +2 -0
- package/src/features/marketplace/components/mcp/mcp-marketplace-card.tsx +3 -0
- package/src/features/notifications/components/__tests__/app-notification-toast.test.tsx +19 -0
- package/src/features/notifications/components/app-notification-toast.tsx +33 -15
- package/src/features/notifications/managers/app-notification.manager.ts +2 -0
- package/src/features/panel-apps/components/__tests__/panel-app-list-item.test.tsx +11 -4
- package/src/features/panel-apps/components/__tests__/panel-app-toolbar.test.tsx +11 -5
- package/src/features/panel-apps/components/panel-app-main-sidebar-menu-item.tsx +5 -38
- package/src/features/panel-apps/index.ts +1 -1
- package/src/features/projects/components/project-materials.test.tsx +2 -0
- package/src/features/projects/components/project-skills.tsx +7 -3
- package/src/features/projects/components/work/project-work-item-drawer.test.tsx +2 -0
- package/src/features/projects/components/work/project-work-item-drawer.tsx +3 -1
- package/src/features/right-panel-resources/components/__tests__/page-resource-icon.test.tsx +67 -0
- package/src/features/right-panel-resources/components/__tests__/page-resource-sidebar-nav.test.tsx +158 -0
- package/src/features/right-panel-resources/components/__tests__/system-object-resource.test.tsx +42 -0
- package/src/features/right-panel-resources/components/current-page-actions.tsx +36 -0
- package/src/features/right-panel-resources/components/page-resource-actions-menu.tsx +71 -0
- package/src/features/right-panel-resources/components/page-resource-icon.tsx +245 -0
- package/src/features/right-panel-resources/components/page-resource-sidebar-nav.tsx +122 -0
- package/src/features/right-panel-resources/components/system-object-resource.tsx +100 -0
- package/src/features/right-panel-resources/components/workspace-file-resource.tsx +56 -0
- package/src/features/right-panel-resources/configs/right-panel-resource-routes.config.ts +46 -3
- package/src/features/right-panel-resources/hooks/use-page-resource-actions.ts +137 -0
- package/src/features/right-panel-resources/index.ts +22 -8
- package/src/features/right-panel-resources/managers/__tests__/page-resource.manager.test.ts +149 -0
- package/src/features/right-panel-resources/managers/page-resource.manager.ts +342 -0
- package/src/features/right-panel-resources/pages/resource-page.tsx +114 -0
- package/src/features/right-panel-resources/stores/page-navigation.store.ts +55 -0
- package/src/features/right-panel-resources/types/page-resource.types.ts +11 -0
- package/src/features/right-panel-resources/utils/__tests__/right-panel-resource-route-resolver.utils.test.ts +10 -0
- package/src/features/right-panel-resources/utils/page-resource-identity.utils.ts +61 -0
- package/src/features/right-panel-resources/utils/right-panel-resource-uri.utils.ts +2 -6
- package/src/features/service-apps/components/__tests__/service-apps-panel.test.tsx +2 -0
- package/src/features/service-apps/components/service-app-list-item.tsx +5 -1
- package/src/features/settings/pages/providers-config-page.tsx +2 -2
- package/src/features/side-dock/components/__tests__/side-dock.test.tsx +9 -8
- package/src/features/side-dock/components/side-dock.tsx +14 -47
- package/src/features/side-dock/managers/side-dock.manager.ts +2 -0
- package/src/platforms/desktop/components/__tests__/desktop-app-shell.test.tsx +3 -0
- package/src/platforms/desktop/components/desktop-app-shell.tsx +5 -14
- package/src/platforms/mobile/components/__tests__/mobile-app-shell.test.tsx +1 -0
- package/src/platforms/mobile/components/__tests__/mobile-bottom-nav.test.tsx +3 -2
- package/src/platforms/mobile/components/mobile-app-shell.tsx +5 -4
- package/src/platforms/mobile/components/mobile-bottom-nav.tsx +7 -7
- package/src/platforms/mobile/components/mobile-topbar.tsx +4 -4
- package/src/shared/components/doc-browser/__tests__/doc-browser-context.test.tsx +4 -3
- package/src/shared/components/doc-browser/__tests__/doc-browser-tab-strip.test.tsx +0 -5
- package/src/shared/components/doc-browser/__tests__/doc-browser.test.tsx +57 -73
- package/src/shared/components/doc-browser/__tests__/resource-link-interceptor.test.tsx +104 -0
- package/src/shared/components/doc-browser/doc-browser-context.tsx +5 -1
- package/src/shared/components/doc-browser/doc-browser-panel-parts.tsx +1 -1
- package/src/shared/components/doc-browser/doc-browser-tab-strip.tsx +6 -118
- package/src/shared/components/doc-browser/doc-browser.tsx +30 -194
- package/src/shared/components/doc-browser/hooks/use-doc-browser-scroll-restoration.ts +1 -1
- package/src/shared/components/doc-browser/managers/doc-browser.manager.ts +11 -1
- package/src/shared/components/doc-browser/stores/doc-browser.store.ts +3 -7
- package/src/shared/components/doc-browser/types/doc-browser.types.ts +8 -1
- package/src/shared/components/doc-browser/use-doc-link-interceptor.ts +30 -32
- package/src/shared/components/doc-browser/utils/doc-browser-state.utils.ts +6 -6
- package/src/shared/components/ui/context-menu/__tests__/context-menu.test.tsx +22 -0
- package/src/shared/components/ui/context-menu/context-menu.tsx +18 -10
- package/src/shared/components/workbench/__tests__/workbench-surface.manager.test.ts +70 -0
- package/src/shared/components/workbench/__tests__/workbench-surface.test.tsx +111 -0
- package/src/shared/components/workbench/managers/workbench-surface.manager.ts +120 -0
- package/src/shared/components/workbench/stores/workbench-surface.store.ts +83 -0
- package/src/shared/components/workbench/types/workbench-surface.types.ts +32 -0
- package/src/shared/components/workbench/utils/workbench-surface-geometry.utils.ts +46 -0
- package/src/shared/components/workbench/workbench-surface-toolbar.tsx +102 -0
- package/src/shared/components/workbench/workbench-surface.tsx +401 -0
- package/src/shared/hooks/use-panel-app-scroll-restoration.test.tsx +19 -0
- package/src/shared/hooks/use-panel-app-scroll-restoration.ts +8 -6
- package/src/shared/hooks/use-scroll-restoration.test.tsx +39 -2
- package/src/shared/hooks/use-scroll-restoration.ts +33 -33
- package/src/shared/lib/api/marketplace.types.ts +1 -0
- package/src/shared/lib/i18n/locales/en-US/chat.json +38 -0
- package/src/shared/lib/i18n/locales/en-US/doc-browser.json +1 -1
- package/src/shared/lib/i18n/locales/zh-CN/chat.json +38 -0
- package/src/shared/lib/navigation-history/index.ts +1 -0
- package/src/shared/lib/navigation-history/navigation-history.utils.ts +1 -1
- package/src/shared/lib/navigation-history/scroll-restoration.manager.test.ts +11 -0
- package/src/shared/lib/navigation-history/scroll-restoration.manager.ts +36 -7
- package/src/shared/lib/navigation-history/view-memory-storage.store.test.ts +37 -0
- package/src/shared/lib/navigation-history/view-memory-storage.store.ts +21 -0
- package/src/shared/lib/ui-document-title/index.ts +1 -0
- package/dist/assets/account-panel-BXTCFv7d.js +0 -1
- package/dist/assets/api-DqzQ-_3w.js +0 -13
- package/dist/assets/app-data-C54N2p8b.js +0 -1
- package/dist/assets/app-presenter-provider-V0xnU_Wb.js +0 -115
- package/dist/assets/appearance-settings-page-83T2AtVm.js +0 -1
- package/dist/assets/architecture-TIHT7OUA-DEt0Abz9.js +0 -1
- package/dist/assets/boxes-D6uPnkGo.js +0 -1
- package/dist/assets/card-BhfAZv5L.js +0 -1
- package/dist/assets/channel-CxQkbwRD.js +0 -1
- package/dist/assets/channels-list-page-Bv7CVSqV.js +0 -8
- package/dist/assets/chevron-down-BL-yMYcX.js +0 -1
- package/dist/assets/chunk-2Q5K7J3B-ClVhziok.js +0 -1
- package/dist/assets/chunk-VAUOI2AC-DZQxkIsv.js +0 -1
- package/dist/assets/chunk-XXDRQBXY-BkExtw5C.js +0 -1
- package/dist/assets/circle-alert-lSa3LRvS.js +0 -1
- package/dist/assets/classDiagram-OUVF2IWQ-Bd6apBb-.js +0 -1
- package/dist/assets/classDiagram-v2-EOCWNBFH-CYxUZGCI.js +0 -1
- package/dist/assets/client-BtGBwLTs.js +0 -1
- package/dist/assets/config-split-page-DqAXKLmG.js +0 -1
- package/dist/assets/confirm-dialog-BTKCWMn6.js +0 -1
- package/dist/assets/createLucideIcon-BNKf0_kc.js +0 -1
- package/dist/assets/cynefin-VYW2F7L2-CV0bFLH9.js +0 -1
- package/dist/assets/desktop-capabilities-page-zLzCSB7A.js +0 -1
- package/dist/assets/desktop-update-config-PmofcFf6.js +0 -1
- package/dist/assets/dialog-Xe73hpQz.js +0 -5
- package/dist/assets/dist-BiIcnf9j.js +0 -1
- package/dist/assets/dist-C5I0v8Qn.js +0 -1
- package/dist/assets/dist-czPa8xFO.js +0 -1
- package/dist/assets/doc-browser-BJrre2S_.js +0 -1
- package/dist/assets/doc-browser-BPqA-zQx.js +0 -1
- package/dist/assets/doc-browser-context-TILuCY5c.js +0 -1
- package/dist/assets/ellipsis-C5YXdOUx.js +0 -1
- package/dist/assets/es2015-cuwbYI-l.js +0 -41
- package/dist/assets/eventmodeling-45OFAUF4-BzkLWWdP.js +0 -1
- package/dist/assets/extensions-CVUFK6Jj.js +0 -1
- package/dist/assets/flowDiagram-23GEKE2U-ukkCsB0j.js +0 -1
- package/dist/assets/form-actions-BRESe-m_.js +0 -1
- package/dist/assets/gitGraph-TEB2WS4Q-BYFhT0Q5.js +0 -1
- package/dist/assets/i18n-provider-BPRq6S7O.js +0 -1
- package/dist/assets/info-DKCQHKI2-CTmlJdcH.js +0 -1
- package/dist/assets/katex-DbZC06Q5.js +0 -1
- package/dist/assets/keyboard-shortcuts-settings-page-CkQbSKwI.js +0 -1
- package/dist/assets/loader-circle-K1BDdHR5.js +0 -1
- package/dist/assets/login-page-Dlyvp-81.js +0 -1
- package/dist/assets/login-page-f8qQ4xKY.js +0 -1
- package/dist/assets/logo-badge-C-5-zim6.js +0 -1
- package/dist/assets/main-D2dWy8fM.css +0 -1
- package/dist/assets/main-i18n-catalog.config-DZ-5ollN.js +0 -1
- package/dist/assets/main-ky5Efhq1.js +0 -2
- package/dist/assets/mcp-marketplace-page-FfIfEo6w.js +0 -10
- package/dist/assets/mcp-marketplace-page-sH7VptN_.js +0 -1
- package/dist/assets/model-config-page-Bcm6-pCX.js +0 -1
- package/dist/assets/navigation-link-BAQjgx2F.js +0 -3
- package/dist/assets/packet-7NZHBO7P-BbrI0ZlN.js +0 -1
- package/dist/assets/panel-app-i18n-catalog.config-p3qAY_Eq.js +0 -1
- package/dist/assets/panelStandalone-By-6dDXS.js +0 -2
- package/dist/assets/pie-RZYD4A2V-B7zE1ZIr.js +0 -1
- package/dist/assets/plus-LA8-jpxP.js +0 -1
- package/dist/assets/popover-NkrFlWHp.js +0 -1
- package/dist/assets/privacy-settings-page-B1sHLAc1.js +0 -1
- package/dist/assets/projects-O3GTERwP.js +0 -1
- package/dist/assets/provider-models-hrHMcHqg.js +0 -1
- package/dist/assets/provider-scoped-model-input-BQsugx1v.js +0 -1
- package/dist/assets/providers-config-page-BDEdHJbw.js +0 -1
- package/dist/assets/pwa-D_nZUwG0.js +0 -1
- package/dist/assets/radar-I7S5WNFK-1X_q11Ed.js +0 -1
- package/dist/assets/railroad-3IZDKUUU-CIXnuFyE.js +0 -1
- package/dist/assets/railroad-abnf-AHOZXSZD-D6ImKl2r.js +0 -1
- package/dist/assets/railroad-ebnf-EBAXGLYW-2j9d3twU.js +0 -1
- package/dist/assets/railroad-peg-LSFZ7HO6-DMVaJGbm.js +0 -1
- package/dist/assets/remote-CFWp4wyH.js +0 -1
- package/dist/assets/runtime-config-page-BHTKwgDi.js +0 -1
- package/dist/assets/search-CUe41wjm.js +0 -1
- package/dist/assets/search-config-page-DWKlMHgH.js +0 -1
- package/dist/assets/secrets-config-page-DiQL088Y.js +0 -3
- package/dist/assets/security-config-DmTDKKY4.js +0 -1
- package/dist/assets/select-CG5YWnwe.js +0 -1
- package/dist/assets/service-apps-panel-CEnyYsQp.js +0 -1
- package/dist/assets/skeleton-Drvn83YW.js +0 -1
- package/dist/assets/stateDiagram-v2-6OUMAXLB-OlIMT57r.js +0 -1
- package/dist/assets/swimlanesDiagram-G3AALYLV-sLThrh07.js +0 -8
- package/dist/assets/tabs-BuE0qKMh.js +0 -1
- package/dist/assets/tag-chip-B1AYPOKL.js +0 -1
- package/dist/assets/theme-provider-DzvAi3pe.js +0 -1
- package/dist/assets/tooltip-DYcuWhuP.js +0 -1
- package/dist/assets/trash-2-BPPYt2NV.js +0 -1
- package/dist/assets/treeView-QDETBFTQ-CCFyazDE.js +0 -1
- package/dist/assets/treemap-6X3UGDF4-D6wvq1Hz.js +0 -1
- package/dist/assets/use-config-BEdbtpD4.js +0 -1
- package/dist/assets/use-panel-app-scroll-restoration-ZnicIfo3.js +0 -1
- package/dist/assets/use-viewport-layout-BS18drMT.js +0 -1
- package/dist/assets/utils-CBZPzC_b.js +0 -8
- package/dist/assets/wardley-OPB4EBWU-BRzaRyFf.js +0 -1
- package/dist/assets/x-DdXOqLnX.js +0 -1
- package/src/features/panel-apps/components/__tests__/panel-app-main-sidebar-nav.test.tsx +0 -219
- package/src/features/panel-apps/components/panel-app-main-sidebar-nav.tsx +0 -258
- package/src/shared/components/doc-browser/utils/doc-browser-floating-panel.utils.ts +0 -83
- /package/dist/assets/{array-D0DyKZdT.js → array-B0sEvCP9.js} +0 -0
- /package/dist/assets/{chunk-KEIR6QF5-CuZFOa6q.js → chunk-KEIR6QF5-BeO7fxDQ.js} +0 -0
- /package/dist/assets/{chunk-Y2CYZVJY-Frut-1TF.js → chunk-Y2CYZVJY-JQfgEV36.js} +0 -0
- /package/dist/assets/{config-hints-B_C9DAp5.js → config-hints-D3OuwoEY.js} +0 -0
- /package/dist/assets/{cytoscape.esm-BibuhnZD.js → cytoscape.esm-CzJ9uXgi.js} +0 -0
- /package/dist/assets/{defaultLocale-q7sRUXPc.js → defaultLocale-USmzX3VG.js} +0 -0
- /package/dist/assets/{dist-DhMddrrH.js → dist-BYF6XVna.js} +0 -0
- /package/dist/assets/{graphlib-BM63WsW3.js → graphlib-DEFMkHdW.js} +0 -0
- /package/dist/assets/{host-capabilities-B107nwS3.js → host-capabilities-C0MmWd3M.js} +0 -0
- /package/dist/assets/{init-CRMkf9sL.js → init-04ErALoz.js} +0 -0
- /package/dist/assets/{jszip.min-6thm2J_a.js → jszip.min-BnQ5NRy2.js} +0 -0
- /package/dist/assets/{katex-B26hhTOT.js → katex-CsAM73R9.js} +0 -0
- /package/dist/assets/{middleware-0o3JF3tS.js → middleware-CAXxl-af.js} +0 -0
- /package/dist/assets/{panel-app-B39rJPj8.js → panel-app-2EACRB8p.js} +0 -0
- /package/dist/assets/{path-BFMmafCM.js → path-CzxQ9n2G.js} +0 -0
- /package/dist/assets/{rough.esm-5Tjchx1D.js → rough.esm-pT9fdsW3.js} +0 -0
- /package/dist/assets/{xlsx-BC8ibjXK.js → xlsx-BRpCSiE4.js} +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WorkbenchSurfaceManager } from '@/shared/components/workbench/managers/workbench-surface.manager';
|
|
1
2
|
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
2
3
|
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
4
|
import {
|
|
@@ -23,7 +24,7 @@ describe('SideDock', () => {
|
|
|
23
24
|
it('renders built-in entries and opens the selected resource', () => {
|
|
24
25
|
const openItem = vi.fn();
|
|
25
26
|
const manager = { openItem } as unknown as SideDockManager;
|
|
26
|
-
const docBrowserManager = new DocBrowserManager();
|
|
27
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
27
28
|
|
|
28
29
|
render(
|
|
29
30
|
<DocBrowserProvider manager={docBrowserManager}>
|
|
@@ -47,7 +48,7 @@ describe('SideDock', () => {
|
|
|
47
48
|
|
|
48
49
|
it('places the GitHub project shortcut in the utility section', () => {
|
|
49
50
|
const manager = { openItem: vi.fn() } as unknown as SideDockManager;
|
|
50
|
-
const docBrowserManager = new DocBrowserManager();
|
|
51
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
51
52
|
|
|
52
53
|
render(
|
|
53
54
|
<DocBrowserProvider manager={docBrowserManager}>
|
|
@@ -62,7 +63,7 @@ describe('SideDock', () => {
|
|
|
62
63
|
|
|
63
64
|
it('confirms before hiding the dock and persists the visibility preference', async () => {
|
|
64
65
|
const manager = { openItem: vi.fn() } as unknown as SideDockManager;
|
|
65
|
-
const docBrowserManager = new DocBrowserManager();
|
|
66
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
66
67
|
|
|
67
68
|
render(
|
|
68
69
|
<DocBrowserProvider manager={docBrowserManager}>
|
|
@@ -85,7 +86,7 @@ describe('SideDock', () => {
|
|
|
85
86
|
|
|
86
87
|
it('does not highlight the default docs tab while DocBrowser is closed', () => {
|
|
87
88
|
const manager = { openItem: vi.fn() } as unknown as SideDockManager;
|
|
88
|
-
const docBrowserManager = new DocBrowserManager();
|
|
89
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
89
90
|
|
|
90
91
|
render(
|
|
91
92
|
<DocBrowserProvider manager={docBrowserManager}>
|
|
@@ -105,7 +106,7 @@ describe('SideDock', () => {
|
|
|
105
106
|
openItem: vi.fn(),
|
|
106
107
|
unpinItem: vi.fn(),
|
|
107
108
|
} as unknown as SideDockManager;
|
|
108
|
-
const docBrowserManager = new DocBrowserManager();
|
|
109
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
109
110
|
useSideDockStore.getState().setPinnedItems([
|
|
110
111
|
{
|
|
111
112
|
createdAt: '2026-06-02T00:00:00.000Z',
|
|
@@ -134,7 +135,7 @@ describe('SideDock', () => {
|
|
|
134
135
|
openItem: vi.fn(),
|
|
135
136
|
unpinItem: vi.fn(),
|
|
136
137
|
} as unknown as SideDockManager;
|
|
137
|
-
const docBrowserManager = new DocBrowserManager();
|
|
138
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
138
139
|
useSideDockStore.getState().setPinnedItems([
|
|
139
140
|
{
|
|
140
141
|
createdAt: '2026-06-02T00:00:00.000Z',
|
|
@@ -159,7 +160,7 @@ describe('SideDock', () => {
|
|
|
159
160
|
openItem: vi.fn(),
|
|
160
161
|
unpinItem: vi.fn(),
|
|
161
162
|
} as unknown as SideDockManager;
|
|
162
|
-
const docBrowserManager = new DocBrowserManager();
|
|
163
|
+
const docBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), );
|
|
163
164
|
useSideDockStore.getState().setPinnedItems([
|
|
164
165
|
{
|
|
165
166
|
createdAt: '2026-06-02T00:00:00.000Z',
|
|
@@ -176,6 +177,6 @@ describe('SideDock', () => {
|
|
|
176
177
|
</DocBrowserProvider>,
|
|
177
178
|
);
|
|
178
179
|
|
|
179
|
-
expect(screen.getByText('🎨').className).toContain('text-
|
|
180
|
+
expect(screen.getByText('🎨').parentElement?.className).toContain('text-xl');
|
|
180
181
|
});
|
|
181
182
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PanelRightClose, X } from 'lucide-react';
|
|
2
2
|
import type { LucideIcon } from 'lucide-react';
|
|
3
3
|
import type { SideDockManager } from '@/features/side-dock/managers/side-dock.manager';
|
|
4
4
|
import {
|
|
@@ -7,9 +7,7 @@ import {
|
|
|
7
7
|
} from '@/features/side-dock/configs/side-dock-built-in-items.config';
|
|
8
8
|
import { useSideDockStore } from '@/features/side-dock/stores/side-dock.store';
|
|
9
9
|
import type {
|
|
10
|
-
SideDockIconName,
|
|
11
10
|
SideDockItem,
|
|
12
|
-
SideDockItemIcon,
|
|
13
11
|
} from '@/features/side-dock/types/side-dock.types';
|
|
14
12
|
import { mergeSideDockItems } from '@/features/side-dock/utils/side-dock-item.utils';
|
|
15
13
|
import {
|
|
@@ -26,56 +24,23 @@ import { useConfirmDialog } from '@/shared/hooks/use-confirm-dialog';
|
|
|
26
24
|
import { t } from '@/shared/lib/i18n';
|
|
27
25
|
import { cn } from '@/shared/lib/utils';
|
|
28
26
|
|
|
27
|
+
import { PageResourceIcon } from '@/features/right-panel-resources';
|
|
28
|
+
import { ContextMenu, type ContextMenuGroup } from '@/shared/components/ui/context-menu/context-menu';
|
|
29
|
+
|
|
29
30
|
type SideDockProps = {
|
|
31
|
+
getItemMenuGroups?: (item: SideDockItem) => ContextMenuGroup[];
|
|
30
32
|
manager: SideDockManager;
|
|
31
33
|
};
|
|
32
34
|
|
|
33
|
-
const SIDE_DOCK_ICON_COMPONENTS: Record<SideDockIconName, LucideIcon> = {
|
|
34
|
-
apps: Boxes,
|
|
35
|
-
docs: BookOpen,
|
|
36
|
-
github: Github,
|
|
37
|
-
'new-tab': Plus,
|
|
38
|
-
'panel-app': AppWindow,
|
|
39
|
-
'service-apps': AppWindow,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
const SIDE_DOCK_UTILITY_ITEM_IDS = new Set<string>([SIDE_DOCK_GITHUB_PROJECT_ITEM_ID]);
|
|
43
|
-
|
|
44
|
-
const SIDE_DOCK_EMOJI_ICON_PATTERN = /^\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?(?:\u200D\p{Extended_Pictographic}(?:\uFE0F|\uFE0E)?)*$/u;
|
|
45
|
-
|
|
46
|
-
function isSideDockEmojiIcon(value: string): boolean {
|
|
47
|
-
return SIDE_DOCK_EMOJI_ICON_PATTERN.test(value.trim());
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function SideDockItemIconView({ icon }: { icon: SideDockItemIcon }) {
|
|
51
|
-
if (icon.type === 'url') {
|
|
52
|
-
return <img src={icon.url} alt="" className="h-5 w-5 rounded object-cover" />;
|
|
53
|
-
}
|
|
54
|
-
if (icon.type === 'text') {
|
|
55
|
-
if (isSideDockEmojiIcon(icon.value)) {
|
|
56
|
-
return (
|
|
57
|
-
<span className="flex h-7 w-7 items-center justify-center text-[20px] leading-none" aria-hidden="true">
|
|
58
|
-
{icon.value}
|
|
59
|
-
</span>
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
return (
|
|
63
|
-
<span className="max-w-7 truncate text-center text-[13px] font-semibold leading-none" aria-hidden="true">
|
|
64
|
-
{icon.value}
|
|
65
|
-
</span>
|
|
66
|
-
);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const Icon = SIDE_DOCK_ICON_COMPONENTS[icon.name];
|
|
70
|
-
return <Icon className="h-5 w-5" aria-hidden="true" />;
|
|
71
|
-
}
|
|
72
35
|
|
|
73
36
|
function SideDockButton({
|
|
74
37
|
active,
|
|
75
38
|
item,
|
|
76
39
|
onOpen,
|
|
77
40
|
onUnpin,
|
|
41
|
+
menuGroups = [],
|
|
78
42
|
}: {
|
|
43
|
+
menuGroups?: ContextMenuGroup[];
|
|
79
44
|
active: boolean;
|
|
80
45
|
item: SideDockItem;
|
|
81
46
|
onOpen: (item: SideDockItem) => void;
|
|
@@ -85,7 +50,7 @@ function SideDockButton({
|
|
|
85
50
|
|
|
86
51
|
return (
|
|
87
52
|
<Tooltip>
|
|
88
|
-
<div className="group relative">
|
|
53
|
+
<ContextMenu groups={menuGroups} label={t('pageActions')}><div className="group relative">
|
|
89
54
|
<TooltipTrigger asChild>
|
|
90
55
|
<button
|
|
91
56
|
type="button"
|
|
@@ -101,7 +66,7 @@ function SideDockButton({
|
|
|
101
66
|
: 'bg-transparent',
|
|
102
67
|
)}
|
|
103
68
|
>
|
|
104
|
-
<
|
|
69
|
+
<span className="flex items-center text-xl"><PageResourceIcon uri={getSideDockResourceUri(item) ?? ''} icon={item.icon} /></span>
|
|
105
70
|
</button>
|
|
106
71
|
</TooltipTrigger>
|
|
107
72
|
{item.removable ? (
|
|
@@ -118,7 +83,7 @@ function SideDockButton({
|
|
|
118
83
|
<X className="h-3 w-3" aria-hidden="true" />
|
|
119
84
|
</button>
|
|
120
85
|
) : null}
|
|
121
|
-
</div>
|
|
86
|
+
</div></ContextMenu>
|
|
122
87
|
<TooltipContent side="left">{label}</TooltipContent>
|
|
123
88
|
</Tooltip>
|
|
124
89
|
);
|
|
@@ -202,10 +167,10 @@ function hasExactActiveSideDockItem(items: SideDockItem[], currentTab?: DocBrows
|
|
|
202
167
|
}
|
|
203
168
|
|
|
204
169
|
function isSideDockUtilityItem(item: SideDockItem): boolean {
|
|
205
|
-
return
|
|
170
|
+
return item.id === SIDE_DOCK_GITHUB_PROJECT_ITEM_ID;
|
|
206
171
|
}
|
|
207
172
|
|
|
208
|
-
export function SideDock({ manager }: SideDockProps) {
|
|
173
|
+
export function SideDock({ manager, getItemMenuGroups }: SideDockProps) {
|
|
209
174
|
const pinnedItems = useSideDockStore((state) => state.pinnedItems);
|
|
210
175
|
const setSideDockVisible = useSideDockStore((state) => state.setVisible);
|
|
211
176
|
const { currentTab, isOpen } = useDocBrowser();
|
|
@@ -237,6 +202,7 @@ export function SideDock({ manager }: SideDockProps) {
|
|
|
237
202
|
{mainItems.map((item) => (
|
|
238
203
|
<SideDockButton
|
|
239
204
|
key={item.id}
|
|
205
|
+
menuGroups={getItemMenuGroups?.(item)}
|
|
240
206
|
active={isSideDockItemActive(item, isOpen, currentTab, hasExactActiveItem)}
|
|
241
207
|
item={item}
|
|
242
208
|
onOpen={manager.openItem}
|
|
@@ -249,6 +215,7 @@ export function SideDock({ manager }: SideDockProps) {
|
|
|
249
215
|
{utilityItems.map((item) => (
|
|
250
216
|
<SideDockButton
|
|
251
217
|
key={item.id}
|
|
218
|
+
menuGroups={getItemMenuGroups?.(item)}
|
|
252
219
|
active={isSideDockItemActive(item, isOpen, currentTab, hasExactActiveItem)}
|
|
253
220
|
item={item}
|
|
254
221
|
onOpen={manager.openItem}
|
|
@@ -176,6 +176,8 @@ export class SideDockManager {
|
|
|
176
176
|
};
|
|
177
177
|
|
|
178
178
|
private getTabResourceUri = (tab?: DocBrowserTab): string | null => {
|
|
179
|
+
// Snapshot-backed previews cannot be reconstructed from a shortcut URI alone.
|
|
180
|
+
if (tab?.viewState != null) return null;
|
|
179
181
|
const uri = tab?.resourceUri ?? tab?.currentUrl;
|
|
180
182
|
const normalized = uri ? normalizeSideDockResourceUri(uri) : '';
|
|
181
183
|
return normalized.length > 0 ? normalized : null;
|
|
@@ -167,3 +167,6 @@ describe("DesktopAppShell", () => {
|
|
|
167
167
|
expect(screen.getByTestId("app-content")).toBeTruthy();
|
|
168
168
|
});
|
|
169
169
|
});
|
|
170
|
+
|
|
171
|
+
vi.mock("@/shared/components/doc-browser/doc-browser", () => ({ DocBrowser: () => null }));
|
|
172
|
+
vi.mock("@/features/right-panel-resources/components/current-page-actions", () => ({ CurrentPageActions: () => null }));
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CurrentPageActions } from '@/features/right-panel-resources';
|
|
1
2
|
import { lazy, Suspense } from "react";
|
|
2
3
|
import type { CSSProperties } from "react";
|
|
3
4
|
import {
|
|
@@ -36,8 +37,6 @@ type DesktopAppShellProps = {
|
|
|
36
37
|
export function DesktopAppShell({
|
|
37
38
|
pathname,
|
|
38
39
|
isMobileLayout = false,
|
|
39
|
-
isDocBrowserOpen,
|
|
40
|
-
docBrowserMode,
|
|
41
40
|
docBrowserDockControls,
|
|
42
41
|
docBrowserRenderers = {},
|
|
43
42
|
docBrowserTabMenuGroups,
|
|
@@ -133,10 +132,11 @@ export function DesktopAppShell({
|
|
|
133
132
|
{shouldUseWindowsChrome ? (
|
|
134
133
|
<DesktopWindowChrome sidebarCollapsed={isSidebarCollapsed} />
|
|
135
134
|
) : null}
|
|
136
|
-
<div className="relative
|
|
135
|
+
<div className="relative flex min-h-0 flex-1 overflow-hidden">
|
|
137
136
|
{!isMainRoute && <Sidebar />}
|
|
138
137
|
<div className="flex-1 flex min-w-0 overflow-hidden relative">
|
|
139
138
|
<div className="flex-1 flex flex-col min-w-0 overflow-hidden">
|
|
139
|
+
{!isMainRoute ? <CurrentPageActions /> : null}
|
|
140
140
|
{isMainRoute ? (
|
|
141
141
|
<div className="flex-1 h-full overflow-hidden">{children}</div>
|
|
142
142
|
) : (
|
|
@@ -152,7 +152,7 @@ export function DesktopAppShell({
|
|
|
152
152
|
</main>
|
|
153
153
|
)}
|
|
154
154
|
</div>
|
|
155
|
-
{
|
|
155
|
+
{(
|
|
156
156
|
<Suspense fallback={null}>
|
|
157
157
|
<DocBrowser
|
|
158
158
|
customTabRenderers={docBrowserRenderers}
|
|
@@ -160,20 +160,11 @@ export function DesktopAppShell({
|
|
|
160
160
|
getTabMenuGroups={docBrowserTabMenuGroups}
|
|
161
161
|
/>
|
|
162
162
|
</Suspense>
|
|
163
|
-
)
|
|
163
|
+
)}
|
|
164
164
|
{sideDock}
|
|
165
165
|
</div>
|
|
166
166
|
</div>
|
|
167
167
|
{showMobileBottomNav ? <MobileBottomNav /> : null}
|
|
168
|
-
{isDocBrowserOpen && docBrowserMode === "floating" ? (
|
|
169
|
-
<Suspense fallback={null}>
|
|
170
|
-
<DocBrowser
|
|
171
|
-
customTabRenderers={docBrowserRenderers}
|
|
172
|
-
dockControls={docBrowserDockControls}
|
|
173
|
-
getTabMenuGroups={docBrowserTabMenuGroups}
|
|
174
|
-
/>
|
|
175
|
-
</Suspense>
|
|
176
|
-
) : null}
|
|
177
168
|
</div>
|
|
178
169
|
);
|
|
179
170
|
}
|
|
@@ -38,6 +38,7 @@ describe("MobileAppShell", () => {
|
|
|
38
38
|
expect(shell.className).toContain("supports-[height:100dvh]:h-[100dvh]");
|
|
39
39
|
expect(shell.className).not.toContain("h-screen");
|
|
40
40
|
expect(screen.getByTestId("mobile-bottom-nav")).toBeTruthy();
|
|
41
|
+
expect(screen.queryByTestId('mobile-topbar')).toBeNull();
|
|
41
42
|
});
|
|
42
43
|
|
|
43
44
|
it("centers primary route titles without reserving back-button spacers", () => {
|
|
@@ -7,7 +7,8 @@ import { MobileBottomNav } from "@/platforms/mobile/components/mobile-bottom-nav
|
|
|
7
7
|
|
|
8
8
|
const { openAppsMock } = vi.hoisted(() => ({ openAppsMock: vi.fn() }));
|
|
9
9
|
|
|
10
|
-
vi.mock("@/features/panel-apps", () => ({
|
|
10
|
+
vi.mock("@/features/panel-apps", async (importOriginal) => ({
|
|
11
|
+
...await importOriginal<object>(), openApps: openAppsMock }));
|
|
11
12
|
vi.mock("@/shared/components/doc-browser", () => ({
|
|
12
13
|
useDocBrowser: () => ({ open: vi.fn() }),
|
|
13
14
|
}));
|
|
@@ -39,7 +40,7 @@ describe("MobileBottomNav", () => {
|
|
|
39
40
|
).toBeNull();
|
|
40
41
|
expect(screen.getByTestId("mobile-nav-active-indicator")).toBeTruthy();
|
|
41
42
|
expect(screen.getByRole("link", { name: /settings/i }).className).toContain(
|
|
42
|
-
"bg-
|
|
43
|
+
"bg-muted",
|
|
43
44
|
);
|
|
44
45
|
expect(screen.getByTestId("mobile-nav-active-indicator").textContent).toMatch(
|
|
45
46
|
/settings/i,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CurrentPageActions } from '@/features/right-panel-resources';
|
|
1
2
|
import { lazy, Suspense } from "react";
|
|
2
3
|
import {
|
|
3
4
|
isChatSessionDetailRoute,
|
|
@@ -25,7 +26,6 @@ type MobileAppShellProps = {
|
|
|
25
26
|
|
|
26
27
|
export function MobileAppShell({
|
|
27
28
|
pathname,
|
|
28
|
-
isDocBrowserOpen,
|
|
29
29
|
docBrowserDockControls,
|
|
30
30
|
docBrowserRenderers = {},
|
|
31
31
|
docBrowserTabMenuGroups,
|
|
@@ -33,12 +33,13 @@ export function MobileAppShell({
|
|
|
33
33
|
children,
|
|
34
34
|
}: MobileAppShellProps) {
|
|
35
35
|
const isMainRoute = isMainWorkspaceRoute(pathname);
|
|
36
|
-
const showTopbar = !isChatSessionDetailRoute(pathname);
|
|
36
|
+
const showTopbar = pathname !== '/chat' && !isChatSessionDetailRoute(pathname);
|
|
37
37
|
const showBottomNav = !isChatSessionDetailRoute(pathname);
|
|
38
38
|
|
|
39
39
|
return (
|
|
40
40
|
<div className="flex h-[100svh] flex-col bg-background font-sans text-foreground supports-[height:100dvh]:h-[100dvh]">
|
|
41
41
|
{showTopbar ? <MobileTopbar leadingInset={topbarLeadingInset} /> : null}
|
|
42
|
+
{!isMainRoute ? <CurrentPageActions /> : null}
|
|
42
43
|
<div className="relative flex-1 min-h-0 overflow-hidden">
|
|
43
44
|
{isMainRoute ? (
|
|
44
45
|
<div className="h-full min-h-0 overflow-hidden">{children}</div>
|
|
@@ -49,7 +50,7 @@ export function MobileAppShell({
|
|
|
49
50
|
)}
|
|
50
51
|
</div>
|
|
51
52
|
{showBottomNav ? <MobileBottomNav /> : null}
|
|
52
|
-
{
|
|
53
|
+
{(
|
|
53
54
|
<Suspense fallback={null}>
|
|
54
55
|
<DocBrowser
|
|
55
56
|
customTabRenderers={docBrowserRenderers}
|
|
@@ -58,7 +59,7 @@ export function MobileAppShell({
|
|
|
58
59
|
getTabMenuGroups={docBrowserTabMenuGroups}
|
|
59
60
|
/>
|
|
60
61
|
</Suspense>
|
|
61
|
-
)
|
|
62
|
+
)}
|
|
62
63
|
</div>
|
|
63
64
|
);
|
|
64
65
|
}
|
|
@@ -20,7 +20,7 @@ export function MobileBottomNav() {
|
|
|
20
20
|
<nav
|
|
21
21
|
data-testid="mobile-bottom-nav"
|
|
22
22
|
aria-label={t("settings")}
|
|
23
|
-
className="shrink-0 border-t border-
|
|
23
|
+
className="shrink-0 border-t border-border/60 bg-background text-foreground"
|
|
24
24
|
style={{
|
|
25
25
|
paddingBottom: "calc(env(safe-area-inset-bottom, 0px) + 0.25rem)",
|
|
26
26
|
}}
|
|
@@ -39,19 +39,19 @@ export function MobileBottomNav() {
|
|
|
39
39
|
className={cn(
|
|
40
40
|
"group flex min-h-[2.875rem] flex-col items-center justify-center gap-0.5 rounded-xl px-2 py-1 text-[10px] font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border",
|
|
41
41
|
active
|
|
42
|
-
? "bg-
|
|
43
|
-
: "text-
|
|
42
|
+
? "bg-muted text-foreground"
|
|
43
|
+
: "text-muted-foreground hover:bg-muted hover:text-foreground",
|
|
44
44
|
)}
|
|
45
45
|
>
|
|
46
46
|
<span className="relative">
|
|
47
47
|
<item.icon
|
|
48
48
|
className={cn(
|
|
49
49
|
"h-3.5 w-3.5",
|
|
50
|
-
active ? "text-
|
|
50
|
+
active ? "text-foreground" : "text-muted-foreground",
|
|
51
51
|
)}
|
|
52
52
|
/>
|
|
53
53
|
{item.target === "/inbox" && unreadCount > 0 ? (
|
|
54
|
-
<span className="absolute -right-1 -top-1 h-1.5 w-1.5 rounded-full bg-primary ring-1 ring-
|
|
54
|
+
<span className="absolute -right-1 -top-1 h-1.5 w-1.5 rounded-full bg-primary ring-1 ring-background" />
|
|
55
55
|
) : null}
|
|
56
56
|
</span>
|
|
57
57
|
<span className="max-w-full truncate">{item.label}</span>
|
|
@@ -63,9 +63,9 @@ export function MobileBottomNav() {
|
|
|
63
63
|
<button
|
|
64
64
|
type="button"
|
|
65
65
|
onClick={() => openApps(docBrowser)}
|
|
66
|
-
className="group flex min-h-[2.875rem] w-full flex-col items-center justify-center gap-0.5 rounded-xl px-2 py-1 text-[10px] font-medium text-
|
|
66
|
+
className="group flex min-h-[2.875rem] w-full flex-col items-center justify-center gap-0.5 rounded-xl px-2 py-1 text-[10px] font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border"
|
|
67
67
|
>
|
|
68
|
-
<Boxes className="h-3.5 w-3.5 text-
|
|
68
|
+
<Boxes className="h-3.5 w-3.5 text-muted-foreground" />
|
|
69
69
|
<span className="max-w-full truncate">{t("appsTitle")}</span>
|
|
70
70
|
</button>
|
|
71
71
|
</li>
|
|
@@ -11,7 +11,7 @@ export function MobileTopbar({ leadingInset }: { leadingInset?: string }) {
|
|
|
11
11
|
return (
|
|
12
12
|
<header
|
|
13
13
|
data-testid="mobile-topbar"
|
|
14
|
-
className="shrink-0 border-b border-
|
|
14
|
+
className="shrink-0 border-b border-border/60 bg-secondary text-foreground"
|
|
15
15
|
style={{
|
|
16
16
|
paddingTop: "calc(env(safe-area-inset-top, 0px) + 0.25rem)",
|
|
17
17
|
}}
|
|
@@ -24,18 +24,18 @@ export function MobileTopbar({ leadingInset }: { leadingInset?: string }) {
|
|
|
24
24
|
<button
|
|
25
25
|
type="button"
|
|
26
26
|
onClick={() => navigate(routeMeta.backTarget as string)}
|
|
27
|
-
className="inline-flex h-
|
|
27
|
+
className="inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground"
|
|
28
28
|
aria-label={routeMeta.backLabel ?? t("backToMain")}
|
|
29
29
|
>
|
|
30
30
|
<ArrowLeft className="h-4 w-4" />
|
|
31
31
|
</button>
|
|
32
32
|
) : null}
|
|
33
33
|
<div className="min-w-0 flex-1">
|
|
34
|
-
<h1 className="truncate text-center text-[
|
|
34
|
+
<h1 className="truncate text-center text-[17px] font-semibold text-foreground">
|
|
35
35
|
{routeMeta.title}
|
|
36
36
|
</h1>
|
|
37
37
|
</div>
|
|
38
|
-
{routeMeta.backTarget ? <div className="h-
|
|
38
|
+
{routeMeta.backTarget ? <div className="h-11 w-11 shrink-0" aria-hidden="true" /> : null}
|
|
39
39
|
</div>
|
|
40
40
|
</header>
|
|
41
41
|
);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WorkbenchSurfaceManager } from '@/shared/components/workbench/managers/workbench-surface.manager';
|
|
1
2
|
import { act, renderHook, waitFor } from '@testing-library/react';
|
|
2
3
|
import type { ReactNode } from 'react';
|
|
3
4
|
import { DocBrowserProvider, useDocBrowser } from '@/shared/components/doc-browser/doc-browser-context';
|
|
@@ -18,7 +19,7 @@ const wrapper = ({ children }: { children: ReactNode }) => (
|
|
|
18
19
|
<DocBrowserProvider manager={testDocBrowserManager}>{children}</DocBrowserProvider>
|
|
19
20
|
);
|
|
20
21
|
|
|
21
|
-
const testDocBrowserManager = new DocBrowserManager(new RightPanelResourceRouteResolver());
|
|
22
|
+
const testDocBrowserManager = new DocBrowserManager(new WorkbenchSurfaceManager(), new RightPanelResourceRouteResolver());
|
|
22
23
|
|
|
23
24
|
const docBrowserStorageKey = 'nextclaw.doc-browser.state';
|
|
24
25
|
|
|
@@ -56,7 +57,7 @@ async function resetMemoryThenRehydrate(savedState: string | null) {
|
|
|
56
57
|
describe('DocBrowserManager layout notifications', () => {
|
|
57
58
|
it('notifies the app layout coordinator after opening the docked browser', () => {
|
|
58
59
|
const onRightPanelOpened = vi.fn();
|
|
59
|
-
const manager = new DocBrowserManager(
|
|
60
|
+
const manager = new DocBrowserManager(new WorkbenchSurfaceManager(),
|
|
60
61
|
new RightPanelResourceRouteResolver(),
|
|
61
62
|
onRightPanelOpened,
|
|
62
63
|
);
|
|
@@ -71,7 +72,7 @@ describe('DocBrowserManager layout notifications', () => {
|
|
|
71
72
|
|
|
72
73
|
it('notifies the app layout coordinator after changing dock mode', () => {
|
|
73
74
|
const onRightPanelOpened = vi.fn();
|
|
74
|
-
const manager = new DocBrowserManager(
|
|
75
|
+
const manager = new DocBrowserManager(new WorkbenchSurfaceManager(),
|
|
75
76
|
new RightPanelResourceRouteResolver(),
|
|
76
77
|
onRightPanelOpened,
|
|
77
78
|
);
|
|
@@ -20,16 +20,11 @@ function renderTabStrip(tabs: DocBrowserTab[]) {
|
|
|
20
20
|
activeTabId={tabs[0]?.id ?? ""}
|
|
21
21
|
canGoBack={false}
|
|
22
22
|
canGoForward={false}
|
|
23
|
-
isDocked={true}
|
|
24
|
-
isFullscreen={false}
|
|
25
23
|
onGoBack={vi.fn()}
|
|
26
24
|
onGoForward={vi.fn()}
|
|
27
25
|
onOpenNewTab={vi.fn()}
|
|
28
26
|
onSetActiveTab={vi.fn()}
|
|
29
27
|
onCloseTab={vi.fn()}
|
|
30
|
-
onClose={vi.fn()}
|
|
31
|
-
onDragStart={vi.fn()}
|
|
32
|
-
onToggleMode={vi.fn()}
|
|
33
28
|
/>,
|
|
34
29
|
);
|
|
35
30
|
}
|