@hienlh/ppm 0.23.11 → 0.23.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/CLAUDE.md +13 -2
  3. package/assets/skills/ppm/SKILL.md +1 -1
  4. package/assets/skills/ppm/references/cli-reference.md +4 -4
  5. package/assets/skills/ppm/references/http-api.md +37 -1
  6. package/bun.lock +34 -0
  7. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js +1 -0
  8. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.br +0 -0
  9. package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.gz +0 -0
  10. package/dist/web/assets/{agent-session-sheet-CBMsnl_p.js → agent-session-sheet-vBhfHYrC.js} +2 -2
  11. package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.br +0 -0
  12. package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.gz +0 -0
  13. package/dist/web/assets/{agent-session-window-content-D9C9FA7E.js → agent-session-window-content-BxIxDN5i.js} +1 -1
  14. package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.br +0 -0
  15. package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.gz +0 -0
  16. package/dist/web/assets/{ai-resource-editor-DhUVgDEG.js → ai-resource-editor-Y8clBPRv.js} +1 -1
  17. package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.br +0 -0
  18. package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.gz +0 -0
  19. package/dist/web/assets/{ai-settings-section-DOckWvp4.js → ai-settings-section-BB8vscte.js} +1 -1
  20. package/dist/web/assets/{ai-settings-section-CETpSpYd.js → ai-settings-section-Ck8uN_Bw.js} +1 -1
  21. package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.br +0 -0
  22. package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.gz +0 -0
  23. package/dist/web/assets/android-tab-BIOUVVoW.js +2 -0
  24. package/dist/web/assets/android-tab-BIOUVVoW.js.br +0 -0
  25. package/dist/web/assets/android-tab-BIOUVVoW.js.gz +0 -0
  26. package/dist/web/assets/{api-settings-JIgKfcCx.js → api-settings-D1axn9vm.js} +1 -1
  27. package/dist/web/assets/{appearance-settings-section-BJUiLUb7.js → appearance-settings-section-Bv5_n9lH.js} +1 -1
  28. package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.br +0 -0
  29. package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.gz +0 -0
  30. package/dist/web/assets/{apps-panel-1VElRgV3.js → apps-panel-DXHF0QEv.js} +1 -1
  31. package/dist/web/assets/apps-panel-DXHF0QEv.js.br +0 -0
  32. package/dist/web/assets/apps-panel-DXHF0QEv.js.gz +0 -0
  33. package/dist/web/assets/{audio-preview-DYkyHu5X.js → audio-preview-DpjOKEm4.js} +1 -1
  34. package/dist/web/assets/audio-preview-DpjOKEm4.js.br +0 -0
  35. package/dist/web/assets/audio-preview-DpjOKEm4.js.gz +0 -0
  36. package/dist/web/assets/branch-review-tab-4dgMNadQ.js +1 -0
  37. package/dist/web/assets/branch-review-tab-4dgMNadQ.js.br +0 -0
  38. package/dist/web/assets/branch-review-tab-4dgMNadQ.js.gz +0 -0
  39. package/dist/web/assets/chat-tab-Bbe_77oJ.js +15 -0
  40. package/dist/web/assets/chat-tab-Bbe_77oJ.js.br +0 -0
  41. package/dist/web/assets/chat-tab-Bbe_77oJ.js.gz +0 -0
  42. package/dist/web/assets/chat-tab-D3i5O3dO.js +1 -0
  43. package/dist/web/assets/chat-tab-D3i5O3dO.js.br +0 -0
  44. package/dist/web/assets/chat-tab-D3i5O3dO.js.gz +0 -0
  45. package/dist/web/assets/code-editor-DXsIWoQ1.js +7 -0
  46. package/dist/web/assets/code-editor-DXsIWoQ1.js.br +0 -0
  47. package/dist/web/assets/code-editor-DXsIWoQ1.js.gz +0 -0
  48. package/dist/web/assets/{codex-reset-credit-button-Fr45FUxi.js → codex-reset-credit-button-DRhievFQ.js} +1 -1
  49. package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.br +0 -0
  50. package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.gz +0 -0
  51. package/dist/web/assets/{conflict-editor-B-wdjSXI.js → conflict-editor-D_RImo_V.js} +3 -3
  52. package/dist/web/assets/conflict-editor-D_RImo_V.js.br +0 -0
  53. package/dist/web/assets/conflict-editor-D_RImo_V.js.gz +0 -0
  54. package/dist/web/assets/{csv-preview-B6RodObB.js → csv-preview-BuFdfLo3.js} +1 -1
  55. package/dist/web/assets/csv-preview-BuFdfLo3.js.br +0 -0
  56. package/dist/web/assets/csv-preview-BuFdfLo3.js.gz +0 -0
  57. package/dist/web/assets/{database-viewer-CdPBUQPY.js → database-viewer-ChcbYn9E.js} +1 -1
  58. package/dist/web/assets/database-viewer-ChcbYn9E.js.br +0 -0
  59. package/dist/web/assets/database-viewer-ChcbYn9E.js.gz +0 -0
  60. package/dist/web/assets/{design-settings-section-BpCpaBwL.js → design-settings-section-B_xOf51h.js} +1 -1
  61. package/dist/web/assets/design-settings-section-B_xOf51h.js.br +0 -0
  62. package/dist/web/assets/design-settings-section-B_xOf51h.js.gz +0 -0
  63. package/dist/web/assets/{design-skill-suggestion-DkT2E2IV.js → design-skill-suggestion-BbEDg15Z.js} +1 -1
  64. package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.br +0 -0
  65. package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.gz +0 -0
  66. package/dist/web/assets/{design-tab-BZb9eemI.js → design-tab-BQSYJ4cS.js} +6 -6
  67. package/dist/web/assets/design-tab-BQSYJ4cS.js.br +0 -0
  68. package/dist/web/assets/design-tab-BQSYJ4cS.js.gz +0 -0
  69. package/dist/web/assets/{designs-sidebar-panel-CF4tp6j-.js → designs-sidebar-panel-AiPaYfSU.js} +1 -1
  70. package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.br +0 -0
  71. package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.gz +0 -0
  72. package/dist/web/assets/{diff-viewer-BqEqwSw6.js → diff-viewer-BZ6glGK-.js} +1 -1
  73. package/dist/web/assets/diff-viewer-BZ6glGK-.js.br +0 -0
  74. package/dist/web/assets/diff-viewer-BZ6glGK-.js.gz +0 -0
  75. package/dist/web/assets/{edit-diff-preview-DD4HayXY.js → edit-diff-preview-D-FNLOU2.js} +1 -1
  76. package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.br +0 -0
  77. package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.gz +0 -0
  78. package/dist/web/assets/{editor-language-service-CkA5sEdV.js → editor-language-service-4sbsdqBV.js} +1 -1
  79. package/dist/web/assets/editor-language-service-4sbsdqBV.js.br +0 -0
  80. package/dist/web/assets/editor-language-service-4sbsdqBV.js.gz +0 -0
  81. package/dist/web/assets/explorer-body-DbgrG1fe.js +2 -0
  82. package/dist/web/assets/explorer-body-DbgrG1fe.js.br +0 -0
  83. package/dist/web/assets/explorer-body-DbgrG1fe.js.gz +0 -0
  84. package/dist/web/assets/{explorer-window-content-CRJ2eMZ4.js → explorer-window-content-BCjWvHpp.js} +1 -1
  85. package/dist/web/assets/explorer-window-content-BCjWvHpp.js.br +0 -0
  86. package/dist/web/assets/explorer-window-content-BCjWvHpp.js.gz +0 -0
  87. package/dist/web/assets/{extension-manager-section-DwQTdCII.js → extension-manager-section-DiMF4RnT.js} +1 -1
  88. package/dist/web/assets/extension-manager-section-DiMF4RnT.js.br +0 -0
  89. package/dist/web/assets/extension-manager-section-DiMF4RnT.js.gz +0 -0
  90. package/dist/web/assets/{extension-webview-CMq-VTLu.js → extension-webview-Coti6Vfw.js} +1 -1
  91. package/dist/web/assets/extension-webview-Coti6Vfw.js.br +0 -0
  92. package/dist/web/assets/extension-webview-Coti6Vfw.js.gz +0 -0
  93. package/dist/web/assets/file-store-Cm7-pHux.js +1 -0
  94. package/dist/web/assets/file-store-Cm7-pHux.js.br +0 -0
  95. package/dist/web/assets/file-store-Cm7-pHux.js.gz +0 -0
  96. package/dist/web/assets/{files-settings-section-B2lcyh-6.js → files-settings-section-ZTVwOwx0.js} +1 -1
  97. package/dist/web/assets/files-settings-section-ZTVwOwx0.js.br +0 -0
  98. package/dist/web/assets/files-settings-section-ZTVwOwx0.js.gz +0 -0
  99. package/dist/web/assets/{general-settings-section-Doepm2sH.js → general-settings-section-B7Hjx_fb.js} +1 -1
  100. package/dist/web/assets/general-settings-section-B7Hjx_fb.js.br +0 -0
  101. package/dist/web/assets/general-settings-section-B7Hjx_fb.js.gz +0 -0
  102. package/dist/web/assets/{git-log-panel-CJakNMDc.js → git-log-panel-CbcJ_YEH.js} +1 -1
  103. package/dist/web/assets/git-log-panel-CbcJ_YEH.js.br +0 -0
  104. package/dist/web/assets/git-log-panel-CbcJ_YEH.js.gz +0 -0
  105. package/dist/web/assets/{glide-data-grid-C_SeOhSq.js → glide-data-grid-BfByGSf1.js} +3 -3
  106. package/dist/web/assets/glide-data-grid-BfByGSf1.js.br +0 -0
  107. package/dist/web/assets/glide-data-grid-BfByGSf1.js.gz +0 -0
  108. package/dist/web/assets/group-chat-tab-DCo9OP3D.js +1 -0
  109. package/dist/web/assets/group-chat-tab-DCo9OP3D.js.br +0 -0
  110. package/dist/web/assets/group-chat-tab-DCo9OP3D.js.gz +0 -0
  111. package/dist/web/assets/{image-preview-C1Frlx22.js → image-preview-Cjlps7Pt.js} +1 -1
  112. package/dist/web/assets/index-CyDLBddf.js +52 -0
  113. package/dist/web/assets/index-CyDLBddf.js.br +0 -0
  114. package/dist/web/assets/index-CyDLBddf.js.gz +0 -0
  115. package/dist/web/assets/index-Dh5apC3I.css +1 -0
  116. package/dist/web/assets/index-Dh5apC3I.css.br +0 -0
  117. package/dist/web/assets/index-Dh5apC3I.css.gz +0 -0
  118. package/dist/web/assets/{jira-watcher-section-BmkIGQFV.js → jira-watcher-section-Dz_-sUC2.js} +1 -1
  119. package/dist/web/assets/keybindings-store-BTq5Z7XP.js +1 -0
  120. package/dist/web/assets/{keyboard-shortcuts-section-BgZe3QDr.js → keyboard-shortcuts-section-Ba5NYwlG.js} +1 -1
  121. package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.br +0 -0
  122. package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.gz +0 -0
  123. package/dist/web/assets/{language-servers-section-CCMzgOaE.js → language-servers-section-DJJ7SFXo.js} +2 -2
  124. package/dist/web/assets/language-servers-section-DJJ7SFXo.js.br +0 -0
  125. package/dist/web/assets/language-servers-section-DJJ7SFXo.js.gz +0 -0
  126. package/dist/web/assets/{lsp-client-B10suuaZ.js → lsp-client-Dr3vQ1bb.js} +1 -1
  127. package/dist/web/assets/lsp-client-Dr3vQ1bb.js.br +0 -0
  128. package/dist/web/assets/lsp-client-Dr3vQ1bb.js.gz +0 -0
  129. package/dist/web/assets/{markdown-renderer-AHHFS3jc.js → markdown-renderer-CmnqFfTU.js} +3 -3
  130. package/dist/web/assets/markdown-renderer-CmnqFfTU.js.br +0 -0
  131. package/dist/web/assets/markdown-renderer-CmnqFfTU.js.gz +0 -0
  132. package/dist/web/assets/markdown-renderer-LJdVMbGl.js +1 -0
  133. package/dist/web/assets/{mobile-explorer-sheet-CqCsLWSr.js → mobile-explorer-sheet-BiIhZtJ2.js} +1 -1
  134. package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.br +0 -0
  135. package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.gz +0 -0
  136. package/dist/web/assets/new-design-dialog-DI_hxvFV.js +1 -0
  137. package/dist/web/assets/new-design-dialog-DI_hxvFV.js.br +0 -0
  138. package/dist/web/assets/new-design-dialog-DI_hxvFV.js.gz +0 -0
  139. package/dist/web/assets/notification-store-9lBSplOV.js +1 -0
  140. package/dist/web/assets/{notifications-settings-section-CXgzH_bK.js → notifications-settings-section-0s-2OKRv.js} +1 -1
  141. package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.br +0 -0
  142. package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.gz +0 -0
  143. package/dist/web/assets/{overview-panel-BYB8mgRE.js → overview-panel-3htxfZS2.js} +1 -1
  144. package/dist/web/assets/overview-panel-3htxfZS2.js.br +0 -0
  145. package/dist/web/assets/overview-panel-3htxfZS2.js.gz +0 -0
  146. package/dist/web/assets/panel-store-B6PoCwBA.js +1 -0
  147. package/dist/web/assets/panel-store-B6PoCwBA.js.br +0 -0
  148. package/dist/web/assets/panel-store-B6PoCwBA.js.gz +0 -0
  149. package/dist/web/assets/{performance-panel-Dpuq3g0W.js → performance-panel-V8gpnnf7.js} +2 -2
  150. package/dist/web/assets/performance-panel-V8gpnnf7.js.br +0 -0
  151. package/dist/web/assets/performance-panel-V8gpnnf7.js.gz +0 -0
  152. package/dist/web/assets/{postgres-viewer-DW0Gkmow.js → postgres-viewer-sWS-ogTC.js} +1 -1
  153. package/dist/web/assets/postgres-viewer-sWS-ogTC.js.br +0 -0
  154. package/dist/web/assets/postgres-viewer-sWS-ogTC.js.gz +0 -0
  155. package/dist/web/assets/{ppmbot-settings-section-DFtlGoW6.js → ppmbot-settings-section-CT8vvlzk.js} +1 -1
  156. package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.br +0 -0
  157. package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.gz +0 -0
  158. package/dist/web/assets/{pptx-export-CNyG32Xr.js → pptx-export-Ugjv0hso.js} +4 -4
  159. package/dist/web/assets/pptx-export-Ugjv0hso.js.br +0 -0
  160. package/dist/web/assets/pptx-export-Ugjv0hso.js.gz +0 -0
  161. package/dist/web/assets/{problems-panel-V5zqpuXq.js → problems-panel-Gcy79pSS.js} +1 -1
  162. package/dist/web/assets/problems-panel-Gcy79pSS.js.br +0 -0
  163. package/dist/web/assets/problems-panel-Gcy79pSS.js.gz +0 -0
  164. package/dist/web/assets/{process-row-format-CiJJSf_V.js → process-row-format-u6y7lOee.js} +1 -1
  165. package/dist/web/assets/process-table-BUTIp9Oy.js +1 -0
  166. package/dist/web/assets/process-table-BUTIp9Oy.js.br +0 -0
  167. package/dist/web/assets/process-table-BUTIp9Oy.js.gz +0 -0
  168. package/dist/web/assets/{proxy-settings-section-B7AVlTfY.js → proxy-settings-section-Buv_8y54.js} +1 -1
  169. package/dist/web/assets/proxy-settings-section-Buv_8y54.js.br +0 -0
  170. package/dist/web/assets/proxy-settings-section-Buv_8y54.js.gz +0 -0
  171. package/dist/web/assets/{query-audit-section-gHmRfWKr.js → query-audit-section-N2DQtgJx.js} +1 -1
  172. package/dist/web/assets/query-audit-section-N2DQtgJx.js.br +0 -0
  173. package/dist/web/assets/query-audit-section-N2DQtgJx.js.gz +0 -0
  174. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js +1 -0
  175. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.br +0 -0
  176. package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.gz +0 -0
  177. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js +2 -0
  178. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.br +0 -0
  179. package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.gz +0 -0
  180. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js +1 -0
  181. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.br +0 -0
  182. package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.gz +0 -0
  183. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js +1 -0
  184. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.br +0 -0
  185. package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.gz +0 -0
  186. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js +1 -0
  187. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.br +0 -0
  188. package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.gz +0 -0
  189. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js +1 -0
  190. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.br +0 -0
  191. package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.gz +0 -0
  192. package/dist/web/assets/{run-in-terminal-DKBcEGVu.js → run-in-terminal-DCBNtYHQ.js} +1 -1
  193. package/dist/web/assets/{schedules-settings-section-sYDAsBMO.js → schedules-settings-section-_cHX2qOa.js} +1 -1
  194. package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.br +0 -0
  195. package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.gz +0 -0
  196. package/dist/web/assets/{send-to-chat-CCdOrKc7.js → send-to-chat-dNqNV7Y4.js} +1 -1
  197. package/dist/web/assets/send-to-chat-dNqNV7Y4.js.br +0 -0
  198. package/dist/web/assets/send-to-chat-dNqNV7Y4.js.gz +0 -0
  199. package/dist/web/assets/{services-panel-CKa2aP1d.js → services-panel-Dm54cnW3.js} +1 -1
  200. package/dist/web/assets/services-panel-Dm54cnW3.js.br +0 -0
  201. package/dist/web/assets/services-panel-Dm54cnW3.js.gz +0 -0
  202. package/dist/web/assets/settings-body-DRRQNaDA.js +1 -0
  203. package/dist/web/assets/settings-body-DRRQNaDA.js.br +0 -0
  204. package/dist/web/assets/settings-body-DRRQNaDA.js.gz +0 -0
  205. package/dist/web/assets/settings-section-content-DRaHfvm8.js +1 -0
  206. package/dist/web/assets/settings-section-content-U3mIx6hF.js +2 -0
  207. package/dist/web/assets/settings-section-content-U3mIx6hF.js.br +0 -0
  208. package/dist/web/assets/settings-section-content-U3mIx6hF.js.gz +0 -0
  209. package/dist/web/assets/{settings-store-DfuiLq_9.js → settings-store-Cyuo8ceh.js} +2 -2
  210. package/dist/web/assets/settings-store-Cyuo8ceh.js.br +0 -0
  211. package/dist/web/assets/settings-store-Cyuo8ceh.js.gz +0 -0
  212. package/dist/web/assets/settings-tab-CB_BhHTK.js +1 -0
  213. package/dist/web/assets/settings-window-content-CgZIMNX8.js +1 -0
  214. package/dist/web/assets/{slash-command-picker-CLevA_Gf.js → slash-command-picker-CQlIqMW0.js} +1 -1
  215. package/dist/web/assets/slash-command-picker-CQlIqMW0.js.br +0 -0
  216. package/dist/web/assets/slash-command-picker-CQlIqMW0.js.gz +0 -0
  217. package/dist/web/assets/{sql-query-editor-Db8b0jEr.js → sql-query-editor--Z4bcqd8.js} +1 -1
  218. package/dist/web/assets/sql-query-editor--Z4bcqd8.js.br +0 -0
  219. package/dist/web/assets/sql-query-editor--Z4bcqd8.js.gz +0 -0
  220. package/dist/web/assets/{sqlite-viewer-VzYLMqkD.js → sqlite-viewer-CSmX3qaj.js} +1 -1
  221. package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.br +0 -0
  222. package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.gz +0 -0
  223. package/dist/web/assets/{system-monitor-body-BR60W_mG.js → system-monitor-body-LannpU6H.js} +2 -2
  224. package/dist/web/assets/system-monitor-body-LannpU6H.js.br +0 -0
  225. package/dist/web/assets/system-monitor-body-LannpU6H.js.gz +0 -0
  226. package/dist/web/assets/system-monitor-tab-BfVucwEF.js +1 -0
  227. package/dist/web/assets/{system-monitor-window-content-BLw1QBXo.js → system-monitor-window-content-kLNW9Ln3.js} +1 -1
  228. package/dist/web/assets/{tab-host-window-content-BL61SB5m.js → tab-host-window-content-II_FtOYM.js} +1 -1
  229. package/dist/web/assets/tab-host-window-content-II_FtOYM.js.br +0 -0
  230. package/dist/web/assets/tab-host-window-content-II_FtOYM.js.gz +0 -0
  231. package/dist/web/assets/{tab-store-CbPh8CAX.js → tab-store-DCpc0g0Q.js} +1 -1
  232. package/dist/web/assets/{terminal-tab-B4y6at4h.js → terminal-tab-CTe2polt.js} +1 -1
  233. package/dist/web/assets/terminal-tab-CTe2polt.js.br +0 -0
  234. package/dist/web/assets/terminal-tab-CTe2polt.js.gz +0 -0
  235. package/dist/web/assets/{tool-cards-K0r_yxI0.js → tool-cards-rxLXbBSm.js} +5 -5
  236. package/dist/web/assets/tool-cards-rxLXbBSm.js.br +0 -0
  237. package/dist/web/assets/tool-cards-rxLXbBSm.js.gz +0 -0
  238. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js +1 -0
  239. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.br +0 -0
  240. package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.gz +0 -0
  241. package/dist/web/assets/{use-inline-blame-BK23icsE.js → use-inline-blame-CxZ_QWzS.js} +3 -3
  242. package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.br +0 -0
  243. package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.gz +0 -0
  244. package/dist/web/assets/{use-lsp-CRdCPCKW.js → use-lsp-gCNE5A9K.js} +1 -1
  245. package/dist/web/assets/use-lsp-gCNE5A9K.js.br +0 -0
  246. package/dist/web/assets/use-lsp-gCNE5A9K.js.gz +0 -0
  247. package/dist/web/assets/{use-monaco-theme-CpXT2uh3.js → use-monaco-theme-DvNGcCvz.js} +1 -1
  248. package/dist/web/assets/{use-process-kill-BWYX03KF.js → use-process-kill-Cbiu1mbY.js} +1 -1
  249. package/dist/web/assets/use-process-kill-Cbiu1mbY.js.br +0 -0
  250. package/dist/web/assets/use-process-kill-Cbiu1mbY.js.gz +0 -0
  251. package/dist/web/assets/{use-websocket-CiWQKhHr.js → use-websocket-AC7EG1LK.js} +1 -1
  252. package/dist/web/assets/video-preview-C2Y61WUE.js +1 -0
  253. package/dist/web/assets/video-preview-C2Y61WUE.js.br +0 -0
  254. package/dist/web/assets/video-preview-C2Y61WUE.js.gz +0 -0
  255. package/dist/web/assets/{voice-settings-section-Ceihggqf.js → voice-settings-section-DCXZeLYI.js} +1 -1
  256. package/dist/web/assets/voice-settings-section-DCXZeLYI.js.br +0 -0
  257. package/dist/web/assets/voice-settings-section-DCXZeLYI.js.gz +0 -0
  258. package/dist/web/assets/{window-pip-registry-mDgwpAwP.js → window-pip-registry-9Y9LQQYS.js} +1 -1
  259. package/dist/web/index.html +50 -7
  260. package/dist/web/index.html.br +0 -0
  261. package/dist/web/index.html.gz +0 -0
  262. package/dist/web/sw.js +1 -1
  263. package/dist/web/sw.js.br +0 -0
  264. package/dist/web/sw.js.gz +0 -0
  265. package/docs/architecture/android-emulator-phase0-report-260921.md +310 -0
  266. package/docs/architecture/android-emulator-phase2-report-260921.md +163 -0
  267. package/docs/architecture/android-emulator-phase3-report-260921.md +203 -0
  268. package/docs/architecture/android-emulator-phase4-report-260921.md +191 -0
  269. package/docs/architecture/android-emulator-plan-260920.md +376 -0
  270. package/docs/architecture/plugins-and-tracing.md +48 -7
  271. package/package.json +4 -2
  272. package/scripts/gen-android-proto.ts +37 -0
  273. package/scripts/release.sh +3 -1
  274. package/src/cli/commands/chat-cmd.ts +2 -2
  275. package/src/providers/claude-agent-sdk-query-options.ts +28 -0
  276. package/src/providers/claude-agent-sdk.ts +153 -71
  277. package/src/providers/claude-warm-spare.ts +176 -0
  278. package/src/providers/provider.interface.ts +1 -0
  279. package/src/server/index.ts +53 -0
  280. package/src/server/middleware/gzip-json.ts +13 -1
  281. package/src/server/routes/android.ts +616 -0
  282. package/src/server/routes/chat.ts +31 -0
  283. package/src/server/routes/files.ts +52 -5
  284. package/src/server/routes/remote-desktop.ts +95 -2
  285. package/src/server/routes/trace.ts +66 -0
  286. package/src/server/ws/android.ts +101 -0
  287. package/src/server/ws/chat.ts +12 -17
  288. package/src/server/ws/global.ts +13 -1
  289. package/src/server/ws/remote-desktop.ts +6 -1
  290. package/src/services/android/android-apk.ts +387 -0
  291. package/src/services/android/android-capabilities.ts +154 -0
  292. package/src/services/android/android-flag.ts +12 -0
  293. package/src/services/android/android-grpc.ts +124 -0
  294. package/src/services/android/android-input.ts +129 -0
  295. package/src/services/android/android-logcat.ts +169 -0
  296. package/src/services/android/android-nonce.ts +50 -0
  297. package/src/services/android/android-operations.ts +124 -0
  298. package/src/services/android/android-screenshot.ts +53 -0
  299. package/src/services/android/android-session.ts +510 -0
  300. package/src/services/android/android-video.ts +495 -0
  301. package/src/services/android/avd-list.ts +131 -0
  302. package/src/services/android/avd-manager.ts +397 -0
  303. package/src/services/android/device-registry.ts +223 -0
  304. package/src/services/android/emulator-discovery.ts +160 -0
  305. package/src/services/android/emulator-launcher.ts +290 -0
  306. package/src/services/android/proto/emulator-controller-descriptor.ts +10 -0
  307. package/src/services/android/proto/emulator_controller.proto +1791 -0
  308. package/src/services/android/sdk-discovery.ts +178 -0
  309. package/src/services/android/system-images.ts +124 -0
  310. package/src/services/chat.service.ts +81 -4
  311. package/src/services/config.service.ts +1 -1
  312. package/src/services/file-filter.service.ts +2 -61
  313. package/src/services/file-glob.ts +67 -0
  314. package/src/services/file-index/file-index-runner.ts +169 -0
  315. package/src/services/file-index/file-index-worker.ts +73 -0
  316. package/src/services/file-index/index-search.ts +152 -0
  317. package/src/services/file-index/index-walk.ts +109 -0
  318. package/src/services/file-list-index.service.ts +189 -70
  319. package/src/services/file-watcher/linux-inotify.ts +238 -0
  320. package/src/services/file-watcher/watch-tree.ts +37 -6
  321. package/src/services/file-watcher.service.ts +40 -8
  322. package/src/services/file.service.ts +17 -6
  323. package/src/services/group-chat/group-chat.service.ts +1 -1
  324. package/src/services/jira-debug-session.service.ts +1 -1
  325. package/src/services/ppmbot/ppmbot-delegation.ts +1 -1
  326. package/src/services/ppmbot/ppmbot-service.ts +1 -1
  327. package/src/services/project-content-search.service.ts +45 -11
  328. package/src/services/proxy-agent-turn.ts +7 -3
  329. package/src/services/remote-desktop/mediamtx-catalog.ts +89 -0
  330. package/src/services/remote-desktop/mediamtx-config.ts +91 -0
  331. package/src/services/remote-desktop/mediamtx-install.service.ts +191 -0
  332. package/src/services/remote-desktop/mediamtx-paths.ts +51 -0
  333. package/src/services/remote-desktop/mediamtx-process.ts +152 -0
  334. package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +312 -0
  335. package/src/services/remote-desktop/remote-desktop-capture.ts +60 -4
  336. package/src/services/remote-desktop/remote-desktop-portal.ts +529 -0
  337. package/src/services/remote-desktop/remote-desktop-requirements.ts +56 -20
  338. package/src/services/remote-desktop/remote-desktop-session.ts +77 -3
  339. package/src/services/remote-desktop/remote-desktop-whep-registry.ts +36 -0
  340. package/src/services/scheduler-runner.ts +2 -3
  341. package/src/services/session-trace/browser-trace-ingest.ts +131 -0
  342. package/src/services/session-trace/session-trace-cleanup.ts +65 -0
  343. package/src/services/session-trace/session-trace-db.ts +89 -0
  344. package/src/services/session-trace/session-trace-store.ts +132 -0
  345. package/src/services/session-trace/trace-coalescer.ts +86 -0
  346. package/src/services/session-trace/trace-recorder.ts +304 -0
  347. package/src/services/session-trace/trace-writer.ts +83 -0
  348. package/src/shared/android-avd.ts +53 -0
  349. package/src/shared/android-protocol.ts +184 -0
  350. package/src/shared/file-index-limits.ts +17 -0
  351. package/src/shared/session-trace.ts +61 -0
  352. package/src/types/chat.ts +17 -0
  353. package/src/types/config.ts +27 -0
  354. package/src/types/project.ts +9 -0
  355. package/src/web/app.tsx +5 -0
  356. package/src/web/components/android/android-apk-upload.ts +75 -0
  357. package/src/web/components/android/android-avd-create-dialog.tsx +305 -0
  358. package/src/web/components/android/android-avd-destroy-dialog.tsx +151 -0
  359. package/src/web/components/android/android-clipboard-panel.tsx +94 -0
  360. package/src/web/components/android/android-controls.tsx +128 -0
  361. package/src/web/components/android/android-coords.ts +99 -0
  362. package/src/web/components/android/android-device-list.tsx +329 -0
  363. package/src/web/components/android/android-install-panel.tsx +280 -0
  364. package/src/web/components/android/android-log-filter.ts +75 -0
  365. package/src/web/components/android/android-logcat-panel.tsx +214 -0
  366. package/src/web/components/android/android-screenshot-download.ts +56 -0
  367. package/src/web/components/android/android-tab.tsx +66 -0
  368. package/src/web/components/android/android-tools-drawer.tsx +76 -0
  369. package/src/web/components/android/android-viewer.tsx +200 -0
  370. package/src/web/components/android/android-ws-url.ts +21 -0
  371. package/src/web/components/android/open-android.ts +21 -0
  372. package/src/web/components/android/use-android-available.ts +29 -0
  373. package/src/web/components/android/use-android-keyboard.ts +111 -0
  374. package/src/web/components/android/use-android-session.ts +277 -0
  375. package/src/web/components/android/use-android-touch.ts +123 -0
  376. package/src/web/components/chat/chat-tab.tsx +28 -2
  377. package/src/web/components/chat/message-input.tsx +3 -5
  378. package/src/web/components/editor/compare-picker.tsx +12 -2
  379. package/src/web/components/explorer/file-tree.tsx +6 -7
  380. package/src/web/components/explorer/use-tree-row-dnd.ts +0 -2
  381. package/src/web/components/floating-window/window-content-registry.ts +8 -8
  382. package/src/web/components/layout/command-palette.tsx +31 -9
  383. package/src/web/components/layout/mobile-drawer.tsx +8 -1
  384. package/src/web/components/layout/nav-section-rail.tsx +8 -1
  385. package/src/web/components/layout/reparenting-tab.tsx +2 -2
  386. package/src/web/components/layout/tab-content.tsx +5 -0
  387. package/src/web/components/layout/tab-pool.tsx +31 -20
  388. package/src/web/components/remote-desktop/use-h264-canvas-decoder.ts +23 -1
  389. package/src/web/components/remote-desktop/use-remote-desktop-connection.ts +64 -6
  390. package/src/web/components/remote-desktop/use-webrtc-canvas-video.ts +255 -0
  391. package/src/web/components/root-error-boundary.tsx +5 -0
  392. package/src/web/components/settings/remote-desktop-settings-section.tsx +176 -0
  393. package/src/web/components/settings/settings-categories.ts +3 -0
  394. package/src/web/components/settings/settings-section-content.tsx +25 -18
  395. package/src/web/hooks/use-chat-prewarm.ts +53 -0
  396. package/src/web/hooks/use-chat.ts +18 -4
  397. package/src/web/hooks/use-file-index-invalidation.ts +7 -5
  398. package/src/web/hooks/use-global-events.ts +12 -1
  399. package/src/web/hooks/use-remote-file-search.ts +39 -0
  400. package/src/web/hooks/use-ui-preload.ts +38 -0
  401. package/src/web/index.html +43 -0
  402. package/src/web/lib/chunk-recovery.ts +5 -1
  403. package/src/web/lib/device-id.ts +39 -0
  404. package/src/web/lib/feature-badges.ts +2 -0
  405. package/src/web/lib/lazy-with-preload.tsx +43 -0
  406. package/src/web/lib/preload-ui.ts +60 -0
  407. package/src/web/lib/score-file-search.ts +27 -14
  408. package/src/web/lib/tab-type-icons.ts +2 -1
  409. package/src/web/lib/trace-boot.ts +8 -0
  410. package/src/web/lib/trace-client.ts +516 -0
  411. package/src/web/main.tsx +12 -0
  412. package/src/web/stores/file-store.ts +124 -18
  413. package/src/web/stores/panel-utils.ts +3 -0
  414. package/src/web/stores/tab-store.ts +2 -1
  415. package/src/web/stores/window-panel-persistence.ts +3 -0
  416. package/vite.config.ts +3 -0
  417. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js +0 -1
  418. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js.br +0 -0
  419. package/dist/web/assets/accounts-settings-section-DEIm-W-D.js.gz +0 -0
  420. package/dist/web/assets/agent-session-sheet-CBMsnl_p.js.br +0 -0
  421. package/dist/web/assets/agent-session-sheet-CBMsnl_p.js.gz +0 -0
  422. package/dist/web/assets/agent-session-window-content-D9C9FA7E.js.br +0 -0
  423. package/dist/web/assets/agent-session-window-content-D9C9FA7E.js.gz +0 -0
  424. package/dist/web/assets/ai-resource-editor-DhUVgDEG.js.br +0 -0
  425. package/dist/web/assets/ai-resource-editor-DhUVgDEG.js.gz +0 -0
  426. package/dist/web/assets/ai-settings-section-CETpSpYd.js.br +0 -0
  427. package/dist/web/assets/ai-settings-section-CETpSpYd.js.gz +0 -0
  428. package/dist/web/assets/appearance-settings-section-BJUiLUb7.js.br +0 -0
  429. package/dist/web/assets/appearance-settings-section-BJUiLUb7.js.gz +0 -0
  430. package/dist/web/assets/apps-panel-1VElRgV3.js.br +0 -0
  431. package/dist/web/assets/apps-panel-1VElRgV3.js.gz +0 -0
  432. package/dist/web/assets/audio-preview-DYkyHu5X.js.br +0 -0
  433. package/dist/web/assets/audio-preview-DYkyHu5X.js.gz +0 -0
  434. package/dist/web/assets/branch-review-tab-DhTMSpSU.js +0 -1
  435. package/dist/web/assets/branch-review-tab-DhTMSpSU.js.br +0 -0
  436. package/dist/web/assets/branch-review-tab-DhTMSpSU.js.gz +0 -0
  437. package/dist/web/assets/chat-tab-Cg3BKugo.js +0 -15
  438. package/dist/web/assets/chat-tab-Cg3BKugo.js.br +0 -0
  439. package/dist/web/assets/chat-tab-Cg3BKugo.js.gz +0 -0
  440. package/dist/web/assets/chat-tab-tbUDK__Y.js +0 -1
  441. package/dist/web/assets/chat-tab-tbUDK__Y.js.br +0 -0
  442. package/dist/web/assets/chat-tab-tbUDK__Y.js.gz +0 -0
  443. package/dist/web/assets/code-editor-6ZiQehbr.js +0 -7
  444. package/dist/web/assets/code-editor-6ZiQehbr.js.br +0 -0
  445. package/dist/web/assets/code-editor-6ZiQehbr.js.gz +0 -0
  446. package/dist/web/assets/codex-reset-credit-button-Fr45FUxi.js.br +0 -0
  447. package/dist/web/assets/codex-reset-credit-button-Fr45FUxi.js.gz +0 -0
  448. package/dist/web/assets/conflict-editor-B-wdjSXI.js.br +0 -0
  449. package/dist/web/assets/conflict-editor-B-wdjSXI.js.gz +0 -0
  450. package/dist/web/assets/csv-preview-B6RodObB.js.br +0 -0
  451. package/dist/web/assets/csv-preview-B6RodObB.js.gz +0 -0
  452. package/dist/web/assets/database-viewer-CdPBUQPY.js.br +0 -0
  453. package/dist/web/assets/database-viewer-CdPBUQPY.js.gz +0 -0
  454. package/dist/web/assets/design-settings-section-BpCpaBwL.js.br +0 -0
  455. package/dist/web/assets/design-settings-section-BpCpaBwL.js.gz +0 -0
  456. package/dist/web/assets/design-skill-suggestion-DkT2E2IV.js.br +0 -0
  457. package/dist/web/assets/design-skill-suggestion-DkT2E2IV.js.gz +0 -0
  458. package/dist/web/assets/design-tab-BZb9eemI.js.br +0 -0
  459. package/dist/web/assets/design-tab-BZb9eemI.js.gz +0 -0
  460. package/dist/web/assets/designs-sidebar-panel-CF4tp6j-.js.br +0 -0
  461. package/dist/web/assets/designs-sidebar-panel-CF4tp6j-.js.gz +0 -0
  462. package/dist/web/assets/diff-viewer-BqEqwSw6.js.br +0 -0
  463. package/dist/web/assets/diff-viewer-BqEqwSw6.js.gz +0 -0
  464. package/dist/web/assets/edit-diff-preview-DD4HayXY.js.br +0 -0
  465. package/dist/web/assets/edit-diff-preview-DD4HayXY.js.gz +0 -0
  466. package/dist/web/assets/editor-language-service-CkA5sEdV.js.br +0 -0
  467. package/dist/web/assets/editor-language-service-CkA5sEdV.js.gz +0 -0
  468. package/dist/web/assets/explorer-body-Ds7oKuz7.js +0 -2
  469. package/dist/web/assets/explorer-body-Ds7oKuz7.js.br +0 -0
  470. package/dist/web/assets/explorer-body-Ds7oKuz7.js.gz +0 -0
  471. package/dist/web/assets/explorer-window-content-CRJ2eMZ4.js.br +0 -0
  472. package/dist/web/assets/explorer-window-content-CRJ2eMZ4.js.gz +0 -0
  473. package/dist/web/assets/extension-manager-section-DwQTdCII.js.br +0 -0
  474. package/dist/web/assets/extension-manager-section-DwQTdCII.js.gz +0 -0
  475. package/dist/web/assets/extension-webview-CMq-VTLu.js.br +0 -0
  476. package/dist/web/assets/extension-webview-CMq-VTLu.js.gz +0 -0
  477. package/dist/web/assets/file-store-DY1_0nzY.js +0 -1
  478. package/dist/web/assets/file-store-DY1_0nzY.js.br +0 -0
  479. package/dist/web/assets/file-store-DY1_0nzY.js.gz +0 -0
  480. package/dist/web/assets/files-settings-section-B2lcyh-6.js.br +0 -0
  481. package/dist/web/assets/files-settings-section-B2lcyh-6.js.gz +0 -0
  482. package/dist/web/assets/general-settings-section-Doepm2sH.js.br +0 -0
  483. package/dist/web/assets/general-settings-section-Doepm2sH.js.gz +0 -0
  484. package/dist/web/assets/git-log-panel-CJakNMDc.js.br +0 -0
  485. package/dist/web/assets/git-log-panel-CJakNMDc.js.gz +0 -0
  486. package/dist/web/assets/glide-data-grid-C_SeOhSq.js.br +0 -0
  487. package/dist/web/assets/glide-data-grid-C_SeOhSq.js.gz +0 -0
  488. package/dist/web/assets/group-chat-tab--by1xCQW.js +0 -1
  489. package/dist/web/assets/group-chat-tab--by1xCQW.js.br +0 -0
  490. package/dist/web/assets/group-chat-tab--by1xCQW.js.gz +0 -0
  491. package/dist/web/assets/index-DhWjx5iR.js +0 -52
  492. package/dist/web/assets/index-DhWjx5iR.js.br +0 -0
  493. package/dist/web/assets/index-DhWjx5iR.js.gz +0 -0
  494. package/dist/web/assets/index-oIvYSKTT.css +0 -1
  495. package/dist/web/assets/index-oIvYSKTT.css.br +0 -0
  496. package/dist/web/assets/index-oIvYSKTT.css.gz +0 -0
  497. package/dist/web/assets/keybindings-store-30LYZU0l.js +0 -1
  498. package/dist/web/assets/keyboard-shortcuts-section-BgZe3QDr.js.br +0 -0
  499. package/dist/web/assets/keyboard-shortcuts-section-BgZe3QDr.js.gz +0 -0
  500. package/dist/web/assets/language-servers-section-CCMzgOaE.js.br +0 -0
  501. package/dist/web/assets/language-servers-section-CCMzgOaE.js.gz +0 -0
  502. package/dist/web/assets/lsp-client-B10suuaZ.js.br +0 -0
  503. package/dist/web/assets/lsp-client-B10suuaZ.js.gz +0 -0
  504. package/dist/web/assets/markdown-renderer-AHHFS3jc.js.br +0 -0
  505. package/dist/web/assets/markdown-renderer-AHHFS3jc.js.gz +0 -0
  506. package/dist/web/assets/markdown-renderer-DxnXtBoj.js +0 -1
  507. package/dist/web/assets/mobile-explorer-sheet-CqCsLWSr.js.br +0 -0
  508. package/dist/web/assets/mobile-explorer-sheet-CqCsLWSr.js.gz +0 -0
  509. package/dist/web/assets/new-design-dialog-B9tgnQXq.js +0 -1
  510. package/dist/web/assets/new-design-dialog-B9tgnQXq.js.br +0 -0
  511. package/dist/web/assets/new-design-dialog-B9tgnQXq.js.gz +0 -0
  512. package/dist/web/assets/notification-store-HUVzO_bp.js +0 -1
  513. package/dist/web/assets/notifications-settings-section-CXgzH_bK.js.br +0 -0
  514. package/dist/web/assets/notifications-settings-section-CXgzH_bK.js.gz +0 -0
  515. package/dist/web/assets/overview-panel-BYB8mgRE.js.br +0 -0
  516. package/dist/web/assets/overview-panel-BYB8mgRE.js.gz +0 -0
  517. package/dist/web/assets/panel-store-CWHPmHwj.js +0 -1
  518. package/dist/web/assets/panel-store-CWHPmHwj.js.br +0 -0
  519. package/dist/web/assets/panel-store-CWHPmHwj.js.gz +0 -0
  520. package/dist/web/assets/performance-panel-Dpuq3g0W.js.br +0 -0
  521. package/dist/web/assets/performance-panel-Dpuq3g0W.js.gz +0 -0
  522. package/dist/web/assets/postgres-viewer-DW0Gkmow.js.br +0 -0
  523. package/dist/web/assets/postgres-viewer-DW0Gkmow.js.gz +0 -0
  524. package/dist/web/assets/ppmbot-settings-section-DFtlGoW6.js.br +0 -0
  525. package/dist/web/assets/ppmbot-settings-section-DFtlGoW6.js.gz +0 -0
  526. package/dist/web/assets/pptx-export-CNyG32Xr.js.br +0 -0
  527. package/dist/web/assets/pptx-export-CNyG32Xr.js.gz +0 -0
  528. package/dist/web/assets/problems-panel-V5zqpuXq.js.br +0 -0
  529. package/dist/web/assets/problems-panel-V5zqpuXq.js.gz +0 -0
  530. package/dist/web/assets/process-table-DAj46HIl.js +0 -1
  531. package/dist/web/assets/process-table-DAj46HIl.js.br +0 -0
  532. package/dist/web/assets/process-table-DAj46HIl.js.gz +0 -0
  533. package/dist/web/assets/proxy-settings-section-B7AVlTfY.js.br +0 -0
  534. package/dist/web/assets/proxy-settings-section-B7AVlTfY.js.gz +0 -0
  535. package/dist/web/assets/query-audit-section-gHmRfWKr.js.br +0 -0
  536. package/dist/web/assets/query-audit-section-gHmRfWKr.js.gz +0 -0
  537. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js +0 -1
  538. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js.br +0 -0
  539. package/dist/web/assets/remote-desktop-clipboard-notice-Cgoznh8L.js.gz +0 -0
  540. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js +0 -2
  541. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js.br +0 -0
  542. package/dist/web/assets/remote-desktop-mobile-sheet-X12QbPhO.js.gz +0 -0
  543. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js +0 -1
  544. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js.br +0 -0
  545. package/dist/web/assets/remote-desktop-mobile-view-DsSHawSK.js.gz +0 -0
  546. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js +0 -1
  547. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js.br +0 -0
  548. package/dist/web/assets/remote-desktop-readiness-gate-CHiQEd9Q.js.gz +0 -0
  549. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js +0 -1
  550. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js.br +0 -0
  551. package/dist/web/assets/remote-desktop-window-content-BnznIby3.js.gz +0 -0
  552. package/dist/web/assets/schedules-settings-section-sYDAsBMO.js.br +0 -0
  553. package/dist/web/assets/schedules-settings-section-sYDAsBMO.js.gz +0 -0
  554. package/dist/web/assets/send-to-chat-CCdOrKc7.js.br +0 -0
  555. package/dist/web/assets/send-to-chat-CCdOrKc7.js.gz +0 -0
  556. package/dist/web/assets/services-panel-CKa2aP1d.js.br +0 -0
  557. package/dist/web/assets/services-panel-CKa2aP1d.js.gz +0 -0
  558. package/dist/web/assets/settings-body-CEIF8lkl.js +0 -2
  559. package/dist/web/assets/settings-body-CEIF8lkl.js.br +0 -0
  560. package/dist/web/assets/settings-body-CEIF8lkl.js.gz +0 -0
  561. package/dist/web/assets/settings-store-DfuiLq_9.js.br +0 -0
  562. package/dist/web/assets/settings-store-DfuiLq_9.js.gz +0 -0
  563. package/dist/web/assets/settings-tab-Du5AUPni.js +0 -1
  564. package/dist/web/assets/settings-window-content-BTflfLez.js +0 -1
  565. package/dist/web/assets/slash-command-picker-CLevA_Gf.js.br +0 -0
  566. package/dist/web/assets/slash-command-picker-CLevA_Gf.js.gz +0 -0
  567. package/dist/web/assets/sql-query-editor-Db8b0jEr.js.br +0 -0
  568. package/dist/web/assets/sql-query-editor-Db8b0jEr.js.gz +0 -0
  569. package/dist/web/assets/sqlite-viewer-VzYLMqkD.js.br +0 -0
  570. package/dist/web/assets/sqlite-viewer-VzYLMqkD.js.gz +0 -0
  571. package/dist/web/assets/system-monitor-body-BR60W_mG.js.br +0 -0
  572. package/dist/web/assets/system-monitor-body-BR60W_mG.js.gz +0 -0
  573. package/dist/web/assets/system-monitor-tab-BYpantE2.js +0 -1
  574. package/dist/web/assets/tab-host-window-content-BL61SB5m.js.br +0 -0
  575. package/dist/web/assets/tab-host-window-content-BL61SB5m.js.gz +0 -0
  576. package/dist/web/assets/terminal-tab-B4y6at4h.js.br +0 -0
  577. package/dist/web/assets/terminal-tab-B4y6at4h.js.gz +0 -0
  578. package/dist/web/assets/tool-cards-K0r_yxI0.js.br +0 -0
  579. package/dist/web/assets/tool-cards-K0r_yxI0.js.gz +0 -0
  580. package/dist/web/assets/use-inline-blame-BK23icsE.js.br +0 -0
  581. package/dist/web/assets/use-inline-blame-BK23icsE.js.gz +0 -0
  582. package/dist/web/assets/use-lsp-CRdCPCKW.js.br +0 -0
  583. package/dist/web/assets/use-lsp-CRdCPCKW.js.gz +0 -0
  584. package/dist/web/assets/use-process-kill-BWYX03KF.js.br +0 -0
  585. package/dist/web/assets/use-process-kill-BWYX03KF.js.gz +0 -0
  586. package/dist/web/assets/video-preview-DugVkMB7.js +0 -1
  587. package/dist/web/assets/video-preview-DugVkMB7.js.br +0 -0
  588. package/dist/web/assets/video-preview-DugVkMB7.js.gz +0 -0
  589. package/dist/web/assets/voice-settings-section-Ceihggqf.js.br +0 -0
  590. package/dist/web/assets/voice-settings-section-Ceihggqf.js.gz +0 -0
  591. /package/dist/web/assets/{__vite-browser-external-B_XMEguz.js → __vite-browser-external-C5mXParC.js} +0 -0
  592. /package/dist/web/assets/{agent-session-sheet-store-DO682WSg.js → agent-session-sheet-store-_OeezCXB.js} +0 -0
  593. /package/dist/web/assets/{api-settings-CpO8SPk9.js → api-settings-Cc_CpfmC.js} +0 -0
  594. /package/dist/web/assets/{api-settings-CpO8SPk9.js.br → api-settings-Cc_CpfmC.js.br} +0 -0
  595. /package/dist/web/assets/{api-settings-CpO8SPk9.js.gz → api-settings-Cc_CpfmC.js.gz} +0 -0
  596. /package/dist/web/assets/{api-themes-CJipDH_l.js → api-themes-BtMBSjuM.js} +0 -0
  597. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js → can-open-in-ppm-DeE2-kd5.js} +0 -0
  598. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js.br → can-open-in-ppm-DeE2-kd5.js.br} +0 -0
  599. /package/dist/web/assets/{can-open-in-ppm-Bw_xiOXX.js.gz → can-open-in-ppm-DeE2-kd5.js.gz} +0 -0
  600. /package/dist/web/assets/{csv-parser-DcRWxcNV.js → csv-parser-CoxPdyLw.js} +0 -0
  601. /package/dist/web/assets/{csv-parser-DcRWxcNV.js.br → csv-parser-CoxPdyLw.js.br} +0 -0
  602. /package/dist/web/assets/{csv-parser-DcRWxcNV.js.gz → csv-parser-CoxPdyLw.js.gz} +0 -0
  603. /package/dist/web/assets/{design-export-client-CHffN3DM.js → design-export-client-BfdZB7xK.js} +0 -0
  604. /package/dist/web/assets/{design-export-client-CHffN3DM.js.br → design-export-client-BfdZB7xK.js.br} +0 -0
  605. /package/dist/web/assets/{design-export-client-CHffN3DM.js.gz → design-export-client-BfdZB7xK.js.gz} +0 -0
  606. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js → design-responsive-dialog-BiYy3ibS.js} +0 -0
  607. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js.br → design-responsive-dialog-BiYy3ibS.js.br} +0 -0
  608. /package/dist/web/assets/{design-responsive-dialog-DSCpv6O1.js.gz → design-responsive-dialog-BiYy3ibS.js.gz} +0 -0
  609. /package/dist/web/assets/{design-system-status-label-B_0I_3a8.js → design-system-status-label-ekiLyjKn.js} +0 -0
  610. /package/dist/web/assets/{docx-preview-B3eJyY2y.js → docx-preview-Dt6RQpfA.js} +0 -0
  611. /package/dist/web/assets/{docx-preview-B3eJyY2y.js.br → docx-preview-Dt6RQpfA.js.br} +0 -0
  612. /package/dist/web/assets/{docx-preview-B3eJyY2y.js.gz → docx-preview-Dt6RQpfA.js.gz} +0 -0
  613. /package/dist/web/assets/{editor-font-BNwo7zo5.js → editor-font-CBszn6vt.js} +0 -0
  614. /package/dist/web/assets/{format-bytes-CRZfxO2J.js → format-bytes-FQmpZ25A.js} +0 -0
  615. /package/dist/web/assets/{image-gallery-DC3gRAqk.js → image-gallery-B16hO6Ab.js} +0 -0
  616. /package/dist/web/assets/{image-preview-geometry-DN3DZQp0.js → image-preview-geometry-D4Ihz4UV.js} +0 -0
  617. /package/dist/web/assets/{lib-B9k5tn9s.js → lib-6APiJkU3.js} +0 -0
  618. /package/dist/web/assets/{lib-B9k5tn9s.js.br → lib-6APiJkU3.js.br} +0 -0
  619. /package/dist/web/assets/{lib-B9k5tn9s.js.gz → lib-6APiJkU3.js.gz} +0 -0
  620. /package/dist/web/assets/{libesm-5f7T4AHA.js → libesm-5wREk7JN.js} +0 -0
  621. /package/dist/web/assets/{libesm-5f7T4AHA.js.br → libesm-5wREk7JN.js.br} +0 -0
  622. /package/dist/web/assets/{libesm-5f7T4AHA.js.gz → libesm-5wREk7JN.js.gz} +0 -0
  623. /package/dist/web/assets/{media-url-CCGOIxzS.js → media-url-CrT-qulZ.js} +0 -0
  624. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js → metric-chart-canvas-D7f-LQ8x.js} +0 -0
  625. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js.br → metric-chart-canvas-D7f-LQ8x.js.br} +0 -0
  626. /package/dist/web/assets/{metric-chart-canvas-CjFbZuhk.js.gz → metric-chart-canvas-D7f-LQ8x.js.gz} +0 -0
  627. /package/dist/web/assets/{monaco-dotenv-language-Bwq3gQsi.js → monaco-dotenv-language-DbSss7YR.js} +0 -0
  628. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js → onboarding-entry-CGFdGLLP.js} +0 -0
  629. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js.br → onboarding-entry-CGFdGLLP.js.br} +0 -0
  630. /package/dist/web/assets/{onboarding-entry-CuH1Kqwu.js.gz → onboarding-entry-CGFdGLLP.js.gz} +0 -0
  631. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js → pdf-preview-B8A4T-ES.js} +0 -0
  632. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js.br → pdf-preview-B8A4T-ES.js.br} +0 -0
  633. /package/dist/web/assets/{pdf-preview-X8bdpfE9.js.gz → pdf-preview-B8A4T-ES.js.gz} +0 -0
  634. /package/dist/web/assets/{separator-DMu7VFQa.js → separator-dHj3Km--.js} +0 -0
  635. /package/dist/web/assets/{sortable-header-CipIP7aH.js → sortable-header-BOa8o7NJ.js} +0 -0
  636. /package/dist/web/assets/{sortable-header-CipIP7aH.js.br → sortable-header-BOa8o7NJ.js.br} +0 -0
  637. /package/dist/web/assets/{sortable-header-CipIP7aH.js.gz → sortable-header-BOa8o7NJ.js.gz} +0 -0
  638. /package/dist/web/assets/{use-blob-url-DjuRQWnR.js → use-blob-url-BC69n15x.js} +0 -0
  639. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js → vendor-xterm-CfasyE0m.js} +0 -0
  640. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js.br → vendor-xterm-CfasyE0m.js.br} +0 -0
  641. /package/dist/web/assets/{vendor-xterm-Be4L1NHd.js.gz → vendor-xterm-CfasyE0m.js.gz} +0 -0
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Jr as r,O as i,j as a,ur as o}from"./icons-CO_II6D-.js";import{O as s,a as c,r as l}from"./api-client-F5Zi1sR0.js";import{n as u}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import"./context-menu-7OX80HDB.js";import{n as d}from"./use-is-mobile-BClDZJP5.js";import"./button-DeAyLH9U.js";import{a as f,n as p,o as m,t as h}from"./dialog-Bocc0Fgb.js";import{t as g}from"./mobile-bottom-sheet-D4UyOatB.js";import"./use-visual-viewport-BGpcMnIx.js";import{_n as ee,cn as _,fn as v,gn as y,hn as b,ln as x,mn as S,pn as C,sn as w}from"./index-DhWjx5iR.js";import{r as T}from"./format-bytes-CRZfxO2J.js";import{a as E,i as D,n as O,o as k,r as A,s as j,t as M}from"./process-row-format-CiJJSf_V.js";import{r as te,t as N}from"./use-process-kill-BWYX03KF.js";import{n as P,r as ne,t as F}from"./sortable-header-CipIP7aH.js";var I=e(t(),1),L=[`swap`,`disk`,`gpu`,`net`],R={cpu:64,ram:80,swap:80,disk:120,gpu:90,net:120},z=`minmax(0,1fr)`,B=`44px`;function V(e){return e===`swap`||e===`disk`||e===`gpu`||e===`net`}function H(e){return Math.round(Math.min(400,Math.max(48,e)))}function U(e,t){let n=t[e];return typeof n==`number`&&Number.isFinite(n)?H(n):R[e]}function re(e,t,n={}){let r=L.filter(t=>e[t]),i=V(t)&&e[t]?t:null,a=e=>`${U(e,n)}px`,o=[z,a(`cpu`),a(`ram`)];return{wideTemplate:[...o,...r.map(a),B].join(` `),narrowTemplate:[...o,...i?[a(i)]:[],B].join(` `),columns:e,narrowExtra:i}}var W=`grid-cols-[var(--sysmon-grid-n)] @lg:grid-cols-[var(--sysmon-grid-w)]`;function ie(e){return{"--sysmon-grid-n":e.narrowTemplate,"--sysmon-grid-w":e.wideTemplate}}function G(e,t){return e.narrowExtra===t?`block`:`hidden @lg:block`}var K=n(),q=150;function J({mode:e,onModeChange:t,ppmOnly:n,onPpmOnlyChange:r,onQueryChange:i}){let[a,s]=(0,I.useState)(``),c=(0,I.useRef)(null);return(0,I.useEffect)(()=>(c.current&&clearTimeout(c.current),c.current=setTimeout(()=>i(a),q),()=>{c.current&&clearTimeout(c.current)}),[a]),(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 p-2 border-b border-border shrink-0`,children:[(0,K.jsxs)(`div`,{className:`relative flex-1 min-w-[140px]`,children:[(0,K.jsx)(o,{className:`absolute left-2 top-1/2 -translate-y-1/2 size-3.5 text-text-subtle`}),(0,K.jsx)(`input`,{type:`text`,value:a,onChange:e=>s(e.target.value),placeholder:`Search processes`,"aria-label":`Search processes`,"data-testid":`sysmon-process-search`,className:`w-full min-h-11 md:min-h-8 pl-7 pr-2 text-sm rounded-md border border-border bg-transparent focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring`})]}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>t(e===`grouped`?`flat`:`grouped`),"aria-pressed":e===`flat`,"data-testid":`sysmon-toggle-flat`,className:`min-h-11 md:min-h-8 px-3 text-xs rounded-md border border-border hover:bg-surface-hover transition-colors`,children:e===`flat`?`Flat`:`Grouped`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>r(!n),"aria-pressed":n,"data-testid":`sysmon-filter-ppm`,className:u(`min-h-11 md:min-h-8 px-3 text-xs rounded-md border transition-colors`,n?`border-primary bg-primary/10 text-primary`:`border-border hover:bg-surface-hover`),children:`PPM only`})]})}function Y({sortKey:e,sortDir:t,grid:n,onSort:r,resize:i}){let a={activeKey:e,activeDir:t,onClick:r,resize:i};return(0,K.jsxs)(`div`,{role:`row`,className:u(`grid gap-1 px-3 py-1.5 text-[11px] text-text-subtle border-b border-border sticky top-0 bg-background z-10`,W),children:[(0,K.jsx)(F,{label:`Process`,field:`name`,...a,resize:void 0,align:`left`,testId:`sysmon-sort-name`}),(0,K.jsx)(F,{label:`CPU`,field:`cpu`,...a,resizeKey:`cpu`,testId:`sysmon-sort-cpu`}),(0,K.jsx)(F,{label:`RAM`,field:`ram`,...a,resizeKey:`ram`,testId:`sysmon-sort-ram`}),n.columns.swap&&(0,K.jsx)(F,{label:`Swap`,field:`swap`,...a,resizeKey:`swap`,testId:`sysmon-col-swap`,className:G(n,`swap`)}),n.columns.disk&&(0,K.jsx)(F,{label:`Disk`,field:`disk`,...a,resizeKey:`disk`,testId:`sysmon-col-disk`,className:G(n,`disk`)}),n.columns.gpu&&(0,K.jsx)(F,{label:`GPU`,field:`gpu`,...a,resizeKey:`gpu`,testId:`sysmon-col-gpu`,className:G(n,`gpu`)}),n.columns.net&&(0,K.jsx)(F,{label:`Net`,field:`net`,...a,resizeKey:`net`,testId:`sysmon-col-net`,className:G(n,`net`)}),(0,K.jsx)(`span`,{})]})}function ae({totals:e,grid:t,gpuUtilPercent:n}){return(0,K.jsxs)(`div`,{className:u(`grid gap-1 px-3 py-1.5 text-xs font-medium border-t border-border shrink-0`,W),"data-testid":`sysmon-total`,"data-process-count":e.count,children:[(0,K.jsxs)(`span`,{className:`truncate`,children:[`Total (`,e.count,` processes)`]}),(0,K.jsxs)(`span`,{className:u(`text-right`,M(e.cpu)),children:[e.cpu.toFixed(1),`%`]}),(0,K.jsx)(`span`,{className:`text-right text-text-secondary`,children:T(e.ramMB)}),t.columns.swap&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(t,`swap`)),children:k(e.swapMB)}),t.columns.disk&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(t,`disk`)),children:A(e.diskReadBps,e.diskWriteBps)}),t.columns.gpu&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(t,`gpu`)),children:D(n,e.gpuMemMB,t.columns.gpuMemory!==!1)}),t.columns.net&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(t,`net`)),children:E(e.netInBps,e.netOutBps)}),(0,K.jsx)(`span`,{})]})}var oe=`Protected: this app contains a PPM or OS-critical process — cannot be ended as a whole.`;function se({group:e,expanded:t,grid:n,killProtected:o,onToggle:s,onKillClick:c}){let l=t?i:a;return(0,K.jsxs)(`div`,{className:`grid items-center gap-1 min-h-11 md:min-h-7 px-3 text-xs cursor-pointer hover:bg-surface-hover transition-colors group/proc grid-cols-[var(--sysmon-grid-n)] @lg:grid-cols-[var(--sysmon-grid-w)]`,onClick:()=>s(e.key),"data-testid":`sysmon-group-row`,"data-group-key":e.key,"data-count":e.count,"data-disk-bps":j(e.diskReadBps,e.diskWriteBps),"data-gpu-pct":e.gpuPct,"data-net-bps":j(e.netInBps,e.netOutBps),children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),s(e.key)},"aria-expanded":t,"aria-label":`${t?`Collapse`:`Expand`} ${e.label}`,"data-testid":`sysmon-group-expand`,className:`flex items-center justify-center size-11 md:size-7 -ml-2 shrink-0`,children:(0,K.jsx)(l,{className:`size-3.5 text-text-subtle`})}),(0,K.jsx)(`span`,{className:`truncate font-medium`,children:e.label}),(0,K.jsxs)(`span`,{className:`text-text-subtle shrink-0`,children:[`(`,e.count,`)`]})]}),(0,K.jsxs)(`span`,{className:u(`text-right`,M(e.cpu)),children:[e.cpu.toFixed(1),`%`]}),(0,K.jsx)(`span`,{className:`text-right text-text-secondary`,children:T(e.ramMB)}),n.columns.swap&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`swap`)),children:k(e.swapMB)}),n.columns.disk&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`disk`)),children:A(e.diskReadBps,e.diskWriteBps)}),n.columns.gpu&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`gpu`)),children:D(e.gpuPct,e.gpuMemMB,n.columns.gpuMemory!==!1)}),n.columns.net&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`net`)),children:E(e.netInBps,e.netOutBps)}),(0,K.jsx)(`div`,{className:`flex justify-end`,children:(0,K.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),c(e)},disabled:o,"aria-label":`End ${e.label} and its ${e.count} processes`,title:o?oe:`End ${e.label} (${e.count} processes)`,"data-testid":`sysmon-group-kill-btn`,className:u(`flex items-center justify-center size-11 md:size-7 rounded transition-all`,`can-hover:opacity-0 can-hover:group-hover/proc:opacity-100`,o?`opacity-40 cursor-not-allowed`:`hover:bg-error/20 hover:text-error active:bg-error/30`),children:(0,K.jsx)(r,{className:`size-3.5`})})})]})}var ce=`Protected: PPM or OS-critical process — cannot be ended.`;function le({proc:e,indent:t,grid:n,onKillClick:i}){return(0,K.jsxs)(`div`,{className:`grid items-center gap-1 min-h-11 md:min-h-7 px-3 text-xs group/proc hover:bg-surface-hover transition-colors grid-cols-[var(--sysmon-grid-n)] @lg:grid-cols-[var(--sysmon-grid-w)]`,"data-testid":`sysmon-process-row`,"data-pid":e.pid,"data-ppm":e.ppm,"data-protected":e.protected,"data-swap-mb":e.swapMB,"data-disk-bps":j(e.diskReadBps,e.diskWriteBps),"data-gpu-pct":e.gpuPct,"data-net-bps":j(e.netInBps,e.netOutBps),children:[(0,K.jsxs)(`div`,{className:u(`flex items-start gap-1.5 min-w-0`,t&&`pl-6`),children:[(0,K.jsx)(`span`,{className:`text-text-subtle shrink-0`,children:e.pid}),(0,K.jsx)(`span`,{className:`truncate text-text-secondary`,title:e.startedAt?`${e.command}\nRunning ${O(e.startedAt)}`:e.command,children:e.command})]}),(0,K.jsxs)(`span`,{className:u(`text-right`,M(e.cpu)),children:[e.cpu.toFixed(1),`%`]}),(0,K.jsx)(`span`,{className:`text-right text-text-secondary`,children:T(e.ramMB)}),n.columns.swap&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`swap`)),children:k(e.swapMB)}),n.columns.disk&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`disk`)),children:A(e.diskReadBps,e.diskWriteBps)}),n.columns.gpu&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`gpu`)),children:D(e.gpuPct,e.gpuMemMB,n.columns.gpuMemory!==!1)}),n.columns.net&&(0,K.jsx)(`span`,{className:u(`text-right text-text-secondary tabular-nums truncate`,G(n,`net`)),children:E(e.netInBps,e.netOutBps)}),(0,K.jsx)(`div`,{className:`flex justify-end`,children:(0,K.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),i(e)},disabled:e.protected,"aria-label":`End process ${e.name} (${e.pid})`,title:e.protected?ce:`End process ${e.name}`,"data-testid":`sysmon-kill-btn`,className:u(`flex items-center justify-center size-11 md:size-7 rounded transition-all`,`can-hover:opacity-0 can-hover:group-hover/proc:opacity-100`,e.protected?`opacity-40 cursor-not-allowed`:`hover:bg-error/20 hover:text-error active:bg-error/30`),children:(0,K.jsx)(r,{className:`size-3.5`})})})]})}var ue={STOP:`Suspend (SIGSTOP)`,CONT:`Continue (SIGCONT)`,TERM:`Terminate (SIGTERM)`,KILL:`Kill (SIGKILL)`,HUP:`Hang up (SIGHUP)`,INT:`Interrupt (SIGINT)`,USR1:`User signal 1`,USR2:`User signal 2`},de=[`KILL`,`STOP`];async function fe(e){let t=c(),n={"Content-Type":`application/json`,"X-PPM-Request":`1`};t&&(n.Authorization=`Bearer ${t}`);let r=await fetch(`/api/system/resources/signal`,{method:`POST`,headers:n,body:JSON.stringify(e)}),i;try{i=await r.json()}catch{throw Error(r.ok?`Empty response from server`:`Server error (HTTP ${r.status})`)}if(i.ok===!1)throw Error(i.error??`HTTP ${r.status}`);return i.data}function pe(e,t,n){return{pid:e.pid,startedAt:e.startedAt,signal:t,tree:n}}function me(){let[e,t]=(0,I.useState)(null);return{send:(0,I.useCallback)(async(e,n,r=!1)=>{t(e.pid);try{let t=(await fe(pe(e,n,r))).signalled.length;s.success(t>1?`Sent SIG${n} to ${e.name} and ${t-1} child processes`:`Sent SIG${n} to ${e.name} (${e.pid})`)}catch(t){s.error(t instanceof Error?t.message:`Could not signal ${e.name}`)}finally{t(null)}},[]),pending:e}}function he({proc:e,signals:t,onDetails:n,onKill:r,onSignal:i,children:a}){return(0,K.jsxs)(w,{children:[(0,K.jsx)(y,{asChild:!0,children:(0,K.jsx)(`div`,{className:`select-none`,children:a})}),(0,K.jsxs)(_,{children:[(0,K.jsx)(x,{onSelect:()=>n(e),children:`Details…`}),t.length>0&&(0,K.jsxs)(C,{children:[(0,K.jsx)(b,{children:`Send signal`}),(0,K.jsx)(S,{children:t.map(t=>(0,K.jsx)(x,{variant:de.includes(t)?`destructive`:void 0,disabled:e.protected,onSelect:()=>{e.protected||i(e,t,!1)},children:ue[t]},t))})]}),(0,K.jsx)(v,{}),(0,K.jsx)(x,{variant:`destructive`,disabled:e.protected,onSelect:()=>{e.protected||r(e)},children:`End process`}),e.protected&&(0,K.jsx)(`p`,{className:`px-2 py-1.5 text-[11px] text-text-subtle max-w-64`,children:`PPM or OS-critical process — it cannot be ended or signalled.`})]})]})}function ge(e){return e>0?new Date(e).toLocaleString():`—`}function _e({pid:e,name:t,onClose:n}){let r=d(),[i,a]=(0,I.useState)(null),[o,s]=(0,I.useState)(null);if((0,I.useEffect)(()=>{if(e===null){a(null),s(null);return}let t=!0;return a(null),s(null),l.get(`/api/system/resources/process/${e}`).then(e=>{t&&a(e)}).catch(e=>{t&&s(e instanceof Error?e.message:`Could not read the process`)}),()=>{t=!1}},[e]),e===null)return null;let c=(0,K.jsxs)(`div`,{className:`space-y-3`,"data-testid":`sysmon-process-details`,"data-pid":e,children:[o&&(0,K.jsx)(`p`,{className:`text-sm text-error`,children:o}),!o&&i===null&&(0,K.jsx)(`p`,{className:`text-sm text-text-subtle`,children:`Reading /proc…`}),i&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-4 gap-y-2 text-xs`,children:[(0,K.jsx)(X,{label:`PID`,value:i.pid}),(0,K.jsx)(X,{label:`Parent PID`,value:i.ppid}),(0,K.jsx)(X,{label:`User`,value:i.user}),(0,K.jsx)(X,{label:`State`,value:i.state}),(0,K.jsx)(X,{label:`Threads`,value:i.threads}),(0,K.jsx)(X,{label:`Nice`,value:i.nice}),(0,K.jsx)(X,{label:`Started`,value:ge(i.startedAt)}),(0,K.jsx)(X,{label:`Control group`,value:i.cgroup})]}),(0,K.jsx)(Z,{label:`Executable`,value:i.exe}),(0,K.jsx)(Z,{label:`Working directory`,value:i.cwd}),(0,K.jsx)(Z,{label:`Command line`,value:i.command,mono:!0})]})]});return r?(0,K.jsx)(g,{open:!0,onClose:n,children:(0,K.jsxs)(`div`,{className:`px-4 pb-4 space-y-3`,children:[(0,K.jsx)(`h2`,{className:`text-base font-semibold break-all`,children:t}),c]})}):(0,K.jsx)(h,{open:!0,onOpenChange:e=>!e&&n(),children:(0,K.jsxs)(p,{className:`sm:max-w-xl`,children:[(0,K.jsx)(f,{children:(0,K.jsx)(m,{className:`break-all`,children:t})}),c]})})}function X({label:e,value:t}){let n=t===null||t===``?`—`:String(t);return(0,K.jsxs)(`div`,{className:`min-w-0`,children:[(0,K.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,K.jsx)(`dd`,{className:`truncate`,title:n,children:n})]})}function Z({label:e,value:t,mono:n}){return(0,K.jsxs)(`div`,{className:`space-y-1`,children:[(0,K.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:e}),(0,K.jsx)(`p`,{className:`text-xs break-all ${n?`font-mono`:``}`,children:t??`—`})]})}var Q=`ppm-sysmon-col-widths`;function ve(){try{let e=localStorage.getItem(Q);if(!e)return{};let t=JSON.parse(e),n={};for(let e of[`cpu`,`ram`,`disk`,`gpu`,`net`]){let r=t[e];typeof r==`number`&&Number.isFinite(r)&&(n[e]=H(r))}return n}catch{return{}}}function $(e){try{Object.keys(e).length===0?localStorage.removeItem(Q):localStorage.setItem(Q,JSON.stringify(e))}catch{}}function ye(){let[e,t]=(0,I.useState)(()=>typeof localStorage>`u`?{}:ve()),n=(0,I.useRef)(null);return(0,I.useEffect)(()=>{let e=e=>{let r=n.current;if(!r)return;let i=H(r.startWidth+(e.clientX-r.startX));t(e=>e[r.key]===i?e:{...e,[r.key]:i})},r=()=>{n.current&&(n.current=null,document.body.style.cursor=``,t(e=>($(e),e)))};return window.addEventListener(`pointermove`,e),window.addEventListener(`pointerup`,r),window.addEventListener(`pointercancel`,r),()=>{window.removeEventListener(`pointermove`,e),window.removeEventListener(`pointerup`,r),window.removeEventListener(`pointercancel`,r)}},[]),{widths:e,begin:(0,I.useCallback)((t,r)=>{r.preventDefault(),n.current={key:t,startX:r.clientX,startWidth:U(t,e)},document.body.style.cursor=`col-resize`},[e]),reset:(0,I.useCallback)(e=>{t(t=>{if(!(e in t))return t;let{[e]:n,...r}=t;return $(r),r})},[])}}var be={disk:!1,gpu:!1,net:!1};function xe({snapshot:e}){let t=d(),n=(0,I.useRef)(null),[r,i]=(0,I.useState)(`grouped`),[a,o]=(0,I.useState)(!1),[s,c]=(0,I.useState)(``),[l,u]=(0,I.useState)(null),[f,p]=(0,I.useState)(`desc`),[m,h]=(0,I.useState)(()=>new Set),{pendingKill:g,groupProtected:_,requestKillProcess:v,requestKillGroup:y,confirmKill:b,cancelKill:x}=N(e),{send:S}=me(),[C,w]=(0,I.useState)(null),T=e.signals??[],{widths:E,begin:D,reset:O}=ye(),{rows:k,totals:A}=(0,I.useMemo)(()=>P({processes:e.processes,groups:e.groups,mode:r,ppmOnly:a,query:s,sortKey:l,sortDir:f,expanded:m}),[e.processes,e.groups,r,a,s,l,f,m]),j=e.processColumns??be,M=(0,I.useMemo)(()=>re(j,l,E),[j,l,E]),F=e.system.gpus[0]?.utilPercent,L=ee({count:k.length,getScrollElement:()=>n.current,estimateSize:()=>t?44:28,overscan:12}),R=(0,I.useCallback)(e=>{let[t,n]=ne(l,f,e);u(t),p(n)},[l,f]),z=(0,I.useCallback)(e=>{h(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);return(0,K.jsxs)(`div`,{className:`h-full flex flex-col min-h-0 @container`,style:ie(M),"data-testid":`sysmon-processes`,"data-row-count":k.length,children:[(0,K.jsx)(J,{mode:r,onModeChange:i,ppmOnly:a,onPpmOnlyChange:o,onQueryChange:c}),(0,K.jsx)(Y,{sortKey:l,sortDir:f,grid:M,onSort:R,resize:{onResizeStart:D,onResizeReset:O}}),(0,K.jsx)(`div`,{ref:n,className:`flex-1 min-h-0 overflow-y-auto`,children:(0,K.jsx)(`div`,{style:{height:L.getTotalSize(),position:`relative`},children:L.getVirtualItems().map(e=>{let t=k[e.index];return t?(0,K.jsx)(`div`,{style:{position:`absolute`,top:0,left:0,right:0,transform:`translateY(${e.start}px)`},children:t.kind===`group`?(0,K.jsx)(se,{group:t.group,expanded:t.expanded,grid:M,killProtected:_.get(t.group.key)??!0,onToggle:z,onKillClick:y}):(0,K.jsx)(he,{proc:t.proc,signals:T,onDetails:w,onKill:v,onSignal:(e,t,n)=>void S(e,t,n),children:(0,K.jsx)(le,{proc:t.proc,indent:t.indent,grid:M,onKillClick:v})})},t.kind===`group`?t.group.key:`p:${t.proc.pid}`):null})})}),(0,K.jsx)(ae,{totals:A,grid:M,gpuUtilPercent:F}),(0,K.jsx)(te,{target:g,onConfirm:b,onCancel:x}),(0,K.jsx)(_e,{pid:C?.pid??null,name:C?.name??``,onClose:()=>w(null)})]})}export{xe as ProcessTable};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{Ar as r,G as i,Jr as a,W as o}from"./icons-CO_II6D-.js";import{r as s}from"./api-client-F5Zi1sR0.js";import{E as c,t as l}from"./settings-store-DfuiLq_9.js";import{n as u}from"./utils-btZ8C8-R.js";import{t as d}from"./ws-auth-Ytui7dXP.js";import{$ as f}from"./index-DhWjx5iR.js";import{r as p}from"./run-in-terminal-DKBcEGVu.js";function m(e,t,n=`8081`){let r=d(`/ws/remote-desktop`),i=e.protocol===`https:`?`wss:`:`ws:`;return t&&e.protocol!==`https:`?`ws://${e.hostname}:${n}${r}`:`${i}//${e.host}${r}`}var h=30;function g(e,t=h){return Math.round(e*1e6/t)}var _=e(t(),1);function v(e,t){return t||e}function y(e){let[t,n]=(0,_.useState)(`idle`),[r,i]=(0,_.useState)(null),[a,o]=(0,_.useState)({width:0,height:0}),s=(0,_.useRef)(null),c=(0,_.useRef)(null),l=(0,_.useRef)(!1),u=(0,_.useRef)(0),d=(0,_.useRef)(0),f=(0,_.useRef)(null),p=(0,_.useRef)(!1),m=(0,_.useCallback)(e=>{n(`error`),i(e)},[]),h=(0,_.useCallback)(async t=>{if(f.current=t,typeof VideoDecoder>`u`){n(`unsupported`),i(`This browser has no WebCodecs VideoDecoder — try Chrome, Edge, or Safari 16.4+.`);return}let r={codec:t,optimizeForLatency:!0};try{if(!(await VideoDecoder.isConfigSupported(r)).supported){n(`unsupported`),i(`This browser's decoder does not support ${t}.`);return}}catch(e){m(e.message);return}s.current?.close(),l.current=!1,d.current=0;let a=new VideoDecoder({output:t=>{u.current+=1;let n=e.current;n&&((n.width!==t.displayWidth||n.height!==t.displayHeight)&&(n.width=t.displayWidth,n.height=t.displayHeight,o({width:t.displayWidth,height:t.displayHeight})),c.current||=n.getContext(`2d`),c.current?.drawImage(t,0,0,n.width,n.height)),t.close()},error:e=>y(e.message)});try{a.configure(r)}catch(e){m(e.message);return}s.current=a,p.current=!0,n(`ready`),i(null)},[e,m]),y=(0,_.useCallback)(e=>{if(!p.current)return;let t=f.current;if(!t){m(e);return}try{s.current?.close()}catch{}s.current=null,h(t)},[h,m]);return{status:t,errorMessage:r,configure:h,decodeAccessUnit:(0,_.useCallback)((e,t)=>{let n=s.current;if(!(!n||n.state!==`configured`)&&v(l.current,t)){t&&(l.current=!0);try{n.decode(new EncodedVideoChunk({type:t?`key`:`delta`,timestamp:g(d.current++),data:e}))}catch(e){y(e.message)}}},[y]),reset:(0,_.useCallback)(()=>{p.current=!1;try{s.current?.close()}catch{}s.current=null,l.current=!1,u.current=0,d.current=0,n(`idle`),i(null)},[]),getFrameCount:(0,_.useCallback)(()=>u.current,[]),frameSize:a}}function b(e){return e.code===`KeyV`&&(e.ctrlKey||e.metaKey)}function x(e){return(e.code===`KeyC`||e.code===`KeyX`)&&(e.ctrlKey||e.metaKey)}function S(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 C(e){try{return navigator.clipboard?.writeText?(await navigator.clipboard.writeText(e),!0):!1}catch{return!1}}var w=120,T=400;function ee(){let e=(0,_.useRef)(null),t=(0,_.useRef)(null),n=(0,_.useRef)(null),r=(0,_.useRef)(0),i=(0,_.useRef)(0),[a,o]=(0,_.useState)(`idle`),s=(0,_.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,_.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>T)&&(r.current=c+w/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,_.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,_.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,_.useCallback)(()=>n.current?n.current.stream.getAudioTracks():[],[]);return(0,_.useEffect)(()=>()=>s(),[s]),{status:a,configure:l,decodePacket:u,reset:s,getTracks:d}}var E=5e3,D=2;function O(e,{displayId:t}={}){let n=(0,_.useRef)(null),r=(0,_.useRef)(0),[i,a]=(0,_.useState)(`connecting`),[o,u]=(0,_.useState)(null),[d,f]=(0,_.useState)(0),[p,h]=(0,_.useState)(()=>({preset:c(l.getState().remoteDesktopQuality)??`balanced`,held:1})),g=(0,_.useRef)(c(l.getState().remoteDesktopQuality)),[v,b]=(0,_.useState)(null),x=(0,_.useRef)(null),S=l(e=>e.remoteDesktopShowCursor),w=l(e=>e.remoteDesktopClipboardSync),T=(0,_.useRef)(S),O=(0,_.useRef)(w);(0,_.useEffect)(()=>{T.current=S},[S]),(0,_.useEffect)(()=>{O.current=w},[w]);let k=(0,_.useRef)(l.getState().remoteDesktopCodec),[A,j]=(0,_.useState)(k.current),M=y(e),N=ee(),[P,F]=(0,_.useState)(!1),[I,L]=(0,_.useState)(!1),[R,z]=(0,_.useState)(null),[B,V]=(0,_.useState)(null),[H,U]=(0,_.useState)(null),[W,G]=(0,_.useState)(null),K=(0,_.useCallback)(e=>{let t=n.current;t?.readyState===WebSocket.OPEN&&t.send(JSON.stringify(e))},[]),q=(0,_.useCallback)(e=>{let t=c(e.preset);t&&h({preset:t,held:typeof e.held==`number`&&e.held>0&&e.held<1?e.held:1})},[]),J=(0,_.useCallback)(e=>{if(e!==`custom`)return{type:`quality`,preset:e};let t=l.getState();return{type:`quality`,preset:`custom`,percent:t.remoteDesktopCustomQualityPercent,fps:t.remoteDesktopCustomFps}},[]),Y=(0,_.useCallback)(e=>{g.current=e,l.getState().setRemoteDesktopQuality(e),K(J(e))},[J,K]),X=(0,_.useCallback)((e,t)=>{let n=l.getState();n.setRemoteDesktopCustomQuality(e,t),n.setRemoteDesktopQuality(`custom`),g.current=`custom`,K(J(`custom`))},[J,K]),Z=(0,_.useCallback)(e=>{z(null),K({type:`privacy`,enabled:e})},[K]),Q=(0,_.useCallback)(e=>{F(e),e||N.reset(),K({type:`audio`,enabled:e})},[N,K]),$=(0,_.useCallback)(e=>{k.current=e,l.getState().setRemoteDesktopCodec(e),j(e),e&&K({type:`codec`,encoder:e})},[K]),te=(0,_.useCallback)(e=>{G(null),K({type:`resolution`,modeId:e})},[K]),ne=(0,_.useCallback)(e=>{T.current=e,l.getState().setRemoteDesktopShowCursor(e),K({type:`cursor`,show:e})},[K]),re=(0,_.useCallback)((e,t,n=!1)=>{K({type:`clipboard`,text:e,paste:t,shift:n})},[K]),ie=(0,_.useCallback)(()=>{x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{x.current=null,K({type:`clipboardRead`})},350)},[K]),ae=(0,_.useCallback)(()=>b(null),[]);(0,_.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]),(0,_.useEffect)(()=>{let e=!1,i=null;a(`connecting`),u(null),L(!1),z(null),r.current=0,M.reset(),(async()=>{let o;try{o=(await s.post(`/api/remote-desktop/session`)).nonce}catch(t){e||(a(`error`),u(t.message));return}if(e)return;let c=m(window.location,!1,void 0),l=new WebSocket(c);l.binaryType=`arraybuffer`,n.current=l,l.onopen=()=>{l.send(JSON.stringify({type:`auth`,nonce:o,...t?{displayId:t}:{},cursor:T.current,...k.current?{codec:k.current}:{}})),g.current&&l.send(JSON.stringify(J(g.current))),i=setInterval(()=>K({type:`ping`}),E)},l.onmessage=t=>{if(typeof t.data==`string`){let n;try{n=JSON.parse(t.data)}catch{return}if(n.type===`config`&&typeof n.codec==`string`)q(n),j(typeof n.encoder==`string`?n.encoder:null),M.configure(n.codec).then(()=>{e||a(`streaming`)});else if(n.type===`quality`)q(n);else if(n.type===`codec`)j(typeof n.encoder==`string`?n.encoder:null);else if(n.type===`resolution`)V(typeof n.modeId==`string`?n.modeId:null),U(typeof n.original==`string`?n.original:null),G(null);else if(n.type===`resolutionError`)G(typeof n.message==`string`?n.message:`The host refused the mode.`);else if(n.type===`privacy`)L(n.enabled===!0),z(typeof n.reason==`string`?n.reason:null);else if(n.type===`audio`){let e=n.enabled===!0;if(F(e),!e){N.reset();return}let t=typeof n.channels==`number`?n.channels:2,r=typeof n.sampleRate==`number`?n.sampleRate:48e3;N.configure(t,r)}else if(n.type===`clipboard`&&typeof n.text==`string`){if(!O.current)return;let t=n.text;C(t).then(n=>{!n&&!e&&b(t)})}else n.type===`error`&&(a(`error`),u(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]===D){N.decodePacket(n.subarray(1));return}M.decodeAccessUnit(n.subarray(1),n[0]===1)}},l.onerror=()=>{e||(a(`error`),u(`WebSocket error`))},l.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{M.reset()}catch{}try{N.reset()}catch{}}},[d,t]);let oe=(0,_.useCallback)(()=>f(e=>e+1),[]),se=(0,_.useCallback)(()=>r.current,[]);return{connState:i,errorMessage:o,decoderStatus:M.status,decoderErrorMessage:M.errorMessage,sendMessage:K,reconnect:oe,getTotalBytes:se,getFrameCount:M.getFrameCount,frameSize:M.frameSize,quality:p,setQuality:Y,setCustomQuality:X,showCursor:S,setShowCursor:ne,codec:A,setCodec:$,audioOn:P,setAudioOn:Q,getAudioTracks:N.getTracks,privacyOn:I,privacyError:R,setPrivacyOn:Z,hostModeId:B,hostOriginalModeId:H,resolutionError:W,setHostMode:te,pendingHostClipboard:v,clearHostClipboard:ae,sendClipboard:re,requestHostClipboard:ie}}function k(e){return Math.min(Math.max(e,0),1)}function A(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:k(r),yFrac:k(i)}}function j(e,t,n,r){let i=r.scale||1,a=n.left+n.width/2,o=n.top+n.height/2;return A(a+(e-a-r.panX)/i,o+(t-o-r.panY)/i,n)}function M(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 N(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||P(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 P(e,t){return e.current===t.current?e.preferred===t.preferred?e.refresh>t.refresh:e.preferred:e.current}function F(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)=>P(t,e)?t:e)}function I(){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 L(e){let t=`${e.width} × ${e.height}`;return e.refresh>0?`${t} · ${e.refresh} Hz`:t}var R=[`video/mp4;codecs=avc1.42E01E,mp4a.40.2`,`video/mp4`,`video/webm;codecs=vp9,opus`,`video/webm;codecs=vp8,opus`,`video/webm`];function z(e=e=>typeof MediaRecorder<`u`&&MediaRecorder.isTypeSupported(e)){return typeof MediaRecorder>`u`?null:R.find(e)??null}function B(e){return e.startsWith(`video/mp4`)?`mp4`:`webm`}function V(e,t=new Date){let n=e=>String(e).padStart(2,`0`);return`ppm-remote-${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}_${n(t.getHours())}-${n(t.getMinutes())}-${n(t.getSeconds())}`}.${e}`}function H(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.rel=`noopener`,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e4)}async function U(e){if(!e||e.width===0||e.height===0)return!1;let t=await new Promise(t=>e.toBlob(t,`image/png`));return t?(H(t,V(`png`)),!0):!1}function W(e,t){let n=(0,_.useRef)(null),r=(0,_.useRef)([]),[i,a]=(0,_.useState)(!1),[o,s]=(0,_.useState)(0),c=(0,_.useRef)(null);c.current===null&&(c.current=z());let l=(0,_.useCallback)(()=>{n.current?.stop()},[]),u=(0,_.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&&H(e,V(B(o)))},u.start(1e3),n.current=u,a(!0),s(0)},[e,t]),d=(0,_.useCallback)(()=>{n.current?l():u()},[u,l]);return(0,_.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,_.useEffect)(()=>()=>{n.current?.stop()},[]),{recording:i,elapsedSec:o,supported:c.current!==null,toggle:d}}var G={fps:0,kbps:0};function K(e,t){let n=t.atMs-e.atMs;if(n<=0)return G;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 q=n(),J=500;function Y({canvasRef:e,getFrameCount:t,getTotalBytes:n,positionClassName:r=`left-1 top-1`}){let i=l(e=>e.remoteDesktopStatsVisible),[a,o]=(0,_.useState)({fps:0,kbps:0,width:0,height:0}),s=(0,_.useRef)({frameCount:0,totalBytes:0,atMs:0});return(0,_.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}=K(s.current,r);s.current=r;let c=e.current;o({fps:i,kbps:a,width:c?.width??0,height:c?.height??0})},J);return()=>clearInterval(r)},[i,e,t,n]),i?(0,q.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 X(){let{caps:e}=f(!1),t=e?.displays??[],[n,r]=(0,_.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,_.useCallback)(()=>{t.length<2||r(t[(t.findIndex(e=>e.id===i?.id)+1)%t.length]?.id)},[t,i])}}function Z({pendingText:e,onDismiss:t,missingToolAction:n,onDismissMissingTool:a,positionClassName:s=`absolute bottom-2 left-1/2 max-w-[92%] -translate-x-1/2`}){let[c,l]=(0,_.useState)(!1);return e===null?n==null?null:(0,q.jsxs)(Q,{onDismiss:a??(()=>{}),testId:`remote-desktop-clipboard-missing-tool`,positionClassName:s,children:[(0,q.jsx)(o,{className:`size-4 shrink-0 text-amber-300`}),(0,q.jsx)(`span`,{className:`min-w-0 flex-1`,children:`The host has no clipboard tool installed.`}),n.kind===`terminal`&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>p(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,q.jsx)(r,{className:`size-3.5`}),` `,n.label]})]}):(0,q.jsxs)(Q,{onDismiss:t,testId:`remote-desktop-clipboard-pending`,positionClassName:s,children:[(0,q.jsx)(i,{className:`size-4 shrink-0 text-emerald-400`}),(0,q.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[c?`Could not copy — select the text manually:`:`Copied on the host:`,(0,q.jsx)(`span`,{className:`ml-1 text-white/60`,children:$(e)})]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>{S(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 Q({children:e,onDismiss:t,testId:n,positionClassName:r}){return(0,q.jsxs)(`div`,{className:u(`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,q.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,q.jsx)(a,{className:`size-3.5`})})]})}function $(e){let t=e.replace(/\s+/g,` `).trim();return t.length>60?`${t.slice(0,60)}…`:t}export{U as a,N as c,j as d,M as f,b as h,W as i,L as l,x as m,X as n,F as o,O as p,Y as r,I as s,Z as t,A as u};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/remote-desktop-mobile-view-DsSHawSK.js","assets/rolldown-runtime-C5c2KzVm.js","assets/index-DhWjx5iR.js","assets/preload-helper-BEFjQwLd.js","assets/vendor-ui-P9Ym7hCv.js","assets/vendor-markdown-QKPNiWEd.js","assets/button-DeAyLH9U.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-F5Zi1sR0.js","assets/react-CzUPVyyG.js","assets/panel-store-CWHPmHwj.js","assets/session-list-sync-triggers-ATvz-1g3.js","assets/project-store-CCimwgGF.js","assets/window-store-vo1N70nK.js","assets/settings-store-DfuiLq_9.js","assets/file-store-DY1_0nzY.js","assets/window-pip-registry-mDgwpAwP.js","assets/onboarding-quick-orientation-DPHYFMbA.js","assets/dialog-Bocc0Fgb.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-BClDZJP5.js","assets/format-file-meta-Drxf2J-k.js","assets/fs-api-IX9SHt5k.js","assets/context-menu-7OX80HDB.js","assets/input-CG8PS8mS.js","assets/mobile-bottom-sheet-D4UyOatB.js","assets/use-visual-viewport-BGpcMnIx.js","assets/scroll-area-sjOeAfoD.js","assets/chat-preparation-cache-BUCR58h4.js","assets/file-icons-CK0J4QSy.js","assets/format-date-BMtvCeb9.js","assets/git-repo-store-B_u5RzIM.js","assets/ws-auth-Ytui7dXP.js","assets/tab-store-CbPh8CAX.js","assets/apply-theme-Cc_cmrD5.js","assets/resolve-theme-STMsK2vc.js","assets/index-oIvYSKTT.css","assets/remote-desktop-clipboard-notice-Cgoznh8L.js","assets/run-in-terminal-DKBcEGVu.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{_t as r}from"./vendor-ui-P9Ym7hCv.js";import"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./settings-store-DfuiLq_9.js";import{t as i}from"./preload-helper-BEFjQwLd.js";import{n as a}from"./portal-container-context-NFSuymMu.js";import"./panel-store-CWHPmHwj.js";import"./window-store-vo1N70nK.js";import"./project-store-CCimwgGF.js";import"./session-list-sync-triggers-ATvz-1g3.js";import{et as o}from"./index-DhWjx5iR.js";import"./run-in-terminal-DKBcEGVu.js";import{n as s,t as c}from"./remote-desktop-readiness-gate-CHiQEd9Q.js";var l=e(t(),1),u=e(r(),1),d=n(),f=(0,l.lazy)(()=>i(()=>import(`./remote-desktop-mobile-view-DsSHawSK.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])));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};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{En as r,Gr as i,Gt as a,Jr as o,Mn as s,Nt as c,On as l,Qt as u,Ur as d,W as f,or as p,pr as m,ti as h,ut as g,xr as _,z as v,zt as y}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import{D as b,T as x,t as S}from"./settings-store-DfuiLq_9.js";import{n as C}from"./utils-btZ8C8-R.js";import"./panel-store-CWHPmHwj.js";import"./window-store-vo1N70nK.js";import"./project-store-CCimwgGF.js";import"./session-list-sync-triggers-ATvz-1g3.js";import{t as w}from"./use-visual-viewport-BGpcMnIx.js";import"./ws-auth-Ytui7dXP.js";import{$ as ee}from"./index-DhWjx5iR.js";import"./run-in-terminal-DKBcEGVu.js";import{a as T,c as te,d as E,f as D,i as ne,n as re,o as O,p as k,r as A,s as ie,t as j}from"./remote-desktop-clipboard-notice-Cgoznh8L.js";var M=e(t(),1);function ae(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 oe(e,t,n=15){return Math.abs(t-e)>n?`pinch`:`scroll`}function N(e,t){return Math.hypot(t.x-e.x,t.y-e.y)}function P(e,t){return{x:(e.x+t.x)/2,y:(e.y+t.y)/2}}function F(e,t,n){return Math.min(Math.max(e,t),n)}function I(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 se(e,t,n){return{start:{x:e,y:t,t:performance.now()},last:{x:e,y:t},moved:!1,rect:n}}function ce(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=E(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=E(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:F(a.xFrac+s/e.rect.width,0,1),yFrac:F(a.yFrac+c/e.rect.height,0,1)},sendCursorMove:!0}}function L(e,t,n,r,i,a){let o={x:t,y:n,t:performance.now()},s=ae(e.start,o,10,300);if(r===`touch`){let r=E(t,n,e.rect,i);return!e.moved&&s?I(r.xFrac,r.yFrac,`left`):e.moved?[{type:`pointer`,xFrac:r.xFrac,yFrac:r.yFrac,button:`left`,down:!1}]:[]}return!e.moved&&s?I(a.xFrac,a.yFrac,`left`):[]}function R(e,t,n){let r=P(e,t);return{startDistance:N(e,t),startMid:r,lastMid:r,startScale:n,startTime:performance.now(),gesture:null}}function le(e,t,n,r){let i=N(t,n),a=P(t,n);if(e.gesture===null){let t=Math.abs(i-e.startDistance),n=N(e.startMid,a);if(t>15)e.gesture=oe(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:F(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 z(e,t,n){if(e.gesture===null&&performance.now()-e.startTime<=300){let r=E(e.lastMid.x,e.lastMid.y,t,n);return I(r.xFrac,r.yFrac,`right`)}return[]}var B={scale:1,panX:0,panY:0},ue=40,de=120;function fe({containerRef:e,canvasRef:t,mode:n,sendMessage:r,enabled:i}){let[a,o]=(0,M.useState)(B),[s,c]=(0,M.useState)({xFrac:.5,yFrac:.5}),l=(0,M.useRef)(a),u=(0,M.useRef)(s),d=(0,M.useRef)(n);d.current=n;let f=(0,M.useRef)({transform:null,cursor:null,sendCursorMove:!1,wheelPx:0}),p=(0,M.useRef)(0),m=(0,M.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/ue)*de}),e.wheelPx=0)},[r]),h=(0,M.useCallback)(()=>{p.current||=requestAnimationFrame(m)},[m]),g=(0,M.useCallback)(()=>{l.current=B,o(B)},[]);return(0,M.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:D(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=se(n.clientX,n.clientY,t)}else if(e.touches.length===2){a=null;let[t,n]=[e.touches[0],e.touches[1]];o=R({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=ce(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=le(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(L(a,e,n,d.current,l.current,u.current)),a=null}o&&=(s(z(o,c(),l.current)),null)},v=e=>{e.stopPropagation(),a?.moved&&d.current===`touch`&&s(L(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,M.useRef)(null);return(0,M.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,M.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:a,mode:c,onToggleMode:l,onOpenKeyboard:d,onResetZoom:f,settingsOpen:p,onToggleSettings:g,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:l,label:c===`mouse`?`Mouse`:`Touch`,active:!0,children:c===`mouse`?(0,H.jsx)(s,{className:`size-5`}):(0,H.jsx)(y,{className:`size-5`})}),(0,H.jsx)(U,{onClick:d,label:`Keyboard`,children:(0,H.jsx)(u,{className:`size-5`})}),(0,H.jsx)(U,{onClick:f,label:`Reset zoom`,children:(0,H.jsx)(h,{className:`size-5`})}),e!==null&&(0,H.jsx)(U,{onClick:t,label:e.length>10?`${e.slice(0,9)}…`:e,children:(0,H.jsx)(r,{className:`size-5`})}),(0,H.jsx)(U,{onClick:a,label:n,children:(0,H.jsx)(i,{className:`size-5`})}),(0,H.jsx)(U,{onClick:g,label:`More`,active:p,children:(0,H.jsx)(m,{className:`size-5`})}),(0,H.jsx)(U,{onClick:_,label:`Close`,children:(0,H.jsx)(o,{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,M.useState)(new Set),i=(0,M.useRef)(n);i.current=n,(0,M.useEffect)(()=>()=>{i.current.forEach(t=>e({type:`key`,code:t,down:!1}))},[e]);let a=(0,M.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,M.useCallback)(t=>{e({type:`key`,code:t,down:!0}),e({type:`key`,code:t,down:!1})},[e]),s=(0,M.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:r,clipboardEnabled:i,onSetClipboardEnabled:o,audioOn:l,audioReason:u,onSetAudioOn:p,privacyOn:m,privacyReason:h,onSetPrivacyOn:y,hostModes:b,hostModeId:x,hostOriginalModeId:S,onSetHostMode:w,canResizeHost:ee,resolutionError:T,recording:E,recordingSupported:D,onToggleRecording:ne,onScreenshot:re}){let k=(0,M.useMemo)(()=>te(b),[b]),A=(0,M.useMemo)(()=>ie(),[]),j=(0,M.useMemo)(()=>O(b,A,x),[b,A,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)(c,{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:()=>r(!n),testId:`remote-desktop-mobile-cursor-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(f,{className:`size-4`}),label:`Sync clipboard`,hint:`Off: Ctrl+V pastes the host's own clipboard`,checked:i,onToggle:()=>o(!i),testId:`remote-desktop-mobile-clipboard-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(d,{className:`size-4`}),label:`Play host audio`,hint:u??void 0,checked:l,disabled:u!==null,onToggle:()=>p(!l),testId:`remote-desktop-mobile-audio-toggle`}),(0,H.jsx)(Y,{icon:(0,H.jsx)(g,{className:`size-4`}),label:`Privacy mode`,hint:h??`Blocks the host's own keyboard and mouse`,checked:m,disabled:h!==null&&!m,onToggle:()=>y(!m),testId:`remote-desktop-mobile-privacy-toggle`}),ee&&k.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`}),j&&(0,H.jsx)(`button`,{type:`button`,onClick:()=>w(j.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`}),k.map(e=>{let t=(x??k.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:re,"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)(a,{className:`size-4 opacity-80`}),` Save screenshot`]}),D&&(0,H.jsx)(`button`,{type:`button`,onClick:ne,"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)(_,{className:`size-4 text-red-500`}),` Stop recording`]}):(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(v,{className:`size-4 opacity-80`}),` Start recording`]})})]})}function X({onClose:e}){let t=(0,M.useRef)(null),n=(0,M.useRef)(null),[r,i]=(0,M.useState)(`mouse`),[a,o]=(0,M.useState)(!1),[s,c]=(0,M.useState)(!1),u=re(),{connState:d,errorMessage:f,decoderStatus:m,decoderErrorMessage:h,sendMessage:g,reconnect:_,getTotalBytes:v,getFrameCount:y,quality:C,setQuality:te,showCursor:E,setShowCursor:O,audioOn:ie,setAudioOn:ae,getAudioTracks:oe,privacyOn:N,privacyError:P,setPrivacyOn:F,hostModeId:I,hostOriginalModeId:se,resolutionError:ce,setHostMode:L,pendingHostClipboard:R,clearHostClipboard:le,sendClipboard:z,requestHostClipboard:B}=k(n,{displayId:u.displayId}),ue=S(e=>e.remoteDesktopStatsVisible),de=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:g,enabled:G}),[Y,X]=(0,M.useState)(!1),_e=(0,M.useCallback)(e=>{X(!0),z(e,!0)},[z]),{caps:Z}=ee(!1),Q=ne(n,oe),{inputRef:ve,show:ye}=pe(g,G,V?_e:void 0),$=w(!0)?.keyboardInset??0,be=(0,M.useCallback)(()=>i(e=>e===`mouse`?`touch`:`mouse`),[]),xe=(0,M.useCallback)(()=>{ye(),o(!0)},[ye]),Se=m===`unsupported`?h: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=D({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)(l,{className:`size-6 opacity-70`}),(0,H.jsx)(`span`,{className:`max-w-sm px-4 text-center`,children:Se}),(d===`error`||d===`closed`)&&m!==`unsupported`&&(0,H.jsxs)(`button`,{onClick:_,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)(p,{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)(j,{pendingText:R,onDismiss:le,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:ue,onToggleStats:de,showCursor:E,onSetShowCursor:O,clipboardEnabled:V,onSetClipboardEnabled:U,audioOn:ie,audioReason:Z&&!Z.audio.available?Z.audio.reason:null,onSetAudioOn:ae,privacyOn:N,privacyReason:P??(Z&&!Z.privacy.available?Z.privacy.reason:null),hostModes:Z?.resolutions?.modes??[],hostModeId:I,hostOriginalModeId:se,onSetHostMode:L,canResizeHost:Z?.inputReady??!1,resolutionError:ce,onSetPrivacyOn:F,recording:Q.recording,recordingSupported:Q.supported,onToggleRecording:Q.toggle,onScreenshot:()=>void T(n.current)}),a&&(0,H.jsx)(he,{sendMessage:g,onCopyCombo:V?B:void 0}),(0,H.jsx)(me,{displayLabel:u.displays.length>1?u.current?.label??null:null,onNextDisplay:u.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)(A,{canvasRef:n,getFrameCount:y,getTotalBytes:v,positionClassName:`left-1 top-[calc(env(safe-area-inset-top,0px)+2.75rem)]`})]})}export{X as default};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{Ar as r,Dn as i,E as a,ct as o,hr as s,un as c,z as l}from"./icons-CO_II6D-.js";import{t as u}from"./settings-store-DfuiLq_9.js";import{$ as d}from"./index-DhWjx5iR.js";import{r as f}from"./run-in-terminal-DKBcEGVu.js";var p=e(t(),1),m=n();function h({onCancel:e,children:t}){let n=u(e=>e.remoteDesktopWarningDismissed),r=u(e=>e.setRemoteDesktopWarningDismissed),[a,o]=(0,p.useState)(!1),[c,l]=(0,p.useState)(!1);if(n||a)return(0,m.jsx)(m.Fragment,{children:t});let d=()=>{c&&r(!0),o(!0)};return(0,m.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,m.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,m.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,m.jsx)(i,{className:`size-5 shrink-0 text-primary`}),(0,m.jsx)(`h2`,{className:`text-base font-semibold`,children:`Remote Desktop`}),(0,m.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,m.jsxs)(`ul`,{className:`flex flex-col gap-2 text-sm text-white/80`,children:[(0,m.jsxs)(`li`,{className:`flex gap-2`,children:[(0,m.jsx)(s,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,m.jsxs)(`span`,{children:[`This streams the host's `,(0,m.jsx)(`strong`,{children:`whole screen`}),` and lets you `,(0,m.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,m.jsxs)(`li`,{className:`flex gap-2`,children:[(0,m.jsx)(s,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,m.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,m.jsxs)(`li`,{className:`flex gap-2`,children:[(0,m.jsx)(s,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,m.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,m.jsxs)(`label`,{className:`flex min-h-11 cursor-pointer items-center gap-2 text-sm text-white/70`,children:[(0,m.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,m.jsxs)(`div`,{className:`flex gap-2`,children:[(0,m.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,m.jsx)(`button`,{type:`button`,onClick:d,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 g({onCancel:e,children:t}){let[n,r]=(0,p.useState)(!1),{caps:a,failed:o,runHostAction:s}=d(!n);if(n||a?.videoReady&&a.inputReady)return(0,m.jsx)(m.Fragment,{children:t});let l=a?.requirements.filter(e=>!e.ok)??[],u=!!a?.videoReady&&!a.inputReady,h=t=>{f(t),e()};return(0,m.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,m.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,m.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,m.jsx)(i,{className:`size-5 shrink-0 text-primary`}),(0,m.jsx)(`h2`,{className:`text-base font-semibold`,children:`This host needs a few things`})]}),!a&&!o&&(0,m.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-white/70`,children:[(0,m.jsx)(c,{className:`size-4 animate-spin`}),` Checking the host…`]}),o&&(0,m.jsx)(`p`,{className:`text-sm text-red-300`,children:`Could not reach the host's remote-desktop service.`}),(0,m.jsx)(`ul`,{className:`flex flex-col gap-3`,children:a?.requirements.map(e=>(0,m.jsx)(_,{req:e,onHostAction:s,onTerminal:h},e.id))}),l.length>0&&(0,m.jsx)(`p`,{className:`text-xs text-white/50`,children:`Re-checking every few seconds — this updates by itself once fixed.`}),(0,m.jsxs)(`div`,{className:`flex gap-2`,children:[(0,m.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,m.jsx)(`button`,{type:`button`,disabled:!a?.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 _({req:e,...t}){return(0,m.jsxs)(`li`,{className:`flex gap-2`,"data-testid":`remote-desktop-requirement-${e.id}`,"data-ok":e.ok,children:[e.ok?(0,m.jsx)(a,{className:`mt-0.5 size-4 shrink-0 text-emerald-400`}):(0,m.jsx)(l,{className:`mt-0.5 size-4 shrink-0 text-amber-300`}),(0,m.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-2`,children:[(0,m.jsxs)(`div`,{className:`text-sm font-medium`,children:[e.title,!e.ok&&(0,m.jsx)(`span`,{className:`ml-2 text-xs font-normal text-white/50`,children:e.gates===`video`?`required`:`for mouse & keyboard`})]}),!e.ok&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`p`,{className:`text-sm text-white/70`,children:e.detail}),(0,m.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.actions.map(n=>(0,m.jsx)(v,{action:n,reqId:e.id,...t},n.label))})]})]})]})}function v({action:e,reqId:t,onHostAction:n,onTerminal:i}){let a=`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===`terminal`?(0,m.jsxs)(`button`,{type:`button`,className:a,onClick:()=>i(e.command),title:e.command,children:[(0,m.jsx)(r,{className:`size-4`}),` `,e.label]}):e.kind===`link`?(0,m.jsxs)(`a`,{className:a,href:e.url,target:`_blank`,rel:`noreferrer`,children:[(0,m.jsx)(o,{className:`size-4`}),` `,e.label]}):(0,m.jsx)(`button`,{type:`button`,className:a,onClick:()=>void n(t,e.action),children:e.label})}export{h as n,g as t};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{En as r,Gt as i,Nt as a,On as o,Tn as s,Zn as c,or as l,pr as u,ut as d,xr as f,z as p}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import{C as m,a as h,c as g,d as _,f as v,i as y,l as b,m as x,n as S,o as C,p as w,r as ee,s as T,t as E,u as D,w as te}from"./settings-store-DfuiLq_9.js";import{n as ne}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import"./panel-store-CWHPmHwj.js";import{t as re}from"./window-store-vo1N70nK.js";import"./project-store-CCimwgGF.js";import"./session-list-sync-triggers-ATvz-1g3.js";import{t as ie}from"./button-DeAyLH9U.js";import{a as ae,i as O,n as k,o as A,r as j,t as M}from"./dialog-Bocc0Fgb.js";import"./ws-auth-Ytui7dXP.js";import{$ as oe,An as N,Cn as P,Dn as F,En as I,On as L,Sn as R,Tn as z,bn as B,kn as V,wn as H,xn as se,yn as U}from"./index-DhWjx5iR.js";import"./run-in-terminal-DKBcEGVu.js";import{n as W,t as G}from"./remote-desktop-readiness-gate-CHiQEd9Q.js";import{a as K,c as ce,h as q,i as le,l as ue,m as J,n as de,o as Y,p as fe,r as pe,s as me,t as he,u as X}from"./remote-desktop-clipboard-notice-Cgoznh8L.js";var Z=e(t(),1);function ge(e,t,n,r){let i=(0,Z.useCallback)((n,r,i,a)=>{let o=e.current;if(!o)return;let{xFrac:s,yFrac:c}=X(n,r,o.getBoundingClientRect());t({type:`pointer`,xFrac:s,yFrac:c,button:i,down:a})},[e,t]);(0,Z.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&&q(e)){g=e.shiftKey;return}e.preventDefault(),t({type:`key`,code:e.code,down:!0}),r&&J(e)&&r.onCopyCombo()},v=e=>{r&&q(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:o,qualityChoice:s,onSetQuality:c,onOpenCustomQuality:l,codecs:h,codec:g,onSetCodec:_,hostModes:v,hostModeId:b,hostOriginalModeId:x,onSetHostMode:S,canResizeHost:C,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:oe,onSetPrivacyOn:W,recording:G,recordingElapsedSec:K,recordingSupported:q,onToggleRecording:le,onScreenshot:J,clipboardEnabled:de,onSetClipboardEnabled:fe,statsVisible:pe,onToggleStats:he}){let X=(0,Z.useMemo)(()=>ce(v),[v]),ge=(0,Z.useMemo)(()=>me(),[]),Q=(0,Z.useMemo)(()=>Y(v,ge,b),[v,ge,b]),ye=!!(x&&x!==b),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)(U,{children:[(0,$.jsx)(N,{className:ve,"aria-label":`Display`,title:`Display`,children:(0,$.jsx)(r,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(P,{children:`Display`}),(0,$.jsx)(H,{value:Se,onValueChange:n,children:e.map(e=>(0,$.jsxs)(z,{value:e.id,"data-testid":`remote-desktop-display-${e.id}`,children:[e.label,e.primary?` (main)`:``,` · `,e.width,`×`,e.height]},e.id))})]})]}),(0,$.jsxs)(U,{children:[(0,$.jsx)(N,{className:ve,"aria-label":`Display settings`,title:`Display settings`,"data-testid":`remote-desktop-settings-trigger`,children:(0,$.jsx)(u,{className:`size-3.5`})}),(0,$.jsxs)(se,{align:`end`,className:`w-64`,children:[(0,$.jsx)(P,{children:`Scale`}),(0,$.jsx)(H,{value:T,onValueChange:e=>D(e),children:y.map(e=>(0,$.jsx)(z,{value:e,"data-testid":`remote-desktop-view-style-${e}`,children:ee[e]},e))}),T===`custom`&&(0,$.jsx)(xe,{scale:E,onSet:re}),(0,$.jsx)(I,{}),(0,$.jsxs)(F,{children:[(0,$.jsxs)(V,{"data-testid":`remote-desktop-quality-submenu`,children:[`Image quality`,o.held<1&&(0,$.jsxs)(`span`,{className:`ml-1.5 text-[10px] opacity-60`,"data-testid":`remote-desktop-quality-held`,children:[Math.round(o.held*100),`% — link limited`]})]}),(0,$.jsx)(L,{className:`w-56`,children:(0,$.jsxs)(H,{value:s,onValueChange:e=>e===`custom`?l():c(e),children:[te.map(e=>(0,$.jsx)(z,{value:e,"data-testid":`remote-desktop-quality-${e}`,children:m[e].label},e)),(0,$.jsx)(z,{value:`custom`,"data-testid":`remote-desktop-quality-custom`,children:`Custom…`})]})})]}),h.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(V,{"data-testid":`remote-desktop-codec-submenu`,children:`Codec`}),(0,$.jsx)(L,{className:`w-56`,children:(0,$.jsxs)(H,{value:g??`auto`,onValueChange:e=>_(e===`auto`?null:e),children:[(0,$.jsxs)(z,{value:`auto`,children:[`Auto · `,_e(h[0])]}),h.map(e=>(0,$.jsx)(z,{value:e,"data-testid":`remote-desktop-codec-${e}`,children:_e(e)},e))]})})]}),C&&X.length>1&&(0,$.jsxs)(F,{children:[(0,$.jsx)(V,{"data-testid":`remote-desktop-resolution-submenu`,children:`Resolution`}),(0,$.jsxs)(L,{className:`max-h-80 w-56 overflow-y-auto`,children:[ye&&x&&(0,$.jsx)(R,{onSelect:()=>S(x),"data-testid":`remote-desktop-resolution-original`,children:`Original`}),Q&&(0,$.jsxs)(R,{onSelect:()=>S(Q.id),"data-testid":`remote-desktop-resolution-fit-local`,children:[`Fit local `,Q.width,`×`,Q.height]}),(ye||Q)&&(0,$.jsx)(I,{}),(0,$.jsx)(H,{value:b??X.find(e=>e.current)?.id??``,onValueChange:S,children:X.map(e=>(0,$.jsxs)(z,{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)(I,{}),(0,$.jsx)(B,{checked:ie,onCheckedChange:ae,"data-testid":`remote-desktop-show-cursor`,children:`Show remote cursor`}),(0,$.jsx)(B,{checked:de,onCheckedChange:fe,"data-testid":`remote-desktop-clipboard-toggle`,children:`Sync clipboard`}),(0,$.jsx)(B,{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)(I,{}),(0,$.jsx)(B,{checked:j,disabled:M!==null&&!j,onCheckedChange:W,"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??(oe?`Blocks the host's keyboard and mouse, and blanks its screen`:`Blocks the host's keyboard and mouse (its screen stays on)`)})]})}),(0,$.jsx)(I,{}),(0,$.jsxs)(R,{onSelect:J,"data-testid":`remote-desktop-screenshot`,children:[(0,$.jsx)(i,{className:`size-3.5`}),` Save screenshot`]}),q&&(0,$.jsx)(R,{onSelect:le,"data-testid":`remote-desktop-record`,children:G?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(f,{className:`size-3.5 text-red-500`}),` Stop recording · `,be(K)]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(p,{className:`size-3.5`}),` Start recording`]})})]})]}),j&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>W(!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`]}),G&&(0,$.jsxs)(`button`,{type:`button`,onClick:le,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(K)]}),(0,$.jsx)(`button`,{type:`button`,onClick:he,"aria-label":`Toggle stats overlay`,"aria-pressed":pe,title:`Quality monitor`,className:ne(ve,pe&&`bg-primary/70 text-primary-foreground hover:bg-primary/80`),children:(0,$.jsx)(a,{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,Z.useState)(null),i=(0,Z.useRef)(null),a=T(Math.round(C(e)*100)),o=n??a,l=g(o);(0,Z.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]);let u=e=>{r(e),i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{r(null),t(e/100)},300)},d=e=>t=>{t.preventDefault(),u(T(o+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:o<=5,"aria-label":`Decrease`,children:(0,$.jsx)(s,{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/(S-5),value:l,"aria-label":`Scale`,"aria-valuetext":`${o}%`,"data-testid":`remote-desktop-zoom-slider`,onKeyDown:e=>e.stopPropagation(),onChange:e=>u(b(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:`${l*100}%`},"data-testid":`remote-desktop-zoom-value`,children:[o,`%`]})]}),(0,$.jsx)(`button`,{type:`button`,className:f,onClick:d(1),disabled:o>=S,"aria-label":`Increase`,children:(0,$.jsx)(c,{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,Z.useState)(n),[u,d]=(0,Z.useState)(r),f=(0,Z.useRef)(null);(0,Z.useEffect)(()=>{e&&(l(n),d(r))},[e,n,r]),(0,Z.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[]);let p=i?_: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=v(e);d(t),m(c,t)},y=e=>{a(e);let t=w(c,e);t!==c&&(l(t),m(t,u))},b=x(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=>y(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,Z.useCallback)(()=>t(e),[t,e]);return(0,$.jsx)(W,{onCancel:n,children:(0,$.jsx)(G,{onCancel:n,children:(0,$.jsx)(Te,{})})})}function Te(){let e=(0,Z.useRef)(null),t=de(),{connState:n,errorMessage:r,decoderStatus:i,decoderErrorMessage:a,sendMessage:s,reconnect:c,getFrameCount:u,getTotalBytes:d,frameSize:f,quality:p,setQuality:m,setCustomQuality:g,showCursor:_,setShowCursor:v,codec:y,setCodec:b,audioOn:x,setAudioOn:S,getAudioTracks:C,privacyOn:w,privacyError:ee,setPrivacyOn:T,hostModeId:D,hostOriginalModeId:te,resolutionError:re,setHostMode:ie,pendingHostClipboard:ae,clearHostClipboard:O,sendClipboard:k,requestHostClipboard:A}=fe(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),z=E(e=>e.remoteDesktopCustomQualityPercent),B=E(e=>e.remoteDesktopCustomFps),V=E(e=>e.remoteDesktopCustomQualityMore),H=E(e=>e.setRemoteDesktopCustomQualityMore),[se,U]=(0,Z.useState)(!1),W=E(e=>e.setRemoteDesktopClipboardSync),{caps:G}=oe(!1),[ce,q]=(0,Z.useState)(!1),ue=(0,Z.useMemo)(()=>L?{onPasteText:(e,t)=>{q(!0),k(e,!0,t)},onCopyCombo:A}:void 0,[L,k,A]);ge(e,s,n===`streaming`,ue);let J=le(e,C),Y=h(N,P,f),me=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`,Y?`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`,!Y&&`max-h-full max-w-full`),style:Y?{width:Y.width,height:Y.height}:void 0})}),(0,$.jsx)(pe,{canvasRef:e,getFrameCount:u,getTotalBytes:d}),(0,$.jsx)(ye,{displays:t.displays,currentDisplayId:t.current?.id,onSelectDisplay:t.select,quality:p,qualityChoice:R,onSetQuality:m,onOpenCustomQuality:()=>U(!0),codecs:G?.encoders??[],codec:y,onSetCodec:b,hostModes:G?.resolutions?.modes??[],hostModeId:D,hostOriginalModeId:te,onSetHostMode:ie,canResizeHost:G?.inputReady??!1,resolutionError:re,viewStyle:N,customScale:P,onSetViewStyle:F,onSetCustomScale:I,showCursor:_,onSetShowCursor:v,audioOn:x,audioReason:G&&!G.audio.available?G.audio.reason:null,onSetAudioOn:S,privacyOn:w,privacyReason:ee??(G&&!G.privacy.available?G.privacy.reason:null),privacyCanBlank:G?.privacy?.canBlank??!1,onSetPrivacyOn:T,recording:J.recording,recordingElapsedSec:J.elapsedSec,recordingSupported:J.supported,onToggleRecording:J.toggle,onScreenshot:()=>void K(e.current),clipboardEnabled:L,onSetClipboardEnabled:W,statsVisible:j,onToggleStats:M}),(0,$.jsx)(he,{pendingText:ae,onDismiss:O,missingToolAction:ce&&G&&!G.clipboard.available?G.clipboard.action:null,onDismissMissingTool:()=>q(!1)}),(0,$.jsx)(Ce,{open:se,onOpenChange:U,percent:z,fps:B,more:V,onSetMore:H,onCommit:g,frameSize:f}),me&&(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)(o,{className:`size-6 opacity-70`}),(0,$.jsx)(`span`,{className:`max-w-sm text-center px-4`,children:me}),(n===`error`||n===`closed`)&&i!==`unsupported`&&(0,$.jsxs)(`button`,{onClick:c,className:`flex items-center gap-1.5 rounded-md bg-white/10 px-3 py-1.5 hover:bg-white/20`,children:[(0,$.jsx)(l,{className:`size-3.5`}),` Reconnect`]})]})]})}export{we as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/general-settings-section-Doepm2sH.js","assets/rolldown-runtime-C5c2KzVm.js","assets/index-DhWjx5iR.js","assets/preload-helper-BEFjQwLd.js","assets/vendor-ui-P9Ym7hCv.js","assets/vendor-markdown-QKPNiWEd.js","assets/button-DeAyLH9U.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-F5Zi1sR0.js","assets/react-CzUPVyyG.js","assets/panel-store-CWHPmHwj.js","assets/session-list-sync-triggers-ATvz-1g3.js","assets/project-store-CCimwgGF.js","assets/window-store-vo1N70nK.js","assets/settings-store-DfuiLq_9.js","assets/file-store-DY1_0nzY.js","assets/window-pip-registry-mDgwpAwP.js","assets/onboarding-quick-orientation-DPHYFMbA.js","assets/dialog-Bocc0Fgb.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-BClDZJP5.js","assets/format-file-meta-Drxf2J-k.js","assets/fs-api-IX9SHt5k.js","assets/context-menu-7OX80HDB.js","assets/input-CG8PS8mS.js","assets/mobile-bottom-sheet-D4UyOatB.js","assets/use-visual-viewport-BGpcMnIx.js","assets/scroll-area-sjOeAfoD.js","assets/chat-preparation-cache-BUCR58h4.js","assets/file-icons-CK0J4QSy.js","assets/format-date-BMtvCeb9.js","assets/git-repo-store-B_u5RzIM.js","assets/ws-auth-Ytui7dXP.js","assets/tab-store-CbPh8CAX.js","assets/apply-theme-Cc_cmrD5.js","assets/resolve-theme-STMsK2vc.js","assets/index-oIvYSKTT.css","assets/onboarding-entry-CuH1Kqwu.js","assets/separator-DMu7VFQa.js","assets/appearance-settings-section-BJUiLUb7.js","assets/language-servers-section-CCMzgOaE.js","assets/ai-settings-section-DOckWvp4.js","assets/ai-settings-section-CETpSpYd.js","assets/api-settings-CpO8SPk9.js","assets/accounts-settings-section-DEIm-W-D.js","assets/codex-reset-credit-button-Fr45FUxi.js","assets/design-settings-section-BpCpaBwL.js","assets/design-skill-suggestion-DkT2E2IV.js","assets/slash-command-picker-CLevA_Gf.js","assets/design-responsive-dialog-DSCpv6O1.js","assets/design-system-status-label-B_0I_3a8.js","assets/voice-settings-section-Ceihggqf.js","assets/ppmbot-settings-section-DFtlGoW6.js","assets/notifications-settings-section-CXgzH_bK.js","assets/jira-watcher-section-BmkIGQFV.js","assets/extension-manager-section-DwQTdCII.js","assets/proxy-settings-section-B7AVlTfY.js","assets/schedules-settings-section-sYDAsBMO.js","assets/keyboard-shortcuts-section-BgZe3QDr.js","assets/files-settings-section-B2lcyh-6.js","assets/query-audit-section-gHmRfWKr.js"])))=>i.map(i=>d[i]);
2
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{At as r,Ft as i,Ln as a,Qr as o,Qt as s,S as c,Zt as l,_ as u,en as d,j as f,l as p,ot as m,pr as h,tr as g,un as _,v,x as y,xn as b,y as x}from"./icons-CO_II6D-.js";import{t as S}from"./preload-helper-BEFjQwLd.js";import{n as C}from"./utils-btZ8C8-R.js";import{t as w}from"./button-DeAyLH9U.js";import{t as T}from"./scroll-area-sjOeAfoD.js";import{t as E}from"./separator-DMu7VFQa.js";var D=[{id:`core`,label:null},{id:`ai`,label:`AI & Accounts`},{id:`integrations`,label:`Integrations`},{id:`advanced`,label:`Advanced`}],O=[{id:`general`,group:`core`,label:`General`,subtitle:`Device name, password, version`,icon:h},{id:`appearance`,group:`core`,label:`Appearance`,subtitle:`Theme, tabs, explorer skin`,icon:a},{id:`language-servers`,group:`core`,label:`Language Servers`,subtitle:`Completions and go to definition, per language`,icon:o},{id:`ai-provider`,group:`ai`,label:`AI Provider`,subtitle:`Model, execution mode, limits`,icon:v},{id:`accounts`,group:`ai`,label:`Accounts`,subtitle:`Claude and Codex sign-ins, rotation`,icon:l},{id:`design`,group:`ai`,label:`Design`,subtitle:`Design instructions and skills`,icon:d},{id:`voice`,group:`ai`,label:`Voice Input`,subtitle:`Speech to text for the chat box`,icon:b},{id:`ppmbot`,group:`integrations`,label:`PPMBot`,subtitle:`Telegram AI bot`,icon:x},{id:`notifications`,group:`integrations`,label:`Notifications`,subtitle:`Push & Telegram alerts`,icon:u},{id:`jira`,group:`integrations`,label:`Jira Watcher`,subtitle:`Auto-debug Jira tickets`,icon:y},{id:`extensions`,group:`integrations`,label:`Extensions`,subtitle:`Install and manage extensions`,icon:g},{id:`proxy`,group:`integrations`,label:`API Proxy`,subtitle:`Expose accounts as Anthropic API`,icon:i},{id:`schedules`,group:`advanced`,label:`Scheduled Agents`,subtitle:`Run Claude on a cron schedule`,icon:c},{id:`shortcuts`,group:`advanced`,label:`Keyboard Shortcuts`,subtitle:`Customize key bindings`,icon:s},{id:`files`,group:`advanced`,label:`File Filters`,subtitle:`Exclude patterns, ignore files`,icon:r},{id:`query-audit`,group:`advanced`,label:`Query Audit Log`,subtitle:`SQL history retention and size`,icon:m}];function k(e){return typeof e==`string`&&O.some(t=>t.id===e)}function A(e){return O.find(t=>t.id===e)}function j(e){return O.filter(t=>t.group===e)}var M=n();function N({active:e,onSelect:t}){return(0,M.jsx)(T,{className:`h-full`,children:(0,M.jsx)(`nav`,{className:`p-2 space-y-4`,"aria-label":`Settings categories`,children:D.map(n=>{let r=j(n.id);return r.length===0?null:(0,M.jsxs)(`div`,{className:`space-y-1`,children:[n.label&&(0,M.jsx)(`h3`,{className:`px-2 pt-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:n.label}),r.map(n=>{let r=n.icon,i=n.id===e;return(0,M.jsxs)(`button`,{onClick:()=>t(n.id),"data-testid":`settings-rail-${n.id}`,"aria-current":i?`page`:void 0,className:C(`w-full flex items-center gap-2.5 px-2.5 py-2 rounded-md text-left cursor-pointer transition-colors`,i?`bg-accent text-accent-foreground`:`hover:bg-accent/50 active:bg-accent`),children:[(0,M.jsx)(r,{className:C(`size-4 shrink-0`,i?`text-foreground`:`text-muted-foreground`)}),(0,M.jsx)(`span`,{className:`text-sm truncate`,children:n.label})]},n.id)})]},n.id)})})})}function P({onSelect:e}){return(0,M.jsx)(T,{className:`h-full`,children:(0,M.jsx)(`nav`,{className:`p-3 space-y-5`,"aria-label":`Settings categories`,children:D.map(t=>{let n=j(t.id);return n.length===0?null:(0,M.jsxs)(`div`,{className:`space-y-1`,children:[t.label&&(0,M.jsx)(`h3`,{className:`px-1 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:t.label}),n.map(t=>{let n=t.icon;return(0,M.jsxs)(`button`,{onClick:()=>e(t.id),"data-testid":`settings-index-${t.id}`,className:`w-full flex items-center gap-3 px-2.5 py-3 rounded-lg text-left cursor-pointer group hover:bg-accent/50 active:bg-accent transition-colors`,children:[(0,M.jsx)(`div`,{className:`size-10 rounded-md bg-muted flex items-center justify-center shrink-0 group-hover:bg-accent`,children:(0,M.jsx)(n,{className:`size-4 text-muted-foreground`})}),(0,M.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,M.jsx)(`p`,{className:`text-sm font-medium truncate`,children:t.label}),(0,M.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:t.subtitle})]}),(0,M.jsx)(f,{className:`size-4 text-muted-foreground shrink-0`})]},t.id)})]},t.id)})})})}var F=e(t(),1),I={general:(0,F.lazy)(()=>S(()=>import(`./general-settings-section-Doepm2sH.js`).then(e=>({default:e.GeneralSettingsSection})),__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]))),appearance:(0,F.lazy)(()=>S(()=>import(`./appearance-settings-section-BJUiLUb7.js`).then(e=>({default:e.AppearanceSettingsSection})),__vite__mapDeps([41,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,40]))),"language-servers":(0,F.lazy)(()=>S(()=>import(`./language-servers-section-CCMzgOaE.js`).then(e=>({default:e.LanguageServersSection})),__vite__mapDeps([42,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,40]))),"ai-provider":(0,F.lazy)(()=>S(()=>import(`./ai-settings-section-DOckWvp4.js`).then(e=>({default:e.AISettingsSection})),__vite__mapDeps([43,4,1,5,6,7,9,11,10,12,13,14,15,3,44,2,8,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,45]))),accounts:(0,F.lazy)(()=>S(()=>import(`./accounts-settings-section-DEIm-W-D.js`).then(e=>({default:e.AccountsSettingsSection})),__vite__mapDeps([46,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,47,45]))),design:(0,F.lazy)(()=>S(()=>import(`./design-settings-section-BpCpaBwL.js`).then(e=>({default:e.DesignSettingsSection})),__vite__mapDeps([48,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,49,50,51,52]))),voice:(0,F.lazy)(()=>S(()=>import(`./voice-settings-section-Ceihggqf.js`).then(e=>({default:e.VoiceSettingsSection})),__vite__mapDeps([53,1,4,5,6,7,9,15,3,10,40,21]))),ppmbot:(0,F.lazy)(()=>S(()=>import(`./ppmbot-settings-section-DFtlGoW6.js`).then(e=>({default:e.PPMBotSettingsSection})),__vite__mapDeps([54,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,40]))),notifications:(0,F.lazy)(()=>S(()=>import(`./notifications-settings-section-CXgzH_bK.js`).then(e=>({default:e.NotificationsSettingsSection})),__vite__mapDeps([55,4,1,5,40,7,21]))),jira:(0,F.lazy)(()=>S(()=>import(`./jira-watcher-section-BmkIGQFV.js`).then(e=>({default:e.JiraWatcherSection})),__vite__mapDeps([56,2,1,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]))),extensions:(0,F.lazy)(()=>S(()=>import(`./extension-manager-section-DwQTdCII.js`).then(e=>({default:e.ExtensionManagerSection})),__vite__mapDeps([57,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]))),proxy:(0,F.lazy)(()=>S(()=>import(`./proxy-settings-section-B7AVlTfY.js`).then(e=>({default:e.ProxySettingsSection})),__vite__mapDeps([58,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,45]))),schedules:(0,F.lazy)(()=>S(()=>import(`./schedules-settings-section-sYDAsBMO.js`).then(e=>({default:e.SchedulesSettingsSection})),__vite__mapDeps([59,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]))),shortcuts:(0,F.lazy)(()=>S(()=>import(`./keyboard-shortcuts-section-BgZe3QDr.js`).then(e=>({default:e.KeyboardShortcutsSection})),__vite__mapDeps([60,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]))),files:(0,F.lazy)(()=>S(()=>import(`./files-settings-section-B2lcyh-6.js`).then(e=>({default:e.FilesSettingsSection})),__vite__mapDeps([61,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,40]))),"query-audit":(0,F.lazy)(()=>S(()=>import(`./query-audit-section-gHmRfWKr.js`).then(e=>({default:e.QueryAuditSection})),__vite__mapDeps([62,1,4,5,6,7,9,26,45,30,21])))};function L({category:e}){let t=I[e];return(0,M.jsx)(F.Suspense,{fallback:(0,M.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,M.jsx)(_,{className:`size-5 animate-spin text-muted-foreground`})}),children:(0,M.jsx)(t,{})})}function R({initialCategory:e,onCategoryChange:t}){let[n,r]=(0,F.useState)(e??`general`),[i,a]=(0,F.useState)(e===void 0),o=A(n),s=o.icon;function c(e){r(e),a(!1),t?.(e)}return(0,M.jsx)(`div`,{className:`@container h-full w-full`,"data-testid":`settings-window`,"data-category":n,children:(0,M.jsxs)(`div`,{className:`h-full w-full flex`,children:[(0,M.jsx)(`aside`,{className:`hidden @[640px]:flex @[640px]:flex-col w-[210px] shrink-0 border-r border-border min-h-0`,"data-testid":`settings-rail`,children:(0,M.jsx)(N,{active:n,onSelect:c})}),(0,M.jsxs)(`div`,{className:`relative flex-1 min-w-0`,children:[(0,M.jsxs)(`div`,{className:`h-full flex flex-col min-h-0`,children:[(0,M.jsxs)(`div`,{className:`shrink-0 flex items-center gap-2 px-2 py-2.5 @[640px]:px-4`,children:[(0,M.jsx)(w,{variant:`ghost`,size:`icon`,"aria-label":`Back to settings list`,className:`size-9 shrink-0 cursor-pointer @[640px]:hidden`,onClick:()=>a(!0),children:(0,M.jsx)(p,{className:`size-4`})}),(0,M.jsx)(s,{className:`size-4 text-muted-foreground shrink-0`}),(0,M.jsx)(`h2`,{className:`text-sm font-semibold truncate`,"data-testid":`settings-pane-title`,children:o.label})]}),(0,M.jsx)(E,{}),(0,M.jsx)(T,{className:`flex-1 min-h-0`,children:(0,M.jsx)(`div`,{className:`p-4 pb-8`,children:(0,M.jsx)(L,{category:n})})})]}),i&&(0,M.jsxs)(`div`,{className:`absolute inset-0 z-10 bg-background flex flex-col min-h-0 @[640px]:hidden`,"data-testid":`settings-index`,children:[(0,M.jsx)(`div`,{className:`shrink-0 px-4 py-3`,children:(0,M.jsx)(`h2`,{className:`text-sm font-semibold`,children:`Settings`})}),(0,M.jsx)(E,{}),(0,M.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,M.jsx)(P,{onSelect:c})})]})]})]})})}export{k as n,R as t};
@@ -1 +0,0 @@
1
- import{S as e}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./icons-CO_II6D-.js";import"./button-DeAyLH9U.js";import"./scroll-area-sjOeAfoD.js";import"./separator-DMu7VFQa.js";import{n as t,t as n}from"./settings-body-CEIF8lkl.js";var r=e(),i=({metadata:e})=>(0,r.jsx)(n,{initialCategory:t(e?.category)?e.category:void 0});export{i as SettingsTab};
@@ -1 +0,0 @@
1
- import{S as e}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./icons-CO_II6D-.js";import{t}from"./window-store-vo1N70nK.js";import"./button-DeAyLH9U.js";import"./scroll-area-sjOeAfoD.js";import"./separator-DMu7VFQa.js";import{n,t as r}from"./settings-body-CEIF8lkl.js";var i=e();function a({id:e,payload:a}){let o=t(e=>e.setPayload);return(0,i.jsx)(r,{initialCategory:n(a?.category)?a.category:void 0,onCategoryChange:t=>o(e,{category:t})})}export{a as default};
@@ -1 +0,0 @@
1
- import{S as e}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./settings-store-DfuiLq_9.js";import{t}from"./system-monitor-body-BR60W_mG.js";var n=e(),r=()=>(0,n.jsx)(t,{});export{r as SystemMonitorTab};
@@ -1 +0,0 @@
1
- import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Cn as r,Et as i,Fr as a,Hr as o,Un as s,Ur as c,Wr as l,Yn as u,ar as d,bt as f,fr as p,hn as m,or as h,st as g,un as _,wt as v}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./portal-container-context-NFSuymMu.js";import{t as y}from"./button-DeAyLH9U.js";import{An as b,Cn as x,En as S,Sn as C,Tn as w,wn as T,xn as E,yn as D}from"./index-DhWjx5iR.js";import{o as O}from"./can-open-in-ppm-Bw_xiOXX.js";import{a as ee,i as te,n as k,r as A,t as j}from"./media-url-CCGOIxzS.js";var M=e(t(),1),N={rotation:0,flipH:!1,flipV:!1};function P(e){return{...e,rotation:(e.rotation+90)%360}}function F(e){return{...e,rotation:(e.rotation+270)%360}}function I(e){return e.rotation===0&&!e.flipH&&!e.flipV}function L(e){let t=[];return e.rotation&&t.push(`rotate(${e.rotation}deg)`),e.flipH&&t.push(`scaleX(-1)`),e.flipV&&t.push(`scaleY(-1)`),t.length?t.join(` `):`none`}function R(e,t){return e.rotation===90||e.rotation===270?{maxWidth:t.height,maxHeight:t.width}:{maxWidth:t.width,maxHeight:t.height}}var z=[[`Space / K`,`Play / pause`],[`← / →`,`Seek 5s`],[`J / L or Shift+← / →`,`Seek 10s`],[`↑ / ↓`,`Volume`],[`M`,`Mute`],[`F`,`Fullscreen`],[`< / >`,`Speed`],[`R / Shift+R`,`Rotate`]];function ne(e){return(0,M.useCallback)(t=>{let n=t.target;if(n.tagName===`INPUT`||n.tagName===`TEXTAREA`||n.isContentEditable||t.ctrlKey||t.metaKey||t.altKey)return;let r=!0;switch(t.key){case` `:case`k`:case`K`:e.togglePlay();break;case`ArrowLeft`:e.seekBy(t.shiftKey?-10:-5);break;case`ArrowRight`:e.seekBy(t.shiftKey?10:5);break;case`j`:case`J`:e.seekBy(-10);break;case`l`:case`L`:e.seekBy(10);break;case`ArrowUp`:e.volumeBy(.1);break;case`ArrowDown`:e.volumeBy(-.1);break;case`m`:case`M`:e.toggleMute();break;case`f`:case`F`:e.toggleFullscreen();break;case`<`:case`,`:e.speedStep(-1);break;case`>`:case`.`:e.speedStep(1);break;case`r`:e.rotate(1);break;case`R`:e.rotate(-1);break;default:r=!1}r&&t.preventDefault()},[e])}var B=n(),V=[.25,.5,.75,1,1.25,1.5,2,3];function H({speed:e,onSpeed:t,transform:n,onRotate:r,onFlipH:o,onFlipV:s,onResetTransform:c}){return(0,B.jsxs)(D,{children:[(0,B.jsx)(b,{asChild:!0,children:(0,B.jsxs)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0 relative`,"aria-label":`Playback settings`,children:[(0,B.jsx)(p,{className:`size-5`}),e!==1&&(0,B.jsxs)(`span`,{className:`absolute -top-0.5 -right-0.5 text-[10px] leading-none px-1 rounded bg-primary text-primary-foreground tabular-nums`,children:[e,`x`]})]})}),(0,B.jsxs)(E,{align:`end`,className:`w-60 max-h-[70vh] overflow-y-auto`,children:[(0,B.jsx)(x,{children:`Speed`}),(0,B.jsx)(T,{value:String(e),onValueChange:e=>t(Number(e)),children:(0,B.jsx)(`div`,{className:`grid grid-cols-4 gap-1 px-1 pb-1`,children:V.map(e=>(0,B.jsxs)(w,{value:String(e),className:`justify-center pl-2 min-h-11 text-xs tabular-nums data-[state=checked]:bg-accent [&>span:first-child]:hidden`,children:[e,`x`]},e))})}),(0,B.jsx)(S,{}),(0,B.jsx)(x,{children:`Orientation`}),(0,B.jsxs)(C,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(1)},children:[(0,B.jsx)(h,{className:`size-4`}),` Rotate right `,(0,B.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`R`})]}),(0,B.jsxs)(C,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),r(-1)},children:[(0,B.jsx)(d,{className:`size-4`}),` Rotate left `,(0,B.jsx)(`span`,{className:`ml-auto text-xs text-text-subtle`,children:`⇧R`})]}),(0,B.jsxs)(C,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),o()},children:[(0,B.jsx)(v,{className:`size-4`}),` Flip horizontal `,n.flipH&&(0,B.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),(0,B.jsxs)(C,{className:`min-h-11`,onSelect:e=>{e.preventDefault(),s()},children:[(0,B.jsx)(i,{className:`size-4`}),` Flip vertical `,n.flipV&&(0,B.jsx)(`span`,{className:`ml-auto text-xs`,children:`✓`})]}),!I(n)&&(0,B.jsxs)(C,{className:`min-h-11`,onSelect:c,children:[(0,B.jsx)(a,{className:`size-4`}),` Reset orientation`]}),(0,B.jsx)(S,{}),(0,B.jsx)(x,{children:`Keyboard`}),(0,B.jsx)(`div`,{className:`px-2 pb-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 text-xs text-text-secondary`,children:z.map(([e,t])=>(0,B.jsxs)(`div`,{className:`contents`,children:[(0,B.jsx)(`kbd`,{className:`font-mono text-text-subtle whitespace-nowrap`,children:e}),(0,B.jsx)(`span`,{children:t})]},e))})]})]})}function re(e){let t=e.muted||e.volume===0?l:e.volume<.5?o:c,n=t=>e.onSeek(Number(t.target.value));return(0,B.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-surface border-t border-border`,children:[(0,B.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onTogglePlay,"aria-label":e.playing?`Pause`:`Play`,children:e.playing?(0,B.jsx)(s,{className:`size-5`}):(0,B.jsx)(u,{className:`size-5`})}),(0,B.jsxs)(`span`,{className:`text-xs tabular-nums text-text-secondary shrink-0 min-w-[4.5rem] text-center`,children:[U(e.position),e.duration?` / ${U(e.duration)}`:``]}),e.duration?(0,B.jsx)(`input`,{type:`range`,min:0,max:e.duration,step:.1,value:Math.min(e.position,e.duration),"aria-label":`Seek`,className:`flex-1 h-11 accent-primary cursor-pointer min-w-0`,onChange:t=>e.onScrub(Number(t.target.value)),onPointerUp:n,onKeyUp:n,onTouchEnd:n}):(0,B.jsx)(`div`,{className:`flex-1`}),(0,B.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(0,B.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11`,onClick:e.onToggleMute,"aria-label":e.muted?`Unmute`:`Mute`,children:(0,B.jsx)(t,{className:`size-5`})}),(0,B.jsx)(`input`,{type:`range`,min:0,max:1,step:.05,value:e.muted?0:e.volume,"aria-label":`Volume`,className:`hidden sm:block w-20 h-11 accent-primary cursor-pointer`,onChange:t=>e.onVolume(Number(t.target.value))})]}),(0,B.jsx)(H,{speed:e.speed,onSpeed:e.onSpeed,transform:e.transform,onRotate:e.onRotate,onFlipH:e.onFlipH,onFlipV:e.onFlipV,onResetTransform:e.onResetTransform}),(0,B.jsx)(y,{variant:`ghost`,size:`icon`,className:`size-11 shrink-0`,onClick:e.onToggleFullscreen,"aria-label":e.fullscreen?`Exit fullscreen`:`Fullscreen`,children:e.fullscreen?(0,B.jsx)(r,{className:`size-5`}):(0,B.jsx)(m,{className:`size-5`})})]})}function U(e){let t=Math.max(0,Math.floor(Number.isFinite(e)?e:0)),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=n?String(r).padStart(2,`0`):String(r);return`${n?`${n}:`:``}${a}:${String(i).padStart(2,`0`)}`}function W({filePath:e,projectName:t,mode:n,probeDuration:r=null,onNativeError:i}){let a=(0,M.useRef)(null),o=(0,M.useRef)(null),s=(0,M.useRef)(null),c=(0,M.useRef)(!0),[l]=(0,M.useState)(j),[u,d]=(0,M.useState)(0),[f,p]=(0,M.useState)(0),[m,h]=(0,M.useState)(null),[g,v]=(0,M.useState)(!1),[b,x]=(0,M.useState)(!0),[S,C]=(0,M.useState)(null),[w,T]=(0,M.useState)(1),[E,D]=(0,M.useState)(!1),[O,k]=(0,M.useState)(1),[I,z]=(0,M.useState)(N),[H,U]=(0,M.useState)(!1),[W,G]=(0,M.useState)({width:0,height:0}),[K,q]=(0,M.useState)(null),J=n===`transcode`,Y=J?ee(e,t,u,l):A(e,t),X=J?r:m,ie=S??(J?u+f:f);(0,M.useEffect)(()=>{p(0),x(!0),q(null)},[Y]),(0,M.useEffect)(()=>{d(0),h(null),z(N)},[e,n]),(0,M.useEffect)(()=>{let e=s.current;e&&(e.volume=w,e.muted=E)},[w,E]),(0,M.useEffect)(()=>{let e=s.current;e&&(e.playbackRate=O)},[O,Y]),(0,M.useEffect)(()=>{let n=s.current,r=()=>{J&&te(e,t,l)};return window.addEventListener(`pagehide`,r),()=>{window.removeEventListener(`pagehide`,r),n&&!n.isConnected&&(n.pause(),n.removeAttribute(`src`),n.load(),r())}},[e,t,J,l]),(0,M.useEffect)(()=>{let e=()=>U(document.fullscreenElement===a.current);return document.addEventListener(`fullscreenchange`,e),()=>document.removeEventListener(`fullscreenchange`,e)},[]),(0,M.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(()=>G({width:e.clientWidth,height:e.clientHeight}));return t.observe(e),()=>t.disconnect()},[]);let Z=(0,M.useCallback)(e=>{let t=s.current,n=Math.max(0,X?Math.min(e,X-.5):e);if(C(null),!J){t&&(t.currentTime=n);return}Math.abs(n-(u+(t?.currentTime??0)))<.5||d(n)},[X,J,u]),Q=(0,M.useMemo)(()=>({togglePlay:()=>{let e=s.current;e&&(c.current=e.paused,e.paused?e.play().catch(()=>{}):e.pause())},seekBy:e=>Z((J?u:0)+(s.current?.currentTime??0)+e),toggleFullscreen:()=>{document.fullscreenElement?document.exitFullscreen():a.current?.requestFullscreen?.()},toggleMute:()=>D(e=>!e),volumeBy:e=>{D(!1),T(t=>Math.min(1,Math.max(0,Math.round((t+e)*100)/100)))},speedStep:e=>k(t=>{let n=V.indexOf(t);return V[Math.min(V.length-1,Math.max(0,(n===-1?3:n)+e))]??1}),rotate:e=>z(t=>e===1?P(t):F(t))}),[Z,J,u]),ae=ne(Q),$=R(I,W),oe=()=>{q(null),d(e=>e+.001)};return(0,B.jsxs)(`div`,{ref:a,"data-testid":`video-player`,tabIndex:0,onKeyDown:ae,className:`flex flex-col h-full bg-black outline-none focus-visible:ring-1 focus-visible:ring-primary/60`,children:[(0,B.jsxs)(`div`,{ref:o,className:`relative flex-1 min-h-0 flex items-center justify-center overflow-hidden`,onClick:e=>{a.current?.focus(),e.detail===1&&Q.togglePlay()},onDoubleClick:Q.toggleFullscreen,children:[(0,B.jsx)(`video`,{ref:s,src:Y,autoPlay:!0,playsInline:!0,preload:J?`auto`:`metadata`,style:{transform:L(I),maxWidth:$.maxWidth||void 0,maxHeight:$.maxHeight||void 0},onLoadedMetadata:e=>{let t=e.currentTarget;t.playbackRate=O,t.volume=w,t.muted=E,!J&&Number.isFinite(t.duration)&&h(t.duration),J&&!c.current&&t.pause()},onPlay:()=>v(!0),onPause:()=>v(!1),onWaiting:()=>x(!0),onPlaying:()=>x(!1),onCanPlay:()=>x(!1),onTimeUpdate:e=>p(e.currentTarget.currentTime),onEnded:()=>{v(!1),c.current=!1},onError:()=>{J?q(`Transcoding failed. ffmpeg may have stopped or the file is corrupt.`):i?.()}}),b&&!K&&(0,B.jsx)(_,{className:`absolute size-8 animate-spin text-white/80 pointer-events-none`}),K&&(0,B.jsxs)(`div`,{className:`absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/85 text-text-secondary p-4 text-center`,onClick:e=>e.stopPropagation(),onDoubleClick:e=>e.stopPropagation(),children:[(0,B.jsx)(`p`,{className:`text-sm`,children:K}),(0,B.jsx)(y,{variant:`outline`,size:`sm`,className:`h-11 px-4`,onClick:oe,children:`Retry`})]})]}),(0,B.jsx)(re,{playing:g,position:ie,duration:X,volume:w,muted:E,speed:O,transform:I,fullscreen:H,onTogglePlay:Q.togglePlay,onScrub:C,onSeek:Z,onVolume:e=>{T(e),D(e===0)},onToggleMute:Q.toggleMute,onSpeed:k,onRotate:Q.rotate,onFlipH:()=>z(e=>({...e,flipH:!e.flipH})),onFlipV:()=>z(e=>({...e,flipV:!e.flipV})),onResetTransform:()=>z(N),onToggleFullscreen:Q.toggleFullscreen})]})}var G=new Set([`mp4`,`m4v`,`webm`,`ogg`,`ogv`,`mov`]);function K({filePath:e,projectName:t}){let n=O(e),[r,i]=(0,M.useState)(()=>G.has(n)?{kind:`native`}:{kind:`probing`});return(0,M.useEffect)(()=>{i(G.has(O(e))?{kind:`native`}:{kind:`probing`})},[e]),(0,M.useEffect)(()=>{if(r.kind!==`probing`)return;let n=!1;return k(e,t).then(e=>{n||i(e.transcodable?{kind:`transcode`,probe:e}:{kind:`unsupported`,probe:e})}).catch(()=>{n||i({kind:`unsupported`,probe:null})}),()=>{n=!0}},[r.kind,e,t]),r.kind===`probing`?(0,B.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,B.jsx)(_,{className:`size-5 animate-spin text-text-subtle`})}):r.kind===`transcode`?(0,B.jsx)(W,{filePath:e,projectName:t,mode:`transcode`,probeDuration:r.probe.duration}):r.kind===`unsupported`?(0,B.jsx)(q,{filePath:e,projectName:t,probe:r.probe}):(0,B.jsx)(W,{filePath:e,projectName:t,mode:`native`,onNativeError:()=>i({kind:`probing`})})}function q({filePath:e,projectName:t,probe:n}){let r=[n?.video?.codec,n?.audio?.codec].filter(Boolean).join(` + `);return(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary p-6 text-center`,children:[(0,B.jsx)(f,{className:`size-10 text-text-subtle`}),(0,B.jsxs)(`p`,{className:`text-sm`,children:[`This video cannot be played in the browser`,r?` (${r})`:``,`.`]}),(0,B.jsxs)(`p`,{className:`text-xs text-text-subtle max-w-sm`,children:[`Install `,(0,B.jsx)(`code`,{children:`ffmpeg`}),` on the PPM server (e.g. `,(0,B.jsx)(`code`,{children:`winget install ffmpeg`}),`, `,(0,B.jsx)(`code`,{children:`brew install ffmpeg`}),`,`,` `,(0,B.jsx)(`code`,{children:`apt install ffmpeg`}),`) and restart PPM to transcode it on the fly.`]}),(0,B.jsx)(y,{asChild:!0,variant:`outline`,size:`sm`,className:`h-11 px-4`,children:(0,B.jsxs)(`a`,{href:`${A(e,t)}&download=true`,download:!0,children:[(0,B.jsx)(g,{className:`size-4 mr-2`}),` Download file`]})})]})}export{K as VideoPreview};