@hienlh/ppm 0.23.13 → 0.23.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +58 -0
- package/CLAUDE.md +19 -4
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/assets/skills/ppm/SKILL.md +3 -2
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/common-tasks.md +6 -0
- package/assets/skills/ppm/references/http-api.md +13 -1
- package/bun.lock +15 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js +1 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js +1 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.br +0 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js +2 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-BAfLnsLX.js +1 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js +1 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js +1 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js +1 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-CN5BR1ZZ.js +1 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js +2 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
- package/dist/web/assets/api-client-xQDlhUTu.js +1 -0
- package/dist/web/assets/api-client-xQDlhUTu.js.br +0 -0
- package/dist/web/assets/api-client-xQDlhUTu.js.gz +0 -0
- package/dist/web/assets/api-client-xR05zj6r.js +1 -0
- package/dist/web/assets/api-settings-VAi0LpIJ.js +1 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js +1 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js.br +0 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js.gz +0 -0
- package/dist/web/assets/api-themes-CaXofG7d.js +1 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js +1 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js +1 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js +1 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js.br +0 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js +1 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
- package/dist/web/assets/button-C9ZXWb3b.js +1 -0
- package/dist/web/assets/button-C9ZXWb3b.js.br +0 -0
- package/dist/web/assets/button-C9ZXWb3b.js.gz +0 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js +1 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js.gz +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js +1 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js +16 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js +10 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.gz +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js +19 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js +4 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js +1 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js.br +0 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js +1 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js.br +0 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js.gz +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js +10 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js +1 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js.br +0 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js.gz +0 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js +1 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.br +0 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js +1 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js.br +0 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js.gz +0 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js +1 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js +1 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
- package/dist/web/assets/db-types-CNhENouW.js +1 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js +1 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js.br +0 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js.gz +0 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js +1 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js.br +0 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js +1 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.gz +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js +2 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js +3 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.gz +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js +57 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js +1 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js +1 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js.br +0 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js.gz +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js +4 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js +12 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js +1 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js.br +0 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js +7 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.gz +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js +1 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js +1 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js +2 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js +1 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js.br +0 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js +1 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js +1 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js +12 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
- package/dist/web/assets/file-diff-CcDhJkXB.js +1 -0
- package/dist/web/assets/file-icons-JInFtBVl.js +1 -0
- package/dist/web/assets/file-icons-JInFtBVl.js.br +0 -0
- package/dist/web/assets/file-icons-JInFtBVl.js.gz +0 -0
- package/dist/web/assets/file-store-BQ41vIs5.js +1 -0
- package/dist/web/assets/file-store-BQ41vIs5.js.br +0 -0
- package/dist/web/assets/file-store-BQ41vIs5.js.gz +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js +1 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js +1 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.br +0 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.gz +0 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js +1 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js.br +0 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js.gz +0 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js +1 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js.br +0 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js +1 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BPdj2L1i.js +1 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js +1 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js +1 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js.br +0 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js.gz +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js +3 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js +177 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js +2 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js +1 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
- package/dist/web/assets/html-preview-loads-CMWBC-iv.js +1 -0
- package/dist/web/assets/icons-BwyIKaTT.js +1 -0
- package/dist/web/assets/icons-BwyIKaTT.js.br +0 -0
- package/dist/web/assets/icons-BwyIKaTT.js.gz +0 -0
- package/dist/web/assets/image-preview-gOBK9zED.js +1 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js +1 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
- package/dist/web/assets/index-DLB3j_P0.js +59 -0
- package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
- package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
- package/dist/web/assets/index-M3DUzop8.css +1 -0
- package/dist/web/assets/index-M3DUzop8.css.br +0 -0
- package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
- package/dist/web/assets/input-C3oVNCMq.js +1 -0
- package/dist/web/assets/jira-watcher-section-EQvdnETB.js +1 -0
- package/dist/web/assets/keybindings-store-CEy-Sdcc.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js +2 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
- package/dist/web/assets/lib-5Chotbwm.js +2 -0
- package/dist/web/assets/lib-5Chotbwm.js.br +0 -0
- package/dist/web/assets/lib-5Chotbwm.js.gz +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js +13 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.gz +0 -0
- package/dist/web/assets/logs-tab-CSOiexvx.js +1 -0
- package/dist/web/assets/logs-window-content-C4Qs6-0q.js +1 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js +1 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js +4 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-Df3r-CCb.js +1 -0
- package/dist/web/assets/media-url-Cn2yRAxP.js +1 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js +1 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.br +0 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js +1 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js +1 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js +1 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
- package/dist/web/assets/notification-store-B92dvP_u.js +1 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js +1 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js +1 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js.br +0 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js +1 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js +1 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js.br +0 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js.gz +0 -0
- package/dist/web/assets/open-settings-EXR4zoZG.js +1 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js +1 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js.br +0 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js.gz +0 -0
- package/dist/web/assets/panel-store-BJhazigC.js +1 -0
- package/dist/web/assets/panel-store-BJhazigC.js.br +0 -0
- package/dist/web/assets/panel-store-BJhazigC.js.gz +0 -0
- package/dist/web/assets/patch-tab-metadata-C92YkrRX.js +1 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js +1 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js.br +0 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js.gz +0 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js +3 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js.br +0 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js.gz +0 -0
- package/dist/web/assets/portal-container-context-NBi-KGK0.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js +111 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js.br +0 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js.gz +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js +1 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
- package/dist/web/assets/process-row-format-CytRH7g2.js +1 -0
- package/dist/web/assets/process-table-C_B39GHm.js +1 -0
- package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
- package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
- package/dist/web/assets/project-framework-store-DwLxaRan.js +1 -0
- package/dist/web/assets/project-store-BLGl9IAO.js +1 -0
- package/dist/web/assets/project-store-BLGl9IAO.js.br +0 -0
- package/dist/web/assets/project-store-BLGl9IAO.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js +1 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js +1 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js.br +0 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js.gz +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js +22 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
- package/dist/web/assets/react-BZ0kba1-.js +1 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js +1 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js +1 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js +1 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js +1 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js +1 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js +1 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
- package/dist/web/assets/review-code-B4osj0k1.js +5 -0
- package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
- package/dist/web/assets/review-code-B4osj0k1.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-button-m3i-Hcou.js +1 -0
- package/dist/web/assets/run-in-terminal-ujoc25vj.js +1 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js +1 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +5 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js +1 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js +1 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js.br +0 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js.gz +0 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js +1 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js.br +0 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js.gz +0 -0
- package/dist/web/assets/separator-DmU9aJwq.js +1 -0
- package/dist/web/assets/services-panel-CZQOrvth.js +1 -0
- package/dist/web/assets/services-panel-CZQOrvth.js.br +0 -0
- package/dist/web/assets/services-panel-CZQOrvth.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js +1 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js.br +0 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js +1 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.gz +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js +6 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js +1 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js +1 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js.br +0 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js.gz +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js +1 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
- package/dist/web/assets/settings-section-content-CVtvJ6ze.js +1 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js +2 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
- package/dist/web/assets/settings-store-B4mLp19V.js +2 -0
- package/dist/web/assets/settings-store-B4mLp19V.js.br +0 -0
- package/dist/web/assets/settings-store-B4mLp19V.js.gz +0 -0
- package/dist/web/assets/settings-tab-Cdv9_OIe.js +1 -0
- package/dist/web/assets/settings-window-content-DLa6Ph4u.js +1 -0
- package/dist/web/assets/share-BV49OI6q.css +2 -0
- package/dist/web/assets/share-BV49OI6q.css.br +0 -0
- package/dist/web/assets/share-BV49OI6q.css.gz +0 -0
- package/dist/web/assets/share-D5ufGmNI.js +9 -0
- package/dist/web/assets/share-D5ufGmNI.js.br +0 -0
- package/dist/web/assets/share-D5ufGmNI.js.gz +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js +1 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js +1 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js.br +0 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js.gz +0 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js +5 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js.br +0 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js.gz +0 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js +1 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.br +0 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js +1 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js +1 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
- package/dist/web/assets/start-ellipsis-CU8GkxaV.js +1 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js +1 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js +3 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js +2 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-DA8BcdXo.js +1 -0
- package/dist/web/assets/system-monitor-window-content-BiuLo8XW.js +1 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js +1 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
- package/dist/web/assets/tab-store-D5I52eLN.js +1 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js +2 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js +1 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js +3 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js +15 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js +1 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
- package/dist/web/assets/use-at-most-wide-BHsrzvv3.js +1 -0
- package/dist/web/assets/use-blob-url-Clm7wbB_.js +1 -0
- package/dist/web/assets/use-db-driver-installed-anzWkGi5.js +1 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js +1 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js.br +0 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js.gz +0 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js +1 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js.br +0 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js.gz +0 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js +1 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.br +0 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.gz +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js +1 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.br +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js +16 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
- package/dist/web/assets/use-is-mobile-VRV9eZy1.js +1 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js +6 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-BiDXRJ4e.js +1 -0
- package/dist/web/assets/use-opener-focus-CDRKhHwX.js +1 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js +1 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js +4 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
- package/dist/web/assets/use-visual-viewport-MmugpRg-.js +1 -0
- package/dist/web/assets/use-websocket-n3Ud9vEA.js +1 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js +291 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js.br +0 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js.gz +0 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js +45 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js.br +0 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js.gz +0 -0
- package/dist/web/assets/video-preview-CjB6wesi.js +1 -0
- package/dist/web/assets/video-preview-CjB6wesi.js.br +0 -0
- package/dist/web/assets/video-preview-CjB6wesi.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js +1 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js +1 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js +1 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js.br +0 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js.gz +0 -0
- package/dist/web/assets/ws-auth-CbF6GqxP.js +1 -0
- package/dist/web/design-share-page/index.html +18 -0
- package/dist/web/index.html +47 -47
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/docs/architecture/ai-chat-and-providers.md +258 -26
- package/docs/architecture/data-and-storage.md +9 -3
- package/docs/architecture/workspace-and-ui.md +42 -5
- package/docs/project-roadmap.md +5 -0
- package/package.json +6 -2
- package/scripts/gen-product-icons.ts +1 -0
- package/src/cli/commands/db-cmd.ts +79 -1
- package/src/providers/claude-agent-sdk-query-options.ts +42 -10
- package/src/providers/claude-agent-sdk.ts +19 -6
- package/src/providers/codex-app-server/codex-provider.ts +9 -3
- package/src/providers/codex-app-server/codex-thread-params.ts +34 -4
- package/src/server/index.ts +17 -5
- package/src/server/middleware/access-log.ts +6 -3
- package/src/server/routes/accounts.ts +3 -2
- package/src/server/routes/chat-file-changes.ts +15 -1
- package/src/server/routes/chat.ts +92 -18
- package/src/server/routes/database-query.ts +14 -5
- package/src/server/routes/database.ts +14 -0
- package/src/server/routes/debug-crash.ts +30 -0
- package/src/server/routes/design-comments.ts +56 -7
- package/src/server/routes/design-share-address.ts +20 -0
- package/src/server/routes/design-share-guest-comments.ts +120 -0
- package/src/server/routes/design-share-guest-files.ts +99 -0
- package/src/server/routes/design-share-guest-shared.ts +95 -0
- package/src/server/routes/design-share-guest.ts +77 -0
- package/src/server/routes/design-shares.ts +90 -0
- package/src/server/routes/designs.ts +2 -0
- package/src/server/routes/settings.ts +12 -0
- package/src/server/routes/static.ts +10 -2
- package/src/server/ws/chat.ts +113 -39
- package/src/server/ws/global.ts +10 -8
- package/src/services/account.service.ts +57 -18
- package/src/services/chat.service.ts +16 -6
- package/src/services/db-ai-tools/db-ai-connections.ts +48 -0
- package/src/services/db-ai-tools/db-ai-format.ts +107 -0
- package/src/services/db-ai-tools/db-ai-run.ts +199 -0
- package/src/services/db-ai-tools/db-ai-target.ts +59 -0
- package/src/services/db-ai-tools/db-ai-tools-endpoint.ts +225 -0
- package/src/services/db-ai-tools/db-ai-tools-tokens.ts +33 -0
- package/src/services/db-ai-tools/db-ai-tools-tool.ts +131 -0
- package/src/services/db-ai-tools/db-approval-broker.ts +157 -0
- package/src/services/db.service.ts +25 -1
- package/src/services/design/bridge/bridge-picker.ts +15 -5
- package/src/services/design/bridge/guest-bridge.ts +19 -0
- package/src/services/design/comments/design-comment-element-context.ts +28 -6
- package/src/services/design/comments/design-comment-input.ts +47 -0
- package/src/services/design/comments/design-comment-views.ts +146 -0
- package/src/services/design/comments/design-comments-revision.ts +19 -0
- package/src/services/design/comments/design-comments-store.ts +82 -9
- package/src/services/design/design-comment-replies.service.ts +126 -0
- package/src/services/design/design-comments.service.ts +77 -34
- package/src/services/design/design-restore.service.ts +6 -2
- package/src/services/design/design-snapshots.service.ts +8 -2
- package/src/services/design/design-store.service.ts +7 -1
- package/src/services/design/design-write-rate-limit.ts +11 -17
- package/src/services/design/preview/design-guest-alias.ts +64 -0
- package/src/services/design/preview/design-preview-html.ts +16 -3
- package/src/services/design/preview/design-preview-scope.ts +29 -5
- package/src/services/design/share/design-share-address.ts +81 -0
- package/src/services/design/share/design-share-changed-files.ts +74 -0
- package/src/services/design/share/design-share-client-key.ts +72 -0
- package/src/services/design/share/design-share-code.ts +116 -0
- package/src/services/design/share/design-share-comments.service.ts +162 -0
- package/src/services/design/share/design-share-guest-link.ts +109 -0
- package/src/services/design/share/design-share-guest-page.ts +86 -0
- package/src/services/design/share/design-share-link-rules.ts +83 -0
- package/src/services/design/share/design-share-links-store.ts +157 -0
- package/src/services/design/share/design-share-links.service.ts +174 -0
- package/src/services/design/share/design-share-notifier.ts +192 -0
- package/src/services/design/share/design-share-rate-limit.ts +71 -0
- package/src/services/design/share/design-share-resolve.ts +31 -0
- package/src/services/mcp-http-endpoint.ts +23 -10
- package/src/services/mysql.service.ts +6 -2
- package/src/services/notification-format.ts +10 -2
- package/src/services/notification-link.ts +1 -1
- package/src/services/notification.service.ts +47 -15
- package/src/services/ppm-password.ts +26 -0
- package/src/services/project-name-for-path.ts +18 -0
- package/src/services/query-audit/query-audit.service.ts +7 -4
- package/src/services/remote-desktop/access-unit-assembler.ts +11 -7
- package/src/services/remote-desktop/nal-splitter.ts +14 -1
- package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +47 -21
- package/src/services/remote-desktop/remote-desktop-encoder-args.ts +5 -3
- package/src/services/session-file-baselines/session-file-baselines.service.ts +48 -0
- package/src/services/session-file-baselines/session-file-blame.ts +57 -24
- package/src/services/session-file-baselines/session-file-changes.service.ts +220 -22
- package/src/services/session-file-baselines/session-file-history.ts +5 -1
- package/src/services/session-file-baselines/session-file-writes.ts +28 -0
- package/src/services/sliding-window-limiter.ts +106 -0
- package/src/services/tab-tools-mcp/open-url-tool.ts +149 -0
- package/src/services/tab-tools-mcp/tab-open-broker.ts +12 -4
- package/src/services/tab-tools-mcp/tab-tools-mcp-endpoint.ts +66 -22
- package/src/services/tab-tools-mcp/tab-tools-mcp-tokens.ts +3 -1
- package/src/services/tab-tools-mcp/tab-tools-mcp-tool.ts +78 -6
- package/src/services/tab-tools-mcp/terminal-text.ts +45 -0
- package/src/services/tab-tools-mcp/terminal-tools.ts +297 -0
- package/src/services/terminal.service.ts +39 -4
- package/src/shared/db-ai-tools.ts +118 -0
- package/src/shared/db-query-script.ts +16 -0
- package/src/shared/design-comment-thread-types.ts +80 -0
- package/src/shared/design-comment-types.ts +53 -4
- package/src/shared/design-share-guest-types.ts +59 -0
- package/src/shared/design-share-types.ts +100 -0
- package/src/shared/notification-settings.ts +4 -3
- package/src/shared/ppm-tools.ts +39 -0
- package/src/shared/session-file-changes.ts +16 -0
- package/src/shared/tab-open-protocol.ts +50 -6
- package/src/shared/untrusted-text.ts +15 -1
- package/src/types/chat.ts +7 -1
- package/src/types/config.ts +5 -2
- package/src/types/database.ts +6 -0
- package/src/web/components/chat/chat-history-bar.tsx +10 -6
- package/src/web/components/chat/chat-tab.tsx +7 -1
- package/src/web/components/chat/db-execute-approval-card.tsx +100 -0
- package/src/web/components/chat/db-tool-card.tsx +42 -0
- package/src/web/components/chat/device-tool-card.tsx +45 -0
- package/src/web/components/chat/message-input.tsx +9 -6
- package/src/web/components/chat/message-list.tsx +6 -1
- package/src/web/components/chat/message-markdown.tsx +6 -3
- package/src/web/components/chat/message-user-bubble.tsx +2 -1
- package/src/web/components/chat/model-thinking-selector.tsx +6 -4
- package/src/web/components/chat/prompt-cache-chip.tsx +1 -1
- package/src/web/components/chat/running-agents-bar.tsx +164 -76
- package/src/web/components/chat/session-changes-bar.tsx +46 -13
- package/src/web/components/chat/tool-cards.tsx +29 -1
- package/src/web/components/chat/turn-change-rollup.tsx +8 -1
- package/src/web/components/chat/usage-badge.tsx +3 -3
- package/src/web/components/database/query/query-run-state.ts +11 -1
- package/src/web/components/database/query/query-tab.tsx +33 -7
- package/src/web/components/database/query/use-query-runner.ts +3 -0
- package/src/web/components/database/query/write-once-dialog.tsx +70 -0
- package/src/web/components/design/canvas/design-canvas-pane.tsx +5 -2
- package/src/web/components/design/comments/comment-author-label.tsx +23 -0
- package/src/web/components/design/comments/comment-composer.tsx +6 -14
- package/src/web/components/design/comments/comment-pins-overlay.tsx +8 -3
- package/src/web/components/design/comments/comment-thread-replies.tsx +82 -0
- package/src/web/components/design/comments/comment-thread-text-box.tsx +69 -0
- package/src/web/components/design/comments/comment-thread-view.tsx +115 -0
- package/src/web/components/design/comments/comments-panel.tsx +33 -10
- package/src/web/components/design/comments/comments-send-preview.tsx +20 -8
- package/src/web/components/design/comments/design-comments-layer.tsx +3 -1
- package/src/web/components/design/comments/use-comment-pins.ts +3 -0
- package/src/web/components/design/comments/use-design-comments-feature.ts +40 -25
- package/src/web/components/design/comments/use-design-comments.ts +44 -12
- package/src/web/components/design/design-split-layout.tsx +106 -10
- package/src/web/components/design/design-tab-context.ts +2 -0
- package/src/web/components/design/design-tab.tsx +5 -1
- package/src/web/components/design/design-toolbar.tsx +24 -4
- package/src/web/components/design/share/design-share-dialog.tsx +81 -0
- package/src/web/components/design/share/new-share-link-form.tsx +85 -0
- package/src/web/components/design/share/share-address-block.tsx +101 -0
- package/src/web/components/design/share/share-changed-files.tsx +30 -0
- package/src/web/components/design/share/share-expiry-picker.tsx +44 -0
- package/src/web/components/design/share/share-repin-panel.tsx +64 -0
- package/src/web/components/design/share/share-row-panel.tsx +35 -0
- package/src/web/components/design/share/share-version-picker.tsx +67 -0
- package/src/web/components/design/share/shared-link-action-panels.tsx +120 -0
- package/src/web/components/design/share/shared-link-row.tsx +131 -0
- package/src/web/components/design/share/shared-links-list.tsx +33 -0
- package/src/web/components/design/share/use-share-address.ts +74 -0
- package/src/web/components/design/share/use-share-links.ts +93 -0
- package/src/web/components/design/use-design-layout.ts +7 -4
- package/src/web/components/editor/diff-viewer.tsx +16 -12
- package/src/web/components/editor/docx-preview.tsx +7 -2
- package/src/web/components/floating-window/close-window.ts +32 -0
- package/src/web/components/floating-window/floating-window.tsx +65 -24
- package/src/web/components/floating-window/open-tab-in-pip.ts +3 -0
- package/src/web/components/floating-window/use-window-drag.ts +33 -7
- package/src/web/components/floating-window/use-window-meta.ts +138 -0
- package/src/web/components/floating-window/window-chrome-contract.ts +19 -2
- package/src/web/components/floating-window/window-dock-layout.ts +72 -0
- package/src/web/components/floating-window/window-dock-list.tsx +156 -0
- package/src/web/components/floating-window/window-dock.tsx +192 -0
- package/src/web/components/floating-window/window-geometry.ts +39 -1
- package/src/web/components/floating-window/window-layer.tsx +59 -23
- package/src/web/components/floating-window/window-persistence.ts +16 -3
- package/src/web/components/floating-window/window-store-types.ts +13 -2
- package/src/web/components/floating-window/window-store.ts +75 -8
- package/src/web/components/floating-window/window-title-identity.tsx +86 -0
- package/src/web/components/layout/status-bar.tsx +3 -0
- package/src/web/components/layout/tab-pop-out-menu-item.tsx +2 -2
- package/src/web/components/logs/open-logs.ts +0 -1
- package/src/web/components/os-explorer/actions/explorer-actions-upload.ts +2 -1
- package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +17 -11
- package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +14 -5
- package/src/web/components/remote-desktop/use-remote-desktop-readiness.ts +8 -3
- package/src/web/components/settings/accounts/account-add-dialog.tsx +25 -13
- package/src/web/components/settings/accounts/claude-accounts-section.tsx +3 -3
- package/src/web/components/settings/ai-settings-section.tsx +0 -20
- package/src/web/components/settings/design-settings-section.tsx +3 -0
- package/src/web/components/settings/design-window-setting.tsx +28 -0
- package/src/web/components/settings/settings-categories.ts +3 -0
- package/src/web/components/settings/settings-section-content.tsx +1 -0
- package/src/web/components/settings/tools-settings-section.tsx +120 -0
- package/src/web/components/shared/docx-html-sanitize.ts +59 -0
- package/src/web/components/shared/markdown-code-block.tsx +3 -1
- package/src/web/components/shared/markdown-renderer.tsx +15 -3
- package/src/web/components/shared/markdown-sanitize.ts +65 -0
- package/src/web/components/web-preview/web-preview-tab.tsx +6 -3
- package/src/web/design-share-page/index.html +17 -0
- package/src/web/design-share-page/main.tsx +11 -0
- package/src/web/design-share-page/share-api.ts +131 -0
- package/src/web/design-share-page/share-app.tsx +14 -0
- package/src/web/design-share-page/share-bottom-sheet.tsx +61 -0
- package/src/web/design-share-page/share-canvas.tsx +92 -0
- package/src/web/design-share-page/share-composer.tsx +104 -0
- package/src/web/design-share-page/share-entry.tsx +92 -0
- package/src/web/design-share-page/share-identity.ts +81 -0
- package/src/web/design-share-page/share-name-prompt.tsx +59 -0
- package/src/web/design-share-page/share-panel-content.tsx +57 -0
- package/src/web/design-share-page/share-pins-overlay.tsx +50 -0
- package/src/web/design-share-page/share-review.tsx +123 -0
- package/src/web/design-share-page/share-states.tsx +78 -0
- package/src/web/design-share-page/share-thread-model.ts +83 -0
- package/src/web/design-share-page/share-thread-view.tsx +61 -0
- package/src/web/design-share-page/share-threads-panel.tsx +103 -0
- package/src/web/design-share-page/share-toolbar.tsx +105 -0
- package/src/web/design-share-page/share-ui.ts +30 -0
- package/src/web/design-share-page/share.css +63 -0
- package/src/web/design-share-page/use-share-canvas.ts +51 -0
- package/src/web/design-share-page/use-share-info.ts +34 -0
- package/src/web/design-share-page/use-share-session.ts +75 -0
- package/src/web/design-share-page/use-share-threads.ts +139 -0
- package/src/web/hooks/use-chat.ts +5 -2
- package/src/web/hooks/use-design-session-redirect.ts +3 -2
- package/src/web/hooks/use-git-repo.ts +36 -16
- package/src/web/hooks/use-global-events.ts +4 -0
- package/src/web/hooks/use-inline-blame.ts +17 -11
- package/src/web/hooks/use-notification-clicks.ts +23 -5
- package/src/web/hooks/use-session-file-changes.ts +118 -41
- package/src/web/hooks/use-url-sync.ts +5 -4
- package/src/web/lib/api-settings.ts +2 -0
- package/src/web/lib/chat-attempt-lifecycle.ts +3 -1
- package/src/web/lib/db-tool-call.ts +57 -0
- package/src/web/lib/design/api-design-comments.ts +39 -9
- package/src/web/lib/design/api-design-shares.ts +47 -0
- package/src/web/lib/design/design-comments-prompt.ts +108 -23
- package/src/web/lib/design/design-layout-mode.ts +16 -1
- package/src/web/lib/design/design-share-address-state.ts +88 -0
- package/src/web/lib/design/design-share-expiry.ts +96 -0
- package/src/web/lib/design/design-share-link-status.ts +66 -0
- package/src/web/lib/design/design-view-prefs.ts +20 -1
- package/src/web/lib/design/open-design-tab.ts +54 -1
- package/src/web/lib/git-repo-scope.ts +60 -0
- package/src/web/lib/icons.generated.tsx +3 -1
- package/src/web/lib/model-display-name.ts +16 -0
- package/src/web/lib/open-ai-tab.ts +129 -19
- package/src/web/lib/running-agent-rows.ts +52 -0
- package/src/web/lib/session-file-changes-client.ts +6 -0
- package/src/web/lib/session-file-changes.ts +13 -0
- package/src/web/lib/tab-tool-call.ts +37 -1
- package/src/web/lib/utils.ts +4 -1
- package/src/web/stores/panel-store.ts +13 -1
- package/src/web/stores/panel-utils.ts +9 -4
- package/src/web/stores/settings-store.ts +14 -0
- package/src/web/stores/window-panel-actions.ts +21 -3
- package/src/web/stores/window-panel-persistence.ts +2 -1
- package/src/web/sw-notification-click.ts +12 -1
- package/templates/skill/SKILL.md.tmpl +2 -1
- package/templates/skill/common-tasks.md +6 -0
- package/vite.config.ts +10 -0
- package/vite.share.config.ts +43 -0
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js +0 -1
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js.gz +0 -0
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js +0 -1
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.br +0 -0
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js +0 -2
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-BoBrAw5i.js +0 -1
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js +0 -1
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Czearm3I.js +0 -1
- package/dist/web/assets/ai-resource-editor-Czearm3I.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Czearm3I.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-AOgAUCgH.js +0 -1
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js +0 -1
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js.br +0 -0
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js.gz +0 -0
- package/dist/web/assets/android-tab-L7DmLfHG.js +0 -2
- package/dist/web/assets/android-tab-L7DmLfHG.js.br +0 -0
- package/dist/web/assets/android-tab-L7DmLfHG.js.gz +0 -0
- package/dist/web/assets/api-client-DAQfiXg0.js +0 -1
- package/dist/web/assets/api-client-OiA8Ida1.js +0 -1
- package/dist/web/assets/api-client-OiA8Ida1.js.br +0 -0
- package/dist/web/assets/api-client-OiA8Ida1.js.gz +0 -0
- package/dist/web/assets/api-settings-D2H6gjen.js +0 -1
- package/dist/web/assets/api-settings-D2H6gjen.js.br +0 -0
- package/dist/web/assets/api-settings-D2H6gjen.js.gz +0 -0
- package/dist/web/assets/api-settings-DHhcUHtx.js +0 -1
- package/dist/web/assets/api-themes-CE8gPZ3X.js +0 -1
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js +0 -1
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.gz +0 -0
- package/dist/web/assets/apps-panel-DaojtUvh.js +0 -1
- package/dist/web/assets/apps-panel-DaojtUvh.js.br +0 -0
- package/dist/web/assets/apps-panel-DaojtUvh.js.gz +0 -0
- package/dist/web/assets/audio-preview-CWcPZqTA.js +0 -1
- package/dist/web/assets/audio-preview-CWcPZqTA.js.br +0 -4
- package/dist/web/assets/audio-preview-CWcPZqTA.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js +0 -1
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js.br +0 -0
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js.gz +0 -0
- package/dist/web/assets/button-Br60hGkw.js +0 -1
- package/dist/web/assets/button-Br60hGkw.js.br +0 -0
- package/dist/web/assets/button-Br60hGkw.js.gz +0 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js +0 -1
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.gz +0 -0
- package/dist/web/assets/chat-tab-DMVb_mgx.js +0 -1
- package/dist/web/assets/chat-tab-DMVb_mgx.js.br +0 -0
- package/dist/web/assets/chat-tab-DMVb_mgx.js.gz +0 -0
- package/dist/web/assets/chat-tab-s7uAnh-h.js +0 -17
- package/dist/web/assets/chat-tab-s7uAnh-h.js.br +0 -0
- package/dist/web/assets/chat-tab-s7uAnh-h.js.gz +0 -0
- package/dist/web/assets/code-editor-JK49X9EX.js +0 -10
- package/dist/web/assets/code-editor-JK49X9EX.js.br +0 -0
- package/dist/web/assets/code-editor-JK49X9EX.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js +0 -1
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.gz +0 -0
- package/dist/web/assets/conflict-editor-rOpVkK9P.js +0 -19
- package/dist/web/assets/conflict-editor-rOpVkK9P.js.br +0 -0
- package/dist/web/assets/conflict-editor-rOpVkK9P.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-BGmb918E.js +0 -4
- package/dist/web/assets/connection-form-tab-BGmb918E.js.br +0 -0
- package/dist/web/assets/connection-form-tab-BGmb918E.js.gz +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js +0 -1
- package/dist/web/assets/context-menu-BoQ6lxte.js.br +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js +0 -1
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.br +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.gz +0 -0
- package/dist/web/assets/csv-preview-CM7su92m.js +0 -10
- package/dist/web/assets/csv-preview-CM7su92m.js.br +0 -0
- package/dist/web/assets/csv-preview-CM7su92m.js.gz +0 -0
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js +0 -1
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.br +0 -0
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js +0 -1
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js.br +0 -0
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js +0 -1
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js.br +0 -0
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js.gz +0 -0
- package/dist/web/assets/db-types-9ac-eYxf.js +0 -1
- package/dist/web/assets/db-types-9ac-eYxf.js.br +0 -0
- package/dist/web/assets/db-types-9ac-eYxf.js.gz +0 -0
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js +0 -1
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.br +0 -0
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.gz +0 -0
- package/dist/web/assets/design-export-client-ClwRg798.js +0 -1
- package/dist/web/assets/design-export-client-ClwRg798.js.br +0 -0
- package/dist/web/assets/design-export-client-ClwRg798.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js +0 -1
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.gz +0 -0
- package/dist/web/assets/design-settings-section-CuxZSLAr.js +0 -2
- package/dist/web/assets/design-settings-section-CuxZSLAr.js.br +0 -0
- package/dist/web/assets/design-settings-section-CuxZSLAr.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js +0 -3
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.gz +0 -0
- package/dist/web/assets/design-tab-JlKmHVkd.js +0 -57
- package/dist/web/assets/design-tab-JlKmHVkd.js.br +0 -0
- package/dist/web/assets/design-tab-JlKmHVkd.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js +0 -1
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.gz +0 -0
- package/dist/web/assets/dialog-DOaEX6AK.js +0 -1
- package/dist/web/assets/dialog-DOaEX6AK.js.br +0 -0
- package/dist/web/assets/dialog-DOaEX6AK.js.gz +0 -0
- package/dist/web/assets/diff-viewer-FidH7Nsq.js +0 -4
- package/dist/web/assets/diff-viewer-FidH7Nsq.js.br +0 -0
- package/dist/web/assets/diff-viewer-FidH7Nsq.js.gz +0 -0
- package/dist/web/assets/docx-preview-ENiLGqzy.js +0 -12
- package/dist/web/assets/docx-preview-ENiLGqzy.js.br +0 -0
- package/dist/web/assets/docx-preview-ENiLGqzy.js.gz +0 -0
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js +0 -1
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js.br +0 -0
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js +0 -7
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js.gz +0 -0
- package/dist/web/assets/editor-dialog-DC7dUWAX.js +0 -1
- package/dist/web/assets/editor-dialog-DC7dUWAX.js.br +0 -0
- package/dist/web/assets/editor-dialog-DC7dUWAX.js.gz +0 -0
- package/dist/web/assets/editor-language-service-0pN0TxYN.js +0 -1
- package/dist/web/assets/editor-language-service-0pN0TxYN.js.br +0 -0
- package/dist/web/assets/editor-language-service-0pN0TxYN.js.gz +0 -0
- package/dist/web/assets/explorer-body-tFaUp9_Q.js +0 -2
- package/dist/web/assets/explorer-body-tFaUp9_Q.js.br +0 -0
- package/dist/web/assets/explorer-body-tFaUp9_Q.js.gz +0 -0
- package/dist/web/assets/explorer-model-BmgFEsj1.js +0 -1
- package/dist/web/assets/explorer-model-BmgFEsj1.js.br +0 -0
- package/dist/web/assets/explorer-model-BmgFEsj1.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js +0 -1
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js.br +0 -0
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js +0 -1
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js.br +0 -0
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js.gz +0 -0
- package/dist/web/assets/extension-webview-C9ApceLU.js +0 -12
- package/dist/web/assets/extension-webview-C9ApceLU.js.br +0 -0
- package/dist/web/assets/extension-webview-C9ApceLU.js.gz +0 -0
- package/dist/web/assets/file-diff-lX1a7RLF.js +0 -1
- package/dist/web/assets/file-icons-DpwcJLL4.js +0 -1
- package/dist/web/assets/file-icons-DpwcJLL4.js.br +0 -0
- package/dist/web/assets/file-icons-DpwcJLL4.js.gz +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js +0 -1
- package/dist/web/assets/file-store-Bk1WYfdy.js.br +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js.gz +0 -0
- package/dist/web/assets/files-settings-section-C8MacVFQ.js +0 -1
- package/dist/web/assets/files-settings-section-C8MacVFQ.js.br +0 -0
- package/dist/web/assets/files-settings-section-C8MacVFQ.js.gz +0 -0
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js +0 -1
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.br +0 -0
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.gz +0 -0
- package/dist/web/assets/format-file-meta-C0LKHE3e.js +0 -1
- package/dist/web/assets/format-file-meta-C0LKHE3e.js.br +0 -0
- package/dist/web/assets/format-file-meta-C0LKHE3e.js.gz +0 -0
- package/dist/web/assets/fs-api-BQrIEcvo.js +0 -1
- package/dist/web/assets/fs-api-BQrIEcvo.js.br +0 -0
- package/dist/web/assets/fs-api-BQrIEcvo.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js +0 -1
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js.br +0 -0
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BVihXafd.js +0 -1
- package/dist/web/assets/git-log-panel-g2pBnu6r.js +0 -1
- package/dist/web/assets/git-log-panel-g2pBnu6r.js.br +0 -0
- package/dist/web/assets/git-log-panel-g2pBnu6r.js.gz +0 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js +0 -1
- package/dist/web/assets/git-repo-store-BOYLnV67.js.br +0 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js.gz +0 -0
- package/dist/web/assets/git-review-tab-BzI5mxWd.js +0 -3
- package/dist/web/assets/git-review-tab-BzI5mxWd.js.br +0 -0
- package/dist/web/assets/git-review-tab-BzI5mxWd.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js +0 -177
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js +0 -2
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js +0 -1
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.br +0 -0
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.gz +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js +0 -1
- package/dist/web/assets/icons-JMA45Ifw.js.br +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js.gz +0 -0
- package/dist/web/assets/image-preview-D7KR11Xo.js +0 -1
- package/dist/web/assets/impexp-tab-JF6JF8eO.js +0 -1
- package/dist/web/assets/impexp-tab-JF6JF8eO.js.br +0 -0
- package/dist/web/assets/impexp-tab-JF6JF8eO.js.gz +0 -0
- package/dist/web/assets/index-DyYGWFVa.css +0 -1
- package/dist/web/assets/index-DyYGWFVa.css.br +0 -0
- package/dist/web/assets/index-DyYGWFVa.css.gz +0 -0
- package/dist/web/assets/index-ItT-dTPV.js +0 -59
- package/dist/web/assets/index-ItT-dTPV.js.br +0 -0
- package/dist/web/assets/index-ItT-dTPV.js.gz +0 -0
- package/dist/web/assets/input-CKGoVpYv.js +0 -1
- package/dist/web/assets/jira-watcher-section-CvyXLyjO.js +0 -1
- package/dist/web/assets/keybindings-store-CeEtx6js.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DiYURB24.js +0 -2
- package/dist/web/assets/language-servers-section-DiYURB24.js.br +0 -0
- package/dist/web/assets/language-servers-section-DiYURB24.js.gz +0 -0
- package/dist/web/assets/logs-app-CJlNqOdc.js +0 -13
- package/dist/web/assets/logs-app-CJlNqOdc.js.br +0 -0
- package/dist/web/assets/logs-app-CJlNqOdc.js.gz +0 -0
- package/dist/web/assets/logs-tab-BoAlm_8H.js +0 -1
- package/dist/web/assets/logs-window-content-nNm4jl1s.js +0 -1
- package/dist/web/assets/lsp-client-LnKiMWeG.js +0 -1
- package/dist/web/assets/lsp-client-LnKiMWeG.js.br +0 -0
- package/dist/web/assets/lsp-client-LnKiMWeG.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-8Hef5MLx.js +0 -1
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js +0 -5
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js.br +0 -0
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js.gz +0 -0
- package/dist/web/assets/media-url-CsdZ6q_T.js +0 -1
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js +0 -1
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.br +0 -0
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js +0 -1
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js +0 -1
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js.br +0 -0
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js.gz +0 -0
- package/dist/web/assets/notification-store-CXC7u6MW.js +0 -1
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js +0 -1
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js.gz +0 -0
- package/dist/web/assets/onboarding-entry--MWe4amV.js +0 -1
- package/dist/web/assets/onboarding-entry--MWe4amV.js.br +0 -0
- package/dist/web/assets/onboarding-entry--MWe4amV.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js +0 -1
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-CkQe49j_.js +0 -1
- package/dist/web/assets/open-db-tabs-CkQe49j_.js.br +0 -0
- package/dist/web/assets/open-db-tabs-CkQe49j_.js.gz +0 -0
- package/dist/web/assets/open-settings-DsGBn73g.js +0 -1
- package/dist/web/assets/overview-panel-CcUGDvnt.js +0 -1
- package/dist/web/assets/overview-panel-CcUGDvnt.js.br +0 -0
- package/dist/web/assets/overview-panel-CcUGDvnt.js.gz +0 -0
- package/dist/web/assets/panel-store-DmP16Fo0.js +0 -1
- package/dist/web/assets/panel-store-DmP16Fo0.js.br +0 -0
- package/dist/web/assets/panel-store-DmP16Fo0.js.gz +0 -0
- package/dist/web/assets/patch-tab-metadata-B-jH5svY.js +0 -1
- package/dist/web/assets/pdf-preview-DMUIWb9B.js +0 -1
- package/dist/web/assets/pdf-preview-DMUIWb9B.js.br +0 -0
- package/dist/web/assets/pdf-preview-DMUIWb9B.js.gz +0 -0
- package/dist/web/assets/performance-panel-CJDLUwrs.js +0 -3
- package/dist/web/assets/performance-panel-CJDLUwrs.js.br +0 -0
- package/dist/web/assets/performance-panel-CJDLUwrs.js.gz +0 -0
- package/dist/web/assets/portal-container-context-BXAsDqrB.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.gz +0 -0
- package/dist/web/assets/pptx-export-BxmgltJ4.js +0 -111
- package/dist/web/assets/pptx-export-BxmgltJ4.js.br +0 -0
- package/dist/web/assets/pptx-export-BxmgltJ4.js.gz +0 -0
- package/dist/web/assets/problems-panel-DX32QDH_.js +0 -1
- package/dist/web/assets/problems-panel-DX32QDH_.js.br +0 -0
- package/dist/web/assets/problems-panel-DX32QDH_.js.gz +0 -0
- package/dist/web/assets/process-row-format-CBw-CQCx.js +0 -1
- package/dist/web/assets/process-table-CX-NhOg6.js +0 -1
- package/dist/web/assets/process-table-CX-NhOg6.js.br +0 -0
- package/dist/web/assets/process-table-CX-NhOg6.js.gz +0 -0
- package/dist/web/assets/project-framework-store-Bi5dyHdx.js +0 -1
- package/dist/web/assets/project-store-CEGoLMOl.js +0 -1
- package/dist/web/assets/project-store-CEGoLMOl.js.br +0 -0
- package/dist/web/assets/project-store-CEGoLMOl.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js +0 -1
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.gz +0 -0
- package/dist/web/assets/query-audit-section-DTHI5GP7.js +0 -1
- package/dist/web/assets/query-audit-section-DTHI5GP7.js.br +0 -0
- package/dist/web/assets/query-audit-section-DTHI5GP7.js.gz +0 -0
- package/dist/web/assets/query-tab-qMlIkHRk.js +0 -22
- package/dist/web/assets/query-tab-qMlIkHRk.js.br +0 -0
- package/dist/web/assets/query-tab-qMlIkHRk.js.gz +0 -0
- package/dist/web/assets/react-PkBxFcos.js +0 -1
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js +0 -1
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js +0 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js +0 -1
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js +0 -1
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js +0 -1
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js +0 -1
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.gz +0 -0
- package/dist/web/assets/review-code-CfuJeLYd.js +0 -5
- package/dist/web/assets/review-code-CfuJeLYd.js.br +0 -0
- package/dist/web/assets/review-code-CfuJeLYd.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-Bk9Bw7G1.js +0 -1
- package/dist/web/assets/run-in-terminal-button-DFPQUlZs.js +0 -1
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js +0 -1
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.br +0 -0
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js +0 -1
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.gz +0 -0
- package/dist/web/assets/scroll-area-6Am1KMiB.js +0 -1
- package/dist/web/assets/scroll-area-6Am1KMiB.js.br +0 -0
- package/dist/web/assets/scroll-area-6Am1KMiB.js.gz +0 -0
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js +0 -1
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js.br +0 -0
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js.gz +0 -0
- package/dist/web/assets/separator-BOYUIPkH.js +0 -1
- package/dist/web/assets/services-panel-CBRTsROB.js +0 -1
- package/dist/web/assets/services-panel-CBRTsROB.js.br +0 -0
- package/dist/web/assets/services-panel-CBRTsROB.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js +0 -1
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js.br +0 -0
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js +0 -1
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.gz +0 -0
- package/dist/web/assets/session-review-tab--kNB_FKQ.js +0 -6
- package/dist/web/assets/session-review-tab--kNB_FKQ.js.br +0 -0
- package/dist/web/assets/session-review-tab--kNB_FKQ.js.gz +0 -0
- package/dist/web/assets/settings-body-B-s0fEjc.js +0 -1
- package/dist/web/assets/settings-body-B-s0fEjc.js.br +0 -0
- package/dist/web/assets/settings-body-B-s0fEjc.js.gz +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js +0 -1
- package/dist/web/assets/settings-categories-CcR9eL3x.js.br +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js.gz +0 -0
- package/dist/web/assets/settings-section-content-BJ35dy5r.js +0 -1
- package/dist/web/assets/settings-section-content-DckksvTg.js +0 -2
- package/dist/web/assets/settings-section-content-DckksvTg.js.br +0 -0
- package/dist/web/assets/settings-section-content-DckksvTg.js.gz +0 -0
- package/dist/web/assets/settings-store-WeJyQVL8.js +0 -2
- package/dist/web/assets/settings-store-WeJyQVL8.js.br +0 -0
- package/dist/web/assets/settings-store-WeJyQVL8.js.gz +0 -0
- package/dist/web/assets/settings-tab-BlX33GEN.js +0 -1
- package/dist/web/assets/settings-window-content-B-7yV1_q.js +0 -1
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js +0 -1
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js.br +0 -0
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js.gz +0 -0
- package/dist/web/assets/sortable-header-B9gfWik4.js +0 -1
- package/dist/web/assets/sortable-header-B9gfWik4.js.br +0 -0
- package/dist/web/assets/sortable-header-B9gfWik4.js.gz +0 -0
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js +0 -5
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.br +0 -0
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js +0 -1
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js.br +0 -0
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js +0 -1
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.gz +0 -0
- package/dist/web/assets/start-ellipsis-rBh37k0n.js +0 -1
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js +0 -1
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js.gz +0 -0
- package/dist/web/assets/structure-tab-DuLnsTC4.js +0 -3
- package/dist/web/assets/structure-tab-DuLnsTC4.js.br +0 -0
- package/dist/web/assets/structure-tab-DuLnsTC4.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js +0 -2
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js.br +0 -0
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-B6_tC9LO.js +0 -1
- package/dist/web/assets/system-monitor-window-content-CwBzqMUe.js +0 -1
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js +0 -1
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.gz +0 -0
- package/dist/web/assets/tab-store-nNzRNfVV.js +0 -1
- package/dist/web/assets/table-tab-B5asfTBP.js +0 -2
- package/dist/web/assets/table-tab-B5asfTBP.js.br +0 -0
- package/dist/web/assets/table-tab-B5asfTBP.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js +0 -1
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.gz +0 -0
- package/dist/web/assets/terminal-tab-DpMONMVB.js +0 -3
- package/dist/web/assets/terminal-tab-DpMONMVB.js.br +0 -0
- package/dist/web/assets/terminal-tab-DpMONMVB.js.gz +0 -0
- package/dist/web/assets/tool-cards-DoDKxqN4.js +0 -14
- package/dist/web/assets/tool-cards-DoDKxqN4.js.br +0 -0
- package/dist/web/assets/tool-cards-DoDKxqN4.js.gz +0 -0
- package/dist/web/assets/use-at-most-wide-BQFi1Sjv.js +0 -1
- package/dist/web/assets/use-blob-url-D7ElNPnW.js +0 -1
- package/dist/web/assets/use-db-driver-installed-BscdI-wS.js +0 -1
- package/dist/web/assets/use-db-read-DYuyNA5i.js +0 -1
- package/dist/web/assets/use-db-read-DYuyNA5i.js.br +0 -0
- package/dist/web/assets/use-db-read-DYuyNA5i.js.gz +0 -0
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js +0 -1
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js.br +0 -0
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js.gz +0 -0
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js +0 -1
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.br +0 -0
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.gz +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js +0 -1
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.br +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js +0 -16
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.br +0 -0
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.gz +0 -0
- package/dist/web/assets/use-is-mobile-BXHbkfs9.js +0 -1
- package/dist/web/assets/use-lsp-BTVDYrt6.js +0 -6
- package/dist/web/assets/use-lsp-BTVDYrt6.js.br +0 -0
- package/dist/web/assets/use-lsp-BTVDYrt6.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-DqnhExsm.js +0 -1
- package/dist/web/assets/use-opener-focus-C5L5UUJs.js +0 -1
- package/dist/web/assets/use-process-kill-D-SGQxDn.js +0 -1
- package/dist/web/assets/use-process-kill-D-SGQxDn.js.br +0 -0
- package/dist/web/assets/use-process-kill-D-SGQxDn.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js +0 -4
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.gz +0 -0
- package/dist/web/assets/use-visual-viewport-CQ6-A0Dt.js +0 -1
- package/dist/web/assets/use-websocket-C6RnlNVJ.js +0 -1
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js +0 -291
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.br +0 -0
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.gz +0 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js +0 -45
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.br +0 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.gz +0 -0
- package/dist/web/assets/video-preview-CYzeUPfH.js +0 -1
- package/dist/web/assets/video-preview-CYzeUPfH.js.br +0 -0
- package/dist/web/assets/video-preview-CYzeUPfH.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-C01d-toF.js +0 -1
- package/dist/web/assets/voice-settings-section-C01d-toF.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C01d-toF.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-F5C3quQs.js +0 -1
- package/dist/web/assets/web-preview-tab-F5C3quQs.js.br +0 -0
- package/dist/web/assets/web-preview-tab-F5C3quQs.js.gz +0 -0
- package/dist/web/assets/window-pip-registry-DSoB7T3k.js +0 -1
- package/dist/web/assets/window-store-zJczRsv4.js +0 -1
- package/dist/web/assets/window-store-zJczRsv4.js.br +0 -0
- package/dist/web/assets/window-store-zJczRsv4.js.gz +0 -0
- package/dist/web/assets/ws-auth-cWeQ7_61.js +0 -1
- /package/dist/web/assets/{__vite-browser-external-B4VNaaaA.js → __vite-browser-external-DL4jXWNt.js} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js → clipboard-D-VCry-F.js} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js.br → clipboard-D-VCry-F.js.br} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js.gz → clipboard-D-VCry-F.js.gz} +0 -0
- /package/dist/web/assets/{code-fence-vHZyBehL.js → code-fence-BK57HRhJ.js} +0 -0
- /package/dist/web/assets/{design-system-status-label-Cus6e2Df.js → design-system-status-label-KA4ESjWe.js} +0 -0
- /package/dist/web/assets/{format-bytes-B2kC4sbB.js → format-bytes-he3TR0bV.js} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js → session-turns-D3QpTtCq.js} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js.br → session-turns-D3QpTtCq.js.br} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js.gz → session-turns-D3QpTtCq.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js → vendor-xterm-DRhOk3kW.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.br → vendor-xterm-DRhOk3kW.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.gz → vendor-xterm-DRhOk3kW.js.gz} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e,r as t}from"./api-client-xQDlhUTu.js";import{t as n}from"./react-BZ0kba1-.js";var r=5e4;function i(e,t){return e.map(e=>({name:e.name,path:t?`${t}/${e.name}`:e.name,type:e.type,ignored:e.isIgnored}))}function a(e,t,n){return t?e.map(e=>o(e,t,n)):n.map(t=>{let n=e.find(e=>e.path===t.path);return n?{...t,children:n.children}:t})}function o(e,t,n){if(e.path===t){let t=n.map(t=>{let n=e.children?.find(e=>e.path===t.path);return n?{...t,children:n.children}:t});return{...e,children:t}}return e.children&&t.startsWith(e.path+`/`)?{...e,children:e.children.map(e=>o(e,t,n))}:e}var s=20,c=3,l=[],u=0,d=0,f=null,p=typeof requestIdleCallback==`function`?e=>requestIdleCallback(()=>e(),{timeout:1e3}):e=>setTimeout(e,200);function m(e){if(e===d)for(;u<c&&l.length>0;){let t=l.shift();u++,f(t).finally(()=>{u--,e===d&&p(()=>m(e))})}}function h(e,t,n){f=n;let r=e.filter(e=>e.type===`directory`&&!e.ignored&&!t(e.path)).slice(0,s).map(e=>e.path);if(r.length===0)return;l.push(...r.filter(e=>!l.includes(e)));let i=d;p(()=>m(i))}function g(){d++,l=[]}function _(e){return e.kind===`node`?e.node.path:`input:${e.targetPath}:${e.inline.type}`}function v(e){return[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1)}function y(e,t,n=null){let r=[],i=n!=null&&n.type!==`rename`,a=n?.type===`rename`?n.existingNode?.path:void 0;i&&n.parentPath===``&&r.push({kind:`input`,inline:n,depth:0,targetPath:``});function o(e,s){for(let c of v(e)){a!=null&&a===c.path?r.push({kind:`input`,inline:n,depth:s,targetPath:c.path}):r.push({kind:`node`,node:c,depth:s});let e=c.type===`directory`&&t.has(c.path);i&&e&&n.parentPath===c.path&&r.push({kind:`input`,inline:n,depth:s+1,targetPath:c.path}),e&&c.children&&o(c.children,s+1)}}return o(e,0),r}function b(e,t){return y(e,t).filter(e=>e.kind===`node`).map(e=>e.node)}function x(e,t){if(!t)return e;let n=e.includes(`\\`)?`\\`:`/`,r=n===`\\`?t.replace(/\//g,`\\`):t;return e.endsWith(n)?`${e}${r}`:`${e}${n}${r}`}function S(e,t){let n=e=>e.replace(/\\/g,`/`).replace(/\/+$/,``),r=n(e),i=n(t);return i===r?``:i.startsWith(`${r}/`)?i.slice(r.length+1):null}function C(e,t){let n=e;for(;;){let e=n.find(e=>e.path===t||t.startsWith(`${e.path}/`));if(!e)return;if(e.path===t)return e;n=e.children??[]}}function w(e,t,n){h(n,t=>e().loadedPaths.has(t)||e().inflight.has(t),n=>e().loadChildren(t,n,{prefetch:!0}))}var T=0,E=0,D=null,O=0;function k(){T++,D=null}var A=n((n,o)=>({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,indexStale:!1,indexRemote:!1,indexRevision:0,indexProject:null,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null,setInlineAction:e=>n({inlineAction:e}),clearInlineAction:()=>n({inlineAction:null}),setClipboard:e=>n({clipboard:e}),setFocusedPath:e=>n({focusedPath:e}),loadRoot:async r=>{n({loading:!0,error:null});try{let a=i(await t.get(`${e(r)}/files/list?path=`),``),s=new Set(o().loadedPaths);s.add(``),n({tree:a,loading:!1,loadedPaths:s}),w(o,r,a)}catch(e){n({error:e instanceof Error?e.message:`Failed to load files`,loading:!1})}},loadChildren:async(r,s,c)=>{let l=o();if(l.loadedPaths.has(s))return;let u=l.inflight.get(s);if(u)return c?.prefetch||(u.prefetch=!1),u.promise;let d=new AbortController,f={controller:d,promise:void 0,prefetch:!!c?.prefetch},p=new Map(l.inflight);p.set(s,f),n({inflight:p});let m=()=>{let e=new Map(o().inflight);return e.get(s)===f&&e.delete(s),e};return f.promise=(async()=>{try{let c=encodeURIComponent(s),l=await t.get(`${e(r)}/files/list?path=${c}`,{signal:d.signal});if(d.signal.aborted)return;let u=i(l,s),p=o(),h=a(p.tree,s,u),g=new Set(p.loadedPaths);g.add(s),n({tree:h,loadedPaths:g,inflight:m()}),f.prefetch||w(o,r,u)}catch(e){if(n({inflight:m()}),e instanceof Error&&e.name===`AbortError`)return}})(),f.promise},loadPathsBatch:async(r,s)=>{let c=o(),l=[...new Set(s)].filter(e=>!c.loadedPaths.has(e));if(l.length!==0){c.tree.length===0&&n({loading:!0,error:null});try{let s=await t.post(`${e(r)}/files/list-batch`,{paths:l}),c=o(),u=c.tree,d=new Set(c.loadedPaths),f=new Set(c.expandedPaths),p=[...s].sort((e,t)=>e.path.split(`/`).length-t.path.split(`/`).length);for(let e of p){if(e.error!=null||!e.entries){f.delete(e.path);continue}let t=i(e.entries,e.path);u=e.path===``?t:a(u,e.path,t),d.add(e.path)}n({tree:u,loadedPaths:d,expandedPaths:f,loading:!1}),w(o,r,u)}catch(e){n({error:o().tree.length===0?e instanceof Error?e.message:`Failed to load files`:null,loading:!1})}}},loadIndex:i=>{if(D&&o().indexProject===i)return D;let a=++T,s=E;o().indexProject===i?o().indexStatus!==`ready`&&n({indexStatus:`loading`}):n({indexProject:i,fileIndex:[],indexStatus:`loading`,indexStale:!1,indexRemote:!1});let c=(async()=>{try{let c=await t.get(`${e(i)}/files/index?max=${r}`);if(a!==T)return;let l=!Array.isArray(c);n({fileIndex:l?[]:c,indexRemote:l,indexRevision:o().indexRevision+1,indexStatus:`ready`,indexStale:E!==s})}catch{if(a!==T)return;o().indexStatus!==`ready`&&n({indexStatus:`error`})}})().finally(()=>{D===c&&(D=null)});return D=c,c},ensureIndex:e=>{let{indexProject:t,indexStatus:n,indexStale:r}=o();t===e&&n===`ready`&&!r||o().loadIndex(e)},openIndexReader:e=>{O++,o().ensureIndex(e);let t=!0;return()=>{t&&(t=!1,O--)}},indexRebuilt:e=>{o().markIndexStale(e),!(O===0||e!==o().indexProject)&&(D?D.then(()=>{O>0&&e===o().indexProject&&o().ensureIndex(e)}):o().loadIndex(e))},markIndexStale:e=>{e===o().indexProject&&(E++,o().indexStale||n({indexStale:!0}))},invalidateIndex:()=>{k(),n({indexProject:null,indexStatus:`idle`,fileIndex:[],indexStale:!1,indexRemote:!1})},invalidateFolder:async(e,t)=>{let r=o();if(!r.loadedPaths.has(t))return;let i=new Set(r.loadedPaths);i.delete(t),n({loadedPaths:i}),(!t||r.expandedPaths.has(t))&&await o().loadChildren(e,t)},toggleExpand:(e,t)=>{let r=o(),i=new Set(r.expandedPaths);if(i.has(t))i.delete(t),n({expandedPaths:i});else if(i.add(t),n({expandedPaths:i}),!r.loadedPaths.has(t))o().loadChildren(e,t);else{let n=C(o().tree,t);n?.children&&w(o,e,n.children)}},setExpanded:(e,t)=>{let r=new Set(o().expandedPaths);t?r.add(e):r.delete(e),n({expandedPaths:r})},collapseAll:()=>{n({expandedPaths:new Set})},toggleFileSelect:e=>{let t=o().selectedFiles;t.indexOf(e)>=0?n({selectedFiles:t.filter(t=>t!==e)}):n({selectedFiles:[...t,e]})},setSelectedFiles:e=>n({selectedFiles:e}),clearSelection:()=>n({selectedFiles:[]}),reset:()=>{g();for(let e of o().inflight.values())e.controller.abort();k(),n({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,indexStale:!1,indexRemote:!1,indexProject:null,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null})},fetchTree:async e=>{await o().loadRoot(e),o().loadIndex(e)}})),j=`ppm-explorer-expanded:`;function M(e){try{let t=localStorage.getItem(j+e),n=t?JSON.parse(t):[];return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}catch{return[]}}function N(e,t){try{let n=[...t].filter(e=>e!==``).slice(0,50);localStorage.setItem(j+e,JSON.stringify(n))}catch{}}function P(){let{tree:e,expandedPaths:t}=A.getState();return b(e,t).map(e=>e.path)}export{N as a,_ as c,S as i,b as l,P as n,A as o,M as r,y as s,x as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{cr as r,li as i}from"./icons-BwyIKaTT.js";import{r as a}from"./api-client-xQDlhUTu.js";import{i as o}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import{o as s}from"./file-store-BQ41vIs5.js";import{t as c}from"./button-C9ZXWb3b.js";import{t as l}from"./input-C3oVNCMq.js";import{Er as u,Kn as d}from"./index-DLB3j_P0.js";import{t as f}from"./separator-DmU9aJwq.js";var p=e(t(),1);function m(){return a.get(`/api/settings/files`)}function h(e){return a.patch(`/api/settings/files`,e)}function g(e){return a.get(`/api/projects/${encodeURIComponent(e)}/settings`)}function _(e,t){return a.patch(`/api/projects/${encodeURIComponent(e)}/settings`,t)}var v=n();function y({value:e,onChange:t,placeholder:n=`e.g. **/*.log`,disabled:a=!1}){let o=(0,p.useRef)([]);function s(n,r){let i=[...e];i[n]=r,t(i)}function u(n){t(e.filter((e,t)=>t!==n)),setTimeout(()=>{let e=Math.max(n-1,0);o.current[e]?.focus()},0)}function d(){t([...e,``]),setTimeout(()=>{o.current[e.length]?.focus()},0)}function f(t,n){n.key===`Enter`?(n.preventDefault(),e[t]?.trim()&&d()):n.key===`Backspace`&&e[t]===``&&(n.preventDefault(),u(t))}return(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[e.length===0&&(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground py-1`,children:`No patterns. Click "Add pattern" to start.`}),e.map((e,t)=>(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,v.jsx)(l,{ref:e=>{o.current[t]=e},value:e,onChange:e=>s(t,e.target.value),onKeyDown:e=>f(t,e),placeholder:n,disabled:a,className:`h-8 text-xs flex-1 font-mono`,"aria-label":`Pattern ${t+1}`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>u(t),disabled:a,"aria-label":`Remove pattern ${t+1}`,className:`shrink-0 flex items-center justify-center p-2.5 rounded-md text-muted-foreground hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-40 disabled:pointer-events-none`,children:(0,v.jsx)(i,{className:`size-3.5`})})]},t)),(0,v.jsxs)(c,{type:`button`,variant:`outline`,size:`sm`,onClick:d,disabled:a,className:`h-8 text-xs gap-1.5 w-full cursor-pointer`,children:[(0,v.jsx)(r,{className:`size-3.5`}),`Add pattern`]})]})}var b={filesExclude:[],searchExclude:[],useIgnoreFiles:!0};function x(){let e=o(e=>e.activeProject),[t,n]=(0,p.useState)(`global`),[r,i]=(0,p.useState)([]),[a,l]=(0,p.useState)([]),[x,S]=(0,p.useState)(!0),[C,w]=(0,p.useState)(!1),[T,E]=(0,p.useState)(!1),[D,O]=(0,p.useState)(null),[k,A]=(0,p.useState)(!1),j=(0,p.useRef)(null);(0,p.useEffect)(()=>{j.current?.abort();let n=new AbortController;return j.current=n,A(!0),O(null),(async()=>{try{if(t===`global`){let e=await m();if(n.signal.aborted)return;i(e.filesExclude),l(e.searchExclude),S(e.useIgnoreFiles)}else{if(!e)return;let t=await g(e.name);if(n.signal.aborted)return;let r=t.files??{};i(r.filesExclude??b.filesExclude),l(r.searchExclude??b.searchExclude),S(r.useIgnoreFiles??b.useIgnoreFiles)}}catch(e){if(n.signal.aborted)return;O(e.message)}finally{n.signal.aborted||A(!1)}})(),()=>n.abort()},[t,e?.name]);let M=async()=>{w(!0),E(!1),O(null);try{let n={filesExclude:r.filter(e=>e.trim()!==``),searchExclude:a.filter(e=>e.trim()!==``),useIgnoreFiles:x};if(t===`global`)await h(n);else{if(!e)throw Error(`No active project`);await _(e.name,{files:n})}let i=s.getState();i.invalidateIndex(),e&&i.loadIndex(e.name),E(!0),setTimeout(()=>E(!1),2e3)}catch(e){O(e.message)}finally{w(!1)}},N=!!e;return(0,v.jsxs)(`div`,{className:`space-y-4`,children:[(0,v.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`File Filters`}),(0,v.jsxs)(`div`,{className:`flex gap-1`,children:[(0,v.jsx)(`button`,{type:`button`,onClick:()=>n(`global`),className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer ${t===`global`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:`Global`}),(0,v.jsx)(`button`,{type:`button`,onClick:()=>N&&n(`project`),disabled:!N,title:N?void 0:`Open a project to edit per-project overrides`,className:`flex-1 py-1.5 rounded-md text-xs font-medium transition-colors cursor-pointer disabled:opacity-40 disabled:cursor-not-allowed ${t===`project`?`bg-primary text-primary-foreground`:`bg-muted text-muted-foreground hover:bg-accent`}`,children:e?e.name:`Per-project`})]}),t===`project`&&e&&(0,v.jsxs)(`p`,{className:`text-[11px] text-muted-foreground -mt-2`,children:[`Overrides for `,(0,v.jsx)(`span`,{className:`font-medium`,children:e.name}),`. Leave empty to use global settings.`]}),k?(0,v.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Loading...`}):(0,v.jsxs)(v.Fragment,{children:[(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(u,{className:`text-xs`,children:`Files to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns hidden from the file tree and palette.`}),(0,v.jsx)(y,{value:r,onChange:i,placeholder:`e.g. **/*.log or node_modules/**`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,v.jsx)(u,{className:`text-xs`,children:`Search to Exclude`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Glob patterns excluded from file index / palette search.`}),(0,v.jsx)(y,{value:a,onChange:l,placeholder:`e.g. dist/** or **/*.min.js`,disabled:C})]}),(0,v.jsx)(f,{}),(0,v.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,v.jsxs)(`div`,{children:[(0,v.jsx)(u,{className:`text-xs`,children:`Use .gitignore rules`}),(0,v.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Respect .gitignore when filtering the file tree and index.`})]}),(0,v.jsx)(d,{checked:x,onCheckedChange:S,disabled:C})]}),D&&(0,v.jsx)(`p`,{className:`text-[11px] text-destructive`,children:D}),(0,v.jsx)(c,{onClick:M,disabled:C||k,size:`sm`,className:`h-8 text-xs w-full cursor-pointer`,children:C?`Saving...`:T?`Saved`:`Save`})]})]})}export{x as FilesSettingsSection};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{n as r}from"./utils-Bslrbb-G.js";import{n as i}from"./use-is-mobile-VRV9eZy1.js";import{t as a}from"./button-C9ZXWb3b.js";import{a as o,n as s,o as c,r as l,t as u}from"./dialog-Dn_2tuYa.js";import{t as d}from"./mobile-bottom-sheet-DArbIyrD.js";import{t as f}from"./use-opener-focus-CDRKhHwX.js";var p=[{id:`json`,label:`JSON`,extension:`json`},{id:`jsonl`,label:`JSON lines/NDJSON`,extension:`jsonl`},{id:`sql`,label:`SQL`,extension:`sql`},{id:`csv`,label:`CSV file`,extension:`csv`},{id:`csvSemicolon`,label:`CSV file (semicolon separated)`,extension:`csv`},{id:`csvExcel`,label:`CSV file for MS Excel`,extension:`csv`},{id:`tsv`,label:`TSV file (tab separated)`,extension:`tsv`},{id:`xlsx`,label:`MS Excel`,extension:`xlsx`},{id:`xml`,label:`XML file`,extension:`xml`}];new Set(p.map(e=>e.id));function m(e){return p.find(t=>t.id===e)}var h=`/api/db/grid-export/`,g=e=>`${h}${encodeURIComponent(e)}`;function _(e,t){return e.replace(/[\u0000-\u001f\u007f/\\:*?"<>|]/g,`_`).replace(/^[.\s]+|[.\s]+$/g,``)||t}function v(e,t){return`${_(e,`export`)}.${m(t).extension}`}var y=e(t(),1),b=n();function x({title:e,description:t,okLabel:n=`OK`,okDisabled:p=!1,onOk:m,onClose:h,returnFocus:g,extraButton:_,className:v,children:x}){let S=i(),C=(0,y.useId)(),w=f(),T=e=>{e.key!==`Enter`||e.shiftKey||e.ctrlKey||e.metaKey||e.altKey||e.nativeEvent.isComposing||e.target.closest(`button, textarea`)||(e.preventDefault(),p||m())},E=S?`h-11 flex-1 text-sm`:void 0,D=(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(a,{type:`button`,size:`sm`,onClick:m,disabled:p,className:r(S&&`h-11 flex-[2] text-sm`),children:n}),(0,b.jsx)(a,{type:`button`,size:`sm`,variant:`outline`,onClick:h,className:E,children:`Close`}),_?.(E)]});return S?(0,b.jsx)(d,{open:!0,onClose:h,className:`popover-solid`,children:(0,b.jsxs)(`div`,{role:`dialog`,"aria-modal":`true`,"aria-labelledby":C,onKeyDown:T,className:`flex max-h-[calc(var(--sheet-vh,100dvh)*0.85)] flex-col`,children:[(0,b.jsx)(`h2`,{id:C,className:`px-4 pb-2 pt-1 text-base font-semibold`,children:e}),(0,b.jsx)(`div`,{className:`grid min-h-0 content-start gap-3 overflow-y-auto px-4 pb-3`,children:x}),(0,b.jsx)(`div`,{className:`flex gap-2 border-t border-border-soft px-3 pt-2.5`,children:D})]})}):(0,b.jsx)(u,{open:!0,onOpenChange:e=>{e||h()},children:(0,b.jsxs)(s,{onKeyDown:T,onOpenAutoFocus:e=>{let t=e.currentTarget.querySelector(`[data-autofocus]`);t&&(e.preventDefault(),t.focus())},onCloseAutoFocus:e=>{if(!g){w(e);return}e.preventDefault(),g()},className:r(`max-h-[calc(100dvh-4rem)] grid-rows-[auto_minmax(0,1fr)_auto] gap-3 p-5 sm:max-w-[470px]`,v),children:[(0,b.jsxs)(o,{children:[(0,b.jsx)(c,{className:`text-[15px]`,children:e}),(0,b.jsx)(l,{className:`sr-only`,children:t})]}),(0,b.jsx)(`div`,{className:`-mx-1 grid content-start gap-2.5 overflow-y-auto px-1 py-0.5`,children:x}),(0,b.jsx)(`div`,{className:`flex items-center gap-2`,children:D})]})})}export{v as i,p as n,g as r,x as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./fs-api-CFtQzsIJ.js";function t(t){return t instanceof e?t.hint??t.message:t instanceof Error?t.message:void 0}function n(e){return e==null?``:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${(e/(1024*1024*1024)).toFixed(2)} GB`}function r(e){let t=Date.now()-new Date(e).getTime(),n=Math.floor(t/6e4);if(n<1)return`now`;if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function i(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleString()}function a(e){return e==null?``:(e&511).toString(8).padStart(3,`0`)}function o(e,t){let n=e.endsWith(t)&&e.length>t.length?e.slice(0,-t.length):e,r=n.lastIndexOf(t);if(r<0)return n;if(r===0)return t;let i=n.slice(0,r);return i.endsWith(`:`)?i+t:i}function s(e,t,n){return e.endsWith(n)?`${e}${t}`:`${e}${n}${t}`}function c(e,t){let n=e.lastIndexOf(`.`);return n<=0?`${e} (${t})`:`${e.slice(0,n)} (${t})${e.slice(n)}`}export{r as a,c,a as i,t as n,n as o,i as r,s,o as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e}from"./api-client-xQDlhUTu.js";var t=class extends Error{constructor(e,t,n,r){super(e),this.code=t,this.status=n,this.hint=r,this.name=`FsError`}};async function n(n,r={}){let i=e(),a={"Content-Type":`application/json`,"x-ppm-client":`web`};i&&(a.Authorization=`Bearer ${i}`);let o=await fetch(n,{...r,headers:{...a,...r.headers}}),s;try{s=await o.json()}catch{throw new t(o.ok?`Empty response from server`:`Server error (HTTP ${o.status})`,`EUNKNOWN`,o.status)}if(!o.ok||s.ok===!1)throw new t(s.error??`HTTP ${o.status}`,s.code??`EUNKNOWN`,o.status,s.hint);return s.data}var r=e=>JSON.stringify(e),i=encodeURIComponent,a={browse(e,t={}){let r=t.showHidden?`&showHidden=true`:``;return n(`/api/fs/browse?path=${i(e)}${r}`,{signal:t.signal})},stat(e,t){return n(`/api/fs/stat?path=${i(e)}`,{signal:t})},copy(e,t){return n(`/api/fs/copy`,{method:`POST`,body:r({source:e,destination:t})})},move(e,t){return n(`/api/fs/move`,{method:`POST`,body:r({source:e,destination:t})})},rename(e,t){return n(`/api/fs/rename`,{method:`POST`,body:r({path:e,newName:t})})},touch(e){return n(`/api/fs/touch`,{method:`POST`,body:r({path:e})})},mkdir(e,t=!1){return n(`/api/fs/mkdir`,{method:`POST`,body:r({path:e,gitInit:t})})},remove(e,t=!1){return n(`/api/fs/delete`,{method:`DELETE`,body:r({path:e,permanent:t})})},async downloadUrl(e){let{token:t}=await n(`/api/fs/download/token`,{method:`POST`,body:r({path:e})});return`/api/fs/raw?path=${i(e)}&download=true&dl_token=${i(t)}`},uploadUrl(e,t){return`/api/fs/upload?path=${i(e)}&overwrite=${t?`1`:`0`}`}};export{a as n,t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Ir as i,_t as a,ln as o,vt as s}from"./icons-BwyIKaTT.js";import{r as c,s as l}from"./api-client-xQDlhUTu.js";import{t as u}from"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./use-is-mobile-VRV9eZy1.js";import"./onboarding-quick-orientation-CTHtIRib.js";import{t as d}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import{t as f}from"./input-C3oVNCMq.js";import{Er as p,Kn as m,oi as h,z as g}from"./index-DLB3j_P0.js";import{t as _}from"./onboarding-entry-eehqBvyM.js";import{t as v}from"./separator-DmU9aJwq.js";var y=e(t(),1),b=n();function x(){let[e,t]=(0,y.useState)(!1),[n,i]=(0,y.useState)(``),[u,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(!1),[g,_]=(0,y.useState)(!1),[v,x]=(0,y.useState)(!1),[S,C]=(0,y.useState)(null),w=u.length>0&&n!==u,T=n.trim().length>=4&&n===u&&!g,E=(0,y.useCallback)(async()=>{if(T){_(!0),C(null);try{let{token:e}=await c.put(`/api/settings/auth/password`,{password:n.trim(),confirm:u.trim()});l(e),x(!0),i(``),p(``),setTimeout(()=>{x(!1),t(!1)},1500)}catch(e){C(e instanceof Error?e.message:`Failed to change password`)}finally{_(!1)}}},[T,n,u]);return e?(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Change Password`}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsxs)(`div`,{className:`relative`,children:[(0,b.jsx)(f,{type:m?`text`:`password`,placeholder:`New password`,value:n,onChange:e=>i(e.target.value),className:`h-8 text-xs pr-8`,autoFocus:!0}),(0,b.jsx)(`button`,{type:`button`,className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground cursor-pointer`,onClick:()=>h(!m),tabIndex:-1,children:m?(0,b.jsx)(s,{className:`size-3.5`}):(0,b.jsx)(a,{className:`size-3.5`})})]}),(0,b.jsx)(f,{type:m?`text`:`password`,placeholder:`Confirm password`,value:u,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&E()},className:`h-8 text-xs`}),w&&(0,b.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Passwords do not match`}),S&&(0,b.jsx)(`p`,{className:`text-[11px] text-destructive`,children:S}),(0,b.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,b.jsx)(d,{variant:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,onClick:()=>{t(!1),i(``),p(``),C(null)},children:`Cancel`}),(0,b.jsx)(d,{variant:v?`default`:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,disabled:!T,onClick:E,children:g?`...`:v?(0,b.jsx)(r,{className:`size-3.5`}):`Save`})]}),(0,b.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Min 4 characters. You'll stay logged in on this device.`})]})]}):(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Security`}),(0,b.jsxs)(d,{variant:`outline`,size:`sm`,className:`h-8 text-xs gap-1.5 cursor-pointer`,onClick:()=>t(!0),children:[(0,b.jsx)(o,{className:`size-3.5`}),`Change Password`]})]})}function S(){let{deviceName:e,setDeviceName:t,version:n,keepScreenAwake:a,setKeepScreenAwake:o}=u(h(e=>({deviceName:e.deviceName,setDeviceName:e.setDeviceName,version:e.version,keepScreenAwake:e.keepScreenAwake,setKeepScreenAwake:e.setKeepScreenAwake}))),[s]=(0,y.useState)(g),[c,l]=(0,y.useState)(e??``),[S,C]=(0,y.useState)(!1),[w,T]=(0,y.useState)(!1),E=(0,y.useRef)(void 0),D=c.trim()!==(e??``),O=(0,y.useCallback)(async()=>{if(D){C(!0);try{await t(c),T(!0),clearTimeout(E.current),E.current=setTimeout(()=>T(!1),2e3)}finally{C(!1)}}},[c,D,t]);return(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-sm font-medium`,children:`Learn PPM`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Choose your experience and a task. Guidance is saved in this browser.`}),(0,b.jsx)(_,{compact:!0})]}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(p,{htmlFor:`device-name`,children:`Device Name`}),(0,b.jsxs)(`div`,{className:`flex gap-2`,children:[(0,b.jsx)(f,{id:`device-name`,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&O()},placeholder:`My Device`,className:`flex-1`,maxLength:100}),(0,b.jsx)(d,{variant:w?`default`:`outline`,className:`cursor-pointer shrink-0`,disabled:!D||S,onClick:O,children:S?`...`:w?(0,b.jsx)(r,{className:`size-4`}):`Save`})]}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`flex items-center justify-between gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,b.jsx)(i,{className:`size-4 text-muted-foreground shrink-0`}),(0,b.jsxs)(`div`,{className:`min-w-0`,children:[(0,b.jsx)(`p`,{className:`text-sm font-medium`,children:`Keep Screen Awake`}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:s===`insecure`?`Unavailable over plain HTTP — reach PPM through its HTTPS tunnel address to use this.`:s===`unsupported`?`This browser does not support screen wake locks.`:`Stop this device dimming while a chat turn is running.`})]})]}),(0,b.jsx)(m,{checked:a&&s===`ok`,disabled:s!==`ok`,onCheckedChange:o})]}),(0,b.jsx)(v,{}),(0,b.jsx)(x,{}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`space-y-1`,children:[(0,b.jsx)(`h3`,{className:`text-sm font-medium`,children:`About`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),n&&(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground tabular-nums`,children:[`Version `,n]})]})]})}export{S as GeneralSettingsSection};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./createLucideIcon-D9_fdOKS.js";var t=e(`git-commit-horizontal`,[[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}],[`line`,{x1:`3`,x2:`9`,y1:`12`,y2:`12`,key:`1dyftd`}],[`line`,{x1:`15`,x2:`21`,y1:`12`,y2:`12`,key:`oup4p8`}]]);export{t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Br as r,g as i,hr as a,nt as o,o as s,rt as c,xn as l}from"./icons-BwyIKaTT.js";import{t as u}from"./git-commit-horizontal-BPdj2L1i.js";import{r as d}from"./api-client-xQDlhUTu.js";import{n as f}from"./utils-Bslrbb-G.js";import{i as p}from"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./git-repo-store-CKB5fdNP.js";import"./scroll-area-DOlQJGZp.js";import{ii as m,oi as h}from"./index-DLB3j_P0.js";var g=e(t(),1),_=n(),v=[`#2563eb`,`#16a34a`,`#d97706`,`#9333ea`,`#dc2626`,`#0891b2`,`#c026d3`,`#ea580c`];function y(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return v[Math.abs(t)%v.length]}function b({name:e,syncState:t,isHead:n,isTag:a,className:l}){let u=a?`#d97706`:y(e),d=a?r:t===`synced`?o:t===`ahead`?i:t===`behind`?s:t===`remote-only`?o:c,p=a?`Tag: ${e}`:t===`synced`?`${e} — synced with remote`:t===`ahead`?`${e} — ahead of remote`:t===`behind`?`${e} — behind remote`:t===`remote-only`?`${e} — remote only`:`${e} — local only`;return(0,_.jsxs)(`span`,{className:f(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium leading-tight max-w-[220px]`,n&&`ring-1 ring-offset-1 ring-offset-background`,t===`remote-only`&&`opacity-70`,l),style:{borderColor:u,backgroundColor:u+`1A`,color:`var(--text)`,...n?{"--tw-ring-color":u}:{}},title:p,children:[(0,_.jsx)(d,{className:`size-3 shrink-0`,style:{color:u}}),(0,_.jsx)(`span`,{className:`truncate`,children:e})]})}function x(e,t,n,r){let i=[],a=e===r;for(let e of t)e.startsWith(`tag: `)&&i.push({name:e.slice(5),syncState:`synced`,isTag:!0});let o=n.filter(t=>t.commitHash===e),s=o.filter(e=>!e.remote),c=o.filter(e=>e.remote);new Set(s.map(e=>e.name));let l=new Set;for(let e of s){let t=`local-only`;e.remotes.length>0&&(t=e.ahead>0&&e.behind===0?`ahead`:e.behind>0&&e.ahead===0?`behind`:`synced`),i.push({name:e.name,syncState:t,isHead:a&&e.current});for(let t of c){let n=t.name.replace(/^remotes\//,``),r=n.indexOf(`/`);r<0||n.slice(r+1)===e.name&&l.add(t.name)}}for(let e of c){if(l.has(e.name))continue;let t=e.name.replace(/^remotes\//,``);i.push({name:t,syncState:`remote-only`})}return i}var S=100;function C({metadata:e}){let t=e?.projectName??p(h(e=>e.activeProject))?.name,{gitUrl:n}=m(t),[r,i]=(0,g.useState)(null),[o,s]=(0,g.useState)(!1),[c,f]=(0,g.useState)(!0),v=(0,g.useRef)(null),y=(0,g.useCallback)(async(e=0,r=!1)=>{if(t){s(!0);try{let t=await d.get(n(`/graph?max=${S}&skip=${e}`));i(e=>r&&e?{...t,commits:[...e.commits,...t.commits]}:t),f(t.commits.length===S)}catch{}s(!1)}},[t]);(0,g.useEffect)(()=>{y()},[y]);let b=(0,g.useCallback)(()=>{o||!c||!r||y(r.commits.length,!0)},[o,c,r,y]),x=(0,g.useCallback)(e=>{let t=e.currentTarget;t.scrollHeight-t.scrollTop-t.clientHeight<200&&b()},[b]);return t?(0,_.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-border shrink-0`,children:[(0,_.jsx)(u,{className:`size-4 text-text-secondary`}),(0,_.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:`Git Log`}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:r?`${r.commits.length} commits`:``}),(0,_.jsx)(`div`,{className:`flex-1`}),(0,_.jsx)(`button`,{onClick:()=>y(),disabled:o,className:`p-1 rounded text-text-subtle hover:text-text-secondary transition-colors`,title:`Refresh`,children:(0,_.jsx)(a,{className:`size-3.5 ${o?`animate-spin`:``}`})})]}),!r&&o?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,_.jsx)(l,{className:`size-5 animate-spin text-primary`})}):r&&r.commits.length===0?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No commits yet`}):r?(0,_.jsxs)(`div`,{ref:v,className:`flex-1 overflow-y-auto min-h-0`,onScroll:x,children:[r.commits.map(e=>(0,_.jsx)(w,{commit:e,branches:r.branches,head:r.head},e.hash)),o&&(0,_.jsx)(`div`,{className:`flex items-center justify-center py-3`,children:(0,_.jsx)(l,{className:`size-4 animate-spin text-text-subtle`})}),!c&&r.commits.length>0&&(0,_.jsx)(`div`,{className:`text-center text-[10px] text-text-subtle py-3`,children:`End of history`})]}):null]}):(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`Select a project to view git log`})}function w({commit:e,branches:t,head:n}){let r=e.hash===n,i=x(e.hash,e.refs,t,n);return(0,_.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-1.5 border-b border-border/50 hover:bg-surface-elevated transition-colors ${r?`bg-primary/5`:``}`,children:[(0,_.jsx)(`div`,{className:`flex items-center pt-1 shrink-0`,children:(0,_.jsx)(`span`,{className:`size-2.5 rounded-full border-2 ${r?`border-primary bg-primary`:`border-text-subtle bg-transparent`}`})}),(0,_.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[i.length>0&&(0,_.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 mb-0.5`,children:i.map(e=>(0,_.jsx)(b,{...e},`${e.name}-${e.syncState}`))}),(0,_.jsx)(`p`,{className:`text-xs text-text-primary truncate leading-snug`,children:e.subject}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5`,children:[(0,_.jsx)(`span`,{className:`text-[10px] font-mono text-text-subtle`,children:e.abbreviatedHash}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate`,children:e.authorName}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:T(e.authorDate)})]})]})]})}function T(e){let t=new Date(e),n=Date.now()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`now`;if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);return a<30?`${a}d`:t.toLocaleDateString(`en`,{month:`short`,day:`numeric`})}export{C as GitLogPanel};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as e,r as t}from"./api-client-xQDlhUTu.js";import{t as n}from"./react-BZ0kba1-.js";function r(e,t){if(!e)return null;if(e.rootIsRepo)return e.repos[0]??null;if(t){let n=e.repos.find(e=>e.path===t);if(n)return n}return e.repos.length===1?e.repos[0]:null}function i(e,t){if(!e)return null;let n=t.replace(/^\.?\//,``),r=null;for(let t of e.repos)(t.relative===`.`||n===t.relative||n.startsWith(`${t.relative}/`))&&(!r||r.relative===`.`||t.relative.length>r.relative.length)&&(r=t);return r}function a(e,t){if(!e)return;let n=i(e,t);return n?{repo:n,path:l(t,n)??``}:s(e)?{repo:null,path:l(t,null)??``}:null}function o(e,t){return!e||e.rootIsRepo?!1:e.repos.length>1&&!r(e,t)}function s(e){return!!e&&!e.rootIsRepo&&e.repos.length===0}function c(e,t){return!t||t.relative===`.`?e:`${e}${e.includes(`?`)?`&`:`?`}repo=${encodeURIComponent(t.path)}`}function l(e,t){let n=e.replace(/^\.?\//,``);if(!t||t.relative===`.`)return n;let r=`${t.relative}/`;return n===t.relative?``:n.startsWith(r)?n.slice(r.length):null}function u(e,t){let n=e.replace(/^\.?\//,``);return!t||t.relative===`.`?n:n?`${t.relative}/${n}`:t.relative}function d(e,t){if(!t||t.relative===`.`)return e;let n=e=>u(e,t),r=e=>({...e,path:n(e.path),...e.oldPath?{oldPath:n(e.oldPath)}:{}});return{...e,staged:e.staged.map(r),unstaged:e.unstaged.map(r),untracked:e.untracked.map(n)}}function f(e){return e.startsWith(`git-graph.`)}var p=`ppm-git-repo-choice`;function m(){try{let e=localStorage.getItem(p);if(!e)return{};let t=JSON.parse(e);if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&(n[e]=r);return n}catch{return{}}}function h(e){try{localStorage.setItem(p,JSON.stringify(e))}catch{}}var g=new Map,_=n((n,r)=>({discovery:{},chosen:m(),load:async(i,a=!1)=>{if(!a&&r().discovery[i])return;let o=g.get(i);if(o&&!a)return o;let s=(async()=>{try{let r=await t.get(`${e(i)}/git/repos`);n(e=>({discovery:{...e.discovery,[i]:r}}))}catch{}})();return g.set(i,s),s.finally(()=>{g.get(i)===s&&g.delete(i)}),s},choose:(e,t)=>{n(n=>{let r={...n.chosen,[e]:t};return h(r),{chosen:r}})}}));async function v(e,t){await _.getState().load(e);let{discovery:n,chosen:i}=_.getState();return r(n[e],i[e])?.path??t}export{s as a,d as c,a as i,r as l,_ as n,o,f as r,u as s,v as t,c as u};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{A as r,Bt as i,Hn as a,I as o,Kr as s,L as c,M as l,P as u,Ut as d,Wr as f,Yr as p,en as m,gn as h,gt as g,li as _,m as v,n as y,un as b,xn as x,z as S}from"./icons-BwyIKaTT.js";import{k as C,r as w}from"./api-client-xQDlhUTu.js";import{n as T,t as E}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{t as ee}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import{t as D}from"./tab-store-D5I52eLN.js";import{n as O}from"./use-is-mobile-VRV9eZy1.js";import"./git-repo-store-CKB5fdNP.js";import{t as k}from"./button-C9ZXWb3b.js";import{n as A}from"./file-icons-JInFtBVl.js";import{n as te}from"./patch-tab-metadata-C92YkrRX.js";import"./dropdown-menu-BQidk_OJ.js";import{t as j}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{t as M}from"./start-ellipsis-CU8GkxaV.js";import{Ar as N,Dr as ne,Mr as re,Nr as P,Or as F,fr as ie,gr as I,hr as ae,ii as oe,jr as se,kr as L,lr as R,mr as z,pr as B,vi as ce}from"./index-DLB3j_P0.js";import"./libesm-B6LsX5wH.js";import{h as V,i as le,m as ue,p as H,t as U}from"./review-code-B4osj0k1.js";var W=e(t(),1),de=(e,t)=>`${e}\0${t}`,G=e=>({oldStart:e.oldStart,newStart:e.newStart,lines:e.lines}),K=e=>({id:e.id,index:e.index,oldStart:e.oldStart,oldLines:e.oldLines,newStart:e.newStart,newLines:e.newLines,added:e.added,removed:e.removed});function q(e,t){let[n,r]=e===`staged`?[t.newStart,t.newLines]:[t.oldStart,t.oldLines];return{anchor:P(e,t),first:r?n:n+1,last:r?n+r-1:n}}function fe(e,t,n,r){if(!t)return[];let i=e===`staged`?`s`:`u`,a=e===`staged`?`staged`:`open`;if(t.whole||n||!t.blocks.length){let o=n?`deleted`:t.whole??`empty`,s=r&&o===`rename`&&t.blocks.every(e=>e.lines);return[{key:`${i}:whole`,state:a,side:e,hunk:null,whole:o,parts:s&&t.blocks.length?t.blocks.map(e=>G(e)):null,anchor:0,first:1,last:0,added:t.added,removed:t.removed}]}let o=new Map;return t.blocks.map(t=>{let n=(o.get(t.id)??0)+1;return o.set(t.id,n),{key:`${i}:${t.id}${n>1?`#${n}`:``}`,state:a,side:e,hunk:K(t),whole:null,parts:r&&t.lines?[G(t)]:null,...q(e,t),added:t.added,removed:t.removed}})}function pe(e){return e.whole||!e.hunks.length?[{key:`d:${e.recordId}`,state:`discarded`,side:`unstaged`,hunk:null,whole:e.whole??`empty`,parts:null,anchor:0,first:1,last:0,added:e.added,removed:e.removed,recordId:e.recordId}]:e.hunks.map((t,n)=>({key:`d:${e.recordId}:${n}`,state:`discarded`,side:`unstaged`,hunk:K(t),whole:null,parts:[G(t)],...q(`unstaged`,t),added:t.added,removed:t.removed,recordId:e.recordId}))}var J={staged:0,open:1,discarded:2};function me(e){let t=[];if(e.file){let n=e.detail??e.file,r=!!e.detail,i=e.detail?e.detail.staged&&{whole:e.detail.staged.whole,added:e.detail.staged.added,removed:e.detail.staged.removed,blocks:e.detail.staged.hunks}:e.file.staged,a=e.detail?e.detail.unstaged&&{whole:e.detail.unstaged.whole,added:e.detail.unstaged.added,removed:e.detail.unstaged.removed,blocks:e.detail.unstaged.hunks}:e.file.unstaged,o=[...fe(`staged`,i,n.x===`D`,r),...fe(`unstaged`,a,n.y===`D`,r)];for(let n of o){let r=e.pending.get(de(e.path,n.key));r===`discarded`&&he(n,e.discards)||t.push(r?{...n,state:r}:n)}}for(let n of e.discards)t.push(...pe(n));return t.map((e,t)=>({block:e,i:t})).sort((e,t)=>e.block.anchor-t.block.anchor||J[e.block.state]-J[t.block.state]||e.i-t.i).map(({block:e})=>e)}function he(e,t){return e.hunk?t.some(t=>t.hunks.some(t=>t.id===e.hunk.id&&t.oldStart===e.hunk.oldStart)):t.some(e=>e.whole||!e.hunks.length)}function ge(e,t,n){let r={path:e,file:t,blocks:n,open:0,staged:0,discarded:0,added:0,removed:0};for(let e of n)r[e.state===`open`?`open`:e.state===`staged`?`staged`:`discarded`]++,e.state!==`discarded`&&(r.added+=e.added,r.removed+=e.removed);return r}function _e(e){let t=new Map;for(let n of e.discards)t.set(n.path,[...t.get(n.path)??[],n]);let n=[],r=new Set;for(let i of e.files){if(i.conflict)continue;r.add(i.path);let a=me({path:i.path,file:i,detail:e.details.get(i.path)??null,discards:t.get(i.path)??[],pending:e.pending});a.length&&n.push(ge(i.path,i,a))}let i=[...t.keys()].filter(e=>!r.has(e)).sort();for(let r of i)n.push(ge(r,null,me({path:r,file:null,detail:null,discards:t.get(r),pending:e.pending})));return n}function ve(e){return e.open?`changes`:e.staged?`staged`:`discarded`}var ye=[`changes`,`staged`,`discarded`];function be(e){return ye.flatMap(t=>e.filter(e=>ve(e)===t))}function xe(e){let t={files:0,blocks:0,staged:0,discarded:0,added:0,removed:0};for(let n of e)n.open+n.staged&&t.files++,t.blocks+=n.open+n.staged,t.staged+=n.staged,t.discarded+=n.discarded,t.added+=n.added,t.removed+=n.removed;return t}function Se(e){return be(e).flatMap(e=>e.blocks.map(t=>({path:e.path,block:t})))}var Ce=e=>t=>!!e&&t.path===e.path&&t.block.key===e.key;function we(e,t,n){let r=Se(e);if(!r.length)return null;let i=r.findIndex(Ce(t)),a=i<0?r[0]:r[Math.max(0,Math.min(r.length-1,i+n))];return{path:a.path,key:a.block.key}}function Te(e,t){let n=e.flatMap(e=>e.blocks.map(t=>({path:e.path,block:t}))),r=n.findIndex(Ce(t));for(let e=1;e<=n.length;e++){let i=n[(r+e+n.length)%n.length];if(i.block.state===`open`&&!Ce(t)(i))return{path:i.path,key:i.block.key}}return null}function Ee(e){let t=e.blocks.find(e=>e.state===`open`)??e.blocks[0];return t?{path:e.path,key:t.key}:null}function De(e,t){let n=be(e),r=n.findIndex(e=>e.path===t);for(let e=1;e<=n.length;e++){let i=n[(r+e+n.length)%n.length],a=i.blocks.find(e=>e.state===`open`);if(a&&i.path!==t)return{path:i.path,key:a.key}}let i=n[(r+1)%Math.max(n.length,1)];return i&&i.path!==t?Ee(i):null}function Oe(e,t){if(t){let n=e.find(e=>e.path===t.path);if(n?.blocks.some(e=>e.key===t.key))return{path:t.path,key:t.key};if(n?.blocks.length){let e=t.anchor??0,r=[...n.blocks].sort((t,n)=>(t.state===`open`?0:1)-(n.state===`open`?0:1)||Math.abs(t.anchor-e)-Math.abs(n.anchor-e))[0];return{path:t.path,key:r.key}}}let n=Se(e),r=n.find(e=>e.block.state===`open`)??n[0];return r?{path:r.path,key:r.block.key}:null}function ke(e){let t=[],n=0;return e.forEach((r,i)=>{if(!r.whole){let e=r.first-n-1;e>0&&t.push({kind:`gap`,key:`gap:${r.key}`,lines:e}),n=Math.max(n,r.last)}t.push({kind:`block`,block:r,index:i,total:e.length})}),t}function Ae(e){let t=e.oldStart,n=e.newStart;return e.lines.map((e,r)=>({kind:e.kind,text:e.text,old:e.kind===`+`?null:t++,new:e.kind===`-`?null:n++,at:r}))}function je(e){let t=e.parts?.[0];if(e.whole||!t)return`Whole file`;let n=(e,t)=>t>1?`Lines ${e}–${e+t-1}`:`Line ${e}`,r=t.lines.filter(e=>e.kind!==`+`).length,i=t.lines.filter(e=>e.kind!==`-`).length;return e.state===`discarded`?r?n(t.oldStart,r):`Whole file`:i?n(t.newStart,i):`${n(t.oldStart,r)}, removed`}function Me(e){return(e.parts?.[0]?.lines??[]).flatMap((e,t)=>e.kind===` `?[]:[t])}function Ne(e,t){let n=Me(e).filter(e=>t.has(e));return n.length===Me(e).length?null:n}function Pe(e,t){let n=/^[us]:([^#]+)(?:#(\d+))?$/.exec(t);if(!n)return null;let r=Number(n[2]??1);for(let t of e)if(t.id===n[1]&&--r===0)return t.index;return null}function Fe(e){let t=e=>e?`${e.whole??``}:${e.blocks.map(e=>e.id).join(`,`)}`:`-`;return`${e.x}${e.y}|${e.oldPath??``}|${t(e.staged)}|${t(e.unstaged)}`}var Ie=7e3,Y=(e,t)=>`${e} ${e===1?t:`${t}s`}`,Le=e=>e instanceof Error?e.message:String(e);function Re(e,t){let n=oe(e),r=n.gitUrl,{changes:i,error:a,refresh:o}=ne(e),s=(0,W.useMemo)(()=>i?.files??[],[i]),[c,l]=(0,W.useState)(new Map),[u,d]=(0,W.useState)([]),[f,p]=(0,W.useState)(new Map),[m,h]=(0,W.useState)(null),[g,_]=(0,W.useState)(null),[v,y]=(0,W.useState)(null),[b,x]=(0,W.useState)(null),S=(0,W.useRef)(c),T=e=>{let t=e(S.current);S.current=t,l(t)},E=(0,W.useRef)(u),ee=e=>{let t=e(E.current);E.current=t,d(t)},D=(0,W.useRef)(i);i&&(D.current=i);let O=n.repo?.path,k=(0,W.useRef)(O);(0,W.useEffect)(()=>{k.current!==O&&(k.current=O,ee(()=>[]),x(null))},[O]);let A=(0,W.useMemo)(()=>_e({files:s,details:c,discards:u,pending:f}),[s,c,u,f]),te=(0,W.useMemo)(()=>s.filter(e=>e.conflict),[s]),j=(0,W.useMemo)(()=>xe(A),[A]),M=(0,W.useMemo)(()=>({files:j.files,filesStaged:A.filter(e=>e.staged).length,blocks:j.blocks,blocksStaged:j.staged,conflicts:te.length}),[A,j,te]),P=(0,W.useMemo)(()=>Oe(A,m),[A,m]),F=(0,W.useMemo)(()=>{let e=P&&A.find(e=>e.path===P.path),t=e?e.blocks.findIndex(e=>e.key===P.key):-1;return e&&t>=0?{review:e,block:e.blocks[t],index:t}:null},[A,P]),ie=(0,W.useMemo)(()=>F?ke(F.review.blocks):[],[F]);(0,W.useEffect)(()=>{if(!P||m&&P.path===m.path&&P.key===m.key)return;let e=F?.block;h({...P,anchor:e?.anchor})},[P,m,F]);let I=g&&P&&g.path===P.path&&g.key===P.key?g.lines:null;(0,W.useEffect)(()=>{g&&!I&&_(null)},[g,I]);let ae=(0,W.useRef)(void 0);(0,W.useEffect)(()=>{if(!t?.path||t.at===ae.current||!i)return;let e=A.find(e=>e.path===t.path);ae.current=t.at;let n=e&&Ee(e);n&&h(n)},[t?.path,t?.at,A,i]);let L=(0,W.useCallback)(async e=>{let t=`?path=${encodeURIComponent(e.path)}${e.oldPath?`&oldPath=${encodeURIComponent(e.oldPath)}`:``}`;return w.get(r(`/changes/file${t}`))},[r]),R=(0,W.useRef)(new Map),z=(0,W.useRef)(new Set),B=(0,W.useMemo)(()=>{let e=new Set;P&&e.add(P.path);let t=Te(A,P)?.path;t&&e.add(t);let n=De(A,P?.path??null)?.path;return n&&e.add(n),[...e].join(`\0`)},[A,P]);(0,W.useEffect)(()=>{let e=B?B.split(`\0`):[],t=new Map(s.map(e=>[e.path,e])),n=[...S.current.keys()].filter(n=>{let r=t.get(n);return!r||R.current.get(n)!==Fe(r)&&!e.includes(n)});if(n.length){for(let e of n)R.current.delete(e);T(e=>{let t=new Map(e);for(let e of n)t.delete(e);return t})}for(let n of e){let e=t.get(n);if(!e||e.conflict||z.current.has(n))continue;let r=Fe(e);R.current.get(n)!==r&&(R.current.set(n,r),L(e).then(e=>{R.current.get(n)!==r||z.current.has(n)||T(t=>new Map(t).set(n,e))},()=>{R.current.get(n)===r&&R.current.delete(n)}))}},[s,B,L]);let ce=(0,W.useRef)(0),V=(0,W.useCallback)((e,t)=>{x({id:++ce.current,text:e,undo:t})},[]);(0,W.useEffect)(()=>{if(!b)return;let e=setTimeout(()=>x(e=>e?.id===b.id?null:e),Ie);return()=>clearTimeout(e)},[b]);let le=(0,W.useCallback)(()=>x(null),[]),ue=(0,W.useRef)(Promise.resolve());function H(e,t,n,r){let i=async()=>{y(e);for(let e of t)z.current.add(e);try{return await n()}catch(e){return C.error(r,{description:Le(e)}),null}finally{for(let e of t)z.current.delete(e);y(null)}},a=ue.current.then(i,i);return ue.current=a,a}async function U(e,t){let n=new Map((D.current?.files??[]).map(e=>[e.path,e])),[r,...i]=await Promise.all([o(),...e.map(e=>L(n.get(e)??{path:e}).catch(()=>null))]);r&&(D.current=r);let a=new Map((D.current?.files??[]).map(e=>[e.path,e]));T(t=>{let n=new Map(t);return e.forEach((e,t)=>{let r=i[t],o=a.get(e);r&&o?(n.set(e,r),R.current.set(e,Fe(o))):(n.delete(e),R.current.delete(e))}),n}),t?.()}let G=(e,t)=>{let n=A.find(t=>t.path===e);return{review:n,block:n?.blocks.find(e=>e.key===t)}};function K(e,t,n,r){let i=t.map(t=>de(e,t)),a=e=>{let t=new Map(e);for(let e of i)t.set(e,n);return t};if(p(a),r&&P&&P.path===e&&t.includes(P.key)){let e=Te(_e({files:s,details:c,discards:u,pending:a(f)}),P);e&&h(e)}return()=>p(e=>{let t=new Map(e);for(let e of i)t.delete(e);return t})}async function q(e,t){let n=S.current.get(e);n||=await L(D.current?.files.find(t=>t.path===e)??{path:e});let r=Pe((t.side===`staged`?n.staged?.hunks:n.unstaged?.hunks)??[],t.key);if(r===null)throw Error(`This block changed since it was shown. Look at it again, then answer.`);return r}function fe(e,t){let n=S.current.get(e)?.unstaged?.hunks??[];return t.flatMap(e=>{let t=e.hunk?Pe(n,e.key):null,r=t===null?void 0:n.find(e=>e.index===t);return r?[r]:[]})}let pe=e=>{e&&ee(t=>[...t,e])},J=e=>{let t=E.current.find(t=>t.recordId===e);t&&(x(null),H(`undo`,[t.path],async()=>{await w.post(r(`/discard/undo`),{id:e});let n=t.hunks[0];await U([t.path],()=>{ee(t=>t.filter(t=>t.recordId!==e)),h({path:t.path,key:n?`u:${n.id}`:`u:whole`,anchor:n?.oldStart??0})}),V(`Restored ${t.hunks.length>1?Y(t.hunks.length,`block`):`the block`} in ${N(t.path)[1]}`)},`Could not undo the discard`))},me=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`open`)return;let a=K(e,[t],`staged`,!0);H(`stage`,[e],async()=>{try{i.hunk?await w.post(r(`/stage-hunks`),{path:e,hunks:[{hunk:await q(e,i),id:i.hunk.id}]}):await w.post(r(`/stage`),{files:[e]})}finally{await U([e],a)}},`Could not stage`)},he=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`staged`)return;let a=n.file;h({path:e,key:t,anchor:i.anchor});let o=K(e,[t],`open`,!1);H(`unstage`,[e],async()=>{try{i.hunk?await w.post(r(`/unstage-hunks`),{path:e,hunks:[{hunk:await q(e,i),id:i.hunk.id}]}):await w.post(r(`/unstage`),{files:re(a)})}finally{await U([e],o)}},`Could not unstage`)},ge=(e,t)=>{let{review:n,block:i}=G(e,t);if(!n?.file||!i||i.state!==`open`)return;let a=n.file,o=n.blocks.indexOf(i)+1,s=n.blocks.length,c=K(e,[t],`discarded`,!0);H(`discard`,[e],async()=>{try{let t;if(!i.hunk||a.untracked){let n=fe(e,[i]),a=await w.post(r(`/discard`),{files:[e]});t=a.undo?.paths.length?{path:e,recordId:a.undo.id,hunks:n,whole:n.length?null:i.whole,added:i.added,removed:i.removed}:null}else{let n=await q(e,i),a=S.current.get(e)?.unstaged?.hunks.find(e=>e.index===n),o=await w.post(r(`/discard-hunks`),{path:e,hunks:[{hunk:n,id:i.hunk.id}]});t=o.undo&&{path:e,recordId:o.undo.id,hunks:a?[a]:[],whole:null,added:i.added,removed:i.removed}}pe(t);let n=N(e)[1];t?V(`Discarded block ${o} of ${s} in ${n}`,()=>J(t.recordId)):C.warning(`Discarded block ${o} of ${n}`,{description:`No copy of it could be kept, so this cannot be undone.`})}finally{await U([e],c)}},`Could not discard`)},ve=e=>{let t=A.find(t=>t.path===e)?.blocks.filter(e=>e.state===`open`)??[];if(!t.length)return;let n=K(e,t.map(e=>e.key),`staged`,!1);if(P?.path===e){let t=De(A,e);t&&h(t)}H(`stage`,[e],async()=>{try{await w.post(r(`/stage`),{files:[e]})}finally{await U([e],n)}},`Could not stage`)},ye=e=>{let t=A.find(t=>t.path===e),n=t?.blocks.filter(e=>e.state===`open`)??[];if(!t?.file||!n.length)return;let i=K(e,n.map(e=>e.key),`discarded`,!0);H(`discard`,[e],async()=>{try{let t=fe(e,n),i=t.length===n.length?null:n.find(e=>e.whole)?.whole??`empty`,a=n.reduce((e,t)=>e+t.added,0),o=n.reduce((e,t)=>e+t.removed,0),s=await w.post(r(`/discard`),{files:[e]}),c=s.undo?.paths.length?{path:e,recordId:s.undo.id,hunks:i?[]:t,whole:i,added:a,removed:o}:null;pe(c);let l=N(e)[1];c?V(`Discarded ${Y(n.length,`block`)} in ${l}`,()=>J(c.recordId)):C.warning(`Discarded the changes to ${l}`,{description:`No copy of them could be kept, so this cannot be undone.`})}finally{await U([e],i)}},`Could not discard`)},be=()=>{let e=A.filter(e=>e.file&&e.open);if(!e.length)return;let t=e.map(e=>K(e.path,e.blocks.filter(e=>e.state===`open`).map(e=>e.key),`staged`,!1));H(`stage`,e.map(e=>e.path),async()=>{try{await w.post(r(`/stage`),{files:e.map(e=>e.path)}),V(`Staged ${Y(e.length,`file`)}`)}finally{await U(P?[P.path]:[],()=>t.forEach(e=>e()))}},`Could not stage`)},Se=e=>{if(!F)return;let t=F.review.path,n=e?F.review.blocks.find(t=>t.key===e):F.block;!n||n.state!==`open`||!n.hunk||!n.parts||(h({path:t,key:n.key,anchor:n.anchor}),_({path:t,key:n.key,lines:new Set}))},Ce=e=>{_(t=>{if(!t)return t;let n=new Set(t.lines);return n.delete(e)||n.add(e),{...t,lines:n}})},Ae=e=>_(t=>t&&e?{...t,lines:new Set(e)}:null),je=()=>{let e=F;if(!e||!I||!e.block.hunk)return;let t=Ne(e.block,I);if(t?.length===0)return;let{review:n,block:i}=e,a=t?t.length:I.size;H(`stage-lines`,[n.path],async()=>{try{let e=await q(n.path,i);await w.post(r(`/stage-hunks`),{path:n.path,hunks:[{hunk:e,id:i.hunk.id,...t?{lines:t}:{}}]}),V(t?`Staged ${Y(a,`line`)} — the rest of the block stays open`:`Staged the block`)}finally{await U([n.path],()=>{_(null),h({path:n.path,key:i.key,anchor:i.anchor})})}},`Could not stage those lines`)},Me=(0,W.useCallback)((e,t)=>h({path:e,key:t}),[]),Re=e=>{let t=A.find(t=>t.path===e),n=t&&Ee(t);n&&h(n)},X=e=>{let t=we(A,P,e);t&&h(t)},ze=()=>{let e=De(A,P?.path??null);e&&h(e)},Be=async(e=D.current?.lastCommit?.hash)=>{await H(`undo-commit`,[],async()=>{await w.post(r(`/commit/undo`),{hash:e}),await U(P?[P.path]:[]),V(`Commit undone — its changes are staged again`)},`Could not undo the commit`)};return{changes:i,error:a,reviews:A,conflicts:te,totals:j,commitTotals:M,focus:P,focused:F,items:ie,pick:I,busy:v,toast:b,dismissToast:le,focusBlock:Me,focusFile:Re,step:X,nextFile:ze,stage:me,discard:ge,unstage:he,undoDiscard:J,stageFile:ve,discardFile:ye,stageAll:be,startPick:Se,togglePickLine:Ce,setPick:Ae,stagePicked:je,commit:async(e,t)=>{let n=D.current,i=M.filesStaged,a=await H(`commit`,[],async()=>{let{hash:n}=await w.post(r(`/commit`),{message:e,amend:!!t.amend,signoff:!!t.signoff});return await U(P?[P.path]:[]),n},t.amend?`Could not amend the commit`:`Could not commit`);if(!a)return!1;let s=a.slice(0,7);if(t.amend?V(`Amended ${s}`):V(`Committed ${s} · ${Y(i,`file`)}`,()=>void Be(a)),t.push&&n){let e=se(n.branch)===`publish`;await H(`push`,[],async()=>(await w.post(r(e?`/publish`:`/push`),{}),await o(),!0),e?`Publish failed`:`Push failed`)&&V(e?`Published ${n.branch.head??`the branch`}`:`Pushed ${s} to ${n.branch.upstream??`the remote`}`)}return!0},undoCommit:Be}}var X=n(),ze=(e,t)=>`${e} ${e===1?t:`${t}s`}`;function Be({lines:e,compact:t}){return(0,X.jsxs)(`div`,{className:T(`my-0.5 flex h-7 items-center gap-2 font-sans text-[11.5px] font-medium text-text-3`,t?`pl-[38px]`:`pl-[54px]`),children:[(0,X.jsx)(`span`,{className:`h-px w-3 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`}),ze(e,`unchanged line`),(0,X.jsx)(`span`,{className:T(`h-px flex-1 bg-[repeating-linear-gradient(90deg,var(--border)_0_4px,transparent_4px_8px)]`,t?`mr-2.5`:`mr-3.5`)})]})}var Z=`inline-flex h-6 items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 text-[11.5px] font-medium text-text-2 hover:bg-surface-hover hover:text-text disabled:pointer-events-none disabled:opacity-45`,Ve=`inline-flex h-7 items-center gap-1.5 whitespace-nowrap rounded-[7px] border pl-2.5 text-[12.5px] font-medium transition-colors disabled:pointer-events-none disabled:opacity-45`,He=(0,W.memo)(function({name:e,oldPath:t,block:n,index:i,total:a,focused:o,pick:c,compact:u,lang:d,busy:m,actions:h}){let g=h.current,_=je(n),v=(0,X.jsx)(z,{added:n.added,removed:n.removed}),y=n.state===`staged`,b=n.state===`discarded`,S=!!c&&o&&n.state===`open`,C=S?Me(n):[],w;return w=b?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[5px] font-semibold text-error`,children:[(0,X.jsx)(s,{className:`size-3.5`}),`Discarded`]}),(0,X.jsx)(`span`,{children:_}),(0,X.jsx)(`span`,{className:`flex-1`}),!u&&n.recordId&&(0,X.jsxs)(`button`,{type:`button`,className:Z,disabled:m,onClick:()=>g.undoDiscard(n.recordId),children:[(0,X.jsx)(p,{className:`size-3.5`}),`Undo`]})]}):y?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[5px] font-semibold text-primary`,children:[(0,X.jsx)(l,{className:`size-3.5`}),`Staged`]}),(0,X.jsx)(`span`,{children:_}),v,(0,X.jsx)(`span`,{className:`flex-1`}),!u&&(0,X.jsxs)(`button`,{type:`button`,className:Z,onClick:()=>g.unstage(n.key),children:[(0,X.jsx)(p,{className:`size-3.5`}),`Unstage`]})]}):S?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`b`,{className:`font-semibold text-text-2`,children:`Pick lines`}),(0,X.jsxs)(`span`,{children:[c.size,` of `,C.length,` selected`]}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsx)(`button`,{type:`button`,className:Z,onClick:()=>g.setPick(C),children:`All`}),(0,X.jsx)(`button`,{type:`button`,className:Z,onClick:()=>g.setPick([]),children:`None`}),(0,X.jsxs)(`button`,{type:`button`,className:T(Ve,`border-border bg-bg pr-1.5 text-text hover:border-text/30`),onClick:()=>g.setPick(null),children:[`Cancel`,(0,X.jsx)(U,{children:`Esc`})]}),(0,X.jsxs)(`button`,{type:`button`,className:T(Ve,`border-transparent bg-primary pr-1.5 text-primary-foreground hover:bg-primary/90`),disabled:!c.size,onClick:g.stagePicked,children:[m?(0,X.jsx)(x,{className:`size-3.5 animate-spin`}):(0,X.jsx)(r,{className:`size-3.5`}),`Stage `,ze(c.size,`line`),(0,X.jsx)(U,{className:`border-white/30 bg-white/15 text-inherit`,children:`Y`})]})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`span`,{children:[(0,X.jsxs)(`b`,{className:`font-semibold text-text-2`,children:[`Block `,i+1]}),` of `,a]}),(0,X.jsx)(`span`,{children:_}),v,(0,X.jsx)(`span`,{className:`flex-1`}),!u&&(0,X.jsxs)(X.Fragment,{children:[n.hunk&&n.parts&&(0,X.jsxs)(`button`,{type:`button`,className:Z,title:`Stage single lines (L)`,onClick:()=>g.startPick(n.key),children:[(0,X.jsx)(f,{className:`size-3.5`}),`Lines…`]}),(0,X.jsxs)(`button`,{type:`button`,title:`Discard this block (N)`,className:T(Ve,o?`pr-1.5`:`pr-2.5`,`border-border bg-bg text-text hover:border-error/50 hover:text-error`),onClick:()=>g.discard(n.key),children:[(0,X.jsx)(s,{className:`size-3.5`}),`Discard`,o&&(0,X.jsx)(U,{children:`N`})]}),(0,X.jsxs)(`button`,{type:`button`,title:`Stage this block (Y)`,className:T(Ve,o?`pr-1.5`:`pr-2.5`,`border-transparent bg-primary text-primary-foreground hover:bg-primary/90`),onClick:()=>g.stage(n.key),children:[(0,X.jsx)(r,{className:`size-3.5`}),`Stage`,o&&(0,X.jsx)(U,{className:`border-white/30 bg-white/15 text-inherit`,children:`Y`})]})]})]}),(0,X.jsxs)(`div`,{"data-block-key":n.key,"data-state":n.state,"data-focused":o||void 0,onClick:e=>{!o&&!e.target.closest(`button`)&&g.focus(n.key)},className:T(`relative rounded-lg border bg-bg`,u?`mx-2 my-1.5`:`mr-3 ml-2 my-1.5`,y?`border-dashed border-primary/45`:b?`border-dashed border-border-soft`:`border-border-soft`,o?`border-primary/60 shadow-[0_0_0_3px_var(--accent-wash)]`:!u&&`cursor-pointer`),children:[(0,X.jsx)(`div`,{className:T(`relative flex flex-wrap items-center gap-x-2 gap-y-1.5 rounded-t-[7px] py-1 pr-1.5 pl-3 font-sans text-xs leading-[1.3] text-text-3`,y||b?`min-h-8`:`min-h-[38px] border-b border-border-soft`,!y&&!b&&(o?`bg-[color-mix(in_srgb,var(--accent)_7%,var(--panel))]`:`bg-panel`)),children:w}),(0,X.jsx)(`div`,{className:T(`overflow-hidden rounded-b-[7px] py-0.5`,y&&`shadow-[inset_2px_0_0_var(--accent)]`,b&&`shadow-[inset_2px_0_0_color-mix(in_srgb,var(--error)_60%,transparent)]`),children:(0,X.jsx)(Ue,{name:e,oldPath:t,block:n,compact:u,lang:d,pick:S?c:null,onToggle:g.togglePickLine})})]})});function Ue({name:e,oldPath:t,block:n,compact:r,lang:i,pick:a,onToggle:o}){if(n.whole)return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(We,{name:e,oldPath:t,block:n}),n.parts?.map((e,t)=>(0,X.jsx)(`div`,{className:T(t>0&&`mt-1 border-t border-dashed border-border-soft pt-1`),children:(0,X.jsx)(Ge,{part:e,state:n.state,compact:r,lang:i,pick:null,onToggle:o})},t))]});let s=n.parts?.[0];return s?(0,X.jsx)(Ge,{part:s,state:n.state,compact:r,lang:i,pick:a,onToggle:o}):(0,X.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2.5 font-sans text-xs text-text-3`,children:[(0,X.jsx)(x,{className:`size-3.5 animate-spin`}),`Loading the lines…`]})}function We({name:e,oldPath:t,block:n}){let r=(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:e}),i=n.removed?`all ${ze(n.removed,`line`)}`:`an empty file`,a;if(n.state===`discarded`)a=n.whole===`deleted`?(0,X.jsxs)(X.Fragment,{children:[r,` is back. Undo deletes it again.`]}):(0,X.jsxs)(X.Fragment,{children:[`The changes to `,r,` are discarded. Undo puts them back.`]});else switch(n.whole){case`deleted`:a=n.state===`staged`?(0,X.jsxs)(X.Fragment,{children:[r,` is deleted — `,i,`. The next commit deletes it.`]}):(0,X.jsxs)(X.Fragment,{children:[r,` is deleted — `,i,`. Stage it to delete the file in the next commit, or discard to bring it back.`]});break;case`binary`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is a binary file: git cannot show it as lines, so it is staged or discarded whole.`]});break;case`large`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is too big to split into blocks, so it is staged or discarded whole.`]});break;case`rename`:a=(0,X.jsxs)(X.Fragment,{children:[`Renamed from `,(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:t??`another path`}),`. git takes a rename as one change`,n.parts?.length?`, edits included`:``,`.`]});break;case`submodule`:a=(0,X.jsxs)(X.Fragment,{children:[r,` is a submodule: what changed is the commit it points to.`]});break;case`mode`:a=(0,X.jsxs)(X.Fragment,{children:[`Only the file mode of `,r,` changed.`]});break;case`type`:a=(0,X.jsxs)(X.Fragment,{children:[r,` changed kind — a file became a link, or the other way round.`]});break;case`unread`:a=(0,X.jsxs)(X.Fragment,{children:[r,` was not read: a new folder, or past the number of new files PPM lists.`]});break;default:a=(0,X.jsxs)(X.Fragment,{children:[r,` is an empty file.`]})}let o=n.whole===`deleted`||n.state===`discarded`?s:null;return(0,X.jsxs)(`div`,{className:`flex items-center gap-3 px-3.5 py-3 font-sans text-[13px] leading-normal text-text-2`,children:[o&&(0,X.jsx)(o,{className:T(`size-5 shrink-0`,n.state===`discarded`?`text-text-3`:`text-error`)}),(0,X.jsx)(`span`,{children:a})]})}function Ge({part:e,state:t,compact:n,lang:r,pick:i,onToggle:a}){let o=(0,W.useMemo)(()=>Ae(e),[e]),[s,c]=V([(0,W.useMemo)(()=>o.filter(e=>e.kind!==`+`).map(e=>e.text).join(`
|
|
2
|
+
`),[o]),(0,W.useMemo)(()=>o.filter(e=>e.kind!==`-`).map(e=>e.text).join(`
|
|
3
|
+
`),[o])],r),l=(0,W.useMemo)(()=>le(o.map(e=>({k:e.kind,text:e.text,o:e.old,n:e.new}))),[o]),u=(0,W.useMemo)(()=>{let e=0,t=0,n=[];return o.forEach((r,i)=>{let a=r.kind===`+`?void 0:s?.[e],o=r.kind===`-`?void 0:c?.[t];r.kind!==`+`&&e++,r.kind!==`-`&&t++,n.push({row:r,tokens:r.kind===`-`?a:o,i})}),n},[o,s,c]),d=n?`grid-cols-[30px_30px_16px_minmax(0,1fr)]`:`grid-cols-[44px_44px_22px_minmax(0,1fr)]`,f=t===`discarded`,p=t===`staged`?{add:`bg-diff-added/60`,del:`bg-diff-removed/60`}:{add:`bg-diff-added`,del:`bg-diff-removed`};return(0,X.jsx)(X.Fragment,{children:u.map(({row:e,tokens:t,i:r})=>{let o=e.kind!==` `,s=!!i&&o&&i.has(e.at),c=!!i&&o&&!s,u=e.kind===`+`&&!c,m=e.kind===`-`&&!c,h=T(`select-none text-right text-[0.92em] text-text-3`,n?`pr-[5px]`:`pr-2`);return(0,X.jsxs)(`div`,{className:T(`grid`,d,u&&p.add,m&&p.del,i&&o&&`cursor-pointer`),onClick:i&&o?()=>a(e.at):void 0,role:i&&o?`checkbox`:void 0,"aria-checked":i&&o?s:void 0,children:[(0,X.jsx)(`span`,{className:h,children:e.old??``}),(0,X.jsx)(`span`,{className:h,children:e.new??``}),(0,X.jsx)(`span`,{className:T(`grid h-[1lh] select-none place-items-center self-start`,e.kind===`+`?`text-success`:e.kind===`-`?`text-error`:`text-text-3`),children:i&&o?(0,X.jsx)(ie,{state:s?`all`:`none`,className:`size-3.5 md:size-3.5 rounded-[3.5px] md:rounded-[3.5px]`}):e.kind===`+`?`+`:e.kind===`-`?`−`:``}),(0,X.jsx)(`span`,{className:T(`min-w-0 whitespace-pre-wrap [overflow-wrap:anywhere]`,n?`pr-2.5`:`pr-3.5`,c&&`opacity-55`,f&&`opacity-70`),children:(0,X.jsx)(H,{text:e.text,tokens:t,span:l?.[r]??null,spanClass:T(`rounded-[2px]`,e.kind===`+`?`bg-diff-added-word`:`bg-diff-removed-word`)})})]},r)})})}var Q=(e,t)=>`${e} ${e===1?t:`${t}s`}`,Ke=6;function qe({blocks:e}){let t=e.filter(e=>e.state===`staged`).length;return(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-[3px]`,title:`${t} of ${Q(e.filter(e=>e.state!==`discarded`).length,`block`)} staged`,children:[e.slice(0,Ke).map(e=>(0,X.jsx)(`i`,{className:T(`relative size-[7px] rounded-full border-[1.5px]`,e.state===`staged`?`border-primary bg-primary`:e.state===`discarded`?`border-error/70`:`border-text-3/85`,e.state===`discarded`&&`after:absolute after:top-[1.5px] after:-right-px after:-left-px after:h-[1.5px] after:-rotate-45 after:bg-error/80`)},e.key)),e.length>Ke&&(0,X.jsxs)(`span`,{className:`font-mono text-[10px] leading-none text-text-3`,children:[`+`,e.length-Ke]})]})}var Je=40;function Ye({reviews:e}){let t=be(e).flatMap(e=>e.blocks);if(!t.length)return null;if(t.length>Je){let e=t.filter(e=>e.state===`staged`).length,n=t.filter(e=>e.state===`discarded`).length;return(0,X.jsxs)(`span`,{"aria-hidden":!0,className:`flex h-1.5 w-40 overflow-hidden rounded-[3px] bg-text/13`,children:[(0,X.jsx)(`i`,{className:`bg-primary`,style:{width:`${e/t.length*100}%`}}),(0,X.jsx)(`i`,{className:`bg-error/60`,style:{width:`${n/t.length*100}%`}})]})}return(0,X.jsx)(`span`,{"aria-hidden":!0,className:`inline-flex flex-wrap gap-0.5`,children:t.map((e,t)=>(0,X.jsx)(`i`,{className:T(`h-1.5 w-2.5 rounded-[3px]`,e.state===`staged`?`bg-primary`:e.state===`discarded`?`bg-error/60`:`bg-text/13`)},t))})}var Xe={changes:`Changes`,staged:`Staged`,discarded:`Discarded`};function Ze({review:e,current:t,mobile:n,onPick:r}){let[i,a]=N(e.path),o=ve(e),s=e.file?.x===`D`||e.file?.y===`D`;return(0,X.jsxs)(`button`,{type:`button`,title:e.path,"aria-current":t?`true`:void 0,"data-testid":`git-review-file`,onClick:()=>r(e.path),className:T(`grid w-full items-center text-left text-text transition-colors hover:bg-surface-hover`,n?`min-h-14 grid-cols-[18px_minmax(0,1fr)_auto] gap-3 px-4 py-1.5`:`min-h-[42px] grid-cols-[16px_minmax(0,1fr)_auto] gap-[9px] px-3 py-1`,t&&`bg-accent-wash shadow-[inset_2px_0_0_var(--accent)] hover:bg-accent-wash`),children:[(0,X.jsx)(A,{name:a,className:n?`size-[18px]`:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,X.jsx)(`span`,{className:T(`flex min-w-0`,n?`text-sm leading-[19px]`:`text-[13px] leading-[17px]`,o===`changes`?`font-medium`:`text-text-2`,s&&`line-through`),children:(0,X.jsx)(M,{children:a})}),i&&(0,X.jsx)(`span`,{className:T(`flex min-w-0 text-text-3`,n?`text-xs leading-4`:`text-[11px] leading-[15px]`),children:(0,X.jsx)(M,{children:i})})]}),(0,X.jsxs)(`span`,{className:`flex flex-col items-end gap-1`,children:[(0,X.jsx)(qe,{blocks:e.blocks}),o===`staged`?(0,X.jsx)(`span`,{className:`whitespace-nowrap text-[10.5px] font-semibold text-primary`,children:`Staged`}):o===`discarded`?(0,X.jsx)(`span`,{className:`whitespace-nowrap text-[10.5px] font-semibold text-error`,children:`Discarded`}):(0,X.jsxs)(`small`,{className:`font-mono text-[10.5px] font-medium leading-none text-text-3`,children:[e.open,` left`]})]})]})}function Qe({reviews:e,conflicts:t,current:n,mobile:r,onPick:i,onResolve:a}){let o=T(`flex items-center gap-1.5 text-[10.5px] font-semibold uppercase tracking-[.07em] text-text-3`,r?`h-10 px-4`:`h-8 px-3`),s=[`changes`,`staged`,`discarded`].map(t=>[t,e.filter(e=>ve(e)===t)]);return(0,X.jsxs)(X.Fragment,{children:[t.length>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:T(o,`text-error`),children:[(0,X.jsx)(y,{className:`size-3.5`}),`Conflicts`,(0,X.jsx)(B,{count:t.length})]}),t.map(e=>{let[t,n]=N(e.path);return(0,X.jsxs)(`button`,{type:`button`,title:`Resolve ${e.path}`,onClick:()=>a(e),className:T(`grid w-full items-center text-left hover:bg-surface-hover`,r?`min-h-14 grid-cols-[18px_minmax(0,1fr)_auto] gap-3 px-4`:`min-h-[42px] grid-cols-[16px_minmax(0,1fr)_auto] gap-[9px] px-3`),children:[(0,X.jsx)(A,{name:n,className:r?`size-[18px]`:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-col`,children:[(0,X.jsx)(`span`,{className:T(`flex min-w-0 font-medium`,r?`text-sm`:`text-[13px]`),children:(0,X.jsx)(M,{children:n})}),t&&(0,X.jsx)(`span`,{className:T(`flex min-w-0 text-text-3`,r?`text-xs`:`text-[11px]`),children:(0,X.jsx)(M,{children:t})})]}),(0,X.jsx)(`span`,{className:`text-xs font-medium text-primary`,children:`Resolve`})]},e.path)})]}),s.map(([e,t])=>t.length>0&&(0,X.jsxs)(`div`,{children:[(0,X.jsxs)(`div`,{className:o,children:[Xe[e],(0,X.jsx)(B,{count:t.length})]}),t.map(e=>(0,X.jsx)(Ze,{review:e,current:e.path===n,mobile:r,onPick:i},e.path))]},e))]})}function $e({toast:e,mobile:t,onClose:n}){return(0,X.jsxs)(`div`,{role:`status`,"data-testid":`git-review-toast`,className:T(`absolute z-30 flex items-center border border-border bg-panel-2 shadow-[var(--shadow-float)]`,t?`inset-x-3 bottom-3 gap-2 rounded-xl py-1 pr-1 pl-3.5 text-[13.5px]`:`bottom-3 left-1/2 max-w-[calc(100%-24px)] -translate-x-1/2 gap-3 rounded-[10px] py-[5px] pr-[5px] pl-3.5 text-[12.5px]`),children:[(0,X.jsx)(l,{className:`size-4 shrink-0 text-primary`}),(0,X.jsx)(`span`,{className:T(`min-w-0`,t?`flex-1`:`truncate whitespace-nowrap`),children:e.text}),e.undo&&(0,X.jsxs)(k,{variant:`ghost`,size:t?`sm`:`xs`,className:T(`text-primary hover:text-primary`,t&&`h-11`),onClick:()=>{n(),e.undo?.()},children:[(0,X.jsx)(p,{}),`Undo`]}),(0,X.jsx)(`button`,{type:`button`,"aria-label":`Dismiss`,onClick:n,className:T(`grid shrink-0 place-items-center rounded-md text-text-3 hover:bg-surface-hover hover:text-text`,t?`size-11`:`size-6`),children:(0,X.jsx)(_,{className:`size-3.5`})})]})}function et({conflicts:e,onGraph:t}){return(0,X.jsx)(`div`,{className:`grid flex-1 place-items-center p-8 text-center`,children:(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`div`,{className:`mx-auto mb-3.5 grid size-[52px] place-items-center rounded-full bg-accent-wash text-primary`,children:(0,X.jsx)(l,{className:`size-5`})}),(0,X.jsx)(`h4`,{className:`m-0 mb-1.5 text-[15px] font-semibold`,children:e?`${Q(e,`conflict`)} to resolve`:`Nothing left to review`}),(0,X.jsx)(`p`,{className:`mx-auto mb-4 max-w-[40ch] text-[13px] text-text-2`,children:e?`A conflicted file has no blocks to review until it is resolved: open it from the list.`:`The working tree matches the last commit. What you commit here shows up at the top of the Git Graph.`}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,className:`max-md:h-11`,onClick:t,children:[(0,X.jsx)(m,{}),`Open Git Graph`]})]})})}var tt=`inline-grid size-7 shrink-0 place-items-center rounded-md text-text-3 hover:bg-surface-hover hover:text-text aria-pressed:bg-surface-hover aria-pressed:text-text`,nt=typeof navigator<`u`&&/Mac|iPhone|iPad/.test(navigator.userAgent);function rt({view:e}){let{review:t}=e,{focused:n,totals:a}=t,o=(0,W.useRef)(null),[s,c]=(0,W.useState)(!1),[l,u]=(0,W.useState)(!1),[f,p]=(0,W.useState)(null),m=it(e);(0,W.useEffect)(()=>{let e=document.activeElement;(!e||e===document.body||e.getClientRects().length===0)&&o.current?.focus({preventScroll:!0})},[t.focus?.path,t.focus?.key]);let h=e=>{if(e.ctrlKey||e.metaKey||e.altKey||e.defaultPrevented||!o.current?.contains(e.target)||e.target.closest(`input, textarea, select, [contenteditable='true']`))return;let r=e.key.toLowerCase(),i=n?.block,a=i?.state===`open`;if(r===`j`||r===`k`)t.step(r===`j`?1:-1);else if(r===`y`&&a)t.pick?t.stagePicked():t.stage(n.review.path,i.key);else if(r===`n`&&a&&!t.pick)t.discard(n.review.path,i.key);else if(r===`l`&&a&&i.hunk)t.pick?t.setPick(null):t.startPick();else if(r===`escape`&&(t.pick||l))t.setPick(null),u(!1);else return;e.preventDefault()},g=e=>{t.focusFile(e),u(!1)},_=t.changes?.operation??null,v=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto overflow-x-hidden pb-1`,children:(0,X.jsx)(Qe,{reviews:t.reviews,conflicts:t.conflicts,current:n?.review.path??null,mobile:!1,onPick:g,onResolve:e.resolve})}),t.changes&&a.files>0&&!_&&(0,X.jsx)(I,{projectName:e.projectName,branch:e.branch,totals:t.commitTotals,lastCommit:t.changes.lastCommit,busy:t.busy,onCommit:t.commit,onUndoCommit:t.undoCommit,className:`shrink-0 border-t border-border-soft bg-panel`})]}),y=a.blocks-a.staged;return!t.reviews.length&&!t.conflicts.length?(0,X.jsxs)(`div`,{"data-testid":`git-review`,className:`relative flex h-full flex-col overflow-hidden bg-bg`,children:[t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),(0,X.jsx)(et,{conflicts:0,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]}):(0,X.jsxs)(`div`,{ref:o,tabIndex:0,onKeyDown:h,"data-testid":`git-review`,className:`@container flex h-full flex-col overflow-hidden bg-bg outline-none`,children:[(0,X.jsxs)(`div`,{className:`relative flex shrink-0 flex-wrap items-center gap-x-[18px] gap-y-2 border-b border-border-soft bg-panel py-2.5 pr-3 pl-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0`,children:[(0,X.jsx)(`h3`,{className:`m-0 text-sm font-semibold leading-5`,children:`Review changes`}),(0,X.jsxs)(`p`,{className:`m-0 flex min-w-0 items-center gap-1.5 whitespace-nowrap text-xs text-text-3`,children:[(0,X.jsx)(d,{className:`size-3 shrink-0`}),(0,X.jsx)(`b`,{className:`truncate font-medium text-text-2`,children:e.branch??`detached HEAD`}),(0,X.jsxs)(`span`,{children:[`· `,Q(a.files,`file`)]}),(0,X.jsx)(z,{added:a.added,removed:a.removed})]})]}),a.blocks+a.discarded>0&&(0,X.jsxs)(`div`,{className:`flex items-center gap-2.5 whitespace-nowrap text-[12.5px] text-text-2`,children:[(0,X.jsx)(Ye,{reviews:t.reviews}),(0,X.jsxs)(`span`,{children:[(0,X.jsxs)(`b`,{className:`font-semibold text-text`,children:[a.staged,` of `,a.blocks]}),` blocks staged`]}),(0,X.jsx)(`span`,{className:`text-text-3`,children:y?`· ${y} to decide`:`· all decided`})]}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-text-2 @min-[760px]:hidden`,"aria-expanded":l,onClick:()=>u(!l),children:[(0,X.jsx)(i,{}),Q(t.reviews.length+t.conflicts.length,`file`)]}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,disabled:!y,onClick:t.stageAll,children:[(0,X.jsx)(r,{}),`Stage all`]}),(0,X.jsx)(`button`,{type:`button`,className:tt,"aria-pressed":s,title:`Keyboard shortcuts`,"aria-label":`Keyboard shortcuts`,onClick:()=>c(!s),children:(0,X.jsx)(b,{className:`size-4`})})]})]}),s&&(0,X.jsxs)(`div`,{className:`flex shrink-0 flex-wrap gap-x-3 gap-y-1 border-b border-border-soft bg-panel px-4 py-2 text-[11.5px] text-text-3`,children:[(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`J`}),(0,X.jsx)(U,{children:`K`}),`next / previous block`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`Y`}),`stage`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`N`}),`discard`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:`L`}),`pick lines`]}),(0,X.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,X.jsx)(U,{children:nt?`⌘`:`Ctrl`}),(0,X.jsx)(U,{children:`↵`}),`commit`]})]}),t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),(0,X.jsxs)(`div`,{className:`relative grid min-h-0 flex-1 grid-cols-[minmax(0,1fr)] @min-[760px]:grid-cols-[272px_minmax(0,1fr)]`,children:[(0,X.jsx)(`aside`,{"aria-label":`Changed files`,className:`hidden min-h-0 flex-col border-r border-border-soft bg-panel @min-[760px]:flex`,children:v}),l&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:`absolute inset-0 z-20 bg-black/30 @min-[760px]:hidden`,onClick:()=>u(!1)}),(0,X.jsx)(`aside`,{"aria-label":`Changed files`,className:`absolute inset-y-0 left-0 z-30 flex w-[min(288px,85%)] flex-col border-r border-border bg-panel shadow-[var(--shadow-float)] @min-[760px]:hidden`,children:v})]}),(0,X.jsx)(`section`,{"aria-label":`Changes`,className:`relative flex min-h-0 min-w-0 flex-col`,children:n?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(at,{view:e}),(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(ot,{view:e,actions:m}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]}),(0,X.jsx)(st,{view:e,onDiscardFile:p})]}):(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(et,{conflicts:t.conflicts.length,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!1,onClose:t.dismissToast})]})})]}),(0,X.jsx)(R,{request:f,onClose:()=>p(null)})]})}function it(e){let{review:t}=e,n=t.focused?.review.path??``,r=(0,W.useRef)(null);return r.current={focus:e=>t.focusBlock(n,e),stage:e=>t.stage(n,e),discard:e=>t.discard(n,e),unstage:e=>t.unstage(n,e),undoDiscard:t.undoDiscard,startPick:t.startPick,togglePickLine:t.togglePickLine,setPick:t.setPick,stagePicked:t.stagePicked},r}function at({view:e}){let{review:t}=e.review.focused,[n,r]=N(t.path),i=t.file,a=i?.x===`D`||i?.y===`D`;return(0,X.jsxs)(`div`,{className:`relative flex min-h-12 shrink-0 flex-wrap items-center gap-x-[9px] gap-y-1.5 border-b border-border-soft py-2 pr-3 pl-4`,children:[(0,X.jsx)(A,{name:r,className:`size-4`}),(0,X.jsx)(`span`,{className:T(`whitespace-nowrap text-sm font-semibold`,a&&`text-text-2 line-through`),children:r}),n&&(0,X.jsx)(`span`,{dir:`rtl`,title:t.path,className:`min-w-10 shrink truncate text-left text-xs text-text-3`,children:(0,X.jsx)(`bdi`,{children:n})}),i&&(0,X.jsx)(ae,{letter:F(i)}),(0,X.jsx)(z,{added:t.added,removed:t.removed}),(0,X.jsx)(`span`,{className:`flex-1`}),i&&i.y!==`D`&&(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-text-2`,onClick:()=>e.openFile(t.path),children:[(0,X.jsx)(g,{}),`Open file`]})]})}function ot({view:e,actions:t}){let{review:n}=e,r=n.focused,i=(0,W.useRef)(null),[,a]=N(r.review.path),o=ue(r.review.path),s=!!n.busy,c=!!r.block.parts;return(0,W.useLayoutEffect)(()=>{let e=i.current,t=e?.querySelector(`[data-block-key="${CSS.escape(r.block.key)}"]`);if(!e||!t)return;let n=t.offsetTop-28,a=t.offsetTop+Math.min(t.offsetHeight,e.clientHeight-48);(t.offsetTop<e.scrollTop+8||a>e.scrollTop+e.clientHeight)&&(e.scrollTop=Math.max(0,n))},[r.review.path,r.block.key,c]),(0,X.jsx)(`div`,{ref:i,"data-testid":`git-review-code`,className:`relative min-h-0 flex-1 overflow-auto bg-bg pt-2.5 pb-7 font-mono text-[12px] leading-[1.7] [tab-size:4]`,children:n.items.map(e=>e.kind===`gap`?(0,X.jsx)(Be,{lines:e.lines,compact:!1},e.key):(0,X.jsx)(He,{name:a,oldPath:r.review.file?.oldPath,block:e.block,index:e.index,total:e.total,focused:e.block.key===r.block.key,pick:e.block.key===r.block.key?n.pick:null,compact:!1,lang:o,busy:s,actions:t},e.block.key))})}function st({view:e,onDiscardFile:t}){let{review:n}=e,{review:i,index:a}=n.focused,o=i.open,c=n.reviews.length>1,l=e=>{if(!i.file)return;let r=L([i.file]);t({anchor:e,title:r.title,body:r.body,confirmLabel:r.confirm,onConfirm:()=>n.discardFile(i.path)})};return(0,X.jsxs)(`div`,{className:`relative flex shrink-0 flex-wrap items-center gap-x-2.5 gap-y-2 border-t border-border-soft bg-panel px-3 py-2 text-[12.5px] text-text-2`,children:[(0,X.jsxs)(`div`,{className:`inline-flex items-center gap-0.5 rounded-lg bg-text/6 p-0.5`,children:[(0,X.jsx)(`button`,{type:`button`,className:tt,title:`Previous block (K)`,"aria-label":`Previous block`,onClick:()=>n.step(-1),children:(0,X.jsx)(S,{className:`size-3.5`})}),(0,X.jsxs)(`span`,{className:`min-w-[92px] text-center text-xs font-medium text-text-2`,children:[`Block `,a+1,` of `,i.blocks.length]}),(0,X.jsx)(`button`,{type:`button`,className:tt,title:`Next block (J)`,"aria-label":`Next block`,onClick:()=>n.step(1),children:(0,X.jsx)(u,{className:`size-3.5`})})]}),(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`b`,{className:`font-semibold text-text`,children:o}),` to decide in this file`]}):`This file is done`}),(0,X.jsx)(`span`,{className:`flex-1`}),(0,X.jsxs)(k,{variant:`ghost`,size:`sm`,className:`text-destructive hover:text-destructive`,disabled:!o||!i.file,onClick:e=>l(e.currentTarget),children:[(0,X.jsx)(s,{}),`Discard file…`]}),(0,X.jsxs)(k,{variant:`outline`,size:`sm`,disabled:!o,onClick:()=>n.stageFile(i.path),children:[(0,X.jsx)(r,{}),`Stage file`]}),(0,X.jsxs)(k,{size:`sm`,disabled:!c,onClick:n.nextFile,children:[`Next file`,(0,X.jsx)(v,{})]})]})}var ct=`inline-grid size-11 shrink-0 place-items-center rounded-[10px] text-text-2 active:bg-surface-hover`,$=`inline-flex h-11 min-w-11 items-center justify-center gap-2 whitespace-nowrap rounded-[10px] border px-3.5 text-sm font-medium active:opacity-80 disabled:opacity-45`;function lt({view:e}){let{review:t}=e,{focused:n,totals:i}=t,[a,l]=(0,W.useState)(null),[u,d]=(0,W.useState)(null),f=it(e),m=()=>l(null),_=i.blocks-i.staged,v=t.changes?.operation??null,y=n?.block,b=n?.review.path??``,x=()=>{let e=n?.review.file;if(!e)return;let r=L([e]);d({anchor:null,title:r.title,body:r.body,confirmLabel:r.confirm,onConfirm:()=>t.discardFile(e.path)})};return(0,X.jsxs)(`div`,{"data-testid":`git-review`,className:`flex h-full flex-col overflow-hidden bg-bg`,children:[(0,X.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center gap-1 border-b border-border-soft bg-panel pr-1 pl-3.5`,children:[(0,X.jsxs)(`h3`,{className:`m-0 min-w-0 flex-1 truncate text-[15px] font-semibold leading-tight`,children:[`Review changes`,(0,X.jsx)(`small`,{className:`block truncate text-[11.5px] font-normal text-text-3`,children:i.blocks?`${i.staged} of ${Q(i.blocks,`block`)} staged`:e.branch??`Nothing to review`})]}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`Changed files`,onClick:()=>l(`files`),children:(0,X.jsx)(h,{className:`size-5`})})]}),(0,X.jsx)(`div`,{className:`h-[3px] shrink-0 bg-text/10`,children:(0,X.jsx)(`div`,{className:`h-full bg-primary transition-[width]`,style:{width:i.blocks?`${i.staged/i.blocks*100}%`:0}})}),t.error&&(0,X.jsx)(`div`,{className:`shrink-0 bg-destructive/10 px-3 py-1.5 text-xs text-destructive`,children:t.error}),n&&y?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(dt,{view:e,onActions:()=>l(`actions`)}),(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto bg-bg pt-2 pb-3 font-mono text-[11px] leading-[1.65] [tab-size:4]`,children:(0,X.jsx)(He,{name:N(b)[1],oldPath:n.review.file?.oldPath,block:y,index:n.index,total:n.review.blocks.length,focused:y.state===`open`,pick:null,compact:!0,lang:ue(b),busy:!!t.busy,actions:f})}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!0,onClose:t.dismissToast})]}),(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-t border-border-soft bg-panel px-2.5 py-2`,children:[(0,X.jsx)(`button`,{type:`button`,className:T($,`border-border bg-panel-2 px-0 text-text`),"aria-label":`Previous block`,onClick:()=>t.step(-1),children:(0,X.jsx)(o,{className:`size-5`})}),y.state===`open`?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),onClick:()=>t.discard(b,y.key),children:[(0,X.jsx)(s,{className:`size-5`}),`Discard`]}),(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-transparent bg-primary text-primary-foreground`),onClick:()=>t.stage(b,y.key),children:[(0,X.jsx)(r,{className:`size-5`}),`Stage`]})]}):y.state===`staged`?(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),onClick:()=>t.unstage(b,y.key),children:[(0,X.jsx)(p,{className:`size-5`}),`Unstage`]}):(0,X.jsxs)(`button`,{type:`button`,className:T($,`flex-1 border-border bg-panel-2 text-text`),disabled:!y.recordId||!!t.busy,onClick:()=>y.recordId&&t.undoDiscard(y.recordId),children:[(0,X.jsx)(p,{className:`size-5`}),`Undo discard`]}),(0,X.jsx)(`button`,{type:`button`,className:T($,`border-border bg-panel-2 px-0 text-text`),"aria-label":`Next block`,onClick:()=>t.step(1),children:(0,X.jsx)(c,{className:`size-5`})})]})]}):(0,X.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,X.jsx)(et,{conflicts:t.conflicts.length,onGraph:e.openGraph}),t.toast&&(0,X.jsx)($e,{toast:t.toast,mobile:!0,onClose:t.dismissToast})]}),(0,X.jsxs)(j,{open:a===`files`,onClose:m,className:`flex max-h-[85%] flex-col`,children:[(0,X.jsx)(ut,{title:`Changes · ${e.branch??`detached HEAD`}`,sub:i.blocks?`${i.staged} of ${Q(i.blocks,`block`)} staged · ${_?`${_} to decide`:`all decided`}`:void 0,onClose:m}),(0,X.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:(0,X.jsx)(Qe,{reviews:t.reviews,conflicts:t.conflicts,current:n?.review.path??null,mobile:!0,onPick:e=>{t.focusFile(e),m()},onResolve:t=>{m(),e.resolve(t)}})}),t.changes&&i.files>0&&!v&&(0,X.jsx)(I,{projectName:e.projectName,branch:e.branch,totals:t.commitTotals,lastCommit:t.changes.lastCommit,busy:t.busy,onCommit:async(e,n)=>{let r=await t.commit(e,n);return r&&m(),r},onUndoCommit:t.undoCommit,className:`shrink-0 border-t border-border-soft`})]}),n&&(0,X.jsxs)(j,{open:a===`actions`,onClose:m,className:`flex max-h-[85%] flex-col`,children:[(0,X.jsx)(ut,{title:N(b)[1],onClose:m}),(0,X.jsxs)(`div`,{className:`border-t border-border-soft py-1`,children:[n.review.file&&n.review.file.y!==`D`&&(0,X.jsx)(ft,{icon:(0,X.jsx)(g,{className:`size-5`}),label:`Open file`,onClick:()=>{m(),e.openFile(b)}}),n.review.open>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(ft,{icon:(0,X.jsx)(r,{className:`size-5`}),label:`Stage file`,onClick:()=>{m(),t.stageFile(b)}}),(0,X.jsx)(ft,{icon:(0,X.jsx)(s,{className:`size-5`}),label:`Discard file…`,destructive:!0,onClick:()=>{m(),x()}})]})]})]}),(0,X.jsx)(R,{request:u,onClose:()=>d(null)})]})}function ut({title:e,sub:t,onClose:n}){return(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2.5 pt-0.5 pr-1.5 pb-2 pl-4`,children:[(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`h4`,{className:`m-0 min-w-0 truncate text-[15px] font-semibold`,children:e}),t&&(0,X.jsx)(`p`,{className:`m-0 mt-0.5 text-xs text-text-3`,children:t})]}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`Close`,onClick:n,children:(0,X.jsx)(_,{className:`size-5`})})]})}function dt({view:e,onActions:t}){let{review:n,index:r}=e.review.focused,[i,o]=N(n.path),s=n.file?.x===`D`||n.file?.y===`D`;return(0,X.jsxs)(`div`,{className:`flex min-h-[52px] shrink-0 items-center gap-2 border-b border-border-soft bg-panel py-1 pr-1 pl-3.5`,children:[(0,X.jsx)(A,{name:o,className:`size-4`}),(0,X.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col`,children:[(0,X.jsx)(`b`,{className:T(`truncate text-sm font-semibold`,s&&`text-text-2 line-through`),children:o}),(0,X.jsx)(`small`,{className:`truncate text-[11.5px] text-text-3`,children:[`Block ${r+1} of ${n.blocks.length}`,i].filter(Boolean).join(` · `)})]}),n.file&&(0,X.jsx)(ae,{letter:F(n.file)}),(0,X.jsx)(`button`,{type:`button`,className:ct,"aria-label":`File actions`,onClick:t,children:(0,X.jsx)(a,{className:`size-5`})})]})}function ft({icon:e,label:t,destructive:n,onClick:r}){return(0,X.jsxs)(`button`,{type:`button`,onClick:r,className:T(`flex min-h-12 w-full items-center gap-3 px-4 text-left text-sm active:bg-surface-hover`,n?`text-error`:`text-text`),children:[e,t]})}function pt({metadata:e,tabId:t}){let n=e?.projectName,r=e?.select,i=O(),a=oe(n),o=Re(n,r?.repo&&r.repo!==a.repo?.path?void 0:r),s=a.choose;(0,W.useEffect)(()=>{if(!r?.repo||!t)return;s(r.repo);let{repo:e,...n}=r;te(t,{select:n})},[r,t,s]);let c=o.changes?.branch.head??null,l=ce(e=>e.contributions?.commands?.some(e=>e.command===`git-graph.view`)??!1);(0,W.useEffect)(()=>{if(!t||!o.changes)return;let e=`Changes · ${c??`detached HEAD`}`,n=ee.getState().getPanelForTab(t)?.tabs.find(e=>e.id===t);n&&n.title!==e&&D.getState().updateTab(t,{title:e})},[t,c,o.changes]);let{projectFile:u}=a,d=a.repo?.path,f=(0,W.useCallback)((e,t)=>{n&&D.getState().openTab({type:e,title:e===`editor`?E(t):`Conflict: ${E(t)}`,closable:!0,metadata:{projectName:n,filePath:u(t)},projectId:n})},[n,u]),p=(0,W.useCallback)(()=>{l?window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:`git-graph.view`,args:d?[d]:[]}})):n&&D.getState().openTab({type:`git-log`,title:`Git Log`,projectId:n,closable:!0,metadata:{projectName:n}})},[l,d,n]);if(!n)return(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center text-sm text-text-3`,children:`No project selected.`});if(a.needsPick||a.noRepo)return(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 text-center text-sm text-text-3`,children:a.noRepo?`This project is not a git repository.`:`Choose a repository in Source Control first.`});if(!o.changes)return o.error?(0,X.jsx)(`div`,{className:`flex h-full flex-col items-center justify-center gap-2 px-4 text-center text-sm text-destructive`,children:(0,X.jsx)(`p`,{children:o.error})}):(0,X.jsxs)(`div`,{className:`flex h-full items-center justify-center gap-2 text-text-3`,children:[(0,X.jsx)(x,{className:`size-5 animate-spin`}),(0,X.jsx)(`span`,{className:`text-sm`,children:`Reading the changes…`})]});let m={review:o,projectName:n,branch:c,openFile:e=>f(`editor`,e),openGraph:p,resolve:e=>f(`conflict-editor`,e.path)};return i?(0,X.jsx)(lt,{view:m}):(0,X.jsx)(rt,{view:m})}export{pt as GitReviewTab};
|
|
Binary file
|
|
Binary file
|