@hienlh/ppm 0.23.8 → 0.23.10
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 +16 -0
- package/CLAUDE.md +4 -0
- 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 +1 -1
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js +1 -0
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js +2 -0
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-BcQbnaV2.js +1 -0
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js +1 -0
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-DfVRMUHS.js → ai-resource-editor-M1Eax2Hc.js} +1 -1
- package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-B73t9SXm.js +1 -0
- package/dist/web/assets/{ai-settings-section-Ezhw4Fef.js → ai-settings-section-H173dm1k.js} +1 -1
- package/dist/web/assets/ai-settings-section-H173dm1k.js.br +0 -0
- package/dist/web/assets/ai-settings-section-H173dm1k.js.gz +0 -0
- package/dist/web/assets/{api-settings-tYKJ5Fqk.js → api-settings-BA_n8cPt.js} +1 -1
- package/dist/web/assets/{appearance-settings-section-CPOAp0fY.js → appearance-settings-section-Dqu20pt8.js} +1 -1
- package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.gz +0 -0
- package/dist/web/assets/{apps-panel-Cz7_o-M4.js → apps-panel-mkrzY7K0.js} +1 -1
- package/dist/web/assets/apps-panel-mkrzY7K0.js.br +0 -0
- package/dist/web/assets/apps-panel-mkrzY7K0.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js +1 -0
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js.br +0 -0
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js.gz +0 -0
- package/dist/web/assets/chat-tab-BAbcVFzD.js +15 -0
- package/dist/web/assets/chat-tab-BAbcVFzD.js.br +0 -0
- package/dist/web/assets/chat-tab-BAbcVFzD.js.gz +0 -0
- package/dist/web/assets/chat-tab-BaXGaBEC.js +1 -0
- package/dist/web/assets/chat-tab-BaXGaBEC.js.br +4 -0
- package/dist/web/assets/chat-tab-BaXGaBEC.js.gz +0 -0
- package/dist/web/assets/code-editor-CXLANXnI.js +7 -0
- package/dist/web/assets/code-editor-CXLANXnI.js.br +0 -0
- package/dist/web/assets/code-editor-CXLANXnI.js.gz +0 -0
- package/dist/web/assets/{codex-reset-credit-button-D2hal4bG.js → codex-reset-credit-button-CB8Dfhki.js} +1 -1
- package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-Cj_gUncw.js → conflict-editor-CKsxIw3v.js} +2 -2
- package/dist/web/assets/conflict-editor-CKsxIw3v.js.br +0 -0
- package/dist/web/assets/conflict-editor-CKsxIw3v.js.gz +0 -0
- package/dist/web/assets/{csv-preview-Be3ODNj0.js → csv-preview-U0v_r_-7.js} +1 -1
- package/dist/web/assets/csv-preview-U0v_r_-7.js.br +0 -0
- package/dist/web/assets/csv-preview-U0v_r_-7.js.gz +0 -0
- package/dist/web/assets/{database-viewer-B1b--4y8.js → database-viewer-xQyUcBoL.js} +1 -1
- package/dist/web/assets/database-viewer-xQyUcBoL.js.br +0 -0
- package/dist/web/assets/database-viewer-xQyUcBoL.js.gz +0 -0
- package/dist/web/assets/{design-tab-8wi0IHss.js → design-tab-aaAt2_QE.js} +4 -4
- package/dist/web/assets/design-tab-aaAt2_QE.js.br +0 -0
- package/dist/web/assets/design-tab-aaAt2_QE.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-D5-1Q8zQ.js → designs-sidebar-panel-CTzO4Thu.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.gz +0 -0
- package/dist/web/assets/{diff-viewer-Dcxk6UTG.js → diff-viewer-CSE2-OE7.js} +1 -1
- package/dist/web/assets/diff-viewer-CSE2-OE7.js.br +0 -0
- package/dist/web/assets/diff-viewer-CSE2-OE7.js.gz +0 -0
- package/dist/web/assets/{edit-diff-preview-DxDAtYhi.js → edit-diff-preview-gH6pRk4S.js} +1 -1
- package/dist/web/assets/edit-diff-preview-gH6pRk4S.js.br +0 -0
- package/dist/web/assets/{edit-diff-preview-DxDAtYhi.js.gz → edit-diff-preview-gH6pRk4S.js.gz} +0 -0
- package/dist/web/assets/{editor-language-service-BVJQnTSV.js → editor-language-service-CYl04pUy.js} +1 -1
- package/dist/web/assets/editor-language-service-CYl04pUy.js.br +0 -0
- package/dist/web/assets/editor-language-service-CYl04pUy.js.gz +0 -0
- package/dist/web/assets/explorer-body-BBOcvwmV.js +2 -0
- package/dist/web/assets/explorer-body-BBOcvwmV.js.br +0 -0
- package/dist/web/assets/explorer-body-BBOcvwmV.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-DH5AD3Ng.js → explorer-window-content-juCGcrkc.js} +1 -1
- package/dist/web/assets/explorer-window-content-juCGcrkc.js.br +0 -0
- package/dist/web/assets/explorer-window-content-juCGcrkc.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-BJr6ccWw.js → extension-manager-section-poMRmwvg.js} +1 -1
- package/dist/web/assets/extension-manager-section-poMRmwvg.js.br +0 -0
- package/dist/web/assets/extension-manager-section-poMRmwvg.js.gz +0 -0
- package/dist/web/assets/{extension-webview-CYNXHd8D.js → extension-webview-0QfzTI6s.js} +1 -1
- package/dist/web/assets/extension-webview-0QfzTI6s.js.br +0 -0
- package/dist/web/assets/extension-webview-0QfzTI6s.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-JX7o4lex.js → files-settings-section-DJptxRgH.js} +1 -1
- package/dist/web/assets/files-settings-section-DJptxRgH.js.br +0 -0
- package/dist/web/assets/files-settings-section-DJptxRgH.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-kF94Mz5q.js → general-settings-section-BFNbdDNv.js} +1 -1
- package/dist/web/assets/general-settings-section-BFNbdDNv.js.br +0 -0
- package/dist/web/assets/general-settings-section-BFNbdDNv.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-Crlp9ofM.js → git-log-panel-SMMIbjSe.js} +1 -1
- package/dist/web/assets/git-log-panel-SMMIbjSe.js.br +0 -0
- package/dist/web/assets/git-log-panel-SMMIbjSe.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-O6MO5dKU.js → glide-data-grid-DZVmgu0T.js} +3 -3
- package/dist/web/assets/glide-data-grid-DZVmgu0T.js.br +0 -0
- package/dist/web/assets/glide-data-grid-DZVmgu0T.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js +1 -0
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js.br +0 -0
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js.gz +0 -0
- package/dist/web/assets/{index-DQCw6d-2.js → index-CIscPw4g.js} +6 -6
- package/dist/web/assets/index-CIscPw4g.js.br +0 -0
- package/dist/web/assets/index-CIscPw4g.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-DwM7gqHT.js → jira-watcher-section-CsbhnLLn.js} +1 -1
- package/dist/web/assets/keybindings-store-BPs0pM0r.js +1 -0
- package/dist/web/assets/{keyboard-shortcuts-section-CewWGwiF.js → keyboard-shortcuts-section-CXqc2OtM.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.gz +0 -0
- package/dist/web/assets/{language-servers-section-nricdxke.js → language-servers-section-B4FsBVvZ.js} +2 -2
- package/dist/web/assets/language-servers-section-B4FsBVvZ.js.br +0 -0
- package/dist/web/assets/language-servers-section-B4FsBVvZ.js.gz +0 -0
- package/dist/web/assets/{lsp-client-DRMEWb-z.js → lsp-client-MQ4mjDfT.js} +1 -1
- package/dist/web/assets/lsp-client-MQ4mjDfT.js.br +0 -0
- package/dist/web/assets/lsp-client-MQ4mjDfT.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-BvCZZlue.js +1 -0
- package/dist/web/assets/{markdown-renderer-Dab9Us6u.js → markdown-renderer-CjPb5pns.js} +3 -3
- package/dist/web/assets/markdown-renderer-CjPb5pns.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CjPb5pns.js.gz +0 -0
- package/dist/web/assets/{mobile-explorer-sheet-DtgdpvJ9.js → mobile-explorer-sheet-0aGhVQtI.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-Dd5KDB_p.js → new-design-dialog-2oT2oc_F.js} +1 -1
- package/dist/web/assets/new-design-dialog-2oT2oc_F.js.br +0 -0
- package/dist/web/assets/new-design-dialog-2oT2oc_F.js.gz +0 -0
- package/dist/web/assets/notification-store-Dd25PMPQ.js +1 -0
- package/dist/web/assets/{panel-store-DrSH3Nhp.js → panel-store-1X6yM3XZ.js} +1 -1
- package/dist/web/assets/panel-store-1X6yM3XZ.js.br +0 -0
- package/dist/web/assets/panel-store-1X6yM3XZ.js.gz +0 -0
- package/dist/web/assets/performance-panel-Ub96qrEH.js +3 -0
- package/dist/web/assets/performance-panel-Ub96qrEH.js.br +0 -0
- package/dist/web/assets/performance-panel-Ub96qrEH.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-D67u6gPi.js → ppmbot-settings-section-CPMGP66g.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.gz +0 -0
- package/dist/web/assets/{problems-panel-DKgIw4uZ.js → problems-panel-CWwzZIP3.js} +1 -1
- package/dist/web/assets/problems-panel-CWwzZIP3.js.br +0 -0
- package/dist/web/assets/problems-panel-CWwzZIP3.js.gz +0 -0
- package/dist/web/assets/process-table-BwPws3zS.js +1 -0
- package/dist/web/assets/process-table-BwPws3zS.js.br +0 -0
- package/dist/web/assets/process-table-BwPws3zS.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-CFiYcTBA.js → proxy-settings-section-nS8VbxI_.js} +1 -1
- package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.gz +0 -0
- package/dist/web/assets/{query-audit-section-BybgiPsc.js → query-audit-section-Dv5Pxn-w.js} +1 -1
- package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.br +0 -0
- package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-Bs3fZSRw.js → remote-desktop-clipboard-notice-DEbdu0hC.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-DgGOfPVY.js → remote-desktop-mobile-view-DPdGFD6C.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate-DOWryrQx.js → remote-desktop-readiness-gate-DV7YgSpP.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.gz +0 -0
- package/dist/web/assets/{run-in-terminal-Cdn9PaAl.js → run-in-terminal-B_PCeBqG.js} +1 -1
- package/dist/web/assets/{schedules-settings-section-DGhG-b5O.js → schedules-settings-section-B3HYKSVh.js} +1 -1
- package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.gz +0 -0
- package/dist/web/assets/{send-to-chat-B09VjsB5.js → send-to-chat-Bjg6c8Ld.js} +1 -1
- package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.br +0 -0
- package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.gz +0 -0
- package/dist/web/assets/{services-panel-0klE3O4g.js → services-panel-D6k6AVS4.js} +1 -1
- package/dist/web/assets/services-panel-D6k6AVS4.js.br +0 -0
- package/dist/web/assets/services-panel-D6k6AVS4.js.gz +0 -0
- package/dist/web/assets/{settings-body-CfqpqFfq.js → settings-body-Cu0mNA5x.js} +2 -2
- package/dist/web/assets/settings-body-Cu0mNA5x.js.br +0 -0
- package/dist/web/assets/settings-body-Cu0mNA5x.js.gz +0 -0
- package/dist/web/assets/{settings-store-3jIBB8gx.js → settings-store-DIV25PM_.js} +2 -2
- package/dist/web/assets/settings-store-DIV25PM_.js.br +0 -0
- package/dist/web/assets/settings-store-DIV25PM_.js.gz +0 -0
- package/dist/web/assets/{settings-tab-CHweH5Nh.js → settings-tab-C-A6RNQ3.js} +1 -1
- package/dist/web/assets/{settings-window-content-C6Od3qV7.js → settings-window-content-48e5FJAq.js} +1 -1
- package/dist/web/assets/{sql-query-editor-ALQ5_X0j.js → sql-query-editor-CgGWYu9K.js} +1 -1
- package/dist/web/assets/sql-query-editor-CgGWYu9K.js.br +0 -0
- package/dist/web/assets/sql-query-editor-CgGWYu9K.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-DKTty_jR.js → sqlite-viewer-Co1Oi3dv.js} +1 -1
- package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-D6J6lq7-.js → system-monitor-body-DxPKVa-W.js} +2 -2
- package/dist/web/assets/system-monitor-body-DxPKVa-W.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DxPKVa-W.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-4miOZuQQ.js +1 -0
- package/dist/web/assets/{system-monitor-window-content-D1t30f32.js → system-monitor-window-content-B-A7DdML.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-DTcx2D0O.js → tab-host-window-content-CChcpg1v.js} +1 -1
- package/dist/web/assets/tab-host-window-content-CChcpg1v.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CChcpg1v.js.gz +0 -0
- package/dist/web/assets/{tab-store-CUPgQIQz.js → tab-store-D33icgdA.js} +1 -1
- package/dist/web/assets/{terminal-tab-DgTfQKBI.js → terminal-tab-BDqlyBLK.js} +2 -2
- package/dist/web/assets/terminal-tab-BDqlyBLK.js.br +0 -0
- package/dist/web/assets/terminal-tab-BDqlyBLK.js.gz +0 -0
- package/dist/web/assets/tool-cards-iJ8tyrLq.js +9 -0
- package/dist/web/assets/tool-cards-iJ8tyrLq.js.br +0 -0
- package/dist/web/assets/tool-cards-iJ8tyrLq.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-Dv111BKY.js → use-inline-blame-D9js570a.js} +4 -4
- package/dist/web/assets/use-inline-blame-D9js570a.js.br +0 -0
- package/dist/web/assets/use-inline-blame-D9js570a.js.gz +0 -0
- package/dist/web/assets/{use-lsp-CZTFJIXX.js → use-lsp-BYtylZId.js} +1 -1
- package/dist/web/assets/use-lsp-BYtylZId.js.br +0 -0
- package/dist/web/assets/use-lsp-BYtylZId.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-DL2dIG5L.js → use-monaco-theme-DJ8y_7IZ.js} +1 -1
- package/dist/web/assets/{use-process-kill-D7D9QvJG.js → use-process-kill-BS84S-kD.js} +1 -1
- package/dist/web/assets/use-process-kill-BS84S-kD.js.br +0 -0
- package/dist/web/assets/use-process-kill-BS84S-kD.js.gz +0 -0
- package/dist/web/assets/{use-websocket-ziY-Gz_B.js → use-websocket-Mqj27umG.js} +1 -1
- package/dist/web/assets/{video-preview-DzwY3q9W.js → video-preview-BuzUAIma.js} +1 -1
- package/dist/web/assets/video-preview-BuzUAIma.js.br +0 -0
- package/dist/web/assets/video-preview-BuzUAIma.js.gz +0 -0
- package/dist/web/assets/{voice-settings-section-B7zMHsuz.js → voice-settings-section-DnwQjBbw.js} +1 -1
- package/dist/web/assets/voice-settings-section-DnwQjBbw.js.br +0 -0
- package/dist/web/assets/voice-settings-section-DnwQjBbw.js.gz +0 -0
- package/dist/web/assets/{window-pip-registry-dxrBFfkP.js → window-pip-registry-Bl--fK8-.js} +1 -1
- package/dist/web/assets/window-store-vo1N70nK.js +1 -0
- package/dist/web/assets/window-store-vo1N70nK.js.br +0 -0
- package/dist/web/assets/window-store-vo1N70nK.js.gz +0 -0
- package/dist/web/index.html +6 -6
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/docs/architecture/ai-chat-and-providers.md +66 -0
- package/docs/architecture/workspace-and-ui.md +15 -3
- package/docs/design-guidelines.md +6 -1
- package/package.json +1 -1
- package/src/providers/codex-app-server/codex-history.ts +4 -4
- package/src/providers/codex-app-server/codex-provider.ts +1 -1
- package/src/providers/codex-app-server/codex-rollout-tail-parser.ts +203 -0
- package/src/providers/codex-app-server/codex-subagent-thread.ts +7 -1
- package/src/server/index.ts +7 -2
- package/src/server/routes/chat.ts +12 -4
- package/src/server/ws/global.ts +19 -3
- package/src/services/agent-transcript/agent-transcript-activity.ts +72 -0
- package/src/services/agent-transcript/agent-transcript-codex-activity.ts +161 -0
- package/src/services/agent-transcript/agent-transcript-codex-tail-cache.ts +85 -0
- package/src/services/agent-transcript/agent-transcript-envelope.ts +86 -0
- package/src/services/agent-transcript/agent-transcript-error-map.ts +33 -0
- package/src/services/agent-transcript/agent-transcript-file-tail-feed.ts +180 -0
- package/src/services/agent-transcript/agent-transcript-file-tail-state.ts +100 -0
- package/src/services/agent-transcript/agent-transcript-fs-io.ts +79 -0
- package/src/services/agent-transcript/agent-transcript-hub-clock.ts +37 -0
- package/src/services/agent-transcript/agent-transcript-hub-registry.ts +153 -0
- package/src/services/agent-transcript/agent-transcript-hub.ts +103 -0
- package/src/services/agent-transcript/agent-transcript-index-cache.ts +85 -0
- package/src/services/agent-transcript/agent-transcript-session-hub-activity.ts +103 -0
- package/src/services/agent-transcript/agent-transcript-session-hub-read.ts +194 -0
- package/src/services/agent-transcript/agent-transcript-session-hub-types.ts +81 -0
- package/src/services/agent-transcript/agent-transcript-session-hub.ts +196 -0
- package/src/services/agent-transcript/agent-transcript-sources.ts +199 -0
- package/src/services/agent-transcript/agent-transcript-ws-like.ts +19 -0
- package/src/services/agent-transcript/claude-projects-root.ts +21 -0
- package/src/services/agent-transcript/session-ownership.ts +152 -0
- package/src/services/nested-subagent-spy.ts +3 -3
- package/src/services/subagent-transcript-merger.ts +21 -7
- package/src/shared/agent-transcript-protocol.ts +158 -0
- package/src/types/chat.ts +27 -3
- package/src/web/app.tsx +5 -5
- package/src/web/components/chat/agent-card-summary.tsx +73 -0
- package/src/web/components/chat/agent-session-context.ts +34 -0
- package/src/web/components/chat/agent-session-fallback-store.ts +60 -0
- package/src/web/components/chat/agent-session-sheet-store.ts +23 -0
- package/src/web/components/chat/{team-member-sheet.tsx → agent-session-sheet.tsx} +12 -12
- package/src/web/components/chat/agent-session-window-content.tsx +133 -0
- package/src/web/components/chat/chat-history-bar.tsx +1 -0
- package/src/web/components/chat/chat-tab.tsx +21 -4
- package/src/web/components/chat/codex-usage-panel.tsx +26 -8
- package/src/web/components/chat/running-agents-bar.tsx +93 -0
- package/src/web/components/chat/team-activity-panel.tsx +19 -5
- package/src/web/components/chat/tool-cards.tsx +73 -4
- package/src/web/components/chat/use-open-agent-session.ts +83 -0
- package/src/web/components/floating-window/window-content-registry.ts +4 -5
- package/src/web/components/floating-window/window-geometry.ts +18 -0
- package/src/web/components/floating-window/window-persistence.ts +5 -4
- package/src/web/components/floating-window/window-store-types.ts +1 -1
- package/src/web/components/settings/resolve-open-settings-action.ts +1 -1
- package/src/web/components/system/resolve-open-system-monitor-action.ts +1 -1
- package/src/web/hooks/use-agent-activity.ts +65 -0
- package/src/web/hooks/use-agent-session-stream.ts +134 -0
- package/src/web/hooks/use-chat.ts +12 -18
- package/src/web/hooks/use-global-events.ts +35 -2
- package/src/web/lib/agent-session-stream-merge.ts +48 -0
- package/src/web/lib/agent-step-summary.ts +331 -0
- package/src/web/lib/global-ws-channel.ts +41 -0
- package/src/web/lib/running-agent-rows.ts +115 -0
- package/dist/web/assets/accounts-settings-section-BNcPvEq1.js +0 -1
- package/dist/web/assets/accounts-settings-section-BNcPvEq1.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BNcPvEq1.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-DfVRMUHS.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-DfVRMUHS.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-B_0-P8jx.js +0 -1
- package/dist/web/assets/ai-settings-section-Ezhw4Fef.js.br +0 -0
- package/dist/web/assets/ai-settings-section-Ezhw4Fef.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-CPOAp0fY.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-CPOAp0fY.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cz7_o-M4.js.br +0 -0
- package/dist/web/assets/apps-panel-Cz7_o-M4.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-BPx3kHrM.js +0 -1
- package/dist/web/assets/branch-review-tab-BPx3kHrM.js.br +0 -0
- package/dist/web/assets/branch-review-tab-BPx3kHrM.js.gz +0 -0
- package/dist/web/assets/chat-tab-BadDM_j8.js +0 -1
- package/dist/web/assets/chat-tab-BadDM_j8.js.br +0 -0
- package/dist/web/assets/chat-tab-BadDM_j8.js.gz +0 -0
- package/dist/web/assets/chat-tab-IqAY4c7p.js +0 -15
- package/dist/web/assets/chat-tab-IqAY4c7p.js.br +0 -0
- package/dist/web/assets/chat-tab-IqAY4c7p.js.gz +0 -0
- package/dist/web/assets/code-editor-Dmitw9QS.js +0 -7
- package/dist/web/assets/code-editor-Dmitw9QS.js.br +0 -0
- package/dist/web/assets/code-editor-Dmitw9QS.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-D2hal4bG.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-D2hal4bG.js.gz +0 -0
- package/dist/web/assets/conflict-editor-Cj_gUncw.js.br +0 -0
- package/dist/web/assets/conflict-editor-Cj_gUncw.js.gz +0 -0
- package/dist/web/assets/csv-preview-Be3ODNj0.js.br +0 -0
- package/dist/web/assets/csv-preview-Be3ODNj0.js.gz +0 -0
- package/dist/web/assets/database-viewer-B1b--4y8.js.br +0 -0
- package/dist/web/assets/database-viewer-B1b--4y8.js.gz +0 -0
- package/dist/web/assets/design-tab-8wi0IHss.js.br +0 -0
- package/dist/web/assets/design-tab-8wi0IHss.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-D5-1Q8zQ.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-D5-1Q8zQ.js.gz +0 -0
- package/dist/web/assets/diff-viewer-Dcxk6UTG.js.br +0 -0
- package/dist/web/assets/diff-viewer-Dcxk6UTG.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-DxDAtYhi.js.br +0 -0
- package/dist/web/assets/editor-language-service-BVJQnTSV.js.br +0 -0
- package/dist/web/assets/editor-language-service-BVJQnTSV.js.gz +0 -0
- package/dist/web/assets/explorer-body-CTkrlrI3.js +0 -2
- package/dist/web/assets/explorer-body-CTkrlrI3.js.br +0 -0
- package/dist/web/assets/explorer-body-CTkrlrI3.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-DH5AD3Ng.js.br +0 -0
- package/dist/web/assets/explorer-window-content-DH5AD3Ng.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-BJr6ccWw.js.br +0 -0
- package/dist/web/assets/extension-manager-section-BJr6ccWw.js.gz +0 -0
- package/dist/web/assets/extension-webview-CYNXHd8D.js.br +0 -0
- package/dist/web/assets/extension-webview-CYNXHd8D.js.gz +0 -0
- package/dist/web/assets/files-settings-section-JX7o4lex.js.br +0 -0
- package/dist/web/assets/files-settings-section-JX7o4lex.js.gz +0 -0
- package/dist/web/assets/general-settings-section-kF94Mz5q.js.br +0 -0
- package/dist/web/assets/general-settings-section-kF94Mz5q.js.gz +0 -0
- package/dist/web/assets/git-log-panel-Crlp9ofM.js.br +0 -0
- package/dist/web/assets/git-log-panel-Crlp9ofM.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-O6MO5dKU.js.br +0 -0
- package/dist/web/assets/glide-data-grid-O6MO5dKU.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-DGLSGf37.js +0 -1
- package/dist/web/assets/group-chat-tab-DGLSGf37.js.br +0 -0
- package/dist/web/assets/group-chat-tab-DGLSGf37.js.gz +0 -0
- package/dist/web/assets/index-DQCw6d-2.js.br +0 -0
- package/dist/web/assets/index-DQCw6d-2.js.gz +0 -0
- package/dist/web/assets/keybindings-store-CJtEHFIQ.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-CewWGwiF.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CewWGwiF.js.gz +0 -0
- package/dist/web/assets/language-servers-section-nricdxke.js.br +0 -0
- package/dist/web/assets/language-servers-section-nricdxke.js.gz +0 -0
- package/dist/web/assets/lsp-client-DRMEWb-z.js.br +0 -0
- package/dist/web/assets/lsp-client-DRMEWb-z.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-D5-xliE9.js +0 -1
- package/dist/web/assets/markdown-renderer-Dab9Us6u.js.br +0 -0
- package/dist/web/assets/markdown-renderer-Dab9Us6u.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-DtgdpvJ9.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-DtgdpvJ9.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-Dd5KDB_p.js.br +0 -0
- package/dist/web/assets/new-design-dialog-Dd5KDB_p.js.gz +0 -0
- package/dist/web/assets/notification-store-D2vTyp_Q.js +0 -1
- package/dist/web/assets/panel-store-DrSH3Nhp.js.br +0 -0
- package/dist/web/assets/panel-store-DrSH3Nhp.js.gz +0 -0
- package/dist/web/assets/performance-panel-LMGefOQ2.js +0 -3
- package/dist/web/assets/performance-panel-LMGefOQ2.js.br +0 -0
- package/dist/web/assets/performance-panel-LMGefOQ2.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-D67u6gPi.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-D67u6gPi.js.gz +0 -0
- package/dist/web/assets/problems-panel-DKgIw4uZ.js.br +0 -0
- package/dist/web/assets/problems-panel-DKgIw4uZ.js.gz +0 -0
- package/dist/web/assets/process-table-BIAgC_jG.js +0 -1
- package/dist/web/assets/process-table-BIAgC_jG.js.br +0 -0
- package/dist/web/assets/process-table-BIAgC_jG.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CFiYcTBA.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CFiYcTBA.js.gz +0 -0
- package/dist/web/assets/query-audit-section-BybgiPsc.js.br +0 -0
- package/dist/web/assets/query-audit-section-BybgiPsc.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Bs3fZSRw.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Bs3fZSRw.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-DgxTdWMh.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DgGOfPVY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DgGOfPVY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DOWryrQx.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DOWryrQx.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-7t0wQsHx.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-DGhG-b5O.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-DGhG-b5O.js.gz +0 -0
- package/dist/web/assets/send-to-chat-B09VjsB5.js.br +0 -0
- package/dist/web/assets/send-to-chat-B09VjsB5.js.gz +0 -0
- package/dist/web/assets/services-panel-0klE3O4g.js.br +0 -0
- package/dist/web/assets/services-panel-0klE3O4g.js.gz +0 -0
- package/dist/web/assets/settings-body-CfqpqFfq.js.br +0 -0
- package/dist/web/assets/settings-body-CfqpqFfq.js.gz +0 -0
- package/dist/web/assets/settings-store-3jIBB8gx.js.br +0 -0
- package/dist/web/assets/settings-store-3jIBB8gx.js.gz +0 -0
- package/dist/web/assets/sql-query-editor-ALQ5_X0j.js.br +0 -0
- package/dist/web/assets/sql-query-editor-ALQ5_X0j.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-DKTty_jR.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-DKTty_jR.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-D6J6lq7-.js.br +0 -0
- package/dist/web/assets/system-monitor-body-D6J6lq7-.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-Di18zNNS.js +0 -1
- package/dist/web/assets/tab-host-window-content-DTcx2D0O.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-DTcx2D0O.js.gz +0 -0
- package/dist/web/assets/team-member-sheet-CFSbPG6n.js +0 -2
- package/dist/web/assets/team-member-sheet-CFSbPG6n.js.br +0 -0
- package/dist/web/assets/team-member-sheet-CFSbPG6n.js.gz +0 -0
- package/dist/web/assets/team-member-window-content-VeI6DGeM.js +0 -1
- package/dist/web/assets/team-member-window-content-VeI6DGeM.js.br +0 -0
- package/dist/web/assets/team-member-window-content-VeI6DGeM.js.gz +0 -0
- package/dist/web/assets/terminal-tab-DgTfQKBI.js.br +0 -0
- package/dist/web/assets/terminal-tab-DgTfQKBI.js.gz +0 -0
- package/dist/web/assets/tool-cards-_fpYI1hB.js +0 -9
- package/dist/web/assets/tool-cards-_fpYI1hB.js.br +0 -0
- package/dist/web/assets/tool-cards-_fpYI1hB.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-Dv111BKY.js.br +0 -0
- package/dist/web/assets/use-inline-blame-Dv111BKY.js.gz +0 -0
- package/dist/web/assets/use-lsp-CZTFJIXX.js.br +0 -0
- package/dist/web/assets/use-lsp-CZTFJIXX.js.gz +0 -0
- package/dist/web/assets/use-open-team-member-ElN3KmCI.js +0 -1
- package/dist/web/assets/use-process-kill-D7D9QvJG.js.br +0 -0
- package/dist/web/assets/use-process-kill-D7D9QvJG.js.gz +0 -0
- package/dist/web/assets/video-preview-DzwY3q9W.js.br +0 -0
- package/dist/web/assets/video-preview-DzwY3q9W.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-B7zMHsuz.js.br +0 -0
- package/dist/web/assets/voice-settings-section-B7zMHsuz.js.gz +0 -0
- package/dist/web/assets/window-store-B4cbZ5rr.js +0 -1
- package/dist/web/assets/window-store-B4cbZ5rr.js.br +0 -0
- package/dist/web/assets/window-store-B4cbZ5rr.js.gz +0 -0
- package/src/web/components/chat/team-member-window-content.tsx +0 -66
- package/src/web/components/chat/team-working-bar.tsx +0 -62
- package/src/web/components/chat/use-open-team-member.ts +0 -41
- package/src/web/hooks/use-member-transcript-tail.ts +0 -95
- /package/dist/web/assets/{api-settings-BeINN5Dy.js → api-settings-BWgfXl7o.js} +0 -0
- /package/dist/web/assets/{api-settings-BeINN5Dy.js.br → api-settings-BWgfXl7o.js.br} +0 -0
- /package/dist/web/assets/{api-settings-BeINN5Dy.js.gz → api-settings-BWgfXl7o.js.gz} +0 -0
- /package/dist/web/assets/{libesm-CxeQSM3t.js → libesm-DAF5_F99.js} +0 -0
- /package/dist/web/assets/{libesm-CxeQSM3t.js.br → libesm-DAF5_F99.js.br} +0 -0
- /package/dist/web/assets/{libesm-CxeQSM3t.js.gz → libesm-DAF5_F99.js.gz} +0 -0
- /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js → onboarding-entry-Bh-WE3vq.js} +0 -0
- /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js.br → onboarding-entry-Bh-WE3vq.js.br} +0 -0
- /package/dist/web/assets/{onboarding-entry-DD3QSDiz.js.gz → onboarding-entry-Bh-WE3vq.js.gz} +0 -0
|
@@ -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-P9Ym7hCv.js";import{Zt as r,lt as i,ut as a,w as o,wr as s}from"./icons-CO_II6D-.js";import{r as c,s as l}from"./api-client-F5Zi1sR0.js";import{t as u}from"./settings-store-
|
|
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{Zt as r,lt as i,ut as a,w as o,wr as s}from"./icons-CO_II6D-.js";import{r as c,s as l}from"./api-client-F5Zi1sR0.js";import{t as u}from"./settings-store-DIV25PM_.js";import"./portal-container-context-NFSuymMu.js";import"./project-store-CCimwgGF.js";import"./use-is-mobile-CkO33jqU.js";import"./onboarding-quick-orientation-WLKI95GY.js";import{t as d}from"./button-CsmGH5xa.js";import"./dialog-z8PLkL8n.js";import{t as f}from"./input-CP31LZnN.js";import{Ft as p,S as m,Tt as h,vn as g}from"./index-CIscPw4g.js";import{t as _}from"./onboarding-entry-Bh-WE3vq.js";import{t as v}from"./separator-B0xYRplF.js";var y=e(t(),1),b=n();function x(){let[e,t]=(0,y.useState)(!1),[n,s]=(0,y.useState)(``),[u,p]=(0,y.useState)(``),[m,h]=(0,y.useState)(!1),[g,_]=(0,y.useState)(!1),[v,x]=(0,y.useState)(!1),[S,C]=(0,y.useState)(null),w=u.length>0&&n!==u,T=n.trim().length>=4&&n===u&&!g,E=(0,y.useCallback)(async()=>{if(T){_(!0),C(null);try{let{token:e}=await c.put(`/api/settings/auth/password`,{password:n.trim(),confirm:u.trim()});l(e),x(!0),s(``),p(``),setTimeout(()=>{x(!1),t(!1)},1500)}catch(e){C(e instanceof Error?e.message:`Failed to change password`)}finally{_(!1)}}},[T,n,u]);return e?(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Change Password`}),(0,b.jsxs)(`div`,{className:`space-y-2`,children:[(0,b.jsxs)(`div`,{className:`relative`,children:[(0,b.jsx)(f,{type:m?`text`:`password`,placeholder:`New password`,value:n,onChange:e=>s(e.target.value),className:`h-8 text-xs pr-8`,autoFocus:!0}),(0,b.jsx)(`button`,{type:`button`,className:`absolute right-2 top-1/2 -translate-y-1/2 text-muted-foreground cursor-pointer`,onClick:()=>h(!m),tabIndex:-1,children:m?(0,b.jsx)(a,{className:`size-3.5`}):(0,b.jsx)(i,{className:`size-3.5`})})]}),(0,b.jsx)(f,{type:m?`text`:`password`,placeholder:`Confirm password`,value:u,onChange:e=>p(e.target.value),onKeyDown:e=>{e.key===`Enter`&&E()},className:`h-8 text-xs`}),w&&(0,b.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Passwords do not match`}),S&&(0,b.jsx)(`p`,{className:`text-[11px] text-destructive`,children:S}),(0,b.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,b.jsx)(d,{variant:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,onClick:()=>{t(!1),s(``),p(``),C(null)},children:`Cancel`}),(0,b.jsx)(d,{variant:v?`default`:`outline`,size:`sm`,className:`h-8 text-xs flex-1 cursor-pointer`,disabled:!T,onClick:E,children:g?`...`:v?(0,b.jsx)(o,{className:`size-3.5`}):`Save`})]}),(0,b.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:`Min 4 characters. You'll stay logged in on this device.`})]})]}):(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-xs font-medium text-muted-foreground`,children:`Security`}),(0,b.jsxs)(d,{variant:`outline`,size:`sm`,className:`h-8 text-xs gap-1.5 cursor-pointer`,onClick:()=>t(!0),children:[(0,b.jsx)(r,{className:`size-3.5`}),`Change Password`]})]})}function S(){let{deviceName:e,setDeviceName:t,version:n,keepScreenAwake:r,setKeepScreenAwake:i}=u(g(e=>({deviceName:e.deviceName,setDeviceName:e.setDeviceName,version:e.version,keepScreenAwake:e.keepScreenAwake,setKeepScreenAwake:e.setKeepScreenAwake}))),[a]=(0,y.useState)(m),[c,l]=(0,y.useState)(e??``),[S,C]=(0,y.useState)(!1),[w,T]=(0,y.useState)(!1),E=(0,y.useRef)(void 0),D=c.trim()!==(e??``),O=(0,y.useCallback)(async()=>{if(D){C(!0);try{await t(c),T(!0),clearTimeout(E.current),E.current=setTimeout(()=>T(!1),2e3)}finally{C(!1)}}},[c,D,t]);return(0,b.jsxs)(`div`,{className:`space-y-6`,children:[(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(`h3`,{className:`text-sm font-medium`,children:`Learn PPM`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Choose your experience and a task. Guidance is saved in this browser.`}),(0,b.jsx)(_,{compact:!0})]}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`space-y-2`,children:[(0,b.jsx)(p,{htmlFor:`device-name`,children:`Device Name`}),(0,b.jsxs)(`div`,{className:`flex gap-2`,children:[(0,b.jsx)(f,{id:`device-name`,value:c,onChange:e=>l(e.target.value),onKeyDown:e=>{e.key===`Enter`&&O()},placeholder:`My Device`,className:`flex-1`,maxLength:100}),(0,b.jsx)(d,{variant:w?`default`:`outline`,className:`cursor-pointer shrink-0`,disabled:!D||S,onClick:O,children:S?`...`:w?(0,b.jsx)(o,{className:`size-4`}):`Save`})]}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Shown in page title and synced to PPM Cloud.`})]}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`flex items-center justify-between gap-4`,children:[(0,b.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[(0,b.jsx)(s,{className:`size-4 text-muted-foreground shrink-0`}),(0,b.jsxs)(`div`,{className:`min-w-0`,children:[(0,b.jsx)(`p`,{className:`text-sm font-medium`,children:`Keep Screen Awake`}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:a===`insecure`?`Unavailable over plain HTTP — reach PPM through its HTTPS tunnel address to use this.`:a===`unsupported`?`This browser does not support screen wake locks.`:`Stop this device dimming while a chat turn is running.`})]})]}),(0,b.jsx)(h,{checked:r&&a===`ok`,disabled:a!==`ok`,onCheckedChange:i})]}),(0,b.jsx)(v,{}),(0,b.jsx)(x,{}),(0,b.jsx)(v,{}),(0,b.jsxs)(`section`,{className:`space-y-1`,children:[(0,b.jsx)(`h3`,{className:`text-sm font-medium`,children:`About`}),(0,b.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`PPM — Personal Project Manager`}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`A mobile-first web IDE for managing your projects.`}),n&&(0,b.jsxs)(`p`,{className:`text-xs text-muted-foreground tabular-nums`,children:[`Version `,n]})]})]})}export{S as GeneralSettingsSection};
|
|
Binary file
|
|
Binary file
|
|
@@ -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-P9Ym7hCv.js";import{Dr as r,X as i,Y as a,a as o,d as s,ir as c,un as l}from"./icons-CO_II6D-.js";import{r as u}from"./api-client-F5Zi1sR0.js";import{n as d}from"./utils-btZ8C8-R.js";import{i as f}from"./project-store-CCimwgGF.js";import"./git-repo-store-CdoOpvmf.js";import"./scroll-area-Dp-P38kg.js";import{
|
|
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{Dr as r,X as i,Y as a,a as o,d as s,ir as c,un as l}from"./icons-CO_II6D-.js";import{r as u}from"./api-client-F5Zi1sR0.js";import{n as d}from"./utils-btZ8C8-R.js";import{i as f}from"./project-store-CCimwgGF.js";import"./git-repo-store-CdoOpvmf.js";import"./scroll-area-Dp-P38kg.js";import{gr as p,on as m,vn as h}from"./index-CIscPw4g.js";var g=e(t(),1),_=n(),v=[`#2563eb`,`#16a34a`,`#d97706`,`#9333ea`,`#dc2626`,`#0891b2`,`#c026d3`,`#ea580c`];function y(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return v[Math.abs(t)%v.length]}function b({name:e,syncState:t,isHead:n,isTag:c,className:l}){let u=c?`#d97706`:y(e),f=c?r:t===`synced`?a:t===`ahead`?s:t===`behind`?o:t===`remote-only`?a:i,p=c?`Tag: ${e}`:t===`synced`?`${e} — synced with remote`:t===`ahead`?`${e} — ahead of remote`:t===`behind`?`${e} — behind remote`:t===`remote-only`?`${e} — remote only`:`${e} — local only`;return(0,_.jsxs)(`span`,{className:d(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[11px] font-medium leading-tight max-w-[220px]`,n&&`ring-1 ring-offset-1 ring-offset-background`,t===`remote-only`&&`opacity-70`,l),style:{borderColor:u,backgroundColor:u+`1A`,color:`var(--text)`,...n?{"--tw-ring-color":u}:{}},title:p,children:[(0,_.jsx)(f,{className:`size-3 shrink-0`,style:{color:u}}),(0,_.jsx)(`span`,{className:`truncate`,children:e})]})}function x(e,t,n,r){let i=[],a=e===r;for(let e of t)e.startsWith(`tag: `)&&i.push({name:e.slice(5),syncState:`synced`,isTag:!0});let o=n.filter(t=>t.commitHash===e),s=o.filter(e=>!e.remote),c=o.filter(e=>e.remote);new Set(s.map(e=>e.name));let l=new Set;for(let e of s){let t=`local-only`;e.remotes.length>0&&(t=e.ahead>0&&e.behind===0?`ahead`:e.behind>0&&e.ahead===0?`behind`:`synced`),i.push({name:e.name,syncState:t,isHead:a&&e.current});for(let t of c){let n=t.name.replace(/^remotes\//,``),r=n.indexOf(`/`);r<0||n.slice(r+1)===e.name&&l.add(t.name)}}for(let e of c){if(l.has(e.name))continue;let t=e.name.replace(/^remotes\//,``);i.push({name:t,syncState:`remote-only`})}return i}var S=100;function C({metadata:e}){let t=e?.projectName??f(h(e=>e.activeProject))?.name,{gitUrl:n}=m(t),[r,i]=(0,g.useState)(null),[a,o]=(0,g.useState)(!1),[s,d]=(0,g.useState)(!0),v=(0,g.useRef)(null),y=(0,g.useCallback)(async(e=0,r=!1)=>{if(t){o(!0);try{let t=await u.get(n(`/graph?max=${S}&skip=${e}`));i(e=>r&&e?{...t,commits:[...e.commits,...t.commits]}:t),d(t.commits.length===S)}catch{}o(!1)}},[t]);(0,g.useEffect)(()=>{y()},[y]);let b=(0,g.useCallback)(()=>{a||!s||!r||y(r.commits.length,!0)},[a,s,r,y]),x=(0,g.useCallback)(e=>{let t=e.currentTarget;t.scrollHeight-t.scrollTop-t.clientHeight<200&&b()},[b]);return t?(0,_.jsxs)(`div`,{className:`flex flex-col h-full`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 border-b border-border shrink-0`,children:[(0,_.jsx)(p,{className:`size-4 text-text-secondary`}),(0,_.jsx)(`span`,{className:`text-xs font-medium text-text-primary`,children:`Git Log`}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle`,children:r?`${r.commits.length} commits`:``}),(0,_.jsx)(`div`,{className:`flex-1`}),(0,_.jsx)(`button`,{onClick:()=>y(),disabled:a,className:`p-1 rounded text-text-subtle hover:text-text-secondary transition-colors`,title:`Refresh`,children:(0,_.jsx)(c,{className:`size-3.5 ${a?`animate-spin`:``}`})})]}),!r&&a?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,_.jsx)(l,{className:`size-5 animate-spin text-primary`})}):r&&r.commits.length===0?(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`No commits yet`}):r?(0,_.jsxs)(`div`,{ref:v,className:`flex-1 overflow-y-auto min-h-0`,onScroll:x,children:[r.commits.map(e=>(0,_.jsx)(w,{commit:e,branches:r.branches,head:r.head},e.hash)),a&&(0,_.jsx)(`div`,{className:`flex items-center justify-center py-3`,children:(0,_.jsx)(l,{className:`size-4 animate-spin text-text-subtle`})}),!s&&r.commits.length>0&&(0,_.jsx)(`div`,{className:`text-center text-[10px] text-text-subtle py-3`,children:`End of history`})]}):null]}):(0,_.jsx)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:`Select a project to view git log`})}function w({commit:e,branches:t,head:n}){let r=e.hash===n,i=x(e.hash,e.refs,t,n);return(0,_.jsxs)(`div`,{className:`flex items-start gap-2 px-3 py-1.5 border-b border-border/50 hover:bg-surface-elevated transition-colors ${r?`bg-primary/5`:``}`,children:[(0,_.jsx)(`div`,{className:`flex items-center pt-1 shrink-0`,children:(0,_.jsx)(`span`,{className:`size-2.5 rounded-full border-2 ${r?`border-primary bg-primary`:`border-text-subtle bg-transparent`}`})}),(0,_.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[i.length>0&&(0,_.jsx)(`div`,{className:`flex flex-wrap items-center gap-1 mb-0.5`,children:i.map(e=>(0,_.jsx)(b,{...e},`${e.name}-${e.syncState}`))}),(0,_.jsx)(`p`,{className:`text-xs text-text-primary truncate leading-snug`,children:e.subject}),(0,_.jsxs)(`div`,{className:`flex items-center gap-2 mt-0.5`,children:[(0,_.jsx)(`span`,{className:`text-[10px] font-mono text-text-subtle`,children:e.abbreviatedHash}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle truncate`,children:e.authorName}),(0,_.jsx)(`span`,{className:`text-[10px] text-text-subtle shrink-0`,children:T(e.authorDate)})]})]})]})}function T(e){let t=new Date(e),n=Date.now()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`now`;if(r<60)return`${r}m`;let i=Math.floor(r/60);if(i<24)return`${i}h`;let a=Math.floor(i/24);return a<30?`${a}d`:t.toLocaleDateString(`en`,{month:`short`,day:`numeric`})}export{C as GitLogPanel};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/data-grid-overlay-editor-BtbgZvja.js","assets/rolldown-runtime-C5c2KzVm.js","assets/dist-wmDsBD_Z.js","assets/vendor-markdown-QKPNiWEd.js","assets/vendor-ui-P9Ym7hCv.js","assets/data-grid-types-DatI2Wee.js","assets/number-overlay-editor-xzM7GhYV.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{s as e,t}from"./rolldown-runtime-C5c2KzVm.js";import{C as n,S as r}from"./vendor-markdown-QKPNiWEd.js";import{_t as i}from"./vendor-ui-P9Ym7hCv.js";import{$ as a,A as o,Fr as s,Jn as c,Jr as l,Lt as u,Mr as d,Zn as f,a as p,br as m,ct as h,d as g,j as _,lt as v,qn as y,qr as b,sr as x,st as S,un as C,ur as w,xt as T}from"./icons-CO_II6D-.js";import{t as E}from"./preload-helper-BEFjQwLd.js";import{t as D}from"./tab-store-
|
|
2
|
+
import{s as e,t}from"./rolldown-runtime-C5c2KzVm.js";import{C as n,S as r}from"./vendor-markdown-QKPNiWEd.js";import{_t as i}from"./vendor-ui-P9Ym7hCv.js";import{$ as a,A as o,Fr as s,Jn as c,Jr as l,Lt as u,Mr as d,Zn as f,a as p,br as m,ct as h,d as g,j as _,lt as v,qn as y,qr as b,sr as x,st as S,un as C,ur as w,xt as T}from"./icons-CO_II6D-.js";import{t as E}from"./preload-helper-BEFjQwLd.js";import{t as D}from"./tab-store-D33icgdA.js";import{Hn as O,M as k,Rn as ee,j as te,vn as ne}from"./index-CIscPw4g.js";import{A,B as re,C as j,D as ie,E as ae,F as oe,G as M,H as se,I as N,L as ce,M as le,N as ue,O as P,P as F,R as I,S as de,T as fe,U as pe,V as me,W as he,_ as ge,a as _e,b as ve,c as L,d as ye,f as be,g as xe,h as R,i as Se,j as z,k as B,l as V,m as Ce,n as H,o as U,p as we,r as Te,s as Ee,t as W,u as De,v as Oe,w as ke,x as Ae,y as je,z as Me}from"./data-grid-types-DatI2Wee.js";import{t as Ne}from"./dist-wmDsBD_Z.js";import{t as Pe}from"./marked.esm-BHcxKPtl.js";import{t as Fe}from"./use-monaco-theme-DJ8y_7IZ.js";import{n as Ie}from"./csv-parser-CoLcPhFa.js";var Le=/[A-Za-z0-9_]/,Re=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/;function ze(e){let t=[],n=1,r=-1,i=1,a=0,o=(n,a)=>{if(r===-1)return;let o=e.slice(r,n).trim();o&&t.push({sql:o,startLine:i,endLine:a}),r=-1};for(;a<e.length;){let t=e[a];if(t===`
|
|
3
3
|
`){n++,a++;continue}if(t===` `||t===` `||t===`\r`){a++;continue}if(t===`-`&&e[a+1]===`-`){for(;a<e.length&&e[a]!==`
|
|
4
4
|
`;)a++;continue}if(t===`/`&&e[a+1]===`*`){let t=1;for(a+=2;a<e.length&&t>0;){if(e[a]===`/`&&e[a+1]===`*`){t++,a+=2;continue}if(e[a]===`*`&&e[a+1]===`/`){t--,a+=2;continue}e[a]===`
|
|
5
5
|
`&&n++,a++}continue}if(r===-1&&(r=a,i=n),t===`;`){o(a+1,n),a++;continue}if(t===`'`||t===`"`){let r=e[a-1],i=e[a-2],o=t===`'`&&(r===`e`||r===`E`)&&!(i!==void 0&&Le.test(i));for(a++;a<e.length;){let r=e[a];if(r===`
|
|
@@ -135,7 +135,7 @@ import{s as e,t}from"./rolldown-runtime-C5c2KzVm.js";import{C as n,S as r}from".
|
|
|
135
135
|
`)??``:n?.toString()??``;if(!Ee(e)&&V(e)&&e.readonly!==!0){let a=T?.(i,e);if(a!==void 0&&U(a))return{location:t,value:a};let o=Nn(e);if(o===void 0)return;if(o.kind===H.Custom){F(e.kind===H.Custom);let n=o.onPaste?.(i,e.data);return n===void 0?void 0:{location:t,value:{...e,data:n}}}else{let a=o.onPaste?.(i,e,{formatted:r,formattedString:typeof r==`string`?r:r?.join(`
|
|
136
136
|
`),rawValue:n});return a===void 0?void 0:(F(a.kind===e.kind),{location:t,value:a})}}}let n=Y.columns,r=Y.rows,i=u.current?.contains(document.activeElement)===!0||s.current?.contains(document.activeElement)===!0,a;if(Y.current===void 0?n.length===1?a=[n.first()??0,0]:r.length===1&&(a=[J,r.first()??0]):a=[Y.current.range.x,Y.current.range.y],i&&a!==void 0){let n,r,i=`text/plain`,o=`text/html`;if(navigator.clipboard.read!==void 0){let e=await navigator.clipboard.read();for(let t of e){if(t.types.includes(o)){let e=Mo(await(await t.getType(o)).text());if(e!==void 0){n=e;break}}t.types.includes(i)&&(r=await(await t.getType(i)).text())}}else if(navigator.clipboard.readText!==void 0)r=await navigator.clipboard.readText();else if(e!==void 0&&e?.clipboardData!==null)e.clipboardData.types.includes(o)&&(n=Mo(e.clipboardData.getData(o))),n===void 0&&e.clipboardData.types.includes(i)&&(r=e.clipboardData.getData(i));else return;let[s,c]=a,l=[];do{if(je===void 0){let e=fr(a),i=r??n?.map(e=>e.map(e=>e.rawValue).join(` `)).join(` `)??``,o=t(e,a,i,void 0);o!==void 0&&l.push(o);break}if(n===void 0){if(r===void 0)return;n=Fo(r)}if(je===!1||typeof je==`function`&&je?.([a[0]-J,a[1]],n.map(e=>e.map(e=>e.rawValue?.toString()??``)))!==!0)return;for(let[e,r]of n.entries()){if(e+c>=y)break;for(let[n,i]of r.entries()){let r=[n+s,e+c],[a,o]=r;if(a>=X.length||o>=nr)continue;let u=t(fr(r),r,i.rawValue,i.formatted);u!==void 0&&l.push(u)}}}while(!1);rr(l),Qn.current?.damage(l.map(e=>({cell:e.location})))}},[T,Nn,fr,Y,$t.paste,X.length,rr,nr,je,J,y]);Et(`paste`,ui,f,!1,!0);let di=G.useCallback(async(e,t)=>{if(!$t.copy)return;let n=t===!0||u.current?.contains(document.activeElement)===!0||s.current?.contains(document.activeElement)===!0,r=Y.columns,i=Y.rows,a=(t,n)=>{Io(Ne?[n.map(e=>({kind:H.Text,data:v[e].title,displayData:v[e].title,allowOverlay:!1})),...t]:t,n,e)};if(n&&mn!==void 0){if(Y.current!==void 0){let e=mn(Y.current.range,dn.current.signal);typeof e!=`object`&&(e=await e()),a(e,(0,Xa.default)(Y.current.range.x-J,Y.current.range.x+Y.current.range.width-J))}else if(i!==void 0&&i.length>0){let e=[...i].map(e=>{let t=mn({x:J,y:e,width:v.length,height:1},dn.current.signal);return typeof t==`object`?t[0]:t().then(e=>e[0])});e.some(e=>e instanceof Promise)?a(await Promise.all(e),(0,Xa.default)(v.length)):a(e,(0,Xa.default)(v.length))}else if(r.length>0){let e=[],t=[];for(let n of r){let r=mn({x:n,y:0,width:1,height:y},dn.current.signal);typeof r!=`object`&&(r=await r()),e.push(r),t.push(n-J)}e.length===1?a(e[0],t):a(e.reduce((e,t)=>e.map((e,n)=>[...e,...t[n]])),t)}}},[v,mn,Y,$t.copy,J,y,Ne]);Et(`copy`,di,f,!1,!1),Et(`cut`,G.useCallback(async e=>{if($t.cut&&(u.current?.contains(document.activeElement)===!0||s.current?.contains(document.activeElement)===!0)&&(await di(e),Y.current!==void 0)){let e={current:{cell:Y.current.cell,range:Y.current.range,rangeStack:[]},rows:W.empty(),columns:W.empty()},t=Tn?.(e);if(t===!1||(e=t===!0?e:t,e.current===void 0))return;ai(e.current.range)}},[ai,Y,$t.cut,di,Tn]),f,!1,!1);let fi=G.useCallback((e,t)=>{if(ue!==void 0){J!==0&&(e=e.map(e=>[e[0]-J,e[1]])),ue(e,t);return}if(e.length===0||t===-1)return;let[n,r]=e[t];d.current!==void 0&&d.current[0]===n&&d.current[1]===r||(d.current=[n,r],ni(n,r,!1,!1))},[ue,J,ni]),[pi,mi]=We?.current?.cell??[],hi=G.useRef(_r);hi.current=_r,G.useLayoutEffect(()=>{!Wn.current&&pi!==void 0&&mi!==void 0&&(pi!==_n.current?.current?.cell[0]||mi!==_n.current?.current?.cell[1])&&hi.current(pi,mi),Wn.current=!1},[pi,mi]);let gi=Y.current!==void 0&&(Y.current.cell[0]>=X.length||Y.current.cell[1]>=nr);G.useLayoutEffect(()=>{gi&&vn(rs,!1)},[gi,vn]);let _i=G.useMemo(()=>nn===!0&&Xe?.tint===!0?W.fromSingleSelection(nr-1):W.empty(),[nr,nn,Xe?.tint]),vi=G.useCallback(e=>typeof q==`boolean`?q:q?.(e-J)??!0,[J,q]),yi=G.useMemo(()=>{if(jr===void 0||s.current===null)return null;let{bounds:e,group:t}=jr,n=s.current.getBoundingClientRect();return G.createElement(vo,{bounds:e,group:t,canvasBounds:n,onClose:()=>Mr(void 0),onFinish:e=>{Mr(void 0),se?.(t,e)}})},[se,jr]),bi=Math.min(X.length,Pe+(tn?1:0));G.useImperativeHandle(t,()=>({appendRow:(e,t)=>xr(e+J,t),updateCells:e=>(J!==0&&(e=e.map(e=>({cell:[e.cell[0]+J,e.cell[1]]}))),Qn.current?.damage(e)),getBounds:(e,t)=>{if(!(s?.current===null||u?.current===null)){if(e===void 0&&t===void 0){let e=s.current.getBoundingClientRect(),t=e.width/u.current.clientWidth;return{x:e.x-u.current.scrollLeft*t,y:e.y-u.current.scrollTop*t,width:u.current.scrollWidth*t,height:u.current.scrollHeight*t}}return Qn.current?.getBounds((e??0)+J,t)}},focus:()=>Qn.current?.focus(),emit:async e=>{switch(e){case`delete`:ci({bounds:void 0,cancel:()=>void 0,stopPropagation:()=>void 0,preventDefault:()=>void 0,ctrlKey:!1,key:`Delete`,keyCode:46,metaKey:!1,shiftKey:!1,altKey:!1,rawEvent:void 0,location:void 0});break;case`fill-right`:ci({bounds:void 0,cancel:()=>void 0,stopPropagation:()=>void 0,preventDefault:()=>void 0,ctrlKey:!0,key:`r`,keyCode:82,metaKey:!1,shiftKey:!1,altKey:!1,rawEvent:void 0,location:void 0});break;case`fill-down`:ci({bounds:void 0,cancel:()=>void 0,stopPropagation:()=>void 0,preventDefault:()=>void 0,ctrlKey:!0,key:`d`,keyCode:68,metaKey:!1,shiftKey:!1,altKey:!1,rawEvent:void 0,location:void 0});break;case`copy`:await di(void 0,!0);break;case`paste`:await ui();break}},scrollTo:_r,remeasureColumns:e=>{for(let t of e)Fr(t+J)}}),[xr,Fr,di,ci,ui,J,_r]);let[xi,Si]=Gr??[],Ci=G.useCallback(e=>{let[t,n]=e;if(n===-1){B!==`none`&&(On(W.fromSingleSelection(t),void 0,!1),$n());return}xi===t&&Si===n||(En({cell:e,range:{x:t,y:n,width:1,height:1}},!0,!1,`keyboard-nav`),_r(t,n))},[B,$n,_r,xi,Si,En,On]),[wi,Ti]=G.useState(!1),Ei=G.useRef((0,Tt.default)(e=>{Ti(e)},5)),Di=G.useCallback(()=>{Ei.current(!0),Y.current===void 0&&Y.columns.length===0&&Y.rows.length===0&&c===void 0&&En({cell:[J,Zn],range:{x:J,y:Zn,width:1,height:1}},!0,!1,`keyboard-select`)},[Zn,Y,c,J,En]),Oi=G.useCallback(()=>{Ei.current(!1)},[]),[ki,Ai]=G.useMemo(()=>{let e,t=ct?.scrollbarWidthOverride??Bt(),n=y+(nn?1:0);if(typeof qt==`number`)e=Ln+n*qt;else{let t=0,r=Math.min(n,10);for(let e=0;e<r;e++)t+=qt(e);t=Math.floor(t/r),e=Ln+n*t}e+=t;let r=X.reduce((e,t)=>t.width+e,0)+t;return[`${Math.min(1e5,r)}px`,`${Math.min(1e5,e)}px`]},[X,ct?.scrollbarWidthOverride,qt,y,nn,Ln]),ji=G.useMemo(()=>re(kn),[kn]);return G.createElement(I.Provider,{value:kn},G.createElement(Ho,{style:ji,className:j,inWidth:g??ki,inHeight:_??Ai},G.createElement(ho,{fillHandle:ot,drawFocusRing:st,experimental:ct,fixedShadowX:lt,fixedShadowY:ut,getRowThemeOverride:m,headerIcons:dt,imageWindowLoader:ft,initialSize:pt,isDraggable:mt,onDragLeave:ht,onRowMoved:gt,overscrollX:Zt,overscrollY:Qt,preventDiagonalScrolling:yt,rightElement:bt,rightElementProps:xt,smoothScrollX:Ct,smoothScrollY:wt,className:j,enableGroups:In,onCanvasFocused:Di,onCanvasBlur:Oi,canvasRef:s,onContextMenu:li,theme:kn,cellXOffset:Xn,cellYOffset:Zn,accessibilityHeight:Gn.height,onDragEnd:Qr,columns:X,nonGrowWidth:Fn,drawHeader:Cn,onColumnProposeMove:ee,drawCell:wn,disabledRows:_i,freezeColumns:bi,lockColumns:J,firstColAccessible:J===0,getCellContent:fr,minColumnWidth:Ut,maxColumnWidth:Wt,searchInputRef:o,showSearch:sn,onSearchClose:cn,highlightRegions:ur,getCellsForSelection:mn,getGroupDetails:pr,headerHeight:Jt,isFocused:wi,groupHeaderHeight:In?Yt:0,freezeTrailingRows:Ze+(nn&&Xe?.sticky===!0?1:0),hasAppendRow:nn,onColumnResize:bn,onColumnResizeEnd:xn,onColumnResizeStart:Sn,onCellFocused:Ci,onColumnMoved:Yr,onDragStart:Zr,onHeaderMenuClick:Ur,onItemHovered:ei,isFilling:c?.fillHandle===!0,onMouseMove:Hr,onKeyDown:ci,onKeyUp:ge,onMouseDown:Ar,onMouseUp:Vr,onDragOverCell:et,onDrop:tt,onSearchResultsChanged:fi,onVisibleRegionChanged:Jr,clientSize:An,rowHeight:qt,searchResults:P,searchValue:fe,onSearchValueChange:de,rows:nr,scrollRef:u,selection:Y,translateX:Gn.tx,translateY:Gn.ty,verticalBorder:vi,gridRef:Qn,getCellRenderer:Nn}),yi,i!==void 0&&G.createElement(G.Suspense,{fallback:null},G.createElement(Qo,{...i,validateCell:gn,bloom:O,id:ii,getCellRenderer:Nn,className:ct?.isSubGrid===!0?`click-outside-ignore`:void 0,provideEditor:Ye,imageEditorOverride:p,onFinishEditing:ri,markdownDivCreateNode:h,isOutsideClick:Nt}))))}),as=20,os={getAccessibilityString:e=>e.data?.toString()??`false`,kind:H.Boolean,needsHover:!0,useLabel:!1,needsHoverPosition:!0,measure:()=>50,draw:e=>ss(e,e.cell.data,_e(e.cell),e.cell.maxSize??as),onDelete:e=>({...e,data:!1}),onClick:e=>{let{cell:t,posX:n,posY:r,bounds:i,theme:a}=e,{width:o,height:s,x:c,y:l}=i,u=t.maxSize??as,d=Math.floor(i.y+s/2),f=Mt(u,s,a.cellVerticalPadding),p=At(jt(t.contentAlign??`center`,c,o,a.cellHorizontalPadding,f),d,f),m=Nt(c+n,l+r,p);if(_e(t)&&m)return{...t,data:Lo(t.data)}},onPaste:(e,t)=>{let n=null;return e.toLowerCase()===`true`?n=!0:e.toLowerCase()===`false`?n=!1:e.toLowerCase()===`indeterminate`&&(n=void 0),n===t.data?void 0:{...t,data:n}}};function ss(e,t,n,r){if(!n&&t===null)return;let{ctx:i,hoverAmount:a,theme:o,rect:s,highlighted:c,hoverX:l,hoverY:u,cell:{contentAlign:d}}=e,{x:f,y:p,width:m,height:h}=s,g=.35,_=n?1-g+g*a:.4;t===null&&(_*=a),_!==0&&(i.globalAlpha=_,ai(i,o,t,f,p,m,h,c,l,u,r,d),i.globalAlpha=1)}var cs=Ne(`div`)({name:`BubblesOverlayEditorStyle`,class:`gdg-b1ygi5by`,propsAsIs:!1}),ls=e=>{let{bubbles:t}=e;return G.createElement(cs,null,t.map((e,t)=>G.createElement(`div`,{key:t,className:`boe-bubble`},e)),G.createElement(`textarea`,{className:`gdg-input`,autoFocus:!0}))},us={getAccessibilityString:e=>Ut(e.data),kind:H.Bubble,needsHover:!1,useLabel:!1,needsHoverPosition:!1,measure:(e,t,n)=>t.data.reduce((t,n)=>e.measureText(n).width+t+20,0)+2*n.cellHorizontalPadding-4,draw:e=>fs(e,e.cell.data),provideEditor:()=>e=>{let{value:t}=e;return G.createElement(ls,{bubbles:t.data})},onPaste:()=>void 0},ds=4;function fs(e,t){let{rect:n,theme:r,ctx:i,highlighted:a}=e,{x:o,y:s,width:c,height:l}=n,u=ds,d=o+r.cellHorizontalPadding,f=[];for(let e of t){if(d>o+c)break;let t=On(e,i,r.baseFontFull).width;f.push({x:d,width:t}),d+=t+16+u}i.beginPath();for(let e of f)Bn(i,e.x,s+(l-20)/2,e.width+16,20,r.roundingRadius??20/2);i.fillStyle=a?r.bgBubbleSelected:r.bgBubble,i.fill();for(let[e,n]of f.entries())i.beginPath(),i.fillStyle=r.textBubble,i.fillText(t[e],n.x+8,s+l/2+An(i,r))}var ps=Ne(`div`)({name:`DrilldownOverlayEditorStyle`,class:`gdg-d4zsq0x`,propsAsIs:!1}),ms=e=>{let{drilldowns:t}=e;return G.createElement(ps,null,t.map((e,t)=>G.createElement(`div`,{key:t,className:`doe-bubble`},e.img!==void 0&&G.createElement(`img`,{src:e.img}),G.createElement(`div`,null,e.text))))},hs={getAccessibilityString:e=>Ut(e.data.map(e=>e.text)),kind:H.Drilldown,needsHover:!1,useLabel:!1,needsHoverPosition:!1,measure:(e,t,n)=>t.data.reduce((t,n)=>e.measureText(n.text).width+t+20+(n.img===void 0?0:18),0)+2*n.cellHorizontalPadding-4,draw:e=>ys(e,e.cell.data),provideEditor:()=>e=>{let{value:t}=e;return G.createElement(ms,{drilldowns:t.data})},onPaste:()=>void 0},gs=4,_s={};function vs(e,t,n,r){let i=Math.ceil(window.devicePixelRatio),a=n-10,o=n*i,s=r+5,c=r*3,l=(c+10)*i,u=`${e},${t},${i},${n}`;if(_s[u]!==void 0)return{el:_s[u],height:o,width:l,middleWidth:4*i,sideWidth:s*i,padding:5*i,dpr:i};let d=document.createElement(`canvas`),f=d.getContext(`2d`);return f===null?null:(d.width=l,d.height=o,f.scale(i,i),_s[u]=d,f.beginPath(),Bn(f,5,5,c,a,r),f.shadowColor=`rgba(24, 25, 34, 0.4)`,f.shadowBlur=1,f.fillStyle=e,f.fill(),f.shadowColor=`rgba(24, 25, 34, 0.3)`,f.shadowOffsetY=1,f.shadowBlur=5,f.fillStyle=e,f.fill(),f.shadowOffsetY=0,f.shadowBlur=0,f.shadowBlur=0,f.beginPath(),Bn(f,5.5,5.5,c,a,r),f.strokeStyle=t,f.lineWidth=1,f.stroke(),{el:d,height:o,width:l,sideWidth:s*i,middleWidth:r*i,padding:5*i,dpr:i})}function ys(e,t){let{rect:n,theme:r,ctx:i,imageLoader:a,col:o,row:s}=e,{x:c,width:l}=n,u=r.baseFontFull,d=Ln(i,u),f=Math.min(n.height,Math.max(16,Math.ceil(d*r.lineHeight)*2)),p=Math.floor(n.y+(n.height-f)/2),m=f-10,h=gs,g=c+r.cellHorizontalPadding,_=r.roundingRadius??6,v=vs(r.bgCell,r.drilldownBorder,f,_),y=[];for(let e of t){if(g>c+l)break;let t=On(e.text,i,u).width,n=0;e.img!==void 0&&a.loadOrGetImage(e.img,o,s)!==void 0&&(n=m-8+4);let r=t+n+16;y.push({x:g,width:r}),g+=r+h}if(v!==null){let{el:e,height:t,middleWidth:n,sideWidth:r,width:a,dpr:o,padding:s}=v,c=r/o,l=s/o;for(let o of y){let s=Math.floor(o.x),u=Math.floor(o.width),d=u-(c-l)*2;i.imageSmoothingEnabled=!1,i.drawImage(e,0,0,r,t,s-l,p,c,f),d>0&&i.drawImage(e,r,0,n,t,s+(c-l),p,d,f),i.drawImage(e,a-r,0,r,t,s+u-(c-l),p,c,f),i.imageSmoothingEnabled=!0}}i.beginPath();for(let[e,n]of y.entries()){let c=t[e],l=n.x+8;if(c.img!==void 0){let e=a.loadOrGetImage(c.img,o,s);if(e!==void 0){let t=m-8,n=0,a=0,o=e.width,s=e.height;o>s?(n+=(o-s)/2,o=s):s>o&&(a+=(s-o)/2,s=o),i.beginPath(),Bn(i,l,p+f/2-t/2,t,t,r.roundingRadius??3),i.save(),i.clip(),i.drawImage(e,n,a,o,s,l,p+f/2-t/2,t,t),i.restore(),l+=t+4}}i.beginPath(),i.fillStyle=r.textBubble,i.fillText(c.text,l,p+f/2+An(i,r))}}var bs={getAccessibilityString:e=>e.data.join(`, `),kind:H.Image,needsHover:!1,useLabel:!1,needsHoverPosition:!1,draw:e=>Ss(e,e.cell.displayData??e.cell.data,e.cell.rounding??e.theme.roundingRadius??4,e.cell.contentAlign),measure:(e,t)=>t.data.length*50,onDelete:e=>({...e,data:[]}),provideEditor:()=>e=>{let{value:t,onFinishedEditing:n,imageEditorOverride:r}=e,i=r??Kt;return G.createElement(i,{urls:t.data,canWrite:t.readonly!==!1,onCancel:n,onChange:e=>{n({...t,data:[e]})}})},onPaste:(e,t)=>{e=e.trim();let n=e.split(`,`).map(e=>{try{return new URL(e),e}catch{return}}).filter(e=>e!==void 0);if(!(n.length===t.data.length&&n.every((e,n)=>e===t.data[n])))return{...t,data:n}}},xs=4;function Ss(e,t,n,r){let{rect:i,col:a,row:o,theme:s,ctx:c,imageLoader:l}=e,{x:u,y:d,height:f,width:p}=i,m=f-s.cellVerticalPadding*2,h=[],g=0;for(let e=0;e<t.length;e++){let n=t[e];if(n.length===0)continue;let r=l.loadOrGetImage(n,a,o);if(r!==void 0){h[e]=r;let t=r.width*(m/r.height);g+=t+xs}}if(g===0)return;g-=xs;let _=u+s.cellHorizontalPadding;r===`right`?_=Math.floor(u+p-s.cellHorizontalPadding-g):r===`center`&&(_=Math.floor(u+p/2-g/2));for(let e of h){if(e===void 0)continue;let t=e.width*(m/e.height);n>0&&(c.beginPath(),Bn(c,_,d+s.cellVerticalPadding,t,m,n),c.save(),c.clip()),c.drawImage(e,_,d+s.cellVerticalPadding,t,m),n>0&&c.restore(),_+=t+xs}}function Cs(e,t){let n=e*49632+t*325176;return n^=n<<13,n^=n>>17,n^=n<<5,n/4294967295*2}var ws={getAccessibilityString:()=>``,kind:H.Loading,needsHover:!1,useLabel:!1,needsHoverPosition:!1,measure:()=>120,draw:e=>{let{cell:t,col:n,row:r,ctx:i,rect:a,theme:o}=e;if(t.skeletonWidth===void 0||t.skeletonWidth===0)return;let s=t.skeletonWidth;t.skeletonWidthVariability!==void 0&&t.skeletonWidthVariability>0&&(s+=Math.round(Cs(n,r)*t.skeletonWidthVariability));let c=o.cellHorizontalPadding,l=t.skeletonHeight??Math.min(18,a.height-2*o.cellVerticalPadding);Bn(i,a.x+c,a.y+(a.height-l)/2,s,l,o.roundingRadius??3),i.fillStyle=he(o.textDark,.1),i.fill()},onPaste:()=>void 0},Ts=()=>e=>e.targetWidth,Es=Ne(`div`)({name:`MarkdownOverlayEditorStyle`,class:`gdg-m1pnx84e`,propsAsIs:!1,vars:{"m1pnx84e-0":[Ts(),`px`]}}),Ds=e=>{let{value:t,onChange:n,forceEditMode:r,createNode:i,targetRect:a,onFinish:o,validatedSelection:s}=e,c=t.data,l=t.readonly===!0,[u,d]=G.useState(c===``||r),f=G.useCallback(()=>{d(e=>!e)},[]),p=c?`gdg-ml-6`:``;return u?G.createElement(Es,{targetWidth:a.width-20},G.createElement($t,{autoFocus:!0,highlight:!1,validatedSelection:s,value:c,onKeyDown:e=>{e.key===`Enter`&&e.stopPropagation()},onChange:n}),G.createElement(`div`,{className:`gdg-edit-icon gdg-checkmark-hover ${p}`,onClick:()=>o(t)},G.createElement(Ft,null))):G.createElement(Es,{targetWidth:a.width},G.createElement(Jt,{contents:c,createNode:i}),!l&&G.createElement(G.Fragment,null,G.createElement(`div`,{className:`spacer`}),G.createElement(`div`,{className:`gdg-edit-icon gdg-edit-hover ${p}`,onClick:f},G.createElement(Pt,null))),G.createElement(`textarea`,{className:`gdg-md-edit-textarea gdg-input`,autoFocus:!0}))},Os={getAccessibilityString:e=>e.data?.toString()??``,kind:H.Markdown,needsHover:!1,needsHoverPosition:!1,drawPrep:Fn,measure:(e,t,n)=>{let r=t.data.split(`
|
|
137
137
|
`)[0];return e.measureText(r).width+2*n.cellHorizontalPadding},draw:e=>X(e,e.cell.data,e.cell.contentAlign),onDelete:e=>({...e,data:``}),provideEditor:()=>e=>{let{onChange:t,value:n,target:r,onFinishedEditing:i,markdownDivCreateNode:a,forceEditMode:o,validatedSelection:s}=e;return G.createElement(Ds,{onFinish:i,targetRect:r,value:n,validatedSelection:s,onChange:e=>t({...n,data:e.target.value}),forceEditMode:o,createNode:a})},onPaste:(e,t)=>e===t.data?void 0:{...t,data:e}},ks={getAccessibilityString:e=>e.row.toString(),kind:Se.Marker,needsHover:!0,needsHoverPosition:!1,drawPrep:As,measure:()=>44,draw:e=>Ms(e,e.cell.row,e.cell.checked,e.cell.markerKind,e.cell.drawHandle,e.cell.checkboxStyle),onClick:e=>{let{bounds:t,cell:n,posX:r,posY:i}=e,{width:a,height:o}=t,s=n.drawHandle?7+(a-7)/2:a/2,c=o/2;if(Math.abs(r-s)<=10&&Math.abs(i-c)<=10)return{...n,checked:!n.checked}},onPaste:()=>void 0};function As(e,t){let{ctx:n,theme:r}=e,i=r.markerFontFull,a=t??{};return a?.font!==i&&(n.font=i,a.font=i),a.deprep=js,n.textAlign=`center`,a}function js(e){let{ctx:t}=e;t.textAlign=`start`}function Ms(e,t,n,r,i,a){let{ctx:o,rect:s,hoverAmount:c,theme:l}=e,{x:u,y:d,width:f,height:p}=s,m=n?1:r===`checkbox-visible`?.6+.4*c:c;if(r!==`number`&&m>0){o.globalAlpha=m;let e=7*(n?c:1);if(ai(o,l,n,i?u+e:u,d,i?f-e:f,p,!0,void 0,void 0,18,`center`,a),i){o.globalAlpha=c,o.beginPath();for(let e of[3,6])for(let t of[-5,-1,3])o.rect(u+e,d+p/2+t,2,2);o.fillStyle=l.textLight,o.fill(),o.beginPath()}o.globalAlpha=1}if(r===`number`||r===`both`&&!n){let e=t.toString(),n=l.markerFontFull,i=u+f/2;r===`both`&&c!==0&&(o.globalAlpha=1-c),o.fillStyle=l.textLight,o.font=n,o.fillText(e,i,d+p/2+An(o,n)),c!==0&&(o.globalAlpha=1)}}var Ns={getAccessibilityString:()=>``,kind:Se.NewRow,needsHover:!0,needsHoverPosition:!1,measure:()=>200,draw:e=>Ps(e,e.cell.hint,e.cell.icon),onPaste:()=>void 0};function Ps(e,t,n){let{ctx:r,rect:i,hoverAmount:a,theme:o,spriteManager:s}=e,{x:c,y:l,width:u,height:d}=i;r.beginPath(),r.globalAlpha=a,r.rect(c+1,l+1,u,d-2),r.fillStyle=o.bgHeaderHovered,r.fill(),r.globalAlpha=1,r.beginPath();let f=t!==``,p=0;if(n!==void 0){let e=d-8,t=c+8/2,i=l+8/2;s.drawSprite(n,`normal`,r,t,i,e,o,f?1:a),p=e}else{p=24;let e=f?12:a*12,t=f?0:(1-a)*12*.5,n=o.cellHorizontalPadding+4;e>0&&(r.moveTo(c+n+t,l+d/2),r.lineTo(c+n+t+e,l+d/2),r.moveTo(c+n+t+e*.5,l+d/2-e*.5),r.lineTo(c+n+t+e*.5,l+d/2+e*.5),r.lineWidth=2,r.strokeStyle=o.bgIconHeader,r.lineCap=`round`,r.stroke())}r.fillStyle=o.textMedium,r.fillText(t,p+c+o.cellHorizontalPadding+.5,l+d/2+An(r,o)),r.beginPath()}var Fs=G.lazy(async()=>await E(()=>import(`./number-overlay-editor-xzM7GhYV.js`),__vite__mapDeps([6,1,2,3]))),Is={getAccessibilityString:e=>e.data?.toString()??``,kind:H.Number,needsHover:!1,needsHoverPosition:!1,useLabel:!0,drawPrep:Fn,draw:e=>X(e,e.cell.displayData,e.cell.contentAlign),measure:(e,t,n)=>e.measureText(t.displayData).width+n.cellHorizontalPadding*2,onDelete:e=>({...e,data:void 0}),provideEditor:()=>e=>{let{isHighlighted:t,onChange:n,value:r,validatedSelection:i}=e;return G.createElement(G.Suspense,{fallback:null},G.createElement(Fs,{highlight:t,disabled:r.readonly===!0,value:r.data,fixedDecimals:r.fixedDecimals,allowNegative:r.allowNegative,thousandSeparator:r.thousandSeparator,decimalSeparator:r.decimalSeparator,validatedSelection:i,onChange:e=>n({...r,data:Number.isNaN(e.floatValue??0)?0:e.floatValue})}))},onPaste:(e,t,n)=>{let r=typeof n.rawValue==`number`?n.rawValue:Number.parseFloat(typeof n.rawValue==`string`?n.rawValue:e);if(!(Number.isNaN(r)||t.data===r))return{...t,data:r,displayData:n.formattedString??t.displayData}}},Ls={getAccessibilityString:()=>``,measure:()=>108,kind:H.Protected,needsHover:!1,needsHoverPosition:!1,draw:Rs,onPaste:()=>void 0};function Rs(e){let{ctx:t,theme:n,rect:r}=e,{x:i,y:a,height:o}=r;t.beginPath();let s=2.5,c=i+n.cellHorizontalPadding+s,l=a+o/2,u=Math.cos(kt(30))*s,d=Math.sin(kt(30))*s;for(let e=0;e<12;e++)t.moveTo(c,l-s),t.lineTo(c,l+s),t.moveTo(c+u,l-d),t.lineTo(c-u,l+d),t.moveTo(c-u,l-d),t.lineTo(c+u,l+d),c+=8;t.lineWidth=1.1,t.lineCap=`square`,t.strokeStyle=n.textLight,t.stroke()}var zs={getAccessibilityString:e=>e.data?.toString()??``,kind:H.RowID,needsHover:!1,needsHoverPosition:!1,drawPrep:(e,t)=>Fn(e,t,e.theme.textLight),draw:e=>X(e,e.cell.data,e.cell.contentAlign),measure:(e,t,n)=>e.measureText(t.data).width+n.cellHorizontalPadding*2,provideEditor:()=>e=>{let{isHighlighted:t,onChange:n,value:r,validatedSelection:i}=e;return G.createElement($t,{highlight:t,autoFocus:r.readonly!==!0,disabled:r.readonly!==!1,value:r.data,validatedSelection:i,onChange:e=>n({...r,data:e.target.value})})},onPaste:()=>void 0},Bs={getAccessibilityString:e=>e.data?.toString()??``,kind:H.Text,needsHover:e=>e.hoverEffect===!0,needsHoverPosition:!1,drawPrep:Fn,useLabel:!0,draw:e=>{let{cell:t,hoverAmount:n,hyperWrapping:r,ctx:i,rect:a,theme:o,overrideCursor:s}=e,{displayData:c,contentAlign:l,hoverEffect:u,allowWrapping:d}=t;if(u===!0&&n>0){i.textBaseline=`alphabetic`;let e=o.cellHorizontalPadding,t=o.cellVerticalPadding,r=On(c,i,o.baseFontFull,`alphabetic`),l=a.height-t,u=Math.min(l,r.actualBoundingBoxAscent*2.5);i.beginPath(),Bn(i,a.x+e/2,a.y+(a.height-u)/2+1,r.width+e*3,u-1,o.roundingRadius??4),i.globalAlpha=n,i.fillStyle=he(o.textDark,.1),i.fill(),i.globalAlpha=1,i.fillStyle=o.textDark,i.textBaseline=`middle`,s?.(`text`)}X(e,c,l,d,r)},measure:(e,t,n)=>{let r=t.displayData.split(`
|
|
138
|
-
`,t.allowWrapping===!0?void 0:1),i=0;for(let t of r)i=Math.max(i,e.measureText(t).width);return i+2*n.cellHorizontalPadding},onDelete:e=>({...e,data:``}),provideEditor:e=>({disablePadding:e.allowWrapping===!0,editor:t=>{let{isHighlighted:n,onChange:r,value:i,validatedSelection:a}=t;return G.createElement($t,{style:e.allowWrapping===!0?{padding:`3px 8.5px`}:void 0,highlight:n,autoFocus:i.readonly!==!0,disabled:i.readonly===!0,altNewline:!0,value:i.data,validatedSelection:a,onChange:e=>r({...i,data:e.target.value})})}}),onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}},Vs=Ne(`div`)({name:`UriOverlayEditorStyle`,class:`gdg-u1rrojo`,propsAsIs:!1}),Hs=e=>{let{uri:t,onChange:n,forceEditMode:r,readonly:i,validatedSelection:a,preview:o}=e,[s,c]=G.useState(!i&&(t===``||r)),l=G.useCallback(()=>{c(!0)},[]);return s?G.createElement($t,{validatedSelection:a,highlight:!0,autoFocus:!0,value:t,onChange:n}):G.createElement(Vs,null,G.createElement(`a`,{className:`gdg-link-area`,href:t,target:`_blank`,rel:`noopener noreferrer`},o),!i&&G.createElement(`div`,{className:`gdg-edit-icon`,onClick:l},G.createElement(Pt,null)),G.createElement(`textarea`,{className:`gdg-input`,autoFocus:!0}))};function Us(e,t,n,r){let i=n.cellHorizontalPadding,a=t.height/2-e.actualBoundingBoxAscent/2,o=e.width,s=e.actualBoundingBoxAscent;return r===`right`?i=t.width-o-n.cellHorizontalPadding:r===`center`&&(i=t.width/2-o/2),{x:i,y:a,width:o,height:s}}var Ws=[ks,Ns,os,us,hs,bs,ws,Os,Is,Ls,zs,Bs,{getAccessibilityString:e=>e.data?.toString()??``,kind:H.Uri,needsHover:e=>e.hoverEffect===!0,needsHoverPosition:!0,useLabel:!0,drawPrep:Fn,draw:e=>{let{cell:t,theme:n,overrideCursor:r,hoverX:i,hoverY:a,rect:o,ctx:s}=e,c=t.displayData??t.data,l=t.hoverEffect===!0;if(r!==void 0&&l&&i!==void 0&&a!==void 0){let{x:l,y:u,width:d,height:f}=Us(On(c,s,n.baseFontFull),o,n,t.contentAlign);if(i>=l-4&&i<=l-4+d+8&&a>=u-4&&a<=u-4+f+8){let i=An(s,n.baseFontFull);r(`pointer`);let a=u-i;s.beginPath(),s.moveTo(o.x+l,Math.floor(o.y+a+f+5)+.5),s.lineTo(o.x+l+d,Math.floor(o.y+a+f+5)+.5),s.strokeStyle=n.linkColor,s.stroke(),s.save(),s.fillStyle=e.cellFillColor,X({...e,rect:{...o,x:o.x-1}},c,t.contentAlign),X({...e,rect:{...o,x:o.x-2}},c,t.contentAlign),X({...e,rect:{...o,x:o.x+1}},c,t.contentAlign),X({...e,rect:{...o,x:o.x+2}},c,t.contentAlign),s.restore()}}s.fillStyle=l?n.linkColor:n.textDark,X(e,c,t.contentAlign)},onClick:e=>{let{cell:t,bounds:n,posX:r,posY:i,theme:a}=e,o=t.displayData??t.data;if(t.hoverEffect!==!0||t.onClickUri===void 0)return;let s=kn(o,a.baseFontFull);if(s===void 0)return;let c=Us(s,n,a,t.contentAlign);Kr({x:c.x-4,y:c.y-4,width:c.width+8,height:c.height+8},r,i)&&t.onClickUri(e)},measure:(e,t,n)=>e.measureText(t.displayData??t.data).width+n.cellHorizontalPadding*2,onDelete:e=>({...e,data:``}),provideEditor:e=>t=>{let{onChange:n,value:r,forceEditMode:i,validatedSelection:a}=t;return G.createElement(Hs,{forceEditMode:r.readonly!==!0&&(i||e.hoverEffect===!0&&e.onClickUri!==void 0),uri:r.data,preview:r.displayData??r.data,validatedSelection:a,readonly:r.readonly===!0,onChange:e=>n({...r,data:e.target.value})})},onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}}],Gs=e(t(((e,t)=>{var n=wt(),r=fe(),i=`Expected a function`;function a(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(i);return r(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),n(e,t,{leading:o,maxWait:t,trailing:s})}t.exports=a}))(),1),Ks=[],qs=class extends Yn{imageLoaded=()=>void 0;loadedLocations=[];cache={};setCallback(e){this.imageLoaded=e}sendLoaded=(0,Gs.default)(()=>{this.imageLoaded(new Zn(this.loadedLocations)),this.loadedLocations=[]},20);clearOutOfWindow=()=>{let e=Object.keys(this.cache);for(let t of e){let e=this.cache[t],n=!1;for(let t=0;t<e.cells.length;t++){let r=e.cells[t];if(this.isInWindow(r)){n=!0;break}}n?e.cells=e.cells.filter(this.isInWindow):(e.cancel(),delete this.cache[t])}};loadImage(e,t,n,r){let i=!1,a=Ks.pop()??new Image,o=!1,s={img:void 0,cells:[Gn(t,n)],url:e,cancel:()=>{o||(o=!0,Ks.length<12?Ks.unshift(a):i||(a.src=``))}},c=new Promise(e=>a.addEventListener(`load`,()=>e(null)));requestAnimationFrame(async()=>{try{a.src=e,await c,await a.decode();let t=this.cache[r];if(t!==void 0&&!o){t.img=a;for(let e of t.cells)this.loadedLocations.push(Jn(e));i=!0,this.sendLoaded()}}catch{s.cancel()}}),this.cache[r]=s}loadOrGetImage(e,t,n){let r=e,i=this.cache[r];if(i!==void 0){let e=Gn(t,n);return i.cells.includes(e)||i.cells.push(e),i.img}else this.loadImage(e,t,n,r)}},Js=G.forwardRef((e,t)=>{let n=G.useMemo(()=>({...Ir,...e.headerIcons}),[e.headerIcons]),r=G.useMemo(()=>e.imageWindowLoader??new qs,[e.imageWindowLoader]);return G.createElement(is,{...e,renderers:Ws,headerIcons:n,ref:t,imageWindowLoader:r})});function Ys(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Xs(e,t){if(e.startsWith(`#`)){let n=e.slice(1);return`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}return e}function Zs(){let e=Ys(`--color-background`),t=Ys(`--color-foreground`),n=k(Ys(`--color-muted`),e),r=Ys(`--color-muted-foreground`),i=Ys(`--color-primary`),a=Ys(`--color-primary-foreground`),o=Ys(`--color-border`),s=Ys(`--color-primary`),c=Ys(`--color-text-secondary`),l=Ys(`--color-text-subtle`),u=Ys(`--font-sans`)||`Geist, system-ui, sans-serif`;return{bgCell:e,bgCellMedium:n,bgHeader:n,bgHeaderHasFocus:s,bgHeaderHovered:s,bgBubble:s,bgBubbleSelected:i,textDark:t,textMedium:c,textLight:l,textHeader:r,textGroupHeader:r,textHeaderSelected:t,textBubble:t,accentColor:i,accentFg:a,accentLight:Xs(i,.12),borderColor:o,horizontalBorderColor:o,fontFamily:u,baseFontStyle:`13px`,headerFontStyle:`600 12px`,editorFontSize:`13px`,lineHeight:1.5,cellHorizontalPadding:8,cellVerticalPadding:4,headerIconSize:16}}function Qs(){let[e,t]=(0,G.useState)(0);return(0,G.useEffect)(()=>{let e=()=>t(e=>e+1),n=new MutationObserver(e);return n.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),window.addEventListener(`ppm:theme-change`,e),()=>{n.disconnect(),window.removeEventListener(`ppm:theme-change`,e)}},[]),(0,G.useMemo)(()=>Zs(),[e])}function $s(e,t,n){let r=e.length*9+40,i=0,a=Math.min(t.length,20);for(let n=0;n<a;n++){let r=t[n]?.[e];if(r==null)continue;let a=typeof r==`object`?12:String(r).length;i=Math.max(i,a*8)}let o=/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money|bool)/.test(n.toLowerCase())?80:100;return Math.max(o,Math.min(Math.max(r,i)+16,400))}function ec(e,t,n,r,i,a,o){let s=(0,G.useMemo)(()=>new Map(e.map(e=>[e.name,e])),[e]),c=(0,G.useMemo)(()=>{let e=new Map;for(let n of t)e.set(n,$s(n,i,s.get(n)?.type??`text`));return e},[t.join(`|`),e.map(e=>`${e.name}:${e.type}`).join(`|`),i.length>0]);return(0,G.useMemo)(()=>{let e=t.filter(e=>n.has(e)),i=t.filter(e=>!n.has(e)),l=[...e,...i];return{columns:l.map(e=>{let t=s.get(e),n=t?.pk??!1,i;return a===e?i=o===`ASC`?`sortAsc`:`sortDesc`:n?i=`headerRowID`:t?.fk&&(i=`headerFk`),{title:e,id:e,width:r.get(e)??c.get(e)??100,hasMenu:!0,icon:i}}),freezeColumns:e.length,columnOrder:l}},[s,t,n,r,c,a,o])}function tc(e){if(e==null)return!1;if(typeof e==`object`)return!0;let t=String(e);if(t.length>=200)return!0;let n=t.trimStart();return!!((n[0]===`{`||n[0]===`[`)&&(n.endsWith(`}`)||n.endsWith(`]`))||n.startsWith(`<?xml`)||n.startsWith(`<`)&&n.endsWith(`>`))}function nc(e){return e==null?`NULL`:typeof e==`object`?JSON.stringify(e):String(e)}function rc(e){let t=e.trimStart();if(t[0]===`{`||t[0]===`[`)try{return JSON.parse(t),`json`}catch{}return t.startsWith(`<?xml`)||t.startsWith(`<`)&&/<\/\w+>/.test(t)?`xml`:t.startsWith(`---`)||/^\w+:\s/m.test(t)?`yaml`:`plaintext`}function ic(e){let t=e.toLowerCase();return/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money)/.test(t)?H.Number:/^bool/.test(t)?H.Boolean:H.Text}function ac(e){let t=e.type.toLowerCase();return!!(/^(serial|bigserial|smallserial)/.test(t)||/^(int|bigint|smallint|integer)/.test(t)&&e.defaultValue&&/nextval|identity|auto_increment/i.test(e.defaultValue)||t===`integer`&&e.pk&&!e.defaultValue)}function oc(e,t=200){return e.length>t?e.slice(0,t)+`…`:e}var sc={bgCell:`rgba(251, 191, 36, 0.15)`};function cc(e,t,n,r,i,a,o=!1){let s=(0,G.useRef)(o);s.current=o;let c=(0,G.useRef)(e);c.current=e;let l=(0,G.useRef)(t);l.current=t;let u=(0,G.useRef)(new Map);return u.current=new Map(n.map(e=>[e.name,e])),{getCellContent:(0,G.useCallback)(([e,t])=>{let n=l.current[e],i=c.current[t];if(!n||!i)return{kind:H.Text,data:``,displayData:``,allowOverlay:!1};let o=u.current.get(n),d=o?ic(o.type):H.Text,f=o?.pk??!1,p=r?i[r]:void 0,m=typeof p==`string`&&p.startsWith(`__new_`),h=`${p}:${n}`,g=a.current.get(h),_=g===void 0?i[n]:g.newVal,v=g!==void 0;if(f&&m){if(o&&ac(o))return{kind:H.Text,data:``,displayData:`AUTO`,allowOverlay:!1,readonly:!0,themeOverride:{textDark:`#6b7280`}};let e=g===void 0?``:String(g.newVal??``);return{kind:H.Text,data:e,displayData:e||`Enter ID…`,allowOverlay:!0,readonly:!1,themeOverride:e?v?sc:void 0:{textDark:`#9ca3af`}}}if(_==null){let e=m?``:`NULL`;if(m&&!v&&o){let t=o.type.toLowerCase();o.defaultValue?e=o.defaultValue:/^(timestamp|datetime|date)/.test(t)?e=`NOW()`:/^(uuid)/.test(t)&&(e=`gen_random_uuid()`)}return{kind:H.Text,data:``,displayData:e,allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:m||e!==`NULL`?{textDark:`#9ca3af`}:{textDark:`#6b7280`}}}if(d===H.Number&&typeof _==`number`)return{kind:H.Number,data:_,displayData:String(_),allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:void 0};if(d===H.Boolean&&typeof _==`boolean`)return{kind:H.Boolean,data:_,readonly:f||s.current,allowOverlay:!1};let y=nc(_);return{kind:H.Text,data:y,displayData:oc(y),allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:void 0}},[]),onCellEdited:(0,G.useCallback)(([e,t],n)=>{if(!r||o)return;let a=l.current[e],s=c.current[t];if(!a||!s)return;let u=s[r],d;if(n.kind===H.Text)d=n.data===``?null:n.data;else if(n.kind===H.Number)d=n.data;else if(n.kind===H.Boolean)d=n.data;else return;i(u,a,d)},[r,o,i])}}var lc={columns:W.empty(),rows:W.empty()};function uc(){let[e,t]=(0,G.useState)(lc);return{gridSelection:e,onGridSelectionChange:(0,G.useCallback)(e=>{t(e)},[]),selectedRowIndices:(0,G.useMemo)(()=>{let t=[];if(e.rows)for(let n of e.rows)if(Array.isArray(n))for(let e=n[0];e<n[1];e++)t.push(e);else t.push(n);return t},[e.rows]),clearSelection:(0,G.useCallback)(()=>{t(lc)},[])}}function dc(e,t,n){let[r,i]=(0,G.useState)(new Map),a=(0,G.useRef)(r);a.current=r;let o=(0,G.useRef)(!1);return{pendingEdits:r,pendingRef:a,addEdit:(0,G.useCallback)((e,t,n)=>{let r=`${e}:${t}`;i(i=>new Map(i).set(r,{pkVal:e,col:t,newVal:n}))},[]),commitAll:(0,G.useCallback)(async()=>{if(!e)return;let r=new Map;for(let n of a.current.values()){let i=String(n.pkVal);i.startsWith(`__new_`)?(r.has(i)||r.set(i,{}),r.get(i)[n.col]=n.newVal):t(e,n.pkVal,n.col,n.newVal)}if(n)for(let e of r.values())await n(e);o.current=!0},[e,t,n]),discardAll:(0,G.useCallback)(()=>{i(new Map),o.current=!1},[]),hasPending:r.size>0,pendingCount:r.size,committedRef:o}}function fc(e,t){let[n,r]=(0,G.useState)(new Set);return{effectiveRows:(0,G.useMemo)(()=>{if(n.size===0||!t)return e;let r=[],i=[];for(let a of e)n.has(String(a[t]??``))?i.push(a):r.push(a);return[...r,...i]},[e,n,t]),pinnedCount:n.size,pinnedPks:n,setPinnedPks:r}}function pc(e,t){if(!t)return null;let n=e[t];return n==null?null:String(n)}function mc(e,t){if(!e)return null;let{displayRows:n,pkCol:r,selectedTable:i,connectionId:a}=t,{kind:o,rowIdx:s,pk:c,colName:l}=e,u=(r&&c!==null?n.find(e=>pc(e,r)===c):void 0)??n[s];if(!u)return null;let d=i??``,f=d?` — ${d}`:``;if(o===`row`)return{title:c?`Row #${c}${f}`:`Row${f}`,content:JSON.stringify(u,null,2),language:`json`,viewerKey:`${a}:${d}:row:${c??``}`};if(!l)return null;let p=nc(u[l]),m=c??String(s);return{title:`${l} #${m}${f}`,content:p,language:rc(p),viewerKey:`${a}:${d}:${l}:${m}`}}function hc(e){let{displayRows:t,columnOrder:n,schema:r,pkCol:i,connectionId:a,connectionName:o,selectedTable:s,selectedSchema:c,addEdit:l,gridSelection:u,containerRef:d}=e,{openTab:f}=D(te(e=>({openTab:e.openTab}))),[p,m]=(0,G.useState)(null),h=(0,G.useRef)(t);h.current=t;let g=(0,G.useRef)(n);g.current=n;let _=(0,G.useCallback)(e=>pc(e,i),[i]),v=(0,G.useCallback)(e=>{let n=t[e];n&&m({kind:`row`,rowIdx:e,pk:_(n)})},[t,_]),y=(0,G.useCallback)((e,r)=>{let i=t[e];if(!i)return;let a=n[r];a&&m({kind:`cell`,rowIdx:e,pk:_(i),colName:a})},[t,n,_]),b=(0,G.useCallback)(()=>m(null),[]),x=(0,G.useMemo)(()=>mc(p,{displayRows:t,pkCol:i,selectedTable:s,connectionId:a}),[p,t,i,s,a]),S=(0,G.useCallback)(()=>{x&&f({type:`editor`,title:x.title,projectId:null,closable:!0,metadata:{inlineContent:x.content,inlineLanguage:x.language,viewerKey:x.viewerKey}})},[f,x]),C=(0,G.useCallback)((e,t)=>{if(!i)return!1;let[n,a]=e;for(let e=0;e<t.length;e++){let o=h.current[a+e];if(!o)continue;let s=o[i];for(let i=0;i<t[e].length;i++){let a=g.current[n+i];if(!a||r.find(e=>e.name===a)?.pk)continue;let o=t[e][i];l(s,a,o===``?null:o)}}return!1},[i,r,l]),w=(0,G.useRef)(r);w.current=r;let T=(0,G.useRef)(u);T.current=u;let E=(0,G.useRef)(l);E.current=l;let O=(0,G.useRef)(i);return O.current=i,(0,G.useEffect)(()=>{if(!d)return;let e=e=>{let t=d.current;if(!t||!t.contains(document.activeElement))return;let n=document.activeElement?.tagName;if(n===`INPUT`||n===`TEXTAREA`)return;let r=O.current;if(!r)return;let i=T.current?.current;if(!i)return;let a=e.clipboardData?.getData(`text/plain`);if(!a)return;let o=a.split(/\r?\n/).filter(e=>e.length>0).map(e=>e.split(` `));if(o.length===0)return;let[s,c]=i.cell;for(let e=0;e<o.length;e++){let t=h.current[c+e];if(!t)continue;let n=t[r];for(let t=0;t<o[e].length;t++){let r=g.current[s+t];if(!r||w.current.find(e=>e.name===r)?.pk)continue;let i=o[e][t];E.current(n,r,i===``?null:i)}}e.preventDefault()};return document.addEventListener(`paste`,e),()=>document.removeEventListener(`paste`,e)},[d]),{previewData:x,closePreview:b,openRowPreview:v,openCellPreview:y,openPreviewInTab:S,handlePaste:C,getContextFk:(0,G.useCallback)(e=>e?r.find(t=>t.name===e)?.fk??null:null,[r]),isCellViewable:(0,G.useCallback)((e,t)=>e&&t?tc(e[t]):!1,[]),openFkTable:(0,G.useCallback)((e,t)=>{t==null||!a||f({type:`database`,title:`${o??`DB`} · ${e.table}`,projectId:null,closable:!0,metadata:{connectionId:a,connectionName:o,tableName:e.table,schemaName:c??`public`,initialSql:`SELECT * FROM "${e.table}" WHERE "${e.column}" = '${String(t).replace(/'/g,`''`)}'`}})},[a,o,c,f])}}function gc({colName:e,bounds:t,isPinned:n,filterValue:r,sortState:i,onFilter:a,onSort:o,onClearSort:s,onTogglePin:u,onClose:d}){let[f,m]=(0,G.useState)(r),h=(0,G.useRef)(null),_=(0,G.useRef)(void 0);(0,G.useEffect)(()=>{let e=e=>{h.current&&!h.current.contains(e.target)&&d()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[d]),(0,G.useEffect)(()=>{let e=e=>{e.key===`Escape`&&d()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d]);let v=e=>{m(e),clearTimeout(_.current),_.current=setTimeout(()=>a(e),300)},b=Math.min(t.x,window.innerWidth-220-8),x=t.y+t.height+2,S=document.getElementById(`portal`);return S?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:h,style:{position:`fixed`,left:b,top:x,zIndex:1e4},className:`w-[220px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`px-3 py-1.5 border-b border-border text-muted-foreground font-medium truncate`,children:e}),(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(T,{className:`size-3 text-muted-foreground shrink-0`}),(0,q.jsx)(`input`,{autoFocus:!0,type:`text`,value:f,onChange:e=>v(e.target.value),placeholder:`Filter (ILIKE)…`,className:`flex-1 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),f&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>v(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(l,{className:`size-3`})})]})}),(0,q.jsxs)(`div`,{className:`py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[i===`asc`?(0,q.jsx)(p,{className:`size-3`}):(0,q.jsx)(g,{className:`size-3`}),i===`asc`?`Sort Descending`:`Sort Ascending`]}),i&&s&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{s(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(l,{className:`size-3`}),`Clear Sort`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{u(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[n?(0,q.jsx)(c,{className:`size-3`}):(0,q.jsx)(y,{className:`size-3`}),n?`Unpin Column`:`Pin Column`]})]})]}),S):null}function _c({position:e,isPinned:t,onViewRow:n,onViewCell:r,onPinRow:i,onDeleteRow:a,onOpenFkTable:o,fkLabel:s,onClose:l}){let[u,f]=(0,G.useState)(!1),p=(0,G.useRef)(null);(0,G.useEffect)(()=>{let e=e=>{p.current&&!p.current.contains(e.target)&&l()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[l]),(0,G.useEffect)(()=>{let e=e=>{e.key===`Escape`&&l()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[l]);let m=Math.min(e.x,window.innerWidth-180-8),g=Math.min(e.y,window.innerHeight-130-8),_=document.getElementById(`portal`);return _?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:p,style:{position:`fixed`,left:m,top:g,zIndex:1e4},className:`w-[180px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(v,{className:`size-3`}),` View as JSON`]}),r&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{r(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(v,{className:`size-3`}),` View Cell`]}),o&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-primary`,children:[(0,q.jsx)(h,{className:`size-3`}),` `,s??`Open Referenced Table`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{i(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[t?(0,q.jsx)(c,{className:`size-3`}):(0,q.jsx)(y,{className:`size-3`}),t?`Unpin Row`:`Pin Row`]}),(0,q.jsx)(`div`,{className:`border-t border-border my-0.5`}),u?(0,q.jsxs)(`div`,{className:`px-3 py-1.5 flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:()=>{a(),l()},className:`text-destructive font-medium hover:underline`,children:`Delete?`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>f(!1),className:`text-muted-foreground hover:underline`,children:`Cancel`})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>f(!0),className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-destructive`,children:[(0,q.jsx)(d,{className:`size-3`}),` Delete Row`]})]}),_):null}function vc({columns:e,onSelect:t,onClose:n,anchorRect:r}){let[i,a]=(0,G.useState)(``),[o,s]=(0,G.useState)(0),c=(0,G.useRef)(null),l=(0,G.useRef)(null),u=i?e.filter(e=>e.toLowerCase().includes(i.toLowerCase())):e;(0,G.useEffect)(()=>{s(0)},[i]),(0,G.useEffect)(()=>{let e=l.current;e&&e.children[o]?.scrollIntoView({block:`nearest`})},[o]),(0,G.useEffect)(()=>{let e=e=>{c.current&&!c.current.contains(e.target)&&n()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[n]);let d=(0,G.useCallback)(e=>{if(e.key===`Escape`){n();return}if(e.key===`ArrowDown`){e.preventDefault(),s(e=>Math.min(e+1,u.length-1));return}if(e.key===`ArrowUp`){e.preventDefault(),s(e=>Math.max(e-1,0));return}if(e.key===`Enter`){e.preventDefault();let r=u[o];r&&(t(r),n())}},[u,o,t,n]),f=document.getElementById(`portal`);return f?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:c,style:{position:`fixed`,left:Math.min(r.x,window.innerWidth-216),top:Math.min(r.y,window.innerHeight-308),zIndex:1e4},className:`w-[200px] max-h-[300px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden flex flex-col`,children:[(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsx)(`input`,{autoFocus:!0,value:i,onChange:e=>a(e.target.value),onKeyDown:d,placeholder:`Search columns…`,className:`w-full bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`})}),(0,q.jsxs)(`div`,{ref:l,className:`overflow-y-auto py-1`,children:[u.map((e,r)=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>{t(e),n()},onMouseEnter:()=>s(r),className:`w-full text-left px-3 py-1 truncate text-foreground ${r===o?`bg-muted`:`hover:bg-muted`}`,children:e},e)),u.length===0&&(0,q.jsx)(`div`,{className:`px-3 py-2 text-muted-foreground`,children:`No columns found`})]})]}),f):null}function yc({hasSelection:e,selectedCount:t,onBulkDelete:n,onInsertRow:r,columns:i,selectedRows:o,connectionName:s,searchTerm:c,onSearchChange:u,onColumnJump:p,colSearchOpen:m,onColSearchChange:h}){let[g,_]=(0,G.useState)(!1),[v,y]=(0,G.useState)(!1),b=m??v,x=h??y,S=(0,G.useRef)(null),C=S.current?(()=>{let e=S.current.getBoundingClientRect();return{x:e.left,y:e.bottom+4}})():{x:0,y:0};return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 border-b border-border bg-background shrink-0`,children:[e&&(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[t,` selected`]}),n&&(g?(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),_(!1)},className:`text-destructive text-[10px] font-medium hover:underline`,children:[`Delete `,t,`?`]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>_(!1),className:`text-muted-foreground text-[10px] hover:underline`,children:`Cancel`})]}):(0,q.jsx)(`button`,{type:`button`,onClick:()=>_(!0),className:`p-0.5 text-muted-foreground hover:text-destructive`,children:(0,q.jsx)(d,{className:`size-3`})})),(0,q.jsx)(tt,{columns:i,rows:o,filename:`${s??`db`}-selected`})]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,q.jsx)(w,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`input`,{value:c,onChange:e=>u(e.target.value),placeholder:`Search page…`,className:`w-24 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),c&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(l,{className:`size-3`})})]}),p&&(0,q.jsx)(`button`,{ref:S,type:`button`,onClick:()=>x(!b),className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,title:`Jump to column (/)`,children:(0,q.jsx)(a,{className:`size-3.5`})}),r&&(0,q.jsx)(`button`,{type:`button`,onClick:r,className:`p-0.5 rounded text-muted-foreground hover:text-primary transition-colors`,title:`Insert row`,children:(0,q.jsx)(f,{className:`size-3.5`})}),b&&p&&(0,q.jsx)(vc,{columns:i,onSelect:p,onClose:()=>x(!1),anchorRect:C})]})}function bc({pendingCount:e,onSave:t,onDiscard:n}){return e===0?null:(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-t border-warning/50 bg-warning/5 shrink-0 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-warning font-medium`,children:[e,` pending edit`,e>1?`s`:``]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,className:`flex items-center gap-1 px-2 py-0.5 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,q.jsx)(s,{className:`size-3`}),` Discard`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-1 px-2 py-0.5 rounded bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,children:[(0,q.jsx)(x,{className:`size-3`}),` Save`,(0,q.jsx)(`kbd`,{className:`ml-1 text-[9px] opacity-70`,children:`⌘↵`})]})]})}function xc({total:e,page:t,totalPages:n,onPageChange:r}){return(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-t border-border bg-background shrink-0 text-xs text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[e.toLocaleString(),` rows`]}),(0,q.jsxs)(`div`,{className:`hidden md:flex items-center gap-2 text-[10px] text-muted-foreground/50`,children:[(0,q.jsxs)(`span`,{children:[(0,q.jsx)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:`/`}),` columns`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`A`]}),` select all`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`C`]}),` copy`]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,disabled:t<=1,onClick:()=>r(t-1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(o,{className:`size-3.5`})}),(0,q.jsxs)(`span`,{children:[t,` / `,n]}),(0,q.jsx)(`button`,{type:`button`,disabled:t>=n,onClick:()=>r(t+1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(_,{className:`size-3.5`})})]})]})}function Sc(e,t){if(t===`json`)try{return JSON.stringify(JSON.parse(e.trim()),null,2)}catch{return null}if(t===`xml`){let t=0;return e.trim().replace(/>\s*</g,`>
|
|
138
|
+
`,t.allowWrapping===!0?void 0:1),i=0;for(let t of r)i=Math.max(i,e.measureText(t).width);return i+2*n.cellHorizontalPadding},onDelete:e=>({...e,data:``}),provideEditor:e=>({disablePadding:e.allowWrapping===!0,editor:t=>{let{isHighlighted:n,onChange:r,value:i,validatedSelection:a}=t;return G.createElement($t,{style:e.allowWrapping===!0?{padding:`3px 8.5px`}:void 0,highlight:n,autoFocus:i.readonly!==!0,disabled:i.readonly===!0,altNewline:!0,value:i.data,validatedSelection:a,onChange:e=>r({...i,data:e.target.value})})}}),onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}},Vs=Ne(`div`)({name:`UriOverlayEditorStyle`,class:`gdg-u1rrojo`,propsAsIs:!1}),Hs=e=>{let{uri:t,onChange:n,forceEditMode:r,readonly:i,validatedSelection:a,preview:o}=e,[s,c]=G.useState(!i&&(t===``||r)),l=G.useCallback(()=>{c(!0)},[]);return s?G.createElement($t,{validatedSelection:a,highlight:!0,autoFocus:!0,value:t,onChange:n}):G.createElement(Vs,null,G.createElement(`a`,{className:`gdg-link-area`,href:t,target:`_blank`,rel:`noopener noreferrer`},o),!i&&G.createElement(`div`,{className:`gdg-edit-icon`,onClick:l},G.createElement(Pt,null)),G.createElement(`textarea`,{className:`gdg-input`,autoFocus:!0}))};function Us(e,t,n,r){let i=n.cellHorizontalPadding,a=t.height/2-e.actualBoundingBoxAscent/2,o=e.width,s=e.actualBoundingBoxAscent;return r===`right`?i=t.width-o-n.cellHorizontalPadding:r===`center`&&(i=t.width/2-o/2),{x:i,y:a,width:o,height:s}}var Ws=[ks,Ns,os,us,hs,bs,ws,Os,Is,Ls,zs,Bs,{getAccessibilityString:e=>e.data?.toString()??``,kind:H.Uri,needsHover:e=>e.hoverEffect===!0,needsHoverPosition:!0,useLabel:!0,drawPrep:Fn,draw:e=>{let{cell:t,theme:n,overrideCursor:r,hoverX:i,hoverY:a,rect:o,ctx:s}=e,c=t.displayData??t.data,l=t.hoverEffect===!0;if(r!==void 0&&l&&i!==void 0&&a!==void 0){let{x:l,y:u,width:d,height:f}=Us(On(c,s,n.baseFontFull),o,n,t.contentAlign);if(i>=l-4&&i<=l-4+d+8&&a>=u-4&&a<=u-4+f+8){let i=An(s,n.baseFontFull);r(`pointer`);let a=u-i;s.beginPath(),s.moveTo(o.x+l,Math.floor(o.y+a+f+5)+.5),s.lineTo(o.x+l+d,Math.floor(o.y+a+f+5)+.5),s.strokeStyle=n.linkColor,s.stroke(),s.save(),s.fillStyle=e.cellFillColor,X({...e,rect:{...o,x:o.x-1}},c,t.contentAlign),X({...e,rect:{...o,x:o.x-2}},c,t.contentAlign),X({...e,rect:{...o,x:o.x+1}},c,t.contentAlign),X({...e,rect:{...o,x:o.x+2}},c,t.contentAlign),s.restore()}}s.fillStyle=l?n.linkColor:n.textDark,X(e,c,t.contentAlign)},onClick:e=>{let{cell:t,bounds:n,posX:r,posY:i,theme:a}=e,o=t.displayData??t.data;if(t.hoverEffect!==!0||t.onClickUri===void 0)return;let s=kn(o,a.baseFontFull);if(s===void 0)return;let c=Us(s,n,a,t.contentAlign);Kr({x:c.x-4,y:c.y-4,width:c.width+8,height:c.height+8},r,i)&&t.onClickUri(e)},measure:(e,t,n)=>e.measureText(t.displayData??t.data).width+n.cellHorizontalPadding*2,onDelete:e=>({...e,data:``}),provideEditor:e=>t=>{let{onChange:n,value:r,forceEditMode:i,validatedSelection:a}=t;return G.createElement(Hs,{forceEditMode:r.readonly!==!0&&(i||e.hoverEffect===!0&&e.onClickUri!==void 0),uri:r.data,preview:r.displayData??r.data,validatedSelection:a,readonly:r.readonly===!0,onChange:e=>n({...r,data:e.target.value})})},onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}}],Gs=e(t(((e,t)=>{var n=wt(),r=fe(),i=`Expected a function`;function a(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(i);return r(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),n(e,t,{leading:o,maxWait:t,trailing:s})}t.exports=a}))(),1),Ks=[],qs=class extends Yn{imageLoaded=()=>void 0;loadedLocations=[];cache={};setCallback(e){this.imageLoaded=e}sendLoaded=(0,Gs.default)(()=>{this.imageLoaded(new Zn(this.loadedLocations)),this.loadedLocations=[]},20);clearOutOfWindow=()=>{let e=Object.keys(this.cache);for(let t of e){let e=this.cache[t],n=!1;for(let t=0;t<e.cells.length;t++){let r=e.cells[t];if(this.isInWindow(r)){n=!0;break}}n?e.cells=e.cells.filter(this.isInWindow):(e.cancel(),delete this.cache[t])}};loadImage(e,t,n,r){let i=!1,a=Ks.pop()??new Image,o=!1,s={img:void 0,cells:[Gn(t,n)],url:e,cancel:()=>{o||(o=!0,Ks.length<12?Ks.unshift(a):i||(a.src=``))}},c=new Promise(e=>a.addEventListener(`load`,()=>e(null)));requestAnimationFrame(async()=>{try{a.src=e,await c,await a.decode();let t=this.cache[r];if(t!==void 0&&!o){t.img=a;for(let e of t.cells)this.loadedLocations.push(Jn(e));i=!0,this.sendLoaded()}}catch{s.cancel()}}),this.cache[r]=s}loadOrGetImage(e,t,n){let r=e,i=this.cache[r];if(i!==void 0){let e=Gn(t,n);return i.cells.includes(e)||i.cells.push(e),i.img}else this.loadImage(e,t,n,r)}},Js=G.forwardRef((e,t)=>{let n=G.useMemo(()=>({...Ir,...e.headerIcons}),[e.headerIcons]),r=G.useMemo(()=>e.imageWindowLoader??new qs,[e.imageWindowLoader]);return G.createElement(is,{...e,renderers:Ws,headerIcons:n,ref:t,imageWindowLoader:r})});function Ys(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Xs(e,t){if(e.startsWith(`#`)){let n=e.slice(1);return`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}return e}function Zs(){let e=Ys(`--color-background`),t=Ys(`--color-foreground`),n=O(Ys(`--color-muted`),e),r=Ys(`--color-muted-foreground`),i=Ys(`--color-primary`),a=Ys(`--color-primary-foreground`),o=Ys(`--color-border`),s=Ys(`--color-primary`),c=Ys(`--color-text-secondary`),l=Ys(`--color-text-subtle`),u=Ys(`--font-sans`)||`Geist, system-ui, sans-serif`;return{bgCell:e,bgCellMedium:n,bgHeader:n,bgHeaderHasFocus:s,bgHeaderHovered:s,bgBubble:s,bgBubbleSelected:i,textDark:t,textMedium:c,textLight:l,textHeader:r,textGroupHeader:r,textHeaderSelected:t,textBubble:t,accentColor:i,accentFg:a,accentLight:Xs(i,.12),borderColor:o,horizontalBorderColor:o,fontFamily:u,baseFontStyle:`13px`,headerFontStyle:`600 12px`,editorFontSize:`13px`,lineHeight:1.5,cellHorizontalPadding:8,cellVerticalPadding:4,headerIconSize:16}}function Qs(){let[e,t]=(0,G.useState)(0);return(0,G.useEffect)(()=>{let e=()=>t(e=>e+1),n=new MutationObserver(e);return n.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),window.addEventListener(`ppm:theme-change`,e),()=>{n.disconnect(),window.removeEventListener(`ppm:theme-change`,e)}},[]),(0,G.useMemo)(()=>Zs(),[e])}function $s(e,t,n){let r=e.length*9+40,i=0,a=Math.min(t.length,20);for(let n=0;n<a;n++){let r=t[n]?.[e];if(r==null)continue;let a=typeof r==`object`?12:String(r).length;i=Math.max(i,a*8)}let o=/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money|bool)/.test(n.toLowerCase())?80:100;return Math.max(o,Math.min(Math.max(r,i)+16,400))}function ec(e,t,n,r,i,a,o){let s=(0,G.useMemo)(()=>new Map(e.map(e=>[e.name,e])),[e]),c=(0,G.useMemo)(()=>{let e=new Map;for(let n of t)e.set(n,$s(n,i,s.get(n)?.type??`text`));return e},[t.join(`|`),e.map(e=>`${e.name}:${e.type}`).join(`|`),i.length>0]);return(0,G.useMemo)(()=>{let e=t.filter(e=>n.has(e)),i=t.filter(e=>!n.has(e)),l=[...e,...i];return{columns:l.map(e=>{let t=s.get(e),n=t?.pk??!1,i;return a===e?i=o===`ASC`?`sortAsc`:`sortDesc`:n?i=`headerRowID`:t?.fk&&(i=`headerFk`),{title:e,id:e,width:r.get(e)??c.get(e)??100,hasMenu:!0,icon:i}}),freezeColumns:e.length,columnOrder:l}},[s,t,n,r,c,a,o])}function tc(e){if(e==null)return!1;if(typeof e==`object`)return!0;let t=String(e);if(t.length>=200)return!0;let n=t.trimStart();return!!((n[0]===`{`||n[0]===`[`)&&(n.endsWith(`}`)||n.endsWith(`]`))||n.startsWith(`<?xml`)||n.startsWith(`<`)&&n.endsWith(`>`))}function nc(e){return e==null?`NULL`:typeof e==`object`?JSON.stringify(e):String(e)}function rc(e){let t=e.trimStart();if(t[0]===`{`||t[0]===`[`)try{return JSON.parse(t),`json`}catch{}return t.startsWith(`<?xml`)||t.startsWith(`<`)&&/<\/\w+>/.test(t)?`xml`:t.startsWith(`---`)||/^\w+:\s/m.test(t)?`yaml`:`plaintext`}function ic(e){let t=e.toLowerCase();return/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money)/.test(t)?H.Number:/^bool/.test(t)?H.Boolean:H.Text}function ac(e){let t=e.type.toLowerCase();return!!(/^(serial|bigserial|smallserial)/.test(t)||/^(int|bigint|smallint|integer)/.test(t)&&e.defaultValue&&/nextval|identity|auto_increment/i.test(e.defaultValue)||t===`integer`&&e.pk&&!e.defaultValue)}function oc(e,t=200){return e.length>t?e.slice(0,t)+`…`:e}var sc={bgCell:`rgba(251, 191, 36, 0.15)`};function cc(e,t,n,r,i,a,o=!1){let s=(0,G.useRef)(o);s.current=o;let c=(0,G.useRef)(e);c.current=e;let l=(0,G.useRef)(t);l.current=t;let u=(0,G.useRef)(new Map);return u.current=new Map(n.map(e=>[e.name,e])),{getCellContent:(0,G.useCallback)(([e,t])=>{let n=l.current[e],i=c.current[t];if(!n||!i)return{kind:H.Text,data:``,displayData:``,allowOverlay:!1};let o=u.current.get(n),d=o?ic(o.type):H.Text,f=o?.pk??!1,p=r?i[r]:void 0,m=typeof p==`string`&&p.startsWith(`__new_`),h=`${p}:${n}`,g=a.current.get(h),_=g===void 0?i[n]:g.newVal,v=g!==void 0;if(f&&m){if(o&&ac(o))return{kind:H.Text,data:``,displayData:`AUTO`,allowOverlay:!1,readonly:!0,themeOverride:{textDark:`#6b7280`}};let e=g===void 0?``:String(g.newVal??``);return{kind:H.Text,data:e,displayData:e||`Enter ID…`,allowOverlay:!0,readonly:!1,themeOverride:e?v?sc:void 0:{textDark:`#9ca3af`}}}if(_==null){let e=m?``:`NULL`;if(m&&!v&&o){let t=o.type.toLowerCase();o.defaultValue?e=o.defaultValue:/^(timestamp|datetime|date)/.test(t)?e=`NOW()`:/^(uuid)/.test(t)&&(e=`gen_random_uuid()`)}return{kind:H.Text,data:``,displayData:e,allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:m||e!==`NULL`?{textDark:`#9ca3af`}:{textDark:`#6b7280`}}}if(d===H.Number&&typeof _==`number`)return{kind:H.Number,data:_,displayData:String(_),allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:void 0};if(d===H.Boolean&&typeof _==`boolean`)return{kind:H.Boolean,data:_,readonly:f||s.current,allowOverlay:!1};let y=nc(_);return{kind:H.Text,data:y,displayData:oc(y),allowOverlay:!f,readonly:f||s.current,themeOverride:v?sc:void 0}},[]),onCellEdited:(0,G.useCallback)(([e,t],n)=>{if(!r||o)return;let a=l.current[e],s=c.current[t];if(!a||!s)return;let u=s[r],d;if(n.kind===H.Text)d=n.data===``?null:n.data;else if(n.kind===H.Number)d=n.data;else if(n.kind===H.Boolean)d=n.data;else return;i(u,a,d)},[r,o,i])}}var lc={columns:W.empty(),rows:W.empty()};function uc(){let[e,t]=(0,G.useState)(lc);return{gridSelection:e,onGridSelectionChange:(0,G.useCallback)(e=>{t(e)},[]),selectedRowIndices:(0,G.useMemo)(()=>{let t=[];if(e.rows)for(let n of e.rows)if(Array.isArray(n))for(let e=n[0];e<n[1];e++)t.push(e);else t.push(n);return t},[e.rows]),clearSelection:(0,G.useCallback)(()=>{t(lc)},[])}}function dc(e,t,n){let[r,i]=(0,G.useState)(new Map),a=(0,G.useRef)(r);a.current=r;let o=(0,G.useRef)(!1);return{pendingEdits:r,pendingRef:a,addEdit:(0,G.useCallback)((e,t,n)=>{let r=`${e}:${t}`;i(i=>new Map(i).set(r,{pkVal:e,col:t,newVal:n}))},[]),commitAll:(0,G.useCallback)(async()=>{if(!e)return;let r=new Map;for(let n of a.current.values()){let i=String(n.pkVal);i.startsWith(`__new_`)?(r.has(i)||r.set(i,{}),r.get(i)[n.col]=n.newVal):t(e,n.pkVal,n.col,n.newVal)}if(n)for(let e of r.values())await n(e);o.current=!0},[e,t,n]),discardAll:(0,G.useCallback)(()=>{i(new Map),o.current=!1},[]),hasPending:r.size>0,pendingCount:r.size,committedRef:o}}function fc(e,t){let[n,r]=(0,G.useState)(new Set);return{effectiveRows:(0,G.useMemo)(()=>{if(n.size===0||!t)return e;let r=[],i=[];for(let a of e)n.has(String(a[t]??``))?i.push(a):r.push(a);return[...r,...i]},[e,n,t]),pinnedCount:n.size,pinnedPks:n,setPinnedPks:r}}function pc(e,t){if(!t)return null;let n=e[t];return n==null?null:String(n)}function mc(e,t){if(!e)return null;let{displayRows:n,pkCol:r,selectedTable:i,connectionId:a}=t,{kind:o,rowIdx:s,pk:c,colName:l}=e,u=(r&&c!==null?n.find(e=>pc(e,r)===c):void 0)??n[s];if(!u)return null;let d=i??``,f=d?` — ${d}`:``;if(o===`row`)return{title:c?`Row #${c}${f}`:`Row${f}`,content:JSON.stringify(u,null,2),language:`json`,viewerKey:`${a}:${d}:row:${c??``}`};if(!l)return null;let p=nc(u[l]),m=c??String(s);return{title:`${l} #${m}${f}`,content:p,language:rc(p),viewerKey:`${a}:${d}:${l}:${m}`}}function hc(e){let{displayRows:t,columnOrder:n,schema:r,pkCol:i,connectionId:a,connectionName:o,selectedTable:s,selectedSchema:c,addEdit:l,gridSelection:u,containerRef:d}=e,{openTab:f}=D(ne(e=>({openTab:e.openTab}))),[p,m]=(0,G.useState)(null),h=(0,G.useRef)(t);h.current=t;let g=(0,G.useRef)(n);g.current=n;let _=(0,G.useCallback)(e=>pc(e,i),[i]),v=(0,G.useCallback)(e=>{let n=t[e];n&&m({kind:`row`,rowIdx:e,pk:_(n)})},[t,_]),y=(0,G.useCallback)((e,r)=>{let i=t[e];if(!i)return;let a=n[r];a&&m({kind:`cell`,rowIdx:e,pk:_(i),colName:a})},[t,n,_]),b=(0,G.useCallback)(()=>m(null),[]),x=(0,G.useMemo)(()=>mc(p,{displayRows:t,pkCol:i,selectedTable:s,connectionId:a}),[p,t,i,s,a]),S=(0,G.useCallback)(()=>{x&&f({type:`editor`,title:x.title,projectId:null,closable:!0,metadata:{inlineContent:x.content,inlineLanguage:x.language,viewerKey:x.viewerKey}})},[f,x]),C=(0,G.useCallback)((e,t)=>{if(!i)return!1;let[n,a]=e;for(let e=0;e<t.length;e++){let o=h.current[a+e];if(!o)continue;let s=o[i];for(let i=0;i<t[e].length;i++){let a=g.current[n+i];if(!a||r.find(e=>e.name===a)?.pk)continue;let o=t[e][i];l(s,a,o===``?null:o)}}return!1},[i,r,l]),w=(0,G.useRef)(r);w.current=r;let T=(0,G.useRef)(u);T.current=u;let E=(0,G.useRef)(l);E.current=l;let O=(0,G.useRef)(i);return O.current=i,(0,G.useEffect)(()=>{if(!d)return;let e=e=>{let t=d.current;if(!t||!t.contains(document.activeElement))return;let n=document.activeElement?.tagName;if(n===`INPUT`||n===`TEXTAREA`)return;let r=O.current;if(!r)return;let i=T.current?.current;if(!i)return;let a=e.clipboardData?.getData(`text/plain`);if(!a)return;let o=a.split(/\r?\n/).filter(e=>e.length>0).map(e=>e.split(` `));if(o.length===0)return;let[s,c]=i.cell;for(let e=0;e<o.length;e++){let t=h.current[c+e];if(!t)continue;let n=t[r];for(let t=0;t<o[e].length;t++){let r=g.current[s+t];if(!r||w.current.find(e=>e.name===r)?.pk)continue;let i=o[e][t];E.current(n,r,i===``?null:i)}}e.preventDefault()};return document.addEventListener(`paste`,e),()=>document.removeEventListener(`paste`,e)},[d]),{previewData:x,closePreview:b,openRowPreview:v,openCellPreview:y,openPreviewInTab:S,handlePaste:C,getContextFk:(0,G.useCallback)(e=>e?r.find(t=>t.name===e)?.fk??null:null,[r]),isCellViewable:(0,G.useCallback)((e,t)=>e&&t?tc(e[t]):!1,[]),openFkTable:(0,G.useCallback)((e,t)=>{t==null||!a||f({type:`database`,title:`${o??`DB`} · ${e.table}`,projectId:null,closable:!0,metadata:{connectionId:a,connectionName:o,tableName:e.table,schemaName:c??`public`,initialSql:`SELECT * FROM "${e.table}" WHERE "${e.column}" = '${String(t).replace(/'/g,`''`)}'`}})},[a,o,c,f])}}function gc({colName:e,bounds:t,isPinned:n,filterValue:r,sortState:i,onFilter:a,onSort:o,onClearSort:s,onTogglePin:u,onClose:d}){let[f,m]=(0,G.useState)(r),h=(0,G.useRef)(null),_=(0,G.useRef)(void 0);(0,G.useEffect)(()=>{let e=e=>{h.current&&!h.current.contains(e.target)&&d()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[d]),(0,G.useEffect)(()=>{let e=e=>{e.key===`Escape`&&d()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d]);let v=e=>{m(e),clearTimeout(_.current),_.current=setTimeout(()=>a(e),300)},b=Math.min(t.x,window.innerWidth-220-8),x=t.y+t.height+2,S=document.getElementById(`portal`);return S?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:h,style:{position:`fixed`,left:b,top:x,zIndex:1e4},className:`w-[220px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`px-3 py-1.5 border-b border-border text-muted-foreground font-medium truncate`,children:e}),(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(T,{className:`size-3 text-muted-foreground shrink-0`}),(0,q.jsx)(`input`,{autoFocus:!0,type:`text`,value:f,onChange:e=>v(e.target.value),placeholder:`Filter (ILIKE)…`,className:`flex-1 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),f&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>v(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(l,{className:`size-3`})})]})}),(0,q.jsxs)(`div`,{className:`py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[i===`asc`?(0,q.jsx)(p,{className:`size-3`}):(0,q.jsx)(g,{className:`size-3`}),i===`asc`?`Sort Descending`:`Sort Ascending`]}),i&&s&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{s(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(l,{className:`size-3`}),`Clear Sort`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{u(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[n?(0,q.jsx)(c,{className:`size-3`}):(0,q.jsx)(y,{className:`size-3`}),n?`Unpin Column`:`Pin Column`]})]})]}),S):null}function _c({position:e,isPinned:t,onViewRow:n,onViewCell:r,onPinRow:i,onDeleteRow:a,onOpenFkTable:o,fkLabel:s,onClose:l}){let[u,f]=(0,G.useState)(!1),p=(0,G.useRef)(null);(0,G.useEffect)(()=>{let e=e=>{p.current&&!p.current.contains(e.target)&&l()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[l]),(0,G.useEffect)(()=>{let e=e=>{e.key===`Escape`&&l()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[l]);let m=Math.min(e.x,window.innerWidth-180-8),g=Math.min(e.y,window.innerHeight-130-8),_=document.getElementById(`portal`);return _?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:p,style:{position:`fixed`,left:m,top:g,zIndex:1e4},className:`w-[180px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(v,{className:`size-3`}),` View as JSON`]}),r&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{r(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(v,{className:`size-3`}),` View Cell`]}),o&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-primary`,children:[(0,q.jsx)(h,{className:`size-3`}),` `,s??`Open Referenced Table`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{i(),l()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[t?(0,q.jsx)(c,{className:`size-3`}):(0,q.jsx)(y,{className:`size-3`}),t?`Unpin Row`:`Pin Row`]}),(0,q.jsx)(`div`,{className:`border-t border-border my-0.5`}),u?(0,q.jsxs)(`div`,{className:`px-3 py-1.5 flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:()=>{a(),l()},className:`text-destructive font-medium hover:underline`,children:`Delete?`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>f(!1),className:`text-muted-foreground hover:underline`,children:`Cancel`})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>f(!0),className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-destructive`,children:[(0,q.jsx)(d,{className:`size-3`}),` Delete Row`]})]}),_):null}function vc({columns:e,onSelect:t,onClose:n,anchorRect:r}){let[i,a]=(0,G.useState)(``),[o,s]=(0,G.useState)(0),c=(0,G.useRef)(null),l=(0,G.useRef)(null),u=i?e.filter(e=>e.toLowerCase().includes(i.toLowerCase())):e;(0,G.useEffect)(()=>{s(0)},[i]),(0,G.useEffect)(()=>{let e=l.current;e&&e.children[o]?.scrollIntoView({block:`nearest`})},[o]),(0,G.useEffect)(()=>{let e=e=>{c.current&&!c.current.contains(e.target)&&n()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[n]);let d=(0,G.useCallback)(e=>{if(e.key===`Escape`){n();return}if(e.key===`ArrowDown`){e.preventDefault(),s(e=>Math.min(e+1,u.length-1));return}if(e.key===`ArrowUp`){e.preventDefault(),s(e=>Math.max(e-1,0));return}if(e.key===`Enter`){e.preventDefault();let r=u[o];r&&(t(r),n())}},[u,o,t,n]),f=document.getElementById(`portal`);return f?(0,K.createPortal)((0,q.jsxs)(`div`,{ref:c,style:{position:`fixed`,left:Math.min(r.x,window.innerWidth-216),top:Math.min(r.y,window.innerHeight-308),zIndex:1e4},className:`w-[200px] max-h-[300px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden flex flex-col`,children:[(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsx)(`input`,{autoFocus:!0,value:i,onChange:e=>a(e.target.value),onKeyDown:d,placeholder:`Search columns…`,className:`w-full bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`})}),(0,q.jsxs)(`div`,{ref:l,className:`overflow-y-auto py-1`,children:[u.map((e,r)=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>{t(e),n()},onMouseEnter:()=>s(r),className:`w-full text-left px-3 py-1 truncate text-foreground ${r===o?`bg-muted`:`hover:bg-muted`}`,children:e},e)),u.length===0&&(0,q.jsx)(`div`,{className:`px-3 py-2 text-muted-foreground`,children:`No columns found`})]})]}),f):null}function yc({hasSelection:e,selectedCount:t,onBulkDelete:n,onInsertRow:r,columns:i,selectedRows:o,connectionName:s,searchTerm:c,onSearchChange:u,onColumnJump:p,colSearchOpen:m,onColSearchChange:h}){let[g,_]=(0,G.useState)(!1),[v,y]=(0,G.useState)(!1),b=m??v,x=h??y,S=(0,G.useRef)(null),C=S.current?(()=>{let e=S.current.getBoundingClientRect();return{x:e.left,y:e.bottom+4}})():{x:0,y:0};return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 border-b border-border bg-background shrink-0`,children:[e&&(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[t,` selected`]}),n&&(g?(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),_(!1)},className:`text-destructive text-[10px] font-medium hover:underline`,children:[`Delete `,t,`?`]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>_(!1),className:`text-muted-foreground text-[10px] hover:underline`,children:`Cancel`})]}):(0,q.jsx)(`button`,{type:`button`,onClick:()=>_(!0),className:`p-0.5 text-muted-foreground hover:text-destructive`,children:(0,q.jsx)(d,{className:`size-3`})})),(0,q.jsx)(tt,{columns:i,rows:o,filename:`${s??`db`}-selected`})]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,q.jsx)(w,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`input`,{value:c,onChange:e=>u(e.target.value),placeholder:`Search page…`,className:`w-24 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),c&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(l,{className:`size-3`})})]}),p&&(0,q.jsx)(`button`,{ref:S,type:`button`,onClick:()=>x(!b),className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,title:`Jump to column (/)`,children:(0,q.jsx)(a,{className:`size-3.5`})}),r&&(0,q.jsx)(`button`,{type:`button`,onClick:r,className:`p-0.5 rounded text-muted-foreground hover:text-primary transition-colors`,title:`Insert row`,children:(0,q.jsx)(f,{className:`size-3.5`})}),b&&p&&(0,q.jsx)(vc,{columns:i,onSelect:p,onClose:()=>x(!1),anchorRect:C})]})}function bc({pendingCount:e,onSave:t,onDiscard:n}){return e===0?null:(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-t border-warning/50 bg-warning/5 shrink-0 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-warning font-medium`,children:[e,` pending edit`,e>1?`s`:``]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,className:`flex items-center gap-1 px-2 py-0.5 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,q.jsx)(s,{className:`size-3`}),` Discard`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-1 px-2 py-0.5 rounded bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,children:[(0,q.jsx)(x,{className:`size-3`}),` Save`,(0,q.jsx)(`kbd`,{className:`ml-1 text-[9px] opacity-70`,children:`⌘↵`})]})]})}function xc({total:e,page:t,totalPages:n,onPageChange:r}){return(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-t border-border bg-background shrink-0 text-xs text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[e.toLocaleString(),` rows`]}),(0,q.jsxs)(`div`,{className:`hidden md:flex items-center gap-2 text-[10px] text-muted-foreground/50`,children:[(0,q.jsxs)(`span`,{children:[(0,q.jsx)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:`/`}),` columns`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`A`]}),` select all`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`C`]}),` copy`]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,disabled:t<=1,onClick:()=>r(t-1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(o,{className:`size-3.5`})}),(0,q.jsxs)(`span`,{children:[t,` / `,n]}),(0,q.jsx)(`button`,{type:`button`,disabled:t>=n,onClick:()=>r(t+1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(_,{className:`size-3.5`})})]})]})}function Sc(e,t){if(t===`json`)try{return JSON.stringify(JSON.parse(e.trim()),null,2)}catch{return null}if(t===`xml`){let t=0;return e.trim().replace(/>\s*</g,`>
|
|
139
139
|
<`).split(`
|
|
140
140
|
`).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.startsWith(`<?`)&&t++,r}).join(`
|
|
141
|
-
`)}return null}function Cc({data:e,onClose:t,onOpenInTab:n}){let r=Fe(),[i,a]=(0,G.useState)(!0),[o,s]=(0,G.useState)(!1),c=e.language===`json`||e.language===`xml`,d=(0,G.useMemo)(()=>o?Sc(e.content,e.language)??e.content:e.content,[o,e.content,e.language]),f=(0,G.useCallback)(()=>{s(t=>t?!1:Sc(e.content,e.language)!==null)},[e.content,e.language]),[p,g]=(0,G.useState)(200),_=(0,G.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=p,r=e=>g(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[p]);return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:p},children:[(0,q.jsx)(`div`,{onMouseDown:_,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,q.jsx)(u,{className:`size-3 text-muted-foreground/50`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,q.jsx)(v,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:e.title}),c&&(0,q.jsx)(`button`,{type:`button`,onClick:f,title:o?`Raw`:`Beautify`,className:`p-0.5 rounded transition-colors ${o?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(m,{className:`size-3`})}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>a(!i),title:i?`No wrap`:`Word wrap`,className:`p-0.5 rounded transition-colors ${i?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(b,{className:`size-3`})}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,title:`Open in new 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,q.jsx)(h,{className:`size-3`}),(0,q.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,q.jsx)(`button`,{type:`button`,onClick:t,title:`Close preview (Esc)`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,q.jsx)(l,{className:`size-3`})})]}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(
|
|
141
|
+
`)}return null}function Cc({data:e,onClose:t,onOpenInTab:n}){let r=Fe(),[i,a]=(0,G.useState)(!0),[o,s]=(0,G.useState)(!1),c=e.language===`json`||e.language===`xml`,d=(0,G.useMemo)(()=>o?Sc(e.content,e.language)??e.content:e.content,[o,e.content,e.language]),f=(0,G.useCallback)(()=>{s(t=>t?!1:Sc(e.content,e.language)!==null)},[e.content,e.language]),[p,g]=(0,G.useState)(200),_=(0,G.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=p,r=e=>g(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[p]);return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:p},children:[(0,q.jsx)(`div`,{onMouseDown:_,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,q.jsx)(u,{className:`size-3 text-muted-foreground/50`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,q.jsx)(v,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:e.title}),c&&(0,q.jsx)(`button`,{type:`button`,onClick:f,title:o?`Raw`:`Beautify`,className:`p-0.5 rounded transition-colors ${o?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(m,{className:`size-3`})}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>a(!i),title:i?`No wrap`:`Word wrap`,className:`p-0.5 rounded transition-colors ${i?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(b,{className:`size-3`})}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,title:`Open in new 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,q.jsx)(h,{className:`size-3`}),(0,q.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,q.jsx)(`button`,{type:`button`,onClick:t,title:`Close preview (Esc)`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,q.jsx)(l,{className:`size-3`})})]}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(k,{beforeMount:te,height:`100%`,language:e.language===`plaintext`?void 0:e.language,value:d,theme:r,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:i?`on`:`off`,lineNumbers:`on`,fontSize:12,folding:!0,bracketPairColorization:{enabled:!0},domReadOnly:!0,contextmenu:!1,overviewRulerLanes:0},loading:(0,q.jsx)(C,{className:`size-4 animate-spin text-muted-foreground`})})})]})}var wc=()=>{},Tc={sortAsc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 4l4 6H4z"/></svg>`,sortDesc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 12l4-6H4z"/></svg>`,headerFk:()=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="var(--accent)" stroke-width="1.5" stroke-linecap="round"><path d="M6 4.5H4.5a2.5 2.5 0 000 5H6M10 4.5h1.5a2.5 2.5 0 010 5H10M5 7h6"/></svg>`};function Ec(e){let{columns:t,rows:n,total:r,limit:i,schema:a,loading:o,page:s,onPageChange:c,onCellUpdate:l,onRowDelete:u,onBulkDelete:d,onInsertRow:f,orderBy:p,orderDir:m,onToggleSort:h,onClearSort:g,columnFilters:_={},onColumnFilter:v,connectionId:y,selectedTable:b,selectedSchema:x,connectionName:S,readOnly:w}=e,T=Qs(),E=(0,G.useRef)(null),D=(0,G.useRef)(null),O=(0,G.useMemo)(()=>{let e=new Set(a.map(e=>e.name));return t.filter(t=>e.has(t))},[t,a]),[k,ee]=(0,G.useState)(new Set),[te,ne]=(0,G.useState)(new Map),[A,re]=(0,G.useState)(null),[j,ie]=(0,G.useState)(null),[ae,oe]=(0,G.useState)(``),[M,se]=(0,G.useState)([]),N=(0,G.useMemo)(()=>a.find(e=>e.pk)?.name??a.find(e=>e.name.toLowerCase()===`id`)?.name??null,[a]),{effectiveRows:ce,pinnedCount:le,pinnedPks:ue,setPinnedPks:P}=fc(n,N),F=(0,G.useMemo)(()=>{if(le===0)return[...ce,...M];let e=ce.slice(0,ce.length-le),t=ce.slice(ce.length-le);return[...e,...M,...t]},[ce,M,le]),I=(0,G.useMemo)(()=>{if(!ae.trim())return F;let e=ae.toLowerCase();return F.filter(t=>O.some(n=>String(t[n]??``).toLowerCase().includes(e)))},[F,O,ae]),de=(0,G.useMemo)(()=>le===0||!N?0:ae.trim()?I.filter(e=>ue.has(String(e[N]??``))).length:le,[le,N,ae,I,ue]),fe=!!w||!N,{pendingRef:pe,addEdit:me,commitAll:he,discardAll:ge,hasPending:_e,pendingCount:ve,committedRef:L}=dc(N,l,f),{columns:ye,freezeColumns:be,columnOrder:xe}=ec(a,O,k,te,I,p,m),{getCellContent:R,onCellEdited:Se}=cc(I,xe,a,N,me,pe,fe),{gridSelection:z,onGridSelectionChange:B,selectedRowIndices:V,clearSelection:Ce}=uc(),{previewData:H,closePreview:U,openRowPreview:we,openCellPreview:Te,openPreviewInTab:Ee,handlePaste:W,getContextFk:De,isCellViewable:Oe,openFkTable:ke}=hc({displayRows:I,columnOrder:xe,schema:a,pkCol:N,connectionId:y,connectionName:S,selectedTable:b,selectedSchema:x,addEdit:fe?wc:me,gridSelection:z,containerRef:D});(0,G.useEffect)(()=>{L.current&&(L.current=!1,ge(),se([]))},[n]);let Ae=(0,G.useCallback)((e,t)=>{ne(n=>new Map(n).set(e.id??e.title,t))},[]),je=(0,G.useCallback)((e,t)=>{let n=xe[e];n&&re({colName:n,bounds:t})},[xe]),Me=(0,G.useCallback)(([e,t],n)=>{n.preventDefault(),ie({position:{x:n.bounds.x+n.localEventX,y:n.bounds.y+n.localEventY},rowIdx:t,colIdx:e})},[]),Ne=(0,G.useCallback)(e=>{ee(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Pe=(0,G.useCallback)(e=>{if(!N)return;let t=I[e];if(!t)return;let n=String(t[N]??``);P(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t})},[N,I,P]),Fe=(0,G.useCallback)(e=>{if(ue.size===0||!N)return;let t=I[e];if(t&&ue.has(String(t[N]??``)))return{bgCell:T.bgCellMedium??T.bgHeader}},[ue,N,I,T]),Ie=(0,G.useCallback)(()=>{!N||!d||(d(N,V.map(e=>I[e]?.[N]).filter(e=>e!=null)),Ce())},[N,d,V,I,Ce]),[Le,Re]=(0,G.useState)(!1),ze=(0,G.useCallback)(e=>{if(e.key===`Escape`){U(),Re(!1);return}(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&_e&&(e.preventDefault(),he());let t=e.target?.tagName;e.key===`/`&&t!==`INPUT`&&t!==`TEXTAREA`&&(e.preventDefault(),Re(!0))},[_e,he,U]),Be=(0,G.useCallback)(()=>{!N||!f||se(e=>[...e,{[N]:`__new_${Date.now()}`}])},[N,f]),Ve=(0,G.useCallback)(e=>{let t=xe.indexOf(e);t>=0&&E.current?.scrollTo&&E.current.scrollTo(t,0)},[xe]),He=j?I[j.rowIdx]:null,Ue=He&&N?String(He[N]??``):``,We=j?xe[j.colIdx]:null,Ge=Oe(He??null,We??null),Ke=De(We??null),qe=He&&We?He[We]:null;return O.length?(0,q.jsxs)(`div`,{ref:D,className:`flex flex-col h-full overflow-hidden relative`,tabIndex:0,onKeyDown:ze,children:[(0,q.jsx)(yc,{hasSelection:V.length>0,selectedCount:V.length,onBulkDelete:d&&N?Ie:void 0,onInsertRow:f&&N?Be:void 0,columns:O,selectedRows:V.map(e=>I[e]).filter(Boolean),connectionName:S,searchTerm:ae,onSearchChange:oe,onColumnJump:Ve,colSearchOpen:Le,onColSearchChange:Re}),o&&(0,q.jsx)(`div`,{className:`absolute inset-0 z-30 flex items-center justify-center bg-background/60`,children:(0,q.jsx)(C,{className:`size-5 animate-spin text-primary`})}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(Js,{ref:E,columns:ye,rows:I.length,getCellContent:R,getCellsForSelection:!0,onCellEdited:Se,onPaste:fe?!1:W,theme:T,freezeColumns:be,freezeTrailingRows:de,rowMarkers:N?`checkbox-visible`:`number`,gridSelection:z,onGridSelectionChange:B,onColumnResize:Ae,onHeaderMenuClick:je,onCellContextMenu:Me,getRowThemeOverride:Fe,trailingRowOptions:f&&N?{sticky:!0,tint:!0}:void 0,onRowAppended:f?Be:void 0,headerIcons:Tc,smoothScrollX:!0,smoothScrollY:!0,width:`100%`,height:`100%`})}),_e&&(0,q.jsx)(bc,{pendingCount:ve,onSave:he,onDiscard:()=>{ge(),se([])}}),H&&(0,q.jsx)(Cc,{data:H,onClose:U,onOpenInTab:Ee}),(0,q.jsx)(xc,{total:r,page:s,totalPages:Math.ceil(r/i)||1,onPageChange:c}),A&&(0,q.jsx)(gc,{colName:A.colName,bounds:A.bounds,isPinned:k.has(A.colName),filterValue:_[A.colName]??``,sortState:p===A.colName?m===`ASC`?`asc`:`desc`:null,onFilter:e=>{if(!v)return;let t={..._};e?t[A.colName]=e:delete t[A.colName],v(t)},onSort:()=>{h&&h(A.colName)},onClearSort:g,onTogglePin:()=>Ne(A.colName),onClose:()=>re(null)}),j&&He&&(0,q.jsx)(_c,{position:j.position,isPinned:ue.has(Ue),onViewRow:()=>we(j.rowIdx),onViewCell:Ge?()=>Te(j.rowIdx,j.colIdx):void 0,onPinRow:()=>Pe(j.rowIdx),onDeleteRow:()=>{N&&u&&He&&u(N,He[N])},onOpenFkTable:Ke&&qe!=null&&y?()=>ke(Ke,qe):void 0,fkLabel:Ke?`Open ${Ke.table}.${Ke.column}`:void 0,onClose:()=>ie(null)})]}):(0,q.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:o?(0,q.jsx)(C,{className:`size-4 animate-spin`}):`Select a table`})}export{Be as a,Qe as i,tt as n,ze as o,$e as r,Ec as t};
|
|
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"./vendor-ui-P9Ym7hCv.js";import{Mr as r,Vr as i,Wn as a,Yn as o,b as s,dr as c,j as l,lr as u,pr as d,un as f,xr as p,zr as m}from"./icons-CO_II6D-.js";import"./api-client-F5Zi1sR0.js";import"./settings-store-DIV25PM_.js";import{n as h}from"./utils-btZ8C8-R.js";import"./portal-container-context-NFSuymMu.js";import"./panel-store-1X6yM3XZ.js";import"./window-store-vo1N70nK.js";import{i as g}from"./project-store-CCimwgGF.js";import"./tab-store-D33icgdA.js";import"./context-menu-CH1mvCwA.js";import"./file-store-DCU7_YyB.js";import{n as _}from"./use-is-mobile-CkO33jqU.js";import"./git-repo-store-CdoOpvmf.js";import{t as v}from"./button-CsmGH5xa.js";import{a as y,n as b,o as x,t as S}from"./dialog-z8PLkL8n.js";import{t as C}from"./mobile-bottom-sheet-CLic9ovp.js";import"./use-visual-viewport-C307OVeV.js";import"./fs-api-vF_bQoeL.js";import"./ws-auth-J3hw0Mhc.js";import{at as w,cn as T,ct as E,dt as D,gn as O,it as k,ln as A,lt as j,nt as ee,ot as te,rt as M,sn as N,st as P,tt as F,ut as ne,vn as re}from"./index-CIscPw4g.js";import"./agent-session-sheet-store-BcQbnaV2.js";import"./libesm-DAF5_F99.js";import{n as I}from"./tool-cards-iJ8tyrLq.js";import"./use-blob-url-B3R1DMZ0.js";import{t as L}from"./use-websocket-Mqj27umG.js";import{t as R}from"./markdown-renderer-CjPb5pns.js";import"./run-in-terminal-B_PCeBqG.js";var z=e(t(),1),B=8e3;function ie(e,t){let[n,r]=(0,z.useState)([]),[i,a]=(0,z.useState)([]),[o,s]=(0,z.useState)(`idle`),[c,l]=(0,z.useState)({}),[u,d]=(0,z.useState)(!1),[f,p]=(0,z.useState)(!1),[m,h]=(0,z.useState)(!1),[g,_]=(0,z.useState)(null),v=(0,z.useRef)(new Map),y=(0,z.useCallback)(e=>{l(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),b=(0,z.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}switch(t.type){case`ping`:return;case`group_state`:p(!0),s(t.status),a(t.members),h(t.status===`active`);return;case`group_message`:y(t.message.fromMember),r(e=>e.some(e=>e.id===t.message.id)?e:[...e,t.message]);return;case`member_status`:a(e=>e.map(e=>e.id===t.memberId?{...e,status:t.status}:e));return;case`typing`:{l(e=>({...e,[t.member]:!0}));let e=v.current,n=e.get(t.member);n&&clearTimeout(n),e.set(t.member,setTimeout(()=>y(t.member),B));return}case`turn_done`:return;case`group_done`:h(!1),s(`idle`),l({});return;case`error`:_(t.message),h(!1);return}},[y]),{send:x}=L({url:e&&t?`/ws/project/${encodeURIComponent(t)}/group/${encodeURIComponent(e)}`:``,onMessage:b,autoConnect:!!e&&!!t});return(0,z.useEffect)(()=>{let t=!1;r([]),a([]),l({}),s(`idle`),h(!1),_(null),p(!1);for(let e of v.current.values())clearTimeout(e);if(v.current.clear(),e)return d(!0),M(e,{limit:200}).then(e=>{t||r(t=>{let n=new Set(e.messages.map(e=>e.id)),r=t.filter(e=>!n.has(e.id));return[...e.messages,...r]})}).catch(e=>{t||_(e instanceof Error?e.message:`Failed to load feed`)}).finally(()=>{t||d(!1)}),()=>{t=!0}},[e]),{messages:n,members:i,status:o,typing:c,loading:u,isConnected:f,isRunning:m,error:g,sendMessage:(0,z.useCallback)(t=>{let n=t.trim();!n||!e||(_(null),h(!0),f?x(JSON.stringify({type:`message`,content:n})):E(e,n).catch(e=>{_(e instanceof Error?e.message:`Failed to send message`),h(!1)}))},[e,f,x]),stop:(0,z.useCallback)(()=>{e&&(f?x(JSON.stringify({type:`stop`})):j(e).catch(()=>{}),s(`paused`),h(!1))},[e,f,x]),resume:(0,z.useCallback)(()=>{e&&P(e).then(()=>{s(`active`),h(!0)}).catch(e=>_(e instanceof Error?e.message:`Failed to resume`))},[e])}}var V=n();function H(e){let t=e.trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.length===1?t[0].slice(0,2).toUpperCase():(t[0][0]+t[t.length-1][0]).toUpperCase()}function U(e){try{let t=e<0xe8d4a51000?e*1e3:e;return new Date(t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}catch{return``}}function W(e,t){return e.split(/(@[\p{L}\p{N}_]+)/gu).map((e,n)=>{if(e.startsWith(`@`)&&e.length>1){let r=t(e.slice(1));return(0,V.jsx)(`span`,{className:h(`font-semibold`,!r&&`text-primary`),style:r?{color:r}:void 0,children:e},n)}return e})}var ae=(0,z.memo)(function({message:e,colorFor:t,isLeader:n,onViewFull:r}){let i=e.fromMember===`user`,a=i?`You`:e.fromMember,o=i?`var(--color-primary)`:t(e.fromMember)??`var(--accent)`,s=!i&&n(e.fromMember),c=e.summary??``,l=e.toMember&&e.toMember!==`all`?e.toMember:null,d=(0,V.jsxs)(`div`,{className:h(`group relative flex gap-2.5 px-3 py-2 transition-colors hover:bg-surface-elevated/50`,i&&`bg-primary/5`),style:{boxShadow:`inset 3px 0 0 0 ${o}`},children:[e.fullSessionRef&&(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(e),title:`View full transcript (AI's raw thinking / debug)`,"aria-label":`View full transcript`,className:`absolute right-1.5 top-1.5 hidden items-center rounded p-1 text-text-subtle/60 hover:bg-surface-elevated hover:text-text-secondary can-hover:group-hover:inline-flex`,children:(0,V.jsx)(u,{className:`size-3.5`})}),(0,V.jsx)(`div`,{className:`mt-0.5 flex size-8 shrink-0 items-center justify-center rounded-full text-[11px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:o},"aria-hidden":!0,children:H(a)}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1 can-hover:pr-6`,children:[(0,V.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-0.5`,children:[(0,V.jsx)(`span`,{className:`text-sm font-semibold`,style:{color:i?`var(--color-foreground)`:o},children:a}),s&&(0,V.jsx)(`span`,{className:`rounded bg-surface-elevated px-1.5 py-px text-[10px] font-medium text-text-secondary`,children:`leader`}),l&&(0,V.jsxs)(`span`,{className:`text-[11px] text-text-subtle`,children:[`→ `,l]}),(0,V.jsx)(`span`,{className:`text-[11px] text-text-subtle`,children:U(e.createdAt)})]}),(0,V.jsx)(`div`,{className:`mt-0.5 whitespace-pre-wrap break-words text-sm leading-relaxed text-text-secondary`,children:W(c,t)})]})]});return e.fullSessionRef?(0,V.jsxs)(N,{children:[(0,V.jsx)(O,{asChild:!0,children:d}),(0,V.jsx)(T,{children:(0,V.jsxs)(A,{onClick:()=>r(e),children:[(0,V.jsx)(u,{className:`size-4`}),` View full transcript`]})})]}):d}),G={idle:`bg-text-subtle`,working:`bg-primary animate-pulse`,done:`bg-emerald-500`,error:`bg-destructive`},K={idle:`Idle`,working:`Working`,done:`Done`,error:`Error`},q=(0,z.memo)(function({members:e,liveStatus:t,typing:n,busy:i,onAdd:o,onEdit:s,onRemove:c}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-0.5 p-2`,children:[e.map(e=>{let o=n[e.name],l=t.get(e.id)??e.status;return(0,V.jsxs)(`div`,{className:`group flex items-center gap-2 rounded-md px-2 py-1.5`,children:[(0,V.jsx)(`span`,{className:`flex size-6 shrink-0 items-center justify-center rounded-full text-[10px] font-semibold text-white ring-2 ring-background`,style:{backgroundColor:e.color??`var(--accent)`},"aria-hidden":!0,children:e.name.slice(0,1).toUpperCase()}),(0,V.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,V.jsx)(`span`,{className:`truncate text-xs font-medium`,style:{color:e.color??`var(--color-foreground)`},children:e.name}),e.role===`leader`&&(0,V.jsx)(`span`,{className:`rounded-sm bg-accent-wash px-1 text-[9px] font-semibold uppercase text-primary`,children:`lead`})]}),(0,V.jsx)(`span`,{className:`block truncate text-[10px] text-text-subtle`,children:o?`typing…`:e.persona||K[l]})]}),(0,V.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 can-hover:opacity-0 can-hover:group-hover:opacity-100`,children:[(0,V.jsx)(`button`,{type:`button`,onClick:()=>s(e),disabled:i,"aria-label":`Edit ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(a,{className:`size-3.5`})}),(0,V.jsx)(`button`,{type:`button`,onClick:()=>c(e),disabled:i,"aria-label":`Remove ${e.name}`,className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-destructive active:bg-surface-elevated disabled:opacity-40`,children:(0,V.jsx)(r,{className:`size-3.5`})})]}),(0,V.jsx)(`span`,{className:h(`size-2 shrink-0 rounded-full`,G[l]),title:K[l],"aria-hidden":!0})]},e.id)}),(0,V.jsxs)(`button`,{type:`button`,onClick:o,disabled:i,className:`mt-1 flex items-center gap-2 rounded-md px-2 py-2 text-xs font-medium text-primary hover:bg-surface-elevated active:bg-surface-elevated disabled:opacity-40`,children:[(0,V.jsx)(m,{className:`size-4`}),` Add member`]})]})}),J=`w-full min-h-[40px] rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`;function oe({open:e,member:t,projectName:n,providerId:r=`claude`,onSubmit:i,onClose:a}){let o=_(),[s,c]=(0,z.useState)(t?.name??``),[l,u]=(0,z.useState)(t?.persona??``),[d,p]=(0,z.useState)(t?.model??null),[m,h]=(0,z.useState)(t?.role===`leader`),[g,w]=(0,z.useState)(!1),[T,E]=(0,z.useState)(null),D=(0,z.useCallback)(async()=>{let e=s.trim();if(!e){E(`Name is required`);return}w(!0),E(null);try{await i({name:e,persona:l.trim()||null,model:d,role:m?`leader`:`member`}),a()}catch(e){E(e instanceof Error?e.message:`Failed to save member`),w(!1)}},[s,l,d,m,i,a]),O=t?.role===`leader`,k=(0,V.jsxs)(`div`,{className:`flex flex-col gap-3 px-1 py-1`,children:[(0,V.jsx)(`input`,{className:J,value:s,onChange:e=>c(e.target.value),placeholder:`Member name`,autoFocus:!0}),(0,V.jsx)(`input`,{className:J,value:l,onChange:e=>u(e.target.value),placeholder:`Persona (optional)`}),(0,V.jsx)(F,{value:d,onChange:p,projectName:n,providerId:r}),(0,V.jsxs)(`label`,{className:Y(O),children:[(0,V.jsx)(`input`,{type:`checkbox`,className:`size-4 accent-[var(--color-primary)]`,checked:m,disabled:O,onChange:e=>h(e.target.checked)}),(0,V.jsx)(`span`,{children:O?`Leader (reassign from another member)`:`Set as leader`})]}),T&&(0,V.jsx)(`p`,{className:`text-xs text-destructive`,children:T}),(0,V.jsxs)(`div`,{className:`flex justify-end gap-2 pt-1`,children:[(0,V.jsx)(v,{variant:`outline`,onClick:a,disabled:g,children:`Cancel`}),(0,V.jsxs)(v,{onClick:D,disabled:g,children:[g&&(0,V.jsx)(f,{className:`mr-1.5 size-4 animate-spin`}),t?`Save`:`Add member`]})]})]});if(!e)return null;let A=t?`Edit member`:`Add member`;return o?(0,V.jsx)(C,{open:!0,onClose:a,className:`flex max-h-[90vh] flex-col`,children:(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-col px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-base font-semibold text-foreground`,children:A}),k]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||a()},children:(0,V.jsxs)(b,{className:`flex flex-col sm:max-w-md`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{children:A})}),k]})})}function Y(e){return`flex items-center gap-2 text-sm text-text-secondary ${e?`opacity-60`:``}`}function X({messages:e,config:t,projectName:n}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[t&&(0,V.jsx)(le,{config:t}),e.map(e=>(0,V.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,V.jsx)(`span`,{className:`text-[10px] font-semibold uppercase tracking-wide text-text-subtle`,children:e.role===`user`?`User`:e.role===`assistant`?`Assistant`:e.role}),(0,V.jsx)(se,{message:e,projectName:n})]},e.id)),e.length===0&&(0,V.jsx)(`p`,{className:`py-6 text-center text-sm text-text-subtle`,children:`Transcript is empty.`})]})}function se({message:e,projectName:t}){let n=e.events??[];if(n.length===0)return e.content.trim()?(0,V.jsx)(R,{content:e.content}):null;let r=new Map;for(let e of n)e.type===`tool_result`&&e.toolUseId&&r.set(e.toolUseId,e);return(0,V.jsx)(`div`,{className:`flex flex-col gap-2`,children:n.map((e,n)=>{if(e.type===`text`)return e.content.trim()?(0,V.jsx)(R,{content:e.content},n):null;if(e.type===`thinking`)return(0,V.jsx)(ce,{content:e.content},n);if(e.type===`tool_use`){let i=e.toolUseId?r.get(e.toolUseId):void 0;return(0,V.jsx)(I,{tool:e,result:i,completed:!!i,projectName:t},n)}return null})})}function ce({content:e}){let[t,n]=(0,z.useState)(!1);return(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs text-text-subtle hover:text-text-secondary`,children:[(0,V.jsx)(l,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(s,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Thinking`})]}),t&&(0,V.jsx)(`div`,{className:`border-t border-border px-3 py-2 text-xs leading-relaxed text-text-secondary`,children:(0,V.jsx)(R,{content:e})})]})}function le({config:e}){let[t,n]=(0,z.useState)(!1),r=[[`Model`,e.model],[`Permission`,e.permissionMode],[`CWD`,e.cwd],[`Git branch`,e.gitBranch],[`CLI version`,e.version]].filter(([,e])=>e);return r.length===0?null:(0,V.jsxs)(`div`,{className:`rounded-md border border-border bg-surface-elevated/40`,children:[(0,V.jsxs)(`button`,{type:`button`,onClick:()=>n(e=>!e),className:`flex w-full items-center gap-1.5 px-2.5 py-1.5 text-xs font-medium text-text-secondary hover:text-foreground`,children:[(0,V.jsx)(l,{className:h(`size-3.5 transition-transform`,t&&`rotate-90`)}),(0,V.jsx)(d,{className:`size-3.5`}),(0,V.jsx)(`span`,{children:`Input config`})]}),t&&(0,V.jsx)(`dl`,{className:`grid grid-cols-[auto_1fr] gap-x-3 gap-y-1 border-t border-border px-3 py-2 text-xs`,children:r.map(([e,t])=>(0,V.jsxs)(`div`,{className:`contents`,children:[(0,V.jsx)(`dt`,{className:`text-text-subtle`,children:e}),(0,V.jsx)(`dd`,{className:`break-all font-mono text-text-secondary`,children:t})]},e))})]})}function ue({groupId:e,message:t,onClose:n}){let r=_(),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1),[c,l]=(0,z.useState)(null),u=t?.fullSessionRef??null;if((0,z.useEffect)(()=>{if(!t||!u)return;let n=!1;return a(null),l(null),s(!0),w(e,u).then(e=>{n||a(e)}).catch(e=>{n||l(e instanceof Error?e.message:`Failed to load transcript`)}).finally(()=>{n||s(!1)}),()=>{n=!0}},[e,u,t]),!t)return null;let d=(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[o&&(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(f,{className:`size-5 animate-spin text-primary`})}),c&&(0,V.jsxs)(`div`,{className:`px-1 py-4 text-sm text-text-secondary`,children:[(0,V.jsx)(`p`,{className:`mb-2 font-medium text-foreground`,children:`Full transcript unavailable`}),(0,V.jsx)(`p`,{className:`text-xs text-text-subtle`,children:c}),t.summary&&(0,V.jsx)(`pre`,{className:`mt-4 whitespace-pre-wrap break-words rounded-md bg-surface-elevated p-3 text-xs leading-relaxed text-text-secondary`,children:t.summary})]}),!o&&!c&&i!=null&&(0,V.jsx)(`div`,{className:`px-1 py-1`,children:(0,V.jsx)(X,{messages:i.messages,config:i.config})})]}),p=`${t.fromMember} — full transcript`;return r?(0,V.jsx)(C,{open:!0,onClose:n,className:`max-h-[85vh] flex flex-col`,children:(0,V.jsxs)(`div`,{className:`flex flex-col min-h-0 px-4 pb-2`,children:[(0,V.jsx)(`h2`,{className:`mb-2 text-sm font-semibold text-foreground`,children:p}),d]})}):(0,V.jsx)(S,{open:!0,onOpenChange:e=>{e||n()},children:(0,V.jsxs)(b,{className:`flex max-h-[80vh] flex-col sm:max-w-2xl`,children:[(0,V.jsx)(y,{children:(0,V.jsx)(x,{className:`text-sm`,children:p})}),d]})})}function Z({metadata:e}){let t=e?.groupId??null,{activeProject:n}=g(re(e=>({activeProject:e.activeProject}))),r=e?.projectName??n?.name??``,a=_(),{messages:s,members:l,status:u,typing:d,loading:m,isRunning:y,error:b,sendMessage:x,stop:S,resume:w}=ie(t,r),[T,E]=(0,z.useState)(``),[O,A]=(0,z.useState)(null),[j,M]=(0,z.useState)(!1),N=(0,z.useRef)(null),[P,F]=(0,z.useState)([]),[I,L]=(0,z.useState)(null),[R,B]=(0,z.useState)(!1),[H,U]=(0,z.useState)(null),[W,G]=(0,z.useState)(null),K=(0,z.useCallback)(async()=>{if(t)try{let e=await k(t);F(e.members),L(e.maxTurns)}catch{}},[t]),J=(0,z.useCallback)(async e=>{if(!t)return;let n=Math.max(1,Math.min(50,Math.floor(e)||1));L(n);try{await D(t,{maxTurns:n})}catch{K()}},[t,K]);(0,z.useEffect)(()=>{F([]),K()},[t,K]),(0,z.useEffect)(()=>{N.current?.scrollIntoView({block:`end`})},[s.length,d]);let Y=(0,z.useMemo)(()=>new Map(l.map(e=>[e.id,e.status])),[l]),X=P.length?P:l,se=(0,z.useMemo)(()=>{let e=new Map(X.map(e=>[e.name,e.color]));return t=>e.get(t)??null},[X]),ce=(0,z.useMemo)(()=>{let e=new Set(X.filter(e=>e.role===`leader`).map(e=>e.name));return t=>e.has(t)},[X]),le=(0,z.useCallback)(async e=>{t&&(W?.member?await ne(t,W.member.id,e):await ee(t,e),await K())},[t,W,K]),Z=(0,z.useCallback)(async e=>{if(t){B(!0),U(null);try{await te(t,e.id),await K()}catch(e){U(e instanceof Error?e.message:`Failed to remove member`)}finally{B(!1)}}},[t,K]),Q=(0,z.useCallback)(()=>{let e=T.trim();e&&(x(e),E(``))},[T,x]),$=Object.keys(d).filter(e=>d[e]);return t?(0,V.jsxs)(`div`,{className:`flex h-full min-h-0`,children:[(0,V.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,V.jsxs)(`div`,{className:`flex h-11 shrink-0 items-center justify-between border-b border-border px-3`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-foreground`,children:[(0,V.jsx)(`span`,{className:h(`size-2 rounded-full`,u===`active`?`bg-primary animate-pulse`:u===`paused`?`bg-amber-500`:`bg-text-subtle`)}),(0,V.jsx)(`span`,{className:`capitalize`,children:u})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[y?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:S,className:`h-8`,children:[(0,V.jsx)(p,{className:`mr-1 size-3.5`}),` Stop`]}):u===`paused`?(0,V.jsxs)(v,{size:`sm`,variant:`outline`,onClick:w,className:`h-8`,children:[(0,V.jsx)(o,{className:`mr-1 size-3.5`}),` Resume`]}):null,(0,V.jsx)(`button`,{type:`button`,onClick:()=>M(e=>!e),className:`flex size-8 items-center justify-center rounded-md text-text-subtle hover:bg-surface-elevated hover:text-foreground`,"aria-label":`Toggle roster`,children:(0,V.jsx)(i,{className:`size-4`})})]})]}),(0,V.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:m?(0,V.jsx)(`div`,{className:`flex items-center justify-center py-10`,children:(0,V.jsx)(f,{className:`size-5 animate-spin text-primary`})}):s.length===0?(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-center text-sm text-text-subtle`,children:`Send a message to start the group.`}):(0,V.jsxs)(`div`,{className:`flex flex-col py-2`,children:[s.map(e=>(0,V.jsx)(ae,{message:e,colorFor:se,isLeader:ce,onViewFull:A},e.id)),$.length>0&&(0,V.jsxs)(`div`,{className:`px-3 py-1.5 text-xs italic text-text-subtle`,children:[$.join(`, `),` `,$.length===1?`is`:`are`,` typing…`]}),(0,V.jsx)(`div`,{ref:N})]})}),b&&(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border bg-destructive/10 px-3 py-2 text-xs text-destructive`,children:b}),(0,V.jsx)(`div`,{className:`shrink-0 border-t border-border p-2`,children:(0,V.jsxs)(`div`,{className:`flex items-end gap-2`,children:[(0,V.jsx)(`textarea`,{value:T,onChange:e=>E(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!a&&(e.preventDefault(),Q())},rows:1,placeholder:`Message the group…`,className:`max-h-32 min-h-[44px] flex-1 resize-none rounded-md border border-border bg-background px-3 py-2.5 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary`}),(0,V.jsx)(v,{onClick:Q,disabled:!T.trim(),className:`size-11 shrink-0 p-0`,"aria-label":`Send`,children:(0,V.jsx)(c,{className:`size-4`})})]})})]}),a?(0,V.jsxs)(C,{open:j,onClose:()=>M(!1),className:`flex max-h-[72vh] flex-col`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center px-4 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-4 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:d,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}):j&&(0,V.jsxs)(`div`,{className:`flex w-60 shrink-0 flex-col border-l border-border bg-panel`,children:[(0,V.jsx)(`div`,{className:`flex h-11 shrink-0 items-center border-b border-border px-3 text-sm font-medium text-foreground`,children:`Members`}),(0,V.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[I!==null&&(0,V.jsxs)(`label`,{className:`flex items-center gap-2 px-3 py-2 text-xs text-text-secondary`,children:[(0,V.jsx)(`span`,{children:`Reply cap`}),(0,V.jsx)(`input`,{type:`number`,min:1,max:50,value:I,onChange:e=>J(Number(e.target.value)),className:`w-14 rounded border border-border bg-background px-1.5 py-1 text-xs text-foreground`}),(0,V.jsx)(`span`,{className:`text-text-subtle`,children:`turns/msg`})]}),H&&(0,V.jsx)(`p`,{className:`px-3 py-1 text-xs text-destructive`,children:H}),(0,V.jsx)(q,{members:P,liveStatus:Y,typing:d,busy:R,onAdd:()=>G({member:null}),onEdit:e=>G({member:e}),onRemove:Z})]})]}),W&&(0,V.jsx)(oe,{open:!0,member:W.member,projectName:r,onSubmit:le,onClose:()=>G(null)},W.member?.id??`add`),(0,V.jsx)(ue,{groupId:t,message:O,onClose:()=>A(null)})]}):(0,V.jsx)(`div`,{className:`flex h-full items-center justify-center p-4 text-sm text-text-subtle`,children:`No group selected.`})}export{Z as GroupChatTab};
|
|
Binary file
|
|
Binary file
|