@hienlh/ppm 0.23.6 → 0.23.7
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 +84 -0
- package/CLAUDE.md +21 -1
- package/Dockerfile.test +8 -1
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/http-api.md +29 -1
- package/dist/web/assets/accounts-settings-section-BYWnY9hH.js +1 -0
- package/dist/web/assets/accounts-settings-section-BYWnY9hH.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BYWnY9hH.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-Dn_wB-o5.js → ai-resource-editor-CY4n_Ccv.js} +1 -1
- package/dist/web/assets/ai-resource-editor-CY4n_Ccv.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-CY4n_Ccv.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-Bs3iUW4j.js +1 -0
- package/dist/web/assets/ai-settings-section-Bs3iUW4j.js.br +0 -0
- package/dist/web/assets/ai-settings-section-Bs3iUW4j.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-DDs11XV4.js +1 -0
- package/dist/web/assets/api-client-CJPnCOG-.js +1 -0
- package/dist/web/assets/{api-client-c8YOpTlT.js → api-client-D-SMbdiH.js} +1 -1
- package/dist/web/assets/api-client-D-SMbdiH.js.br +0 -0
- package/dist/web/assets/api-client-D-SMbdiH.js.gz +0 -0
- package/dist/web/assets/api-settings-BDkkhFMq.js +1 -0
- package/dist/web/assets/{api-settings-BmvNoCbn.js → api-settings-Bv9mLCty.js} +1 -1
- package/dist/web/assets/api-settings-Bv9mLCty.js.br +0 -0
- package/dist/web/assets/api-settings-Bv9mLCty.js.gz +0 -0
- package/dist/web/assets/{api-themes-6fOQJgM9.js → api-themes-3wW-zLzU.js} +1 -1
- package/dist/web/assets/appearance-settings-section-C0BoIBmz.js +1 -0
- package/dist/web/assets/appearance-settings-section-C0BoIBmz.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-C0BoIBmz.js.gz +0 -0
- package/dist/web/assets/apps-panel-DXAFsveZ.js +1 -0
- package/dist/web/assets/apps-panel-DXAFsveZ.js.br +0 -0
- package/dist/web/assets/apps-panel-DXAFsveZ.js.gz +0 -0
- package/dist/web/assets/{audio-preview-vaG2cB-k.js → audio-preview-BfES4Cx5.js} +1 -1
- package/dist/web/assets/audio-preview-BfES4Cx5.js.br +0 -0
- package/dist/web/assets/audio-preview-BfES4Cx5.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-CA8hPSX9.js +1 -0
- package/dist/web/assets/branch-review-tab-CA8hPSX9.js.br +0 -0
- package/dist/web/assets/branch-review-tab-CA8hPSX9.js.gz +0 -0
- package/dist/web/assets/{button-Ci9EUgqd.js → button-DeAyLH9U.js} +1 -1
- package/dist/web/assets/button-DeAyLH9U.js.br +0 -0
- package/dist/web/assets/button-DeAyLH9U.js.gz +0 -0
- package/dist/web/assets/{chat-preparation-cache-BSIQGiWx.js → chat-preparation-cache-CcCd2g7A.js} +1 -1
- package/dist/web/assets/chat-preparation-cache-CcCd2g7A.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-CcCd2g7A.js.gz +0 -0
- package/dist/web/assets/chat-tab-BWi_bUzA.js +1 -0
- package/dist/web/assets/chat-tab-BWi_bUzA.js.br +0 -0
- package/dist/web/assets/chat-tab-BWi_bUzA.js.gz +0 -0
- package/dist/web/assets/chat-tab-BvJhIaVE.js +15 -0
- package/dist/web/assets/chat-tab-BvJhIaVE.js.br +0 -0
- package/dist/web/assets/chat-tab-BvJhIaVE.js.gz +0 -0
- package/dist/web/assets/code-editor-OJUdLVnn.js +7 -0
- package/dist/web/assets/code-editor-OJUdLVnn.js.br +0 -0
- package/dist/web/assets/code-editor-OJUdLVnn.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-Dgxy_VNp.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-Dgxy_VNp.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-Dgxy_VNp.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-BA3y-qSH.js → conflict-editor-BpKW_vbL.js} +1 -1
- package/dist/web/assets/conflict-editor-BpKW_vbL.js.br +0 -0
- package/dist/web/assets/conflict-editor-BpKW_vbL.js.gz +0 -0
- package/dist/web/assets/context-menu-7OX80HDB.js +1 -0
- package/dist/web/assets/context-menu-7OX80HDB.js.br +0 -0
- package/dist/web/assets/context-menu-7OX80HDB.js.gz +0 -0
- package/dist/web/assets/{csv-preview-BioxkrQF.js → csv-preview-COYdTABa.js} +1 -1
- package/dist/web/assets/csv-preview-COYdTABa.js.br +0 -0
- package/dist/web/assets/csv-preview-COYdTABa.js.gz +0 -0
- package/dist/web/assets/{data-grid-overlay-editor-CQRVKr7y.js → data-grid-overlay-editor-CeZoduke.js} +1 -1
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.gz +0 -0
- package/dist/web/assets/{database-viewer-BSoJ0E6p.js → database-viewer-BQcBqCKm.js} +1 -1
- package/dist/web/assets/database-viewer-BQcBqCKm.js.br +0 -0
- package/dist/web/assets/database-viewer-BQcBqCKm.js.gz +0 -0
- package/dist/web/assets/{design-export-client-ChMcMoqW.js → design-export-client-OrnGCSwu.js} +1 -1
- package/dist/web/assets/design-export-client-OrnGCSwu.js.br +0 -0
- package/dist/web/assets/design-export-client-OrnGCSwu.js.gz +0 -0
- package/dist/web/assets/{design-responsive-dialog-DNBhJJLf.js → design-responsive-dialog-vJjQrC4n.js} +1 -1
- package/dist/web/assets/design-responsive-dialog-vJjQrC4n.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-vJjQrC4n.js.gz +0 -0
- package/dist/web/assets/design-tab-BbmFk38H.js +33 -0
- package/dist/web/assets/design-tab-BbmFk38H.js.br +0 -0
- package/dist/web/assets/design-tab-BbmFk38H.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-DHh5QsH9.js → designs-sidebar-panel-D2kXwB8B.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-D2kXwB8B.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-D2kXwB8B.js.gz +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js +1 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js.br +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js.gz +0 -0
- package/dist/web/assets/{diff-viewer-lctWoSmG.js → diff-viewer-Bj4DT6Mj.js} +1 -1
- package/dist/web/assets/diff-viewer-Bj4DT6Mj.js.br +0 -0
- package/dist/web/assets/diff-viewer-Bj4DT6Mj.js.gz +0 -0
- package/dist/web/assets/{docx-preview-C9XdKEj1.js → docx-preview-C2QqNGRE.js} +1 -1
- package/dist/web/assets/docx-preview-C2QqNGRE.js.br +0 -0
- package/dist/web/assets/docx-preview-C2QqNGRE.js.gz +0 -0
- package/dist/web/assets/editor-language-service-COqB2tuv.js +1 -0
- package/dist/web/assets/editor-language-service-COqB2tuv.js.br +3 -0
- package/dist/web/assets/editor-language-service-COqB2tuv.js.gz +0 -0
- package/dist/web/assets/explorer-body-DGrYajDN.js +2 -0
- package/dist/web/assets/explorer-body-DGrYajDN.js.br +0 -0
- package/dist/web/assets/explorer-body-DGrYajDN.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-DLzkODTP.js +1 -0
- package/dist/web/assets/explorer-window-content-DLzkODTP.js.br +0 -0
- package/dist/web/assets/explorer-window-content-DLzkODTP.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-rbkXsZVR.js → extension-manager-section-Bu0qcB2i.js} +1 -1
- package/dist/web/assets/extension-manager-section-Bu0qcB2i.js.br +0 -0
- package/dist/web/assets/extension-manager-section-Bu0qcB2i.js.gz +0 -0
- package/dist/web/assets/{extension-webview-uPO0WgCq.js → extension-webview-G_WJ0N52.js} +1 -1
- package/dist/web/assets/extension-webview-G_WJ0N52.js.br +0 -0
- package/dist/web/assets/extension-webview-G_WJ0N52.js.gz +0 -0
- package/dist/web/assets/{file-icons-gx_FBOXY.js → file-icons-l7fNOmdS.js} +1 -1
- package/dist/web/assets/file-icons-l7fNOmdS.js.br +0 -0
- package/dist/web/assets/file-icons-l7fNOmdS.js.gz +0 -0
- package/dist/web/assets/{file-store-D9KE0kQC.js → file-store-B0e7sLag.js} +1 -1
- package/dist/web/assets/file-store-B0e7sLag.js.br +0 -0
- package/dist/web/assets/file-store-B0e7sLag.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-CT7mDb0L.js → files-settings-section-ChZ_CynX.js} +1 -1
- package/dist/web/assets/files-settings-section-ChZ_CynX.js.br +0 -0
- package/dist/web/assets/files-settings-section-ChZ_CynX.js.gz +0 -0
- package/dist/web/assets/format-bytes-__396eCN.js +1 -0
- package/dist/web/assets/{format-file-meta-mQwA6SuY.js → format-file-meta-o1XBuoKS.js} +1 -1
- package/dist/web/assets/format-file-meta-o1XBuoKS.js.br +0 -0
- package/dist/web/assets/format-file-meta-o1XBuoKS.js.gz +0 -0
- package/dist/web/assets/{fs-api-DL36slbd.js → fs-api-CeHKwx95.js} +1 -1
- package/dist/web/assets/fs-api-CeHKwx95.js.br +0 -0
- package/dist/web/assets/fs-api-CeHKwx95.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-DANPfMRN.js → general-settings-section-MSvDEbFa.js} +1 -1
- package/dist/web/assets/general-settings-section-MSvDEbFa.js.br +0 -0
- package/dist/web/assets/general-settings-section-MSvDEbFa.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-BJPkLiEw.js → git-log-panel-gw5_a6j3.js} +1 -1
- package/dist/web/assets/git-log-panel-gw5_a6j3.js.br +0 -0
- package/dist/web/assets/git-log-panel-gw5_a6j3.js.gz +0 -0
- package/dist/web/assets/{git-repo-store-DSypNj19.js → git-repo-store-BpPnah5l.js} +1 -1
- package/dist/web/assets/git-repo-store-BpPnah5l.js.br +0 -0
- package/dist/web/assets/git-repo-store-BpPnah5l.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-R4PcAntf.js → glide-data-grid-Db2Cl26B.js} +5 -5
- package/dist/web/assets/glide-data-grid-Db2Cl26B.js.br +0 -0
- package/dist/web/assets/glide-data-grid-Db2Cl26B.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-B4etmYTR.js +1 -0
- package/dist/web/assets/group-chat-tab-B4etmYTR.js.br +0 -0
- package/dist/web/assets/group-chat-tab-B4etmYTR.js.gz +0 -0
- package/dist/web/assets/{image-preview-CGdZrmLo.js → image-preview-CjNhpfWw.js} +1 -1
- package/dist/web/assets/index-CtAvmybi.js +52 -0
- package/dist/web/assets/index-CtAvmybi.js.br +0 -0
- package/dist/web/assets/index-CtAvmybi.js.gz +0 -0
- package/dist/web/assets/index-DeCJasyy.css +1 -0
- package/dist/web/assets/index-DeCJasyy.css.br +0 -0
- package/dist/web/assets/index-DeCJasyy.css.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-DHRoyWcG.js → jira-watcher-section-CKSI1Alo.js} +1 -1
- package/dist/web/assets/keybindings-store-C4_yyU4u.js +1 -0
- package/dist/web/assets/{keyboard-shortcuts-section-BKej4mUf.js → keyboard-shortcuts-section-CEaVUc9a.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-CEaVUc9a.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CEaVUc9a.js.gz +0 -0
- package/dist/web/assets/language-servers-section-ePtEpnDc.js +2 -0
- package/dist/web/assets/language-servers-section-ePtEpnDc.js.br +0 -0
- package/dist/web/assets/language-servers-section-ePtEpnDc.js.gz +0 -0
- package/dist/web/assets/lsp-client-XzmR3Brr.js +1 -0
- package/dist/web/assets/lsp-client-XzmR3Brr.js.br +0 -0
- package/dist/web/assets/lsp-client-XzmR3Brr.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CTtDap-l.js +1 -0
- package/dist/web/assets/{markdown-renderer-BHtYqkYZ.js → markdown-renderer-D05fAr57.js} +2 -2
- package/dist/web/assets/markdown-renderer-D05fAr57.js.br +0 -0
- package/dist/web/assets/markdown-renderer-D05fAr57.js.gz +0 -0
- package/dist/web/assets/{media-url-CzUJrREv.js → media-url-C6NumuN5.js} +1 -1
- package/dist/web/assets/metric-chart-canvas-DHJe0VER.js +1 -0
- package/dist/web/assets/metric-chart-canvas-DHJe0VER.js.br +0 -0
- package/dist/web/assets/metric-chart-canvas-DHJe0VER.js.gz +0 -0
- package/dist/web/assets/{mobile-bottom-sheet-CuNi2FRv.js → mobile-bottom-sheet-D4UyOatB.js} +1 -1
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-CcfGdGL8.js +1 -0
- package/dist/web/assets/mobile-explorer-sheet-CcfGdGL8.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-CcfGdGL8.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-DS_XrpTG.js → new-design-dialog-BgmQopJM.js} +1 -1
- package/dist/web/assets/new-design-dialog-BgmQopJM.js.br +0 -0
- package/dist/web/assets/new-design-dialog-BgmQopJM.js.gz +0 -0
- package/dist/web/assets/notification-store-q5QBklKA.js +1 -0
- package/dist/web/assets/{notifications-settings-section-C05WYqcE.js → notifications-settings-section-BBJ0r9OS.js} +1 -1
- package/dist/web/assets/notifications-settings-section-BBJ0r9OS.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-BBJ0r9OS.js.gz +0 -0
- package/dist/web/assets/{onboarding-entry-CmUqv1kl.js → onboarding-entry-BYOYswsi.js} +1 -1
- package/dist/web/assets/onboarding-entry-BYOYswsi.js.br +0 -0
- package/dist/web/assets/onboarding-entry-BYOYswsi.js.gz +0 -0
- package/dist/web/assets/{onboarding-quick-orientation-DIhWv1CN.js → onboarding-quick-orientation-DPHYFMbA.js} +1 -1
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.gz +0 -0
- package/dist/web/assets/overview-panel-pkPs44Tv.js +1 -0
- package/dist/web/assets/overview-panel-pkPs44Tv.js.br +0 -0
- package/dist/web/assets/overview-panel-pkPs44Tv.js.gz +0 -0
- package/dist/web/assets/{pdf-preview-qdXmMkOR.js → pdf-preview-c-L_kDAs.js} +1 -1
- package/dist/web/assets/pdf-preview-c-L_kDAs.js.br +0 -0
- package/dist/web/assets/pdf-preview-c-L_kDAs.js.gz +0 -0
- package/dist/web/assets/performance-panel-yPrq0DJV.js +3 -0
- package/dist/web/assets/performance-panel-yPrq0DJV.js.br +0 -0
- package/dist/web/assets/performance-panel-yPrq0DJV.js.gz +0 -0
- package/dist/web/assets/{postgres-viewer-Xvlun_n5.js → postgres-viewer-CnwDCMNd.js} +1 -1
- package/dist/web/assets/postgres-viewer-CnwDCMNd.js.br +0 -0
- package/dist/web/assets/postgres-viewer-CnwDCMNd.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-D8AES1BA.js → ppmbot-settings-section-BDXoSIDp.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-BDXoSIDp.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-BDXoSIDp.js.gz +0 -0
- package/dist/web/assets/{pptx-export-CG6MRNok.js → pptx-export-D0RDY48h.js} +4 -4
- package/dist/web/assets/pptx-export-D0RDY48h.js.br +0 -0
- package/dist/web/assets/pptx-export-D0RDY48h.js.gz +0 -0
- package/dist/web/assets/{problems-panel-DTBG4beI.js → problems-panel-BgY8oyo9.js} +1 -1
- package/dist/web/assets/problems-panel-BgY8oyo9.js.br +0 -0
- package/dist/web/assets/problems-panel-BgY8oyo9.js.gz +0 -0
- package/dist/web/assets/process-row-format-CaaMcHzn.js +1 -0
- package/dist/web/assets/process-table-BOwDtXuG.js +1 -0
- package/dist/web/assets/process-table-BOwDtXuG.js.br +0 -0
- package/dist/web/assets/process-table-BOwDtXuG.js.gz +0 -0
- package/dist/web/assets/{project-framework-store-XxFXcUpb.js → project-framework-store-UDEMu28U.js} +1 -1
- package/dist/web/assets/{project-store-C5gJXkvb.js → project-store-DGa31y5B.js} +1 -1
- package/dist/web/assets/project-store-DGa31y5B.js.br +0 -0
- package/dist/web/assets/project-store-DGa31y5B.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-CqtmbeRj.js → proxy-settings-section-Db6Kc6xG.js} +1 -1
- package/dist/web/assets/proxy-settings-section-Db6Kc6xG.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-Db6Kc6xG.js.gz +0 -0
- package/dist/web/assets/{query-audit-section-UKG_smyt.js → query-audit-section-C0PAXhfT.js} +1 -1
- package/dist/web/assets/query-audit-section-C0PAXhfT.js.br +0 -0
- package/dist/web/assets/query-audit-section-C0PAXhfT.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-Djt6cpNL.js → remote-desktop-clipboard-notice-DOVtobj_.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-DOVtobj_.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-DOVtobj_.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DXlU3msM.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DXlU3msM.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DXlU3msM.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-ClV4YTLU.js +1 -0
- package/dist/web/assets/remote-desktop-mobile-view-ClV4YTLU.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-ClV4YTLU.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate-DNJF8TcF.js → remote-desktop-readiness-gate-BsfoJzdc.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-BsfoJzdc.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BsfoJzdc.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-kDaXl1_Q.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-kDaXl1_Q.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-kDaXl1_Q.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-BKoPovy2.js → schedules-settings-section-CvbjQM8z.js} +1 -1
- package/dist/web/assets/schedules-settings-section-CvbjQM8z.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-CvbjQM8z.js.gz +0 -0
- package/dist/web/assets/{scroll-area-XonvWYn_.js → scroll-area-sjOeAfoD.js} +1 -1
- package/dist/web/assets/scroll-area-sjOeAfoD.js.br +0 -0
- package/dist/web/assets/scroll-area-sjOeAfoD.js.gz +0 -0
- package/dist/web/assets/{separator-sQj04Ari.js → separator-9A3PCG1t.js} +1 -1
- package/dist/web/assets/services-panel-CimW47P8.js +1 -0
- package/dist/web/assets/services-panel-CimW47P8.js.br +0 -0
- package/dist/web/assets/services-panel-CimW47P8.js.gz +0 -0
- package/dist/web/assets/settings-body-BTXNtpWL.js +2 -0
- package/dist/web/assets/settings-body-BTXNtpWL.js.br +0 -0
- package/dist/web/assets/settings-body-BTXNtpWL.js.gz +0 -0
- package/dist/web/assets/settings-store-DvftLqzy.js +2 -0
- package/dist/web/assets/settings-store-DvftLqzy.js.br +0 -0
- package/dist/web/assets/settings-store-DvftLqzy.js.gz +0 -0
- package/dist/web/assets/settings-tab-CGhaRXjs.js +1 -0
- package/dist/web/assets/settings-window-content--Uyg_Psr.js +1 -0
- package/dist/web/assets/sortable-header-DUW9T1Hz.js +1 -0
- package/dist/web/assets/sortable-header-DUW9T1Hz.js.br +0 -0
- package/dist/web/assets/sortable-header-DUW9T1Hz.js.gz +0 -0
- package/dist/web/assets/{sql-query-editor-BjIMi9Wk.js → sql-query-editor-Dn-cgDrW.js} +1 -1
- package/dist/web/assets/sql-query-editor-Dn-cgDrW.js.br +0 -0
- package/dist/web/assets/sql-query-editor-Dn-cgDrW.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-BNcA6Irq.js → sqlite-viewer-B0NfaMjq.js} +1 -1
- package/dist/web/assets/sqlite-viewer-B0NfaMjq.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-B0NfaMjq.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-CxCfRQFb.js +2 -0
- package/dist/web/assets/system-monitor-body-CxCfRQFb.js.br +0 -0
- package/dist/web/assets/system-monitor-body-CxCfRQFb.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-Cb3EZUdp.js +1 -0
- package/dist/web/assets/system-monitor-window-content-51CA-2PH.js +1 -0
- package/dist/web/assets/{tab-host-window-content-CIRGNCvi.js → tab-host-window-content-CSrcmKNG.js} +1 -1
- package/dist/web/assets/tab-host-window-content-CSrcmKNG.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CSrcmKNG.js.gz +0 -0
- package/dist/web/assets/{team-member-sheet-CwXpLi3X.js → team-member-sheet-D4X6nh-x.js} +2 -2
- package/dist/web/assets/team-member-sheet-D4X6nh-x.js.br +0 -0
- package/dist/web/assets/team-member-sheet-D4X6nh-x.js.gz +0 -0
- package/dist/web/assets/{team-member-window-content-4swiiDz7.js → team-member-window-content-BxkbGVIL.js} +1 -1
- package/dist/web/assets/team-member-window-content-BxkbGVIL.js.br +0 -0
- package/dist/web/assets/team-member-window-content-BxkbGVIL.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-BGcdtMMT.js → terminal-tab-BYo34IqU.js} +3 -3
- package/dist/web/assets/terminal-tab-BYo34IqU.js.br +0 -0
- package/dist/web/assets/terminal-tab-BYo34IqU.js.gz +0 -0
- package/dist/web/assets/{tool-cards-D0-krtA2.js → tool-cards-DvXjOped.js} +4 -4
- package/dist/web/assets/tool-cards-DvXjOped.js.br +0 -0
- package/dist/web/assets/tool-cards-DvXjOped.js.gz +0 -0
- package/dist/web/assets/{use-blob-url-CmavyEP8.js → use-blob-url-CISBWKG5.js} +1 -1
- package/dist/web/assets/use-inline-blame-Br6mheS4.js +16 -0
- package/dist/web/assets/use-inline-blame-Br6mheS4.js.br +0 -0
- package/dist/web/assets/use-inline-blame-Br6mheS4.js.gz +0 -0
- package/dist/web/assets/use-lsp-BpJmvQ0n.js +6 -0
- package/dist/web/assets/use-lsp-BpJmvQ0n.js.br +0 -0
- package/dist/web/assets/use-lsp-BpJmvQ0n.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-C88KphGx.js → use-monaco-theme-UGOzyIhv.js} +1 -1
- package/dist/web/assets/use-process-kill-CyiiUD1E.js +1 -0
- package/dist/web/assets/use-process-kill-CyiiUD1E.js.br +0 -0
- package/dist/web/assets/use-process-kill-CyiiUD1E.js.gz +0 -0
- package/dist/web/assets/{use-websocket-Chk9guIU.js → use-websocket-Dpl21cHG.js} +1 -1
- package/dist/web/assets/{vendor-ui-BHh12_0v.js → vendor-ui-P9Ym7hCv.js} +1 -1
- package/dist/web/assets/vendor-ui-P9Ym7hCv.js.br +0 -0
- package/dist/web/assets/vendor-ui-P9Ym7hCv.js.gz +0 -0
- package/dist/web/assets/video-preview-D6Jw-IZK.js +1 -0
- package/dist/web/assets/video-preview-D6Jw-IZK.js.br +0 -0
- package/dist/web/assets/video-preview-D6Jw-IZK.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-CcHQDYzN.js +1 -0
- package/dist/web/assets/voice-settings-section-CcHQDYzN.js.br +0 -0
- package/dist/web/assets/voice-settings-section-CcHQDYzN.js.gz +0 -0
- package/dist/web/assets/ws-auth-CqI8-aoA.js +1 -0
- package/dist/web/index.html +20 -20
- 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/deployment-guide.md +23 -0
- package/package.json +1 -1
- package/release-from-worktree.sh +224 -0
- package/src/cli/commands/config-cmd.ts +12 -0
- package/src/providers/claude-agent-sdk.ts +65 -2
- package/src/providers/codex-app-server/codex-jsonrpc-client.ts +16 -1
- package/src/providers/codex-app-server/codex-provider.ts +39 -7
- package/src/providers/provider-probe.ts +63 -0
- package/src/providers/registry.ts +109 -29
- package/src/server/index.ts +9 -0
- package/src/server/middleware/auth.ts +5 -1
- package/src/server/routes/cross-origin-guard.ts +20 -0
- package/src/server/routes/git.ts +40 -4
- package/src/server/routes/lsp.ts +97 -4
- package/src/server/routes/resources.ts +72 -9
- package/src/server/routes/settings.ts +19 -1
- package/src/server/routes/speech.ts +66 -0
- package/src/server/routes/system-services.ts +76 -0
- package/src/server/routes/tunnel.ts +33 -1
- package/src/server/ws/chat.ts +74 -3
- package/src/services/codex-account-login.ts +26 -2
- package/src/services/codex-reset-credit.service.ts +16 -3
- package/src/services/compaction-savings.ts +127 -0
- package/src/services/db.service.ts +123 -8
- package/src/services/fs-ops/fs-ops-trash.service.ts +22 -9
- package/src/services/git-refs/for-each-ref.ts +118 -0
- package/src/services/git.service.ts +25 -2
- package/src/services/host-info/spawn-runner.ts +48 -4
- package/src/services/jsonl-transcript-parser.ts +7 -42
- package/src/services/lsp/lsp-install.ts +289 -0
- package/src/services/lsp/lsp-manager.ts +160 -29
- package/src/services/lsp/server-registry.ts +120 -4
- package/src/services/named-tunnel/named-tunnel-config.ts +8 -2
- package/src/services/named-tunnel/named-tunnel-setup.service.ts +4 -0
- package/src/services/read-lines.ts +54 -0
- package/src/services/speech-to-text/whisper-catalog.ts +142 -0
- package/src/services/speech-to-text/whisper-download.ts +113 -0
- package/src/services/speech-to-text/whisper-hallucinations.ts +51 -0
- package/src/services/speech-to-text/whisper-install.service.ts +247 -0
- package/src/services/speech-to-text/whisper-paths.ts +62 -0
- package/src/services/speech-to-text/whisper-transcribe.service.ts +117 -0
- package/src/services/supervisor.ts +94 -11
- package/src/services/system-metrics/cpu-details-linux.ts +252 -0
- package/src/services/system-metrics/cpu-memory-collector.ts +140 -18
- package/src/services/system-metrics/device-collector-linux.ts +31 -0
- package/src/services/system-metrics/device-collector-types.ts +40 -0
- package/src/services/system-metrics/disk-devices-linux.ts +156 -0
- package/src/services/system-metrics/disk-inventory-linux.ts +150 -0
- package/src/services/system-metrics/fans-linux.ts +51 -0
- package/src/services/system-metrics/gpu-api-versions.ts +120 -0
- package/src/services/system-metrics/gpu-devices-linux.ts +370 -0
- package/src/services/system-metrics/gpu-fdinfo-linux.ts +253 -0
- package/src/services/system-metrics/hardware-inventory.ts +50 -0
- package/src/services/system-metrics/linux-fs.ts +43 -0
- package/src/services/system-metrics/memory-darwin.ts +91 -0
- package/src/services/system-metrics/memory-linux.ts +156 -0
- package/src/services/system-metrics/net-devices-linux.ts +114 -0
- package/src/services/system-metrics/net-inventory-linux.ts +100 -0
- package/src/services/system-metrics/partitions-linux.ts +158 -0
- package/src/services/system-metrics/process-collector-linux.ts +58 -6
- package/src/services/system-metrics/process-collector-types.ts +8 -1
- package/src/services/system-metrics/process-details-darwin.ts +166 -0
- package/src/services/system-metrics/process-details-linux.ts +150 -0
- package/src/services/system-metrics/process-grouping.ts +2 -1
- package/src/services/system-metrics/process-rows-builder.ts +2 -0
- package/src/services/system-metrics/process-swap-linux.ts +37 -0
- package/src/services/system-metrics/signal-executor.ts +84 -0
- package/src/services/system-metrics/signal-request-handler.ts +92 -0
- package/src/services/system-metrics/system-metrics-platform.ts +30 -4
- package/src/services/system-metrics/system-metrics-tick.ts +73 -4
- package/src/services/system-metrics/system-metrics.service.ts +87 -2
- package/src/services/system-metrics/udev-db.ts +40 -0
- package/src/services/system-services/app-cgroup-linux.ts +115 -0
- package/src/services/system-services/app-icon-service.ts +31 -0
- package/src/services/system-services/app-icons-linux.ts +124 -0
- package/src/services/system-services/apps-linux.ts +174 -0
- package/src/services/system-services/desktop-entry.ts +103 -0
- package/src/services/system-services/service-guard.ts +124 -0
- package/src/services/system-services/systemd-collector.ts +203 -0
- package/src/services/system-services/systemd-parse.ts +162 -0
- package/src/shared/prompt-cache-idle.ts +197 -0
- package/src/shared/turn-usage.ts +85 -1
- package/src/types/chat.ts +27 -0
- package/src/types/config.ts +14 -0
- package/src/types/git.ts +41 -0
- package/src/types/system-hardware.ts +137 -0
- package/src/types/system-metrics.ts +231 -2
- package/src/types/system-services.ts +73 -0
- package/src/web/components/branch-review/branch-review-tab.tsx +20 -20
- package/src/web/components/branch-review/branch-review-tree-row.tsx +1 -13
- package/src/web/components/chat/chat-tab.tsx +3 -0
- package/src/web/components/chat/compaction-divider.tsx +48 -0
- package/src/web/components/chat/idle-cache-notice.tsx +67 -0
- package/src/web/components/chat/message-input.tsx +48 -13
- package/src/web/components/chat/message-list.tsx +15 -0
- package/src/web/components/chat/prompt-cache-chip.tsx +74 -0
- package/src/web/components/editor/code-editor.tsx +1 -0
- package/src/web/components/editor/editor-language-service.tsx +11 -3
- package/src/web/components/editor/lsp-status.tsx +115 -13
- package/src/web/components/git/branch-picker.tsx +419 -0
- package/src/web/components/git/branch-select.tsx +34 -0
- package/src/web/components/git/create-worktree-dialog.tsx +17 -16
- package/src/web/components/git/git-repo-picker.tsx +28 -40
- package/src/web/components/layout/status-bar.tsx +42 -19
- package/src/web/components/settings/accounts/account-card.tsx +5 -1
- package/src/web/components/settings/ai-settings-section.tsx +67 -3
- package/src/web/components/settings/appearance-settings-section.tsx +2 -28
- package/src/web/components/settings/language-servers-section.tsx +362 -0
- package/src/web/components/settings/settings-categories.ts +8 -3
- package/src/web/components/settings/settings-section-content.tsx +2 -0
- package/src/web/components/settings/voice-settings-section.tsx +283 -0
- package/src/web/components/system/apps/app-row.tsx +110 -0
- package/src/web/components/system/apps/app-rows.ts +140 -0
- package/src/web/components/system/apps/apps-panel.tsx +129 -0
- package/src/web/components/system/metric-chart-canvas.tsx +79 -3
- package/src/web/components/system/overview-cards/card-shell.tsx +54 -0
- package/src/web/components/system/overview-cards/cpu-card.tsx +11 -6
- package/src/web/components/system/overview-cards/disk-card.tsx +11 -6
- package/src/web/components/system/overview-cards/gpu-card.tsx +16 -6
- package/src/web/components/system/overview-cards/mem-card.tsx +11 -6
- package/src/web/components/system/overview-cards/net-card.tsx +11 -6
- package/src/web/components/system/overview-device-target.ts +69 -0
- package/src/web/components/system/overview-panel.tsx +15 -1
- package/src/web/components/system/performance/cpu-core-grid.tsx +74 -0
- package/src/web/components/system/performance/cpu-detail.tsx +220 -0
- package/src/web/components/system/performance/detail-parts.tsx +149 -0
- package/src/web/components/system/performance/device-list.ts +139 -0
- package/src/web/components/system/performance/disk-detail.tsx +64 -0
- package/src/web/components/system/performance/fans-detail.tsx +35 -0
- package/src/web/components/system/performance/gpu-detail.tsx +116 -0
- package/src/web/components/system/performance/memory-detail.tsx +109 -0
- package/src/web/components/system/performance/nic-detail.tsx +55 -0
- package/src/web/components/system/performance/partition-list.tsx +79 -0
- package/src/web/components/system/performance/performance-panel.tsx +206 -0
- package/src/web/components/system/performance/use-hardware-inventory.ts +48 -0
- package/src/web/components/system/process-columns-grid.ts +5 -3
- package/src/web/components/system/process-details-dialog.tsx +116 -0
- package/src/web/components/system/process-group-row.tsx +6 -1
- package/src/web/components/system/process-row-format.ts +6 -0
- package/src/web/components/system/process-row-menu.tsx +72 -0
- package/src/web/components/system/process-row.tsx +7 -1
- package/src/web/components/system/process-table-model.ts +1 -1
- package/src/web/components/system/process-table-sort.ts +8 -4
- package/src/web/components/system/process-table-toolbar.tsx +10 -2
- package/src/web/components/system/process-table-totals.ts +3 -0
- package/src/web/components/system/process-table.tsx +25 -2
- package/src/web/components/system/services/service-action-confirm.tsx +100 -0
- package/src/web/components/system/services/service-columns.ts +103 -0
- package/src/web/components/system/services/service-details-sheet.tsx +97 -0
- package/src/web/components/system/services/service-resources.ts +105 -0
- package/src/web/components/system/services/service-row.tsx +146 -0
- package/src/web/components/system/services/service-rows.ts +92 -0
- package/src/web/components/system/services/service-sort.ts +90 -0
- package/src/web/components/system/services/services-header.tsx +51 -0
- package/src/web/components/system/services/services-panel.tsx +207 -0
- package/src/web/components/system/services/use-services.ts +92 -0
- package/src/web/components/system/sortable-header.tsx +13 -8
- package/src/web/components/system/sysmon-preferences.tsx +85 -0
- package/src/web/components/system/system-monitor-body.tsx +101 -43
- package/src/web/components/system/system-monitor-window-content.tsx +2 -3
- package/src/web/components/system/use-process-signal.ts +87 -0
- package/src/web/components/tunnels/public-tunnel-switch.tsx +82 -0
- package/src/web/components/tunnels/tunnel-manager-tab.tsx +4 -0
- package/src/web/components/ui/dialog.tsx +14 -1
- package/src/web/components/ui/search-select.tsx +279 -0
- package/src/web/components/ui/start-ellipsis.tsx +18 -0
- package/src/web/hooks/use-chat.ts +28 -0
- package/src/web/hooks/use-global-keybindings.ts +7 -5
- package/src/web/hooks/use-lsp.ts +23 -2
- package/src/web/hooks/use-minute-clock.ts +20 -0
- package/src/web/hooks/use-whisper-voice-input.ts +113 -0
- package/src/web/lib/api-tunnels.ts +19 -0
- package/src/web/lib/branch-select-items.ts +29 -0
- package/src/web/lib/cpu-graph-mode.ts +90 -0
- package/src/web/lib/format-bytes.ts +14 -0
- package/src/web/lib/git-ref-picker.ts +120 -0
- package/src/web/lib/lsp/lsp-client.ts +32 -0
- package/src/web/lib/search-select-rows.ts +55 -0
- package/src/web/lib/temperature.ts +27 -0
- package/src/web/lib/voice-wav.ts +69 -0
- package/src/web/stores/git-status-store.ts +31 -17
- package/src/web/stores/keybindings-store.ts +14 -1
- package/src/web/stores/settings-store.ts +65 -0
- package/src/web/styles/globals.css +11 -0
- package/dist/web/assets/accounts-settings-section-DUVO32SQ.js +0 -1
- package/dist/web/assets/accounts-settings-section-DUVO32SQ.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-DUVO32SQ.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Dn_wB-o5.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Dn_wB-o5.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-CEbW8jRy.js +0 -1
- package/dist/web/assets/ai-settings-section-CEbW8jRy.js.br +0 -0
- package/dist/web/assets/ai-settings-section-CEbW8jRy.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-D-mwEYFZ.js +0 -1
- package/dist/web/assets/api-client-BgedDTvo.js +0 -1
- package/dist/web/assets/api-client-c8YOpTlT.js.br +0 -0
- package/dist/web/assets/api-client-c8YOpTlT.js.gz +0 -0
- package/dist/web/assets/api-settings-BmvNoCbn.js.br +0 -0
- package/dist/web/assets/api-settings-BmvNoCbn.js.gz +0 -0
- package/dist/web/assets/api-settings-Bti1-Zn3.js +0 -1
- package/dist/web/assets/appearance-settings-section-tw6TpFb6.js +0 -1
- package/dist/web/assets/appearance-settings-section-tw6TpFb6.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-tw6TpFb6.js.gz +0 -0
- package/dist/web/assets/audio-preview-vaG2cB-k.js.br +0 -0
- package/dist/web/assets/audio-preview-vaG2cB-k.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-MBuMWp_i.js +0 -1
- package/dist/web/assets/branch-review-tab-MBuMWp_i.js.br +0 -0
- package/dist/web/assets/branch-review-tab-MBuMWp_i.js.gz +0 -0
- package/dist/web/assets/button-Ci9EUgqd.js.br +0 -0
- package/dist/web/assets/button-Ci9EUgqd.js.gz +0 -0
- package/dist/web/assets/chat-preparation-cache-BSIQGiWx.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-BSIQGiWx.js.gz +0 -0
- package/dist/web/assets/chat-tab-DVvnqhw6.js +0 -1
- package/dist/web/assets/chat-tab-DVvnqhw6.js.br +0 -0
- package/dist/web/assets/chat-tab-DVvnqhw6.js.gz +0 -0
- package/dist/web/assets/chat-tab-DaEHva22.js +0 -15
- package/dist/web/assets/chat-tab-DaEHva22.js.br +0 -0
- package/dist/web/assets/chat-tab-DaEHva22.js.gz +0 -0
- package/dist/web/assets/code-editor-Bu9lhTVp.js +0 -7
- package/dist/web/assets/code-editor-Bu9lhTVp.js.br +0 -0
- package/dist/web/assets/code-editor-Bu9lhTVp.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-CbmE5mRX.js +0 -1
- package/dist/web/assets/codex-reset-credit-button-CbmE5mRX.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CbmE5mRX.js.gz +0 -0
- package/dist/web/assets/conflict-editor-BA3y-qSH.js.br +0 -0
- package/dist/web/assets/conflict-editor-BA3y-qSH.js.gz +0 -0
- package/dist/web/assets/context-menu-CjYTq8DI.js +0 -1
- package/dist/web/assets/context-menu-CjYTq8DI.js.br +0 -0
- package/dist/web/assets/context-menu-CjYTq8DI.js.gz +0 -0
- package/dist/web/assets/csv-preview-BioxkrQF.js.br +0 -0
- package/dist/web/assets/csv-preview-BioxkrQF.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CQRVKr7y.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CQRVKr7y.js.gz +0 -0
- package/dist/web/assets/database-viewer-BSoJ0E6p.js.br +0 -0
- package/dist/web/assets/database-viewer-BSoJ0E6p.js.gz +0 -0
- package/dist/web/assets/design-export-client-ChMcMoqW.js.br +0 -0
- package/dist/web/assets/design-export-client-ChMcMoqW.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-DNBhJJLf.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-DNBhJJLf.js.gz +0 -0
- package/dist/web/assets/design-tab-iU2CviE3.js +0 -33
- package/dist/web/assets/design-tab-iU2CviE3.js.br +0 -0
- package/dist/web/assets/design-tab-iU2CviE3.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-DHh5QsH9.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-DHh5QsH9.js.gz +0 -0
- package/dist/web/assets/dialog-B8clVkyi.js +0 -1
- package/dist/web/assets/dialog-B8clVkyi.js.br +0 -0
- package/dist/web/assets/dialog-B8clVkyi.js.gz +0 -0
- package/dist/web/assets/diff-viewer-lctWoSmG.js.br +0 -0
- package/dist/web/assets/diff-viewer-lctWoSmG.js.gz +0 -0
- package/dist/web/assets/docx-preview-C9XdKEj1.js.br +0 -0
- package/dist/web/assets/docx-preview-C9XdKEj1.js.gz +0 -0
- package/dist/web/assets/editor-language-service-fPG56hQO.js +0 -1
- package/dist/web/assets/editor-language-service-fPG56hQO.js.br +0 -0
- package/dist/web/assets/editor-language-service-fPG56hQO.js.gz +0 -0
- package/dist/web/assets/explorer-body-BgF7FsxI.js +0 -2
- package/dist/web/assets/explorer-body-BgF7FsxI.js.br +0 -0
- package/dist/web/assets/explorer-body-BgF7FsxI.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-C21w_7lf.js +0 -1
- package/dist/web/assets/explorer-window-content-C21w_7lf.js.br +0 -0
- package/dist/web/assets/explorer-window-content-C21w_7lf.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-rbkXsZVR.js.br +0 -0
- package/dist/web/assets/extension-manager-section-rbkXsZVR.js.gz +0 -0
- package/dist/web/assets/extension-webview-uPO0WgCq.js.br +0 -0
- package/dist/web/assets/extension-webview-uPO0WgCq.js.gz +0 -0
- package/dist/web/assets/file-icons-gx_FBOXY.js.br +0 -0
- package/dist/web/assets/file-icons-gx_FBOXY.js.gz +0 -0
- package/dist/web/assets/file-store-D9KE0kQC.js.br +0 -0
- package/dist/web/assets/file-store-D9KE0kQC.js.gz +0 -0
- package/dist/web/assets/files-settings-section-CT7mDb0L.js.br +0 -0
- package/dist/web/assets/files-settings-section-CT7mDb0L.js.gz +0 -0
- package/dist/web/assets/format-bytes-DmSHAKFe.js +0 -1
- package/dist/web/assets/format-file-meta-mQwA6SuY.js.br +0 -0
- package/dist/web/assets/format-file-meta-mQwA6SuY.js.gz +0 -0
- package/dist/web/assets/fs-api-DL36slbd.js.br +0 -0
- package/dist/web/assets/fs-api-DL36slbd.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DANPfMRN.js.br +0 -0
- package/dist/web/assets/general-settings-section-DANPfMRN.js.gz +0 -0
- package/dist/web/assets/git-log-panel-BJPkLiEw.js.br +0 -0
- package/dist/web/assets/git-log-panel-BJPkLiEw.js.gz +0 -0
- package/dist/web/assets/git-repo-store-DSypNj19.js.br +0 -0
- package/dist/web/assets/git-repo-store-DSypNj19.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-R4PcAntf.js.br +0 -0
- package/dist/web/assets/glide-data-grid-R4PcAntf.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-BXMdo8w9.js +0 -1
- package/dist/web/assets/group-chat-tab-BXMdo8w9.js.br +0 -0
- package/dist/web/assets/group-chat-tab-BXMdo8w9.js.gz +0 -0
- package/dist/web/assets/index-C8nGqkKN.js +0 -52
- package/dist/web/assets/index-C8nGqkKN.js.br +0 -0
- package/dist/web/assets/index-C8nGqkKN.js.gz +0 -0
- package/dist/web/assets/index-DvClbTQx.css +0 -1
- package/dist/web/assets/index-DvClbTQx.css.br +0 -0
- package/dist/web/assets/index-DvClbTQx.css.gz +0 -0
- package/dist/web/assets/keybindings-store-BGKlQQAv.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-BKej4mUf.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-BKej4mUf.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-BHtYqkYZ.js.br +0 -0
- package/dist/web/assets/markdown-renderer-BHtYqkYZ.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-vDNuKjel.js +0 -1
- package/dist/web/assets/mobile-bottom-sheet-CuNi2FRv.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CuNi2FRv.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-DtvxS7-r.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-DtvxS7-r.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-DtvxS7-r.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-DS_XrpTG.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DS_XrpTG.js.gz +0 -0
- package/dist/web/assets/notification-store-Dnnj20Ky.js +0 -1
- package/dist/web/assets/notifications-settings-section-C05WYqcE.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-C05WYqcE.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-CmUqv1kl.js.br +0 -0
- package/dist/web/assets/onboarding-entry-CmUqv1kl.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DIhWv1CN.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DIhWv1CN.js.gz +0 -0
- package/dist/web/assets/overview-panel-BZAW_nag.js +0 -1
- package/dist/web/assets/overview-panel-BZAW_nag.js.br +0 -0
- package/dist/web/assets/overview-panel-BZAW_nag.js.gz +0 -0
- package/dist/web/assets/pdf-preview-qdXmMkOR.js.br +0 -0
- package/dist/web/assets/pdf-preview-qdXmMkOR.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-Xvlun_n5.js.br +0 -0
- package/dist/web/assets/postgres-viewer-Xvlun_n5.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-D8AES1BA.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-D8AES1BA.js.gz +0 -0
- package/dist/web/assets/pptx-export-CG6MRNok.js.br +0 -0
- package/dist/web/assets/pptx-export-CG6MRNok.js.gz +0 -0
- package/dist/web/assets/problems-panel-DTBG4beI.js.br +0 -0
- package/dist/web/assets/problems-panel-DTBG4beI.js.gz +0 -0
- package/dist/web/assets/process-table-D_gR2XA6.js +0 -1
- package/dist/web/assets/process-table-D_gR2XA6.js.br +0 -0
- package/dist/web/assets/process-table-D_gR2XA6.js.gz +0 -0
- package/dist/web/assets/project-store-C5gJXkvb.js.br +0 -0
- package/dist/web/assets/project-store-C5gJXkvb.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CqtmbeRj.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CqtmbeRj.js.gz +0 -0
- package/dist/web/assets/query-audit-section-UKG_smyt.js.br +0 -0
- package/dist/web/assets/query-audit-section-UKG_smyt.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Djt6cpNL.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Djt6cpNL.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BQxhJUkm.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-BQxhJUkm.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BQxhJUkm.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DGnT8RY7.js +0 -1
- package/dist/web/assets/remote-desktop-mobile-view-DGnT8RY7.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DGnT8RY7.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DNJF8TcF.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DNJF8TcF.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-Ds0DKmM0.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-Ds0DKmM0.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-Ds0DKmM0.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-BKoPovy2.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BKoPovy2.js.gz +0 -0
- package/dist/web/assets/scroll-area-XonvWYn_.js.br +0 -0
- package/dist/web/assets/scroll-area-XonvWYn_.js.gz +0 -0
- package/dist/web/assets/settings-body-k2qPgRFe.js +0 -2
- package/dist/web/assets/settings-body-k2qPgRFe.js.br +0 -0
- package/dist/web/assets/settings-body-k2qPgRFe.js.gz +0 -0
- package/dist/web/assets/settings-store-Br5c1efC.js +0 -2
- package/dist/web/assets/settings-store-Br5c1efC.js.br +0 -0
- package/dist/web/assets/settings-store-Br5c1efC.js.gz +0 -0
- package/dist/web/assets/settings-tab-Bb23VdBu.js +0 -1
- package/dist/web/assets/settings-window-content-ClarWusz.js +0 -1
- package/dist/web/assets/sql-query-editor-BjIMi9Wk.js.br +0 -0
- package/dist/web/assets/sql-query-editor-BjIMi9Wk.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-BNcA6Irq.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-BNcA6Irq.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-D0T3ggt2.js +0 -2
- package/dist/web/assets/system-monitor-body-D0T3ggt2.js.br +0 -0
- package/dist/web/assets/system-monitor-body-D0T3ggt2.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-I1Igmoey.js +0 -1
- package/dist/web/assets/system-monitor-window-content-C5SeUv1H.js +0 -1
- package/dist/web/assets/tab-host-window-content-CIRGNCvi.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CIRGNCvi.js.gz +0 -0
- package/dist/web/assets/team-member-sheet-CwXpLi3X.js.br +0 -0
- package/dist/web/assets/team-member-sheet-CwXpLi3X.js.gz +0 -0
- package/dist/web/assets/team-member-window-content-4swiiDz7.js.br +0 -0
- package/dist/web/assets/team-member-window-content-4swiiDz7.js.gz +0 -0
- package/dist/web/assets/terminal-tab-BGcdtMMT.js.br +0 -0
- package/dist/web/assets/terminal-tab-BGcdtMMT.js.gz +0 -0
- package/dist/web/assets/tool-cards-D0-krtA2.js.br +0 -0
- package/dist/web/assets/tool-cards-D0-krtA2.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-pKaXyGU-.js +0 -16
- package/dist/web/assets/use-inline-blame-pKaXyGU-.js.br +0 -0
- package/dist/web/assets/use-inline-blame-pKaXyGU-.js.gz +0 -0
- package/dist/web/assets/use-lsp-71azTXQz.js +0 -6
- package/dist/web/assets/use-lsp-71azTXQz.js.br +0 -0
- package/dist/web/assets/use-lsp-71azTXQz.js.gz +0 -0
- package/dist/web/assets/vendor-ui-BHh12_0v.js.br +0 -0
- package/dist/web/assets/vendor-ui-BHh12_0v.js.gz +0 -0
- package/dist/web/assets/video-preview-DxEX-uGo.js +0 -1
- package/dist/web/assets/video-preview-DxEX-uGo.js.br +0 -0
- package/dist/web/assets/video-preview-DxEX-uGo.js.gz +0 -0
- package/dist/web/assets/ws-auth-kXgsX2Js.js +0 -1
- /package/dist/web/assets/{__vite-browser-external-BpSQWxcq.js → __vite-browser-external-BILfYaAs.js} +0 -0
- /package/dist/web/assets/{run-in-terminal-HIdNgYim.js → run-in-terminal-2pSiup8e.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-DLDtzLib.js → vendor-xterm-DF1JTfsy.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-DLDtzLib.js.br → vendor-xterm-DF1JTfsy.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-DLDtzLib.js.gz → vendor-xterm-DF1JTfsy.js.gz} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/markdown-renderer-CTtDap-l.js","assets/vendor-ui-P9Ym7hCv.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-QKPNiWEd.js","assets/markdown-renderer-D05fAr57.js","assets/index-CtAvmybi.js","assets/preload-helper-BEFjQwLd.js","assets/button-DeAyLH9U.js","assets/utils-btZ8C8-R.js","assets/createLucideIcon-DBXq3G0e.js","assets/api-client-D-SMbdiH.js","assets/react-CzUPVyyG.js","assets/settings-store-DvftLqzy.js","assets/file-store-B0e7sLag.js","assets/window-store-B4cbZ5rr.js","assets/window-pip-registry-BQ6LSr6d.js","assets/panel-store-BUQ-CPsd.js","assets/onboarding-quick-orientation-DPHYFMbA.js","assets/dialog-Bocc0Fgb.js","assets/portal-container-context-NFSuymMu.js","assets/icons-CO_II6D-.js","assets/use-is-mobile-BClDZJP5.js","assets/format-file-meta-o1XBuoKS.js","assets/fs-api-CeHKwx95.js","assets/context-menu-7OX80HDB.js","assets/input-CG8PS8mS.js","assets/mobile-bottom-sheet-D4UyOatB.js","assets/use-visual-viewport-BGpcMnIx.js","assets/scroll-area-sjOeAfoD.js","assets/chat-preparation-cache-CcCd2g7A.js","assets/file-icons-l7fNOmdS.js","assets/project-framework-store-UDEMu28U.js","assets/format-date-BMtvCeb9.js","assets/git-repo-store-BpPnah5l.js","assets/project-store-DGa31y5B.js","assets/ws-auth-CqI8-aoA.js","assets/tab-store-DqeaGhhE.js","assets/apply-theme-Cc_cmrD5.js","assets/resolve-theme-STMsK2vc.js","assets/index-DeCJasyy.css","assets/image-gallery-DC3gRAqk.js","assets/run-in-terminal-2pSiup8e.js","assets/editor-language-service-COqB2tuv.js","assets/use-lsp-BpJmvQ0n.js","assets/lsp-client-XzmR3Brr.js","assets/csv-preview-COYdTABa.js","assets/lib-BY5fb-Cz.js","assets/csv-parser-DcRWxcNV.js","assets/image-preview-CjNhpfWw.js","assets/use-blob-url-CISBWKG5.js","assets/pdf-preview-c-L_kDAs.js","assets/video-preview-D6Jw-IZK.js","assets/can-open-in-ppm-Bw_xiOXX.js","assets/media-url-C6NumuN5.js","assets/audio-preview-BfES4Cx5.js","assets/docx-preview-C2QqNGRE.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{$r as r,An as i,Br as a,Dt as o,Fr as s,Jr as c,Lt as l,Qr as u,Tr as d,Yn as f,Z as p,_r as ee,at as te,bt as ne,ct as m,dt as re,gr as ie,ir as ae,j as oe,lt as se,nt as ce,pt as h,q as g,qr as _,r as v,rr as y,st as b,un as x,vt as le,w as ue,yt as S}from"./icons-CO_II6D-.js";import{t as de}from"./createLucideIcon-DBXq3G0e.js";import{i as fe,n as C}from"./api-client-D-SMbdiH.js";import{t as w}from"./settings-store-DvftLqzy.js";import{t as T}from"./preload-helper-BEFjQwLd.js";import{t as E}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import{t as pe}from"./panel-store-BUQ-CPsd.js";import"./window-store-B4cbZ5rr.js";import{i as me}from"./project-store-DGa31y5B.js";import"./project-framework-store-UDEMu28U.js";import{t as D}from"./tab-store-DqeaGhhE.js";import{o as O}from"./file-store-B0e7sLag.js";import{n as he,t as ge}from"./use-is-mobile-BClDZJP5.js";import"./git-repo-store-BpPnah5l.js";import{t as _e}from"./button-DeAyLH9U.js";import{a as ve,i as ye,n as be,o as xe,t as Se}from"./dialog-Bocc0Fgb.js";import"./file-icons-l7fNOmdS.js";import{t as Ce}from"./mobile-bottom-sheet-D4UyOatB.js";import"./use-visual-viewport-BGpcMnIx.js";import"./fs-api-CeHKwx95.js";import"./format-file-meta-o1XBuoKS.js";import{t as we}from"./input-CG8PS8mS.js";import"./scroll-area-sjOeAfoD.js";import{C as Te,Dt as Ee,S as De,_n as Oe,_t as ke,bn as Ae,dn as k,fn as A,gn as je,gt as Me,hn as Ne,jn as Pe,kn as j,ln as Fe,pn as M,un as N,v as Ie,vn as P,vt as Le,xn as F,yn as I}from"./index-CtAvmybi.js";import"./data-grid-types-CHD9-pon.js";import"./marked.esm-DDb9MclE.js";import{t as Re}from"./use-monaco-theme-UGOzyIhv.js";import{n as ze,t as Be}from"./editor-font-BNwo7zo5.js";import{t as Ve}from"./use-inline-blame-Br6mheS4.js";import{n as He,r as Ue}from"./monaco-dotenv-language-Bwq3gQsi.js";import{i as We,n as Ge,r as Ke,t as qe}from"./can-open-in-ppm-Bw_xiOXX.js";import{a as Je,i as Ye,o as Xe,r as Ze,t as Qe}from"./glide-data-grid-Db2Cl26B.js";var $e=de(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),L=e(t(),1),R=n();function et({projectName:e,filePath:t,tabId:n,ready:r,children:i}){let a=(0,L.useRef)(null),o=D(e=>e.activeTabId);return(0,L.useEffect)(()=>{let i=()=>{if(!r||!e||!t||!n||o!==n)return;let i=!!a.current?.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});i&&Ee({type:`file-ready`,projectName:e,tabId:n,visible:i,isRunDocument:/^readme(?:\.[^/\\]+)?$/i.test(t.split(/[/\\]/).pop()??``)})};return i(),window.addEventListener(`ppm:onboarding-refresh`,i),()=>window.removeEventListener(`ppm:onboarding-refresh`,i)},[e,t,n,r,o]),(0,R.jsx)(`div`,{ref:a,className:`flex flex-1 min-h-0 flex-col`,children:i})}var tt=[`completionItems`,`hovers`,`documentSymbols`,`definitions`,`references`,`documentHighlights`,`rename`,`diagnostics`,`documentRangeFormattingEdits`,`signatureHelp`,`onTypeFormattingEdits`,`codeActions`,`inlayHints`];function nt(e){return Object.fromEntries(tt.map(t=>[t,e]))}var rt=nt(!1),it=nt(!0),z={noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0},at=1;function ot(e,t){for(let n of[e,t])n.setModeConfiguration({...rt}),n.setDiagnosticsOptions({...z})}function B(e,t){for(let n of[e,t])n.setCompilerOptions({...n.getCompilerOptions(),jsx:at,allowJs:!0,allowNonTsExtensions:!0}),n.setModeConfiguration({...it}),n.setDiagnosticsOptions({...z})}function st(e,t,n){e?ot(t,n):B(t,n)}function ct({enabled:e,onToggle:t,status:n,diagnostics:i,onInstall:a}){let[o,s]=(0,L.useState)(!1),c=he();if(!e)return(0,R.jsxs)(`button`,{type:`button`,onClick:()=>t(!0),title:`Language server: off. Turn it on for completions, hover, go to definition, rename and quick fix from a real server. It runs as a process on the host.`,className:`flex items-center gap-1 rounded px-1.5 text-xs text-muted-foreground hover:bg-muted active:scale-95 transition-colors ${c?`min-h-11`:`py-0.5`}`,children:[(0,R.jsx)(r,{className:`size-3 shrink-0`}),(0,R.jsx)(`span`,{children:`LSP off`})]});if(!n)return null;let l=i.filter(e=>e.severity===1).length,d=i.filter(e=>e.severity===2).length,f=n.state===`ready`?n.server.displayName:n.state===`opening`?`Starting…`:n.server?.displayName??`No server`,p=n.state===`unavailable`&&n.reason===`not-installed`;return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(`button`,{type:`button`,onClick:()=>s(!0),title:n.state===`ready`?`${n.server.displayName} — rooted at ${n.server.rootPath}`:n.state===`unavailable`?n.message:`Starting the language server`,className:`flex items-center gap-1 rounded px-1.5 hover:bg-muted active:scale-95 transition-colors text-xs ${c?`min-h-11`:`py-0.5`} ${p?`text-amber-500`:`text-muted-foreground`}`,children:[n.state===`opening`?(0,R.jsx)(x,{className:`size-3 animate-spin shrink-0`}):p?(0,R.jsx)(v,{className:`size-3 shrink-0`}):(0,R.jsx)(u,{className:`size-3 shrink-0`}),(0,R.jsx)(`span`,{className:`max-w-24 truncate`,children:f}),l>0&&(0,R.jsx)(`span`,{className:`text-red-500`,children:l}),l===0&&d>0&&(0,R.jsx)(`span`,{className:`text-amber-500`,children:d})]}),o&&(0,R.jsx)(V,{status:n,errors:l,warnings:d,isMobile:c,onToggle:t,onInstall:a,onClose:()=>s(!1)})]})}function V({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a,onClose:o}){let s=(0,R.jsx)(lt,{status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a});return r?(0,R.jsx)(Ce,{open:!0,onClose:o,className:`popover-solid max-h-[85dvh] flex flex-col`,children:s}):(0,R.jsx)(Se,{open:!0,onOpenChange:e=>!e&&o(),children:(0,R.jsxs)(be,{className:`sm:max-w-lg`,children:[(0,R.jsx)(xe,{children:`Language server`}),s]})})}function lt({status:e,errors:t,warnings:n,isMobile:r,onToggle:i,onInstall:a}){return(0,R.jsxs)(`div`,{className:`p-4 space-y-4 overflow-y-auto text-sm leading-relaxed`,children:[e.state===`ready`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(H,{label:`Server`,value:e.server.displayName}),(0,R.jsx)(H,{label:`Language`,value:e.languageId}),(0,R.jsx)(H,{label:`Project root`,value:e.server.rootPath,mono:!0}),(0,R.jsx)(H,{label:`Problems`,value:`${t} error${t===1?``:`s`}, ${n} warning${n===1?``:`s`}`}),(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Completions, hover, go to definition (F12), find references (Shift+F12), rename (F2), quick fix (Ctrl+.) and format (Shift+Alt+F) all come from this server.`})]}),e.state===`opening`&&(0,R.jsx)(`p`,{className:`text-muted-foreground`,children:`Starting the language server. A cold start reads the project's dependencies, so the first completion in a large project can take a few seconds.`}),e.state===`unavailable`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{children:e.message}),e.server&&(0,R.jsxs)(`div`,{className:`space-y-2`,children:[e.reason===`not-installed`&&e.server.installable&&a?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:ut(e.server.installWith)}),(0,R.jsx)(ft,{server:e.server,isMobile:r,onInstall:a}),(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Or run it yourself:`})]}):(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:dt(e.server.installWith)}),(0,R.jsx)(pt,{command:e.server.installHint,isMobile:r})]}),e.reason===`no-language`&&(0,R.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`No language server is registered for this file type.`})]}),(0,R.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-t border-border pt-3`,children:[(0,R.jsxs)(`div`,{children:[(0,R.jsx)(`p`,{className:`text-xs font-medium`,children:`Language server`}),(0,R.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`On for this device. Turning it off stops the process.`})]}),(0,R.jsx)(Me,{checked:!0,onCheckedChange:e=>i(e)})]})]})}function ut(e){switch(e){case`go`:return`PPM builds it with the Go on this machine and keeps the binary in its own folder, leaving your GOBIN alone. A first build takes a minute or two.`;case`rustup`:return`PPM asks rustup to add the component to the toolchain this project uses — the same as running the command below yourself.`;default:return`PPM downloads it from npm into its own folder. Nothing you installed globally changes, and this file picks it up without being reopened.`}}function dt(e){switch(e){case`go`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find a Go on this host.`;case`rustup`:return`Install it, then reopen this file. PPM installs language servers but never toolchains, and it cannot find rustup on this host.`;default:return`Install it, then reopen this file. This one comes from a system package manager, which PPM will not run on your behalf.`}}function ft({server:e,isMobile:t,onInstall:n}){let[r,i]=(0,L.useState)(!1),[a,o]=(0,L.useState)(null);return(0,R.jsxs)(R.Fragment,{children:[(0,R.jsxs)(_e,{type:`button`,disabled:r,onClick:()=>{i(!0),o(null),n(e.id).catch(e=>o(e instanceof Error?e.message:String(e))).finally(()=>i(!1))},className:`w-full ${t?`min-h-11`:``}`,children:[r?(0,R.jsx)(x,{className:`size-4 animate-spin`}):(0,R.jsx)(b,{className:`size-4`}),r?`Installing ${e.displayName}…`:`Install ${e.displayName}`]}),a&&(0,R.jsx)(`p`,{className:`text-xs text-red-500 break-words`,children:a})]})}function H({label:e,value:t,mono:n}){return(0,R.jsxs)(`div`,{className:`flex gap-2 items-baseline`,children:[(0,R.jsx)(`span`,{className:`text-muted-foreground shrink-0 w-24 text-xs`,children:e}),(0,R.jsx)(`span`,{className:`min-w-0 break-all ${n?`font-mono text-xs`:``}`,children:t})]})}function pt({command:e,isMobile:t}){let[n,r]=(0,L.useState)(!1);return(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{navigator.clipboard?.writeText(e).then(()=>{r(!0),setTimeout(()=>r(!1),1500)})},className:`w-full flex items-center gap-2 rounded border border-border bg-muted/40 px-3 text-left font-mono text-xs hover:bg-muted active:scale-[0.99] transition ${t?`min-h-11 py-3`:`py-2`}`,children:[(0,R.jsx)(`span`,{className:`flex-1 break-all`,children:e}),n?(0,R.jsx)(ue,{className:`size-3.5 shrink-0 text-green-500`}):(0,R.jsx)(ce,{className:`size-3.5 shrink-0 opacity-60`})]})}function mt(e){let t=e.startsWith(`/`),n=e.split(/[/\\]/).filter(Boolean),r=e=>{let r=(t?`/`:``)+n.slice(0,e+1).join(`/`);return/^[A-Za-z]:$/.test(r)?r+`/`:r},i=t?`/`:(n[0]??``)+`/`;return n.map((e,t)=>({name:e,absPath:r(t),parentDir:t>0?r(t-1):i}))}async function ht(e){return(await C.get(`/api/fs/browse?path=${encodeURIComponent(e)}`)).entries}function U({filePath:e,projectName:t,tabId:n,className:r}){let{updateTab:i,openTab:a}=D(Fe(e=>({updateTab:e.updateTab,openTab:e.openTab}))),o=(0,L.useRef)(null),s=(0,L.useMemo)(()=>mt(e),[e]);(0,L.useEffect)(()=>{o.current&&(o.current.scrollLeft=o.current.scrollWidth)},[s]);let c=(0,L.useCallback)((e,r)=>{let o=E(e),s={filePath:e,projectName:t};r.metaKey||r.ctrlKey?a({type:`editor`,title:o,metadata:s,projectId:t,closable:!0}):i(n,{title:o,metadata:s})},[t,n,a,i]);return(0,R.jsx)(`div`,{ref:o,className:r,children:s.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(W,{segment:e,isLast:t===s.length-1,onFileClick:c})]},e.absPath))})}function W({segment:e,isLast:t,onFileClick:n}){let[r,i]=(0,L.useState)(null),[a,o]=(0,L.useState)(null);function s(t){t&&r===null&&ht(e.parentDir).then(i).catch(e=>{o(e.message||`Failed to browse`),i([])})}return(0,R.jsxs)(N,{onOpenChange:s,children:[(0,R.jsx)(F,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,R.jsx)(A,{align:`start`,className:`max-h-[300px] overflow-y-auto p-1`,children:r===null?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-destructive`,children:a}):r.length===0?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):r.map(t=>(0,R.jsx)(gt,{entry:t,activePath:e.absPath,onFileClick:n},t.path))})]})}function gt({entry:e,activePath:t,onFileClick:n}){let r=G(e.name,e.type===`directory`),i=e.path===t,[a,o]=(0,L.useState)(null);if(e.type===`directory`){function s(t){t&&a===null&&ht(e.path).then(o).catch(()=>o([]))}return(0,R.jsxs)(P,{onOpenChange:s,children:[(0,R.jsxs)(Ae,{className:`text-xs gap-1.5 ${i?`bg-muted`:``}`,children:[(0,R.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,R.jsx)(I,{className:`max-h-[300px] overflow-y-auto p-1`,children:a===null?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):a.length===0?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Empty`}):a.map(e=>(0,R.jsx)(gt,{entry:e,activePath:t,onFileClick:n},e.path))})]})}return(0,R.jsxs)(M,{className:`text-xs gap-1.5 cursor-pointer ${i?`bg-muted`:``}`,onClick:t=>n(e.path,t),children:[(0,R.jsx)(r,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]})}var _t={ts:h,tsx:h,js:h,jsx:h,py:h,rs:h,go:h,html:h,css:h,scss:h,json:$e,md:le,txt:le,yaml:S,yml:S};function G(e,t){return t?o:_t[e.split(`.`).pop()?.toLowerCase()??``]??re}function K(e,t){let n=[],r=e,i=``;for(let e=0;e<t.length;e++){let a=t[e],o=t.slice(0,e+1).join(`/`),s=r.find(e=>e.name===a);if(n.push({name:a,fullPath:o,node:s??null,siblings:r,parentPath:i}),s?.children)i=s.path,r=s.children;else{for(let r=e+1;r<t.length;r++)n.push({name:t[r],fullPath:t.slice(0,r+1).join(`/`),node:null,siblings:[],parentPath:t.slice(0,r).join(`/`)});break}}return n}function vt(e){return[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1)}function yt({filePath:e,projectName:t,tabId:n,className:r}){let i=O(e=>e.tree),{updateTab:a,openTab:o}=D(Fe(e=>({updateTab:e.updateTab,openTab:e.openTab}))),s=me(e=>e.projects.find(e=>e.name===t)?.path??``),c=(0,L.useRef)(null),{prefixParts:l,relativePath:u,isExternal:d}=(0,L.useMemo)(()=>{let t=e.startsWith(`/`)?e.slice(1):e,n=s.startsWith(`/`)?s.slice(1):s;if(n&&t.startsWith(n+`/`)){let e=t.slice(n.length+1);return{prefixParts:n.split(`/`),relativePath:e,isExternal:!1}}return{prefixParts:[],relativePath:t,isExternal:/^(\/|[A-Za-z]:[/\\])/.test(e)}},[e,s]),f=(0,L.useMemo)(()=>K(i,u.split(`/`).filter(Boolean)),[i,u]);(0,L.useEffect)(()=>{c.current&&(c.current.scrollLeft=c.current.scrollWidth)},[f]);function p(e,r){let i=E(e);r.metaKey||r.ctrlKey?o({type:`editor`,title:i,metadata:{filePath:e,projectName:t},projectId:t,closable:!0}):a(n,{title:i,metadata:{filePath:e,projectName:t}})}return d?(0,R.jsx)(U,{filePath:e,projectName:t,tabId:n,className:r}):(0,R.jsxs)(`div`,{ref:c,className:r,children:[l.map((e,t)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[t>0&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(`span`,{className:`text-xs text-muted-foreground px-1 py-0.5`,children:e})]},`prefix-${t}`)),f.map((e,n)=>(0,R.jsxs)(`div`,{className:`flex items-center shrink-0`,children:[(n>0||l.length>0)&&(0,R.jsx)(oe,{className:`size-3 text-muted-foreground shrink-0 mx-0.5`}),(0,R.jsx)(bt,{segment:e,isLast:n===f.length-1,projectName:t,onFileClick:p})]},e.fullPath))]})}function bt({segment:e,isLast:t,projectName:n,onFileClick:r}){let i=O(e=>e.loadChildren),a=O(e=>e.loadedPaths),o=(0,L.useMemo)(()=>vt(e.siblings),[e.siblings]),s=a.has(e.parentPath);function c(t){if(t&&!s){let t=e.parentPath.split(`/`).filter(Boolean);(async()=>{for(let e=0;e<=t.length;e++)await i(n,t.slice(0,e).join(`/`))})()}}return(0,R.jsxs)(N,{onOpenChange:c,children:[(0,R.jsx)(F,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,className:`text-xs px-1 py-0.5 rounded hover:bg-muted transition-colors truncate max-w-[120px] ${t?`text-foreground font-medium`:`text-muted-foreground`}`,children:e.name})}),(0,R.jsx)(A,{align:`start`,className:`max-h-[300px] p-1`,children:o.length===0?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):o.map(t=>(0,R.jsx)(xt,{node:t,projectName:n,activePath:e.fullPath,onFileClick:r},t.path))})]})}function xt({node:e,projectName:t,activePath:n,onFileClick:r}){let i=G(e.name,e.type===`directory`),a=e.path===n,o=O(e=>e.loadChildren),s=O(e=>e.loadedPaths);if(e.type===`directory`){let c=e.children??[],l=s.has(e.path);function u(n){n&&!l&&o(t,e.path)}return(0,R.jsxs)(P,{onOpenChange:u,children:[(0,R.jsxs)(Ae,{className:`text-xs gap-1.5 ${a?`bg-muted`:``}`,children:[(0,R.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]}),(0,R.jsx)(I,{className:`max-h-[300px] overflow-y-auto p-1`,children:c.length===0?(0,R.jsx)(M,{disabled:!0,className:`text-xs text-muted-foreground`,children:`Loading…`}):vt(c).map(e=>(0,R.jsx)(xt,{node:e,projectName:t,activePath:n,onFileClick:r},e.path))})]})}return(0,R.jsxs)(M,{className:`text-xs gap-1.5 cursor-pointer ${a?`bg-muted`:``}`,onSelect:e=>{},onClick:t=>{r(e.path,t)},children:[(0,R.jsx)(i,{className:`size-3.5 shrink-0 text-muted-foreground`}),(0,R.jsx)(`span`,{className:`truncate`,children:e.name})]})}function q({active:e,onClick:t,icon:n,label:r,title:i}){return(0,R.jsxs)(`button`,{type:`button`,title:i,onClick:t,className:`flex items-center gap-1 px-2 py-1 rounded text-xs transition-colors ${e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:[(0,R.jsx)(n,{className:`size-3`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:r})]})}function St({ext:e,mdMode:t,onMdModeChange:n,csvMode:r,onCsvModeChange:i,wordWrap:o,onToggleWordWrap:s,inlineBlame:c,onToggleInlineBlame:l,blameStale:u,onRefresh:f,refreshing:ee,filePath:te,projectName:ne,className:m}){return(0,R.jsxs)(`div`,{className:m,children:[(e===`md`||e===`mdx`)&&n&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(q,{active:t===`edit`,onClick:()=>n(`edit`),icon:p,label:`Edit`}),(0,R.jsx)(q,{active:t===`preview`,onClick:()=>n(`preview`),icon:se,label:`Preview`})]}),e===`csv`&&i&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(q,{active:r===`table`,onClick:()=>i(`table`),icon:d,label:`Table`}),(0,R.jsx)(q,{active:r===`raw`,onClick:()=>i(`raw`),icon:p,label:`Raw`})]}),(0,R.jsx)(q,{active:o,onClick:s,icon:_,label:`Wrap`}),l&&(0,R.jsx)(q,{active:c===!0,onClick:l,icon:a,label:`Blame`,title:c&&u?`Blame is hidden until this file is saved — the line numbers have moved`:`Inline blame (Alt+B)`}),f&&(0,R.jsxs)(`button`,{type:`button`,onClick:f,disabled:ee,title:`Reload file from disk`,className:`flex items-center gap-1 px-2 py-1 rounded text-xs text-muted-foreground hover:text-foreground transition-colors disabled:opacity-50`,children:[(0,R.jsx)(ae,{className:`size-3 ${ee?`animate-spin`:``}`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:`Refresh`})]}),te&&ne&&(0,R.jsx)(q,{active:!1,onClick:()=>j(ne,te),icon:b,label:`Download`})]})}function Ct({filePath:e,projectName:t,revision:n}){let[r,i]=(0,L.useState)(),[a,o]=(0,L.useState)();return(0,L.useEffect)(()=>{let n=new AbortController;i(void 0),o(void 0);let r=setTimeout(()=>n.abort(Error(`Preview request timed out. Try Refresh.`)),3e4),a=!0;return C.post(`/api/html-preview`,{filePath:e,projectName:t},{signal:n.signal}).then(e=>{a&&i(e.url)}).catch(e=>{a&&o(e instanceof Error?e.message:`Could not open HTML preview`)}).finally(()=>clearTimeout(r)),()=>{a=!1,clearTimeout(r),n.abort()}},[e,t,n]),a?(0,R.jsxs)(`div`,{role:`alert`,className:`p-4 text-sm text-destructive`,children:[a,`. Use Refresh to retry.`]}):r?(0,R.jsx)(`iframe`,{title:`HTML preview`,src:r,sandbox:`allow-scripts`,referrerPolicy:`no-referrer`,className:`flex-1 min-h-0 w-full border-0 bg-white`}):(0,R.jsxs)(`div`,{role:`status`,className:`flex flex-1 items-center justify-center gap-2 text-sm text-muted-foreground`,children:[(0,R.jsx)(x,{className:`size-5 animate-spin`}),`Loading preview…`]})}var wt=[{id:`plaintext`,label:`Plain Text`},{id:`javascript`,label:`JavaScript`},{id:`typescript`,label:`TypeScript`},{id:`sql`,label:`SQL`},{id:`json`,label:`JSON`},{id:`xml`,label:`XML`},{id:`html`,label:`HTML`},{id:`css`,label:`CSS`},{id:`python`,label:`Python`},{id:`markdown`,label:`Markdown`},{id:`yaml`,label:`YAML`},{id:`shell`,label:`Shell`},{id:`dotenv`,label:`Dotenv`}];function Tt({value:e,onChange:t}){return(0,R.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,R.jsx)(h,{className:`size-3 text-muted-foreground`}),(0,R.jsx)(`select`,{value:e,onChange:e=>t(e.target.value),className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[120px]`,title:`Select editor language`,children:wt.map(e=>(0,R.jsx)(`option`,{value:e.id,children:e.label},e.id))})]})}var J=`flex items-center justify-center gap-1.5 rounded px-2 min-h-11 min-w-11 md:min-h-7 md:min-w-7 text-xs text-muted-foreground hover:text-foreground hover:bg-muted`,Y=`min-h-11 md:min-h-8 px-2`,Et=`${Y} pr-8 [&>span]:left-auto [&>span]:right-2`;function Dt(e){let{mode:t,onModeChange:n,onRefresh:r,unsaved:o,breadcrumb:s}=e;return(0,R.jsxs)(`div`,{className:`flex items-center gap-2 md:gap-1 border-b border-border bg-background px-2 shrink-0 h-12 md:h-8`,role:`toolbar`,"aria-label":`HTML preview`,children:[(0,R.jsx)(`div`,{className:`hidden md:flex flex-1 min-w-0 overflow-hidden`,children:s}),t===`preview`&&(0,R.jsx)(`button`,{type:`button`,onClick:r,title:`Reload the original HTML file`,"aria-label":`Refresh preview`,className:J,children:(0,R.jsx)(ae,{className:`size-4`})}),[[`edit`,`Code`,p],[`preview`,`Preview`,se]].map(([e,r,i])=>(0,R.jsxs)(`button`,{type:`button`,"aria-pressed":t===e,onClick:()=>n(e),className:`${J} ${t===e?`bg-muted text-foreground`:``}`,children:[(0,R.jsx)(i,{className:`size-3.5`}),r]},e)),o&&(0,R.jsx)(`span`,{role:`status`,title:`Preview uses the saved file`,"aria-label":`Preview uses the saved file`,className:`text-amber-500 text-xs`,children:`●`}),(0,R.jsxs)(N,{children:[(0,R.jsx)(F,{asChild:!0,children:(0,R.jsx)(`button`,{type:`button`,title:`More HTML actions`,"aria-label":`More HTML actions`,className:`${J} ml-auto md:ml-0`,children:(0,R.jsx)(i,{className:`size-4`})})}),(0,R.jsxs)(A,{align:`end`,className:`w-52`,children:[t===`edit`&&(0,R.jsxs)(M,{className:Y,disabled:o||e.refreshing,onSelect:e.onReloadCode,children:[(0,R.jsx)(ae,{}),`Reload code from disk`]}),(0,R.jsxs)(M,{className:Y,onSelect:()=>void j(e.projectName??``,e.filePath),children:[(0,R.jsx)(b,{}),`Download`]}),(0,R.jsx)(Oe,{}),(0,R.jsxs)(k,{className:Et,checked:e.wordWrap,onCheckedChange:e.onToggleWordWrap,children:[(0,R.jsx)(_,{className:`size-4 text-muted-foreground`}),`Word wrap`]}),e.onToggleInlineBlame&&(0,R.jsxs)(k,{className:Et,checked:e.inlineBlame,onCheckedChange:e.onToggleInlineBlame,children:[(0,R.jsx)(a,{className:`size-4 text-muted-foreground`}),`Inline blame`]}),e.onToggleLsp&&(0,R.jsxs)(k,{className:Et,checked:e.lspEnabled,onCheckedChange:e.onToggleLsp,children:[(0,R.jsx)(u,{className:`size-4 text-muted-foreground`}),`Language server`]}),(0,R.jsxs)(P,{children:[(0,R.jsxs)(Ae,{className:`${Y} gap-2`,children:[(0,R.jsx)(h,{className:`size-4 text-muted-foreground`}),`Editor language`]}),(0,R.jsx)(I,{className:`max-h-80 overflow-y-auto`,children:(0,R.jsx)(Ne,{value:e.language,onValueChange:e.onLanguageChange,children:wt.map(e=>(0,R.jsx)(je,{className:`min-h-11 md:min-h-8`,value:e.id,children:e.label},e.id))})})]})]})]})]})}function Ot({open:e,defaultName:t,content:n,onSave:r,onCancel:i}){let[a,o]=(0,L.useState)(t),[s,c]=(0,L.useState)(!1),[l,u]=(0,L.useState)(``),d=me(e=>e.activeProject),f=(0,L.useCallback)(()=>{let e=a.trim();if(!e){u(`Filename cannot be empty`);return}if(/[/\\]/.test(e)){u(`Filename cannot contain / or \\`);return}u(``),c(!0)},[a]),p=(0,L.useCallback)(e=>{let t=e.includes(`\\`)?`\\`:`/`;r(e.endsWith(t)?`${e}${a.trim()}`:`${e}${t}${a.trim()}`,n)},[a,n,r]);return s?(0,R.jsx)(Le,{open:!0,mode:`folder`,root:d?.path,title:`Save "${a.trim()}" to...`,onSelect:p,onCancel:()=>c(!1)}):(0,R.jsx)(Se,{open:e,onOpenChange:e=>{e||i()},children:(0,R.jsxs)(be,{className:`sm:max-w-md`,children:[(0,R.jsx)(ve,{children:(0,R.jsx)(xe,{children:`Save As`})}),(0,R.jsxs)(`div`,{className:`flex flex-col gap-2 py-2`,children:[(0,R.jsx)(`label`,{className:`text-sm text-muted-foreground`,children:`Filename`}),(0,R.jsx)(we,{value:a,onChange:e=>{o(e.target.value),u(``)},onKeyDown:e=>{e.key===`Enter`&&f()},placeholder:`e.g. my-file.ts`,autoFocus:!0}),l&&(0,R.jsx)(`p`,{className:`text-xs text-destructive`,children:l})]}),(0,R.jsxs)(ye,{children:[(0,R.jsx)(_e,{variant:`outline`,onClick:i,children:`Cancel`}),(0,R.jsx)(_e,{onClick:f,children:`Choose Folder...`})]})]})})}var kt=typeof window<`u`&&window.isSecureContext,At=[`(`,`)`,`{`,`}`,`[`,`]`,`<`,`>`,`;`,`:`,`=`,`"`,`'`,"`",`/`,`\\`,`_`,`#`],X=`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,jt=`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,Mt=`w-px h-5 bg-border mx-0.5 shrink-0`;function Nt({editorRef:e,readOnly:t,wrapOn:n,onToggleWrap:r}){let i=(0,L.useCallback)(()=>e.current,[e]),a=(0,L.useCallback)(e=>{let t=i();if(!t)return;t.focus();let n=t.getSelection();n&&t.executeEdits(`mobile-toolbar`,[{range:n,text:e}])},[i]),[o,l]=(0,L.useState)(!1),u=(0,L.useRef)(null),d=(0,L.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&a(e)}catch{}},[a]),f=(0,L.useCallback)(()=>{l(!0),requestAnimationFrame(()=>u.current?.focus())},[]),p=(0,L.useCallback)(e=>{e.preventDefault();let t=e.clipboardData.getData(`text/plain`);t&&(l(!1),a(t))},[a]),ee=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`undo`,null))},[i]),te=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`redo`,null))},[i]),ne=(0,L.useCallback)(()=>{let e=i();e&&(e.focus(),e.trigger(`mobile-toolbar`,`tab`,null))},[i]);return t?null:(0,R.jsxs)(`div`,{className:`shrink-0 border-t border-border bg-surface`,children:[!kt&&o&&(0,R.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1.5 border-b border-border bg-muted/50`,children:[(0,R.jsx)(`textarea`,{ref:u,onPaste:p,placeholder:`Long-press here → Paste`,className:`flex-1 h-8 rounded border border-border bg-background text-foreground text-xs px-2 py-1.5 resize-none focus:outline-none focus:ring-1 focus:ring-primary`}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>l(!1),className:`p-1.5 rounded text-muted-foreground active:bg-muted transition-colors`,children:(0,R.jsx)(c,{size:14})})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 overflow-x-auto`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:kt?d:f,className:X,title:`Paste`,children:(0,R.jsx)(g,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:ee,className:X,title:`Undo`,children:(0,R.jsx)(s,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:te,className:X,title:`Redo`,children:(0,R.jsx)(y,{size:14})}),(0,R.jsx)(`button`,{type:`button`,onClick:r,className:`${X} ${n?`text-primary`:``}`,title:n?`Wrapping long lines — tap to scroll sideways instead`:`Wrap long lines`,children:(0,R.jsx)(_,{size:14})}),(0,R.jsx)(`div`,{className:Mt}),(0,R.jsx)(`button`,{type:`button`,onClick:ne,className:jt,children:`Tab`}),(0,R.jsx)(`div`,{className:Mt}),At.map(e=>(0,R.jsx)(`button`,{type:`button`,onClick:()=>a(e),className:jt,children:e},e))]})]})}var Pt=(0,L.lazy)(()=>T(()=>import(`./markdown-renderer-CTtDap-l.js`).then(e=>({default:e.MarkdownRenderer})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]))),Ft=(0,L.lazy)(()=>T(()=>import(`./editor-language-service-COqB2tuv.js`).then(e=>({default:e.EditorLanguageService})),__vite__mapDeps([42,2,1,3,10,43,5,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,44]))),It=(0,L.lazy)(()=>T(()=>import(`./csv-preview-COYdTABa.js`).then(e=>({default:e.CsvPreview})),__vite__mapDeps([45,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,46,47]))),Lt=(0,L.lazy)(()=>T(()=>import(`./image-preview-CjNhpfWw.js`).then(e=>({default:e.ImagePreview})),__vite__mapDeps([48,1,2,3,10,49,20]))),Rt=(0,L.lazy)(()=>T(()=>import(`./pdf-preview-c-L_kDAs.js`).then(e=>({default:e.PdfPreview})),__vite__mapDeps([50,2,1,3,10,20]))),zt=(0,L.lazy)(()=>T(()=>import(`./video-preview-D6Jw-IZK.js`).then(e=>({default:e.VideoPreview})),__vite__mapDeps([51,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,52,53]))),Bt=(0,L.lazy)(()=>T(()=>import(`./audio-preview-BfES4Cx5.js`).then(e=>({default:e.AudioPreview})),__vite__mapDeps([54,2,1,3,8,10,20,53]))),Vt=(0,L.lazy)(()=>T(()=>import(`./docx-preview-C2QqNGRE.js`).then(e=>({default:e.DocxPreview})),__vite__mapDeps([55,2,1,3,10,20])));function Ht(e){return e.split(`.`).pop()?.toLowerCase()??``}function Ut(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,sql:`sql`}[Ht(e)]??(He(e)?`dotenv`:`plaintext`)}var Wt=(0,L.memo)(function({metadata:e,tabId:t}){let n=e?.filePath,r=e?.projectName,i=e?.inlineContent,a=e?.inlineLanguage,[o,s]=(0,L.useState)(i??null),[c,l]=(0,L.useState)(`utf-8`),[u,d]=(0,L.useState)(!0),[p,m]=(0,L.useState)(null),[re,ae]=(0,L.useState)(null),oe=D(e=>e.activeTabId),[se,ce]=(0,L.useState)(0);(0,L.useEffect)(()=>{let e=()=>ce(e=>e+1);return window.addEventListener(`ppm:onboarding-refresh`,e),()=>window.removeEventListener(`ppm:onboarding-refresh`,e)},[]);let[h,g]=(0,L.useState)(!1),_=(0,L.useRef)(null),v=(0,L.useRef)(``),y=(0,L.useRef)(null),[b,le]=(0,L.useState)(null),{tabs:ue,updateTab:S}=D(Fe(e=>({tabs:e.tabs,updateTab:e.updateTab}))),{wordWrap:de,toggleWordWrap:me,mobileWordWrap:O,toggleMobileWordWrap:_e}=w(Fe(e=>({wordWrap:e.wordWrap,toggleWordWrap:e.toggleWordWrap,mobileWordWrap:e.mobileWordWrap,toggleMobileWordWrap:e.toggleMobileWordWrap}))),ve=w(e=>e.inlineBlame),ye=w(e=>e.toggleInlineBlame),be=w(e=>e.lspEnabled),xe=w(e=>e.setLspEnabled),Se=he(),Ce=Ie(),we=Se?O:de,Oe=Se?_e:me,Ae=Re(),k=e?.isUntitled===!0,A=e?.unsavedContent,[je,Me]=(0,L.useState)(!1),Ne=ue.find(e=>e.id===t),j=n?Ht(n):``,M=Ge.has(j),N=j===`pdf`,P=j===`docx`,Le=We.has(j),F=qe.has(j),I=Ke.has(j),He=j===`md`||j===`mdx`,Qe=(j===`html`||j===`htm`)&&!k&&i==null,[$e,et]=(0,L.useState)(`preview`),[tt,nt]=(0,L.useState)(0),[rt,it]=(0,L.useState)(!1),z=Qe&&$e===`preview`,at=j===`csv`,ot=e?.language,B=a??ot??Ut(n??``),V=B===`sql`,[lt,ut]=(0,L.useState)(`preview`),[dt,ft]=(0,L.useState)(`table`),{connections:H,cachedTables:pt,refreshTables:mt,updateConnection:ht}=ke(),U=n?`ppm:sql-conn:${n}`:t?`ppm:sql-conn:tab:${t}`:null,[W,gt]=(0,L.useState)(()=>{if(!U)return null;let e=localStorage.getItem(U);return e?Number(e):null}),_t=(0,L.useRef)(null),G=(0,L.useRef)(null),K=(0,L.useMemo)(()=>H.find(e=>e.id===W)??null,[H,W]),vt=i!=null&&(a===`json`||a===`xml`),[bt,xt]=(0,L.useState)(!1),q=(0,L.useCallback)(()=>{if(i)if(bt)s(i),xt(!1);else{let e=i.trimStart();if(a===`json`)try{s(JSON.stringify(JSON.parse(e),null,2)),xt(!0)}catch{}else if(a===`xml`){let t=0;s(e.replace(/(>)(<)(\/*)/g,`$1
|
|
3
|
+
$2$3`).split(`
|
|
4
|
+
`).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.includes(`</`)&&t++,r}).join(`
|
|
5
|
+
`)),xt(!0)}}},[i,a,bt]),wt=(0,L.useCallback)(e=>{gt(e),U&&localStorage.setItem(U,String(e)),mt(e).catch(()=>{})},[U,mt]),J=(0,L.useCallback)(n=>{t&&S(t,{metadata:{...e,language:n}})},[t,e,S]),Y=(0,L.useMemo)(()=>{if(!V||!W)return;let e=(pt.get(W)??[]).map(e=>({name:e.tableName,schema:e.schemaName}));if(e.length!==0)return{tables:e,getColumns:async(e,t)=>C.get(`/api/db/connections/${W}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[V,W,pt]);(0,L.useEffect)(()=>{if(!(!_t.current||!Y))return G.current?.dispose(),Ze(),G.current=_t.current.languages.registerCompletionItemProvider(`sql`,Ye(_t.current,Y)),()=>{G.current?.dispose()}},[Y]);let Et=D(e=>e.openTab),[kt,At]=(0,L.useState)(null),[X,jt]=(0,L.useState)(null),[Mt,Pt]=(0,L.useState)(!1),[Wt,Gt]=(0,L.useState)(``),Yt=(0,L.useCallback)(async e=>{if(K){Pt(!0),jt(null),Gt(e);try{At(await C.post(`/api/db/connections/${K.id}/query`,{sql:e}))}catch(e){jt(e.message),At(null)}finally{Pt(!1)}}},[K]),Xt=(0,L.useCallback)(()=>{!K||!Wt||Et({type:`database`,title:`${K.name} · Query`,projectId:null,closable:!0,metadata:{connectionId:K.id,connectionName:K.name,dbType:K.type,initialSql:Wt}})},[K,Et,Wt]),Zt=(0,L.useCallback)(()=>{if(!y.current||!K)return;let e=y.current,t=e.getSelection();Yt(t&&!t.isEmpty()?e.getModel()?.getValueInRange(t)??e.getValue():e.getValue())},[K,Yt]),Qt=typeof window<`u`&&`ontouchstart`in window,$t=(0,L.useRef)(null),[en,tn]=(0,L.useState)(null);(0,L.useEffect)(()=>{if(!Qt)return;let e=window.visualViewport;if(!e)return;let t=()=>{let t=$t.current;if(!t)return;let n=t.getBoundingClientRect().top;tn(e.height-Math.max(0,n))};return e.addEventListener(`resize`,t),e.addEventListener(`scroll`,t),()=>{e.removeEventListener(`resize`,t),e.removeEventListener(`scroll`,t)}},[Qt]),(0,L.useEffect)(()=>Pe($t.current,()=>y.current?.layout()),[u,p]);let Z=(0,L.useRef)([]),nn=(0,L.useRef)(Yt);nn.current=Yt,(0,L.useEffect)(()=>()=>{Z.current.forEach(e=>e.dispose()),Z.current=[]},[]),(0,L.useEffect)(()=>{I&&t&&S(t,{type:`sqlite`})},[I,t,S]);let Q=n?/^(\/|[A-Za-z]:[/\\])/.test(n):!1;(0,L.useEffect)(()=>{if(!r||!n||!t||oe!==t||u||p||!b||re!==`${r}:${n}`||i!=null||k||I||c===`base64`||z||M||N||P||Le||F||He&<===`preview`||at&&dt===`table`)return;let e=b.editor.getDomNode(),a=!!e?.isConnected&&!!e.checkVisibility({checkOpacity:!0,checkVisibilityCSS:!0});a&&Ee({type:`file-ready`,projectName:r,tabId:t,visible:a,isRunDocument:/^(readme(?:\..*)?|package\.json)$/i.test(E(n))})},[se,r,n,t,oe,u,p,b,re,i,k,I,c,M,N,P,Le,F,He,lt,at,dt,z]),(0,L.useEffect)(()=>{if(i!=null){d(!1);return}if(k){s(A??``),v.current=A??``,d(!1),A&&g(!0);return}if(!n||!Q&&!r)return;if(M||N||P||Le||F){d(!1);return}d(!0),m(null),ae(null);let e=!1,t=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;return C.get(t).then(t=>{e||(s(t.content),l(t.encoding??`utf-8`),ae(`${r}:${n}`),v.current=t.content,d(!1))}).catch(t=>{e||(m(t instanceof Error?t.message:`Failed to load file`),d(!1))}),()=>{e=!0,_.current&&clearTimeout(_.current)}},[n,r,M,N,P,Q,k]);let[rn,an]=(0,L.useState)(!1),on=(0,L.useCallback)(()=>{if(!n||i!=null||k||!Q&&!r)return;let e=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;an(!0),C.get(e).then(e=>{s(e.content),v.current=e.content,e.encoding&&l(e.encoding),g(!1),m(null)}).catch(e=>m(e instanceof Error?e.message:`Failed to reload file`)).finally(()=>an(!1))},[n,r,Q,i,k]),sn=(0,L.useRef)(h);sn.current=h,(0,L.useEffect)(()=>{if(!n||!r||i!=null||k)return;let e=e=>{let t=e.detail;if(t.projectName!==r||t.path!==n||sn.current)return;let i=Q?`/api/fs/read?path=${encodeURIComponent(n)}`:`${fe(r)}/files/read?path=${encodeURIComponent(n)}`;C.get(i).then(e=>{e.content!==v.current&&(s(e.content),v.current=e.content,e.encoding&&l(e.encoding))}).catch(()=>{})};return window.addEventListener(`file:changed`,e),()=>window.removeEventListener(`file:changed`,e)},[n,r,Q,i,k]),(0,L.useEffect)(()=>{if(!Ne||i!=null)return;let t=k?`Untitled-${e?.untitledNumber??1}`:n?E(n):`Untitled`,r=h?`${t} \u25CF`:t;Ne.title!==r&&S(Ne.id,{title:r})},[h]);let cn=!k&&i==null&&!!n&&!!r&&!Se,ln=Ve({editor:b?.editor??null,monaco:b?.monaco??null,projectName:r,filePath:cn?n:void 0,enabled:ve&&cn}),un=!k&&!Q&&i==null&&!!n&&!!r,dn=be&&!Ce,fn=dn&&un&&!z,[pn,mn]=(0,L.useState)({status:null,diagnostics:[]}),hn=(0,L.useCallback)(e=>mn(e),[]),gn=(0,L.useCallback)(async e=>{if(n&&!(!Q&&!r))try{Q?await C.put(`/api/fs/write`,{path:n,content:e}):await C.put(`${fe(r)}/files/write`,{path:n,content:e}),g(!1),ln.refresh(),fn&&r&&n&&T(()=>import(`./use-lsp-BpJmvQ0n.js`).then(t=>t.notifyLspSave(r,n,e)),__vite__mapDeps([43,2,5,6,1,3,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,44]))}catch{}},[n,r,Q,fn,ln.refresh]);function _n(n){let r=n??``;s(r),v.current=r,g(!0),_.current&&clearTimeout(_.current),k?_.current=setTimeout(()=>{t&&S(t,{metadata:{...e,unsavedContent:v.current}})},2e3):_.current=setTimeout(()=>gn(v.current),1e3)}let vn=(0,L.useCallback)(async(e,n)=>{try{if(_.current&&clearTimeout(_.current),await C.put(`/api/fs/write`,{path:e,content:n}),t){let{closeTab:n,openTab:r}=pe.getState();n(t),r({type:`editor`,title:E(e),projectId:null,metadata:{filePath:e},closable:!0})}g(!1),Me(!1)}catch{}},[t]),$=e?.lineNumber,yn=e?.endLine,bn=e?.revealAt,xn=(0,L.useCallback)(()=>{let e=y.current;if(!(!e||!$||$<=0)){if(e.revealLineInCenter($),e.setPosition({lineNumber:$,column:1}),yn&&yn>=$){let t=e.getModel(),n=t?.getLineCount()??$,r=Math.min(yn,n),i=t?.getLineMaxColumn(r)??1;e.setSelection({startLineNumber:$,startColumn:1,endLineNumber:r,endColumn:i})}e.focus()}},[$,yn]);(0,L.useEffect)(()=>{bn!=null&&xn()},[bn,xn]),(0,L.useEffect)(()=>{let e=b?.monaco;e&&st(dn,e.languages.typescript.typescriptDefaults,e.languages.typescript.javascriptDefaults)},[b,dn]);let Sn=(0,L.useCallback)((e,t)=>{if(y.current=e,_t.current=t,le({editor:e,monaco:t}),$&&$>0&&setTimeout(()=>xn(),100),k&&e.addCommand(t.KeyMod.CtrlCmd|t.KeyCode.KeyS,()=>Me(!0)),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyZ,()=>{let e=w.getState();ge()?e.toggleMobileWordWrap():e.toggleWordWrap()}),e.addCommand(t.KeyMod.Alt|t.KeyCode.KeyB,()=>w.getState().toggleInlineBlame()),Y&&(G.current?.dispose(),G.current=t.languages.registerCompletionItemProvider(`sql`,Ye(t,Y))),V){e.addAction({id:`run-sql-at-cursor`,label:`Run Statement at Cursor`,keybindings:[t.KeyMod.CtrlCmd|t.KeyCode.Enter],run:e=>{let t=e.getPosition();if(!t)return;let n=Je(e.getValue(),t.lineNumber);n&&nn.current(n)}}),Z.current.forEach(e=>e.dispose()),Z.current=[];let n=e.getModel(),r=e.addCommand(0,(e,t)=>{t&&nn.current(t)});if(r&&n){let e=t.languages.registerCodeLensProvider(`sql`,{provideCodeLenses:e=>{if(e!==n)return{lenses:[],dispose:()=>{}};let t=[],i=(e,n,i=`▷ Run`)=>{let a=n.trim();a&&t.push({range:{startLineNumber:e,startColumn:1,endLineNumber:e,endColumn:1},command:{id:r,title:i,arguments:[a]}})},a=/^(BEGIN|COMMIT|ROLLBACK|END)(;|\s|$)/i,o=-1,s=[];for(let{sql:t,startLine:n}of Xe(e.getValue())){let e=/^BEGIN(;|\s|$)/i.test(t),r=/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(t);o===-1&&e?(o=n,s=[t]):o>-1?(s.push(t),!r&&!a.test(t)&&i(n,t),r&&(i(o,s.join(`
|
|
6
|
+
`),`▷ Run Transaction`),o=-1,s=[])):i(n,t)}return o>-1&&s.length>1&&i(o,s.join(`
|
|
7
|
+
`),`▷ Run Transaction`),{lenses:t,dispose:()=>{}}}});Z.current.push(e);let i=t.languages.registerFoldingRangeProvider(`sql`,{provideFoldingRanges:e=>{if(e!==n)return[];let r=[],i=e.getLineCount(),a=[];for(let n=1;n<=i;n++){let i=e.getLineContent(n).trim();if(/^BEGIN(;|\s|$)/i.test(i))a.push(n);else if(/^(COMMIT|ROLLBACK|END)(;|\s|$)/i.test(i)&&a.length>0){let e=a.pop();r.push({start:e,end:n,kind:t.languages.FoldingRangeKind.Region})}}return r}});Z.current.push(i)}}},[Y,V]);if(!i&&!k&&(!n||!Q&&!r))return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No file selected.`});if(u)return(0,R.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,R.jsx)(x,{className:`size-5 animate-spin`}),(0,R.jsx)(`span`,{className:`text-sm`,children:`Loading file...`})]});if(p)return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full text-error text-sm`,children:p});if(M)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Lt,{filePath:n,projectName:r})});if(N)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Rt,{filePath:n,projectName:r})});if(P)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Vt,{filePath:n,projectName:r})});if(Le)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(zt,{filePath:n,projectName:r})});if(F)return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(qt,{}),children:(0,R.jsx)(Bt,{filePath:n,projectName:r})});if(c===`base64`)return(0,R.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,R.jsx)(ne,{className:`size-10 text-text-subtle`}),(0,R.jsx)(`p`,{className:`text-sm`,children:`This file is a binary format and cannot be displayed.`}),(0,R.jsx)(`p`,{className:`text-xs text-text-subtle`,children:n})]});let Cn=V?(0,R.jsxs)(`div`,{className:`shrink-0 flex items-center gap-1 px-2 border-l border-border`,children:[(0,R.jsx)(te,{className:`size-3 text-muted-foreground`}),(0,R.jsxs)(`select`,{value:W??``,onChange:e=>{let t=Number(e.target.value);t&&wt(t)},className:`h-5 text-[10px] bg-transparent border border-border rounded px-1 text-foreground outline-none max-w-[140px]`,title:`Select connection for autocomplete`,children:[(0,R.jsx)(`option`,{value:``,children:`Connection…`}),H.map(e=>(0,R.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,R.jsx)(`button`,{type:`button`,onClick:Zt,disabled:!K,className:`p-0.5 rounded text-muted-foreground hover:text-primary disabled:opacity-30 transition-colors`,title:`Run SQL`,children:(0,R.jsx)(f,{className:`size-3.5`})}),K&&(0,R.jsx)(`button`,{type:`button`,onClick:()=>ht(K.id,{readonly:K.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${K.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:K.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:K.readonly?(0,R.jsx)(ie,{className:`size-3`}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ee,{className:`size-3`}),(0,R.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})})]}):null;return(0,R.jsxs)(`div`,{ref:$t,"data-onboarding":`file`,className:`flex flex-col h-full w-full overflow-hidden`,style:en?{height:`${en}px`,maxHeight:`${en}px`}:void 0,children:[fn&&b&&n&&r&&(0,R.jsx)(L.Suspense,{fallback:null,children:(0,R.jsx)(Ft,{editor:b.editor,monaco:b.monaco,projectName:r,filePath:n,onState:hn})}),i!=null&&vt&&(0,R.jsx)(`div`,{className:`flex items-center h-7 border-b border-border bg-background shrink-0 px-2 gap-2`,children:(0,R.jsx)(`button`,{type:`button`,onClick:q,className:`text-[10px] px-2 py-0.5 rounded border border-border hover:bg-muted transition-colors text-foreground`,children:bt?`Raw`:`Beautify`})}),!Qe&&n&&r&&t&&(0,R.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0`,children:[(0,R.jsx)(yt,{filePath:n,projectName:r,tabId:t,className:`flex items-center flex-1 min-w-0 overflow-x-auto scrollbar-none px-2 gap-0.5`}),un&&!Ce&&(0,R.jsx)(ct,{enabled:dn,onToggle:xe,status:pn.status,diagnostics:pn.diagnostics,onInstall:pn.install}),(0,R.jsx)(Tt,{value:B,onChange:J}),Cn,(0,R.jsx)(St,{ext:j,mdMode:lt,onMdModeChange:ut,csvMode:dt,onCsvModeChange:ft,wordWrap:we,onToggleWordWrap:Oe,inlineBlame:ve,onToggleInlineBlame:cn?ye:void 0,blameStale:ln.stale,onRefresh:on,refreshing:rn,filePath:n,projectName:r,className:`shrink-0 flex items-center gap-1 px-2`})]}),!Qe&&i==null&&t&&(k||n&&!r)&&(0,R.jsxs)(`div`,{className:`hidden md:flex items-center h-7 border-b border-border bg-background shrink-0 px-2`,children:[(0,R.jsx)(`span`,{className:`text-xs text-muted-foreground truncate flex-1`,children:k?`Untitled-${e?.untitledNumber??1}`:n?E(n):`Untitled`}),(0,R.jsx)(Tt,{value:B,onChange:J}),Cn]}),Qe&&n&&(0,R.jsx)(Dt,{mode:$e,onModeChange:e=>{e===`edit`&&it(!0),et(e)},onRefresh:()=>{et(`preview`),nt(e=>e+1)},unsaved:h,onReloadCode:on,refreshing:rn,breadcrumb:r&&t?(0,R.jsx)(yt,{filePath:n,projectName:r,tabId:t,className:`flex items-center min-w-0 overflow-x-auto scrollbar-none gap-0.5`}):(0,R.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:E(n)}),filePath:n,projectName:r,wordWrap:we,onToggleWordWrap:Oe,inlineBlame:ve,onToggleInlineBlame:cn?ye:void 0,language:B,onLanguageChange:J,lspEnabled:dn,onToggleLsp:un&&!Ce?xe:void 0}),z&&n&&(0,R.jsx)(Ct,{filePath:n,projectName:r,revision:tt}),z&&!rt?null:at&&dt===`table`?(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})}),children:(0,R.jsx)(It,{content:o??``,onContentChange:_n,wordWrap:we})}):He&<===`preview`?(0,R.jsx)(Jt,{content:o??``,projectName:r,filePath:n,tabId:t,ready:!u&&!p&&re===`${r}:${n}`&&i==null&&!k}):(0,R.jsx)(`div`,{className:z?`hidden`:`flex-1 overflow-hidden min-h-0`,children:(0,R.jsx)(Te,{height:`100%`,language:B,beforeMount:e=>{De(e),Ue(e)},value:o??``,onChange:i==null?_n:void 0,onMount:Sn,theme:Ae,options:{fontSize:14,fontFamily:Be,fontLigatures:ze,wordWrap:we?`on`:`off`,minimap:{enabled:!1},scrollBeyondLastLine:!1,automaticLayout:!0,lineNumbers:`on`,folding:!0,bracketPairColorization:{enabled:!0},readOnly:i!=null,quickSuggestions:{other:!0,comments:!1,strings:!1},suggestOnTriggerCharacters:!0,acceptSuggestionOnEnter:`on`,suggestSelection:`first`,parameterHints:{enabled:!0},inlayHints:{enabled:`on`},"semanticHighlighting.enabled":!0,stickyScroll:{enabled:!Qt},peekWidgetDefaultFocus:`editor`},loading:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})},B)}),V&&(kt||X||Mt)&&(0,R.jsx)(Kt,{result:kt,error:X,loading:Mt,connName:K?.name,onClose:()=>{At(null),jt(null),Pt(!1)},onOpenInTab:Xt}),Qt&&!z&&(0,R.jsx)(Nt,{editorRef:y,readOnly:i!=null,wrapOn:we,onToggleWrap:Oe}),je&&(0,R.jsx)(Ot,{open:je,defaultName:`Untitled-${e?.untitledNumber??1}`,content:v.current,onSave:vn,onCancel:()=>Me(!1)})]})}),Gt=()=>{};function Kt({result:e,error:t,loading:n,connName:r,onClose:i,onOpenInTab:a}){let o=(0,L.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),s=(0,L.useMemo)(()=>(e?.columns??[]).map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null})),[e?.columns]),[u,d]=(0,L.useState)(250),f=(0,L.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=u,r=e.currentTarget.ownerDocument,i=e=>d(Math.max(80,n+(t-e.clientY))),a=()=>{r.removeEventListener(`mousemove`,i),r.removeEventListener(`mouseup`,a)};r.addEventListener(`mousemove`,i),r.addEventListener(`mouseup`,a)},[u]);return(0,R.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:u},children:[(0,R.jsx)(`div`,{onMouseDown:f,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,R.jsx)(l,{className:`size-3 text-muted-foreground/50`})}),(0,R.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,R.jsx)(te,{className:`size-3 text-muted-foreground`}),(0,R.jsxs)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:[r?`${r} · Results`:`Query Results`,e?.executionTimeMs!=null&&(0,R.jsxs)(`span`,{className:`text-muted-foreground ml-1.5 font-normal`,children:[e.executionTimeMs,`ms`]})]}),(0,R.jsxs)(`button`,{type:`button`,onClick:a,title:`Open in DB Viewer tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,R.jsx)(m,{className:`size-3`}),(0,R.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,R.jsx)(`button`,{type:`button`,onClick:i,title:`Close results`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,R.jsx)(c,{className:`size-3`})})]}),(0,R.jsxs)(`div`,{className:`flex-1 overflow-hidden min-h-0`,children:[n&&(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-4 animate-spin text-muted-foreground`})}),t&&(0,R.jsx)(`div`,{className:`px-3 py-2 text-xs text-destructive bg-destructive/5`,children:t}),e?.changeType===`modify`&&(0,R.jsxs)(`div`,{className:`px-3 py-2 text-xs text-success`,children:[e.rowsAffected,` row(s) affected`]}),o&&(0,R.jsx)(Qe,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!1,page:1,onPageChange:Gt,onCellUpdate:Gt,readOnly:!0,orderBy:null,orderDir:`ASC`,onToggleSort:Gt,connectionName:r}),e?.changeType===`select`&&e.rows.length===0&&(0,R.jsx)(`div`,{className:`px-3 py-2 text-xs text-muted-foreground`,children:`No results`})]})]})}function qt(){return(0,R.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,R.jsx)(x,{className:`size-5 animate-spin text-text-subtle`})})}function Jt({content:e,...t}){return(0,R.jsx)(L.Suspense,{fallback:(0,R.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded m-4`}),children:(0,R.jsx)(et,{...t,children:(0,R.jsx)(Pt,{content:e,className:`flex-1 overflow-auto p-4`})})})}export{Wt as CodeEditor};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{Dn as r,Jr as i,Mr as a,V as o,Zt as s,ar as c,ct as l,ir as u,lt as d,st as f,un as p}from"./icons-CO_II6D-.js";import{n as m,r as h}from"./api-client-D-SMbdiH.js";import{n as g}from"./use-is-mobile-BClDZJP5.js";import{t as _}from"./button-DeAyLH9U.js";import{a as v,i as y,n as b,o as x,r as S,t as C}from"./dialog-Bocc0Fgb.js";import{t as w}from"./mobile-bottom-sheet-D4UyOatB.js";import{t as T}from"./input-CG8PS8mS.js";import{Et as E,ar as D,gt as O,ir as k,or as A}from"./index-CtAvmybi.js";import{c as j,h as M,i as N,l as P,s as F,t as I,u as L}from"./api-settings-Bv9mLCty.js";function R(e){return e>=90?`text-error`:e>=70?`text-warning`:`text-success`}function z(e){return e>=90?`bg-error`:e>=70?`bg-warning`:`bg-success`}function B(e){if(!e)return null;let t=null;if(e.resetsInMinutes!=null)t=e.resetsInMinutes;else if(e.resetsInHours!=null)t=Math.round(e.resetsInHours*60);else if(e.resetsAt){let n=new Date(e.resetsAt).getTime()-Date.now();t=n>0?Math.ceil(n/6e4):0}if(t==null)return null;if(t<=0)return`now`;let n=Math.floor(t/1440),r=Math.floor(t%1440/60),i=t%60;return n>0?i>0?`${n}d ${r}h ${i}m`:r>0?`${n}d ${r}h`:`${n}d`:r>0?i>0?`${r}h ${i}m`:`${r}h`:`${i}m`}function V(e){if(!e)return null;let t=new Date(e).getTime();return Number.isFinite(t)?new Date(t).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function H(e){let t=e-Date.now();if(t<=0)return`expired`;let n=Math.ceil(t/6e4),r=Math.floor(n/60),i=Math.floor(r/24);return i>0?`${i}d ${r%24}h`:r>0?`${r}h ${n%60}m`:`${n}m`}function U(e){if(!e)return{label:`unknown`,tip:`No account info available`,color:`text-text-subtle`};if(!e.expiresAt)return{label:`key`,tip:`API key (no expiry)`,color:`text-text-subtle`};if(e.reauthRequired)return{label:`sign in again`,tip:`Anthropic rejected this account's refresh token. Sign in again to restore it.`,color:`text-error`};let t=e.expiresAt*1e3<Date.now();return t&&e.hasRefreshToken?{label:`expired`,tip:`Token expired but has refresh token — will auto-renew`,color:`text-warning`}:t?{label:`expired`,tip:`Token expired, no refresh token`,color:`text-error`}:e.hasRefreshToken?{label:`long-lived`,tip:`OAuth token with refresh — long-lived`,color:`text-success`}:{label:`temp`,tip:`Temporary token without refresh — will expire`,color:`text-warning`}}function W(e){if(!e)return null;let t=Math.round((Date.now()-e)/1e3);if(t<5)return`just now`;if(t<60)return`${t}s ago`;let n=Math.floor(t/60);if(n<60)return`${n}m ago`;let r=Math.floor(n/60),i=n%60;return r<24?i>0?`${r}h ${i}m ago`:`${r}h ago`:`${Math.floor(r/24)}d ago`}var G=n();function K({label:e,pct:t,reset:n,resetsAt:r}){let i=V(r);return(0,G.jsxs)(`div`,{className:`space-y-1`,"data-testid":`account-usage-bar`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,G.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:e}),n&&(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsxs)(`span`,{className:`text-[10px] text-text-subtle cursor-default`,children:[`↻ `,n]})}),(0,G.jsx)(D,{side:`top`,children:i?`Resets ${i}`:`Resets in`})]})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`div`,{className:`flex-1 h-2 rounded-full bg-border overflow-hidden`,children:t!=null&&(0,G.jsx)(`div`,{className:`h-full rounded-full transition-all ${z(t)}`,style:{width:`${Math.min(t,100)}%`}})}),(0,G.jsx)(`span`,{className:`text-xs font-medium tabular-nums w-10 text-right ${t==null?`text-text-subtle`:R(t)}`,children:t==null?`—`:`${t}%`})]})]})}function q({label:e,bucket:t}){return t?(0,G.jsx)(K,{label:e,pct:Math.round(t.utilization*100),reset:B(t),resetsAt:t.resetsAt}):null}function J({hint:e,className:t,children:n,onClick:r}){return(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{type:`button`,onClick:r,className:[r?`relative cursor-pointer rounded px-1 -mx-1 underline decoration-dotted underline-offset-2 hover:bg-error/10 after:absolute after:-inset-x-2 after:-inset-y-3 after:content-['']`:`cursor-help`,`text-left`,t].filter(Boolean).join(` `),children:n})}),(0,G.jsx)(D,{side:`top`,className:`max-w-[260px] text-xs leading-relaxed`,children:e})]})}function Y({description:e,onRefresh:t,refreshing:n,disabled:r,actions:i}){return(0,G.jsxs)(`section`,{className:`space-y-2`,children:[(0,G.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e}),(0,G.jsx)(_,{variant:`ghost`,size:`icon`,className:`size-8 shrink-0 cursor-pointer`,onClick:t,disabled:r||n,title:`Refresh`,"aria-label":`Refresh accounts`,children:(0,G.jsx)(u,{className:`size-4 ${n?`animate-spin`:``}`})})]}),(0,G.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:i})]})}function X({message:e,onDismiss:t}){return e?(0,G.jsxs)(`div`,{className:`flex items-start gap-2 text-xs p-2 rounded bg-muted`,role:`status`,children:[(0,G.jsx)(`span`,{className:`flex-1`,children:e}),(0,G.jsx)(`button`,{onClick:t,className:`shrink-0 text-muted-foreground hover:text-foreground cursor-pointer`,"aria-label":`Dismiss message`,children:(0,G.jsx)(i,{className:`size-3.5`})})]}):null}function Z({children:e}){return(0,G.jsx)(`div`,{className:`flex gap-2 overflow-x-auto pb-1 -mx-1 px-1 snap-x snap-mandatory scrollbar-thin`,children:e})}function ee({active:e,flash:t,dense:n,children:r,...i}){return(0,G.jsx)(`div`,{...i,className:[`rounded-md border transition-colors duration-500`,n?`p-2.5 space-y-1.5`:`p-3 space-y-2`,t?`bg-primary/10 border-primary/40`:``,e?`border-primary/30 bg-primary/5`:`border-border/50`,i.className??``].filter(Boolean).join(` `),children:r})}function Q({buckets:e}){return e?.length?(0,G.jsx)(G.Fragment,{children:e.map(e=>(0,G.jsx)(q,{label:`Weekly (${e.label})`,bucket:e},e.label))}):null}function te(e){return new Date(e).toLocaleDateString(void 0,{day:`numeric`,month:`short`})}function ne({credits:e}){if(!e)return null;let t=e.available,n=t===0?`No free resets`:`${t} free reset${t===1?``:`s`}`,r=t===0?`Codex has no free rate-limit resets left for this account.`:`Codex has granted this account ${t} free rate-limit reset${t===1?``:`s`}${e.title?` (${e.title})`:``}.${e.nextExpiresAt?` The next one expires on ${new Date(e.nextExpiresAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}.`:``} A "Use reset" button appears here once a limit is reached; a reset moves the weekly reset date, so spending one earlier wastes it.`;return(0,G.jsxs)(J,{className:`inline-flex items-center gap-1 ${t>0?`text-primary`:``}`,hint:r,children:[(0,G.jsx)(c,{className:`size-3 shrink-0`,"aria-hidden":!0}),n,t>0&&e.nextExpiresAt&&(0,G.jsxs)(`span`,{className:`text-text-subtle`,children:[`· until `,te(e.nextExpiresAt)]})]})}var re={readOnly:`min-w-[220px]`,withActions:`min-w-[300px]`};function ie({entry:e,isActive:t,accountInfo:n,onToggle:r,toggling:i,onDelete:c,onExport:l,onViewProfile:p,flash:m,onSelect:h,unselectableReason:g,selecting:_,planLabel:v,dailyGuard:y,onDailyGuardToggle:b,dailyGuardToggling:x,reauthHint:S,onReauth:C,resetCredits:w,resetCreditAction:T,layout:E=`list`}){let{usage:j}=e,M=j.session||j.weekly||j.weeklyOpus||j.weeklySonnet||j.weeklyScoped?.length,N=n?.status??e.accountStatus,P=!!(n&&!n.hasRefreshToken&&n.expiresAt&&n.expiresAt<Math.floor(Date.now()/1e3)),F=U(n),I=!!n?.reauthRequired||!!S,L=n?.grantExpiresAt?n.grantExpiresAt*1e3:null,R=!!L&&L-Date.now()<5*864e5,z=!!n&&(F.label===`temp`||F.label===`unknown`||F.label===`expired`&&!P&&!I),B=L?new Date(L).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null,V=!!(r||c||l||p),K=P?`Token expired — sign in again`:I?`Sign in again to use this account`:g??null,Y=E===`list`?``:E===`grid`?`flex flex-col justify-evenly overflow-hidden min-h-0`:`shrink-0 snap-start ${V?re.withActions:re.readOnly}`;return(0,G.jsxs)(ee,{active:t,flash:m,dense:E!==`list`,className:[Y,P||I?`opacity-50`:``].filter(Boolean).join(` `)||void 0,"data-testid":`account-card`,"data-account-id":e.accountId,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`span`,{className:`text-sm font-medium truncate flex-1 min-w-0`,children:e.accountLabel??e.accountId.slice(0,8)}),t&&(0,G.jsx)(J,{className:`text-[10px] text-primary shrink-0 font-medium`,hint:`The next turn will run on this account.`,children:`Active`}),h&&!t&&(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{type:`button`,onClick:()=>h(e.accountId),disabled:_,className:[`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors cursor-pointer disabled:cursor-wait`,K?`text-text-subtle hover:text-error hover:bg-error/10`:`text-text-secondary hover:text-foreground hover:bg-surface-elevated`].join(` `),children:_?`Switching…`:`Use`})}),(0,G.jsx)(D,{side:`top`,children:K??`Use this account for this chat`})]}),P&&(0,G.jsx)(J,{className:`text-[10px] text-error shrink-0 font-medium`,hint:`This token has expired and carries no refresh token, so nothing can renew it. Sign in again to replace it.`,onClick:C?()=>C(e.accountId):void 0,children:`Expired`}),I&&!P&&(0,G.jsx)(J,{className:`text-[10px] text-error shrink-0 font-medium`,hint:S??`Anthropic rejected this account's refresh token, so no turn can run on it. Signing in again is the only thing that restores it.`,onClick:C?()=>C(e.accountId):void 0,children:`Sign in again`}),!e.isOAuth&&!P&&(0,G.jsx)(J,{className:`text-[10px] text-text-subtle shrink-0`,hint:`A static API key rather than a sign-in: nothing to expire and nothing to renew.`,children:`API key`}),v&&(0,G.jsx)(J,{className:`text-[10px] uppercase tracking-wide text-text-subtle shrink-0`,hint:`The subscription this account is on. It decides which quota windows the account has — some plans have a weekly limit and no shorter one.`,children:v}),(0,G.jsxs)(`div`,{className:`flex items-center gap-0.5 shrink-0`,children:[!P&&p&&n?.profileData&&(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-foreground hover:bg-surface-elevated transition-colors`,onClick:()=>p(n.profileData,e.accountId),"aria-label":`View profile`,children:(0,G.jsx)(d,{className:`size-4`})})}),(0,G.jsx)(D,{side:`top`,children:`View profile`})]}),!P&&l&&e.isOAuth&&(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-primary hover:bg-surface-elevated transition-colors`,onClick:()=>l(e.accountId),"aria-label":`Export this account`,children:(0,G.jsx)(f,{className:`size-4`})})}),(0,G.jsx)(D,{side:`top`,children:`Export this account`})]}),!P&&r&&(0,G.jsx)(O,{checked:N!==`disabled`,onCheckedChange:()=>r(e.accountId,N),disabled:i||N===`cooldown`,"aria-label":N===`disabled`?`Enable account`:`Disable account`,className:`cursor-pointer relative before:absolute before:content-[''] before:-inset-y-3 before:-inset-x-0.5`}),c&&(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{className:`p-2 rounded cursor-pointer text-text-subtle hover:text-error hover:bg-surface-elevated transition-colors`,onClick:()=>c(e.accountId,e.accountLabel??e.accountId.slice(0,8)),"aria-label":`Remove account`,children:(0,G.jsx)(a,{className:`size-4`})})}),(0,G.jsx)(D,{side:`top`,children:`Remove account`})]})]})]}),M?(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(q,{label:`5-Hour Session`,bucket:j.session}),(0,G.jsx)(q,{label:`Weekly`,bucket:j.weekly}),(0,G.jsx)(q,{label:`Weekly (Opus)`,bucket:j.weeklyOpus}),(0,G.jsx)(q,{label:`Weekly (Sonnet)`,bucket:j.weeklySonnet}),(0,G.jsx)(Q,{buckets:j.weeklyScoped})]}):(0,G.jsx)(`p`,{className:`text-xs text-text-subtle`,children:e.isOAuth?`No usage data yet`:`Usage tracking not available for API keys`}),y&&(0,G.jsxs)(`div`,{className:`flex min-h-12 items-center justify-between gap-3 rounded-md border px-2.5 py-1.5 ${y.enabled&&y.state.blocked?`border-error/40 bg-error/5`:`border-border/50 bg-surface/40`}`,children:[(0,G.jsxs)(`div`,{className:`min-w-0 space-y-0.5`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium ${y.enabled&&y.state.blocked?`text-error`:`text-text-secondary`}`,children:[(0,G.jsx)(`span`,{children:`Daily guard`}),(0,G.jsxs)(k,{children:[(0,G.jsx)(A,{asChild:!0,children:(0,G.jsx)(`button`,{type:`button`,"aria-label":`About Daily guard`,className:`text-text-subtle hover:text-text-primary cursor-help`,children:(0,G.jsx)(o,{className:`size-3.5`})})}),(0,G.jsx)(D,{side:`top`,className:`max-w-64 text-xs leading-relaxed`,children:`Spreads the weekly quota across five weekdays, adding 20% per weekday. Weekend slots keep the previous cap; unused allowance carries forward. Daily slots start at the reset time and use UTC weekdays.`})]})]}),(0,G.jsx)(`p`,{className:`text-[10px] tabular-nums ${y.enabled&&y.state.blocked?`text-error`:`text-text-subtle`}`,children:y.enabled&&y.state.blocked?`${Math.round(y.state.used*100)}% used / ${Math.round(y.state.cap*100)}% daily cap. New turns paused.`:`Weekday ${y.state.day}/5, ${Math.round(y.state.cap*100)}% daily cap`})]}),b&&(0,G.jsx)(O,{checked:y.enabled,onCheckedChange:b,disabled:x,"aria-label":y.enabled?`Disable Daily guard`:`Enable Daily guard`,className:`cursor-pointer shrink-0`})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2 text-[10px] text-text-subtle flex-wrap`,children:[(0,G.jsx)(ne,{credits:w}),T,j.lastFetchedAt&&(0,G.jsxs)(J,{className:`inline-flex items-center gap-1`,hint:`Usage last read from Anthropic on ${new Date(j.lastFetchedAt).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`})}. The bars above are only as current as this.`,children:[(0,G.jsx)(u,{className:`size-3 shrink-0`,"aria-hidden":!0}),W(new Date(j.lastFetchedAt).getTime())]}),L&&!I&&(0,G.jsxs)(J,{className:[`inline-flex items-center gap-1`,R?`text-warning`:``].filter(Boolean).join(` `),hint:`Sign-in stops working on ${B}. Anthropic ends every sign-in on a fixed schedule from the day it was made, whether or not the account gets used — refreshing does not extend it. After that the account fails until you sign in again.`,children:[(0,G.jsx)(s,{className:`size-3 shrink-0`,"aria-hidden":!0}),`sign-in `,H(L)]}),z&&(0,G.jsxs)(J,{className:F.color,hint:F.tip,children:[`© `,F.label]})]})]})}var $=e(t(),1);function ae(e){let t=e.usage;return[t.session?.utilization,t.weekly?.utilization,t.weeklyOpus?.utilization,t.weeklySonnet?.utilization,...(t.weeklyScoped??[]).map(e=>`${e.label}:${e.utilization}`)].join(`|`)}function oe(e=!0){let[t,n]=(0,$.useState)([]),[r,i]=(0,$.useState)([]),[a,o]=(0,$.useState)(null),[s,c]=(0,$.useState)(!0),[l,u]=(0,$.useState)(!1),[d,f]=(0,$.useState)(new Set),[p,m]=(0,$.useState)(null),h=(0,$.useRef)([]),g=(0,$.useRef)(void 0),_=(0,$.useCallback)(async()=>{let e=h.current.length>0;e?u(!0):c(!0);let[t,r,a]=await Promise.allSettled([P(),F(),j()]);if(t.status===`fulfilled`){let r=t.value;if(e){let e=new Map(h.current.map(e=>[e.accountId,ae(e)])),t=new Set(r.filter(t=>e.get(t.accountId)!==ae(t)).map(e=>e.accountId));t.size>0&&(f(t),clearTimeout(g.current),g.current=setTimeout(()=>f(new Set),1500))}h.current=r,n(r)}r.status===`fulfilled`&&i(r.value),a.status===`fulfilled`&&o(a.value?.id??null),c(!1),u(!1)},[]),v=(0,$.useCallback)(async(e,t)=>{m(e);let n=null;try{await M(e,{status:t===`disabled`?`active`:`disabled`})}catch(e){n=e.message}return m(null),await _(),n},[_]);return(0,$.useEffect)(()=>(e&&_(),()=>clearTimeout(g.current)),[e,_]),{usages:t,accounts:r,activeAccountId:a,initialLoading:s,refreshing:l,flashIds:d,reload:_,toggle:v,togglingId:p}}function se({open:e,onOpenChange:t,onSuccess:n,signInAgainFor:r}){let[i,a]=(0,$.useState)(``),[o,s]=(0,$.useState)(``),[c,l]=(0,$.useState)(!1),[u,d]=(0,$.useState)(null),[f,m]=(0,$.useState)(null),[h,g]=(0,$.useState)(``),[w,D]=(0,$.useState)(!1),[O,k]=(0,$.useState)(`idle`);function A(){m(null),g(``),k(`idle`),d(null)}function j(){t(!1),A(),a(``),s(``),d(null)}async function M(){D(!0),d(null);try{let{url:e,state:t}=await L();m(t),k(`waiting`),window.open(e,`_blank`)}catch(e){d(e.message)}D(!1)}async function P(){if(!(!h.trim()||!f)){D(!0),d(null);try{let e=h.trim();e.includes(`#`)&&(e=e.split(`#`)[0]??e);let t=await N(e,f);j(),n(t?.status===`disabled`?`Signed in. This account is still disabled — enable it to use it.`:`Account connected via OAuth!`)}catch(e){d(e.message)}D(!1)}}async function F(){if(i.trim()){l(!0),d(null);try{let e=await I({apiKey:i.trim(),label:o.trim()||void 0});j(),n(e?.status===`disabled`?`Token updated. This account is still disabled — enable it to use it.`:`Account added!`)}catch(e){d(e.message)}l(!1)}}let R=i.trim()?i.trim().startsWith(`sk-ant-oat`)?`OAuth token (Claude Max/Pro)`:i.trim().startsWith(`sk-ant-api`)?`API key`:`Unknown format`:``;return(0,G.jsx)(C,{open:e,onOpenChange:e=>{e||j()},children:(0,G.jsxs)(b,{className:`sm:max-w-md`,children:[(0,G.jsxs)(v,{children:[(0,G.jsx)(x,{className:`text-sm`,children:r?`Sign in again — ${r}`:`Add Claude Account`}),(0,G.jsx)(S,{className:`text-xs leading-relaxed`,children:r?`Log in with the same Claude account. PPM matches it by email and renews the existing card instead of adding a new one.`:`Connect via OAuth (recommended) or paste a token manually.`})]}),(0,G.jsxs)(`div`,{className:`space-y-3`,children:[(0,G.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,G.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Recommended: Login with Claude`}),O===`idle`?(0,G.jsx)(_,{size:`sm`,className:`w-full h-8 text-xs`,onClick:M,disabled:w,children:w?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{className:`size-3 animate-spin mr-1`}),` Opening...`]}):`Login with Claude`}):(0,G.jsxs)(`div`,{className:`space-y-2`,children:[(0,G.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Authorize in the opened tab, then paste the code:`}),(0,G.jsx)(T,{placeholder:`Paste code here...`,value:h,onChange:e=>g(e.target.value),className:`text-xs h-8 font-mono`,autoFocus:!0}),(0,G.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,G.jsx)(_,{size:`sm`,className:`flex-1 h-7 text-xs`,onClick:P,disabled:!h.trim()||w,children:w?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{className:`size-3 animate-spin mr-1`}),` Connecting...`]}):`Connect`}),(0,G.jsx)(_,{size:`sm`,variant:`ghost`,className:`h-7 text-xs`,onClick:A,children:`Cancel`})]})]})]}),(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`div`,{className:`flex-1 border-t`}),(0,G.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste token`}),(0,G.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(E,{htmlFor:`add-token`,className:`text-xs`,children:`Token`}),(0,G.jsx)(T,{id:`add-token`,type:`password`,placeholder:`sk-ant-...`,value:i,onChange:e=>a(e.target.value),className:`text-xs h-8 font-mono`}),R&&(0,G.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Detected: `,R]})]}),(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(E,{htmlFor:`add-label`,className:`text-xs`,children:`Label (optional)`}),(0,G.jsx)(T,{id:`add-label`,placeholder:`e.g. Personal, Work`,value:o,onChange:e=>s(e.target.value),className:`text-xs h-8`})]})]}),u&&(0,G.jsx)(`div`,{className:`text-[11px] p-2 rounded bg-error/10 text-error`,children:u}),(0,G.jsxs)(y,{children:[(0,G.jsx)(_,{size:`sm`,variant:`outline`,className:`text-xs h-7`,onClick:j,children:`Cancel`}),(0,G.jsx)(_,{size:`sm`,className:`text-xs h-7`,onClick:F,disabled:!i.trim()||c,children:c?`Adding...`:`Add Token`})]})]})})}function ce(e){return e?.trim()?{free:`ChatGPT Free`,go:`ChatGPT Go`,plus:`ChatGPT Plus`,pro:`ChatGPT Pro`,team:`ChatGPT Team`,business:`ChatGPT Business`,self_serve_business_prolite:`ChatGPT Business`,enterprise:`ChatGPT Enterprise`,edu:`ChatGPT Edu`}[e.trim().toLowerCase()]??e:null}var le=1440*60*1e3,ue=7,de=5;function fe(e,t=Date.now()){if(!e||e.windowHours!==168)return null;let n=new Date(e.resetsAt).getTime();if(!Number.isFinite(t)||!Number.isFinite(n)||n<=t)return null;let r=n-ue*le;if(t<r)return null;let i=Math.min(ue-1,Math.floor((t-r)/le)),a=0;for(let e=0;e<=i;e++){let t=new Date(r+e*le).getUTCDay();t!==0&&t!==6&&a++}let o=a/de;return{day:a,cap:o,used:e.utilization,blocked:e.utilization>=o}}var pe=`Codex rejected this account's login (revoked or expired), so no turn can run on it and it is skipped. The usage shown is the last reading. Click to sign in again — the account keeps its settings and chats.`,me=2e3,he=21e4;function ge(e){let[t,n]=(0,$.useState)([]),[r,i]=(0,$.useState)(`round-robin`),[a,o]=(0,$.useState)({}),[s,c]=(0,$.useState)(!1),[l,u]=(0,$.useState)(new Set),[d,f]=(0,$.useState)(``),[p,g]=(0,$.useState)(``),[_,v]=(0,$.useState)(!1),[y,b]=(0,$.useState)(null),[x,S]=(0,$.useState)(null),[C,w]=(0,$.useState)(!1),[T,E]=(0,$.useState)(null),[D,O]=(0,$.useState)(!1),[k,A]=(0,$.useState)(``),[j,M]=(0,$.useState)(!1),[N,P]=(0,$.useState)(``),[F,I]=(0,$.useState)(!1),[L,R]=(0,$.useState)(!1),[z,B]=(0,$.useState)(null),V=(0,$.useRef)(null),H=(0,$.useRef)(null),U=(0,$.useRef)(0),W=(0,$.useRef)(!1),G=(0,$.useRef)(!1),K=(0,$.useRef)(!1),q=(0,$.useRef)(e);q.current=e;let J=(0,$.useCallback)(async()=>{c(!0);try{let e=await m.get(`/api/codex-accounts`);n(e.accounts),i(e.strategy),m.get(`/api/codex-accounts/usage`).then(o).catch(()=>{})}finally{c(!1)}},[]);(0,$.useEffect)(()=>{J()},[J]);let Y=async()=>{if(!(!d.trim()||G.current||W.current||H.current)){G.current=!0,v(!0),b(null);try{await m.post(`/api/codex-accounts/api-key`,{apiKey:d.trim(),label:p.trim()||void 0}),f(``),g(``),e(),await J()}catch(e){b(e.message)}finally{G.current=!1,v(!1)}}},X=(0,$.useCallback)(()=>{U.current+=1,W.current=!1,K.current=!1,V.current?.(),V.current=null;let e=H.current;H.current=null,e&&m.del(`/api/codex-accounts/${e.method}-login/${e.id}`).catch(()=>{})},[]),Z=(0,$.useCallback)(()=>{X(),S(null),w(!1),E(null),O(!1),A(``),M(!1)},[X]),ee=(0,$.useCallback)((e,t)=>{let n=Date.now()+(t===`browser`?61e4:he),r=!1,i;V.current=()=>{r=!0,clearTimeout(i)};let a=async()=>{if(r)return;let o=null;try{o=await m.get(`/api/codex-accounts/${t}-login/${e}/status`)}catch{}if(!r){if(o?.state===`done`){Z(),g(``),q.current(),await J();return}if(o?.state===`error`||Date.now()>n){Z(),b(o?.state===`error`?o.error:`${t===`browser`?`Browser`:`Device`} login timed out.`);return}i=setTimeout(a,me)}};a()},[Z,J]);(0,$.useEffect)(()=>X,[X]);let Q=async(e,t)=>{if(W.current||H.current||G.current)return;W.current=!0;let n=++U.current;O(!0),b(null);try{let r=await m.post(`/api/codex-accounts/${e}-login`,{label:p.trim()||void 0,...t?{accountId:t}:{}});if(n!==U.current){m.del(`/api/codex-accounts/${e}-login/${r.id}`).catch(()=>{});return}H.current={id:r.id,method:e},e===`device`?(S(r),w(!0)):E(r),ee(r.id,e)}catch(e){n===U.current&&b(e.message)}finally{n===U.current&&(W.current=!1,O(!1))}};return{accounts:t,strategy:r,usages:a,loading:s,apiKey:d,setApiKey:f,label:p,setLabel:g,adding:_,err:y,setErr:b,device:x,deviceWaiting:C,backupPassword:N,setBackupPassword:P,exporting:F,importing:L,msg:z,setMsg:B,toggling:l,load:J,addApiKey:Y,startDevice:e=>Q(`device`,e),startBrowser:e=>Q(`browser`,e),browser:T,loginStarting:D,callbackUrl:k,setCallbackUrl:A,submittingCallback:j,submitCallback:async()=>{let e=H.current;if(e?.method!==`browser`||!k.trim()||K.current)return;let t=U.current;K.current=!0,M(!0),b(null);let n=k.trim();A(``);try{await m.post(`/api/codex-accounts/browser-login/${e.id}/callback`,{callbackUrl:n})}catch(e){t===U.current&&b(e.message)}finally{t===U.current&&(K.current=!1,M(!1))}},cancelLogin:Z,remove:async e=>{await m.del(`/api/codex-accounts/${e}`),await J()},toggle:async(e,t)=>{let n=t===`disabled`?`active`:`disabled`;u(t=>new Set(t).add(e)),b(null);try{await m.patch(`/api/codex-accounts/${e}`,{status:n}),await J()}catch(e){b(e.message||`Could not change the account`)}finally{u(t=>{let n=new Set(t);return n.delete(e),n})}},toggleDailyGuard:async(e,t)=>{u(t=>new Set(t).add(e)),b(null);try{await m.patch(`/api/codex-accounts/${e}`,{dailyGuardEnabled:!t}),await J()}catch(e){b(e.message||`Could not change Daily guard`)}finally{u(t=>{let n=new Set(t);return n.delete(e),n})}},changeStrategy:async e=>{i(e);try{await m.put(`/api/codex-accounts/strategy`,{strategy:e})}catch{}},doExport:async()=>{if(!N.trim()){b(`Set a backup password first.`);return}I(!0),b(null),B(null);try{let t={"Content-Type":`application/json`},n=h();n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/codex-accounts/export`,{method:`POST`,headers:t,body:JSON.stringify({password:N})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`Export failed: ${r.status}`)}let i=await r.text(),a=new Blob([i],{type:`application/json`}),o=document.createElement(`a`);o.href=URL.createObjectURL(a),o.download=`ppm-codex-accounts-backup.json`,o.click(),URL.revokeObjectURL(o.href),B(`Backup downloaded.`),e()}catch(e){b(e.message)}finally{I(!1)}},doImport:async t=>{if(!N.trim()){b(`Enter the backup password first.`);return}R(!0),b(null),B(null);try{let n=await t.text(),r=await m.post(`/api/codex-accounts/import`,{data:n,password:N});B(`Imported ${r.imported}${r.skipped?`, skipped ${r.skipped}`:``}.`),e(),await J()}catch(e){b(e.message)}finally{R(!1)}}}}function _e({open:e,onOpenChange:t,label:n,onLabelChange:i,apiKey:a,onApiKeyChange:o,adding:c,onAddApiKey:u,deviceWaiting:d,onStartDevice:f,device:m,error:h,browser:g,onStartBrowser:w,loginStarting:D,callbackUrl:O,onCallbackUrlChange:k,submittingCallback:A,onSubmitCallback:j,reloginLabel:M}){let N=D||d||!!g||c;return(0,G.jsx)(C,{open:e,onOpenChange:t,children:(0,G.jsxs)(b,{className:`sm:max-w-md max-h-[90dvh] overflow-y-auto`,children:[(0,G.jsxs)(v,{children:[(0,G.jsx)(x,{className:`text-sm`,children:M?`Sign in again — ${M}`:`Add Codex Account`}),(0,G.jsx)(S,{className:`text-xs leading-relaxed`,children:M?`Sign in with ChatGPT to renew this account. It keeps its name, its settings and the chats bound to it.`:`Choose browser login, a device code, or an OpenAI API key.`})]}),(0,G.jsxs)(`div`,{className:`space-y-3`,children:[!M&&(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(E,{htmlFor:`codex-label`,className:`text-xs`,children:`Label (optional)`}),(0,G.jsx)(T,{id:`codex-label`,placeholder:`e.g. Personal, Work`,value:n,onChange:e=>i(e.target.value),disabled:N,className:`text-xs`})]}),(0,G.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,G.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Browser login`}),(0,G.jsxs)(_,{size:`sm`,className:`w-full cursor-pointer gap-1.5`,onClick:w,disabled:N,children:[(0,G.jsx)(l,{className:`size-4`}),` Sign in with browser`]}),g&&(0,G.jsxs)(`div`,{className:`space-y-2 text-xs`,children:[(0,G.jsxs)(`a`,{href:g.authUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline`,children:[(0,G.jsx)(l,{className:`size-3`}),` Open ChatGPT sign-in`]}),(0,G.jsx)(`p`,{children:`Sign in, then copy the full localhost callback URL from the address bar and paste it below. On a phone, copy it even if the page fails to load.`}),(0,G.jsx)(E,{htmlFor:`codex-callback-url`,children:`Callback URL`}),(0,G.jsx)(T,{id:`codex-callback-url`,type:`password`,autoComplete:`off`,spellCheck:!1,placeholder:`http://localhost:.../auth/callback?...`,value:O,onChange:e=>k(e.target.value),disabled:A}),(0,G.jsxs)(_,{size:`sm`,onClick:j,disabled:!O.trim()||A,children:[A&&(0,G.jsx)(p,{className:`size-3 animate-spin`}),` Submit callback URL`]}),(0,G.jsxs)(`p`,{role:`status`,className:`flex items-center gap-1.5 text-muted-foreground`,children:[(0,G.jsx)(p,{className:`size-3 animate-spin`}),` Waiting for authorization. This may complete automatically on this computer.`]})]})]}),(0,G.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,G.jsx)(`p`,{className:`text-[11px] font-medium`,children:`Device code`}),(0,G.jsx)(_,{size:`sm`,className:`w-full cursor-pointer gap-1.5`,onClick:f,disabled:N,children:d?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(p,{className:`size-4 animate-spin`}),` Waiting for authorization...`]}):(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(r,{className:`size-4`}),` Sign in with device code`]})}),m&&(0,G.jsxs)(`div`,{className:`rounded-md border border-primary/40 bg-primary/10 p-2.5 space-y-1.5`,children:[(0,G.jsx)(`p`,{className:`text-[11px]`,children:`Enter this code to authorize:`}),(0,G.jsx)(`div`,{className:`font-mono text-lg tracking-widest`,children:m.userCode}),(0,G.jsxs)(`a`,{href:m.verificationUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-primary hover:underline text-[11px]`,children:[(0,G.jsx)(l,{className:`size-3`}),` `,m.verificationUrl]})]})]}),!M&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,G.jsx)(`div`,{className:`flex-1 border-t`}),(0,G.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,children:`or paste an API key`}),(0,G.jsx)(`div`,{className:`flex-1 border-t`})]}),(0,G.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,G.jsx)(E,{htmlFor:`codex-api-key`,className:`text-xs`,children:`OpenAI API key`}),(0,G.jsx)(T,{id:`codex-api-key`,type:`password`,placeholder:`sk-...`,value:a,onChange:e=>o(e.target.value),className:`text-xs font-mono`})]})]})]}),D&&(0,G.jsx)(`p`,{role:`status`,className:`text-xs`,children:`Starting login...`}),h&&(0,G.jsx)(`div`,{role:`alert`,className:`text-[11px] p-2 rounded bg-error/10 text-error`,children:h}),(0,G.jsxs)(y,{children:[(0,G.jsx)(_,{size:`sm`,variant:`outline`,className:`text-xs cursor-pointer`,onClick:()=>t(!1),children:`Cancel`}),!M&&(0,G.jsxs)(_,{size:`sm`,className:`text-xs cursor-pointer gap-1.5`,onClick:u,disabled:!a.trim()||N,children:[c?(0,G.jsx)(p,{className:`size-3.5 animate-spin`}):(0,G.jsx)(s,{className:`size-3.5`}),`Add key`]})]})]})})}function ve({account:e,onClose:t,onDone:n}){let r=ge(()=>{n(),t()});return(0,G.jsx)(_e,{open:!0,onOpenChange:e=>{e||(r.cancelLogin(),t())},reloginLabel:e.label,label:r.label,onLabelChange:r.setLabel,apiKey:``,onApiKeyChange:()=>{},adding:!1,onAddApiKey:()=>{},deviceWaiting:r.deviceWaiting,onStartDevice:()=>void r.startDevice(e.id),device:r.device,browser:r.browser,onStartBrowser:()=>void r.startBrowser(e.id),loginStarting:r.loginStarting,callbackUrl:r.callbackUrl,onCallbackUrlChange:r.setCallbackUrl,submittingCallback:r.submittingCallback,onSubmitCallback:()=>void r.submitCallback(),error:r.err})}function ye(e){let t=e=>Math.round((e??0)*100)>=100;return t(e.session?.utilization)||t(e.weekly?.utilization)}function be(e){return ye(e)&&(e.resetCredits?.available??0)>0}var xe={reset:e=>`${e}: limits reset to 0%. The weekly reset date now counts from your next use.`,nothingToReset:e=>`${e}: nothing needed resetting, so the reset was kept.`,noCredit:e=>`${e} has no free reset left.`,alreadyRedeemed:e=>`${e}: that reset had already been used.`};function Se(e){return e?new Date(e).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null}function Ce({account:e,usage:t,onDone:n}){let r=g(),[i,a]=(0,$.useState)(!1),[o,s]=(0,$.useState)(!1);if(!be(t))return null;let l=t.resetCredits;async function u(){s(!0);try{let t=await m.post(`/api/codex-accounts/${e.id}/reset-credit`);n(xe[t.outcome]?.(e.label)??`${e.label}: ${t.outcome}`)}catch(e){n(e.message||`Could not use the reset`)}finally{s(!1),a(!1)}}let d=Se(t.weekly?.resetsAt),f=Se(l.nextExpiresAt),h=(0,G.jsxs)(`div`,{className:`space-y-3`,"data-testid":`codex-reset-credit-confirm`,children:[(0,G.jsxs)(`p`,{className:`text-sm`,children:[`Use 1 of `,(0,G.jsx)(`span`,{className:`font-medium`,children:e.label}),`'s `,l.available,` free reset`,l.available===1?``:`s`,`?`]}),(0,G.jsxs)(`ul`,{className:`text-xs text-text-secondary space-y-1.5 list-disc pl-4`,children:[(0,G.jsxs)(`li`,{children:[l.title??`Full reset`,`: the 5-hour and weekly usage go back to 0% now.`]}),(0,G.jsxs)(`li`,{children:[`The weekly reset date moves: the next one is about 7 days after you continue using Codex`,d?`, not ${d} as now`:``,`. You do not also get that one.`]}),f&&(0,G.jsxs)(`li`,{children:[`This spends the reset that expires first (`,f,`).`]})]}),(0,G.jsxs)(`div`,{className:`flex flex-col-reverse md:flex-row gap-2 md:justify-end pt-1`,children:[(0,G.jsx)(_,{variant:`outline`,onClick:()=>a(!1),disabled:o,className:`min-h-11`,children:`Keep it`}),(0,G.jsxs)(_,{onClick:()=>void u(),disabled:o,className:`min-h-11 gap-1.5`,children:[o?(0,G.jsx)(p,{className:`size-4 animate-spin`}):(0,G.jsx)(c,{className:`size-4`}),`Use reset`]})]})]});return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsxs)(_,{size:`sm`,variant:`outline`,className:`min-h-11 md:min-h-0 md:h-7 gap-1 px-2 text-[11px] cursor-pointer border-primary/40 text-primary`,onClick:()=>a(!0),disabled:o,children:[(0,G.jsx)(c,{className:`size-3.5`}),` Use reset`]}),i&&(r?(0,G.jsx)(w,{open:!0,onClose:()=>{o||a(!1)},children:(0,G.jsxs)(`div`,{className:`px-4 pb-4`,children:[(0,G.jsx)(`h2`,{className:`text-base font-semibold mb-3`,children:`Use a free reset`}),h]})}):(0,G.jsx)(C,{open:!0,onOpenChange:e=>{!e&&!o&&a(!1)},children:(0,G.jsxs)(b,{className:`sm:max-w-sm`,children:[(0,G.jsx)(v,{children:(0,G.jsx)(x,{className:`text-sm`,children:`Use a free reset`})}),h]})}))]})}export{J as _,ge as a,W as b,se as c,ne as d,Q as f,X as g,Y as h,pe as i,oe as l,ee as m,ve as n,fe as o,Z as p,_e as r,ce as s,Ce as t,ie as u,q as v,B as x,K as y};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{un as r}from"./icons-CO_II6D-.js";import{i,n as a}from"./api-client-D-SMbdiH.js";import{t as o}from"./settings-store-DvftLqzy.js";import{n as s}from"./use-is-mobile-BClDZJP5.js";import{C as c,S as l,jn as u,ln as d}from"./index-CtAvmybi.js";import{t as f}from"./use-monaco-theme-UGOzyIhv.js";import"./editor-font-BNwo7zo5.js";import{n as p,r as m}from"./monaco-dotenv-language-Bwq3gQsi.js";var h=e(t(),1),g=n();function _(e){return{js:`javascript`,jsx:`javascript`,ts:`typescript`,tsx:`typescript`,py:`python`,html:`html`,css:`css`,scss:`scss`,json:`json`,md:`markdown`,mdx:`markdown`,yaml:`yaml`,yml:`yaml`,sh:`shell`,bash:`shell`,go:`go`,rs:`rust`,java:`java`,rb:`ruby`,php:`php`,swift:`swift`,sql:`sql`,xml:`xml`,toml:`toml`}[e.split(`.`).pop()?.toLowerCase()??``]??(p(e)?`dotenv`:`plaintext`)}function v(e){let t=e.split(`
|
|
2
2
|
`),n=[],r=0,i=0;for(;r<t.length;){let e=t[r];if(e.startsWith(`<<<<<<<`)){let a=r,o=e.substring(7).trim(),s=[];for(r++;r<t.length&&!t[r].startsWith(`=======`);)s.push(t[r]),r++;if(r>=t.length)break;let c=r,l=[];for(r++;r<t.length&&!t[r].startsWith(`>>>>>>>`);)l.push(t[r]),r++;if(r>=t.length)break;let u=t[r].substring(7).trim();n.push({id:i++,startLine:a+1,separatorLine:c+1,endLine:r+1,currentContent:s.join(`
|
|
3
3
|
`),incomingContent:l.join(`
|
|
4
4
|
`),currentLabel:o,incomingLabel:u})}r++}return n}function y({metadata:e}){let t=e?.filePath,n=e?.projectName,[p,y]=(0,h.useState)(null),[x,S]=(0,h.useState)(!0),[C,w]=(0,h.useState)(null),[T,E]=(0,h.useState)(0),D=(0,h.useRef)(null),O=(0,h.useRef)(null),k=(0,h.useRef)([]),A=(0,h.useRef)(null),{wordWrap:j,mobileWordWrap:M}=o(d(e=>({wordWrap:e.wordWrap,mobileWordWrap:e.mobileWordWrap}))),N=s()?M:j,P=f(),F=(0,h.useRef)(null),[I,L]=(0,h.useState)();(0,h.useEffect)(()=>{let e=F.current;if(!e)return;let t=new ResizeObserver(([e])=>{e&&L(Math.floor(e.contentRect.height))});return t.observe(e),()=>t.disconnect()},[]),(0,h.useEffect)(()=>u(F.current,()=>D.current?.layout()),[x,C]),(0,h.useEffect)(()=>{!t||!n||(S(!0),a.get(`${i(n)}/files/read?path=${encodeURIComponent(t)}`).then(e=>{y(e.content),S(!1)}).catch(e=>{w(e.message||`Failed to load file`),S(!1)}))},[t,n]);let R=(0,h.useCallback)(()=>{let e=D.current,t=O.current;if(!e||!t)return;let n=v(e.getModel()?.getValue()||``);E(n.length);for(let t of k.current)e.removeContentWidget(t);if(k.current=[],A.current&&A.current.clear(),n.length===0)return;let r=[];for(let e of n)r.push({range:new t.Range(e.startLine,1,e.startLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-current`}}),r.push({range:new t.Range(e.separatorLine,1,e.separatorLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`}}),r.push({range:new t.Range(e.endLine,1,e.endLine,1),options:{isWholeLine:!0,className:`conflict-marker-line`,glyphMarginClassName:`conflict-glyph-incoming`}}),e.separatorLine-e.startLine>1&&r.push({range:new t.Range(e.startLine+1,1,e.separatorLine-1,1),options:{isWholeLine:!0,className:`conflict-current-content`}}),e.endLine-e.separatorLine>1&&r.push({range:new t.Range(e.separatorLine+1,1,e.endLine-1,1),options:{isWholeLine:!0,className:`conflict-incoming-content`}});A.current=e.createDecorationsCollection(r);for(let r of n){let n=`conflict-widget-${r.id}`,i=document.createElement(`div`);i.className=`conflict-actions`,i.innerHTML=`<span class="conflict-label">Current Change (${b(r.currentLabel||`HEAD`)})</span><button class="conflict-btn conflict-btn-current" data-action="current">Accept Current</button><button class="conflict-btn conflict-btn-incoming" data-action="incoming">Accept Incoming</button><button class="conflict-btn conflict-btn-both" data-action="both">Accept Both</button>`,i.addEventListener(`click`,e=>{let t=e.target.closest(`[data-action]`);if(!t)return;let n=t.getAttribute(`data-action`);z(r.id,n)});let a={getId:()=>n,getDomNode:()=>i,getPosition:()=>({position:{lineNumber:r.startLine,column:1},preference:[t.editor.ContentWidgetPositionPreference.ABOVE]})};e.addContentWidget(a),k.current.push(a)}},[]),z=(0,h.useCallback)((e,t)=>{let n=D.current,r=O.current;if(!n||!r)return;let i=n.getModel();if(!i)return;let a=v(i.getValue()).find(t=>t.id===e);if(!a)return;let o;switch(t){case`current`:o=a.currentContent;break;case`incoming`:o=a.incomingContent;break;case`both`:o=a.currentContent+`
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import{$ as r,Q as i,X as a,Z as o,at as s,et as c,it as l,nt as u,ot as d,rt as f,st as p,tt as m}from"./vendor-ui-P9Ym7hCv.js";import{H as h,M as g}from"./icons-CO_II6D-.js";import{n as _}from"./utils-btZ8C8-R.js";import{n as v}from"./portal-container-context-NFSuymMu.js";e(t(),1);var y=n();function b({...e}){return(0,y.jsx)(u,{"data-slot":`context-menu`,...e})}function x({...e}){return(0,y.jsx)(p,{"data-slot":`context-menu-trigger`,...e})}function S({container:e,...t}){let n=v();return(0,y.jsx)(r,{"data-slot":`context-menu-portal`,container:e??n,...t})}function C({...e}){return(0,y.jsx)(l,{"data-slot":`context-menu-sub`,...e})}function w({...e}){return(0,y.jsx)(c,{"data-slot":`context-menu-radio-group`,...e})}function T({className:e,inset:t,children:n,...r}){return(0,y.jsxs)(d,{"data-slot":`context-menu-sub-trigger`,"data-inset":t,className:_(`flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[state=open]:bg-accent data-[state=open]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground`,e),...r,children:[n,(0,y.jsx)(g,{className:`ml-auto`})]})}function E({className:e,...t}){return(0,y.jsx)(s,{"data-slot":`context-menu-sub-content`,className:_(`z-50 min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})}function D({className:e,...t}){return(0,y.jsx)(S,{children:(0,y.jsx)(a,{"data-slot":`context-menu-content`,className:_(`z-50 max-h-(--radix-context-menu-content-available-height) min-w-[8rem] origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95`,e),...t})})}function O({className:e,inset:t,variant:n=`default`,...r}){return(0,y.jsx)(o,{"data-slot":`context-menu-item`,"data-inset":t,"data-variant":n,className:_(`relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!`,e),...r})}function k({className:e,children:t,...n}){return(0,y.jsxs)(m,{"data-slot":`context-menu-radio-item`,className:_(`relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...n,children:[(0,y.jsx)(`span`,{className:`pointer-events-none absolute left-2 flex size-3.5 items-center justify-center`,children:(0,y.jsx)(i,{children:(0,y.jsx)(h,{className:`size-2 fill-current`})})}),t]})}function A({className:e,...t}){return(0,y.jsx)(f,{"data-slot":`context-menu-separator`,className:_(`-mx-1 my-1 h-px bg-border`,e),...t})}export{k as a,E as c,w as i,T as l,D as n,A as o,O as r,C as s,b as t,x as u};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{a as r,d as i}from"./icons-CO_II6D-.js";import{cn as a}from"./index-CtAvmybi.js";import{n as o,t as s}from"./csv-parser-DcRWxcNV.js";import{i as c,n as l,r as u,t as d}from"./lib-BY5fb-Cz.js";var f=e(t(),1),p=n();function m({content:e,onContentChange:t,wordWrap:n}){let m=(0,f.useMemo)(()=>s(e),[e]),[g,_]=(0,f.useState)(()=>m.rows),[v,y]=(0,f.useState)([]),b=(0,f.useRef)(null),x=(0,f.useRef)(!1);(0,f.useEffect)(()=>{if(x.current){x.current=!1;return}_(m.rows)},[m.rows]);let S=m.headers,C=(0,f.useCallback)((e,n,r)=>{_(i=>{let a=i.map((t,n)=>n===e?[...t]:t);return a[e][n]=r,x.current=!0,t(o(S,a)),a})},[S,t]),w=l({data:g,columns:(0,f.useMemo)(()=>S.map((e,t)=>({id:`col-${t}`,header:e||`Column ${t+1}`,accessorFn:e=>e[t]??``,cell:({row:e,getValue:r})=>(0,p.jsx)(h,{value:r(),onSave:n=>C(e.index,t,n),wordWrap:n}),size:150,minSize:80})),[S,C,n]),state:{sorting:v},onSortingChange:y,getCoreRowModel:u(),getSortedRowModel:c(),enableColumnResizing:!0,columnResizeMode:`onChange`}),{rows:T}=w.getRowModel(),E=a({count:T.length,getScrollElement:()=>b.current,estimateSize:()=>32,overscan:20});return S.length===0?(0,p.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground text-sm`,children:`Empty CSV file`}):(0,p.jsx)(`div`,{ref:b,className:`flex-1 overflow-auto`,children:(0,p.jsxs)(`table`,{className:`w-full text-xs font-mono border-collapse`,children:[(0,p.jsx)(`thead`,{className:`sticky top-0 bg-background z-10 border-b border-border block`,children:w.getHeaderGroups().map(e=>(0,p.jsx)(`tr`,{className:`flex w-full`,children:e.headers.map(e=>(0,p.jsxs)(`th`,{className:`relative text-left px-2 py-1.5 font-medium text-muted-foreground select-none cursor-pointer hover:bg-muted/50 border-r border-border last:border-r-0`,style:{width:e.getSize(),minWidth:e.getSize()},onClick:e.column.getToggleSortingHandler(),children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,p.jsx)(`span`,{className:`truncate`,children:d(e.column.columnDef.header,e.getContext())}),e.column.getIsSorted()===`asc`&&(0,p.jsx)(i,{className:`size-3 shrink-0`}),e.column.getIsSorted()===`desc`&&(0,p.jsx)(r,{className:`size-3 shrink-0`})]}),(0,p.jsx)(`div`,{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),onClick:e=>e.stopPropagation(),className:`absolute right-0 top-0 h-full w-1 cursor-col-resize hover:bg-primary/50 active:bg-primary`})]},e.id))},e.id))}),(0,p.jsx)(`tbody`,{style:{height:E.getTotalSize(),position:`relative`,display:`block`},children:E.getVirtualItems().map(e=>{let t=T[e.index];return(0,p.jsx)(`tr`,{"data-index":e.index,ref:e=>E.measureElement(e),style:{position:`absolute`,top:0,left:0,width:`100%`,transform:`translateY(${e.start}px)`,display:`flex`},children:t.getVisibleCells().map(e=>(0,p.jsx)(`td`,{className:`px-2 py-1 border-b border-border/50 border-r border-r-border/30 last:border-r-0 ${n?`whitespace-pre-wrap break-words`:`truncate`}`,style:{width:e.column.getSize(),minWidth:e.column.getSize()},children:d(e.column.columnDef.cell,e.getContext())},e.id))},t.id)})})]})})}function h({value:e,onSave:t,wordWrap:n}){let[r,i]=(0,f.useState)(!1),[a,o]=(0,f.useState)(e),s=(0,f.useRef)(null),c=(0,f.useCallback)(e=>{e&&(e.style.height=`auto`,e.style.height=`${e.scrollHeight}px`)},[]);return(0,f.useEffect)(()=>{r&&s.current&&(s.current.focus(),c(s.current))},[r,c]),r?(0,p.jsx)(`textarea`,{ref:s,className:`w-full bg-transparent outline-none border border-primary/50 rounded text-xs font-mono resize-none p-0.5`,style:{minHeight:a.includes(`
|
|
2
2
|
`)?48:20},rows:1,value:a,onChange:e=>{o(e.target.value),c(e.target)},onBlur:()=>{i(!1),a!==e&&t(a)},onKeyDown:n=>{n.key===`Enter`&&!n.shiftKey?(n.preventDefault(),i(!1),a!==e&&t(a)):n.key===`Escape`&&(i(!1),o(e))}}):(0,p.jsx)(`span`,{className:`block cursor-text ${n?`whitespace-pre-wrap break-words`:`truncate`}`,onClick:()=>{o(e),i(!0)},children:e||`\xA0`})}export{m as CsvPreview};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t}from"./vendor-markdown-QKPNiWEd.js";import{_t as n}from"./vendor-ui-P9Ym7hCv.js";import{B as r,G as i,R as a,c as o,o as s,s as c}from"./data-grid-types-CHD9-pon.js";import{t as l}from"./dist-CBtAY9iX.js";var u=e(n(),1),d=e(t(),1),f=()=>e=>e.targetX,p=()=>e=>e.targetY,m=()=>e=>e.targetWidth,h=()=>e=>e.targetHeight,g=()=>e=>e.targetY+10,_=()=>e=>Math.max(0,(e.targetHeight-28)/2),v=l(`div`)({name:`DataGridOverlayEditorStyle`,class:`gdg-d19meir1`,propsAsIs:!1,vars:{"d19meir1-0":[p(),`px`],"d19meir1-1":[f(),`px`],"d19meir1-2":[m(),`px`],"d19meir1-3":[h(),`px`],"d19meir1-4":[g(),`px`],"d19meir1-5":[_(),`px`]}});function y(){let[e,t]=d.useState();return[e??void 0,t]}function b(){let[e,t]=y(),[n,r]=d.useState(0),[i,a]=d.useState(!0);return d.useLayoutEffect(()=>{if(e===void 0||!(`IntersectionObserver`in window))return;let t=new IntersectionObserver(e=>{e.length!==0&&a(e[0].isIntersecting)},{threshold:1});return t.observe(e),()=>t.disconnect()},[e]),d.useEffect(()=>{if(i||e===void 0)return;let t,n=()=>{let{right:i}=e.getBoundingClientRect();r(e=>Math.min(e+window.innerWidth-i-10,0)),t=requestAnimationFrame(n)};return t=requestAnimationFrame(n),()=>{t!==void 0&&cancelAnimationFrame(t)}},[e,i]),{ref:t,style:d.useMemo(()=>({transform:`translateX(${n}px)`}),[n])}}var x=e=>{let{target:t,content:n,onFinishEditing:l,forceEditMode:f,initialValue:p,imageEditorOverride:m,markdownDivCreateNode:h,highlight:g,className:_,theme:y,id:x,cell:S,bloom:C,validateCell:w,getCellRenderer:T,provideEditor:E,isOutsideClick:D}=e,[O,k]=d.useState(f?n:void 0),A=d.useRef(O??n);A.current=O??n;let[j,M]=d.useState(()=>w===void 0?!0:!(s(n)&&w?.(S,n,A.current)===!1)),N=d.useCallback((e,t)=>{l(j?e:void 0,t)},[j,l]),P=d.useCallback(e=>{if(w!==void 0&&e!==void 0&&s(e)){let t=w(S,e,A.current);t===!1?M(!1):(typeof t==`object`&&(e=t),M(!0))}k(e)},[S,w]),F=d.useRef(!1),I=d.useRef(void 0),L=d.useCallback(()=>{N(O,[0,0]),F.current=!0},[O,N]),R=d.useCallback((e,t)=>{N(e,t??I.current??[0,0]),F.current=!0},[N]),z=d.useCallback(async e=>{let t=!1;e.key===`Escape`?(e.stopPropagation(),e.preventDefault(),I.current=[0,0]):e.key===`Enter`&&!e.shiftKey?(e.stopPropagation(),e.preventDefault(),I.current=[0,1],t=!0):e.key===`Tab`&&(e.stopPropagation(),e.preventDefault(),I.current=[e.shiftKey?-1:1,0],t=!0),window.setTimeout(()=>{!F.current&&I.current!==void 0&&(N(t?O:void 0,I.current),F.current=!0)},0)},[N,O]),B=O??n,[V,H]=d.useMemo(()=>{if(c(n))return[];let e=E?.(n);return e===void 0?[T(n)?.provideEditor?.(n),!1]:[e,!1]},[n,T,E]),{ref:U,style:W}=b(),G=!0,K,q=!0,J;if(V!==void 0){G=V.disablePadding!==!0,q=V.disableStyling!==!0;let e=o(V);e&&(J=V.styleOverride);let n=e?V.editor:V;K=d.createElement(n,{isHighlighted:g,onChange:P,value:B,initialValue:p,onFinishedEditing:R,validatedSelection:s(B)?B.selectionRange:void 0,forceEditMode:f,target:t,imageEditorOverride:m,markdownDivCreateNode:h,isValid:j,theme:y})}J={...J,...W};let Y=document.getElementById(`portal`);if(Y===null)return console.error('Cannot open Data Grid overlay editor, because portal not found. Please add `<div id="portal" />` as the last child of your `<body>`.'),null;let X=q?`gdg-style`:`gdg-unstyle`;j||(X+=` gdg-invalid`),G&&(X+=` gdg-pad`);let Z=C?.[0]??1,Q=C?.[1]??1;return(0,u.createPortal)(d.createElement(a.Provider,{value:y},d.createElement(i,{style:r(y),className:_,onClickOutside:L,isOutsideClick:D},d.createElement(v,{ref:U,id:x,className:X,style:J,as:H===!0?`label`:void 0,targetX:t.x-Z,targetY:t.y-Q,targetWidth:t.width+Z*2,targetHeight:t.height+Q*2},d.createElement(`div`,{className:`gdg-clip-region`,onKeyDown:z},K)))),Y)};export{x as default};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-BHh12_0v.js";import{Lt as r,_r as i,at as a,gr as o,ir as s,un as c}from"./icons-CO_II6D-.js";import{n as l,s as u}from"./api-client-c8YOpTlT.js";import"./settings-store-Br5c1efC.js";import"./panel-store-BUQ-CPsd.js";import"./window-store-B4cbZ5rr.js";import{t as d}from"./tab-store-DqeaGhhE.js";import{pt as f}from"./index-C8nGqkKN.js";import"./data-grid-types-CHD9-pon.js";import"./marked.esm-DDb9MclE.js";import"./use-monaco-theme-C88KphGx.js";import{n as p,t as m}from"./glide-data-grid-R4PcAntf.js";import{t as h}from"./sql-query-editor-BjIMi9Wk.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[c,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),u.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]),V=(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),H=(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),U=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),W=(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),G=(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:c,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:V,clearSort:H,queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,updateCellIn:(0,g.useCallback)(async(e,n,r,i,a,o)=>{try{await l.put(`${t}/cell`,{table:e,schema:n,pkColumn:r,pkValue:i,column:a,value:o}),G()}catch(e){R(`Update cell`,e)}},[t,G,R]),deleteRow:B,bulkDelete:U,insertRow:W,refreshData:M,queryAsTable:F,reload:G}}function x(e,t){let n=e.replace(/--[^\r\n]*/g,` `).replace(/\/\*[\s\S]*?\*\//g,` `).trim().replace(/;\s*$/,``);if(!/^select\s/i.test(n)||/\b(join|union|intersect|except|group\s+by|distinct)\b/i.test(n)||(n.match(/\bfrom\b/gi)??[]).length!==1)return null;let r=/\bfrom\s+(?:"([^"]+)"|(\w+))\s*(?:\.\s*(?:"([^"]+)"|(\w+)))?/i.exec(n);if(!r)return null;let i=r[1]??r[2],a=r[3]??r[4];return a?{schema:i,table:a}:{table:i,schema:t}}var S=n();function C(e){let t={},n=/"(\w+)"\s+ILIKE\s+'%([^']*?)%'/gi,r;for(;(r=n.exec(e))!==null;)t[r[1]]=r[2].replace(/''/g,`'`);return t}function w({metadata:e,tabId:t}){let n=e?.connectionId,u=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,w=e?.currentSql,T=d(e=>e.updateTab),D=(0,g.useRef)(e);D.current=e;let O=(0,g.useCallback)(e=>{t&&T(t,{metadata:{...D.current,currentSql:e}})},[t,T]),k=b(n),{connections:A,updateConnection:j}=f(),M=(0,g.useMemo)(()=>A.find(e=>e.id===n),[A,n]),[N,P]=(0,g.useState)([]),[F,I]=(0,g.useState)(180),L=(0,g.useRef)(null),[R,z]=(0,g.useState)({}),B=(0,g.useMemo)(()=>{if(y&&!k.selectedTable)return y;if(k.selectedTable){let e=`SELECT * FROM "${k.selectedTable}"`,t=Object.entries(R).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),k.orderBy&&(e+=` ORDER BY "${k.orderBy}" ${k.orderDir}`);let n=(k.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,k.selectedTable,k.orderBy,k.orderDir,k.page,R]),V=(0,g.useCallback)(e=>{z(e)},[]),H=(0,g.useRef)(void 0),U=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!k.selectedTable)return;let e=Object.values(R).some(e=>e.trim());if(!(!e&&!U.current))return U.current=e,clearTimeout(H.current),H.current=setTimeout(()=>{e?k.queryAsTable(B):k.refreshData()},500),()=>clearTimeout(H.current)},[R]);let W=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=F,r=e=>{let r=e.clientY-t;I(Math.max(80,Math.min(n+r,(L.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[F]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>P(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let G=(0,g.useMemo)(()=>{if(N.length!==0)return{tables:N,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,N]),K=(0,g.useRef)(!1);(0,g.useEffect)(()=>{K.current||(K.current=!0,y?k.executeQuery(y):_&&k.selectTable(_,v))},[_,v,y]);let[q,J]=(0,g.useState)(!!y),[Y,ee]=(0,g.useState)(y??null),te=(0,g.useCallback)(e=>{let t=e.trim();if(k.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${k.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){z(C(t)),k.queryAsTable(t);return}J(!0),ee(t),k.executeQuery(e)},[k.executeQuery,k.queryAsTable,k.selectedTable]),ne=(0,g.useCallback)(e=>{J(!1),k.toggleSort(e)},[k.toggleSort]),re=(0,g.useCallback)(()=>{J(!1),k.clearSort()},[k.clearSort]),ie=(0,g.useCallback)(e=>{J(!1),k.setPage(e)},[k.setPage]),X=(0,g.useMemo)(()=>M&&!M.readonly&&Y?x(Y,k.selectedSchema):null,[M,Y,k.selectedSchema]),ae=(0,g.useCallback)((e,t,n,r)=>{X&&k.updateCellIn(X.table,X.schema,e,t,n,r)},[X,k.updateCellIn]),Z=k.queryResult,Q=q&&!!(Z||k.queryError),$=k.selectedTable&&!Q,oe=!($&&k.tableData)&&!Q&&(k.loading||k.queryLoading);return(0,S.jsx)(`div`,{ref:L,className:`flex h-full w-full overflow-hidden`,children:(0,S.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,S.jsx)(a,{className:`size-3.5 text-muted-foreground`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:u??`Database`}),k.selectedTable&&(0,S.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,k.selectedTable]}),(0,S.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[k.tableData&&(0,S.jsx)(p,{columns:k.tableData.columns,rows:k.tableData.rows,filename:u?`${u}-${k.selectedTable??`data`}`:k.selectedTable??`data`,exportAllUrl:k.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(k.selectedTable)}&schema=${k.selectedSchema}`:void 0}),M&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>j(M.id,{readonly:M.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${M.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:M.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:M.readonly?(0,S.jsx)(o,{className:`size-3`}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(i,{className:`size-3`}),(0,S.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>k.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,S.jsx)(s,{className:`size-3 ${k.loading||k.queryLoading?`animate-spin`:``}`})})]})]}),(0,S.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:F},children:(0,S.jsx)(h,{onExecute:te,loading:k.queryLoading,defaultValue:B,schemaInfo:G,onSqlChange:O,persistedSql:w})}),(0,S.jsx)(`div`,{onMouseDown:W,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,S.jsx)(r,{className:`size-3 text-muted-foreground/50`})}),(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&k.tableData&&(0,S.jsx)(m,{columns:k.tableData.columns,rows:k.tableData.rows,total:k.tableData.total,limit:k.tableData.limit,schema:k.schema,loading:k.loading,page:k.page,onPageChange:ie,onCellUpdate:k.updateCell,onRowDelete:k.deleteRow,orderBy:k.orderBy,orderDir:k.orderDir,onToggleSort:ne,onClearSort:re,onBulkDelete:k.bulkDelete,onInsertRow:k.insertRow,connectionId:n,selectedTable:k.selectedTable,selectedSchema:k.selectedSchema,connectionName:u,columnFilters:R,onColumnFilter:V}),Q&&(0,S.jsx)(E,{result:Z,error:k.queryError,loading:k.queryLoading,schema:k.schema,connectionName:u,onCellUpdate:X?ae:void 0}),oe&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,S.jsx)(c,{className:`size-4 animate-spin`})})]})]})})}var T=()=>{};function E({result:e,error:t,loading:n,schema:r,connectionName:i,onCellUpdate:a}){let o=(0,g.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),s=(0,g.useMemo)(()=>{let t=e?.columns??[],n=new Set((r??[]).map(e=>e.name));return r?.length&&t.every(e=>n.has(e))?r:t.map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null}))},[r,e?.columns]);return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,S.jsx)(m,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!!n,page:1,onPageChange:T,onCellUpdate:a??T,readOnly:!a,orderBy:null,orderDir:`ASC`,onToggleSort:T,connectionName:i}),e?.executionTimeMs!=null&&(0,S.jsxs)(`div`,{className:`px-3 py-0.5 border-t border-border text-[10px] text-muted-foreground shrink-0`,children:[e.rows.length,` rows · `,e.executionTimeMs,`ms`]})]}),e?.changeType===`select`&&e.rows.length===0&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,S.jsx)(c,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{w as DatabaseViewer};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,S as n}from"./vendor-markdown-QKPNiWEd.js";import"./vendor-ui-P9Ym7hCv.js";import{Lt as r,_r as i,at as a,gr as o,ir as s,un as c}from"./icons-CO_II6D-.js";import{n as l,s as u}from"./api-client-D-SMbdiH.js";import"./settings-store-DvftLqzy.js";import"./panel-store-BUQ-CPsd.js";import"./window-store-B4cbZ5rr.js";import{t as d}from"./tab-store-DqeaGhhE.js";import{_t as f}from"./index-CtAvmybi.js";import"./data-grid-types-CHD9-pon.js";import"./marked.esm-DDb9MclE.js";import"./use-monaco-theme-UGOzyIhv.js";import{n as p,t as m}from"./glide-data-grid-Db2Cl26B.js";import{t as h}from"./sql-query-editor-Dn-cgDrW.js";var g=e(t(),1);function _(e,t,n,r){return`ppm-db-${e}-${n}.${t}-p${r}`}function v(e,t,n,r){try{let i=sessionStorage.getItem(_(e,t,n,r));return i?JSON.parse(i):null}catch{return null}}function y(e,t,n,r,i,a){try{sessionStorage.setItem(_(e,t,n,r),JSON.stringify({data:i,cols:a}))}catch{}}function b(e){let t=`/api/db/connections/${e}`,[n,r]=(0,g.useState)(null),[i,a]=(0,g.useState)(`public`),[o,s]=(0,g.useState)(null),[c,d]=(0,g.useState)([]),[f,p]=(0,g.useState)(!1),[m,h]=(0,g.useState)(null),[_,b]=(0,g.useState)(1),[x,S]=(0,g.useState)(null),[C,w]=(0,g.useState)(null),[T,E]=(0,g.useState)(!1),[D,O]=(0,g.useState)(null),[k,A]=(0,g.useState)(`ASC`),j=(0,g.useRef)(null),M=(0,g.useCallback)(async(r,a,o,c,u)=>{let f=r??n,m=a??i;if(!f)return;j.current=null,p(!0);let g=c===void 0?D:c,v=u??k;try{let n=g?`&orderBy=${encodeURIComponent(g)}&orderDir=${v}`:``,[r,i]=await Promise.all([l.get(`${t}/data?table=${encodeURIComponent(f)}&schema=${m}&page=${o??_}&limit=100${n}`),l.get(`${t}/schema?table=${encodeURIComponent(f)}&schema=${m}`)]);s(r),d(i),y(e,f,m,o??_,r,i)}catch(e){h(e.message)}finally{p(!1)}},[t,e,n,i,_,D,k]),N=(0,g.useCallback)((t,n=`public`)=>{r(t),a(n),b(1),S(null);let i=v(e,t,n,1);i?(s(i.data),d(i.cols),p(!1),M(t,n,1)):M(t,n,1)},[e,M]),P=(0,g.useCallback)(e=>{b(e),M(void 0,void 0,e)},[M]),F=(0,g.useCallback)(async e=>{j.current={sql:e,mode:`table`},p(!0);try{let n=await l.post(`${t}/query`,{sql:e,source:`filter`});n.changeType===`select`&&s({columns:n.columns,rows:n.rows,total:n.rows.length,page:1,limit:n.rows.length})}catch(e){h(e.message)}finally{p(!1)}},[t]),I=(0,g.useCallback)(async e=>{E(!0),w(null);try{let r=await l.post(`${t}/query`,{sql:e});S(r),r.changeType===`modify`?(j.current=null,M(n??void 0,i)):j.current={sql:e,mode:`query`}}catch(e){w(e.message)}finally{E(!1)}},[t,n,i,M]),L=(0,g.useCallback)((e,t)=>{let n=j.current;if(n?.mode===`table`){F(n.sql);return}M(e,t)},[F,M]),R=(0,g.useCallback)((e,t)=>{let n=t.message;h(n),u.error(`${e} failed`,{description:n})},[]),z=(0,g.useCallback)(async(e,r,a,o)=>{if(!n)return;let s=n,c=i;try{await l.put(`${t}/cell`,{table:s,schema:c,pkColumn:e,pkValue:r,column:a,value:o}),L(s,c)}catch(e){R(`Update cell`,e)}},[t,n,i,L,R]),B=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.del(`${t}/row`,{table:a,schema:o,pkColumn:e,pkValue:r}),L(a,o)}catch(e){R(`Delete row`,e)}},[t,n,i,L,R]),V=(0,g.useCallback)(e=>{let t,n=`ASC`;D===e?k===`ASC`?(t=e,n=`DESC`):(t=null,n=`ASC`):(t=e,n=`ASC`),O(t),A(n),b(1),M(void 0,void 0,1,t,n)},[D,k,M]),H=(0,g.useCallback)(()=>{O(null),A(`ASC`),b(1),M(void 0,void 0,1,null,`ASC`)},[M]),U=(0,g.useCallback)(async(e,r)=>{if(!n)return;let a=n,o=i;try{await l.post(`${t}/rows/delete`,{table:a,schema:o,pkColumn:e,pkValues:r}),L(a,o)}catch(e){R(`Delete rows`,e)}},[t,n,i,L,R]),W=(0,g.useCallback)(async e=>{if(!n)return;let r=n,a=i;try{await l.post(`${t}/row`,{table:r,schema:a,values:e}),L(r,a)}catch(e){throw R(`Insert row`,e),e}},[t,n,i,L,R]),G=(0,g.useCallback)(()=>{let e=j.current;if(e?.mode===`query`){I(e.sql);return}if(e?.mode===`table`){F(e.sql);return}M()},[I,F,M]);return{selectedTable:n,selectedSchema:i,selectTable:N,tableData:o,schema:c,loading:f,error:m,page:_,setPage:P,orderBy:D,orderDir:k,toggleSort:V,clearSort:H,queryResult:x,queryError:C,queryLoading:T,executeQuery:I,updateCell:z,updateCellIn:(0,g.useCallback)(async(e,n,r,i,a,o)=>{try{await l.put(`${t}/cell`,{table:e,schema:n,pkColumn:r,pkValue:i,column:a,value:o}),G()}catch(e){R(`Update cell`,e)}},[t,G,R]),deleteRow:B,bulkDelete:U,insertRow:W,refreshData:M,queryAsTable:F,reload:G}}function x(e,t){let n=e.replace(/--[^\r\n]*/g,` `).replace(/\/\*[\s\S]*?\*\//g,` `).trim().replace(/;\s*$/,``);if(!/^select\s/i.test(n)||/\b(join|union|intersect|except|group\s+by|distinct)\b/i.test(n)||(n.match(/\bfrom\b/gi)??[]).length!==1)return null;let r=/\bfrom\s+(?:"([^"]+)"|(\w+))\s*(?:\.\s*(?:"([^"]+)"|(\w+)))?/i.exec(n);if(!r)return null;let i=r[1]??r[2],a=r[3]??r[4];return a?{schema:i,table:a}:{table:i,schema:t}}var S=n();function C(e){let t={},n=/"(\w+)"\s+ILIKE\s+'%([^']*?)%'/gi,r;for(;(r=n.exec(e))!==null;)t[r[1]]=r[2].replace(/''/g,`'`);return t}function w({metadata:e,tabId:t}){let n=e?.connectionId,u=e?.connectionName,_=e?.tableName,v=e?.schemaName??`public`,y=e?.initialSql,w=e?.currentSql,T=d(e=>e.updateTab),D=(0,g.useRef)(e);D.current=e;let O=(0,g.useCallback)(e=>{t&&T(t,{metadata:{...D.current,currentSql:e}})},[t,T]),k=b(n),{connections:A,updateConnection:j}=f(),M=(0,g.useMemo)(()=>A.find(e=>e.id===n),[A,n]),[N,P]=(0,g.useState)([]),[F,I]=(0,g.useState)(180),L=(0,g.useRef)(null),[R,z]=(0,g.useState)({}),B=(0,g.useMemo)(()=>{if(y&&!k.selectedTable)return y;if(k.selectedTable){let e=`SELECT * FROM "${k.selectedTable}"`,t=Object.entries(R).filter(([,e])=>e.trim()).map(([e,t])=>`"${e}" ILIKE '%${t.replace(/'/g,`''`)}%'`);t.length>0&&(e+=` WHERE ${t.join(` AND `)}`),k.orderBy&&(e+=` ORDER BY "${k.orderBy}" ${k.orderDir}`);let n=(k.page-1)*100;return e+=` LIMIT 100`,n>0&&(e+=` OFFSET ${n}`),e}return`SELECT * FROM `},[y,k.selectedTable,k.orderBy,k.orderDir,k.page,R]),V=(0,g.useCallback)(e=>{z(e)},[]),H=(0,g.useRef)(void 0),U=(0,g.useRef)(!1);(0,g.useEffect)(()=>{if(!k.selectedTable)return;let e=Object.values(R).some(e=>e.trim());if(!(!e&&!U.current))return U.current=e,clearTimeout(H.current),H.current=setTimeout(()=>{e?k.queryAsTable(B):k.refreshData()},500),()=>clearTimeout(H.current)},[R]);let W=(0,g.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=F,r=e=>{let r=e.clientY-t;I(Math.max(80,Math.min(n+r,(L.current?.clientHeight??600)-100)))},i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[F]);(0,g.useEffect)(()=>{l.get(`/api/db/connections/${n}/tables?cached=1`).then(e=>P(e.map(e=>({name:e.name,schema:e.schema})))).catch(()=>{})},[n]);let G=(0,g.useMemo)(()=>{if(N.length!==0)return{tables:N,getColumns:async(e,t)=>await l.get(`/api/db/connections/${n}/schema?table=${encodeURIComponent(e)}${t?`&schema=${encodeURIComponent(t)}`:``}`)}},[n,N]),K=(0,g.useRef)(!1);(0,g.useEffect)(()=>{K.current||(K.current=!0,y?k.executeQuery(y):_&&k.selectTable(_,v))},[_,v,y]);let[q,J]=(0,g.useState)(!!y),[Y,ee]=(0,g.useState)(y??null),te=(0,g.useCallback)(e=>{let t=e.trim();if(k.selectedTable&&RegExp(`^SELECT\\s+\\*\\s+FROM\\s+"?${k.selectedTable.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}"?\\b`,`i`).test(t)){z(C(t)),k.queryAsTable(t);return}J(!0),ee(t),k.executeQuery(e)},[k.executeQuery,k.queryAsTable,k.selectedTable]),ne=(0,g.useCallback)(e=>{J(!1),k.toggleSort(e)},[k.toggleSort]),re=(0,g.useCallback)(()=>{J(!1),k.clearSort()},[k.clearSort]),ie=(0,g.useCallback)(e=>{J(!1),k.setPage(e)},[k.setPage]),X=(0,g.useMemo)(()=>M&&!M.readonly&&Y?x(Y,k.selectedSchema):null,[M,Y,k.selectedSchema]),ae=(0,g.useCallback)((e,t,n,r)=>{X&&k.updateCellIn(X.table,X.schema,e,t,n,r)},[X,k.updateCellIn]),Z=k.queryResult,Q=q&&!!(Z||k.queryError),$=k.selectedTable&&!Q,oe=!($&&k.tableData)&&!Q&&(k.loading||k.queryLoading);return(0,S.jsx)(`div`,{ref:L,className:`flex h-full w-full overflow-hidden`,children:(0,S.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden`,children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,S.jsx)(a,{className:`size-3.5 text-muted-foreground`}),(0,S.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:u??`Database`}),k.selectedTable&&(0,S.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`/ `,k.selectedTable]}),(0,S.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[k.tableData&&(0,S.jsx)(p,{columns:k.tableData.columns,rows:k.tableData.rows,filename:u?`${u}-${k.selectedTable??`data`}`:k.selectedTable??`data`,exportAllUrl:k.selectedTable?`/api/db/connections/${n}/export?table=${encodeURIComponent(k.selectedTable)}&schema=${k.selectedSchema}`:void 0}),M&&(0,S.jsx)(`button`,{type:`button`,onClick:()=>j(M.id,{readonly:M.readonly?0:1}),className:`flex items-center gap-0.5 px-1 py-0.5 rounded text-[10px] transition-colors ${M.readonly?`text-muted-foreground hover:text-foreground`:`bg-destructive/15 text-destructive`}`,title:M.readonly?`Readonly — click to allow writes`:`WRITE mode — click to enable readonly`,children:M.readonly?(0,S.jsx)(o,{className:`size-3`}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(i,{className:`size-3`}),(0,S.jsx)(`span`,{className:`font-medium`,children:`WRITE`})]})}),(0,S.jsx)(`button`,{type:`button`,onClick:()=>k.reload(),title:`Reload data`,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,S.jsx)(s,{className:`size-3 ${k.loading||k.queryLoading?`animate-spin`:``}`})})]})]}),(0,S.jsx)(`div`,{className:`shrink-0 border-b border-border`,style:{height:F},children:(0,S.jsx)(h,{onExecute:te,loading:k.queryLoading,defaultValue:B,schemaInfo:G,onSqlChange:O,persistedSql:w})}),(0,S.jsx)(`div`,{onMouseDown:W,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,S.jsx)(r,{className:`size-3 text-muted-foreground/50`})}),(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[$&&k.tableData&&(0,S.jsx)(m,{columns:k.tableData.columns,rows:k.tableData.rows,total:k.tableData.total,limit:k.tableData.limit,schema:k.schema,loading:k.loading,page:k.page,onPageChange:ie,onCellUpdate:k.updateCell,onRowDelete:k.deleteRow,orderBy:k.orderBy,orderDir:k.orderDir,onToggleSort:ne,onClearSort:re,onBulkDelete:k.bulkDelete,onInsertRow:k.insertRow,connectionId:n,selectedTable:k.selectedTable,selectedSchema:k.selectedSchema,connectionName:u,columnFilters:R,onColumnFilter:V}),Q&&(0,S.jsx)(E,{result:Z,error:k.queryError,loading:k.queryLoading,schema:k.schema,connectionName:u,onCellUpdate:X?ae:void 0}),oe&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:(0,S.jsx)(c,{className:`size-4 animate-spin`})})]})]})})}var T=()=>{};function E({result:e,error:t,loading:n,schema:r,connectionName:i,onCellUpdate:a}){let o=(0,g.useMemo)(()=>e?.changeType===`select`&&e.rows.length>0?{columns:e.columns,rows:e.rows,total:e.rows.length,limit:e.rows.length}:null,[e]),s=(0,g.useMemo)(()=>{let t=e?.columns??[],n=new Set((r??[]).map(e=>e.name));return r?.length&&t.every(e=>n.has(e))?r:t.map(e=>({name:e,type:`text`,nullable:!0,pk:!1,defaultValue:null}))},[r,e?.columns]);return(0,S.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden text-xs`,children:[t&&(0,S.jsx)(`div`,{className:`px-3 py-2 text-destructive bg-destructive/5 shrink-0`,children:t}),e?.changeType===`modify`&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-success shrink-0`,children:[e.rowsAffected,` row(s) affected`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`text-muted-foreground ml-2`,children:[e.executionTimeMs,`ms`]})]}),o&&(0,S.jsxs)(`div`,{className:`flex-1 overflow-hidden`,children:[(0,S.jsx)(m,{columns:o.columns,rows:o.rows,total:o.total,limit:o.limit,schema:s,loading:!!n,page:1,onPageChange:T,onCellUpdate:a??T,readOnly:!a,orderBy:null,orderDir:`ASC`,onToggleSort:T,connectionName:i}),e?.executionTimeMs!=null&&(0,S.jsxs)(`div`,{className:`px-3 py-0.5 border-t border-border text-[10px] text-muted-foreground shrink-0`,children:[e.rows.length,` rows · `,e.executionTimeMs,`ms`]})]}),e?.changeType===`select`&&e.rows.length===0&&(0,S.jsxs)(`div`,{className:`px-3 py-2 text-muted-foreground shrink-0`,children:[`No results`,e.executionTimeMs!=null&&(0,S.jsxs)(`span`,{className:`ml-2 text-muted-foreground/60`,children:[e.executionTimeMs,`ms`]})]}),!e&&!t&&(0,S.jsx)(`div`,{className:`flex items-center justify-center h-full text-muted-foreground`,children:n?(0,S.jsx)(c,{className:`size-4 animate-spin`}):`Run a query to see results`})]})}export{w as DatabaseViewer};
|
|
Binary file
|
|
Binary file
|
package/dist/web/assets/{design-export-client-ChMcMoqW.js → design-export-client-OrnGCSwu.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e,n as t,r as n}from"./api-client-
|
|
1
|
+
import{i as e,n as t,r as n}from"./api-client-D-SMbdiH.js";var r=`application/octet-stream`,i=`noopener noreferrer`,a=(t,n,r,i)=>`${e(t)}/designs/${encodeURIComponent(n)}/export/${r}${i?`?entry=${encodeURIComponent(i)}`:``}`;function o(e,t){let n=/filename="([^"]+)"/.exec(e??``)?.[1]??``;return/^[A-Za-z0-9._-]{1,200}$/.test(n)?n:t}function s(e){if(!e)return[];try{let t=JSON.parse(decodeURIComponent(e));return Array.isArray(t)?t.filter(e=>typeof e==`string`).slice(0,50):[]}catch{return[]}}async function c(e,t,i,c){let l=n(),u=await fetch(a(e,t,i,c),{headers:{"x-ppm-client":`web`,...l?{Authorization:`Bearer ${l}`}:{}}});if(!u.ok){let e=`Export failed (HTTP ${u.status})`;try{let t=await u.json();typeof t.error==`string`&&t.error&&(e=t.error)}catch{}throw Error(e)}let d=await u.blob(),f=Number(u.headers.get(`X-PPM-Export-Warnings`)??`0`);return{blob:new Blob([d],{type:r}),filename:o(u.headers.get(`Content-Disposition`),`${t}.${i}`),warnings:s(u.headers.get(`X-PPM-Export-Warning-List`)),warningCount:Number.isFinite(f)&&f>0?Math.floor(f):0}}function l(e,t,n=document){let a=e.type===`application/octet-stream`?e:new Blob([e],{type:r}),o=URL.createObjectURL(a);try{let e=n.createElement(`a`);e.href=o,e.download=t,e.rel=i,e.style.display=`none`,n.body.appendChild(e),e.click(),n.body.removeChild(e)}finally{setTimeout(()=>URL.revokeObjectURL(o),0)}}async function u(e,n,r){let i=await t.post(`/api/design-preview`,{projectName:e,slug:n,purpose:r});if(typeof i?.url!=`string`||!i.url.startsWith(`/api/design-preview/content/`))throw Error(`The server returned no preview address`);return{url:i.url,expiresAt:typeof i.expiresAt==`number`?i.expiresAt:Date.now()}}export{l as a,u as i,i as n,c as r,r as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e}from"./vendor-markdown-QKPNiWEd.js";import{n as t}from"./utils-btZ8C8-R.js";import{n}from"./use-is-mobile-BClDZJP5.js";import{a as r,n as i,o as a,r as o,t as s}from"./dialog-
|
|
1
|
+
import{S as e}from"./vendor-markdown-QKPNiWEd.js";import{n as t}from"./utils-btZ8C8-R.js";import{n}from"./use-is-mobile-BClDZJP5.js";import{a as r,n as i,o as a,r as o,t as s}from"./dialog-Bocc0Fgb.js";import{t as c}from"./mobile-bottom-sheet-D4UyOatB.js";var l=e();function u({open:e,onClose:u,title:d,description:f,children:p,footer:m,className:h}){return n()?(0,l.jsx)(c,{open:e,onClose:u,className:`max-h-[85vh] p-4`,children:(0,l.jsxs)(`div`,{className:t(`flex flex-col gap-3`,h),children:[(0,l.jsxs)(`div`,{children:[(0,l.jsx)(`h2`,{className:`text-base font-semibold text-text`,children:d}),f&&(0,l.jsx)(`p`,{className:`mt-1 text-sm text-text-2`,children:f})]}),p&&(0,l.jsx)(`div`,{className:`max-h-[55vh] overflow-y-auto`,children:p}),m&&(0,l.jsx)(`div`,{className:`flex flex-col gap-2 pt-1 [&>*]:min-h-11`,children:m})]})}):(0,l.jsx)(s,{open:e,onOpenChange:e=>{e||u()},children:(0,l.jsxs)(i,{className:t(`sm:max-w-md`,h),children:[(0,l.jsxs)(r,{children:[(0,l.jsx)(a,{children:d}),f&&(0,l.jsx)(o,{children:f})]}),p&&(0,l.jsx)(`div`,{className:`max-h-[60vh] overflow-y-auto`,children:p}),m&&(0,l.jsx)(`div`,{className:`flex justify-end gap-2 pt-2`,children:m})]})})}export{u as t};
|
|
Binary file
|
|
Binary file
|