@hienlh/ppm 0.23.26 → 0.23.27
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 +6 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/accounts-settings-section-CZglHifc.js +1 -0
- package/dist/web/assets/accounts-settings-section-CZglHifc.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-CZglHifc.js.gz +0 -0
- package/dist/web/assets/{agent-session-sheet-DmbSfFGz.js → agent-session-sheet-B3VLD2H6.js} +2 -2
- package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.gz +0 -0
- package/dist/web/assets/{agent-session-window-content-Dk8x3ozF.js → agent-session-window-content-HEdIT_LQ.js} +1 -1
- package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-MKwjYcDh.js → ai-resource-editor-CFbXgGMo.js} +1 -1
- package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js +1 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js.br +0 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-OZOaLw5z.js → ai-settings-section-W0kfADRB.js} +1 -1
- package/dist/web/assets/{android-tab-CUkjbfyi.js → android-tab-CY3aa_vU.js} +1 -1
- package/dist/web/assets/android-tab-CY3aa_vU.js.br +0 -0
- package/dist/web/assets/android-tab-CY3aa_vU.js.gz +0 -0
- package/dist/web/assets/{appearance-settings-section-BZsM8HpZ.js → appearance-settings-section-lbtuzecW.js} +1 -1
- package/dist/web/assets/appearance-settings-section-lbtuzecW.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-lbtuzecW.js.gz +0 -0
- package/dist/web/assets/{apps-panel-Cs3utBlp.js → apps-panel-CF2mbvVq.js} +1 -1
- package/dist/web/assets/apps-panel-CF2mbvVq.js.br +0 -0
- package/dist/web/assets/apps-panel-CF2mbvVq.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js +1 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js.br +0 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js.gz +0 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js +1 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js.br +0 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js.gz +0 -0
- package/dist/web/assets/{chat-tab-DtSHSfMU.js → chat-tab-C4aOYSea.js} +10 -10
- package/dist/web/assets/chat-tab-C4aOYSea.js.br +0 -0
- package/dist/web/assets/chat-tab-C4aOYSea.js.gz +0 -0
- package/dist/web/assets/{code-editor-DjDyhff1.js → code-editor-_axJbYkP.js} +5 -5
- package/dist/web/assets/code-editor-_axJbYkP.js.br +0 -0
- package/dist/web/assets/code-editor-_axJbYkP.js.gz +0 -0
- package/dist/web/assets/{codex-reset-credit-button-BKgiUi8E.js → codex-reset-credit-button-DJQD6NUF.js} +1 -1
- package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-DgTv-8pb.js → conflict-editor-D0AYuLKI.js} +3 -3
- package/dist/web/assets/conflict-editor-D0AYuLKI.js.br +0 -0
- package/dist/web/assets/conflict-editor-D0AYuLKI.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js +4 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js.br +0 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js.gz +0 -0
- package/dist/web/assets/{csv-preview-BTGpYs4p.js → csv-preview-CmKkcz4M.js} +1 -1
- package/dist/web/assets/csv-preview-CmKkcz4M.js.br +0 -0
- package/dist/web/assets/csv-preview-CmKkcz4M.js.gz +0 -0
- package/dist/web/assets/{db-explorer-store-DDePT3UI.js → db-explorer-store-DJNNIfN5.js} +1 -1
- package/dist/web/assets/db-explorer-store-DJNNIfN5.js.br +0 -0
- package/dist/web/assets/db-explorer-store-DJNNIfN5.js.gz +0 -0
- package/dist/web/assets/{db-sidebar-reveal-BeT8cp6P.js → db-sidebar-reveal-CGqWBYay.js} +1 -1
- package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.gz +0 -0
- package/dist/web/assets/{db-tab-parts-BYzd4_sR.js → db-tab-parts-BXL34wrZ.js} +1 -1
- package/dist/web/assets/db-tab-parts-BXL34wrZ.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BXL34wrZ.js.gz +0 -0
- package/dist/web/assets/{design-settings-section-B3KQBggK.js → design-settings-section-DukfVtwP.js} +2 -2
- package/dist/web/assets/design-settings-section-DukfVtwP.js.br +0 -0
- package/dist/web/assets/design-settings-section-DukfVtwP.js.gz +0 -0
- package/dist/web/assets/{design-tab-CPyj_nFg.js → design-tab-BoPiL2ge.js} +5 -5
- package/dist/web/assets/design-tab-BoPiL2ge.js.br +0 -0
- package/dist/web/assets/design-tab-BoPiL2ge.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-DIGPFo2l.js → designs-sidebar-panel-BVTqPPzG.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.gz +0 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js +4 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js.br +0 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js.gz +0 -0
- package/dist/web/assets/{docx-preview-CowHGqML.js → docx-preview-B9EhDCMi.js} +1 -1
- package/dist/web/assets/docx-preview-B9EhDCMi.js.br +0 -0
- package/dist/web/assets/docx-preview-B9EhDCMi.js.gz +0 -0
- package/dist/web/assets/{editor-dialog-xPoehDYp.js → editor-dialog-DTDsbJd6.js} +1 -1
- package/dist/web/assets/editor-dialog-DTDsbJd6.js.br +0 -0
- package/dist/web/assets/editor-dialog-DTDsbJd6.js.gz +0 -0
- package/dist/web/assets/{editor-language-service-DdYqCDBU.js → editor-language-service-BtrrQAS2.js} +1 -1
- package/dist/web/assets/editor-language-service-BtrrQAS2.js.br +0 -0
- package/dist/web/assets/editor-language-service-BtrrQAS2.js.gz +0 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js +2 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js.br +0 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js.gz +0 -0
- package/dist/web/assets/{explorer-model-tGyFETP_.js → explorer-model-f5q-50DN.js} +1 -1
- package/dist/web/assets/explorer-model-f5q-50DN.js.br +0 -0
- package/dist/web/assets/explorer-model-f5q-50DN.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-B1c4QTVL.js → explorer-window-content-CbUIbrzL.js} +1 -1
- package/dist/web/assets/explorer-window-content-CbUIbrzL.js.br +0 -0
- package/dist/web/assets/explorer-window-content-CbUIbrzL.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-BgL0Uyl3.js → extension-manager-section-BpKMyLwI.js} +1 -1
- package/dist/web/assets/extension-manager-section-BpKMyLwI.js.br +0 -0
- package/dist/web/assets/extension-manager-section-BpKMyLwI.js.gz +0 -0
- package/dist/web/assets/{extension-webview-BWB1Yd-t.js → extension-webview-BGfyaXMI.js} +1 -1
- package/dist/web/assets/extension-webview-BGfyaXMI.js.br +0 -0
- package/dist/web/assets/extension-webview-BGfyaXMI.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-TmoewoO2.js → files-settings-section-CQT9_rX2.js} +1 -1
- package/dist/web/assets/files-settings-section-CQT9_rX2.js.br +0 -0
- package/dist/web/assets/files-settings-section-CQT9_rX2.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-Bu7o8uUn.js → general-settings-section-BoQGeqBi.js} +1 -1
- package/dist/web/assets/general-settings-section-BoQGeqBi.js.br +0 -0
- package/dist/web/assets/general-settings-section-BoQGeqBi.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-RjMZIaCk.js → git-log-panel-T8Fzn8-5.js} +1 -1
- package/dist/web/assets/git-log-panel-T8Fzn8-5.js.br +0 -0
- package/dist/web/assets/git-log-panel-T8Fzn8-5.js.gz +0 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js +3 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js.br +0 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-DqlTFhhf.js → glide-data-grid-BBzGDYvj.js} +8 -8
- package/dist/web/assets/glide-data-grid-BBzGDYvj.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BBzGDYvj.js.gz +0 -0
- package/dist/web/assets/{grid-save-dialog-BmF2Gy_E.js → grid-save-dialog-HiqlnSky.js} +1 -1
- package/dist/web/assets/grid-save-dialog-HiqlnSky.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-HiqlnSky.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js +1 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js.br +0 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js.gz +0 -0
- package/dist/web/assets/{impexp-tab-B8d4oBOB.js → impexp-tab-B0m1Q8ia.js} +1 -1
- package/dist/web/assets/impexp-tab-B0m1Q8ia.js.br +0 -0
- package/dist/web/assets/impexp-tab-B0m1Q8ia.js.gz +0 -0
- package/dist/web/assets/index-Cb3Z6wNy.css +1 -0
- package/dist/web/assets/index-Cb3Z6wNy.css.br +0 -0
- package/dist/web/assets/{index-2_Pz5MiI.css.gz → index-Cb3Z6wNy.css.gz} +0 -0
- package/dist/web/assets/{index-Cx9ZRibz.js → index-Vd9Xr54k.js} +19 -19
- package/dist/web/assets/index-Vd9Xr54k.js.br +0 -0
- package/dist/web/assets/index-Vd9Xr54k.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-LGTWVN87.js → jira-watcher-section-CnSTbAF6.js} +1 -1
- package/dist/web/assets/keybindings-store-D_U8jECl.js +1 -0
- package/dist/web/assets/{keyboard-shortcuts-section-BSMgmbOR.js → keyboard-shortcuts-section-CU7JjDsU.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.gz +0 -0
- package/dist/web/assets/{language-servers-section-DO9wnwnG.js → language-servers-section-CzUG9H69.js} +2 -2
- package/dist/web/assets/language-servers-section-CzUG9H69.js.br +0 -0
- package/dist/web/assets/language-servers-section-CzUG9H69.js.gz +0 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js +13 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js.br +0 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js.gz +0 -0
- package/dist/web/assets/logs-tab-CQw9vrNw.js +1 -0
- package/dist/web/assets/{logs-window-content-Cejko0VD.js → logs-window-content-CGvPnPrr.js} +1 -1
- package/dist/web/assets/{lsp-client-IsC8Ol0U.js → lsp-client-CpjPUUYJ.js} +1 -1
- package/dist/web/assets/lsp-client-CpjPUUYJ.js.br +0 -0
- package/dist/web/assets/lsp-client-CpjPUUYJ.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-D5vxN2fO.js → markdown-renderer-3ZR2x0CC.js} +1 -1
- package/dist/web/assets/{markdown-renderer-BfZiHaNy.js → markdown-renderer-DZNMRg6p.js} +2 -2
- package/dist/web/assets/markdown-renderer-DZNMRg6p.js.br +0 -0
- package/dist/web/assets/markdown-renderer-DZNMRg6p.js.gz +0 -0
- package/dist/web/assets/{mobile-explorer-sheet-Dz3eJdBl.js → mobile-explorer-sheet-D7e-MM6m.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-B8zeJoJQ.js → new-design-dialog-BthM423i.js} +1 -1
- package/dist/web/assets/new-design-dialog-BthM423i.js.br +0 -0
- package/dist/web/assets/new-design-dialog-BthM423i.js.gz +0 -0
- package/dist/web/assets/notification-store-GKweleCQ.js +1 -0
- package/dist/web/assets/{notifications-settings-section-CMZXQw72.js → notifications-settings-section-TS3gNFcc.js} +1 -1
- package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.gz +0 -0
- package/dist/web/assets/{open-db-tabs-DYTZbguT.js → open-db-tabs-DBgV2hbA.js} +1 -1
- package/dist/web/assets/open-db-tabs-DBgV2hbA.js.br +0 -0
- package/dist/web/assets/open-db-tabs-DBgV2hbA.js.gz +0 -0
- package/dist/web/assets/{open-settings-BGtoVEAU.js → open-settings-DWbF5YsE.js} +1 -1
- package/dist/web/assets/{overview-panel-7_8b6pwr.js → overview-panel-C5EmTk1R.js} +1 -1
- package/dist/web/assets/overview-panel-C5EmTk1R.js.br +0 -0
- package/dist/web/assets/overview-panel-C5EmTk1R.js.gz +0 -0
- package/dist/web/assets/{panel-store-Dx2ziBLp.js → panel-store-H7e9XHZF.js} +1 -1
- package/dist/web/assets/panel-store-H7e9XHZF.js.br +0 -0
- package/dist/web/assets/panel-store-H7e9XHZF.js.gz +0 -0
- package/dist/web/assets/{patch-tab-metadata-DTbCkVvx.js → patch-tab-metadata-DqvfqUI4.js} +1 -1
- package/dist/web/assets/{performance-panel-COQNCyEU.js → performance-panel-Jwab-_Z2.js} +1 -1
- package/dist/web/assets/performance-panel-Jwab-_Z2.js.br +0 -0
- package/dist/web/assets/performance-panel-Jwab-_Z2.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-CmhbbZVI.js → ppmbot-settings-section-D8jIlmp8.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.gz +0 -0
- package/dist/web/assets/{pptx-export-COeBmnFJ.js → pptx-export-gXOWUZXL.js} +3 -3
- package/dist/web/assets/pptx-export-gXOWUZXL.js.br +0 -0
- package/dist/web/assets/pptx-export-gXOWUZXL.js.gz +0 -0
- package/dist/web/assets/{problems-panel-I0EYfa1S.js → problems-panel-DjCHA1r5.js} +1 -1
- package/dist/web/assets/problems-panel-DjCHA1r5.js.br +0 -0
- package/dist/web/assets/problems-panel-DjCHA1r5.js.gz +0 -0
- package/dist/web/assets/{process-table-or-X8Lwh.js → process-table-BxXEh4tN.js} +1 -1
- package/dist/web/assets/process-table-BxXEh4tN.js.br +0 -0
- package/dist/web/assets/process-table-BxXEh4tN.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-DpJ6ok4C.js → proxy-settings-section-B8igco2L.js} +1 -1
- package/dist/web/assets/proxy-settings-section-B8igco2L.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-B8igco2L.js.gz +0 -0
- package/dist/web/assets/{query-tab-DeNZMZHX.js → query-tab-DHU3ANHN.js} +3 -3
- package/dist/web/assets/query-tab-DHU3ANHN.js.br +0 -0
- package/dist/web/assets/query-tab-DHU3ANHN.js.gz +0 -0
- package/dist/web/assets/release-notes-window-content-B33RDfFY.js +1 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js +1 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-CGDBpXMf.js → remote-desktop-clipboard-notice-Dwn-iV4g.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-sheet-6nXirdqZ.js → remote-desktop-mobile-sheet-bfKiSG0C.js} +2 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-BTaj9Flo.js → remote-desktop-mobile-view-CV8eHh4A.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate--gtmfqZh.js → remote-desktop-readiness-gate-DrSYb_9z.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-settings-section-Bs5avYaS.js → remote-desktop-settings-section-DRO8n8t7.js} +1 -1
- package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-window-content-D4CM-28B.js → remote-desktop-window-content-CAuxeGbK.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.gz +0 -0
- package/dist/web/assets/{rename-object-dialog-Dv4iLwnf.js → rename-object-dialog-BPuh3dAH.js} +1 -1
- package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.gz +0 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js +1 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js.br +0 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js.gz +0 -0
- package/dist/web/assets/{review-code-Bet53hHb.js → review-code-Dy8y4_17.js} +1 -1
- package/dist/web/assets/review-code-Dy8y4_17.js.br +0 -0
- package/dist/web/assets/review-code-Dy8y4_17.js.gz +0 -0
- package/dist/web/assets/{run-in-terminal-EVMb5TjW.js → run-in-terminal-DAdjH24K.js} +1 -1
- package/dist/web/assets/{run-in-terminal-button-CsYq6Xqo.js → run-in-terminal-button-Bu165IH-.js} +1 -1
- package/dist/web/assets/{save-as-dialog-DHkBsS-6.js → save-as-dialog-C9OpJz2x.js} +1 -1
- package/dist/web/assets/save-as-dialog-C9OpJz2x.js.br +0 -0
- package/dist/web/assets/save-as-dialog-C9OpJz2x.js.gz +0 -0
- package/dist/web/assets/{schedule-script-editor-CKUl2qxf.js → schedule-script-editor--roOsFbc.js} +1 -1
- package/dist/web/assets/schedule-script-editor--roOsFbc.js.br +0 -0
- package/dist/web/assets/schedule-script-editor--roOsFbc.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-EoOXzqF3.js → schedules-settings-section-BTn_NSzU.js} +3 -3
- package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.gz +0 -0
- package/dist/web/assets/{send-to-chat-B7oUVcgh.js → send-to-chat-BUxj21hD.js} +1 -1
- package/dist/web/assets/send-to-chat-BUxj21hD.js.br +0 -0
- package/dist/web/assets/send-to-chat-BUxj21hD.js.gz +0 -0
- package/dist/web/assets/{services-panel-BceuL_SU.js → services-panel-BynENSs6.js} +1 -1
- package/dist/web/assets/services-panel-BynENSs6.js.br +0 -0
- package/dist/web/assets/services-panel-BynENSs6.js.gz +0 -0
- package/dist/web/assets/{session-changes-bar-CjSxBYOF.js → session-changes-bar-Dz3QitdJ.js} +1 -1
- package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.br +0 -0
- package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.gz +0 -0
- package/dist/web/assets/{session-review-tab-yIQFGJbG.js → session-review-tab-fRzyogNH.js} +1 -1
- package/dist/web/assets/session-review-tab-fRzyogNH.js.br +0 -0
- package/dist/web/assets/session-review-tab-fRzyogNH.js.gz +0 -0
- package/dist/web/assets/{settings-body-DXNcpoqY.js → settings-body-D5pmlFft.js} +1 -1
- package/dist/web/assets/settings-body-D5pmlFft.js.br +0 -0
- package/dist/web/assets/settings-body-D5pmlFft.js.gz +0 -0
- package/dist/web/assets/{settings-rows-DgL7oTg8.js → settings-rows-VtjChFlm.js} +1 -1
- package/dist/web/assets/settings-rows-VtjChFlm.js.br +0 -0
- package/dist/web/assets/settings-rows-VtjChFlm.js.gz +0 -0
- package/dist/web/assets/{settings-section-content-DFLjO2le.js → settings-section-content-BOwSlBkZ.js} +2 -2
- package/dist/web/assets/settings-section-content-BOwSlBkZ.js.br +0 -0
- package/dist/web/assets/settings-section-content-BOwSlBkZ.js.gz +0 -0
- package/dist/web/assets/{settings-section-content-B1eU_yR4.js → settings-section-content-Ck39TJA7.js} +1 -1
- package/dist/web/assets/{settings-store-CBJCnE5L.js → settings-store-CMpVMq3Y.js} +2 -2
- package/dist/web/assets/settings-store-CMpVMq3Y.js.br +0 -0
- package/dist/web/assets/settings-store-CMpVMq3Y.js.gz +0 -0
- package/dist/web/assets/settings-tab-A81xb81d.js +1 -0
- package/dist/web/assets/settings-window-content-BCDRi6xS.js +1 -0
- package/dist/web/assets/{slash-command-picker-qb3fZ7RP.js → slash-command-picker-BKeEykkF.js} +1 -1
- package/dist/web/assets/slash-command-picker-BKeEykkF.js.br +0 -0
- package/dist/web/assets/slash-command-picker-BKeEykkF.js.gz +0 -0
- package/dist/web/assets/{sql-object-tab-B6JtYu9P.js → sql-object-tab-I5bl3DVf.js} +1 -1
- package/dist/web/assets/sql-object-tab-I5bl3DVf.js.br +0 -0
- package/dist/web/assets/sql-object-tab-I5bl3DVf.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-bdNkUymy.js → sqlite-viewer-ECCCjxdn.js} +1 -1
- package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.gz +0 -0
- package/dist/web/assets/{structure-save-dialog-5SfYdbAB.js → structure-save-dialog-DcQdamD3.js} +1 -1
- package/dist/web/assets/structure-save-dialog-DcQdamD3.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-DcQdamD3.js.gz +0 -0
- package/dist/web/assets/{structure-tab-DYjjcLIU.js → structure-tab-DyQGhf9t.js} +2 -2
- package/dist/web/assets/structure-tab-DyQGhf9t.js.br +0 -0
- package/dist/web/assets/structure-tab-DyQGhf9t.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-DouL7ajt.js → system-monitor-body-B5AvRT5J.js} +2 -2
- package/dist/web/assets/system-monitor-body-B5AvRT5J.js.br +0 -0
- package/dist/web/assets/system-monitor-body-B5AvRT5J.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-CfwHKQ5k.js +1 -0
- package/dist/web/assets/{system-monitor-window-content-DUCaJME1.js → system-monitor-window-content-Cvx1V8Mf.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-CQ5NiV6Y.js → tab-host-window-content-DqOUHxEL.js} +1 -1
- package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.gz +0 -0
- package/dist/web/assets/{tab-store-B4v2kAEY.js → tab-store-NUmgzMPf.js} +1 -1
- package/dist/web/assets/table-tab-dI8rBbCS.js +2 -0
- package/dist/web/assets/table-tab-dI8rBbCS.js.br +0 -0
- package/dist/web/assets/table-tab-dI8rBbCS.js.gz +0 -0
- package/dist/web/assets/{telegram-bot-token-field-CqVIuWP1.js → telegram-bot-token-field-DSLtG8vw.js} +1 -1
- package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-DT0MN_Qn.js → terminal-tab-CDg0AHBK.js} +2 -2
- package/dist/web/assets/terminal-tab-CDg0AHBK.js.br +0 -0
- package/dist/web/assets/terminal-tab-CDg0AHBK.js.gz +0 -0
- package/dist/web/assets/{tool-cards-C2YGSKRm.js → tool-cards-7E0jtwP0.js} +5 -5
- package/dist/web/assets/tool-cards-7E0jtwP0.js.br +0 -0
- package/dist/web/assets/tool-cards-7E0jtwP0.js.gz +0 -0
- package/dist/web/assets/{tools-settings-section-DQXIdF8O.js → tools-settings-section-AChVQJyU.js} +1 -1
- package/dist/web/assets/tools-settings-section-AChVQJyU.js.br +0 -0
- package/dist/web/assets/tools-settings-section-AChVQJyU.js.gz +0 -0
- package/dist/web/assets/{use-db-read-BByB906L.js → use-db-read-DgNa66Yo.js} +1 -1
- package/dist/web/assets/use-db-read-DgNa66Yo.js.br +0 -0
- package/dist/web/assets/use-db-read-DgNa66Yo.js.gz +0 -0
- package/dist/web/assets/{use-db-tab-Dc0QSFyM.js → use-db-tab-OGLoicCd.js} +1 -1
- package/dist/web/assets/use-db-tab-OGLoicCd.js.br +0 -0
- package/dist/web/assets/use-db-tab-OGLoicCd.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-B9M-hADX.js → use-inline-blame-BvlcOQd9.js} +3 -3
- package/dist/web/assets/use-inline-blame-BvlcOQd9.js.br +0 -0
- package/dist/web/assets/use-inline-blame-BvlcOQd9.js.gz +0 -0
- package/dist/web/assets/{use-lsp-DcGiCpl9.js → use-lsp-fLNwD0BI.js} +1 -1
- package/dist/web/assets/use-lsp-fLNwD0BI.js.br +0 -0
- package/dist/web/assets/use-lsp-fLNwD0BI.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-CyoMsYaI.js → use-monaco-theme-CbNQ4HnC.js} +1 -1
- package/dist/web/assets/{use-process-kill-DsHyrg0-.js → use-process-kill-B4Srjl2m.js} +1 -1
- package/dist/web/assets/use-process-kill-B4Srjl2m.js.br +0 -0
- package/dist/web/assets/use-process-kill-B4Srjl2m.js.gz +0 -0
- package/dist/web/assets/{use-sql-schema-info-BqGN5N4O.js → use-sql-schema-info-CqISFaAW.js} +1 -1
- package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.gz +0 -0
- package/dist/web/assets/{use-websocket-DqomrzN8.js → use-websocket-DVJuWhlA.js} +1 -1
- package/dist/web/assets/{voice-settings-section-D9KsOm8A.js → voice-settings-section-C1aEYF94.js} +1 -1
- package/dist/web/assets/voice-settings-section-C1aEYF94.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C1aEYF94.js.gz +0 -0
- package/dist/web/assets/{web-preview-tab-CUp1n2jz.js → web-preview-tab-CZJAVoVU.js} +1 -1
- package/dist/web/assets/web-preview-tab-CZJAVoVU.js.br +0 -0
- package/dist/web/assets/web-preview-tab-CZJAVoVU.js.gz +0 -0
- package/dist/web/assets/{window-store-UcSFgNCI.js → window-store-D6EgLSfT.js} +1 -1
- package/dist/web/assets/window-store-D6EgLSfT.js.br +0 -0
- package/dist/web/assets/window-store-D6EgLSfT.js.gz +0 -0
- package/dist/web/index.html +12 -12
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/package.json +1 -1
- package/src/web/components/floating-window/use-window-meta.ts +2 -1
- package/src/web/components/floating-window/window-content-registry.ts +2 -0
- package/src/web/components/floating-window/window-store-types.ts +1 -1
- package/src/web/components/layout/upgrade-button.tsx +27 -46
- package/src/web/components/release-notes/open-release-notes.ts +22 -0
- package/src/web/components/release-notes/release-notes-entry.tsx +73 -0
- package/src/web/components/release-notes/release-notes-view.tsx +72 -0
- package/src/web/components/release-notes/release-notes-window-content.tsx +6 -0
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js +0 -1
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-CODZY71V.js +0 -1
- package/dist/web/assets/ai-settings-section-CODZY71V.js.br +0 -0
- package/dist/web/assets/ai-settings-section-CODZY71V.js.gz +0 -0
- package/dist/web/assets/android-tab-CUkjbfyi.js.br +0 -0
- package/dist/web/assets/android-tab-CUkjbfyi.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cs3utBlp.js.br +0 -0
- package/dist/web/assets/apps-panel-Cs3utBlp.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js +0 -1
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.br +0 -0
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.gz +0 -0
- package/dist/web/assets/chat-tab-CGQu4uLR.js +0 -1
- package/dist/web/assets/chat-tab-CGQu4uLR.js.br +0 -0
- package/dist/web/assets/chat-tab-CGQu4uLR.js.gz +0 -0
- package/dist/web/assets/chat-tab-DtSHSfMU.js.br +0 -0
- package/dist/web/assets/chat-tab-DtSHSfMU.js.gz +0 -0
- package/dist/web/assets/code-editor-DjDyhff1.js.br +0 -0
- package/dist/web/assets/code-editor-DjDyhff1.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.gz +0 -0
- package/dist/web/assets/conflict-editor-DgTv-8pb.js.br +0 -0
- package/dist/web/assets/conflict-editor-DgTv-8pb.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js +0 -4
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.gz +0 -0
- package/dist/web/assets/csv-preview-BTGpYs4p.js.br +0 -0
- package/dist/web/assets/csv-preview-BTGpYs4p.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-DDePT3UI.js.br +0 -0
- package/dist/web/assets/db-explorer-store-DDePT3UI.js.gz +0 -0
- package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BYzd4_sR.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BYzd4_sR.js.gz +0 -0
- package/dist/web/assets/design-settings-section-B3KQBggK.js.br +0 -0
- package/dist/web/assets/design-settings-section-B3KQBggK.js.gz +0 -0
- package/dist/web/assets/design-tab-CPyj_nFg.js.br +0 -0
- package/dist/web/assets/design-tab-CPyj_nFg.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.gz +0 -0
- package/dist/web/assets/diff-viewer-nYz43A94.js +0 -4
- package/dist/web/assets/diff-viewer-nYz43A94.js.br +0 -0
- package/dist/web/assets/diff-viewer-nYz43A94.js.gz +0 -0
- package/dist/web/assets/docx-preview-CowHGqML.js.br +0 -0
- package/dist/web/assets/docx-preview-CowHGqML.js.gz +0 -0
- package/dist/web/assets/editor-dialog-xPoehDYp.js.br +0 -0
- package/dist/web/assets/editor-dialog-xPoehDYp.js.gz +0 -0
- package/dist/web/assets/editor-language-service-DdYqCDBU.js.br +0 -0
- package/dist/web/assets/editor-language-service-DdYqCDBU.js.gz +0 -0
- package/dist/web/assets/explorer-body-BHh5Qpvi.js +0 -2
- package/dist/web/assets/explorer-body-BHh5Qpvi.js.br +0 -0
- package/dist/web/assets/explorer-body-BHh5Qpvi.js.gz +0 -0
- package/dist/web/assets/explorer-model-tGyFETP_.js.br +0 -0
- package/dist/web/assets/explorer-model-tGyFETP_.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-B1c4QTVL.js.br +0 -0
- package/dist/web/assets/explorer-window-content-B1c4QTVL.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.br +0 -0
- package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.gz +0 -0
- package/dist/web/assets/extension-webview-BWB1Yd-t.js.br +0 -0
- package/dist/web/assets/extension-webview-BWB1Yd-t.js.gz +0 -0
- package/dist/web/assets/files-settings-section-TmoewoO2.js.br +0 -0
- package/dist/web/assets/files-settings-section-TmoewoO2.js.gz +0 -0
- package/dist/web/assets/general-settings-section-Bu7o8uUn.js.br +0 -0
- package/dist/web/assets/general-settings-section-Bu7o8uUn.js.gz +0 -0
- package/dist/web/assets/git-log-panel-RjMZIaCk.js.br +0 -0
- package/dist/web/assets/git-log-panel-RjMZIaCk.js.gz +0 -0
- package/dist/web/assets/git-review-tab-BUW5LZk4.js +0 -3
- package/dist/web/assets/git-review-tab-BUW5LZk4.js.br +0 -0
- package/dist/web/assets/git-review-tab-BUW5LZk4.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-DqlTFhhf.js.br +0 -0
- package/dist/web/assets/glide-data-grid-DqlTFhhf.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js +0 -1
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js.br +0 -0
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js.gz +0 -0
- package/dist/web/assets/impexp-tab-B8d4oBOB.js.br +0 -0
- package/dist/web/assets/impexp-tab-B8d4oBOB.js.gz +0 -0
- package/dist/web/assets/index-2_Pz5MiI.css +0 -1
- package/dist/web/assets/index-2_Pz5MiI.css.br +0 -0
- package/dist/web/assets/index-Cx9ZRibz.js.br +0 -0
- package/dist/web/assets/index-Cx9ZRibz.js.gz +0 -0
- package/dist/web/assets/keybindings-store-B2AkKQl7.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DO9wnwnG.js.br +0 -0
- package/dist/web/assets/language-servers-section-DO9wnwnG.js.gz +0 -0
- package/dist/web/assets/logs-app-xQ2UsN4G.js +0 -13
- package/dist/web/assets/logs-app-xQ2UsN4G.js.br +0 -0
- package/dist/web/assets/logs-app-xQ2UsN4G.js.gz +0 -0
- package/dist/web/assets/logs-tab-H3SmYGRX.js +0 -1
- package/dist/web/assets/lsp-client-IsC8Ol0U.js.br +0 -0
- package/dist/web/assets/lsp-client-IsC8Ol0U.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-BfZiHaNy.js.br +0 -0
- package/dist/web/assets/markdown-renderer-BfZiHaNy.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.br +0 -0
- package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.gz +0 -0
- package/dist/web/assets/notification-store-BkkcJE2G.js +0 -1
- package/dist/web/assets/notifications-settings-section-CMZXQw72.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-CMZXQw72.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-DYTZbguT.js.br +0 -0
- package/dist/web/assets/open-db-tabs-DYTZbguT.js.gz +0 -0
- package/dist/web/assets/overview-panel-7_8b6pwr.js.br +0 -0
- package/dist/web/assets/overview-panel-7_8b6pwr.js.gz +0 -0
- package/dist/web/assets/panel-store-Dx2ziBLp.js.br +0 -0
- package/dist/web/assets/panel-store-Dx2ziBLp.js.gz +0 -0
- package/dist/web/assets/performance-panel-COQNCyEU.js.br +0 -0
- package/dist/web/assets/performance-panel-COQNCyEU.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.gz +0 -0
- package/dist/web/assets/pptx-export-COeBmnFJ.js.br +0 -0
- package/dist/web/assets/pptx-export-COeBmnFJ.js.gz +0 -0
- package/dist/web/assets/problems-panel-I0EYfa1S.js.br +0 -0
- package/dist/web/assets/problems-panel-I0EYfa1S.js.gz +0 -0
- package/dist/web/assets/process-table-or-X8Lwh.js.br +0 -0
- package/dist/web/assets/process-table-or-X8Lwh.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.gz +0 -0
- package/dist/web/assets/query-tab-DeNZMZHX.js.br +0 -0
- package/dist/web/assets/query-tab-DeNZMZHX.js.gz +0 -0
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js +0 -1
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.gz +0 -0
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js +0 -1
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js.br +0 -0
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js.gz +0 -0
- package/dist/web/assets/review-code-Bet53hHb.js.br +0 -0
- package/dist/web/assets/review-code-Bet53hHb.js.gz +0 -0
- package/dist/web/assets/save-as-dialog-DHkBsS-6.js.br +0 -0
- package/dist/web/assets/save-as-dialog-DHkBsS-6.js.gz +0 -0
- package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.br +0 -0
- package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.gz +0 -0
- package/dist/web/assets/send-to-chat-B7oUVcgh.js.br +0 -0
- package/dist/web/assets/send-to-chat-B7oUVcgh.js.gz +0 -0
- package/dist/web/assets/services-panel-BceuL_SU.js.br +0 -0
- package/dist/web/assets/services-panel-BceuL_SU.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-CjSxBYOF.js.br +0 -0
- package/dist/web/assets/session-changes-bar-CjSxBYOF.js.gz +0 -0
- package/dist/web/assets/session-review-tab-yIQFGJbG.js.br +0 -0
- package/dist/web/assets/session-review-tab-yIQFGJbG.js.gz +0 -0
- package/dist/web/assets/settings-body-DXNcpoqY.js.br +0 -0
- package/dist/web/assets/settings-body-DXNcpoqY.js.gz +0 -0
- package/dist/web/assets/settings-rows-DgL7oTg8.js.br +0 -0
- package/dist/web/assets/settings-rows-DgL7oTg8.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DFLjO2le.js.br +0 -0
- package/dist/web/assets/settings-section-content-DFLjO2le.js.gz +0 -0
- package/dist/web/assets/settings-store-CBJCnE5L.js.br +0 -0
- package/dist/web/assets/settings-store-CBJCnE5L.js.gz +0 -0
- package/dist/web/assets/settings-tab-CrGoLKQT.js +0 -1
- package/dist/web/assets/settings-window-content-5opW9Wra.js +0 -1
- package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.br +0 -0
- package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-B6JtYu9P.js.br +0 -0
- package/dist/web/assets/sql-object-tab-B6JtYu9P.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-bdNkUymy.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-bdNkUymy.js.gz +0 -0
- package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.gz +0 -0
- package/dist/web/assets/structure-tab-DYjjcLIU.js.br +0 -0
- package/dist/web/assets/structure-tab-DYjjcLIU.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DouL7ajt.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DouL7ajt.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-qpa36tWB.js +0 -1
- package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.gz +0 -0
- package/dist/web/assets/table-tab-M850PntZ.js +0 -2
- package/dist/web/assets/table-tab-M850PntZ.js.br +0 -0
- package/dist/web/assets/table-tab-M850PntZ.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.gz +0 -0
- package/dist/web/assets/terminal-tab-DT0MN_Qn.js.br +0 -0
- package/dist/web/assets/terminal-tab-DT0MN_Qn.js.gz +0 -0
- package/dist/web/assets/tool-cards-C2YGSKRm.js.br +0 -0
- package/dist/web/assets/tool-cards-C2YGSKRm.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DQXIdF8O.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DQXIdF8O.js.gz +0 -0
- package/dist/web/assets/use-db-read-BByB906L.js.br +0 -0
- package/dist/web/assets/use-db-read-BByB906L.js.gz +0 -0
- package/dist/web/assets/use-db-tab-Dc0QSFyM.js.br +0 -0
- package/dist/web/assets/use-db-tab-Dc0QSFyM.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-B9M-hADX.js.br +0 -0
- package/dist/web/assets/use-inline-blame-B9M-hADX.js.gz +0 -0
- package/dist/web/assets/use-lsp-DcGiCpl9.js.br +0 -0
- package/dist/web/assets/use-lsp-DcGiCpl9.js.gz +0 -0
- package/dist/web/assets/use-process-kill-DsHyrg0-.js.br +0 -0
- package/dist/web/assets/use-process-kill-DsHyrg0-.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-D9KsOm8A.js.br +0 -0
- package/dist/web/assets/voice-settings-section-D9KsOm8A.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-CUp1n2jz.js.br +0 -0
- package/dist/web/assets/web-preview-tab-CUp1n2jz.js.gz +0 -0
- package/dist/web/assets/window-store-UcSFgNCI.js.br +0 -0
- package/dist/web/assets/window-store-UcSFgNCI.js.gz +0 -0
- /package/dist/web/assets/{__vite-browser-external-DLaiEgUM.js → __vite-browser-external-LVpeGV-g.js} +0 -0
- /package/dist/web/assets/{api-themes-B3-6zR6Q.js → api-themes-DUOEO3_X.js} +0 -0
- /package/dist/web/assets/{claude-models-yFre4eSK.js → claude-models-C9iHl8VB.js} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js → database-drivers-section-BPXoNrWi.js} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.br → database-drivers-section-BPXoNrWi.js.br} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.gz → database-drivers-section-BPXoNrWi.js.gz} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js → metric-chart-canvas-HG8rPTMq.js} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.br → metric-chart-canvas-HG8rPTMq.js.br} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.gz → metric-chart-canvas-HG8rPTMq.js.gz} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js → notification-settings--li9wGTJ.js} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js.br → notification-settings--li9wGTJ.js.br} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js.gz → notification-settings--li9wGTJ.js.gz} +0 -0
- /package/dist/web/assets/{process-row-format-CM1XaqkS.js → process-row-format-CJg8VV-6.js} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js → query-audit-section-BiCUBamA.js} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.br → query-audit-section-BiCUBamA.js.br} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.gz → query-audit-section-BiCUBamA.js.gz} +0 -0
- /package/dist/web/assets/{remote-desktop-recording-D_fwMC2z.js → remote-desktop-recording-BcDx5c_k.js} +0 -0
- /package/dist/web/assets/{separator-CYw7bF1W.js → separator-DUdRLaL0.js} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js → sortable-header-Ds6nTnqB.js} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js.br → sortable-header-Ds6nTnqB.js.br} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js.gz → sortable-header-Ds6nTnqB.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js → vendor-xterm-BxbwWHG_.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.br → vendor-xterm-BxbwWHG_.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.gz → vendor-xterm-BxbwWHG_.js.gz} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Q as r,Ur as i,Z as a,li as o}from"./icons-C1wDt09O.js";import{a as s,r as c}from"./api-client-BnYFnEfK.js";import{k as l,t as u}from"./settings-store-CBJCnE5L.js";import{n as d}from"./utils-D3xTlJyU.js";import{t as f}from"./ws-auth-k7DWnL9T.js";import{pn as p}from"./index-Cx9ZRibz.js";import{n as m}from"./use-h264-canvas-decoder-BpBeyZ1K.js";import{r as h}from"./run-in-terminal-EVMb5TjW.js";import{i as g,n as _,r as v,t as y}from"./remote-desktop-recording-D_fwMC2z.js";function b(e,t,n=`8081`){let r=f(`/ws/remote-desktop`),i=e.protocol===`https:`?`wss:`:`ws:`;return t&&e.protocol!==`https:`?`ws://${e.hostname}:${n}${r}`:`${i}//${e.host}${r}`}var x=e(t(),1),S=400,C=25,w=6e3;function ee(e,{onFailure:t}={}){let[n,r]=(0,x.useState)(`idle`),[i,a]=(0,x.useState)(null),[o,c]=(0,x.useState)({width:0,height:0}),l=(0,x.useRef)(null),u=(0,x.useRef)(null),d=(0,x.useRef)(null),f=(0,x.useRef)(0),p=(0,x.useRef)(0),m=(0,x.useRef)(null),h=(0,x.useRef)(null),g=(0,x.useRef)(0),_=(0,x.useRef)(t);_.current=t;let v=(0,x.useCallback)(()=>{g.current+=1,m.current&&=(clearInterval(m.current),null),h.current&&=(clearTimeout(h.current),null);try{l.current?.close()}catch{}l.current=null;let e=u.current;e&&(e.srcObject=null,e.remove(),u.current=null),d.current=null},[]),y=(0,x.useCallback)(()=>{v(),r(`idle`),a(null)},[v]);return{status:n,errorMessage:i,start:(0,x.useCallback)(t=>{v();let n=g.current,i=()=>n!==g.current,o=!1,y=(e,t=`error`)=>{i()||o||(o=!0,r(t),a(e),_.current?.())};if(typeof RTCPeerConnection>`u`){y(`This browser has no WebRTC support.`,`unsupported`);return}let b=document.createElement(`video`);b.autoplay=!0,b.muted=!0,b.playsInline=!0,b.setAttribute(`aria-hidden`,`true`),b.style.cssText=`position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none`,document.body.appendChild(b),u.current=b;let x=()=>{if(i())return;let t=e.current;t&&b.videoWidth>0&&((t.width!==b.videoWidth||t.height!==b.videoHeight)&&(t.width=b.videoWidth,t.height=b.videoHeight,c({width:b.videoWidth,height:b.videoHeight})),d.current||=t.getContext(`2d`),d.current?.drawImage(b,0,0,t.width,t.height),f.current+=1),S()},S=()=>typeof b.requestVideoFrameCallback==`function`?b.requestVideoFrameCallback(()=>x()):requestAnimationFrame(()=>x()),C=new RTCPeerConnection({iceServers:[]});l.current=C,C.addTransceiver(`video`,{direction:`recvonly`}),C.ontrack=e=>{let t=new MediaStream;t.addTrack(e.track),b.srcObject=t,b.play().catch(()=>{}),S()},C.onconnectionstatechange=()=>{i()||(C.connectionState===`connected`&&(h.current&&=(clearTimeout(h.current),null),r(`ready`),a(null)),C.connectionState===`failed`&&y(`The WebRTC connection failed.`))},m.current=setInterval(async()=>{if(!(i()||!l.current))try{(await l.current.getStats()).forEach(e=>{e.type===`inbound-rtp`&&e.kind===`video`&&(p.current=e.bytesReceived??0)})}catch{}},1e3),(async()=>{try{if(await C.setLocalDescription(await C.createOffer()),await T(C),i())return;let e=s(),n=await E(t,C.localDescription.sdp,e,i);if(i())return;if(!n){y(`The host's WebRTC relay never produced a stream.`);return}if(await C.setRemoteDescription({type:`answer`,sdp:n}),i()||C.connectionState===`connected`)return;h.current=setTimeout(()=>{h.current=null,C.connectionState!==`connected`&&y(`The WebRTC connection did not come up.`)},w)}catch(e){y(e.message)}})()},[e,v]),stop:y,getFrameCount:()=>f.current,getTotalBytes:()=>p.current,frameSize:o}}function T(e){return e.iceGatheringState===`complete`?Promise.resolve():new Promise(t=>{let n=()=>{e.iceGatheringState===`complete`&&(e.removeEventListener(`icegatheringstatechange`,n),t())};e.addEventListener(`icegatheringstatechange`,n),setTimeout(()=>{e.removeEventListener(`icegatheringstatechange`,n),t()},2e3)})}async function E(e,t,n,r){for(let i=0;i<C;i++){if(r())return null;let i=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/sdp`,...n?{Authorization:`Bearer ${n}`}:{},"x-ppm-client":`web`},body:t});if(i.ok)return await i.text();if(i.status!==404&&i.status!==502)throw Error(`the host refused the WebRTC handshake (${i.status})`);await new Promise(e=>setTimeout(e,S))}return null}function D(e){return e.code===`KeyV`&&(e.ctrlKey||e.metaKey)}function O(e){return(e.code===`KeyC`||e.code===`KeyX`)&&(e.ctrlKey||e.metaKey)}function k(e){let t=document.createElement(`textarea`);t.value=e,t.style.cssText=`position:fixed;top:0;left:-9999px;opacity:0`,t.setAttribute(`aria-hidden`,`true`),document.body.appendChild(t);let n=document.activeElement,r=!1;try{t.focus({preventScroll:!0}),t.setSelectionRange(0,e.length),t.select(),r=document.execCommand(`copy`)}catch{r=!1}t.remove();try{n?.focus({preventScroll:!0})}catch{}return r}async function te(e){try{return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),!0):!1}catch{return!1}}var A=120,j=400;function ne(){let e=(0,x.useRef)(null),t=(0,x.useRef)(null),n=(0,x.useRef)(null),r=(0,x.useRef)(0),i=(0,x.useRef)(0),[a,o]=(0,x.useState)(`idle`),s=(0,x.useCallback)(()=>{try{t.current?.close()}catch{}t.current=null,n.current=null;let a=e.current;e.current=null,a&&a.close().catch(()=>{}),r.current=0,i.current=0,o(e=>e===`unsupported`?e:`idle`)},[]),c=(0,x.useCallback)(t=>{let i=e.current;if(!i){t.close();return}let a=t.numberOfFrames,o=t.numberOfChannels,s=i.createBuffer(o,a,t.sampleRate);for(let e=0;e<o;e++){let n=new Float32Array(a);t.copyTo(n,{planeIndex:e,format:`f32-planar`}),s.copyToChannel(n,e)}t.close();let c=i.currentTime,l=(r.current-c)*1e3;(l<0||l>j)&&(r.current=c+A/1e3);let u=i.createBufferSource();u.buffer=s,u.connect(i.destination),n.current&&u.connect(n.current),u.start(r.current),r.current+=s.duration},[]),l=(0,x.useCallback)(async(a,l)=>{if(typeof AudioDecoder>`u`||typeof AudioContext>`u`){o(`unsupported`);return}s();let u=new AudioContext({sampleRate:l,latencyHint:`interactive`});e.current=u,u.state===`suspended`&&await u.resume().catch(()=>{}),n.current=u.createMediaStreamDestination();let d=new AudioDecoder({output:c,error:()=>{try{t.current?.reset()}catch{}}});try{d.configure({codec:`opus`,sampleRate:l,numberOfChannels:a})}catch{o(`unsupported`);return}t.current=d,r.current=0,i.current=0,o(`playing`)},[c,s]),u=(0,x.useCallback)(e=>{let n=t.current;if(!n||n.state!==`configured`)return;let r=i.current;i.current+=2e4;try{n.decode(new EncodedAudioChunk({type:`key`,timestamp:r,data:e}))}catch{}},[]),d=(0,x.useCallback)(()=>n.current?n.current.stream.getAudioTracks():[],[]);return(0,x.useEffect)(()=>()=>s(),[s]),{status:a,configure:l,decodePacket:u,reset:s,getTracks:d}}var re=5e3,ie=2,M=`ppm.remoteDesktop.webrtcUnusable`;function ae(){try{return sessionStorage.getItem(M)===`1`}catch{return!1}}function oe(){try{sessionStorage.setItem(M,`1`)}catch{}}function N(e,{displayId:t}={}){let n=(0,x.useRef)(null),r=(0,x.useRef)(0),[i,a]=(0,x.useState)(`connecting`),[o,s]=(0,x.useState)(null),[d,f]=(0,x.useState)(0),[p,h]=(0,x.useState)(()=>({preset:l(u.getState().remoteDesktopQuality)??`balanced`,held:1})),g=(0,x.useRef)(l(u.getState().remoteDesktopQuality)),[_,v]=(0,x.useState)(null),y=(0,x.useRef)(null),S=u(e=>e.remoteDesktopShowCursor),C=u(e=>e.remoteDesktopClipboardSync),w=(0,x.useRef)(S),T=(0,x.useRef)(C);(0,x.useEffect)(()=>{w.current=S},[S]),(0,x.useEffect)(()=>{T.current=C},[C]);let E=(0,x.useRef)(u.getState().remoteDesktopCodec),[D,O]=(0,x.useState)(E.current),k=m(e),A=(0,x.useRef)(!1),j=ee(e,{onFailure:(0,x.useCallback)(()=>{typeof VideoDecoder>`u`||A.current||(A.current=!0,oe(),f(e=>e+1))},[])}),[M,N]=(0,x.useState)(`websocket`),P=ne(),[F,I]=(0,x.useState)(!1),[L,R]=(0,x.useState)(!1),[z,B]=(0,x.useState)(null),[V,H]=(0,x.useState)(null),[U,W]=(0,x.useState)(null),[G,K]=(0,x.useState)(null),q=(0,x.useCallback)(e=>{let t=n.current;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},[]),J=(0,x.useCallback)(e=>{let t=l(e.preset);t&&h({preset:t,held:typeof e.held==`number`&&e.held>0&&e.held<1?e.held:1})},[]),Y=(0,x.useCallback)(e=>{if(e!==`custom`)return{type:`quality`,preset:e};let t=u.getState();return{type:`quality`,preset:`custom`,percent:t.remoteDesktopCustomQualityPercent,fps:t.remoteDesktopCustomFps}},[]),X=(0,x.useCallback)(e=>{g.current=e,u.getState().setRemoteDesktopQuality(e),q(Y(e))},[Y,q]),Z=(0,x.useCallback)((e,t)=>{let n=u.getState();n.setRemoteDesktopCustomQuality(e,t),n.setRemoteDesktopQuality(`custom`),g.current=`custom`,q(Y(`custom`))},[Y,q]),Q=(0,x.useCallback)(e=>{B(null),q({type:`privacy`,enabled:e})},[q]),se=(0,x.useCallback)(e=>{I(e),e||P.reset(),q({type:`audio`,enabled:e})},[P,q]),ce=(0,x.useCallback)(e=>{E.current=e,u.getState().setRemoteDesktopCodec(e),O(e),e&&q({type:`codec`,encoder:e})},[q]),le=(0,x.useCallback)(e=>{K(null),q({type:`resolution`,modeId:e})},[q]),$=(0,x.useCallback)(e=>{w.current=e,u.getState().setRemoteDesktopShowCursor(e),q({type:`cursor`,show:e})},[q]),ue=(0,x.useCallback)((e,t,n=!1)=>{q({type:`clipboard`,text:e,paste:t,shift:n})},[q]),de=(0,x.useCallback)(()=>{y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{y.current=null,q({type:`clipboardRead`})},350)},[q]),fe=(0,x.useCallback)(()=>v(null),[]);(0,x.useEffect)(()=>()=>{y.current&&clearTimeout(y.current)},[]),(0,x.useEffect)(()=>{let e=!1,i=null;a(`connecting`),s(null),N(`websocket`),R(!1),B(null),r.current=0,k.reset(),(async()=>{let o;try{o=(await c.post(`/api/remote-desktop/session`)).nonce}catch(t){e||(a(`error`),s(t.message));return}if(e)return;let l=b(window.location,!1,void 0),u=new WebSocket(l);u.binaryType=`arraybuffer`,n.current=u,u.onopen=()=>{u.send(JSON.stringify({type:`auth`,nonce:o,...t?{displayId:t}:{},cursor:w.current,...E.current?{codec:E.current}:{},webrtc:!(A.current||ae())})),g.current&&u.send(JSON.stringify(Y(g.current))),i=setInterval(()=>q({type:`ping`}),re)},u.onmessage=t=>{if(typeof t.data==`string`){let n;try{n=JSON.parse(t.data)}catch{return}if(n.type===`webrtc`&&typeof n.whepPath==`string`)N(`webrtc`),J(n),O(typeof n.encoder==`string`?n.encoder:null),j.start(n.whepPath),a(`streaming`);else if(n.type===`config`&&typeof n.codec==`string`)J(n),O(typeof n.encoder==`string`?n.encoder:null),k.configure(n.codec).then(()=>{e||a(`streaming`)});else if(n.type===`quality`)J(n);else if(n.type===`codec`)O(typeof n.encoder==`string`?n.encoder:null);else if(n.type===`resolution`)H(typeof n.modeId==`string`?n.modeId:null),W(typeof n.original==`string`?n.original:null),K(null);else if(n.type===`resolutionError`)K(typeof n.message==`string`?n.message:`The host refused the mode.`);else if(n.type===`privacy`)R(n.enabled===!0),B(typeof n.reason==`string`?n.reason:null);else if(n.type===`audio`){let e=n.enabled===!0;if(I(e),!e){P.reset();return}let t=typeof n.channels==`number`?n.channels:2,r=typeof n.sampleRate==`number`?n.sampleRate:48e3;P.configure(t,r)}else if(n.type===`clipboard`&&typeof n.text==`string`){if(!T.current)return;let t=n.text;te(t).then(n=>{!n&&!e&&v(t)})}else n.type===`error`&&(a(`error`),s(typeof n.message==`string`?n.message:`Server error`));return}let n=new Uint8Array(t.data);if(!(n.length<1)){if(r.current+=n.length,n[0]===ie){P.decodePacket(n.subarray(1));return}k.decodeAccessUnit(n.subarray(1),n[0]===1)}},u.onerror=()=>{e||(a(`error`),s(`WebSocket error`))},u.onclose=()=>{e||a(e=>e===`error`?e:`closed`)}})();let o=()=>{if(document.hidden||e)return;let t=n.current;t&&t.readyState===WebSocket.OPEN?t.send(JSON.stringify({type:`ping`})):f(e=>e+1)};return document.addEventListener(`visibilitychange`,o),()=>{e=!0,document.removeEventListener(`visibilitychange`,o),i&&clearInterval(i);try{n.current?.close()}catch{}n.current=null;try{k.reset()}catch{}try{j.stop()}catch{}try{P.reset()}catch{}}},[d,t]);let pe=(0,x.useCallback)(()=>f(e=>e+1),[]),me=(0,x.useCallback)(()=>M===`webrtc`?j.getTotalBytes():r.current,[M,j]);return{connState:i,errorMessage:o,transport:M,decoderStatus:M===`webrtc`?j.status:k.status,decoderErrorMessage:M===`webrtc`?j.errorMessage:k.errorMessage,sendMessage:q,reconnect:pe,getTotalBytes:me,getFrameCount:M===`webrtc`?j.getFrameCount:k.getFrameCount,frameSize:M===`webrtc`?j.frameSize:k.frameSize,quality:p,setQuality:X,setCustomQuality:Z,showCursor:S,setShowCursor:$,codec:D,setCodec:ce,audioOn:F,setAudioOn:se,getAudioTracks:P.getTracks,privacyOn:L,privacyError:z,setPrivacyOn:Q,hostModeId:V,hostOriginalModeId:U,resolutionError:G,setHostMode:le,pendingHostClipboard:_,clearHostClipboard:fe,sendClipboard:ue,requestHostClipboard:de}}function P(e){return Math.min(Math.max(e,0),1)}function F(e,t,n){let r=n.width>0?(e-n.left)/n.width:0,i=n.height>0?(t-n.top)/n.height:0;return{xFrac:P(r),yFrac:P(i)}}function I(e,t,n,r){let i=r.scale||1,a=n.left+n.width/2,o=n.top+n.height/2;return F(a+(e-a-r.panX)/i,o+(t-o-r.panY)/i,n)}function L(e,t,n){if(t<=0||n<=0||e.width<=0||e.height<=0)return e;let r=e.width/e.height,i=t/n;if(i>r){let t=e.width/i;return{left:e.left,top:e.top+(e.height-t)/2,width:e.width,height:t}}let a=e.height*i;return{left:e.left+(e.width-a)/2,top:e.top,width:a,height:e.height}}function R(e){let t=new Map;for(let n of e){if(n.width<=0||n.height<=0)continue;let e=`${n.width}x${n.height}`,r=t.get(e);(!r||z(n,r))&&t.set(e,n)}return[...t.values()].sort((e,t)=>t.width*t.height-e.width*e.height||t.refresh-e.refresh).map(e=>({id:e.id,width:e.width,height:e.height,refresh:e.refresh,current:e.current,preferred:e.preferred}))}function z(e,t){return e.current===t.current?e.preferred===t.preferred?e.refresh>t.refresh:e.preferred:e.current}function B(e,t,n){if(!t||t.width<=0||t.height<=0)return null;let r=e.filter(e=>e.width===t.width&&e.height===t.height);if(r.length===0)return null;let i=e.find(e=>e.id===n)??e.find(e=>e.current)??null;return i&&i.width===t.width&&i.height===t.height?null:r.reduce((e,t)=>z(t,e)?t:e)}function V(){if(typeof window>`u`||!window.screen)return null;let e=Math.round(window.screen.width),t=Math.round(window.screen.height);return e>0&&t>0?{width:e,height:t}:null}function H(e){let t=`${e.width} × ${e.height}`;return e.refresh>0?`${t} · ${e.refresh} Hz`:t}function U(e,t){let n=(0,x.useRef)(null),r=(0,x.useRef)([]),[i,a]=(0,x.useState)(!1),[o,s]=(0,x.useState)(0),c=(0,x.useRef)(null);c.current===null&&(c.current=v());let l=(0,x.useCallback)(()=>{n.current?.stop()},[]),u=(0,x.useCallback)(()=>{let i=e.current,o=c.current;if(!i||!o||n.current)return;let l=i.captureStream();for(let e of t?.()??[])l.addTrack(e);let u;try{u=new MediaRecorder(l,{mimeType:o})}catch{return}r.current=[],u.ondataavailable=e=>{e.data.size>0&&r.current.push(e.data)},u.onstop=()=>{let e=new Blob(r.current,{type:o});r.current=[],n.current=null,a(!1),s(0),e.size>0&&y(e,g(_(o)))},u.start(1e3),n.current=u,a(!0),s(0)},[e,t]),d=(0,x.useCallback)(()=>{n.current?l():u()},[u,l]);return(0,x.useEffect)(()=>{if(!i)return;let e=Date.now(),t=setInterval(()=>{let t=Date.now()-e;s(Math.floor(t/1e3)),t>=72e5&&l()},1e3);return()=>clearInterval(t)},[i,l]),(0,x.useEffect)(()=>()=>{n.current?.stop()},[]),{recording:i,elapsedSec:o,supported:c.current!==null,toggle:d}}var W={fps:0,kbps:0};function G(e,t){let n=t.atMs-e.atMs;if(n<=0)return W;let r=n/1e3,i=Math.max(0,t.frameCount-e.frameCount),a=Math.max(0,t.totalBytes-e.totalBytes);return{fps:i/r,kbps:a/1024/r}}var K=n(),q=500;function J({canvasRef:e,getFrameCount:t,getTotalBytes:n,positionClassName:r=`left-1 top-1`}){let i=u(e=>e.remoteDesktopStatsVisible),[a,o]=(0,x.useState)({fps:0,kbps:0,width:0,height:0}),s=(0,x.useRef)({frameCount:0,totalBytes:0,atMs:0});return(0,x.useEffect)(()=>{if(!i)return;s.current={frameCount:t(),totalBytes:n(),atMs:performance.now()};let r=setInterval(()=>{let r={frameCount:t(),totalBytes:n(),atMs:performance.now()},{fps:i,kbps:a}=G(s.current,r);s.current=r;let c=e.current;o({fps:i,kbps:a,width:c?.width??0,height:c?.height??0})},q);return()=>clearInterval(r)},[i,e,t,n]),i?(0,K.jsxs)(`div`,{className:`pointer-events-none absolute z-40 rounded bg-black/60 px-1.5 py-0.5 font-mono text-[10px] text-white/80 ${r}`,"data-testid":`remote-desktop-stats-overlay`,children:[Math.round(a.fps),` fps · `,Math.round(a.kbps),` KB/s · `,a.width,`×`,a.height]}):null}function Y(){let{caps:e}=p(!1),t=e?.displays??[],[n,r]=(0,x.useState)(void 0),i=t.find(e=>e.id===n)??t.find(e=>e.primary)??t[0];return{displays:t,displayId:n,current:i,select:r,next:(0,x.useCallback)(()=>{t.length<2||r(t[(t.findIndex(e=>e.id===i?.id)+1)%t.length]?.id)},[t,i])}}function X({pendingText:e,onDismiss:t,missingToolAction:n,onDismissMissingTool:o,positionClassName:s=`absolute bottom-2 left-1/2 max-w-[92%] -translate-x-1/2`}){let[c,l]=(0,x.useState)(!1);return e===null?n==null?null:(0,K.jsxs)(Z,{onDismiss:o??(()=>{}),testId:`remote-desktop-clipboard-missing-tool`,positionClassName:s,children:[(0,K.jsx)(a,{className:`size-4 shrink-0 text-amber-300`}),(0,K.jsx)(`span`,{className:`min-w-0 flex-1`,children:`The host has no clipboard tool installed.`}),n.kind===`terminal`&&(0,K.jsxs)(`button`,{type:`button`,onClick:()=>h(n.command),title:n.command,className:`inline-flex min-h-8 shrink-0 items-center gap-1.5 rounded bg-white/15 px-2.5 text-xs hover:bg-white/25`,children:[(0,K.jsx)(i,{className:`size-3.5`}),` `,n.label]})]}):(0,K.jsxs)(Z,{onDismiss:t,testId:`remote-desktop-clipboard-pending`,positionClassName:s,children:[(0,K.jsx)(r,{className:`size-4 shrink-0 text-emerald-400`}),(0,K.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[c?`Could not copy — select the text manually:`:`Copied on the host:`,(0,K.jsx)(`span`,{className:`ml-1 text-white/60`,children:Q(e)})]}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>{k(e)?t():l(!0)},className:`min-h-8 shrink-0 rounded bg-white/15 px-2.5 text-xs hover:bg-white/25`,"data-testid":`remote-desktop-clipboard-copy`,children:`Copy here`})]})}function Z({children:e,onDismiss:t,testId:n,positionClassName:r}){return(0,K.jsxs)(`div`,{className:d(`z-50 flex items-center gap-2 rounded-lg border border-white/10 bg-black/85 px-3 py-2 text-xs text-white shadow-lg`,r),"data-testid":n,children:[e,(0,K.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Dismiss`,className:`flex size-8 shrink-0 items-center justify-center rounded text-white/60 hover:bg-white/10 hover:text-white`,children:(0,K.jsx)(o,{className:`size-3.5`})})]})}function Q(e){let t=e.replace(/\s+/g,` `).trim();return t.length>60?`${t.slice(0,60)}…`:t}export{B as a,H as c,L as d,N as f,U as i,F as l,D as m,Y as n,V as o,O as p,J as r,R as s,X as t,I as u};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Q as r,Ur as i,Z as a,li as o}from"./icons-C1wDt09O.js";import{a as s,r as c}from"./api-client-BnYFnEfK.js";import{k as l,t as u}from"./settings-store-CMpVMq3Y.js";import{n as d}from"./utils-D3xTlJyU.js";import{t as f}from"./ws-auth-k7DWnL9T.js";import{mn as p}from"./index-Vd9Xr54k.js";import{n as m}from"./use-h264-canvas-decoder-BpBeyZ1K.js";import{r as h}from"./run-in-terminal-DAdjH24K.js";import{i as g,n as _,r as v,t as y}from"./remote-desktop-recording-BcDx5c_k.js";function b(e,t,n=`8081`){let r=f(`/ws/remote-desktop`),i=e.protocol===`https:`?`wss:`:`ws:`;return t&&e.protocol!==`https:`?`ws://${e.hostname}:${n}${r}`:`${i}//${e.host}${r}`}var x=e(t(),1),S=400,C=25,w=6e3;function ee(e,{onFailure:t}={}){let[n,r]=(0,x.useState)(`idle`),[i,a]=(0,x.useState)(null),[o,c]=(0,x.useState)({width:0,height:0}),l=(0,x.useRef)(null),u=(0,x.useRef)(null),d=(0,x.useRef)(null),f=(0,x.useRef)(0),p=(0,x.useRef)(0),m=(0,x.useRef)(null),h=(0,x.useRef)(null),g=(0,x.useRef)(0),_=(0,x.useRef)(t);_.current=t;let v=(0,x.useCallback)(()=>{g.current+=1,m.current&&=(clearInterval(m.current),null),h.current&&=(clearTimeout(h.current),null);try{l.current?.close()}catch{}l.current=null;let e=u.current;e&&(e.srcObject=null,e.remove(),u.current=null),d.current=null},[]),y=(0,x.useCallback)(()=>{v(),r(`idle`),a(null)},[v]);return{status:n,errorMessage:i,start:(0,x.useCallback)(t=>{v();let n=g.current,i=()=>n!==g.current,o=!1,y=(e,t=`error`)=>{i()||o||(o=!0,r(t),a(e),_.current?.())};if(typeof RTCPeerConnection>`u`){y(`This browser has no WebRTC support.`,`unsupported`);return}let b=document.createElement(`video`);b.autoplay=!0,b.muted=!0,b.playsInline=!0,b.setAttribute(`aria-hidden`,`true`),b.style.cssText=`position:fixed;top:0;left:0;width:1px;height:1px;opacity:0;pointer-events:none`,document.body.appendChild(b),u.current=b;let x=()=>{if(i())return;let t=e.current;t&&b.videoWidth>0&&((t.width!==b.videoWidth||t.height!==b.videoHeight)&&(t.width=b.videoWidth,t.height=b.videoHeight,c({width:b.videoWidth,height:b.videoHeight})),d.current||=t.getContext(`2d`),d.current?.drawImage(b,0,0,t.width,t.height),f.current+=1),S()},S=()=>typeof b.requestVideoFrameCallback==`function`?b.requestVideoFrameCallback(()=>x()):requestAnimationFrame(()=>x()),C=new RTCPeerConnection({iceServers:[]});l.current=C,C.addTransceiver(`video`,{direction:`recvonly`}),C.ontrack=e=>{let t=new MediaStream;t.addTrack(e.track),b.srcObject=t,b.play().catch(()=>{}),S()},C.onconnectionstatechange=()=>{i()||(C.connectionState===`connected`&&(h.current&&=(clearTimeout(h.current),null),r(`ready`),a(null)),C.connectionState===`failed`&&y(`The WebRTC connection failed.`))},m.current=setInterval(async()=>{if(!(i()||!l.current))try{(await l.current.getStats()).forEach(e=>{e.type===`inbound-rtp`&&e.kind===`video`&&(p.current=e.bytesReceived??0)})}catch{}},1e3),(async()=>{try{if(await C.setLocalDescription(await C.createOffer()),await T(C),i())return;let e=s(),n=await E(t,C.localDescription.sdp,e,i);if(i())return;if(!n){y(`The host's WebRTC relay never produced a stream.`);return}if(await C.setRemoteDescription({type:`answer`,sdp:n}),i()||C.connectionState===`connected`)return;h.current=setTimeout(()=>{h.current=null,C.connectionState!==`connected`&&y(`The WebRTC connection did not come up.`)},w)}catch(e){y(e.message)}})()},[e,v]),stop:y,getFrameCount:()=>f.current,getTotalBytes:()=>p.current,frameSize:o}}function T(e){return e.iceGatheringState===`complete`?Promise.resolve():new Promise(t=>{let n=()=>{e.iceGatheringState===`complete`&&(e.removeEventListener(`icegatheringstatechange`,n),t())};e.addEventListener(`icegatheringstatechange`,n),setTimeout(()=>{e.removeEventListener(`icegatheringstatechange`,n),t()},2e3)})}async function E(e,t,n,r){for(let i=0;i<C;i++){if(r())return null;let i=await fetch(e,{method:`POST`,headers:{"Content-Type":`application/sdp`,...n?{Authorization:`Bearer ${n}`}:{},"x-ppm-client":`web`},body:t});if(i.ok)return await i.text();if(i.status!==404&&i.status!==502)throw Error(`the host refused the WebRTC handshake (${i.status})`);await new Promise(e=>setTimeout(e,S))}return null}function D(e){return e.code===`KeyV`&&(e.ctrlKey||e.metaKey)}function O(e){return(e.code===`KeyC`||e.code===`KeyX`)&&(e.ctrlKey||e.metaKey)}function k(e){let t=document.createElement(`textarea`);t.value=e,t.style.cssText=`position:fixed;top:0;left:-9999px;opacity:0`,t.setAttribute(`aria-hidden`,`true`),document.body.appendChild(t);let n=document.activeElement,r=!1;try{t.focus({preventScroll:!0}),t.setSelectionRange(0,e.length),t.select(),r=document.execCommand(`copy`)}catch{r=!1}t.remove();try{n?.focus({preventScroll:!0})}catch{}return r}async function te(e){try{return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),!0):!1}catch{return!1}}var A=120,j=400;function ne(){let e=(0,x.useRef)(null),t=(0,x.useRef)(null),n=(0,x.useRef)(null),r=(0,x.useRef)(0),i=(0,x.useRef)(0),[a,o]=(0,x.useState)(`idle`),s=(0,x.useCallback)(()=>{try{t.current?.close()}catch{}t.current=null,n.current=null;let a=e.current;e.current=null,a&&a.close().catch(()=>{}),r.current=0,i.current=0,o(e=>e===`unsupported`?e:`idle`)},[]),c=(0,x.useCallback)(t=>{let i=e.current;if(!i){t.close();return}let a=t.numberOfFrames,o=t.numberOfChannels,s=i.createBuffer(o,a,t.sampleRate);for(let e=0;e<o;e++){let n=new Float32Array(a);t.copyTo(n,{planeIndex:e,format:`f32-planar`}),s.copyToChannel(n,e)}t.close();let c=i.currentTime,l=(r.current-c)*1e3;(l<0||l>j)&&(r.current=c+A/1e3);let u=i.createBufferSource();u.buffer=s,u.connect(i.destination),n.current&&u.connect(n.current),u.start(r.current),r.current+=s.duration},[]),l=(0,x.useCallback)(async(a,l)=>{if(typeof AudioDecoder>`u`||typeof AudioContext>`u`){o(`unsupported`);return}s();let u=new AudioContext({sampleRate:l,latencyHint:`interactive`});e.current=u,u.state===`suspended`&&await u.resume().catch(()=>{}),n.current=u.createMediaStreamDestination();let d=new AudioDecoder({output:c,error:()=>{try{t.current?.reset()}catch{}}});try{d.configure({codec:`opus`,sampleRate:l,numberOfChannels:a})}catch{o(`unsupported`);return}t.current=d,r.current=0,i.current=0,o(`playing`)},[c,s]),u=(0,x.useCallback)(e=>{let n=t.current;if(!n||n.state!==`configured`)return;let r=i.current;i.current+=2e4;try{n.decode(new EncodedAudioChunk({type:`key`,timestamp:r,data:e}))}catch{}},[]),d=(0,x.useCallback)(()=>n.current?n.current.stream.getAudioTracks():[],[]);return(0,x.useEffect)(()=>()=>s(),[s]),{status:a,configure:l,decodePacket:u,reset:s,getTracks:d}}var re=5e3,ie=2,M=`ppm.remoteDesktop.webrtcUnusable`;function ae(){try{return sessionStorage.getItem(M)===`1`}catch{return!1}}function oe(){try{sessionStorage.setItem(M,`1`)}catch{}}function N(e,{displayId:t}={}){let n=(0,x.useRef)(null),r=(0,x.useRef)(0),[i,a]=(0,x.useState)(`connecting`),[o,s]=(0,x.useState)(null),[d,f]=(0,x.useState)(0),[p,h]=(0,x.useState)(()=>({preset:l(u.getState().remoteDesktopQuality)??`balanced`,held:1})),g=(0,x.useRef)(l(u.getState().remoteDesktopQuality)),[_,v]=(0,x.useState)(null),y=(0,x.useRef)(null),S=u(e=>e.remoteDesktopShowCursor),C=u(e=>e.remoteDesktopClipboardSync),w=(0,x.useRef)(S),T=(0,x.useRef)(C);(0,x.useEffect)(()=>{w.current=S},[S]),(0,x.useEffect)(()=>{T.current=C},[C]);let E=(0,x.useRef)(u.getState().remoteDesktopCodec),[D,O]=(0,x.useState)(E.current),k=m(e),A=(0,x.useRef)(!1),j=ee(e,{onFailure:(0,x.useCallback)(()=>{typeof VideoDecoder>`u`||A.current||(A.current=!0,oe(),f(e=>e+1))},[])}),[M,N]=(0,x.useState)(`websocket`),P=ne(),[F,I]=(0,x.useState)(!1),[L,R]=(0,x.useState)(!1),[z,B]=(0,x.useState)(null),[V,H]=(0,x.useState)(null),[U,W]=(0,x.useState)(null),[G,K]=(0,x.useState)(null),q=(0,x.useCallback)(e=>{let t=n.current;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},[]),J=(0,x.useCallback)(e=>{let t=l(e.preset);t&&h({preset:t,held:typeof e.held==`number`&&e.held>0&&e.held<1?e.held:1})},[]),Y=(0,x.useCallback)(e=>{if(e!==`custom`)return{type:`quality`,preset:e};let t=u.getState();return{type:`quality`,preset:`custom`,percent:t.remoteDesktopCustomQualityPercent,fps:t.remoteDesktopCustomFps}},[]),X=(0,x.useCallback)(e=>{g.current=e,u.getState().setRemoteDesktopQuality(e),q(Y(e))},[Y,q]),Z=(0,x.useCallback)((e,t)=>{let n=u.getState();n.setRemoteDesktopCustomQuality(e,t),n.setRemoteDesktopQuality(`custom`),g.current=`custom`,q(Y(`custom`))},[Y,q]),Q=(0,x.useCallback)(e=>{B(null),q({type:`privacy`,enabled:e})},[q]),se=(0,x.useCallback)(e=>{I(e),e||P.reset(),q({type:`audio`,enabled:e})},[P,q]),ce=(0,x.useCallback)(e=>{E.current=e,u.getState().setRemoteDesktopCodec(e),O(e),e&&q({type:`codec`,encoder:e})},[q]),le=(0,x.useCallback)(e=>{K(null),q({type:`resolution`,modeId:e})},[q]),$=(0,x.useCallback)(e=>{w.current=e,u.getState().setRemoteDesktopShowCursor(e),q({type:`cursor`,show:e})},[q]),ue=(0,x.useCallback)((e,t,n=!1)=>{q({type:`clipboard`,text:e,paste:t,shift:n})},[q]),de=(0,x.useCallback)(()=>{y.current&&clearTimeout(y.current),y.current=setTimeout(()=>{y.current=null,q({type:`clipboardRead`})},350)},[q]),fe=(0,x.useCallback)(()=>v(null),[]);(0,x.useEffect)(()=>()=>{y.current&&clearTimeout(y.current)},[]),(0,x.useEffect)(()=>{let e=!1,i=null;a(`connecting`),s(null),N(`websocket`),R(!1),B(null),r.current=0,k.reset(),(async()=>{let o;try{o=(await c.post(`/api/remote-desktop/session`)).nonce}catch(t){e||(a(`error`),s(t.message));return}if(e)return;let l=b(window.location,!1,void 0),u=new WebSocket(l);u.binaryType=`arraybuffer`,n.current=u,u.onopen=()=>{u.send(JSON.stringify({type:`auth`,nonce:o,...t?{displayId:t}:{},cursor:w.current,...E.current?{codec:E.current}:{},webrtc:!(A.current||ae())})),g.current&&u.send(JSON.stringify(Y(g.current))),i=setInterval(()=>q({type:`ping`}),re)},u.onmessage=t=>{if(typeof t.data==`string`){let n;try{n=JSON.parse(t.data)}catch{return}if(n.type===`webrtc`&&typeof n.whepPath==`string`)N(`webrtc`),J(n),O(typeof n.encoder==`string`?n.encoder:null),j.start(n.whepPath),a(`streaming`);else if(n.type===`config`&&typeof n.codec==`string`)J(n),O(typeof n.encoder==`string`?n.encoder:null),k.configure(n.codec).then(()=>{e||a(`streaming`)});else if(n.type===`quality`)J(n);else if(n.type===`codec`)O(typeof n.encoder==`string`?n.encoder:null);else if(n.type===`resolution`)H(typeof n.modeId==`string`?n.modeId:null),W(typeof n.original==`string`?n.original:null),K(null);else if(n.type===`resolutionError`)K(typeof n.message==`string`?n.message:`The host refused the mode.`);else if(n.type===`privacy`)R(n.enabled===!0),B(typeof n.reason==`string`?n.reason:null);else if(n.type===`audio`){let e=n.enabled===!0;if(I(e),!e){P.reset();return}let t=typeof n.channels==`number`?n.channels:2,r=typeof n.sampleRate==`number`?n.sampleRate:48e3;P.configure(t,r)}else if(n.type===`clipboard`&&typeof n.text==`string`){if(!T.current)return;let t=n.text;te(t).then(n=>{!n&&!e&&v(t)})}else n.type===`error`&&(a(`error`),s(typeof n.message==`string`?n.message:`Server error`));return}let n=new Uint8Array(t.data);if(!(n.length<1)){if(r.current+=n.length,n[0]===ie){P.decodePacket(n.subarray(1));return}k.decodeAccessUnit(n.subarray(1),n[0]===1)}},u.onerror=()=>{e||(a(`error`),s(`WebSocket error`))},u.onclose=()=>{e||a(e=>e===`error`?e:`closed`)}})();let o=()=>{if(document.hidden||e)return;let t=n.current;t&&t.readyState===WebSocket.OPEN?t.send(JSON.stringify({type:`ping`})):f(e=>e+1)};return document.addEventListener(`visibilitychange`,o),()=>{e=!0,document.removeEventListener(`visibilitychange`,o),i&&clearInterval(i);try{n.current?.close()}catch{}n.current=null;try{k.reset()}catch{}try{j.stop()}catch{}try{P.reset()}catch{}}},[d,t]);let pe=(0,x.useCallback)(()=>f(e=>e+1),[]),me=(0,x.useCallback)(()=>M===`webrtc`?j.getTotalBytes():r.current,[M,j]);return{connState:i,errorMessage:o,transport:M,decoderStatus:M===`webrtc`?j.status:k.status,decoderErrorMessage:M===`webrtc`?j.errorMessage:k.errorMessage,sendMessage:q,reconnect:pe,getTotalBytes:me,getFrameCount:M===`webrtc`?j.getFrameCount:k.getFrameCount,frameSize:M===`webrtc`?j.frameSize:k.frameSize,quality:p,setQuality:X,setCustomQuality:Z,showCursor:S,setShowCursor:$,codec:D,setCodec:ce,audioOn:F,setAudioOn:se,getAudioTracks:P.getTracks,privacyOn:L,privacyError:z,setPrivacyOn:Q,hostModeId:V,hostOriginalModeId:U,resolutionError:G,setHostMode:le,pendingHostClipboard:_,clearHostClipboard:fe,sendClipboard:ue,requestHostClipboard:de}}function P(e){return Math.min(Math.max(e,0),1)}function F(e,t,n){let r=n.width>0?(e-n.left)/n.width:0,i=n.height>0?(t-n.top)/n.height:0;return{xFrac:P(r),yFrac:P(i)}}function I(e,t,n,r){let i=r.scale||1,a=n.left+n.width/2,o=n.top+n.height/2;return F(a+(e-a-r.panX)/i,o+(t-o-r.panY)/i,n)}function L(e,t,n){if(t<=0||n<=0||e.width<=0||e.height<=0)return e;let r=e.width/e.height,i=t/n;if(i>r){let t=e.width/i;return{left:e.left,top:e.top+(e.height-t)/2,width:e.width,height:t}}let a=e.height*i;return{left:e.left+(e.width-a)/2,top:e.top,width:a,height:e.height}}function R(e){let t=new Map;for(let n of e){if(n.width<=0||n.height<=0)continue;let e=`${n.width}x${n.height}`,r=t.get(e);(!r||z(n,r))&&t.set(e,n)}return[...t.values()].sort((e,t)=>t.width*t.height-e.width*e.height||t.refresh-e.refresh).map(e=>({id:e.id,width:e.width,height:e.height,refresh:e.refresh,current:e.current,preferred:e.preferred}))}function z(e,t){return e.current===t.current?e.preferred===t.preferred?e.refresh>t.refresh:e.preferred:e.current}function B(e,t,n){if(!t||t.width<=0||t.height<=0)return null;let r=e.filter(e=>e.width===t.width&&e.height===t.height);if(r.length===0)return null;let i=e.find(e=>e.id===n)??e.find(e=>e.current)??null;return i&&i.width===t.width&&i.height===t.height?null:r.reduce((e,t)=>z(t,e)?t:e)}function V(){if(typeof window>`u`||!window.screen)return null;let e=Math.round(window.screen.width),t=Math.round(window.screen.height);return e>0&&t>0?{width:e,height:t}:null}function H(e){let t=`${e.width} × ${e.height}`;return e.refresh>0?`${t} · ${e.refresh} Hz`:t}function U(e,t){let n=(0,x.useRef)(null),r=(0,x.useRef)([]),[i,a]=(0,x.useState)(!1),[o,s]=(0,x.useState)(0),c=(0,x.useRef)(null);c.current===null&&(c.current=v());let l=(0,x.useCallback)(()=>{n.current?.stop()},[]),u=(0,x.useCallback)(()=>{let i=e.current,o=c.current;if(!i||!o||n.current)return;let l=i.captureStream();for(let e of t?.()??[])l.addTrack(e);let u;try{u=new MediaRecorder(l,{mimeType:o})}catch{return}r.current=[],u.ondataavailable=e=>{e.data.size>0&&r.current.push(e.data)},u.onstop=()=>{let e=new Blob(r.current,{type:o});r.current=[],n.current=null,a(!1),s(0),e.size>0&&y(e,g(_(o)))},u.start(1e3),n.current=u,a(!0),s(0)},[e,t]),d=(0,x.useCallback)(()=>{n.current?l():u()},[u,l]);return(0,x.useEffect)(()=>{if(!i)return;let e=Date.now(),t=setInterval(()=>{let t=Date.now()-e;s(Math.floor(t/1e3)),t>=72e5&&l()},1e3);return()=>clearInterval(t)},[i,l]),(0,x.useEffect)(()=>()=>{n.current?.stop()},[]),{recording:i,elapsedSec:o,supported:c.current!==null,toggle:d}}var W={fps:0,kbps:0};function G(e,t){let n=t.atMs-e.atMs;if(n<=0)return W;let r=n/1e3,i=Math.max(0,t.frameCount-e.frameCount),a=Math.max(0,t.totalBytes-e.totalBytes);return{fps:i/r,kbps:a/1024/r}}var K=n(),q=500;function J({canvasRef:e,getFrameCount:t,getTotalBytes:n,positionClassName:r=`left-1 top-1`}){let i=u(e=>e.remoteDesktopStatsVisible),[a,o]=(0,x.useState)({fps:0,kbps:0,width:0,height:0}),s=(0,x.useRef)({frameCount:0,totalBytes:0,atMs:0});return(0,x.useEffect)(()=>{if(!i)return;s.current={frameCount:t(),totalBytes:n(),atMs:performance.now()};let r=setInterval(()=>{let r={frameCount:t(),totalBytes:n(),atMs:performance.now()},{fps:i,kbps:a}=G(s.current,r);s.current=r;let c=e.current;o({fps:i,kbps:a,width:c?.width??0,height:c?.height??0})},q);return()=>clearInterval(r)},[i,e,t,n]),i?(0,K.jsxs)(`div`,{className:`pointer-events-none absolute z-40 rounded bg-black/60 px-1.5 py-0.5 font-mono text-[10px] text-white/80 ${r}`,"data-testid":`remote-desktop-stats-overlay`,children:[Math.round(a.fps),` fps · `,Math.round(a.kbps),` KB/s · `,a.width,`×`,a.height]}):null}function Y(){let{caps:e}=p(!1),t=e?.displays??[],[n,r]=(0,x.useState)(void 0),i=t.find(e=>e.id===n)??t.find(e=>e.primary)??t[0];return{displays:t,displayId:n,current:i,select:r,next:(0,x.useCallback)(()=>{t.length<2||r(t[(t.findIndex(e=>e.id===i?.id)+1)%t.length]?.id)},[t,i])}}function X({pendingText:e,onDismiss:t,missingToolAction:n,onDismissMissingTool:o,positionClassName:s=`absolute bottom-2 left-1/2 max-w-[92%] -translate-x-1/2`}){let[c,l]=(0,x.useState)(!1);return e===null?n==null?null:(0,K.jsxs)(Z,{onDismiss:o??(()=>{}),testId:`remote-desktop-clipboard-missing-tool`,positionClassName:s,children:[(0,K.jsx)(a,{className:`size-4 shrink-0 text-amber-300`}),(0,K.jsx)(`span`,{className:`min-w-0 flex-1`,children:`The host has no clipboard tool installed.`}),n.kind===`terminal`&&(0,K.jsxs)(`button`,{type:`button`,onClick:()=>h(n.command),title:n.command,className:`inline-flex min-h-8 shrink-0 items-center gap-1.5 rounded bg-white/15 px-2.5 text-xs hover:bg-white/25`,children:[(0,K.jsx)(i,{className:`size-3.5`}),` `,n.label]})]}):(0,K.jsxs)(Z,{onDismiss:t,testId:`remote-desktop-clipboard-pending`,positionClassName:s,children:[(0,K.jsx)(r,{className:`size-4 shrink-0 text-emerald-400`}),(0,K.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[c?`Could not copy — select the text manually:`:`Copied on the host:`,(0,K.jsx)(`span`,{className:`ml-1 text-white/60`,children:Q(e)})]}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>{k(e)?t():l(!0)},className:`min-h-8 shrink-0 rounded bg-white/15 px-2.5 text-xs hover:bg-white/25`,"data-testid":`remote-desktop-clipboard-copy`,children:`Copy here`})]})}function Z({children:e,onDismiss:t,testId:n,positionClassName:r}){return(0,K.jsxs)(`div`,{className:d(`z-50 flex items-center gap-2 rounded-lg border border-white/10 bg-black/85 px-3 py-2 text-xs text-white shadow-lg`,r),"data-testid":n,children:[e,(0,K.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Dismiss`,className:`flex size-8 shrink-0 items-center justify-center rounded text-white/60 hover:bg-white/10 hover:text-white`,children:(0,K.jsx)(o,{className:`size-3.5`})})]})}function Q(e){let t=e.replace(/\s+/g,` `).trim();return t.length>60?`${t.slice(0,60)}…`:t}export{B as a,H as c,L as d,N as f,U as i,F as l,D as m,Y as n,V as o,O as p,J as r,R as s,X as t,I as u};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/remote-desktop-mobile-view-
|
|
2
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{vt as r}from"./vendor-ui-BTSIXzhZ.js";import"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./settings-store-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/remote-desktop-mobile-view-CV8eHh4A.js","assets/rolldown-runtime-C5c2KzVm.js","assets/index-Vd9Xr54k.js","assets/preload-helper-Bf_JiD2A.js","assets/vendor-ui-BTSIXzhZ.js","assets/vendor-markdown-C-P1aR4p.js","assets/button-BHGVTbam.js","assets/utils-D3xTlJyU.js","assets/createLucideIcon-B2pji242.js","assets/file-diff-CScJM-VZ.js","assets/git-commit-horizontal-ZMFP54eB.js","assets/api-client-BnYFnEfK.js","assets/react-B9hau9ra.js","assets/open-db-tabs-DBgV2hbA.js","assets/window-store-D6EgLSfT.js","assets/minimal-mode-rLZOjciW.js","assets/panel-store-H7e9XHZF.js","assets/settings-store-CMpVMq3Y.js","assets/session-list-sync-triggers-D9i1FxWd.js","assets/project-store-Bs-kiU8m.js","assets/project-framework-store-nuePqBBa.js","assets/explorer-model-f5q-50DN.js","assets/db-sidebar-reveal-CGqWBYay.js","assets/use-is-mobile-CL2I7hLf.js","assets/db-types-cHkNH-mN.js","assets/tab-store-NUmgzMPf.js","assets/use-db-driver-installed-BL1XW_bI.js","assets/impexp-state-Cx2Az9iZ.js","assets/file-store-Bn0vbkCx.js","assets/sql-identifiers-7jHNEORb.js","assets/db-explorer-store-DJNNIfN5.js","assets/onboarding-quick-orientation-DTMrcMf0.js","assets/dialog-DnE192fh.js","assets/portal-container-context-Gepuvxdg.js","assets/icons-C1wDt09O.js","assets/format-file-meta-BOAh9mam.js","assets/fs-api-BVIVh_De.js","assets/open-settings-DWbF5YsE.js","assets/settings-categories-BY9n3BRr.js","assets/adaptive-context-menu-CxHkI7dL.js","assets/context-menu-DhKbkI1X.js","assets/mobile-bottom-sheet-M9pZptfh.js","assets/use-visual-viewport-B_GFo6k2.js","assets/dropdown-menu-CxZR_vuV.js","assets/input-CReAuQTF.js","assets/scroll-area-CSmNLlfl.js","assets/start-ellipsis-DfU-W_6j.js","assets/chat-preparation-cache-Bzb-T1pm.js","assets/clipboard-D3XnL7CB.js","assets/file-icons-CB0RsVdl.js","assets/format-date-SZ6qU2sD.js","assets/git-repo-store-CESIqItW.js","assets/patch-tab-metadata-DqvfqUI4.js","assets/ws-auth-k7DWnL9T.js","assets/apply-theme-Kiqxd1NZ.js","assets/resolve-theme-DGQXDIbF.js","assets/index-Cb3Z6wNy.css","assets/remote-desktop-clipboard-notice-Dwn-iV4g.js","assets/use-h264-canvas-decoder-BpBeyZ1K.js","assets/remote-desktop-recording-BcDx5c_k.js","assets/run-in-terminal-DAdjH24K.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{vt as r}from"./vendor-ui-BTSIXzhZ.js";import"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./settings-store-CMpVMq3Y.js";import{t as i}from"./preload-helper-Bf_JiD2A.js";import{n as a}from"./portal-container-context-Gepuvxdg.js";import"./window-store-D6EgLSfT.js";import"./panel-store-H7e9XHZF.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{hn as o}from"./index-Vd9Xr54k.js";import"./run-in-terminal-DAdjH24K.js";import{n as s,t as c}from"./remote-desktop-readiness-gate-DrSYb_9z.js";var l=e(t(),1),u=e(r(),1),d=n(),f=(0,l.lazy)(()=>i(()=>import(`./remote-desktop-mobile-view-CV8eHh4A.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60])));function p(){let e=o(e=>e.isOpen),t=o(e=>e.close),n=a();return e?(0,u.createPortal)((0,d.jsx)(`div`,{className:`fixed inset-0 z-[45] bg-black`,"data-testid":`remote-desktop-mobile-sheet`,children:(0,d.jsx)(s,{onCancel:t,children:(0,d.jsx)(c,{onCancel:t,children:(0,d.jsx)(l.Suspense,{fallback:(0,d.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-text-2`,children:`Loading…`}),children:(0,d.jsx)(f,{onClose:t})})})})}),n??document.getElementById(`root`)??document.body):null}export{p as RemoteDesktopMobileSheet};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ht as r,K as i,Ln as a,Mr as o,Un as s,Yt as c,Z as l,_r as u,ai as d,gi as f,li as p,nn as m,ri as h,un as g,vt as _,wr as v,zn as y}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import{A as b,O as x,t as S}from"./settings-store-CBJCnE5L.js";import{n as C}from"./utils-D3xTlJyU.js";import"./window-store-UcSFgNCI.js";import"./panel-store-Dx2ziBLp.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{t as w}from"./use-visual-viewport-B_GFo6k2.js";import"./ws-auth-k7DWnL9T.js";import{pn as ee}from"./index-Cx9ZRibz.js";import"./use-h264-canvas-decoder-BpBeyZ1K.js";import"./run-in-terminal-EVMb5TjW.js";import{a as te,d as T,f as E,i as ne,n as re,o as ie,r as ae,s as oe,t as D,u as O}from"./remote-desktop-clipboard-notice-CGDBpXMf.js";import{a as k}from"./remote-desktop-recording-D_fwMC2z.js";var A=e(t(),1);function se(e,t,n=10,r=300){let i=Math.hypot(t.x-e.x,t.y-e.y),a=t.t-e.t;return i<=n&&a<=r}function ce(e,t,n=15){return Math.abs(t-e)>n?`pinch`:`scroll`}function j(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function M(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function N(e,t,n){return Math.min(Math.max(e,t),n)}function P(e,t,n){return[{type:`pointer`,xFrac:e,yFrac:t,button:n,down:!0},{type:`pointer`,xFrac:e,yFrac:t,button:n,down:!1}]}function le(e,t,n){return{start:{x:e,y:t,t:performance.now()},last:{x:e,y:t},moved:!1,rect:n}}function ue(e,t,n,r,i,a){let o=Math.hypot(t-e.start.x,n-e.start.y);if(r===`touch`){if(!e.moved&&o>10){e.moved=!0;let r=O(e.start.x,e.start.y,e.rect,i);return e.last={x:t,y:n},{message:{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:`left`,down:!0}}}if(e.last={x:t,y:n},!e.moved)return{};let r=O(t,n,e.rect,i);return{message:{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:null,down:null}}}let s=(t-e.last.x)/i.scale,c=(n-e.last.y)/i.scale;return o>10&&(e.moved=!0),e.last={x:t,y:n},{cursor:{xFrac:N(a.xFrac+s/e.rect.width,0,1),yFrac:N(a.yFrac+c/e.rect.height,0,1)},sendCursorMove:!0}}function F(e,t,n,r,i,a){let o={x:t,y:n,t:performance.now()},s=se(e.start,o,10,300);if(r===`touch`){let r=O(t,n,e.rect,i);return!e.moved&&s?P(r.xFrac,r.yFrac,`left`):e.moved?[{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:`left`,down:!1}]:[]}return!e.moved&&s?P(a.xFrac,a.yFrac,`left`):[]}function I(e,t,n){let r=M(e,t);return{startDistance:j(e,t),startMid:r,lastMid:r,startScale:n,startTime:performance.now(),gesture:null}}function de(e,t,n,r){let i=j(t,n),a=M(t,n);if(e.gesture===null){let t=Math.abs(i-e.startDistance),n=j(e.startMid,a);if(t>15)e.gesture=ce(e.startDistance,i,15);else if(n>15)e.gesture=`scroll`;else return e.lastMid=a,{}}let o;if(e.gesture===`pinch`)o={transform:{scale:N(e.startScale*(i/e.startDistance),1,4),panX:r.panX,panY:r.panY}};else if(r.scale>1.01){let t=a.x-e.lastMid.x,n=a.y-e.lastMid.y;o={transform:{scale:r.scale,panX:r.panX+t,panY:r.panY+n}}}else o={wheelDeltaPx:a.y-e.lastMid.y};return e.lastMid=a,o}function L(e,t,n){if(e.gesture===null&&performance.now()-e.startTime<=300){let r=O(e.lastMid.x,e.lastMid.y,t,n);return P(r.xFrac,r.yFrac,`right`)}return[]}var R={scale:1,panX:0,panY:0},z=40,B=120;function fe({containerRef:e,canvasRef:t,mode:n,sendMessage:r,enabled:i}){let[a,o]=(0,A.useState)(R),[s,c]=(0,A.useState)({xFrac:.5,yFrac:.5}),l=(0,A.useRef)(a),u=(0,A.useRef)(s),d=(0,A.useRef)(n);d.current=n;let f=(0,A.useRef)({transform:null,cursor:null,sendCursorMove:!1,wheelPx:0}),p=(0,A.useRef)(0),m=(0,A.useCallback)(()=>{p.current=0;let e=f.current;e.transform&&=(l.current=e.transform,o(e.transform),null),e.cursor&&(u.current=e.cursor,c(e.cursor),e.sendCursorMove&&r({type:`pointer`,xFrac:e.cursor.xFrac,yFrac:e.cursor.yFrac,button:null,down:null}),e.cursor=null,e.sendCursorMove=!1),e.wheelPx!==0&&(r({type:`wheel`,dy:-(e.wheelPx/z)*B}),e.wheelPx=0)},[r]),h=(0,A.useCallback)(()=>{p.current||=requestAnimationFrame(m)},[m]),g=(0,A.useCallback)(()=>{l.current=R,o(R)},[]);return(0,A.useEffect)(()=>{let n=e.current;if(!n||!i)return;let a=null,o=null,s=e=>e.forEach(r),c=()=>{let e=n.getBoundingClientRect(),r=t.current;return!r||!r.width||!r.height?e:T(e,r.width,r.height)},m=e=>{e.preventDefault(),e.stopPropagation();let t=c();if(e.touches.length===1){o=null;let n=e.touches[0];a=le(n.clientX,n.clientY,t)}else if(e.touches.length===2){a=null;let[t,n]=[e.touches[0],e.touches[1]];o=I({x:t.clientX,y:t.clientY},{x:n.clientX,y:n.clientY},l.current.scale)}else a=null,o=null},g=e=>{if(e.preventDefault(),e.stopPropagation(),a&&e.touches.length===1){let t=e.touches[0],n=ue(a,t.clientX,t.clientY,d.current,l.current,u.current);n.message&&r(n.message),n.cursor&&(u.current=n.cursor,f.current.cursor=n.cursor,f.current.sendCursorMove=!!n.sendCursorMove,h());return}if(o&&e.touches.length===2){let[t,n]=[e.touches[0],e.touches[1]],r=de(o,{x:t.clientX,y:t.clientY},{x:n.clientX,y:n.clientY},l.current);r.transform&&(l.current=r.transform,f.current.transform=r.transform,h()),r.wheelDeltaPx&&(f.current.wheelPx+=r.wheelDeltaPx,h())}},_=e=>{e.preventDefault(),e.stopPropagation();let t=e.changedTouches[0];if(a){let e=t?t.clientX:a.last.x,n=t?t.clientY:a.last.y;s(F(a,e,n,d.current,l.current,u.current)),a=null}o&&=(s(L(o,c(),l.current)),null)},v=e=>{e.stopPropagation(),a?.moved&&d.current===`touch`&&s(F(a,a.last.x,a.last.y,`touch`,l.current,u.current)),a=null,o=null};return n.addEventListener(`touchstart`,m,{passive:!1}),n.addEventListener(`touchmove`,g,{passive:!1}),n.addEventListener(`touchend`,_,{passive:!1}),n.addEventListener(`touchcancel`,v,{passive:!1}),()=>{p.current&&cancelAnimationFrame(p.current),n.removeEventListener(`touchstart`,m),n.removeEventListener(`touchmove`,g),n.removeEventListener(`touchend`,_),n.removeEventListener(`touchcancel`,v)}},[e,t,i,r,h]),{transform:a,virtualCursor:n===`mouse`?s:null,resetZoom:g}}function V(e,t,n){let r=e=>{n({type:`key`,code:e,down:!0}),n({type:`key`,code:e,down:!1})};switch(e){case`insertText`:return t&&n({type:`text`,text:t}),!0;case`insertLineBreak`:case`insertParagraph`:return r(`Enter`),!0;case`deleteContentBackward`:return r(`Backspace`),!0;case`deleteContentForward`:return r(`Delete`),!0;default:return!1}}function pe(e,t,n){let r=(0,A.useRef)(null);return(0,A.useEffect)(()=>{let i=r.current;if(!i||!t)return;let a=()=>e({type:`releaseAll`}),o=e=>e.code!==``&&e.key!==`Unidentified`,s=t=>{o(t)&&(t.preventDefault(),e({type:`key`,code:t.code,down:!0}))},c=t=>{o(t)&&(t.preventDefault(),e({type:`key`,code:t.code,down:!1}))},l=t=>{V(t.inputType,t.data,e)&&t.preventDefault()},u=t=>{t.data&&e({type:`text`,text:t.data}),i.value=``},d=e=>{let t=e.clipboardData?.getData(`text/plain`);!t||!n||(e.preventDefault(),n(t))},f=()=>a(),p=()=>{document.hidden&&a()};return i.addEventListener(`keydown`,s),i.addEventListener(`keyup`,c),i.addEventListener(`beforeinput`,l),i.addEventListener(`compositionend`,u),i.addEventListener(`paste`,d),i.addEventListener(`blur`,f),document.addEventListener(`visibilitychange`,p),()=>{i.removeEventListener(`keydown`,s),i.removeEventListener(`keyup`,c),i.removeEventListener(`beforeinput`,l),i.removeEventListener(`compositionend`,u),i.removeEventListener(`paste`,d),i.removeEventListener(`blur`,f),document.removeEventListener(`visibilitychange`,p),a()}},[t,e,n]),{inputRef:r,show:(0,A.useCallback)(()=>r.current?.focus(),[])}}var H=n();function U({onClick:e,label:t,active:n,children:r}){return(0,H.jsxs)(`button`,{type:`button`,onClick:e,"aria-label":t,className:C(`flex min-h-11 min-w-11 flex-1 flex-col items-center justify-center gap-0.5 rounded-lg py-1.5 text-[10px]`,`text-white/80 active:bg-white/10 transition-colors`,n&&`bg-white/15 text-white`),children:[r,(0,H.jsx)(`span`,{children:t})]})}function me({displayLabel:e,onNextDisplay:t,qualityLabel:n,onNextQuality:r,mode:i,onToggleMode:o,onOpenKeyboard:l,onResetZoom:u,settingsOpen:m,onToggleSettings:h,onClose:_}){return(0,H.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-1 border-t border-white/10 bg-black/90 px-2 pb-[max(0.375rem,env(safe-area-inset-bottom))] pt-1.5`,"data-testid":`remote-desktop-mobile-toolbar`,children:[(0,H.jsx)(U,{onClick:o,label:i===`mouse`?`Mouse`:`Touch`,active:!0,children:i===`mouse`?(0,H.jsx)(s,{className:`size-5`}):(0,H.jsx)(c,{className:`size-5`})}),(0,H.jsx)(U,{onClick:l,label:`Keyboard`,children:(0,H.jsx)(g,{className:`size-5`})}),(0,H.jsx)(U,{onClick:u,label:`Reset zoom`,children:(0,H.jsx)(f,{className:`size-5`})}),e!==null&&(0,H.jsx)(U,{onClick:t,label:e.length>10?`${e.slice(0,9)}…`:e,children:(0,H.jsx)(a,{className:`size-5`})}),(0,H.jsx)(U,{onClick:r,label:n,children:(0,H.jsx)(d,{className:`size-5`})}),(0,H.jsx)(U,{onClick:h,label:`More`,active:m,children:(0,H.jsx)(v,{className:`size-5`})}),(0,H.jsx)(U,{onClick:_,label:`Close`,children:(0,H.jsx)(p,{className:`size-5`})})]})}function W(e){return(e.includes(`ControlLeft`)||e.includes(`MetaLeft`))&&(e.includes(`KeyC`)||e.includes(`KeyX`))}var G=[{label:`Ctrl`,code:`ControlLeft`},{label:`Alt`,code:`AltLeft`},{label:`Shift`,code:`ShiftLeft`},{label:`Win`,code:`MetaLeft`}],K=[{label:`Esc`,code:`Escape`},{label:`Tab`,code:`Tab`},{label:`←`,code:`ArrowLeft`},{label:`↑`,code:`ArrowUp`},{label:`↓`,code:`ArrowDown`},{label:`→`,code:`ArrowRight`}],q=[{label:`Ctrl+C`,codes:[`ControlLeft`,`KeyC`]},{label:`Ctrl+V`,codes:[`ControlLeft`,`KeyV`]},{label:`Ctrl+Z`,codes:[`ControlLeft`,`KeyZ`]},{label:`Ctrl+A`,codes:[`ControlLeft`,`KeyA`]},{label:`Alt+Tab`,codes:[`AltLeft`,`Tab`]},{label:`Ctrl+Alt+Del`,codes:[`ControlLeft`,`AltLeft`,`Delete`]}];function J({onClick:e,active:t,className:n,children:r}){return(0,H.jsx)(`button`,{type:`button`,onClick:e,className:C(`min-h-11 min-w-11 shrink-0 whitespace-nowrap rounded-md px-2.5 text-xs font-medium text-white/80`,`active:bg-white/15 transition-colors`,t&&`bg-primary text-primary-foreground`,n),children:r})}function he({sendMessage:e,onCopyCombo:t}){let[n,r]=(0,A.useState)(new Set),i=(0,A.useRef)(n);i.current=n,(0,A.useEffect)(()=>()=>{i.current.forEach(t=>e({type:`key`,code:t,down:!1}))},[e]);let a=(0,A.useCallback)(t=>{r(n=>{let r=n.has(t);e({type:`key`,code:t,down:!r});let i=new Set(n);return r?i.delete(t):i.add(t),i})},[e]),o=(0,A.useCallback)(t=>{e({type:`key`,code:t,down:!0}),e({type:`key`,code:t,down:!1})},[e]),s=(0,A.useCallback)(n=>{n.forEach(t=>e({type:`key`,code:t,down:!0})),[...n].reverse().forEach(t=>e({type:`key`,code:t,down:!1})),W(n)&&t?.()},[e,t]);return(0,H.jsxs)(`div`,{className:`flex shrink-0 gap-1 overflow-x-auto border-t border-white/10 bg-black/90 px-2 py-1.5`,"data-testid":`remote-desktop-mobile-key-bar`,children:[G.map(e=>(0,H.jsx)(J,{onClick:()=>a(e.code),active:n.has(e.code),children:e.label},e.code)),(0,H.jsx)(`div`,{className:`mx-0.5 w-px shrink-0 bg-white/10`}),K.map(e=>(0,H.jsx)(J,{onClick:()=>o(e.code),children:e.label},e.code)),(0,H.jsx)(`div`,{className:`mx-0.5 w-px shrink-0 bg-white/10`}),q.map(e=>(0,H.jsx)(J,{onClick:()=>s(e.codes),children:e.label},e.label))]})}function Y({icon:e,label:t,hint:n,checked:r,onToggle:i,testId:a,disabled:o}){return(0,H.jsxs)(`button`,{type:`button`,role:`switch`,"aria-checked":r,disabled:o,onClick:i,"data-testid":a,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-white/80 active:bg-white/10 disabled:opacity-50`,children:[(0,H.jsx)(`span`,{className:`shrink-0 opacity-80`,children:e}),(0,H.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`span`,{className:`block truncate text-xs`,children:t}),n&&(0,H.jsx)(`span`,{className:`block truncate text-[10px] text-white/45`,children:n})]}),(0,H.jsx)(`span`,{className:C(`relative h-5 w-9 shrink-0 rounded-full transition-colors`,r?`bg-primary`:`bg-white/20`),children:(0,H.jsx)(`span`,{className:C(`absolute top-0.5 size-4 rounded-full bg-white transition-all`,r?`left-[1.125rem]`:`left-0.5`)})})]})}function ge({statsVisible:e,onToggleStats:t,showCursor:n,onSetShowCursor:a,clipboardEnabled:c,onSetClipboardEnabled:u,audioOn:d,audioReason:f,onSetAudioOn:p,privacyOn:g,privacyReason:v,onSetPrivacyOn:y,hostModes:b,hostModeId:x,hostOriginalModeId:S,onSetHostMode:w,canResizeHost:ee,resolutionError:T,recording:E,recordingSupported:ne,onToggleRecording:re,onScreenshot:ae}){let D=(0,A.useMemo)(()=>oe(b),[b]),O=(0,A.useMemo)(()=>ie(),[]),k=(0,A.useMemo)(()=>te(b,O,x),[b,O,x]);return(0,H.jsxs)(`div`,{className:`mx-2 mb-1 space-y-0.5 rounded-xl border border-white/10 bg-black/90 p-1`,"data-testid":`remote-desktop-mobile-settings`,children:[(0,H.jsx)(Y,{icon:(0,H.jsx)(r,{className:`size-4`}),label:`Quality monitor`,checked:e,onToggle:t,testId:`remote-desktop-mobile-stats-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(s,{className:`size-4`}),label:`Show remote cursor`,hint:`Restarts the stream`,checked:n,onToggle:()=>a(!n),testId:`remote-desktop-mobile-cursor-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(l,{className:`size-4`}),label:`Sync clipboard`,hint:`Off: Ctrl+V pastes the host's own clipboard`,checked:c,onToggle:()=>u(!c),testId:`remote-desktop-mobile-clipboard-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(h,{className:`size-4`}),label:`Play host audio`,hint:f??void 0,checked:d,disabled:f!==null,onToggle:()=>p(!d),testId:`remote-desktop-mobile-audio-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(_,{className:`size-4`}),label:`Privacy mode`,hint:v??`Blocks the host's own keyboard and mouse`,checked:g,disabled:v!==null&&!g,onToggle:()=>y(!g),testId:`remote-desktop-mobile-privacy-toggle`}),ee&&D.length>1&&(0,H.jsxs)(`div`,{className:`px-3 pt-1`,children:[(0,H.jsx)(`div`,{className:`pb-1.5 text-[10px] uppercase tracking-wide text-white/40`,children:`Resolution`}),(0,H.jsxs)(`div`,{className:`flex max-h-28 flex-wrap gap-1.5 overflow-y-auto`,children:[S&&S!==x&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>w(S),"data-testid":`remote-desktop-mobile-resolution-original`,className:`min-h-9 rounded-md bg-white/10 px-2.5 py-1 text-[11px] text-white/70 active:bg-white/20`,children:`Original`}),k&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>w(k.id),"data-testid":`remote-desktop-mobile-resolution-fit-local`,className:`min-h-9 rounded-md bg-white/10 px-2.5 py-1 text-[11px] text-white/70 active:bg-white/20`,children:`Fit local`}),D.map(e=>{let t=(x??D.find(e=>e.current)?.id)===e.id;return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>w(e.id),"data-testid":`remote-desktop-mobile-resolution-${e.width}x${e.height}`,className:C(`min-h-9 rounded-md px-2.5 py-1 text-[11px] tabular-nums`,t?`bg-white/25 text-white`:`bg-white/10 text-white/70 active:bg-white/20`),children:[e.width,`×`,e.height]},e.id)})]}),T&&(0,H.jsx)(`div`,{className:`pt-1.5 text-[10px] leading-tight text-red-400`,children:T})]}),(0,H.jsxs)(`button`,{type:`button`,onClick:ae,"data-testid":`remote-desktop-mobile-screenshot`,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-xs text-white/80 active:bg-white/10`,children:[(0,H.jsx)(m,{className:`size-4 opacity-80`}),` Save screenshot`]}),ne&&(0,H.jsx)(`button`,{type:`button`,onClick:re,"data-testid":`remote-desktop-mobile-record`,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-xs text-white/80 active:bg-white/10`,children:E?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(o,{className:`size-4 text-red-500`}),` Stop recording`]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(i,{className:`size-4 opacity-80`}),` Start recording`]})})]})}function X({onClose:e}){let t=(0,A.useRef)(null),n=(0,A.useRef)(null),[r,i]=(0,A.useState)(`mouse`),[a,o]=(0,A.useState)(!1),[s,c]=(0,A.useState)(!1),l=re(),{connState:d,errorMessage:f,decoderStatus:p,decoderErrorMessage:m,sendMessage:h,reconnect:g,getTotalBytes:_,getFrameCount:v,quality:C,setQuality:te,showCursor:ie,setShowCursor:oe,audioOn:O,setAudioOn:se,getAudioTracks:ce,privacyOn:j,privacyError:M,setPrivacyOn:N,hostModeId:P,hostOriginalModeId:le,resolutionError:ue,setHostMode:F,pendingHostClipboard:I,clearHostClipboard:de,sendClipboard:L,requestHostClipboard:R}=E(n,{displayId:l.displayId}),z=S(e=>e.remoteDesktopStatsVisible),B=S(e=>e.toggleRemoteDesktopStatsVisible),V=S(e=>e.remoteDesktopClipboardSync),U=S(e=>e.setRemoteDesktopClipboardSync),W=S(e=>e.remoteDesktopQuality),G=d===`streaming`,{transform:K,virtualCursor:q,resetZoom:J}=fe({containerRef:t,canvasRef:n,mode:r,sendMessage:h,enabled:G}),[Y,X]=(0,A.useState)(!1),_e=(0,A.useCallback)(e=>{X(!0),L(e,!0)},[L]),{caps:Z}=ee(!1),Q=ne(n,ce),{inputRef:ve,show:ye}=pe(h,G,V?_e:void 0),$=w(!0)?.keyboardInset??0,be=(0,A.useCallback)(()=>i(e=>e===`mouse`?`touch`:`mouse`),[]),xe=(0,A.useCallback)(()=>{ye(),o(!0)},[ye]),Se=p===`unsupported`?m:d===`error`?f:d===`closed`?`Disconnected`:d===`connecting`?`Connecting…`:null,Ce={transform:`translate(${K.panX}px, ${K.panY}px) scale(${K.scale})`},we=`${(q?.xFrac??.5)*100}%`,Te=`${(q?.yFrac??.5)*100}%`;if(q&&t.current&&n.current?.width&&n.current.height){let e=t.current.getBoundingClientRect(),r=T({left:0,top:0,width:e.width,height:e.height},n.current.width,n.current.height);we=`${r.left+q.xFrac*r.width}px`,Te=`${r.top+q.yFrac*r.height}px`}return(0,H.jsxs)(`div`,{className:`relative h-full w-full bg-black`,"data-testid":`remote-desktop-mobile-view`,"data-conn-state":d,children:[(0,H.jsxs)(`div`,{ref:t,className:`absolute inset-x-0 top-0 flex items-center justify-center overflow-hidden`,style:{touchAction:`none`,bottom:$},"data-testid":`remote-desktop-mobile-stage-container`,children:[(0,H.jsxs)(`div`,{className:`relative flex h-full w-full items-center justify-center`,style:Ce,children:[(0,H.jsx)(`canvas`,{ref:n,"data-testid":`remote-desktop-canvas`,className:`block h-full w-full min-h-0 min-w-0 object-contain outline-none`}),r===`mouse`&&q&&G&&(0,H.jsx)(`div`,{className:`pointer-events-none absolute rounded-full border-2 border-white bg-primary shadow-[0_0_0_1px_rgba(0,0,0,0.6)]`,style:{left:we,top:Te,width:14,height:14,transform:`translate(-50%, -50%) scale(${1/K.scale})`},"data-testid":`remote-desktop-virtual-cursor`})]}),Se&&(0,H.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/70 text-sm text-white`,children:[(0,H.jsx)(y,{className:`size-6 opacity-70`}),(0,H.jsx)(`span`,{className:`max-w-sm px-4 text-center`,children:Se}),(d===`error`||d===`closed`)&&p!==`unsupported`&&(0,H.jsxs)(`button`,{onClick:g,className:`flex items-center gap-1.5 rounded-md bg-white/10 px-3 py-1.5 hover:bg-white/20`,children:[(0,H.jsx)(u,{className:`size-3.5`}),` Reconnect`]})]}),(0,H.jsx)(`input`,{ref:ve,type:`text`,autoComplete:`off`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,className:`absolute size-px opacity-0`,"aria-hidden":`true`,tabIndex:-1,onBlur:()=>o(!1),"data-testid":`remote-desktop-virtual-keyboard-input`})]}),(0,H.jsxs)(`div`,{className:`absolute inset-x-0 bottom-0`,style:$>0?{transform:`translateY(-${$}px)`}:void 0,"data-testid":`remote-desktop-mobile-bottom-bar`,children:[(0,H.jsx)(D,{pendingText:I,onDismiss:de,missingToolAction:Y&&Z&&!Z.clipboard.available?Z.clipboard.action:null,onDismissMissingTool:()=>X(!1),positionClassName:`mx-2 mb-1 max-w-[calc(100%-1rem)]`}),s&&(0,H.jsx)(ge,{statsVisible:z,onToggleStats:B,showCursor:ie,onSetShowCursor:oe,clipboardEnabled:V,onSetClipboardEnabled:U,audioOn:O,audioReason:Z&&!Z.audio.available?Z.audio.reason:null,onSetAudioOn:se,privacyOn:j,privacyReason:M??(Z&&!Z.privacy.available?Z.privacy.reason:null),hostModes:Z?.resolutions?.modes??[],hostModeId:P,hostOriginalModeId:le,onSetHostMode:F,canResizeHost:Z?.inputReady??!1,resolutionError:ue,onSetPrivacyOn:N,recording:Q.recording,recordingSupported:Q.supported,onToggleRecording:Q.toggle,onScreenshot:()=>void k(n.current)}),a&&(0,H.jsx)(he,{sendMessage:h,onCopyCombo:V?R:void 0}),(0,H.jsx)(me,{displayLabel:l.displays.length>1?l.current?.label??null:null,onNextDisplay:l.next,qualityLabel:b(W),onNextQuality:()=>te(x(W)),mode:r,onToggleMode:be,onOpenKeyboard:xe,onResetZoom:J,settingsOpen:s,onToggleSettings:()=>c(e=>!e),onClose:e})]}),(0,H.jsx)(ae,{canvasRef:n,getFrameCount:v,getTotalBytes:_,positionClassName:`left-1 top-[calc(env(safe-area-inset-top,0px)+2.75rem)]`})]})}export{X as default};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ht as r,K as i,Ln as a,Mr as o,Un as s,Yt as c,Z as l,_r as u,ai as d,gi as f,li as p,nn as m,ri as h,un as g,vt as _,wr as v,zn as y}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import{A as b,O as x,t as S}from"./settings-store-CMpVMq3Y.js";import{n as C}from"./utils-D3xTlJyU.js";import"./window-store-D6EgLSfT.js";import"./panel-store-H7e9XHZF.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{t as w}from"./use-visual-viewport-B_GFo6k2.js";import"./ws-auth-k7DWnL9T.js";import{mn as ee}from"./index-Vd9Xr54k.js";import"./use-h264-canvas-decoder-BpBeyZ1K.js";import"./run-in-terminal-DAdjH24K.js";import{a as te,d as T,f as E,i as ne,n as re,o as ie,r as ae,s as oe,t as D,u as O}from"./remote-desktop-clipboard-notice-Dwn-iV4g.js";import{a as k}from"./remote-desktop-recording-BcDx5c_k.js";var A=e(t(),1);function se(e,t,n=10,r=300){let i=Math.hypot(t.x-e.x,t.y-e.y),a=t.t-e.t;return i<=n&&a<=r}function ce(e,t,n=15){return Math.abs(t-e)>n?`pinch`:`scroll`}function j(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function M(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function N(e,t,n){return Math.min(Math.max(e,t),n)}function P(e,t,n){return[{type:`pointer`,xFrac:e,yFrac:t,button:n,down:!0},{type:`pointer`,xFrac:e,yFrac:t,button:n,down:!1}]}function le(e,t,n){return{start:{x:e,y:t,t:performance.now()},last:{x:e,y:t},moved:!1,rect:n}}function ue(e,t,n,r,i,a){let o=Math.hypot(t-e.start.x,n-e.start.y);if(r===`touch`){if(!e.moved&&o>10){e.moved=!0;let r=O(e.start.x,e.start.y,e.rect,i);return e.last={x:t,y:n},{message:{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:`left`,down:!0}}}if(e.last={x:t,y:n},!e.moved)return{};let r=O(t,n,e.rect,i);return{message:{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:null,down:null}}}let s=(t-e.last.x)/i.scale,c=(n-e.last.y)/i.scale;return o>10&&(e.moved=!0),e.last={x:t,y:n},{cursor:{xFrac:N(a.xFrac+s/e.rect.width,0,1),yFrac:N(a.yFrac+c/e.rect.height,0,1)},sendCursorMove:!0}}function F(e,t,n,r,i,a){let o={x:t,y:n,t:performance.now()},s=se(e.start,o,10,300);if(r===`touch`){let r=O(t,n,e.rect,i);return!e.moved&&s?P(r.xFrac,r.yFrac,`left`):e.moved?[{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:`left`,down:!1}]:[]}return!e.moved&&s?P(a.xFrac,a.yFrac,`left`):[]}function I(e,t,n){let r=M(e,t);return{startDistance:j(e,t),startMid:r,lastMid:r,startScale:n,startTime:performance.now(),gesture:null}}function de(e,t,n,r){let i=j(t,n),a=M(t,n);if(e.gesture===null){let t=Math.abs(i-e.startDistance),n=j(e.startMid,a);if(t>15)e.gesture=ce(e.startDistance,i,15);else if(n>15)e.gesture=`scroll`;else return e.lastMid=a,{}}let o;if(e.gesture===`pinch`)o={transform:{scale:N(e.startScale*(i/e.startDistance),1,4),panX:r.panX,panY:r.panY}};else if(r.scale>1.01){let t=a.x-e.lastMid.x,n=a.y-e.lastMid.y;o={transform:{scale:r.scale,panX:r.panX+t,panY:r.panY+n}}}else o={wheelDeltaPx:a.y-e.lastMid.y};return e.lastMid=a,o}function L(e,t,n){if(e.gesture===null&&performance.now()-e.startTime<=300){let r=O(e.lastMid.x,e.lastMid.y,t,n);return P(r.xFrac,r.yFrac,`right`)}return[]}var R={scale:1,panX:0,panY:0},z=40,B=120;function fe({containerRef:e,canvasRef:t,mode:n,sendMessage:r,enabled:i}){let[a,o]=(0,A.useState)(R),[s,c]=(0,A.useState)({xFrac:.5,yFrac:.5}),l=(0,A.useRef)(a),u=(0,A.useRef)(s),d=(0,A.useRef)(n);d.current=n;let f=(0,A.useRef)({transform:null,cursor:null,sendCursorMove:!1,wheelPx:0}),p=(0,A.useRef)(0),m=(0,A.useCallback)(()=>{p.current=0;let e=f.current;e.transform&&=(l.current=e.transform,o(e.transform),null),e.cursor&&(u.current=e.cursor,c(e.cursor),e.sendCursorMove&&r({type:`pointer`,xFrac:e.cursor.xFrac,yFrac:e.cursor.yFrac,button:null,down:null}),e.cursor=null,e.sendCursorMove=!1),e.wheelPx!==0&&(r({type:`wheel`,dy:-(e.wheelPx/z)*B}),e.wheelPx=0)},[r]),h=(0,A.useCallback)(()=>{p.current||=requestAnimationFrame(m)},[m]),g=(0,A.useCallback)(()=>{l.current=R,o(R)},[]);return(0,A.useEffect)(()=>{let n=e.current;if(!n||!i)return;let a=null,o=null,s=e=>e.forEach(r),c=()=>{let e=n.getBoundingClientRect(),r=t.current;return!r||!r.width||!r.height?e:T(e,r.width,r.height)},m=e=>{e.preventDefault(),e.stopPropagation();let t=c();if(e.touches.length===1){o=null;let n=e.touches[0];a=le(n.clientX,n.clientY,t)}else if(e.touches.length===2){a=null;let[t,n]=[e.touches[0],e.touches[1]];o=I({x:t.clientX,y:t.clientY},{x:n.clientX,y:n.clientY},l.current.scale)}else a=null,o=null},g=e=>{if(e.preventDefault(),e.stopPropagation(),a&&e.touches.length===1){let t=e.touches[0],n=ue(a,t.clientX,t.clientY,d.current,l.current,u.current);n.message&&r(n.message),n.cursor&&(u.current=n.cursor,f.current.cursor=n.cursor,f.current.sendCursorMove=!!n.sendCursorMove,h());return}if(o&&e.touches.length===2){let[t,n]=[e.touches[0],e.touches[1]],r=de(o,{x:t.clientX,y:t.clientY},{x:n.clientX,y:n.clientY},l.current);r.transform&&(l.current=r.transform,f.current.transform=r.transform,h()),r.wheelDeltaPx&&(f.current.wheelPx+=r.wheelDeltaPx,h())}},_=e=>{e.preventDefault(),e.stopPropagation();let t=e.changedTouches[0];if(a){let e=t?t.clientX:a.last.x,n=t?t.clientY:a.last.y;s(F(a,e,n,d.current,l.current,u.current)),a=null}o&&=(s(L(o,c(),l.current)),null)},v=e=>{e.stopPropagation(),a?.moved&&d.current===`touch`&&s(F(a,a.last.x,a.last.y,`touch`,l.current,u.current)),a=null,o=null};return n.addEventListener(`touchstart`,m,{passive:!1}),n.addEventListener(`touchmove`,g,{passive:!1}),n.addEventListener(`touchend`,_,{passive:!1}),n.addEventListener(`touchcancel`,v,{passive:!1}),()=>{p.current&&cancelAnimationFrame(p.current),n.removeEventListener(`touchstart`,m),n.removeEventListener(`touchmove`,g),n.removeEventListener(`touchend`,_),n.removeEventListener(`touchcancel`,v)}},[e,t,i,r,h]),{transform:a,virtualCursor:n===`mouse`?s:null,resetZoom:g}}function V(e,t,n){let r=e=>{n({type:`key`,code:e,down:!0}),n({type:`key`,code:e,down:!1})};switch(e){case`insertText`:return t&&n({type:`text`,text:t}),!0;case`insertLineBreak`:case`insertParagraph`:return r(`Enter`),!0;case`deleteContentBackward`:return r(`Backspace`),!0;case`deleteContentForward`:return r(`Delete`),!0;default:return!1}}function pe(e,t,n){let r=(0,A.useRef)(null);return(0,A.useEffect)(()=>{let i=r.current;if(!i||!t)return;let a=()=>e({type:`releaseAll`}),o=e=>e.code!==``&&e.key!==`Unidentified`,s=t=>{o(t)&&(t.preventDefault(),e({type:`key`,code:t.code,down:!0}))},c=t=>{o(t)&&(t.preventDefault(),e({type:`key`,code:t.code,down:!1}))},l=t=>{V(t.inputType,t.data,e)&&t.preventDefault()},u=t=>{t.data&&e({type:`text`,text:t.data}),i.value=``},d=e=>{let t=e.clipboardData?.getData(`text/plain`);!t||!n||(e.preventDefault(),n(t))},f=()=>a(),p=()=>{document.hidden&&a()};return i.addEventListener(`keydown`,s),i.addEventListener(`keyup`,c),i.addEventListener(`beforeinput`,l),i.addEventListener(`compositionend`,u),i.addEventListener(`paste`,d),i.addEventListener(`blur`,f),document.addEventListener(`visibilitychange`,p),()=>{i.removeEventListener(`keydown`,s),i.removeEventListener(`keyup`,c),i.removeEventListener(`beforeinput`,l),i.removeEventListener(`compositionend`,u),i.removeEventListener(`paste`,d),i.removeEventListener(`blur`,f),document.removeEventListener(`visibilitychange`,p),a()}},[t,e,n]),{inputRef:r,show:(0,A.useCallback)(()=>r.current?.focus(),[])}}var H=n();function U({onClick:e,label:t,active:n,children:r}){return(0,H.jsxs)(`button`,{type:`button`,onClick:e,"aria-label":t,className:C(`flex min-h-11 min-w-11 flex-1 flex-col items-center justify-center gap-0.5 rounded-lg py-1.5 text-[10px]`,`text-white/80 active:bg-white/10 transition-colors`,n&&`bg-white/15 text-white`),children:[r,(0,H.jsx)(`span`,{children:t})]})}function me({displayLabel:e,onNextDisplay:t,qualityLabel:n,onNextQuality:r,mode:i,onToggleMode:o,onOpenKeyboard:l,onResetZoom:u,settingsOpen:m,onToggleSettings:h,onClose:_}){return(0,H.jsxs)(`div`,{className:`flex shrink-0 items-stretch gap-1 border-t border-white/10 bg-black/90 px-2 pb-[max(0.375rem,env(safe-area-inset-bottom))] pt-1.5`,"data-testid":`remote-desktop-mobile-toolbar`,children:[(0,H.jsx)(U,{onClick:o,label:i===`mouse`?`Mouse`:`Touch`,active:!0,children:i===`mouse`?(0,H.jsx)(s,{className:`size-5`}):(0,H.jsx)(c,{className:`size-5`})}),(0,H.jsx)(U,{onClick:l,label:`Keyboard`,children:(0,H.jsx)(g,{className:`size-5`})}),(0,H.jsx)(U,{onClick:u,label:`Reset zoom`,children:(0,H.jsx)(f,{className:`size-5`})}),e!==null&&(0,H.jsx)(U,{onClick:t,label:e.length>10?`${e.slice(0,9)}…`:e,children:(0,H.jsx)(a,{className:`size-5`})}),(0,H.jsx)(U,{onClick:r,label:n,children:(0,H.jsx)(d,{className:`size-5`})}),(0,H.jsx)(U,{onClick:h,label:`More`,active:m,children:(0,H.jsx)(v,{className:`size-5`})}),(0,H.jsx)(U,{onClick:_,label:`Close`,children:(0,H.jsx)(p,{className:`size-5`})})]})}function W(e){return(e.includes(`ControlLeft`)||e.includes(`MetaLeft`))&&(e.includes(`KeyC`)||e.includes(`KeyX`))}var G=[{label:`Ctrl`,code:`ControlLeft`},{label:`Alt`,code:`AltLeft`},{label:`Shift`,code:`ShiftLeft`},{label:`Win`,code:`MetaLeft`}],K=[{label:`Esc`,code:`Escape`},{label:`Tab`,code:`Tab`},{label:`←`,code:`ArrowLeft`},{label:`↑`,code:`ArrowUp`},{label:`↓`,code:`ArrowDown`},{label:`→`,code:`ArrowRight`}],q=[{label:`Ctrl+C`,codes:[`ControlLeft`,`KeyC`]},{label:`Ctrl+V`,codes:[`ControlLeft`,`KeyV`]},{label:`Ctrl+Z`,codes:[`ControlLeft`,`KeyZ`]},{label:`Ctrl+A`,codes:[`ControlLeft`,`KeyA`]},{label:`Alt+Tab`,codes:[`AltLeft`,`Tab`]},{label:`Ctrl+Alt+Del`,codes:[`ControlLeft`,`AltLeft`,`Delete`]}];function J({onClick:e,active:t,className:n,children:r}){return(0,H.jsx)(`button`,{type:`button`,onClick:e,className:C(`min-h-11 min-w-11 shrink-0 whitespace-nowrap rounded-md px-2.5 text-xs font-medium text-white/80`,`active:bg-white/15 transition-colors`,t&&`bg-primary text-primary-foreground`,n),children:r})}function he({sendMessage:e,onCopyCombo:t}){let[n,r]=(0,A.useState)(new Set),i=(0,A.useRef)(n);i.current=n,(0,A.useEffect)(()=>()=>{i.current.forEach(t=>e({type:`key`,code:t,down:!1}))},[e]);let a=(0,A.useCallback)(t=>{r(n=>{let r=n.has(t);e({type:`key`,code:t,down:!r});let i=new Set(n);return r?i.delete(t):i.add(t),i})},[e]),o=(0,A.useCallback)(t=>{e({type:`key`,code:t,down:!0}),e({type:`key`,code:t,down:!1})},[e]),s=(0,A.useCallback)(n=>{n.forEach(t=>e({type:`key`,code:t,down:!0})),[...n].reverse().forEach(t=>e({type:`key`,code:t,down:!1})),W(n)&&t?.()},[e,t]);return(0,H.jsxs)(`div`,{className:`flex shrink-0 gap-1 overflow-x-auto border-t border-white/10 bg-black/90 px-2 py-1.5`,"data-testid":`remote-desktop-mobile-key-bar`,children:[G.map(e=>(0,H.jsx)(J,{onClick:()=>a(e.code),active:n.has(e.code),children:e.label},e.code)),(0,H.jsx)(`div`,{className:`mx-0.5 w-px shrink-0 bg-white/10`}),K.map(e=>(0,H.jsx)(J,{onClick:()=>o(e.code),children:e.label},e.code)),(0,H.jsx)(`div`,{className:`mx-0.5 w-px shrink-0 bg-white/10`}),q.map(e=>(0,H.jsx)(J,{onClick:()=>s(e.codes),children:e.label},e.label))]})}function Y({icon:e,label:t,hint:n,checked:r,onToggle:i,testId:a,disabled:o}){return(0,H.jsxs)(`button`,{type:`button`,role:`switch`,"aria-checked":r,disabled:o,onClick:i,"data-testid":a,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-white/80 active:bg-white/10 disabled:opacity-50`,children:[(0,H.jsx)(`span`,{className:`shrink-0 opacity-80`,children:e}),(0,H.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,H.jsx)(`span`,{className:`block truncate text-xs`,children:t}),n&&(0,H.jsx)(`span`,{className:`block truncate text-[10px] text-white/45`,children:n})]}),(0,H.jsx)(`span`,{className:C(`relative h-5 w-9 shrink-0 rounded-full transition-colors`,r?`bg-primary`:`bg-white/20`),children:(0,H.jsx)(`span`,{className:C(`absolute top-0.5 size-4 rounded-full bg-white transition-all`,r?`left-[1.125rem]`:`left-0.5`)})})]})}function ge({statsVisible:e,onToggleStats:t,showCursor:n,onSetShowCursor:a,clipboardEnabled:c,onSetClipboardEnabled:u,audioOn:d,audioReason:f,onSetAudioOn:p,privacyOn:g,privacyReason:v,onSetPrivacyOn:y,hostModes:b,hostModeId:x,hostOriginalModeId:S,onSetHostMode:w,canResizeHost:ee,resolutionError:T,recording:E,recordingSupported:ne,onToggleRecording:re,onScreenshot:ae}){let D=(0,A.useMemo)(()=>oe(b),[b]),O=(0,A.useMemo)(()=>ie(),[]),k=(0,A.useMemo)(()=>te(b,O,x),[b,O,x]);return(0,H.jsxs)(`div`,{className:`mx-2 mb-1 space-y-0.5 rounded-xl border border-white/10 bg-black/90 p-1`,"data-testid":`remote-desktop-mobile-settings`,children:[(0,H.jsx)(Y,{icon:(0,H.jsx)(r,{className:`size-4`}),label:`Quality monitor`,checked:e,onToggle:t,testId:`remote-desktop-mobile-stats-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(s,{className:`size-4`}),label:`Show remote cursor`,hint:`Restarts the stream`,checked:n,onToggle:()=>a(!n),testId:`remote-desktop-mobile-cursor-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(l,{className:`size-4`}),label:`Sync clipboard`,hint:`Off: Ctrl+V pastes the host's own clipboard`,checked:c,onToggle:()=>u(!c),testId:`remote-desktop-mobile-clipboard-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(h,{className:`size-4`}),label:`Play host audio`,hint:f??void 0,checked:d,disabled:f!==null,onToggle:()=>p(!d),testId:`remote-desktop-mobile-audio-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(_,{className:`size-4`}),label:`Privacy mode`,hint:v??`Blocks the host's own keyboard and mouse`,checked:g,disabled:v!==null&&!g,onToggle:()=>y(!g),testId:`remote-desktop-mobile-privacy-toggle`}),ee&&D.length>1&&(0,H.jsxs)(`div`,{className:`px-3 pt-1`,children:[(0,H.jsx)(`div`,{className:`pb-1.5 text-[10px] uppercase tracking-wide text-white/40`,children:`Resolution`}),(0,H.jsxs)(`div`,{className:`flex max-h-28 flex-wrap gap-1.5 overflow-y-auto`,children:[S&&S!==x&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>w(S),"data-testid":`remote-desktop-mobile-resolution-original`,className:`min-h-9 rounded-md bg-white/10 px-2.5 py-1 text-[11px] text-white/70 active:bg-white/20`,children:`Original`}),k&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>w(k.id),"data-testid":`remote-desktop-mobile-resolution-fit-local`,className:`min-h-9 rounded-md bg-white/10 px-2.5 py-1 text-[11px] text-white/70 active:bg-white/20`,children:`Fit local`}),D.map(e=>{let t=(x??D.find(e=>e.current)?.id)===e.id;return(0,H.jsxs)(`button`,{type:`button`,onClick:()=>w(e.id),"data-testid":`remote-desktop-mobile-resolution-${e.width}x${e.height}`,className:C(`min-h-9 rounded-md px-2.5 py-1 text-[11px] tabular-nums`,t?`bg-white/25 text-white`:`bg-white/10 text-white/70 active:bg-white/20`),children:[e.width,`×`,e.height]},e.id)})]}),T&&(0,H.jsx)(`div`,{className:`pt-1.5 text-[10px] leading-tight text-red-400`,children:T})]}),(0,H.jsxs)(`button`,{type:`button`,onClick:ae,"data-testid":`remote-desktop-mobile-screenshot`,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-xs text-white/80 active:bg-white/10`,children:[(0,H.jsx)(m,{className:`size-4 opacity-80`}),` Save screenshot`]}),ne&&(0,H.jsx)(`button`,{type:`button`,onClick:re,"data-testid":`remote-desktop-mobile-record`,className:`flex min-h-11 w-full items-center gap-3 rounded-lg px-3 py-2 text-left text-xs text-white/80 active:bg-white/10`,children:E?(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(o,{className:`size-4 text-red-500`}),` Stop recording`]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(i,{className:`size-4 opacity-80`}),` Start recording`]})})]})}function X({onClose:e}){let t=(0,A.useRef)(null),n=(0,A.useRef)(null),[r,i]=(0,A.useState)(`mouse`),[a,o]=(0,A.useState)(!1),[s,c]=(0,A.useState)(!1),l=re(),{connState:d,errorMessage:f,decoderStatus:p,decoderErrorMessage:m,sendMessage:h,reconnect:g,getTotalBytes:_,getFrameCount:v,quality:C,setQuality:te,showCursor:ie,setShowCursor:oe,audioOn:O,setAudioOn:se,getAudioTracks:ce,privacyOn:j,privacyError:M,setPrivacyOn:N,hostModeId:P,hostOriginalModeId:le,resolutionError:ue,setHostMode:F,pendingHostClipboard:I,clearHostClipboard:de,sendClipboard:L,requestHostClipboard:R}=E(n,{displayId:l.displayId}),z=S(e=>e.remoteDesktopStatsVisible),B=S(e=>e.toggleRemoteDesktopStatsVisible),V=S(e=>e.remoteDesktopClipboardSync),U=S(e=>e.setRemoteDesktopClipboardSync),W=S(e=>e.remoteDesktopQuality),G=d===`streaming`,{transform:K,virtualCursor:q,resetZoom:J}=fe({containerRef:t,canvasRef:n,mode:r,sendMessage:h,enabled:G}),[Y,X]=(0,A.useState)(!1),_e=(0,A.useCallback)(e=>{X(!0),L(e,!0)},[L]),{caps:Z}=ee(!1),Q=ne(n,ce),{inputRef:ve,show:ye}=pe(h,G,V?_e:void 0),$=w(!0)?.keyboardInset??0,be=(0,A.useCallback)(()=>i(e=>e===`mouse`?`touch`:`mouse`),[]),xe=(0,A.useCallback)(()=>{ye(),o(!0)},[ye]),Se=p===`unsupported`?m:d===`error`?f:d===`closed`?`Disconnected`:d===`connecting`?`Connecting…`:null,Ce={transform:`translate(${K.panX}px, ${K.panY}px) scale(${K.scale})`},we=`${(q?.xFrac??.5)*100}%`,Te=`${(q?.yFrac??.5)*100}%`;if(q&&t.current&&n.current?.width&&n.current.height){let e=t.current.getBoundingClientRect(),r=T({left:0,top:0,width:e.width,height:e.height},n.current.width,n.current.height);we=`${r.left+q.xFrac*r.width}px`,Te=`${r.top+q.yFrac*r.height}px`}return(0,H.jsxs)(`div`,{className:`relative h-full w-full bg-black`,"data-testid":`remote-desktop-mobile-view`,"data-conn-state":d,children:[(0,H.jsxs)(`div`,{ref:t,className:`absolute inset-x-0 top-0 flex items-center justify-center overflow-hidden`,style:{touchAction:`none`,bottom:$},"data-testid":`remote-desktop-mobile-stage-container`,children:[(0,H.jsxs)(`div`,{className:`relative flex h-full w-full items-center justify-center`,style:Ce,children:[(0,H.jsx)(`canvas`,{ref:n,"data-testid":`remote-desktop-canvas`,className:`block h-full w-full min-h-0 min-w-0 object-contain outline-none`}),r===`mouse`&&q&&G&&(0,H.jsx)(`div`,{className:`pointer-events-none absolute rounded-full border-2 border-white bg-primary shadow-[0_0_0_1px_rgba(0,0,0,0.6)]`,style:{left:we,top:Te,width:14,height:14,transform:`translate(-50%, -50%) scale(${1/K.scale})`},"data-testid":`remote-desktop-virtual-cursor`})]}),Se&&(0,H.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/70 text-sm text-white`,children:[(0,H.jsx)(y,{className:`size-6 opacity-70`}),(0,H.jsx)(`span`,{className:`max-w-sm px-4 text-center`,children:Se}),(d===`error`||d===`closed`)&&p!==`unsupported`&&(0,H.jsxs)(`button`,{onClick:g,className:`flex items-center gap-1.5 rounded-md bg-white/10 px-3 py-1.5 hover:bg-white/20`,children:[(0,H.jsx)(u,{className:`size-3.5`}),` Reconnect`]})]}),(0,H.jsx)(`input`,{ref:ve,type:`text`,autoComplete:`off`,autoCapitalize:`off`,autoCorrect:`off`,spellCheck:!1,className:`absolute size-px opacity-0`,"aria-hidden":`true`,tabIndex:-1,onBlur:()=>o(!1),"data-testid":`remote-desktop-virtual-keyboard-input`})]}),(0,H.jsxs)(`div`,{className:`absolute inset-x-0 bottom-0`,style:$>0?{transform:`translateY(-${$}px)`}:void 0,"data-testid":`remote-desktop-mobile-bottom-bar`,children:[(0,H.jsx)(D,{pendingText:I,onDismiss:de,missingToolAction:Y&&Z&&!Z.clipboard.available?Z.clipboard.action:null,onDismissMissingTool:()=>X(!1),positionClassName:`mx-2 mb-1 max-w-[calc(100%-1rem)]`}),s&&(0,H.jsx)(ge,{statsVisible:z,onToggleStats:B,showCursor:ie,onSetShowCursor:oe,clipboardEnabled:V,onSetClipboardEnabled:U,audioOn:O,audioReason:Z&&!Z.audio.available?Z.audio.reason:null,onSetAudioOn:se,privacyOn:j,privacyReason:M??(Z&&!Z.privacy.available?Z.privacy.reason:null),hostModes:Z?.resolutions?.modes??[],hostModeId:P,hostOriginalModeId:le,onSetHostMode:F,canResizeHost:Z?.inputReady??!1,resolutionError:ue,onSetPrivacyOn:N,recording:Q.recording,recordingSupported:Q.supported,onToggleRecording:Q.toggle,onScreenshot:()=>void k(n.current)}),a&&(0,H.jsx)(he,{sendMessage:h,onCopyCombo:V?R:void 0}),(0,H.jsx)(me,{displayLabel:l.displays.length>1?l.current?.label??null:null,onNextDisplay:l.next,qualityLabel:b(W),onNextQuality:()=>te(x(W)),mode:r,onToggleMode:be,onOpenKeyboard:xe,onResetZoom:J,settingsOpen:s,onToggleSettings:()=>c(e=>!e),onClose:e})]}),(0,H.jsx)(ae,{canvasRef:n,getFrameCount:v,getTotalBytes:_,positionClassName:`left-1 top-[calc(env(safe-area-inset-top,0px)+2.75rem)]`})]})}export{X as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Er as r,K as i,M as a,Rn as o,Ur as s,gt as c,xn as l}from"./icons-C1wDt09O.js";import{r as u}from"./api-client-BnYFnEfK.js";import{t as d}from"./settings-store-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Er as r,K as i,M as a,Rn as o,Ur as s,gt as c,xn as l}from"./icons-C1wDt09O.js";import{r as u}from"./api-client-BnYFnEfK.js";import{t as d}from"./settings-store-CMpVMq3Y.js";import{mn as f}from"./index-Vd9Xr54k.js";import{r as p}from"./run-in-terminal-DAdjH24K.js";var m=e(t(),1),h=n();function g({onCancel:e,children:t}){let n=d(e=>e.remoteDesktopWarningDismissed),i=d(e=>e.setRemoteDesktopWarningDismissed),[a,s]=(0,m.useState)(!1),[c,l]=(0,m.useState)(!1);if(n||a)return(0,h.jsx)(h.Fragment,{children:t});let u=()=>{c&&i(!0),s(!0)};return(0,h.jsx)(`div`,{className:`flex h-full w-full items-center justify-center overflow-y-auto bg-black p-4 text-white`,"data-testid":`remote-desktop-warning-gate`,children:(0,h.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col gap-4 rounded-xl border border-white/10 bg-white/5 p-5`,children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,h.jsx)(o,{className:`size-5 shrink-0 text-primary`}),(0,h.jsx)(`h2`,{className:`text-base font-semibold`,children:`Remote Desktop`}),(0,h.jsx)(`span`,{className:`ml-auto rounded-full bg-amber-500/20 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wide text-amber-300`,children:`Beta`})]}),(0,h.jsxs)(`ul`,{className:`flex flex-col gap-2 text-sm text-white/80`,children:[(0,h.jsxs)(`li`,{className:`flex gap-2`,children:[(0,h.jsx)(r,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,h.jsxs)(`span`,{children:[`This streams the host's `,(0,h.jsx)(`strong`,{children:`whole screen`}),` and lets you `,(0,h.jsx)(`strong`,{children:`move its mouse and type`}),` as if you were sitting at it. Anything you do here happens on the real desktop.`]})]}),(0,h.jsxs)(`li`,{className:`flex gap-2`,children:[(0,h.jsx)(r,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,h.jsx)(`span`,{children:`Anyone signed in to this PPM can do the same. Avoid opening it over a public share link you don't fully trust; a private network (Tailscale, LAN) is safer.`})]}),(0,h.jsxs)(`li`,{className:`flex gap-2`,children:[(0,h.jsx)(r,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,h.jsx)(`span`,{children:`Still beta: the host must be unlocked with an active session, UAC prompts stay hidden, and a person at the host will fight you for the cursor.`})]})]}),(0,h.jsxs)(`label`,{className:`flex min-h-11 cursor-pointer items-center gap-2 text-sm text-white/70`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:c,onChange:e=>l(e.target.checked),className:`size-4 accent-primary`,"data-testid":`remote-desktop-warning-dont-show`}),`Don't show this again`]}),(0,h.jsxs)(`div`,{className:`flex gap-2`,children:[(0,h.jsx)(`button`,{type:`button`,onClick:e,className:`min-h-11 flex-1 rounded-md bg-white/10 px-3 text-sm hover:bg-white/20`,"data-testid":`remote-desktop-warning-cancel`,children:`Cancel`}),(0,h.jsx)(`button`,{type:`button`,onClick:u,className:`min-h-11 flex-1 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90`,"data-testid":`remote-desktop-warning-continue`,children:`Continue`})]})]})})}function _({label:e}){let[t,n]=(0,m.useState)({state:`idle`}),r=(0,m.useRef)(0),[i,a]=(0,m.useState)(!1),[o,s]=(0,m.useState)(null);(0,m.useEffect)(()=>{let e=!1,t=!1,i=async()=>{if(t)return;t=!0;let i=r.current;try{let t=await u.get(`/api/remote-desktop/requirements/ffmpeg/install`);!e&&i===r.current&&(n(t),s(null))}catch(t){!e&&i===r.current&&s(t.message)}finally{t=!1}};i();let a=setInterval(i,2e3);return()=>{e=!0,clearInterval(a)}},[]);let c=async()=>{r.current++,a(!0),s(null);try{let e=await u.post(`/api/remote-desktop/requirements/ffmpeg/install`);r.current++,n(e)}catch(e){s(e.message)}finally{a(!1)}},d=i||t.state===`installing`;return(0,h.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,h.jsxs)(`button`,{type:`button`,disabled:d||t.state===`installed`,onClick:()=>void c(),className:`inline-flex min-h-11 items-center gap-1.5 rounded-md bg-white/10 px-3 text-sm hover:bg-white/20 disabled:opacity-50`,children:[d&&(0,h.jsx)(l,{className:`size-4 animate-spin`}),d?`Installing ffmpeg…`:t.state===`installed`?`Installed — checking…`:e]}),d&&(0,h.jsx)(`p`,{role:`status`,className:`text-xs text-white/70`,children:`Installing on the host. You can close this panel and return later.`}),(o||t.error)&&(0,h.jsx)(`p`,{role:`alert`,className:`text-sm text-red-300`,children:o||t.error})]})}function v({onCancel:e,children:t}){let[n,r]=(0,m.useState)(!1),{caps:i,failed:a,runHostAction:s}=f(!n);if(n||i?.videoReady&&i.inputReady)return(0,h.jsx)(h.Fragment,{children:t});let c=i?.requirements.filter(e=>!e.ok)??[],u=!!i?.videoReady&&!i.inputReady,d=t=>{p(t),e()};return(0,h.jsx)(`div`,{className:`flex h-full w-full items-center justify-center overflow-y-auto bg-black p-4 text-white`,"data-testid":`remote-desktop-readiness-gate`,children:(0,h.jsxs)(`div`,{className:`flex w-full max-w-sm flex-col gap-4 rounded-xl border border-white/10 bg-white/5 p-5`,children:[(0,h.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,h.jsx)(o,{className:`size-5 shrink-0 text-primary`}),(0,h.jsx)(`h2`,{className:`text-base font-semibold`,children:`This host needs a few things`})]}),!i&&!a&&(0,h.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-white/70`,children:[(0,h.jsx)(l,{className:`size-4 animate-spin`}),` Checking the host…`]}),a&&(0,h.jsx)(`p`,{className:`text-sm text-red-300`,children:`Could not reach the host's remote-desktop service.`}),(0,h.jsx)(`ul`,{className:`flex flex-col gap-3`,children:i?.requirements.map(e=>(0,h.jsx)(y,{req:e,onHostAction:s,onTerminal:d},e.id))}),c.length>0&&(0,h.jsx)(`p`,{className:`text-xs text-white/50`,children:`Re-checking every few seconds — this updates by itself once fixed.`}),(0,h.jsxs)(`div`,{className:`flex gap-2`,children:[(0,h.jsx)(`button`,{type:`button`,onClick:e,className:`min-h-11 flex-1 rounded-md bg-white/10 px-3 text-sm hover:bg-white/20`,children:`Cancel`}),(0,h.jsx)(`button`,{type:`button`,disabled:!i?.videoReady,onClick:()=>r(!0),className:`min-h-11 flex-1 rounded-md bg-primary px-3 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:cursor-not-allowed disabled:opacity-40`,"data-testid":`remote-desktop-readiness-continue`,children:u?`Continue (view only)`:`Continue`})]})]})})}function y({req:e,...t}){return(0,h.jsxs)(`li`,{className:`flex gap-2`,"data-testid":`remote-desktop-requirement-${e.id}`,"data-ok":e.ok,children:[e.ok?(0,h.jsx)(a,{className:`mt-0.5 size-4 shrink-0 text-emerald-400`}):(0,h.jsx)(i,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,h.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,h.jsxs)(`div`,{className:`text-sm font-medium`,children:[e.title,!e.ok&&(0,h.jsx)(`span`,{className:`ml-2 text-xs font-normal text-white/50`,children:e.gates===`video`?`required`:`for mouse & keyboard`})]}),!e.ok&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(`p`,{className:`text-sm text-white/70`,children:e.detail}),(0,h.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.actions.map(n=>(0,h.jsx)(b,{action:n,reqId:e.id,...t},n.label))})]})]})]})}function b({action:e,reqId:t,onHostAction:n,onTerminal:r}){let i=`inline-flex min-h-11 items-center gap-1.5 rounded-md bg-white/10 px-3 text-sm hover:bg-white/20`;return e.kind===`install`?(0,h.jsx)(_,{label:e.label}):e.kind===`terminal`?(0,h.jsxs)(`button`,{type:`button`,className:i,onClick:()=>r(e.command),title:e.command,children:[(0,h.jsx)(s,{className:`size-4`}),` `,e.label]}):e.kind===`link`?(0,h.jsxs)(`a`,{className:i,href:e.url,target:`_blank`,rel:`noreferrer`,children:[(0,h.jsx)(c,{className:`size-4`}),` `,e.label]}):(0,h.jsx)(`button`,{type:`button`,className:i,onClick:()=>void n(t,e.action),children:e.label})}export{g as n,v as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Kr as i,Ln as a,ht as o,xn as s}from"./icons-C1wDt09O.js";import{k as c,r as l}from"./api-client-BnYFnEfK.js";import{t as u}from"./button-BHGVTbam.js";import{t as d}from"./separator-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Kr as i,Ln as a,ht as o,xn as s}from"./icons-C1wDt09O.js";import{k as c,r as l}from"./api-client-BnYFnEfK.js";import{t as u}from"./button-BHGVTbam.js";import{t as d}from"./separator-DUdRLaL0.js";var f=e(t(),1),p=n(),m=e=>`${Math.round(e/1e6)} MB`;function h(){let[e,t]=(0,f.useState)(null),[n,h]=(0,f.useState)(!1),g=(0,f.useRef)(null),_=(0,f.useCallback)(async()=>{try{t(await l.get(`/api/remote-desktop/relay`))}catch{}},[]);(0,f.useEffect)(()=>{_()},[_]);let v=!!e?.job&&!e.job.done;(0,f.useEffect)(()=>{if(v)return g.current=setTimeout(()=>void _(),700),()=>{g.current&&clearTimeout(g.current)}},[v,e,_]);let y=async()=>{h(!0);try{await l.post(`/api/remote-desktop/relay/install`),await _()}catch(e){c.error(`Could not start the download`,{description:e instanceof Error?e.message:String(e)})}finally{h(!1)}},b=async()=>{h(!0);try{await l.post(`/api/remote-desktop/relay/uninstall`),await _()}catch(e){c.error(`Could not remove the relay`,{description:e instanceof Error?e.message:String(e)})}finally{h(!1)}},x=e?.job??null,S=x&&x.totalBytes>0?Math.round(x.receivedBytes/x.totalBytes*100):null,C=typeof window<`u`&&!window.isSecureContext;return(0,p.jsxs)(`div`,{className:`space-y-6`,children:[(0,p.jsxs)(`section`,{className:`space-y-3`,children:[(0,p.jsxs)(`div`,{children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`WebRTC relay`}),(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:`Streams the desktop over WebRTC instead of a WebSocket. It repackages the video this host already encoded — it never re-encodes, so the picture and the CPU cost are unchanged.`})]}),C&&(0,p.jsxs)(`p`,{className:`rounded-md bg-muted px-4 py-3 text-xs leading-relaxed`,children:[`You are reading this over plain HTTP. Browsers only expose the WebCodecs video decoder on HTTPS or localhost, so `,(0,p.jsx)(`strong`,{children:`Remote Desktop cannot show a picture on this address`}),` without the relay. Installing it fixes that; so does reaching PPM through its HTTPS tunnel.`]}),!e?.available&&!e?.installed&&(0,p.jsxs)(`p`,{className:`text-xs text-muted-foreground leading-relaxed`,children:[`MediaMTX publishes no build for this platform. You can install it yourself and put`,(0,p.jsx)(`code`,{className:`mx-1 rounded bg-muted px-1 py-0.5`,children:`mediamtx`}),`on this host's PATH — PPM generates its own configuration either way.`]}),(0,p.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2 text-sm`,children:[e?.installed?(0,p.jsx)(r,{className:`size-4 text-emerald-500`}):(0,p.jsx)(a,{className:`size-4 text-muted-foreground`}),(0,p.jsx)(`span`,{children:e?.installed?e.source===`system`?`Installed on this host (not by PPM)`:`Installed — MediaMTX ${e.pinnedVersion}`:`Not installed`})]}),(0,p.jsxs)(`div`,{className:`flex flex-wrap gap-2 sm:ml-auto`,children:[!e?.installed&&e?.available&&(0,p.jsx)(u,{onClick:y,disabled:n||v,className:`min-h-11 px-4`,children:v?(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(s,{className:`size-4 animate-spin`}),`Downloading`,S===null?``:` ${S}%`]}):(0,p.jsxs)(p.Fragment,{children:[(0,p.jsx)(o,{className:`size-4`}),`Install`]})}),e?.installed&&e.source===`bundled`&&(0,p.jsxs)(u,{variant:`outline`,onClick:b,disabled:n||v,className:`min-h-11 px-4`,children:[(0,p.jsx)(i,{className:`size-4`}),`Remove`]})]})]}),v&&x&&(0,p.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[m(x.receivedBytes),x.totalBytes>0?` of ${m(x.totalBytes)}`:``]}),x?.error&&(0,p.jsx)(`p`,{className:`text-xs text-destructive`,children:x.error}),e?.path&&(0,p.jsx)(`p`,{className:`text-xs text-muted-foreground break-all`,children:e.path})]}),(0,p.jsx)(d,{}),(0,p.jsxs)(`section`,{className:`space-y-2`,children:[(0,p.jsx)(`h3`,{className:`text-sm font-medium`,children:`What changes when it is on`}),(0,p.jsxs)(`ul`,{className:`list-disc space-y-1 pl-5 text-xs text-muted-foreground leading-relaxed`,children:[(0,p.jsx)(`li`,{children:`The picture works on a plain-HTTP LAN address, not only over HTTPS or localhost.`}),(0,p.jsx)(`li`,{children:`A lost packet costs one retransmission instead of stalling the whole stream.`}),(0,p.jsx)(`li`,{children:`Keyboard, mouse, clipboard and host audio keep using the same WebSocket.`}),(0,p.jsx)(`li`,{children:`Video leaves this host on its own UDP port, protected by per-session credentials.`})]})]})]})}export{h as RemoteDesktopSettingsSection};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ht as r,In as i,K as a,Ln as o,Mr as s,_r as c,cr as l,nn as u,vt as d,wr as f,zn as p}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import{D as m,E as h,a as g,c as _,d as v,f as y,i as b,l as x,m as S,n as C,o as ee,p as w,r as te,s as T,t as E,u as D}from"./settings-store-CBJCnE5L.js";import{n as ne}from"./utils-D3xTlJyU.js";import"./portal-container-context-Gepuvxdg.js";import{n as re}from"./window-store-UcSFgNCI.js";import"./panel-store-Dx2ziBLp.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{t as ie}from"./button-BHGVTbam.js";import{a as ae,i as O,n as k,o as A,r as j,t as M}from"./dialog-DnE192fh.js";import{a as N,c as P,d as F,f as I,i as L,l as R,m as oe,n as z,p as B,r as se,s as V,t as H}from"./dropdown-menu-CxZR_vuV.js";import"./ws-auth-k7DWnL9T.js";import{pn as ce}from"./index-Cx9ZRibz.js";import"./use-h264-canvas-decoder-BpBeyZ1K.js";import"./run-in-terminal-EVMb5TjW.js";import{n as U,t as W}from"./remote-desktop-readiness-gate--gtmfqZh.js";import{a as le,c as ue,f as de,i as fe,l as G,m as K,n as pe,o as q,p as J,r as me,s as he,t as ge}from"./remote-desktop-clipboard-notice-CGDBpXMf.js";import{a as Y}from"./remote-desktop-recording-D_fwMC2z.js";var X=e(t(),1);function Z(e,t,n,r){let i=(0,X.useCallback)((n,r,i,a)=>{let o=e.current;if(!o)return;let{xFrac:s,yFrac:c}=G(n,r,o.getBoundingClientRect());t({type:`pointer`,xFrac:s,yFrac:c,button:i,down:a})},[e,t]);(0,X.useEffect)(()=>{let a=e.current;if(!a||!n)return;let o=e=>e===0?`left`:e===2?`right`:null,s=()=>t({type:`releaseAll`}),c=null,l=0,u=()=>{l=0,c&&=(i(c.x,c.y,null,null),null)},d=()=>{l&&=(cancelAnimationFrame(l),0),c&&=(i(c.x,c.y,null,null),null)},f=e=>{e.preventDefault(),a.setPointerCapture(e.pointerId),a.focus(),d(),i(e.clientX,e.clientY,o(e.button),!0)},p=e=>{c={x:e.clientX,y:e.clientY},l||=requestAnimationFrame(u)},m=e=>{d(),i(e.clientX,e.clientY,o(e.button),!1)},h=e=>e.preventDefault(),g=!1,_=e=>{if(r&&K(e)){g=e.shiftKey;return}e.preventDefault(),t({type:`key`,code:e.code,down:!0}),r&&J(e)&&r.onCopyCombo()},v=e=>{r&&K(e)||(e.preventDefault(),t({type:`key`,code:e.code,down:!1}))},y=e=>{e.preventDefault();let t=e.clipboardData?.getData(`text/plain`);t&&r?.onPasteText(t,g),g=!1},b=()=>{document.hidden&&s()};return a.tabIndex=0,a.addEventListener(`pointerdown`,f),a.addEventListener(`pointermove`,p),a.addEventListener(`pointerup`,m),a.addEventListener(`contextmenu`,h),a.addEventListener(`keydown`,_),a.addEventListener(`keyup`,v),a.addEventListener(`paste`,y),a.addEventListener(`blur`,s),document.addEventListener(`visibilitychange`,b),()=>{l&&cancelAnimationFrame(l),a.removeEventListener(`pointerdown`,f),a.removeEventListener(`pointermove`,p),a.removeEventListener(`pointerup`,m),a.removeEventListener(`contextmenu`,h),a.removeEventListener(`keydown`,_),a.removeEventListener(`keyup`,v),a.removeEventListener(`blur`,s),document.removeEventListener(`visibilitychange`,b)}},[e,n,i,t,r])}var Q={h264_nvenc:`NVIDIA NVENC`,h264_qsv:`Intel QuickSync`,h264_vaapi:`VAAPI (GPU)`,h264_amf:`AMD AMF`,h264_videotoolbox:`Apple VideoToolbox`,libx264:`Software (x264)`};function _e(e){return Object.hasOwn(Q,e)?Q[e]:e}var $=n(),ve=`flex size-7 shrink-0 items-center justify-center rounded bg-black/40 text-white/70 outline-none hover:bg-black/60 hover:text-white data-[state=open]:bg-black/70 data-[state=open]:text-white`;function ye({displays:e,currentDisplayId:t,onSelectDisplay:n,quality:i,qualityChoice:c,onSetQuality:l,onOpenCustomQuality:p,codecs:g,codec:_,onSetCodec:v,hostModes:y,hostModeId:x,hostOriginalModeId:S,onSetHostMode:C,canResizeHost:ee,resolutionError:w,viewStyle:T,customScale:E,onSetViewStyle:D,onSetCustomScale:re,showCursor:ie,onSetShowCursor:ae,audioOn:O,audioReason:k,onSetAudioOn:A,privacyOn:j,privacyReason:M,privacyCanBlank:ce,onSetPrivacyOn:U,recording:W,recordingElapsedSec:de,recordingSupported:fe,onToggleRecording:G,onScreenshot:K,clipboardEnabled:pe,onSetClipboardEnabled:J,statsVisible:me,onToggleStats:ge}){let Y=(0,X.useMemo)(()=>he(y),[y]),Z=(0,X.useMemo)(()=>q(),[]),Q=(0,X.useMemo)(()=>le(y,Z,x),[y,Z,x]),ye=!!(S&&S!==x),Se=t??e.find(e=>e.primary)?.id??e[0]?.id??``;return(0,$.jsxs)(`div`,{className:`absolute right-1 top-1 z-40 flex items-center gap-1`,"data-testid":`remote-desktop-toolbar`,children:[e.length>1&&(0,$.jsxs)(H,{children:[(0,$.jsx)(oe,{className:ve,"aria-label":`Display`,title:`Display`,children:(0,$.jsx)(o,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(N,{children:`Display`}),(0,$.jsx)(V,{value:Se,onValueChange:n,children:e.map(e=>(0,$.jsxs)(P,{value:e.id,"data-testid":`remote-desktop-display-${e.id}`,children:[e.label,e.primary?` (main)`:``,` · `,e.width,`×`,e.height]},e.id))})]})]}),(0,$.jsxs)(H,{children:[(0,$.jsx)(oe,{className:ve,"aria-label":`Display settings`,title:`Display settings`,"data-testid":`remote-desktop-settings-trigger`,children:(0,$.jsx)(f,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(N,{children:`Scale`}),(0,$.jsx)(V,{value:T,onValueChange:e=>D(e),children:b.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-view-style-${e}`,children:te[e]},e))}),T===`custom`&&(0,$.jsx)(xe,{scale:E,onSet:re}),(0,$.jsx)(R,{}),(0,$.jsxs)(F,{children:[(0,$.jsxs)(B,{"data-testid":`remote-desktop-quality-submenu`,children:[`Image quality`,i.held<1&&(0,$.jsxs)(`span`,{className:`ml-1.5 text-[10px] opacity-60`,"data-testid":`remote-desktop-quality-held`,children:[Math.round(i.held*100),`% — link limited`]})]}),(0,$.jsx)(I,{className:`w-56`,children:(0,$.jsxs)(V,{value:c,onValueChange:e=>e===`custom`?p():l(e),children:[m.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-quality-${e}`,children:h[e].label},e)),(0,$.jsx)(P,{value:`custom`,"data-testid":`remote-desktop-quality-custom`,children:`Custom…`})]})})]}),g.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(B,{"data-testid":`remote-desktop-codec-submenu`,children:`Codec`}),(0,$.jsx)(I,{className:`w-56`,children:(0,$.jsxs)(V,{value:_??`auto`,onValueChange:e=>v(e===`auto`?null:e),children:[(0,$.jsxs)(P,{value:`auto`,children:[`Auto · `,_e(g[0])]}),g.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-codec-${e}`,children:_e(e)},e))]})})]}),ee&&Y.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(B,{"data-testid":`remote-desktop-resolution-submenu`,children:`Resolution`}),(0,$.jsxs)(I,{className:`max-h-80 w-56 overflow-y-auto`,children:[ye&&S&&(0,$.jsx)(L,{onSelect:()=>C(S),"data-testid":`remote-desktop-resolution-original`,children:`Original`}),Q&&(0,$.jsxs)(L,{onSelect:()=>C(Q.id),"data-testid":`remote-desktop-resolution-fit-local`,children:[`Fit local `,Q.width,`×`,Q.height]}),(ye||Q)&&(0,$.jsx)(R,{}),(0,$.jsx)(V,{value:x??Y.find(e=>e.current)?.id??``,onValueChange:C,children:Y.map(e=>(0,$.jsxs)(P,{value:e.id,"data-testid":`remote-desktop-resolution-${e.width}x${e.height}`,children:[ue(e),e.preferred&&(0,$.jsx)(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:`native`})]},e.id))}),w&&(0,$.jsx)(`div`,{className:`px-2 py-1.5 text-[10px] leading-tight text-destructive`,children:w})]})]}),(0,$.jsx)(R,{}),(0,$.jsx)(z,{checked:ie,onCheckedChange:ae,"data-testid":`remote-desktop-show-cursor`,children:`Show remote cursor`}),(0,$.jsx)(z,{checked:pe,onCheckedChange:J,"data-testid":`remote-desktop-clipboard-toggle`,children:`Sync clipboard`}),(0,$.jsx)(z,{checked:O,disabled:k!==null,onCheckedChange:A,"data-testid":`remote-desktop-audio-toggle`,children:(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{children:`Play host audio`}),k&&(0,$.jsx)(`span`,{className:`text-[10px] leading-tight text-muted-foreground`,children:k})]})}),(0,$.jsx)(R,{}),(0,$.jsx)(z,{checked:j,disabled:M!==null&&!j,onCheckedChange:U,"data-testid":`remote-desktop-privacy-toggle`,children:(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{children:`Privacy mode`}),(0,$.jsx)(`span`,{className:`text-[10px] leading-tight text-muted-foreground`,children:M??(ce?`Blocks the host's keyboard and mouse, and blanks its screen`:`Blocks the host's keyboard and mouse (its screen stays on)`)})]})}),(0,$.jsx)(R,{}),(0,$.jsxs)(L,{onSelect:K,"data-testid":`remote-desktop-screenshot`,children:[(0,$.jsx)(u,{className:`size-3.5`}),` Save screenshot`]}),fe&&(0,$.jsx)(L,{onSelect:G,"data-testid":`remote-desktop-record`,children:W?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(s,{className:`size-3.5 text-red-500`}),` Stop recording · `,be(de)]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(a,{className:`size-3.5`}),` Start recording`]})})]})]}),j&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>U(!1),title:`Privacy mode is on — click to release the host`,"aria-label":`Turn privacy mode off`,className:`flex h-7 shrink-0 items-center gap-1 rounded bg-amber-500/85 px-1.5 text-[10px] font-medium text-black hover:bg-amber-400`,"data-testid":`remote-desktop-privacy-indicator`,children:[(0,$.jsx)(d,{className:`size-3`}),` Host locked`]}),W&&(0,$.jsxs)(`button`,{type:`button`,onClick:G,title:`Stop recording`,"aria-label":`Stop recording`,className:`flex h-7 shrink-0 items-center gap-1 rounded bg-red-600/80 px-1.5 text-[10px] font-medium tabular-nums text-white hover:bg-red-600`,"data-testid":`remote-desktop-recording-indicator`,children:[(0,$.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-white`}),be(de)]}),(0,$.jsx)(`button`,{type:`button`,onClick:ge,"aria-label":`Toggle stats overlay`,"aria-pressed":me,title:`Quality monitor`,className:ne(ve,me&&`bg-primary/70 text-primary-foreground hover:bg-primary/80`),children:(0,$.jsx)(r,{className:`size-3.5`})})]})}function be(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=String(e%60).padStart(2,`0`);return t>0?`${t}:${String(n).padStart(2,`0`)}:${r}`:`${n}:${r}`}function xe({scale:e,onSet:t}){let[n,r]=(0,X.useState)(null),a=(0,X.useRef)(null),o=T(Math.round(ee(e)*100)),s=n??o,c=_(s);(0,X.useEffect)(()=>()=>{a.current&&clearTimeout(a.current)},[]);let u=e=>{r(e),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{r(null),t(e/100)},300)},d=e=>t=>{t.preventDefault(),u(T(s+e*1))},f=`flex size-6 shrink-0 items-center justify-center rounded hover:bg-accent disabled:opacity-40`;return(0,$.jsx)(`div`,{className:`px-2 py-1.5`,"data-testid":`remote-desktop-zoom-row`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(`button`,{type:`button`,className:f,onClick:d(-1),disabled:s<=5,"aria-label":`Decrease`,children:(0,$.jsx)(i,{className:`size-3.5`})}),(0,$.jsxs)(`span`,{className:`relative flex-1 py-2.5`,children:[(0,$.jsx)(`input`,{type:`range`,min:0,max:1,step:1/(C-5),value:c,"aria-label":`Scale`,"aria-valuetext":`${s}%`,"data-testid":`remote-desktop-zoom-slider`,onKeyDown:e=>e.stopPropagation(),onChange:e=>u(x(D(Number(e.target.value)))),className:`h-1 w-full cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsxs)(`span`,{className:`pointer-events-none absolute top-0 -translate-x-1/2 rounded bg-primary px-1.5 text-[10px] leading-4 tabular-nums text-primary-foreground`,style:{left:`${c*100}%`},"data-testid":`remote-desktop-zoom-value`,children:[s,`%`]})]}),(0,$.jsx)(`button`,{type:`button`,className:f,onClick:d(1),disabled:s>=C,"aria-label":`Increase`,children:(0,$.jsx)(l,{className:`size-3.5`})})]})})}var Se=400;function Ce({open:e,onOpenChange:t,percent:n,fps:r,more:i,onSetMore:a,onCommit:o,frameSize:s}){let[c,l]=(0,X.useState)(n),[u,d]=(0,X.useState)(r),f=(0,X.useRef)(null);(0,X.useEffect)(()=>{e&&(l(n),d(r))},[e,n,r]),(0,X.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]);let p=i?v:100,m=(e,t)=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>o(e,t),Se)},h=e=>{let t=w(e,i);l(t),m(t,u)},g=e=>{let t=y(e);d(t),m(c,t)},_=e=>{a(e);let t=w(c,e);t!==c&&(l(t),m(t,u))},b=S(c,s.width,s.height);return(0,$.jsx)(M,{open:e,onOpenChange:t,children:(0,$.jsxs)(k,{className:`sm:max-w-md`,"data-testid":`remote-desktop-custom-quality-dialog`,children:[(0,$.jsxs)(ae,{children:[(0,$.jsx)(A,{children:`Custom image quality`}),(0,$.jsx)(j,{children:s.width>0?`${c}% of the base rate for ${s.width}×${s.height} — about ${(b/1e3).toFixed(1)} Mbit/s`:`Waiting for the first frame`})]}),(0,$.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(`input`,{type:`range`,min:10,max:p,step:1,value:Math.min(c,p),onChange:e=>h(Number(e.target.value)),"aria-label":`Bitrate`,"data-testid":`remote-desktop-custom-bitrate`,className:`h-1 min-w-0 flex-1 cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsxs)(`span`,{className:`w-14 text-right text-xs tabular-nums`,children:[c,`%`]}),(0,$.jsx)(`span`,{className:`w-14 text-xs text-muted-foreground`,children:`Bitrate`}),(0,$.jsxs)(`label`,{className:`flex shrink-0 items-center gap-1.5 text-xs`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>_(e.target.checked),"data-testid":`remote-desktop-custom-more`,className:`size-3.5 accent-primary`}),`More`]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(`input`,{type:`range`,min:5,max:120,step:1,value:u,onChange:e=>g(Number(e.target.value)),"aria-label":`FPS`,"data-testid":`remote-desktop-custom-fps`,className:`h-1 min-w-0 flex-1 cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsx)(`span`,{className:`w-14 text-right text-xs tabular-nums`,children:u}),(0,$.jsx)(`span`,{className:`w-14 text-xs text-muted-foreground`,children:`FPS`}),(0,$.jsx)(`span`,{className:`w-[4.25rem] shrink-0`,"aria-hidden":!0})]})]}),(0,$.jsx)(O,{children:(0,$.jsx)(ie,{onClick:()=>t(!1),children:`Close`})})]})})}function we({id:e}){let t=re(e=>e.close),n=(0,X.useCallback)(()=>t(e),[t,e]);return(0,$.jsx)(U,{onCancel:n,children:(0,$.jsx)(W,{onCancel:n,children:(0,$.jsx)(Te,{})})})}function Te(){let e=(0,X.useRef)(null),t=pe(),{connState:n,errorMessage:r,decoderStatus:i,decoderErrorMessage:a,sendMessage:o,reconnect:s,getFrameCount:l,getTotalBytes:u,frameSize:d,quality:f,setQuality:m,setCustomQuality:h,showCursor:_,setShowCursor:v,codec:y,setCodec:b,audioOn:x,setAudioOn:S,getAudioTracks:C,privacyOn:ee,privacyError:w,setPrivacyOn:te,hostModeId:T,hostOriginalModeId:D,resolutionError:re,setHostMode:ie,pendingHostClipboard:ae,clearHostClipboard:O,sendClipboard:k,requestHostClipboard:A}=de(e,{displayId:t.displayId}),j=E(e=>e.remoteDesktopStatsVisible),M=E(e=>e.toggleRemoteDesktopStatsVisible),N=E(e=>e.remoteDesktopViewStyle),P=E(e=>e.remoteDesktopCustomScale),F=E(e=>e.setRemoteDesktopViewStyle),I=E(e=>e.setRemoteDesktopCustomScale),L=E(e=>e.remoteDesktopClipboardSync),R=E(e=>e.remoteDesktopQuality),oe=E(e=>e.remoteDesktopCustomQualityPercent),z=E(e=>e.remoteDesktopCustomFps),B=E(e=>e.remoteDesktopCustomQualityMore),se=E(e=>e.setRemoteDesktopCustomQualityMore),[V,H]=(0,X.useState)(!1),U=E(e=>e.setRemoteDesktopClipboardSync),{caps:W}=ce(!1),[le,ue]=(0,X.useState)(!1),G=(0,X.useMemo)(()=>L?{onPasteText:(e,t)=>{ue(!0),k(e,!0,t)},onCopyCombo:A}:void 0,[L,k,A]);Z(e,o,n===`streaming`,G);let K=fe(e,C),q=g(N,P,d),J=i===`unsupported`?a:n===`error`?r:n===`closed`?`Disconnected`:n===`connecting`?`Connecting…`:null;return(0,$.jsxs)(`div`,{className:`relative flex h-full w-full items-center justify-center bg-black`,"data-testid":`remote-desktop-window`,"data-conn-state":n,children:[(0,$.jsx)(`div`,{className:ne(`flex h-full w-full`,q?`overflow-auto`:`overflow-hidden`),children:(0,$.jsx)(`canvas`,{ref:e,"data-testid":`remote-desktop-canvas`,"data-view-style":N,className:ne(`m-auto outline-none`,!q&&`max-h-full max-w-full`),style:q?{width:q.width,height:q.height}:void 0})}),(0,$.jsx)(me,{canvasRef:e,getFrameCount:l,getTotalBytes:u}),(0,$.jsx)(ye,{displays:t.displays,currentDisplayId:t.current?.id,onSelectDisplay:t.select,quality:f,qualityChoice:R,onSetQuality:m,onOpenCustomQuality:()=>H(!0),codecs:W?.encoders??[],codec:y,onSetCodec:b,hostModes:W?.resolutions?.modes??[],hostModeId:T,hostOriginalModeId:D,onSetHostMode:ie,canResizeHost:W?.inputReady??!1,resolutionError:re,viewStyle:N,customScale:P,onSetViewStyle:F,onSetCustomScale:I,showCursor:_,onSetShowCursor:v,audioOn:x,audioReason:W&&!W.audio.available?W.audio.reason:null,onSetAudioOn:S,privacyOn:ee,privacyReason:w??(W&&!W.privacy.available?W.privacy.reason:null),privacyCanBlank:W?.privacy?.canBlank??!1,onSetPrivacyOn:te,recording:K.recording,recordingElapsedSec:K.elapsedSec,recordingSupported:K.supported,onToggleRecording:K.toggle,onScreenshot:()=>void Y(e.current),clipboardEnabled:L,onSetClipboardEnabled:U,statsVisible:j,onToggleStats:M}),(0,$.jsx)(ge,{pendingText:ae,onDismiss:O,missingToolAction:le&&W&&!W.clipboard.available?W.clipboard.action:null,onDismissMissingTool:()=>ue(!1)}),(0,$.jsx)(Ce,{open:V,onOpenChange:H,percent:oe,fps:z,more:B,onSetMore:se,onCommit:h,frameSize:d}),J&&(0,$.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/70 text-sm text-white`,children:[(0,$.jsx)(p,{className:`size-6 opacity-70`}),(0,$.jsx)(`span`,{className:`max-w-sm text-center px-4`,children:J}),(n===`error`||n===`closed`)&&i!==`unsupported`&&(0,$.jsxs)(`button`,{onClick:s,className:`flex items-center gap-1.5 rounded-md bg-white/10 px-3 py-1.5 hover:bg-white/20`,children:[(0,$.jsx)(c,{className:`size-3.5`}),` Reconnect`]})]})]})}export{we as default};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ht as r,In as i,K as a,Ln as o,Mr as s,_r as c,cr as l,nn as u,vt as d,wr as f,zn as p}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import{D as m,E as h,a as g,c as _,d as v,f as y,i as b,l as x,m as S,n as C,o as ee,p as w,r as te,s as T,t as E,u as D}from"./settings-store-CMpVMq3Y.js";import{n as ne}from"./utils-D3xTlJyU.js";import"./portal-container-context-Gepuvxdg.js";import{n as re}from"./window-store-D6EgLSfT.js";import"./panel-store-H7e9XHZF.js";import"./project-store-Bs-kiU8m.js";import"./project-framework-store-nuePqBBa.js";import"./session-list-sync-triggers-D9i1FxWd.js";import{t as ie}from"./button-BHGVTbam.js";import{a as ae,i as O,n as k,o as A,r as j,t as M}from"./dialog-DnE192fh.js";import{a as N,c as P,d as F,f as I,i as L,l as R,m as oe,n as z,p as B,r as se,s as V,t as H}from"./dropdown-menu-CxZR_vuV.js";import"./ws-auth-k7DWnL9T.js";import{mn as ce}from"./index-Vd9Xr54k.js";import"./use-h264-canvas-decoder-BpBeyZ1K.js";import"./run-in-terminal-DAdjH24K.js";import{n as U,t as W}from"./remote-desktop-readiness-gate-DrSYb_9z.js";import{a as le,c as ue,f as de,i as fe,l as G,m as K,n as pe,o as q,p as J,r as me,s as he,t as ge}from"./remote-desktop-clipboard-notice-Dwn-iV4g.js";import{a as Y}from"./remote-desktop-recording-BcDx5c_k.js";var X=e(t(),1);function Z(e,t,n,r){let i=(0,X.useCallback)((n,r,i,a)=>{let o=e.current;if(!o)return;let{xFrac:s,yFrac:c}=G(n,r,o.getBoundingClientRect());t({type:`pointer`,xFrac:s,yFrac:c,button:i,down:a})},[e,t]);(0,X.useEffect)(()=>{let a=e.current;if(!a||!n)return;let o=e=>e===0?`left`:e===2?`right`:null,s=()=>t({type:`releaseAll`}),c=null,l=0,u=()=>{l=0,c&&=(i(c.x,c.y,null,null),null)},d=()=>{l&&=(cancelAnimationFrame(l),0),c&&=(i(c.x,c.y,null,null),null)},f=e=>{e.preventDefault(),a.setPointerCapture(e.pointerId),a.focus(),d(),i(e.clientX,e.clientY,o(e.button),!0)},p=e=>{c={x:e.clientX,y:e.clientY},l||=requestAnimationFrame(u)},m=e=>{d(),i(e.clientX,e.clientY,o(e.button),!1)},h=e=>e.preventDefault(),g=!1,_=e=>{if(r&&K(e)){g=e.shiftKey;return}e.preventDefault(),t({type:`key`,code:e.code,down:!0}),r&&J(e)&&r.onCopyCombo()},v=e=>{r&&K(e)||(e.preventDefault(),t({type:`key`,code:e.code,down:!1}))},y=e=>{e.preventDefault();let t=e.clipboardData?.getData(`text/plain`);t&&r?.onPasteText(t,g),g=!1},b=()=>{document.hidden&&s()};return a.tabIndex=0,a.addEventListener(`pointerdown`,f),a.addEventListener(`pointermove`,p),a.addEventListener(`pointerup`,m),a.addEventListener(`contextmenu`,h),a.addEventListener(`keydown`,_),a.addEventListener(`keyup`,v),a.addEventListener(`paste`,y),a.addEventListener(`blur`,s),document.addEventListener(`visibilitychange`,b),()=>{l&&cancelAnimationFrame(l),a.removeEventListener(`pointerdown`,f),a.removeEventListener(`pointermove`,p),a.removeEventListener(`pointerup`,m),a.removeEventListener(`contextmenu`,h),a.removeEventListener(`keydown`,_),a.removeEventListener(`keyup`,v),a.removeEventListener(`blur`,s),document.removeEventListener(`visibilitychange`,b)}},[e,n,i,t,r])}var Q={h264_nvenc:`NVIDIA NVENC`,h264_qsv:`Intel QuickSync`,h264_vaapi:`VAAPI (GPU)`,h264_amf:`AMD AMF`,h264_videotoolbox:`Apple VideoToolbox`,libx264:`Software (x264)`};function _e(e){return Object.hasOwn(Q,e)?Q[e]:e}var $=n(),ve=`flex size-7 shrink-0 items-center justify-center rounded bg-black/40 text-white/70 outline-none hover:bg-black/60 hover:text-white data-[state=open]:bg-black/70 data-[state=open]:text-white`;function ye({displays:e,currentDisplayId:t,onSelectDisplay:n,quality:i,qualityChoice:c,onSetQuality:l,onOpenCustomQuality:p,codecs:g,codec:_,onSetCodec:v,hostModes:y,hostModeId:x,hostOriginalModeId:S,onSetHostMode:C,canResizeHost:ee,resolutionError:w,viewStyle:T,customScale:E,onSetViewStyle:D,onSetCustomScale:re,showCursor:ie,onSetShowCursor:ae,audioOn:O,audioReason:k,onSetAudioOn:A,privacyOn:j,privacyReason:M,privacyCanBlank:ce,onSetPrivacyOn:U,recording:W,recordingElapsedSec:de,recordingSupported:fe,onToggleRecording:G,onScreenshot:K,clipboardEnabled:pe,onSetClipboardEnabled:J,statsVisible:me,onToggleStats:ge}){let Y=(0,X.useMemo)(()=>he(y),[y]),Z=(0,X.useMemo)(()=>q(),[]),Q=(0,X.useMemo)(()=>le(y,Z,x),[y,Z,x]),ye=!!(S&&S!==x),Se=t??e.find(e=>e.primary)?.id??e[0]?.id??``;return(0,$.jsxs)(`div`,{className:`absolute right-1 top-1 z-40 flex items-center gap-1`,"data-testid":`remote-desktop-toolbar`,children:[e.length>1&&(0,$.jsxs)(H,{children:[(0,$.jsx)(oe,{className:ve,"aria-label":`Display`,title:`Display`,children:(0,$.jsx)(o,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(N,{children:`Display`}),(0,$.jsx)(V,{value:Se,onValueChange:n,children:e.map(e=>(0,$.jsxs)(P,{value:e.id,"data-testid":`remote-desktop-display-${e.id}`,children:[e.label,e.primary?` (main)`:``,` · `,e.width,`×`,e.height]},e.id))})]})]}),(0,$.jsxs)(H,{children:[(0,$.jsx)(oe,{className:ve,"aria-label":`Display settings`,title:`Display settings`,"data-testid":`remote-desktop-settings-trigger`,children:(0,$.jsx)(f,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(N,{children:`Scale`}),(0,$.jsx)(V,{value:T,onValueChange:e=>D(e),children:b.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-view-style-${e}`,children:te[e]},e))}),T===`custom`&&(0,$.jsx)(xe,{scale:E,onSet:re}),(0,$.jsx)(R,{}),(0,$.jsxs)(F,{children:[(0,$.jsxs)(B,{"data-testid":`remote-desktop-quality-submenu`,children:[`Image quality`,i.held<1&&(0,$.jsxs)(`span`,{className:`ml-1.5 text-[10px] opacity-60`,"data-testid":`remote-desktop-quality-held`,children:[Math.round(i.held*100),`% — link limited`]})]}),(0,$.jsx)(I,{className:`w-56`,children:(0,$.jsxs)(V,{value:c,onValueChange:e=>e===`custom`?p():l(e),children:[m.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-quality-${e}`,children:h[e].label},e)),(0,$.jsx)(P,{value:`custom`,"data-testid":`remote-desktop-quality-custom`,children:`Custom…`})]})})]}),g.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(B,{"data-testid":`remote-desktop-codec-submenu`,children:`Codec`}),(0,$.jsx)(I,{className:`w-56`,children:(0,$.jsxs)(V,{value:_??`auto`,onValueChange:e=>v(e===`auto`?null:e),children:[(0,$.jsxs)(P,{value:`auto`,children:[`Auto · `,_e(g[0])]}),g.map(e=>(0,$.jsx)(P,{value:e,"data-testid":`remote-desktop-codec-${e}`,children:_e(e)},e))]})})]}),ee&&Y.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(B,{"data-testid":`remote-desktop-resolution-submenu`,children:`Resolution`}),(0,$.jsxs)(I,{className:`max-h-80 w-56 overflow-y-auto`,children:[ye&&S&&(0,$.jsx)(L,{onSelect:()=>C(S),"data-testid":`remote-desktop-resolution-original`,children:`Original`}),Q&&(0,$.jsxs)(L,{onSelect:()=>C(Q.id),"data-testid":`remote-desktop-resolution-fit-local`,children:[`Fit local `,Q.width,`×`,Q.height]}),(ye||Q)&&(0,$.jsx)(R,{}),(0,$.jsx)(V,{value:x??Y.find(e=>e.current)?.id??``,onValueChange:C,children:Y.map(e=>(0,$.jsxs)(P,{value:e.id,"data-testid":`remote-desktop-resolution-${e.width}x${e.height}`,children:[ue(e),e.preferred&&(0,$.jsx)(`span`,{className:`ml-1.5 text-[10px] opacity-60`,children:`native`})]},e.id))}),w&&(0,$.jsx)(`div`,{className:`px-2 py-1.5 text-[10px] leading-tight text-destructive`,children:w})]})]}),(0,$.jsx)(R,{}),(0,$.jsx)(z,{checked:ie,onCheckedChange:ae,"data-testid":`remote-desktop-show-cursor`,children:`Show remote cursor`}),(0,$.jsx)(z,{checked:pe,onCheckedChange:J,"data-testid":`remote-desktop-clipboard-toggle`,children:`Sync clipboard`}),(0,$.jsx)(z,{checked:O,disabled:k!==null,onCheckedChange:A,"data-testid":`remote-desktop-audio-toggle`,children:(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{children:`Play host audio`}),k&&(0,$.jsx)(`span`,{className:`text-[10px] leading-tight text-muted-foreground`,children:k})]})}),(0,$.jsx)(R,{}),(0,$.jsx)(z,{checked:j,disabled:M!==null&&!j,onCheckedChange:U,"data-testid":`remote-desktop-privacy-toggle`,children:(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,$.jsx)(`span`,{children:`Privacy mode`}),(0,$.jsx)(`span`,{className:`text-[10px] leading-tight text-muted-foreground`,children:M??(ce?`Blocks the host's keyboard and mouse, and blanks its screen`:`Blocks the host's keyboard and mouse (its screen stays on)`)})]})}),(0,$.jsx)(R,{}),(0,$.jsxs)(L,{onSelect:K,"data-testid":`remote-desktop-screenshot`,children:[(0,$.jsx)(u,{className:`size-3.5`}),` Save screenshot`]}),fe&&(0,$.jsx)(L,{onSelect:G,"data-testid":`remote-desktop-record`,children:W?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(s,{className:`size-3.5 text-red-500`}),` Stop recording · `,be(de)]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(a,{className:`size-3.5`}),` Start recording`]})})]})]}),j&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>U(!1),title:`Privacy mode is on — click to release the host`,"aria-label":`Turn privacy mode off`,className:`flex h-7 shrink-0 items-center gap-1 rounded bg-amber-500/85 px-1.5 text-[10px] font-medium text-black hover:bg-amber-400`,"data-testid":`remote-desktop-privacy-indicator`,children:[(0,$.jsx)(d,{className:`size-3`}),` Host locked`]}),W&&(0,$.jsxs)(`button`,{type:`button`,onClick:G,title:`Stop recording`,"aria-label":`Stop recording`,className:`flex h-7 shrink-0 items-center gap-1 rounded bg-red-600/80 px-1.5 text-[10px] font-medium tabular-nums text-white hover:bg-red-600`,"data-testid":`remote-desktop-recording-indicator`,children:[(0,$.jsx)(`span`,{className:`size-1.5 animate-pulse rounded-full bg-white`}),be(de)]}),(0,$.jsx)(`button`,{type:`button`,onClick:ge,"aria-label":`Toggle stats overlay`,"aria-pressed":me,title:`Quality monitor`,className:ne(ve,me&&`bg-primary/70 text-primary-foreground hover:bg-primary/80`),children:(0,$.jsx)(r,{className:`size-3.5`})})]})}function be(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=String(e%60).padStart(2,`0`);return t>0?`${t}:${String(n).padStart(2,`0`)}:${r}`:`${n}:${r}`}function xe({scale:e,onSet:t}){let[n,r]=(0,X.useState)(null),a=(0,X.useRef)(null),o=T(Math.round(ee(e)*100)),s=n??o,c=_(s);(0,X.useEffect)(()=>()=>{a.current&&clearTimeout(a.current)},[]);let u=e=>{r(e),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{r(null),t(e/100)},300)},d=e=>t=>{t.preventDefault(),u(T(s+e*1))},f=`flex size-6 shrink-0 items-center justify-center rounded hover:bg-accent disabled:opacity-40`;return(0,$.jsx)(`div`,{className:`px-2 py-1.5`,"data-testid":`remote-desktop-zoom-row`,children:(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,$.jsx)(`button`,{type:`button`,className:f,onClick:d(-1),disabled:s<=5,"aria-label":`Decrease`,children:(0,$.jsx)(i,{className:`size-3.5`})}),(0,$.jsxs)(`span`,{className:`relative flex-1 py-2.5`,children:[(0,$.jsx)(`input`,{type:`range`,min:0,max:1,step:1/(C-5),value:c,"aria-label":`Scale`,"aria-valuetext":`${s}%`,"data-testid":`remote-desktop-zoom-slider`,onKeyDown:e=>e.stopPropagation(),onChange:e=>u(x(D(Number(e.target.value)))),className:`h-1 w-full cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsxs)(`span`,{className:`pointer-events-none absolute top-0 -translate-x-1/2 rounded bg-primary px-1.5 text-[10px] leading-4 tabular-nums text-primary-foreground`,style:{left:`${c*100}%`},"data-testid":`remote-desktop-zoom-value`,children:[s,`%`]})]}),(0,$.jsx)(`button`,{type:`button`,className:f,onClick:d(1),disabled:s>=C,"aria-label":`Increase`,children:(0,$.jsx)(l,{className:`size-3.5`})})]})})}var Se=400;function Ce({open:e,onOpenChange:t,percent:n,fps:r,more:i,onSetMore:a,onCommit:o,frameSize:s}){let[c,l]=(0,X.useState)(n),[u,d]=(0,X.useState)(r),f=(0,X.useRef)(null);(0,X.useEffect)(()=>{e&&(l(n),d(r))},[e,n,r]),(0,X.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]);let p=i?v:100,m=(e,t)=>{f.current&&clearTimeout(f.current),f.current=setTimeout(()=>o(e,t),Se)},h=e=>{let t=w(e,i);l(t),m(t,u)},g=e=>{let t=y(e);d(t),m(c,t)},_=e=>{a(e);let t=w(c,e);t!==c&&(l(t),m(t,u))},b=S(c,s.width,s.height);return(0,$.jsx)(M,{open:e,onOpenChange:t,children:(0,$.jsxs)(k,{className:`sm:max-w-md`,"data-testid":`remote-desktop-custom-quality-dialog`,children:[(0,$.jsxs)(ae,{children:[(0,$.jsx)(A,{children:`Custom image quality`}),(0,$.jsx)(j,{children:s.width>0?`${c}% of the base rate for ${s.width}×${s.height} — about ${(b/1e3).toFixed(1)} Mbit/s`:`Waiting for the first frame`})]}),(0,$.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(`input`,{type:`range`,min:10,max:p,step:1,value:Math.min(c,p),onChange:e=>h(Number(e.target.value)),"aria-label":`Bitrate`,"data-testid":`remote-desktop-custom-bitrate`,className:`h-1 min-w-0 flex-1 cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsxs)(`span`,{className:`w-14 text-right text-xs tabular-nums`,children:[c,`%`]}),(0,$.jsx)(`span`,{className:`w-14 text-xs text-muted-foreground`,children:`Bitrate`}),(0,$.jsxs)(`label`,{className:`flex shrink-0 items-center gap-1.5 text-xs`,children:[(0,$.jsx)(`input`,{type:`checkbox`,checked:i,onChange:e=>_(e.target.checked),"data-testid":`remote-desktop-custom-more`,className:`size-3.5 accent-primary`}),`More`]})]}),(0,$.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,$.jsx)(`input`,{type:`range`,min:5,max:120,step:1,value:u,onChange:e=>g(Number(e.target.value)),"aria-label":`FPS`,"data-testid":`remote-desktop-custom-fps`,className:`h-1 min-w-0 flex-1 cursor-pointer appearance-none rounded bg-accent accent-primary`}),(0,$.jsx)(`span`,{className:`w-14 text-right text-xs tabular-nums`,children:u}),(0,$.jsx)(`span`,{className:`w-14 text-xs text-muted-foreground`,children:`FPS`}),(0,$.jsx)(`span`,{className:`w-[4.25rem] shrink-0`,"aria-hidden":!0})]})]}),(0,$.jsx)(O,{children:(0,$.jsx)(ie,{onClick:()=>t(!1),children:`Close`})})]})})}function we({id:e}){let t=re(e=>e.close),n=(0,X.useCallback)(()=>t(e),[t,e]);return(0,$.jsx)(U,{onCancel:n,children:(0,$.jsx)(W,{onCancel:n,children:(0,$.jsx)(Te,{})})})}function Te(){let e=(0,X.useRef)(null),t=pe(),{connState:n,errorMessage:r,decoderStatus:i,decoderErrorMessage:a,sendMessage:o,reconnect:s,getFrameCount:l,getTotalBytes:u,frameSize:d,quality:f,setQuality:m,setCustomQuality:h,showCursor:_,setShowCursor:v,codec:y,setCodec:b,audioOn:x,setAudioOn:S,getAudioTracks:C,privacyOn:ee,privacyError:w,setPrivacyOn:te,hostModeId:T,hostOriginalModeId:D,resolutionError:re,setHostMode:ie,pendingHostClipboard:ae,clearHostClipboard:O,sendClipboard:k,requestHostClipboard:A}=de(e,{displayId:t.displayId}),j=E(e=>e.remoteDesktopStatsVisible),M=E(e=>e.toggleRemoteDesktopStatsVisible),N=E(e=>e.remoteDesktopViewStyle),P=E(e=>e.remoteDesktopCustomScale),F=E(e=>e.setRemoteDesktopViewStyle),I=E(e=>e.setRemoteDesktopCustomScale),L=E(e=>e.remoteDesktopClipboardSync),R=E(e=>e.remoteDesktopQuality),oe=E(e=>e.remoteDesktopCustomQualityPercent),z=E(e=>e.remoteDesktopCustomFps),B=E(e=>e.remoteDesktopCustomQualityMore),se=E(e=>e.setRemoteDesktopCustomQualityMore),[V,H]=(0,X.useState)(!1),U=E(e=>e.setRemoteDesktopClipboardSync),{caps:W}=ce(!1),[le,ue]=(0,X.useState)(!1),G=(0,X.useMemo)(()=>L?{onPasteText:(e,t)=>{ue(!0),k(e,!0,t)},onCopyCombo:A}:void 0,[L,k,A]);Z(e,o,n===`streaming`,G);let K=fe(e,C),q=g(N,P,d),J=i===`unsupported`?a:n===`error`?r:n===`closed`?`Disconnected`:n===`connecting`?`Connecting…`:null;return(0,$.jsxs)(`div`,{className:`relative flex h-full w-full items-center justify-center bg-black`,"data-testid":`remote-desktop-window`,"data-conn-state":n,children:[(0,$.jsx)(`div`,{className:ne(`flex h-full w-full`,q?`overflow-auto`:`overflow-hidden`),children:(0,$.jsx)(`canvas`,{ref:e,"data-testid":`remote-desktop-canvas`,"data-view-style":N,className:ne(`m-auto outline-none`,!q&&`max-h-full max-w-full`),style:q?{width:q.width,height:q.height}:void 0})}),(0,$.jsx)(me,{canvasRef:e,getFrameCount:l,getTotalBytes:u}),(0,$.jsx)(ye,{displays:t.displays,currentDisplayId:t.current?.id,onSelectDisplay:t.select,quality:f,qualityChoice:R,onSetQuality:m,onOpenCustomQuality:()=>H(!0),codecs:W?.encoders??[],codec:y,onSetCodec:b,hostModes:W?.resolutions?.modes??[],hostModeId:T,hostOriginalModeId:D,onSetHostMode:ie,canResizeHost:W?.inputReady??!1,resolutionError:re,viewStyle:N,customScale:P,onSetViewStyle:F,onSetCustomScale:I,showCursor:_,onSetShowCursor:v,audioOn:x,audioReason:W&&!W.audio.available?W.audio.reason:null,onSetAudioOn:S,privacyOn:ee,privacyReason:w??(W&&!W.privacy.available?W.privacy.reason:null),privacyCanBlank:W?.privacy?.canBlank??!1,onSetPrivacyOn:te,recording:K.recording,recordingElapsedSec:K.elapsedSec,recordingSupported:K.supported,onToggleRecording:K.toggle,onScreenshot:()=>void Y(e.current),clipboardEnabled:L,onSetClipboardEnabled:U,statsVisible:j,onToggleStats:M}),(0,$.jsx)(ge,{pendingText:ae,onDismiss:O,missingToolAction:le&&W&&!W.clipboard.available?W.clipboard.action:null,onDismissMissingTool:()=>ue(!1)}),(0,$.jsx)(Ce,{open:V,onOpenChange:H,percent:oe,fps:z,more:B,onSetMore:se,onCommit:h,frameSize:d}),J&&(0,$.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/70 text-sm text-white`,children:[(0,$.jsx)(p,{className:`size-6 opacity-70`}),(0,$.jsx)(`span`,{className:`max-w-sm text-center px-4`,children:J}),(n===`error`||n===`closed`)&&i!==`unsupported`&&(0,$.jsxs)(`button`,{onClick:s,className:`flex items-center gap-1.5 rounded-md bg-white/10 px-3 py-1.5 hover:bg-white/20`,children:[(0,$.jsx)(c,{className:`size-3.5`}),` Reconnect`]})]})]})}export{we as default};
|
|
Binary file
|
|
Binary file
|
package/dist/web/assets/{rename-object-dialog-Dv4iLwnf.js → rename-object-dialog-BPuh3dAH.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./portal-container-context-Gepuvxdg.js";import"./project-framework-store-nuePqBBa.js";import"./button-BHGVTbam.js";import"./dialog-DnE192fh.js";import"./file-icons-CB0RsVdl.js";import"./dropdown-menu-CxZR_vuV.js";import"./fs-api-BVIVh_De.js";import"./format-file-meta-BOAh9mam.js";import"./input-CReAuQTF.js";import"./scroll-area-CSmNLlfl.js";import{
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./portal-container-context-Gepuvxdg.js";import"./project-framework-store-nuePqBBa.js";import"./button-BHGVTbam.js";import"./dialog-DnE192fh.js";import"./file-icons-CB0RsVdl.js";import"./dropdown-menu-CxZR_vuV.js";import"./fs-api-BVIVh_De.js";import"./format-file-meta-BOAh9mam.js";import"./input-CReAuQTF.js";import"./scroll-area-CSmNLlfl.js";import{$n as r,h as i,x as a}from"./index-Vd9Xr54k.js";import{t as o}from"./editor-dialog-DTDsbJd6.js";var s=e(t(),1),c=n();function l({request:e}){let[t,n]=(0,s.useState)(e.value),[l,u]=(0,s.useState)(!1),d=t.trim(),f=d===``?[`Type the new name`]:[],p=d===e.value,m=()=>{u(!0),!(f.length>0||p)&&(r(),e.onConfirm(d))};return(0,c.jsx)(o,{title:`Rename object`,description:`A new name for ${e.value}`,onClose:r,onSubmit:m,problems:l?f:[],buttons:[{label:`OK`,onClick:m,variant:`default`,disabled:p},{label:`Close`,onClick:r}],children:(0,c.jsx)(i,{label:`New name`,htmlFor:`rename-object-name`,children:(0,c.jsx)(a,{id:`rename-object-name`,value:t,mono:!0,autoFocus:!0,onFocus:e=>e.currentTarget.select(),onChange:e=>n(e.target.value)})})})}export{l as RenameObjectDialog};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{xn as r}from"./icons-C1wDt09O.js";import{k as i,r as a}from"./api-client-BnYFnEfK.js";import{t as o}from"./button-BHGVTbam.js";import{a as s,c,jn as l,l as u,o as d,u as f}from"./index-Vd9Xr54k.js";var p={status:()=>a.get(`/api/share-host/status`),zone:()=>a.get(`/api/share-host/zone`),setEnabled:e=>a.post(`/api/share-host/enabled`,{enabled:e}),useTemporary:()=>a.post(`/api/share-host/quick`),setup:(e,t)=>a.post(`/api/share-host/setup`,{mode:e,hostname:t})},m=e(t(),1),h=1e4,g=2e3,_=e=>e instanceof Error?e.message:String(e);function v(e=!0){let[t,n]=(0,m.useState)(null),[r,i]=(0,m.useState)(null),a=(0,m.useCallback)(async()=>{try{n(await p.status()),i(null)}catch(e){i(_(e))}},[]),o=!!t?.enabled&&!t.connected;return(0,m.useEffect)(()=>{if(!e)return;a();let t=()=>{a()};return window.addEventListener(`focus`,t),()=>window.removeEventListener(`focus`,t)},[e,a]),(0,m.useEffect)(()=>{if(!e)return;let t=setInterval(()=>{document.visibilityState===`visible`&&a()},o?g:h);return()=>clearInterval(t)},[e,o,a]),{status:t,setStatus:n,loadError:r,refresh:a,connecting:o}}var y=n(),b=`share`,x=`min-h-11 cursor-pointer md:min-h-9`,S=e=>e instanceof Error?e.message:String(e);function C(e,t){e.applied?i.success(t):i.warning(`${t} — not applied yet`,{description:e.message})}function w(e,t,n){let[r,a]=(0,m.useState)(null),o=(0,m.useRef)(r);o.current=r;let s=(0,m.useCallback)((t,n)=>{let r=u(t,n);if(!r.ok)return r.reason;if(t===e?.ppmTunnel.hostname)return`That is PPM's own address — pick another prefix`},[e?.ppmTunnel.hostname]),d=(0,m.useCallback)(t=>{a({k:`zone`,mode:t}),p.zone().then(({zone:n})=>{let r=e?.hostname,i=r?.endsWith(`.${n}`)?r.slice(0,-(n.length+1)):b;a(e=>e?.k===`zone`?{k:`hostname`,mode:t,zone:n,prefix:i}:e)}).catch(e=>{a(null),i.error(`Could not read your Cloudflare domain`,{description:S(e)})})},[e?.hostname]),f=(0,m.useCallback)((e,n,r)=>{n===`slow`&&a(e=>e?.k===`login`?{...e,slow:!0}:e),n===`success`&&(t(),d(e)),(n===`timeout`||n===`error`)&&(a(null),i.error(n===`timeout`?`The Cloudflare sign-in link expired`:`Cloudflare sign-in failed`,{description:r??void 0})),n===`cancelled`&&a(null)},[d,t]),h=r?.k===`login`?r.mode:null;(0,m.useEffect)(()=>{if(!h)return;let e=e=>{let t=e.detail?.url;typeof t==`string`&&a(e=>e?.k===`login`?{...e,url:t}:e)},t=e=>{let t=e.detail;t?.state&&f(h,t.state,t.message??null)};return window.addEventListener(`tunnel:login_url`,e),window.addEventListener(`tunnel:login_state`,t),()=>{window.removeEventListener(`tunnel:login_url`,e),window.removeEventListener(`tunnel:login_state`,t)}},[h,f]);let g=(e,t)=>{a({k:`login`,mode:e,url:null,slow:!1}),l.login(t).then(t=>{t.url&&a(e=>e?.k===`login`?{...e,url:t.url}:e),f(e,t.state,t.message)}).catch(e=>{a(null),i.error(`Could not start the Cloudflare sign-in`,{description:S(e)})})};return{flow:r,begin:t=>{if(e){if(e.certState===`ok`){d(t);return}if(e.certState===`invalid`||e.certState===`mismatch`){a({k:`relogin`,mode:t,reason:e.certState});return}g(t,!1)}},cancel:()=>a(null),cancelLogin:()=>{a(null),l.cancelLogin().catch(()=>{})},relogin:e=>g(e,!0),setPrefix:e=>{a(t=>t?.k===`hostname`?{...t,prefix:e,error:s(c(e,t.zone),t.zone)}:t)},submit:async()=>{let e=o.current;if(e?.k!==`hostname`)return;let r=c(e.prefix,e.zone),i=s(r,e.zone);if(i){a({...e,error:i});return}a({k:`submitting`,mode:e.mode,hostname:r});try{let i=await p.setup(e.mode,r);a(null),C(i.applied,`Review address set to https://${i.hostname}`),await t(),n?.()}catch(t){a({...e,error:S(t)})}}}}function T({setup:e,ppmHostname:t}){let{flow:n}=e;if(!n)return null;switch(n.k){case`relogin`:return(0,y.jsxs)(`div`,{className:`space-y-4`,children:[(0,y.jsxs)(`div`,{children:[(0,y.jsx)(`h4`,{className:`text-sm font-medium`,children:f.needsRelogin.title}),(0,y.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-muted-foreground`,children:n.reason===`mismatch`?f.needsRelogin.certMismatch:f.needsRelogin.certInvalid})]}),(0,y.jsxs)(`div`,{className:`flex flex-col-reverse gap-2 md:flex-row md:justify-end`,children:[(0,y.jsx)(o,{variant:`outline`,onClick:e.cancel,className:x,children:`Cancel`}),(0,y.jsx)(o,{onClick:()=>e.relogin(n.mode),className:x,children:f.needsRelogin.action})]})]});case`login`:return(0,y.jsx)(d,{url:n.url,slow:n.slow,onCancel:e.cancelLogin});case`zone`:return(0,y.jsxs)(`p`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,y.jsx)(r,{className:`size-4 animate-spin`}),` Reading your Cloudflare domain…`]});case`submitting`:return(0,y.jsxs)(`p`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,children:[(0,y.jsx)(r,{className:`size-4 shrink-0 animate-spin`}),(0,y.jsxs)(`span`,{children:[`Setting up `,(0,y.jsxs)(`span`,{className:`break-all`,children:[`https://`,n.hostname]}),`… This takes a few seconds.`]})]});case`hostname`:return(0,y.jsxs)(`form`,{className:`space-y-4`,onSubmit:t=>{t.preventDefault(),e.submit()},children:[(0,y.jsxs)(`div`,{children:[(0,y.jsx)(`h4`,{className:`text-sm font-medium`,children:n.mode===`named`?`Review address on its own tunnel`:`Review address on PPM's tunnel`}),(0,y.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-muted-foreground`,children:n.mode===`named`?`PPM creates a Cloudflare tunnel for review links and points this name at it.`:`PPM adds this name to its tunnel, next to ${t?`https://${t}`:`its public link`}.`})]}),(0,y.jsx)(s,{zone:n.zone,prefix:n.prefix,error:n.error,onChange:e.setPrefix}),(0,y.jsxs)(`div`,{className:`flex flex-col-reverse gap-2 md:flex-row md:justify-end`,children:[(0,y.jsx)(o,{type:`button`,variant:`outline`,onClick:e.cancel,className:x,children:`Cancel`}),(0,y.jsx)(o,{type:`submit`,className:x,"data-testid":`review-links-submit`,children:`Set up`})]})]})}}export{p as a,v as i,C as n,w as r,T as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{A as r,G as i,Ut as a,Yr as o,en as s,g as c,gr as l,kn as u,ut as d}from"./icons-C1wDt09O.js";import{n as f}from"./utils-D3xTlJyU.js";import{r as p}from"./clipboard-D3XnL7CB.js";import{t as m}from"./button-BHGVTbam.js";import{t as h}from"./mobile-bottom-sheet-M9pZptfh.js";import{at as g,ot as _}from"./index-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{A as r,G as i,Ut as a,Yr as o,en as s,g as c,gr as l,kn as u,ut as d}from"./icons-C1wDt09O.js";import{n as f}from"./utils-D3xTlJyU.js";import{r as p}from"./clipboard-D3XnL7CB.js";import{t as m}from"./button-BHGVTbam.js";import{t as h}from"./mobile-bottom-sheet-M9pZptfh.js";import{at as g,ot as _}from"./index-Vd9Xr54k.js";import{t as v}from"./libesm-C9iw2_pm.js";import{n as y,r as b}from"./session-turns-DxIzWBNj.js";var x=e(t(),1),S=n(),C=`ppm:shiki-theme-change`;function w(e){let t=e.slice(Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`))+1).toLowerCase();if(t===`dockerfile`||t.endsWith(`.dockerfile`))return`docker`;if(t===`makefile`)return`make`;let n=t.lastIndexOf(`.`);return n>0?t.slice(n+1):void 0}function T(e,t){let[n,r]=(0,x.useState)(0);(0,x.useEffect)(()=>{let e=()=>r(e=>e+1);return window.addEventListener(C,e),()=>window.removeEventListener(C,e)},[]);let i=(0,x.useMemo)(()=>e.map(e=>_(e,t)),[...e,t,n]),a=i.some(e=>e===null);return(0,x.useEffect)(()=>{if(!a)return;let n=!1;return Promise.all(e.map(e=>g(e,t).catch(()=>null))).then(()=>{n||r(e=>e+1)}),()=>{n=!0}},[a,...e,t]),i}function E({text:e,tokens:t,span:n,spanClass:r}){let i=t&&t.reduce((e,t)=>e+t.content.length,0)===e.length?t:[{content:e}],a=[],o=0;return i.forEach((e,t)=>{let i=o;o+=e.content.length;let s=e.color||e.fontStyle?{color:e.color,fontStyle:e.fontStyle&&e.fontStyle&1?`italic`:void 0}:void 0;if(!n||o<=n[0]||i>=n[1]){a.push((0,S.jsx)(`span`,{style:s,children:e.content},t));return}let c=Math.max(n[0],i)-i,l=Math.min(n[1],o)-i;c>0&&a.push((0,S.jsx)(`span`,{style:s,children:e.content.slice(0,c)},`${t}a`)),a.push((0,S.jsx)(`span`,{style:s,className:r,children:e.content.slice(c,l)},`${t}b`)),l<e.content.length&&a.push((0,S.jsx)(`span`,{style:s,children:e.content.slice(l)},`${t}c`))}),(0,S.jsx)(S.Fragment,{children:a})}function D(e){return e?e.match(/[^\n]*\n|[^\n]+$/g)??[]:[]}function O(e){return e.endsWith(`\r
|
|
2
2
|
`)?e.slice(0,-2):e.endsWith(`
|
|
3
3
|
`)?e.slice(0,-1):e}function k(e){let t=3735928559,n=1103547991;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r);t=Math.imul(t^i,2654435761),n=Math.imul(n^i,1597334677)}return t=Math.imul(t^t>>>16,2246822507)^Math.imul(n^n>>>13,3266489909),n=Math.imul(n^n>>>16,2246822507)^Math.imul(t^t>>>13,3266489909),(4294967296*(2097151&n)+(t>>>0)).toString(36)}function ee(e,t,n={}){let r=n.context??3,i=v(e,t,{timeout:n.timeoutMs??200});if(!i)return null;let a=[],o=0,s=0,c=0,l=0;for(let e of i){let t=e.added?`+`:e.removed?`-`:` `;for(let n of D(e.value))a.push({k:t,line:n,o,n:s}),t!==`+`&&o++,t!==`-`&&s++,t===`+`&&c++,t===`-`&&l++}let u=[];a.forEach((e,t)=>{e.k!==` `&&u.push(t)});let d=[];for(let e=0;e<u.length;){let t=u[e],n=t,i=e+1;for(;i<u.length&&u[i]-n-1<=2*r;)n=u[i++];let o=Math.max(0,t-r),s=Math.min(a.length,n+r+1);d.push(A(a.slice(o,s))),e=i}return{blocks:d,additions:c,deletions:l,oldLines:o,newLines:s}}function A(e){let t=e[0],n=0,r=0,i=0,a=0,o=[];for(let t of e)t.k!==`+`&&n++,t.k!==`-`&&r++,t.k===`+`&&i++,t.k===`-`&&a++,o.push({k:t.k,text:O(t.line),o:t.k===`+`?null:t.o+1,n:t.k===`-`?null:t.n+1});return{key:`${t.o}.${k(e.map(e=>e.k+e.line).join(``))}`,oldFrom:t.o,oldTo:t.o+n,newFrom:t.n,newTo:t.n+r,rows:o,added:i,removed:a}}function j(e){let t=Number.parseInt(e,10);return Number.isFinite(t)?t:0}function M(e,t,n=200){let r=v(e,t,{timeout:n});if(!r)return null;let i=new Int32Array(D(e).length).fill(-1),a=0,o=0;for(let e of r){let t=D(e.value).length;if(e.added)o+=t;else if(e.removed)a+=t;else for(let e=0;e<t;e++)i[a++]=o++}return i}var N=(e,t)=>`${e}\0${t}`;function te(e){let t=new Map(e.files.map(e=>[e.path,e])),n=[];for(let r of e.order){let i=t.get(r),a=i?void 0:e.gone.get(r);if(!i&&!a)continue;let o=e.reverted.get(r)??[],s;if(i){s=i.blocks?i.blocks.map(e=>({key:e.key,state:e.kept?`kept`:`open`,at:j(e.key)})):[{key:`*`,state:i.reviewed?`kept`:`open`,at:0}];let e=new Map(s.map(e=>[e.key,e]));for(let t of o){if(t.base!==i.base)continue;let n=e.get(t.key);n?i.version===t.drawnVersion&&(n.state=`reverted`):s.push({key:t.key,state:`reverted`,at:t.oldFrom})}}else s=o.length?o.map(e=>({key:e.key,state:`reverted`,at:e.oldFrom})):[{key:`*`,state:`reverted`,at:0}];s.sort((e,t)=>e.at-t.at);let c=s.map(t=>({key:t.key,state:e.pending?.get(N(r,t.key))??t.state}));n.push({path:r,file:i??a.file,blocks:c,open:c.filter(e=>e.state===`open`).length,gone:!i})}return n}function ne(e){let t=0,n=0,r=0;for(let i of e)for(let e of i.blocks)e.state===`kept`?t++:e.state===`reverted`?n++:r++;return{total:t+n+r,kept:t,reverted:n,open:r}}function P(e){return[...e.filter(e=>e.open>0),...e.filter(e=>e.open===0)]}function re(e){let t=e.blocks.filter(e=>e.state===`kept`).length,n=e.blocks.length-t;return n?t?{tone:`mixed`,label:`${t} kept · ${n} reverted`}:{tone:`reverted`,label:`Reverted`}:{tone:`kept`,label:`Kept`}}function ie(e,t){if(e.length===0)return null;let n=t?Math.max(0,e.findIndex(e=>e.path===t.path)):0,r=e[n],i=t&&r.path===t.path?r.blocks.findIndex(e=>e.key===t.key):-1;for(let t=0;t<e.length;t++){let r=e[(n+t)%e.length],a=t===0?i+1:0;for(let e=a;e<r.blocks.length;e++)if(r.blocks[e].state===`open`)return{path:r.path,key:r.blocks[e].key}}for(let e=0;e<=i;e++)if(r.blocks[e].state===`open`)return{path:r.path,key:r.blocks[e].key};return null}function F(e,t,n){let r=P(e).flatMap(e=>e.blocks.map(t=>({path:e.path,key:t.key})));if(r.length===0)return null;let i=t?r.findIndex(e=>e.path===t.path&&e.key===t.key):-1;return i<0?r[n===1?0:r.length-1]:r[(i+n+r.length)%r.length]}function I(e){let t=e.blocks.find(e=>e.state===`open`)??e.blocks[0];return t?{path:e.path,key:t.key}:null}function L(e){let t=B(e.original,e.modified);if(!t)return null;let{diff:n,map:r}=t,i=[],a=[],o=new Map(e.reverted.map(e=>[e.key,e])),s=new Set;for(let t of n.blocks){s.add(t.key);let n=o.get(t.key),r=e.kept.has(t.key)?`kept`:`open`,c=e.calls?.get(t.key)??n?.calls;n&&(n.drawnVersion===e.version?r=`reverted`:a.push(n.key)),i.push({key:t.key,rows:t.rows,state:r,added:t.added,removed:t.removed,oldFrom:t.oldFrom,oldTo:t.oldTo,start:t.newFrom,end:t.newTo,...n?.drawnVersion===e.version&&n.undoId?{undoId:n.undoId}:{},...c?{calls:c}:{}})}for(let t of e.reverted){if(s.has(t.key))continue;let n=t.base===e.base?V(t,r,e.original):-1,o=n+(t.oldTo-t.oldFrom);if(n<0||i.some(e=>e.start<o&&n<e.end)){a.push(t.key);continue}i.push({key:t.key,rows:t.rows,state:`reverted`,added:t.added,removed:t.removed,oldFrom:t.oldFrom,oldTo:t.oldTo,start:n,end:o,...t.undoId?{undoId:t.undoId}:{},...t.calls?{calls:t.calls}:{}})}i.sort((e,t)=>e.start-t.start||e.end-t.end);let c=[],l=0;return i.forEach(({start:t,end:n,...r},i)=>{t>l&&c.push({kind:`gap`,from:l,to:t}),c.push({kind:`block`,...r,state:e.pending?.get(r.key)??r.state,index:i}),l=Math.max(l,n)}),l<n.newLines&&c.push({kind:`gap`,from:l,to:n.newLines}),{items:c,lines:t.lines,baseLine:t.baseLine,total:i.length,stale:a}}var R=[],z=4;function B(e,t){let n=R.find(n=>n.original===e&&n.modified===t);if(n)return n.cut;let r=ee(e,t),i=r&&M(e,t),a=null;if(r&&i){let n=new Int32Array(r.newLines);i.forEach((e,t)=>{e>=0&&(n[e]=t+1)}),a={original:e,modified:t,diff:r,map:i,lines:D(t).map(e=>e.replace(/\r?\n$/,``)),baseLine:n}}return R.unshift({original:e,modified:t,cut:a}),R.length=Math.min(R.length,z),a}function V(e,t,n){if(e.oldFrom===e.oldTo)return n===``?0:-1;let r=t[e.oldFrom]??-1;if(r<0)return-1;for(let n=e.oldFrom;n<e.oldTo;n++)if(t[n]!==r+n-e.oldFrom)return-1;return r}function H(e,t){return t===`kept`?e.filter(e=>e.k!==`-`):t===`reverted`?e.filter(e=>e.k!==`+`):[...e]}var U=/[\w$]/;function W(e){let t=e.map(()=>null),n=0;for(;n<e.length;){if(e[n].k!==`-`){n++;continue}let r=n;for(;n<e.length&&e[n].k===`-`;)n++;let i=n;for(;n<e.length&&e[n].k===`+`;)n++;for(let a=0;a<Math.min(i-r,n-i);a++){let n=e[r+a].text,o=e[i+a].text,s=0;for(;s<n.length&&s<o.length&&n[s]===o[s];)s++;for(;s>0&&U.test(n[s-1]);)s--;let c=0;for(;c<n.length-s&&c<o.length-s&&n[n.length-1-c]===o[o.length-1-c];)c++;for(;c>0&&U.test(n[n.length-c]);)c--;n.length-c>s&&(t[r+a]=[s,n.length-c]),o.length-c>s&&(t[i+a]=[s,o.length-c])}}return t}function G(e,t){let n=[];for(let r of e??[]){let e=t.get(r);e&&!n.some(t=>t.turn===e)&&n.push({turn:e,call:r})}return n.sort((e,t)=>Date.parse(e.turn.at)-Date.parse(t.turn.at))}var K=(e,t)=>e.length===t.length&&e.every((e,n)=>e.turn===t[n].turn&&e.call===t[n].call),q=200;function J({children:e,className:t}){return(0,S.jsx)(`kbd`,{className:f(`inline-grid h-4 min-w-4 place-items-center rounded border border-b-2 border-border bg-panel px-1 font-mono text-[10px] font-medium leading-none text-text-2`,t),children:e})}function ae({file:e,model:t,focusKey:n,compact:r,lang:i,turns:o,actions:c}){let l=(0,x.useRef)(null),u=(0,x.useRef)(c);u.current=c;let[d,p]=(0,x.useState)(new Map),m=e.path.slice(Math.max(e.path.lastIndexOf(`/`),e.path.lastIndexOf(`\\`))+1),[g,_]=(0,x.useState)(null),v=(0,x.useMemo)(()=>{let e=new Map;for(let n of t.items)n.kind===`block`&&e.set(n.key,G(n.calls,o));return e},[t.items,o]),y=(0,x.useCallback)((e,t)=>{_(n=>n?.key===e&&n.chip.turn.messageId===t.turn.messageId?null:{key:e,chip:t})},[]),b=(0,x.useCallback)(()=>_(null),[]);return(0,x.useEffect)(()=>{if(!g||r)return;let e=e=>{e.target.closest(`[data-turn-pop], [data-turn-chip]`)||_(null)},t=e=>{e.key===`Escape`&&(e.preventDefault(),_(null))};return document.addEventListener(`pointerdown`,e,!0),document.addEventListener(`keydown`,t,!0),()=>{document.removeEventListener(`pointerdown`,e,!0),document.removeEventListener(`keydown`,t,!0)}},[g,r]),(0,x.useLayoutEffect)(()=>{let e=l.current,t=n?e?.querySelector(`[data-block-key="${CSS.escape(n)}"]`):null;if(!e||!t)return;let r=t.offsetTop-12,i=t.offsetTop+Math.min(t.offsetHeight,e.clientHeight-40);(r<e.scrollTop||i>e.scrollTop+e.clientHeight)&&(e.scrollTop=r)},[n,t.total]),(0,S.jsxs)(`div`,{ref:l,"data-testid":`review-code`,className:f(`relative min-h-0 flex-1 overflow-auto bg-bg font-mono [tab-size:4]`,r?`pt-2 pb-3 text-[11px] leading-[1.65]`:`pt-2.5 pb-6 text-[12px] leading-[1.7]`),children:[e.sinceReview?(0,S.jsx)(Z,{icon:(0,S.jsx)(s,{className:`size-3.5 text-accent-2`}),tint:`var(--accent-2)`,compact:r,children:`You reviewed this file before; only what changed after that is open again.`}):e.baseline===`head`&&(0,S.jsxs)(Z,{icon:(0,S.jsx)(a,{className:`size-3.5 text-warning`}),tint:`var(--warning)`,compact:r,children:[`This chat kept no copy of `,(0,S.jsx)(`b`,{className:`font-semibold text-text`,children:m}),` from before it changed it, so these blocks compare with the last commit.`]}),t.items.map(e=>e.kind===`gap`?(0,S.jsx)(se,{from:e.from,to:e.to,model:t,shown:d.get(e.from)??0,compact:r,lang:i,onOpen:t=>p(n=>new Map(n).set(e.from,t))},`gap:${e.from}`):(0,S.jsx)(ce,{item:e,total:t.total,focused:e.key===n,compact:r,lang:i,chips:v.get(e.key)??Y,openTurn:!r&&g?.key===e.key?g.chip:null,onTurn:y,onCloseTurn:b,act:u},`block:${e.key}`)),r&&(0,S.jsx)(h,{open:!!g,onClose:b,children:g&&(0,S.jsx)(X,{chip:g.chip,compact:!0,onClose:b,act:u})})]})}var Y=[];function X({chip:e,compact:t,onClose:n,act:i}){let{turn:a,call:o}=e,[s,l]=(0,x.useState)(!1);(0,x.useEffect)(()=>{if(!s)return;let e=setTimeout(()=>l(!1),1500);return()=>clearTimeout(e)},[s]);let h=b(a.at);return(0,S.jsxs)(`div`,{"data-turn-pop":!0,onClick:e=>e.stopPropagation(),className:f(`font-sans text-text-2`,t?`px-4 pb-1 text-sm`:`text-[12.5px] leading-normal`),children:[(0,S.jsxs)(`h5`,{className:f(`m-0 mb-1.5 flex items-center gap-2 font-semibold text-text`,t?`text-[15px]`:`text-[13px]`),children:[(0,S.jsx)(u,{className:t?`size-5`:`size-4`}),y(a),h&&` · ${h}`]}),(0,S.jsx)(`blockquote`,{className:f(`m-0 mb-2.5 overflow-y-auto whitespace-pre-wrap rounded-r-md border-l-2 border-primary bg-[color-mix(in_srgb,var(--text)_5%,transparent)] px-2.5 py-2 leading-[1.45] text-text [overflow-wrap:anywhere]`,t?`max-h-[40vh] text-sm`:`max-h-48 text-[13px]`),children:a.prompt||(0,S.jsx)(`span`,{className:`text-text-subtle`,children:`No text — the prompt was only attachments.`})}),(0,S.jsxs)(`div`,{className:f(`flex justify-end gap-1.5`,t&&`gap-2`),children:[(0,S.jsxs)(m,{variant:t?`outline`:`ghost`,size:t?`lg`:`sm`,className:f(t&&`h-11 flex-1`),onClick:()=>void p(a.prompt).then(e=>e&&l(!0)),children:[s?(0,S.jsx)(r,{}):(0,S.jsx)(d,{}),s?`Copied`:`Copy prompt`]}),(0,S.jsxs)(m,{size:t?`lg`:`sm`,className:f(t&&`h-11 flex-1`),onClick:()=>{n(),i.current.showInChat(a,o)},children:[`Show in chat`,(0,S.jsx)(c,{})]})]})]})}function Z({icon:e,tint:t,compact:n,children:r}){return(0,S.jsxs)(`div`,{className:f(`mb-1.5 flex items-center gap-2 rounded-lg px-3 py-2 font-sans text-xs leading-[1.45] text-text-2`,n?`mx-2 ml-1.5`:`mx-3 ml-2`),style:{background:`color-mix(in srgb, ${t} 9%, transparent)`},children:[(0,S.jsx)(`span`,{className:`shrink-0`,children:e}),(0,S.jsx)(`span`,{children:r})]})}var oe=(e,t)=>`${e} ${t}${e===1?``:`s`}`;function se({from:e,to:t,model:n,shown:r,compact:a,lang:o,onOpen:s}){let c=(0,x.useMemo)(()=>{let i=[];for(let a=e;a<e+r&&a<t;a++)i.push({k:` `,text:n.lines[a]??``,o:n.baseLine[a]||null,n:a+1});return i},[e,t,r,n]),l=t-e-r,u=l<=q*1.5?l:q;return(0,S.jsxs)(S.Fragment,{children:[c.length>0&&(0,S.jsx)(`div`,{className:a?`pr-[9px] pl-[7px]`:`pr-[13px] pl-[9px]`,children:(0,S.jsx)($,{rows:c,state:`kept`,compact:a,lang:o,plain:!0})}),l>0&&(0,S.jsxs)(`div`,{className:f(`my-0.5 flex items-center gap-2 font-sans text-[11.5px] font-medium text-text-subtle`,a?`min-h-11 pl-[34px]`:`h-[26px] pl-[50px]`),children:[(0,S.jsx)(`span`,{className:`h-px w-3 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`}),(0,S.jsxs)(`button`,{type:`button`,title:u<l?`Show the next ${u}`:void 0,onClick:()=>s(r+u),className:f(`inline-flex items-center gap-1.5 whitespace-nowrap rounded-[5px] px-1.5 text-text-subtle hover:bg-surface-hover hover:text-text`,a?`h-11`:`h-[22px]`),children:[(0,S.jsx)(i,{className:`size-3.5`}),oe(l,r?`more unchanged line`:`unchanged line`)]}),(0,S.jsx)(`span`,{className:f(`h-px flex-1 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`,a?`mr-2.5`:`mr-3.5`)})]})]})}var Q=`inline-flex h-7 items-center gap-1.5 whitespace-nowrap rounded-[7px] border pl-2.5 text-[12.5px] font-medium transition-colors`,ce=(0,x.memo)(function({item:e,total:t,focused:n,compact:i,lang:a,chips:o,openTurn:s,onTurn:c,onCloseTurn:d,act:p}){let m=e.state===`open`,h=e.state===`kept`,g=`${e.index+1} of ${t}`,_=o.map(t=>{let n=s?.turn===t.turn,r=b(t.turn.at);return(0,S.jsxs)(`button`,{type:`button`,"data-turn-chip":!0,"aria-expanded":n,title:t.turn.prompt,onClick:()=>c(e.key,t),className:f(`relative inline-flex h-6 items-center gap-[5px] whitespace-nowrap rounded-md border px-[7px] text-[11.5px] text-text-2`,`pointer-coarse:before:absolute pointer-coarse:before:inset-x-0 pointer-coarse:before:-inset-y-[11px] pointer-coarse:before:content-['']`,n?`border-border bg-panel-2 text-text`:`border-border-soft bg-bg hover:border-border hover:bg-panel-2 hover:text-text`),children:[(0,S.jsx)(u,{className:`size-3`}),(0,S.jsx)(`b`,{className:`font-semibold text-text`,children:y(t.turn)}),r&&(0,S.jsxs)(`span`,{children:[`· `,r]})]},t.turn.messageId)});return(0,S.jsxs)(`div`,{"data-block-key":e.key,"data-state":e.state,"data-focused":n||void 0,onClick:t=>{!n&&!t.target.closest(`button`)&&p.current.focus(e.key)},className:f(`relative my-1.5 rounded-[10px] border border-border-soft bg-bg`,i?`mr-2 ml-1.5`:`mr-3 ml-2`,!m&&`border-dashed`,n?`border-primary/60 shadow-[0_0_0_3px_var(--accent-wash)]`:`cursor-pointer`),children:[(0,S.jsxs)(`div`,{className:f(`relative flex flex-wrap items-center gap-x-2 gap-y-1.5 rounded-t-[9px] py-1 pr-1.5 pl-2.5 font-sans text-xs leading-[1.3] text-text-subtle`,m?`min-h-9 border-b border-border-soft`:`min-h-[30px]`,m&&(n?`bg-[color-mix(in_srgb,var(--accent)_7%,var(--panel))]`:`bg-panel`)),children:[m?(0,S.jsxs)(`span`,{children:[(0,S.jsxs)(`b`,{className:`font-semibold text-text-2`,children:[`Block `,e.index+1]}),` of `,t]}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`span`,{className:f(`inline-flex items-center gap-1 font-semibold`,h?`text-primary`:`text-error`),children:[h?(0,S.jsx)(r,{className:`size-3.5`}):(0,S.jsx)(l,{className:`size-3.5`}),h?`Kept`:`Reverted`]}),(0,S.jsxs)(`span`,{children:[`· block `,g]})]}),_,(0,S.jsx)(`span`,{className:`flex-1`}),!i&&(m?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`button`,{type:`button`,title:`Put these lines back (N)`,onClick:()=>p.current.revert(e.key),className:f(Q,n?`pr-1.5`:`pr-2.5`,`border-border bg-bg text-text hover:border-error/50 hover:text-error`),children:[(0,S.jsx)(l,{className:`size-3.5`}),`Revert`,n&&(0,S.jsx)(J,{children:`N`})]}),(0,S.jsxs)(`button`,{type:`button`,title:`Keep this change (Y)`,onClick:()=>p.current.keep(e.key),className:f(Q,n?`pr-1.5`:`pr-2.5`,`border-transparent bg-primary text-primary-foreground hover:bg-primary/90`),children:[(0,S.jsx)(r,{className:`size-3.5`}),`Keep`,n&&(0,S.jsx)(J,{className:`border-white/30 bg-white/15 text-inherit`,children:`Y`})]})]}):(0,S.jsx)(le,{item:e,act:p})),s&&(0,S.jsx)(`div`,{className:`absolute top-full left-2 z-40 mt-1 w-[330px] max-w-[calc(100%-24px)] rounded-xl border border-border bg-panel-2 p-3.5 shadow-[0_18px_40px_-16px_rgba(0,0,0,.6)]`,children:(0,S.jsx)(X,{chip:s,compact:!1,onClose:d,act:p})})]}),(0,S.jsx)(`div`,{className:f(`overflow-hidden rounded-b-[9px]`,h&&`shadow-[inset_2px_0_0_color-mix(in_srgb,var(--accent)_75%,transparent)]`,e.state===`reverted`&&`shadow-[inset_2px_0_0_color-mix(in_srgb,var(--error)_60%,transparent)]`),children:(0,S.jsx)($,{rows:e.rows,state:e.state,compact:i,lang:a})})]})},(e,t)=>e.item.key===t.item.key&&e.item.state===t.item.state&&e.item.rows===t.item.rows&&e.item.index===t.item.index&&e.item.undoId===t.item.undoId&&e.total===t.total&&e.focused===t.focused&&e.compact===t.compact&&e.lang===t.lang&&K(e.chips,t.chips)&&e.openTurn===t.openTurn&&e.onTurn===t.onTurn);function le({item:e,act:t}){let n=e.state===`reverted`;return(0,S.jsxs)(`button`,{type:`button`,disabled:n&&!e.undoId,title:n?`Put back what the agent wrote here`:`Open this block again`,onClick:()=>n?e.undoId&&t.current.undo(e.undoId,e.key):t.current.reopen(e.key),className:`inline-flex h-6 items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 text-[11.5px] font-medium text-text-2 hover:bg-surface-hover hover:text-text disabled:opacity-50`,children:[(0,S.jsx)(o,{className:`size-3.5`}),`Change`]})}function $({rows:e,state:t,compact:n,lang:r,plain:i}){let[a,o]=T([(0,x.useMemo)(()=>e.filter(e=>e.k!==`+`).map(e=>e.text).join(`
|
|
4
4
|
`),[e]),(0,x.useMemo)(()=>e.filter(e=>e.k!==`-`).map(e=>e.text).join(`
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./panel-store-
|
|
1
|
+
import{t as e}from"./panel-store-H7e9XHZF.js";var t=`ppm:run-in-terminal`,n=`ppm:run-in-terminal:ack`;function r(e){return e.replace(/^[ \t]*\$[ \t]+/gm,``).replace(/\s+$/,``)}function i(i,a){let o=r(i);if(!o)return;let s=!1,c=()=>{s=!0};window.addEventListener(n,c),window.dispatchEvent(new CustomEvent(t,{detail:{command:o,projectName:a}})),window.removeEventListener(n,c),!s&&e.getState().openInDock({type:`terminal`,title:`Terminal`,projectId:a??null,closable:!0,metadata:{...a?{projectName:a}:{},pendingCommand:o}})}export{t as n,i as r,n as t};
|
package/dist/web/assets/{run-in-terminal-button-CsYq6Xqo.js → run-in-terminal-button-Bu165IH-.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{Ur as t}from"./icons-C1wDt09O.js";import{t as n}from"./button-BHGVTbam.js";import{r}from"./run-in-terminal-
|
|
1
|
+
import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{Ur as t}from"./icons-C1wDt09O.js";import{t as n}from"./button-BHGVTbam.js";import{r}from"./run-in-terminal-DAdjH24K.js";var i=e();function a({command:e,label:a,onRun:o,variant:s=`default`}){return(0,i.jsxs)(n,{variant:s,title:e,onClick:()=>{o?.(),r(e)},className:`min-h-11 cursor-pointer md:min-h-9`,children:[(0,i.jsx)(t,{className:`size-4`}),a]})}export{a as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{i as r}from"./project-store-Bs-kiU8m.js";import{t as i}from"./button-BHGVTbam.js";import{a,i as o,n as s,o as c,t as l}from"./dialog-DnE192fh.js";import{t as u}from"./input-CReAuQTF.js";import{
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{i as r}from"./project-store-Bs-kiU8m.js";import{t as i}from"./button-BHGVTbam.js";import{a,i as o,n as s,o as c,t as l}from"./dialog-DnE192fh.js";import{t as u}from"./input-CReAuQTF.js";import{gn as d}from"./index-Vd9Xr54k.js";var f=e(t(),1),p=n();function m({open:e,defaultName:t,content:n,onSave:m,onCancel:h}){let[g,_]=(0,f.useState)(t),[v,y]=(0,f.useState)(!1),[b,x]=(0,f.useState)(``),S=r(e=>e.activeProject),C=(0,f.useCallback)(()=>{let e=g.trim();if(!e){x(`Filename cannot be empty`);return}if(/[/\\]/.test(e)){x(`Filename cannot contain / or \\`);return}x(``),y(!0)},[g]),w=(0,f.useCallback)(e=>{let t=e.includes(`\\`)?`\\`:`/`;m(e.endsWith(t)?`${e}${g.trim()}`:`${e}${t}${g.trim()}`,n)},[g,n,m]);return v?(0,p.jsx)(d,{open:!0,mode:`folder`,root:S?.path,title:`Save "${g.trim()}" to...`,onSelect:w,onCancel:()=>y(!1)}):(0,p.jsx)(l,{open:e,onOpenChange:e=>{e||h()},children:(0,p.jsxs)(s,{className:`sm:max-w-md`,children:[(0,p.jsx)(a,{children:(0,p.jsx)(c,{children:`Save As`})}),(0,p.jsxs)(`div`,{className:`flex flex-col gap-2 py-2`,children:[(0,p.jsx)(`label`,{className:`text-sm text-muted-foreground`,children:`Filename`}),(0,p.jsx)(u,{value:g,onChange:e=>{_(e.target.value),x(``)},onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:`e.g. my-file.ts`,autoFocus:!0}),b&&(0,p.jsx)(`p`,{className:`text-xs text-destructive`,children:b})]}),(0,p.jsxs)(o,{children:[(0,p.jsx)(i,{variant:`outline`,onClick:h,children:`Cancel`}),(0,p.jsx)(i,{onClick:C,children:`Choose Folder...`})]})]})})}export{m as t};
|
|
Binary file
|
|
Binary file
|
package/dist/web/assets/{schedule-script-editor-CKUl2qxf.js → schedule-script-editor--roOsFbc.js}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{vt as r}from"./vendor-ui-BTSIXzhZ.js";import{Dn as i}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./settings-store-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{vt as r}from"./vendor-ui-BTSIXzhZ.js";import{Dn as i}from"./icons-C1wDt09O.js";import"./api-client-BnYFnEfK.js";import"./settings-store-CMpVMq3Y.js";import{n as a}from"./portal-container-context-Gepuvxdg.js";import{n as o}from"./use-is-mobile-CL2I7hLf.js";import{t as s}from"./button-BHGVTbam.js";import{$ as c,et as l}from"./index-Vd9Xr54k.js";import{t as u}from"./use-monaco-theme-CbNQ4HnC.js";var d=e(t(),1),f=e(r(),1),p=n(),m=8;function h({value:e,onChange:t,readOnly:n=!1,title:r=`Script`}){let h=o(),g=u(),_=a(),[v,y]=(0,d.useState)(!1),b=r=>(0,p.jsx)(l,{beforeMount:c,height:r,language:`javascript`,theme:g,value:e,onChange:e=>t?.(e??``),options:{readOnly:n,minimap:{enabled:!1},fontSize:13,tabSize:2,wordWrap:`on`,scrollBeyondLastLine:!1,lineNumbers:h?`off`:`on`}}),x=e.split(`
|
|
2
2
|
`);return(0,p.jsxs)(p.Fragment,{children:[h?(0,p.jsxs)(`button`,{type:`button`,onClick:()=>y(!0),className:`w-full rounded-md border border-border text-left cursor-pointer active:bg-accent/30`,children:[(0,p.jsx)(`pre`,{className:`px-3 py-2 text-[11px] font-mono text-muted-foreground whitespace-pre-wrap break-all line-clamp-[8]`,children:x.slice(0,m).join(`
|
|
3
3
|
`)}),(0,p.jsx)(`span`,{className:`block border-t border-border px-3 py-3 text-xs font-medium text-primary`,children:n?`Read all ${x.length} line${x.length===1?``:`s`}`:`Edit script`})]}):(0,p.jsxs)(`div`,{className:`rounded-md border border-border overflow-hidden`,children:[(0,p.jsx)(`div`,{className:`flex justify-end border-b border-border px-1 py-0.5`,children:(0,p.jsxs)(s,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>y(!0),className:`h-7 px-2 text-[11px] gap-1 cursor-pointer`,children:[(0,p.jsx)(i,{className:`size-3`}),` Full screen`]})}),b(`320px`)]}),v&&(0,f.createPortal)((0,p.jsxs)(`div`,{className:`fixed inset-0 z-[70] flex flex-col bg-background`,role:`dialog`,"aria-label":r,children:[(0,p.jsxs)(`p`,{className:`shrink-0 border-b border-border px-4 py-3 text-sm font-semibold`,children:[r,n&&(0,p.jsx)(`span`,{className:`ml-2 text-xs font-normal text-muted-foreground`,children:`read only`})]}),(0,p.jsx)(`div`,{className:`min-h-0 flex-1`,children:b(`100%`)}),(0,p.jsx)(`div`,{className:`shrink-0 border-t border-border p-3 pb-[max(0.75rem,env(safe-area-inset-bottom))]`,children:(0,p.jsx)(s,{type:`button`,onClick:()=>y(!1),className:`w-full min-h-11 cursor-pointer`,children:`Done`})})]}),_??document.body)]})}export{h as ScheduleScriptEditor};
|
|
Binary file
|
|
Binary file
|