@hienlh/ppm 0.23.26 → 0.23.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/accounts-settings-section-CZglHifc.js +1 -0
- package/dist/web/assets/accounts-settings-section-CZglHifc.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-CZglHifc.js.gz +0 -0
- package/dist/web/assets/{agent-session-sheet-DmbSfFGz.js → agent-session-sheet-B3VLD2H6.js} +2 -2
- package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-B3VLD2H6.js.gz +0 -0
- package/dist/web/assets/{agent-session-window-content-Dk8x3ozF.js → agent-session-window-content-HEdIT_LQ.js} +1 -1
- package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-HEdIT_LQ.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-MKwjYcDh.js → ai-resource-editor-CFbXgGMo.js} +1 -1
- package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-CFbXgGMo.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js +1 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js.br +0 -0
- package/dist/web/assets/ai-settings-section-BNiVD9D3.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-OZOaLw5z.js → ai-settings-section-W0kfADRB.js} +1 -1
- package/dist/web/assets/{android-tab-CUkjbfyi.js → android-tab-CY3aa_vU.js} +1 -1
- package/dist/web/assets/android-tab-CY3aa_vU.js.br +0 -0
- package/dist/web/assets/android-tab-CY3aa_vU.js.gz +0 -0
- package/dist/web/assets/{appearance-settings-section-BZsM8HpZ.js → appearance-settings-section-lbtuzecW.js} +1 -1
- package/dist/web/assets/appearance-settings-section-lbtuzecW.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-lbtuzecW.js.gz +0 -0
- package/dist/web/assets/{apps-panel-Cs3utBlp.js → apps-panel-CF2mbvVq.js} +1 -1
- package/dist/web/assets/apps-panel-CF2mbvVq.js.br +0 -0
- package/dist/web/assets/apps-panel-CF2mbvVq.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js +1 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js.br +0 -0
- package/dist/web/assets/branch-review-tab-CR7JnS5x.js.gz +0 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js +1 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js.br +0 -0
- package/dist/web/assets/chat-tab-BCELq4nK.js.gz +0 -0
- package/dist/web/assets/{chat-tab-DtSHSfMU.js → chat-tab-C4aOYSea.js} +10 -10
- package/dist/web/assets/chat-tab-C4aOYSea.js.br +0 -0
- package/dist/web/assets/chat-tab-C4aOYSea.js.gz +0 -0
- package/dist/web/assets/{code-editor-DjDyhff1.js → code-editor-_axJbYkP.js} +5 -5
- package/dist/web/assets/code-editor-_axJbYkP.js.br +0 -0
- package/dist/web/assets/code-editor-_axJbYkP.js.gz +0 -0
- package/dist/web/assets/{codex-reset-credit-button-BKgiUi8E.js → codex-reset-credit-button-DJQD6NUF.js} +1 -1
- package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DJQD6NUF.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-DgTv-8pb.js → conflict-editor-D0AYuLKI.js} +3 -3
- package/dist/web/assets/conflict-editor-D0AYuLKI.js.br +0 -0
- package/dist/web/assets/conflict-editor-D0AYuLKI.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js +4 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js.br +0 -0
- package/dist/web/assets/connection-form-tab-C3QyUWnE.js.gz +0 -0
- package/dist/web/assets/{csv-preview-BTGpYs4p.js → csv-preview-CmKkcz4M.js} +1 -1
- package/dist/web/assets/csv-preview-CmKkcz4M.js.br +0 -0
- package/dist/web/assets/csv-preview-CmKkcz4M.js.gz +0 -0
- package/dist/web/assets/{db-explorer-store-DDePT3UI.js → db-explorer-store-DJNNIfN5.js} +1 -1
- package/dist/web/assets/db-explorer-store-DJNNIfN5.js.br +0 -0
- package/dist/web/assets/db-explorer-store-DJNNIfN5.js.gz +0 -0
- package/dist/web/assets/{db-sidebar-reveal-BeT8cp6P.js → db-sidebar-reveal-CGqWBYay.js} +1 -1
- package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-CGqWBYay.js.gz +0 -0
- package/dist/web/assets/{db-tab-parts-BYzd4_sR.js → db-tab-parts-BXL34wrZ.js} +1 -1
- package/dist/web/assets/db-tab-parts-BXL34wrZ.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BXL34wrZ.js.gz +0 -0
- package/dist/web/assets/{design-settings-section-B3KQBggK.js → design-settings-section-DukfVtwP.js} +2 -2
- package/dist/web/assets/design-settings-section-DukfVtwP.js.br +0 -0
- package/dist/web/assets/design-settings-section-DukfVtwP.js.gz +0 -0
- package/dist/web/assets/{design-tab-CPyj_nFg.js → design-tab-BoPiL2ge.js} +5 -5
- package/dist/web/assets/design-tab-BoPiL2ge.js.br +0 -0
- package/dist/web/assets/design-tab-BoPiL2ge.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-DIGPFo2l.js → designs-sidebar-panel-BVTqPPzG.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-BVTqPPzG.js.gz +0 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js +4 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js.br +0 -0
- package/dist/web/assets/diff-viewer-C86mR7vD.js.gz +0 -0
- package/dist/web/assets/{docx-preview-CowHGqML.js → docx-preview-B9EhDCMi.js} +1 -1
- package/dist/web/assets/docx-preview-B9EhDCMi.js.br +0 -0
- package/dist/web/assets/docx-preview-B9EhDCMi.js.gz +0 -0
- package/dist/web/assets/{editor-dialog-xPoehDYp.js → editor-dialog-DTDsbJd6.js} +1 -1
- package/dist/web/assets/editor-dialog-DTDsbJd6.js.br +0 -0
- package/dist/web/assets/editor-dialog-DTDsbJd6.js.gz +0 -0
- package/dist/web/assets/{editor-language-service-DdYqCDBU.js → editor-language-service-BtrrQAS2.js} +1 -1
- package/dist/web/assets/editor-language-service-BtrrQAS2.js.br +0 -0
- package/dist/web/assets/editor-language-service-BtrrQAS2.js.gz +0 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js +2 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js.br +0 -0
- package/dist/web/assets/explorer-body-DLaWmxri.js.gz +0 -0
- package/dist/web/assets/{explorer-model-tGyFETP_.js → explorer-model-f5q-50DN.js} +1 -1
- package/dist/web/assets/explorer-model-f5q-50DN.js.br +0 -0
- package/dist/web/assets/explorer-model-f5q-50DN.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-B1c4QTVL.js → explorer-window-content-CbUIbrzL.js} +1 -1
- package/dist/web/assets/explorer-window-content-CbUIbrzL.js.br +0 -0
- package/dist/web/assets/explorer-window-content-CbUIbrzL.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-BgL0Uyl3.js → extension-manager-section-BpKMyLwI.js} +1 -1
- package/dist/web/assets/extension-manager-section-BpKMyLwI.js.br +0 -0
- package/dist/web/assets/extension-manager-section-BpKMyLwI.js.gz +0 -0
- package/dist/web/assets/{extension-webview-BWB1Yd-t.js → extension-webview-BGfyaXMI.js} +1 -1
- package/dist/web/assets/extension-webview-BGfyaXMI.js.br +0 -0
- package/dist/web/assets/extension-webview-BGfyaXMI.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-TmoewoO2.js → files-settings-section-CQT9_rX2.js} +1 -1
- package/dist/web/assets/files-settings-section-CQT9_rX2.js.br +0 -0
- package/dist/web/assets/files-settings-section-CQT9_rX2.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-Bu7o8uUn.js → general-settings-section-BoQGeqBi.js} +1 -1
- package/dist/web/assets/general-settings-section-BoQGeqBi.js.br +0 -0
- package/dist/web/assets/general-settings-section-BoQGeqBi.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-RjMZIaCk.js → git-log-panel-T8Fzn8-5.js} +1 -1
- package/dist/web/assets/git-log-panel-T8Fzn8-5.js.br +0 -0
- package/dist/web/assets/git-log-panel-T8Fzn8-5.js.gz +0 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js +3 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js.br +0 -0
- package/dist/web/assets/git-review-tab-WzuX4Ml9.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-DqlTFhhf.js → glide-data-grid-BBzGDYvj.js} +8 -8
- package/dist/web/assets/glide-data-grid-BBzGDYvj.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BBzGDYvj.js.gz +0 -0
- package/dist/web/assets/{grid-save-dialog-BmF2Gy_E.js → grid-save-dialog-HiqlnSky.js} +1 -1
- package/dist/web/assets/grid-save-dialog-HiqlnSky.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-HiqlnSky.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js +1 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js.br +0 -0
- package/dist/web/assets/group-chat-tab-URU3FCLs.js.gz +0 -0
- package/dist/web/assets/{impexp-tab-B8d4oBOB.js → impexp-tab-B0m1Q8ia.js} +1 -1
- package/dist/web/assets/impexp-tab-B0m1Q8ia.js.br +0 -0
- package/dist/web/assets/impexp-tab-B0m1Q8ia.js.gz +0 -0
- package/dist/web/assets/index-Cb3Z6wNy.css +1 -0
- package/dist/web/assets/index-Cb3Z6wNy.css.br +0 -0
- package/dist/web/assets/{index-2_Pz5MiI.css.gz → index-Cb3Z6wNy.css.gz} +0 -0
- package/dist/web/assets/{index-Cx9ZRibz.js → index-Vd9Xr54k.js} +19 -19
- package/dist/web/assets/index-Vd9Xr54k.js.br +0 -0
- package/dist/web/assets/index-Vd9Xr54k.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-LGTWVN87.js → jira-watcher-section-CnSTbAF6.js} +1 -1
- package/dist/web/assets/keybindings-store-D_U8jECl.js +1 -0
- package/dist/web/assets/{keyboard-shortcuts-section-BSMgmbOR.js → keyboard-shortcuts-section-CU7JjDsU.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CU7JjDsU.js.gz +0 -0
- package/dist/web/assets/{language-servers-section-DO9wnwnG.js → language-servers-section-CzUG9H69.js} +2 -2
- package/dist/web/assets/language-servers-section-CzUG9H69.js.br +0 -0
- package/dist/web/assets/language-servers-section-CzUG9H69.js.gz +0 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js +13 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js.br +0 -0
- package/dist/web/assets/logs-app-CDSvyY1H.js.gz +0 -0
- package/dist/web/assets/logs-tab-CQw9vrNw.js +1 -0
- package/dist/web/assets/{logs-window-content-Cejko0VD.js → logs-window-content-CGvPnPrr.js} +1 -1
- package/dist/web/assets/{lsp-client-IsC8Ol0U.js → lsp-client-CpjPUUYJ.js} +1 -1
- package/dist/web/assets/lsp-client-CpjPUUYJ.js.br +0 -0
- package/dist/web/assets/lsp-client-CpjPUUYJ.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-D5vxN2fO.js → markdown-renderer-3ZR2x0CC.js} +1 -1
- package/dist/web/assets/{markdown-renderer-BfZiHaNy.js → markdown-renderer-DZNMRg6p.js} +2 -2
- package/dist/web/assets/markdown-renderer-DZNMRg6p.js.br +0 -0
- package/dist/web/assets/markdown-renderer-DZNMRg6p.js.gz +0 -0
- package/dist/web/assets/{mobile-explorer-sheet-Dz3eJdBl.js → mobile-explorer-sheet-D7e-MM6m.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-D7e-MM6m.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-B8zeJoJQ.js → new-design-dialog-BthM423i.js} +1 -1
- package/dist/web/assets/new-design-dialog-BthM423i.js.br +0 -0
- package/dist/web/assets/new-design-dialog-BthM423i.js.gz +0 -0
- package/dist/web/assets/notification-store-GKweleCQ.js +1 -0
- package/dist/web/assets/{notifications-settings-section-CMZXQw72.js → notifications-settings-section-TS3gNFcc.js} +1 -1
- package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-TS3gNFcc.js.gz +0 -0
- package/dist/web/assets/{open-db-tabs-DYTZbguT.js → open-db-tabs-DBgV2hbA.js} +1 -1
- package/dist/web/assets/open-db-tabs-DBgV2hbA.js.br +0 -0
- package/dist/web/assets/open-db-tabs-DBgV2hbA.js.gz +0 -0
- package/dist/web/assets/{open-settings-BGtoVEAU.js → open-settings-DWbF5YsE.js} +1 -1
- package/dist/web/assets/{overview-panel-7_8b6pwr.js → overview-panel-C5EmTk1R.js} +1 -1
- package/dist/web/assets/overview-panel-C5EmTk1R.js.br +0 -0
- package/dist/web/assets/overview-panel-C5EmTk1R.js.gz +0 -0
- package/dist/web/assets/{panel-store-Dx2ziBLp.js → panel-store-H7e9XHZF.js} +1 -1
- package/dist/web/assets/panel-store-H7e9XHZF.js.br +0 -0
- package/dist/web/assets/panel-store-H7e9XHZF.js.gz +0 -0
- package/dist/web/assets/{patch-tab-metadata-DTbCkVvx.js → patch-tab-metadata-DqvfqUI4.js} +1 -1
- package/dist/web/assets/{performance-panel-COQNCyEU.js → performance-panel-Jwab-_Z2.js} +1 -1
- package/dist/web/assets/performance-panel-Jwab-_Z2.js.br +0 -0
- package/dist/web/assets/performance-panel-Jwab-_Z2.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-CmhbbZVI.js → ppmbot-settings-section-D8jIlmp8.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-D8jIlmp8.js.gz +0 -0
- package/dist/web/assets/{pptx-export-COeBmnFJ.js → pptx-export-gXOWUZXL.js} +3 -3
- package/dist/web/assets/pptx-export-gXOWUZXL.js.br +0 -0
- package/dist/web/assets/pptx-export-gXOWUZXL.js.gz +0 -0
- package/dist/web/assets/{problems-panel-I0EYfa1S.js → problems-panel-DjCHA1r5.js} +1 -1
- package/dist/web/assets/problems-panel-DjCHA1r5.js.br +0 -0
- package/dist/web/assets/problems-panel-DjCHA1r5.js.gz +0 -0
- package/dist/web/assets/{process-table-or-X8Lwh.js → process-table-BxXEh4tN.js} +1 -1
- package/dist/web/assets/process-table-BxXEh4tN.js.br +0 -0
- package/dist/web/assets/process-table-BxXEh4tN.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-DpJ6ok4C.js → proxy-settings-section-B8igco2L.js} +1 -1
- package/dist/web/assets/proxy-settings-section-B8igco2L.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-B8igco2L.js.gz +0 -0
- package/dist/web/assets/{query-tab-DeNZMZHX.js → query-tab-DHU3ANHN.js} +3 -3
- package/dist/web/assets/query-tab-DHU3ANHN.js.br +0 -0
- package/dist/web/assets/query-tab-DHU3ANHN.js.gz +0 -0
- package/dist/web/assets/release-notes-window-content-B33RDfFY.js +1 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js +1 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-CoYQTFKd.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-CGDBpXMf.js → remote-desktop-clipboard-notice-Dwn-iV4g.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-Dwn-iV4g.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-sheet-6nXirdqZ.js → remote-desktop-mobile-sheet-bfKiSG0C.js} +2 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-bfKiSG0C.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-BTaj9Flo.js → remote-desktop-mobile-view-CV8eHh4A.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CV8eHh4A.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate--gtmfqZh.js → remote-desktop-readiness-gate-DrSYb_9z.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DrSYb_9z.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-settings-section-Bs5avYaS.js → remote-desktop-settings-section-DRO8n8t7.js} +1 -1
- package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-DRO8n8t7.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-window-content-D4CM-28B.js → remote-desktop-window-content-CAuxeGbK.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-CAuxeGbK.js.gz +0 -0
- package/dist/web/assets/{rename-object-dialog-Dv4iLwnf.js → rename-object-dialog-BPuh3dAH.js} +1 -1
- package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-BPuh3dAH.js.gz +0 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js +1 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js.br +0 -0
- package/dist/web/assets/review-address-setup-CoI2BGdx.js.gz +0 -0
- package/dist/web/assets/{review-code-Bet53hHb.js → review-code-Dy8y4_17.js} +1 -1
- package/dist/web/assets/review-code-Dy8y4_17.js.br +0 -0
- package/dist/web/assets/review-code-Dy8y4_17.js.gz +0 -0
- package/dist/web/assets/{run-in-terminal-EVMb5TjW.js → run-in-terminal-DAdjH24K.js} +1 -1
- package/dist/web/assets/{run-in-terminal-button-CsYq6Xqo.js → run-in-terminal-button-Bu165IH-.js} +1 -1
- package/dist/web/assets/{save-as-dialog-DHkBsS-6.js → save-as-dialog-C9OpJz2x.js} +1 -1
- package/dist/web/assets/save-as-dialog-C9OpJz2x.js.br +0 -0
- package/dist/web/assets/save-as-dialog-C9OpJz2x.js.gz +0 -0
- package/dist/web/assets/{schedule-script-editor-CKUl2qxf.js → schedule-script-editor--roOsFbc.js} +1 -1
- package/dist/web/assets/schedule-script-editor--roOsFbc.js.br +0 -0
- package/dist/web/assets/schedule-script-editor--roOsFbc.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-EoOXzqF3.js → schedules-settings-section-BTn_NSzU.js} +3 -3
- package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BTn_NSzU.js.gz +0 -0
- package/dist/web/assets/{send-to-chat-B7oUVcgh.js → send-to-chat-BUxj21hD.js} +1 -1
- package/dist/web/assets/send-to-chat-BUxj21hD.js.br +0 -0
- package/dist/web/assets/send-to-chat-BUxj21hD.js.gz +0 -0
- package/dist/web/assets/{services-panel-BceuL_SU.js → services-panel-BynENSs6.js} +1 -1
- package/dist/web/assets/services-panel-BynENSs6.js.br +0 -0
- package/dist/web/assets/services-panel-BynENSs6.js.gz +0 -0
- package/dist/web/assets/{session-changes-bar-CjSxBYOF.js → session-changes-bar-Dz3QitdJ.js} +1 -1
- package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.br +0 -0
- package/dist/web/assets/session-changes-bar-Dz3QitdJ.js.gz +0 -0
- package/dist/web/assets/{session-review-tab-yIQFGJbG.js → session-review-tab-fRzyogNH.js} +1 -1
- package/dist/web/assets/session-review-tab-fRzyogNH.js.br +0 -0
- package/dist/web/assets/session-review-tab-fRzyogNH.js.gz +0 -0
- package/dist/web/assets/{settings-body-DXNcpoqY.js → settings-body-D5pmlFft.js} +1 -1
- package/dist/web/assets/settings-body-D5pmlFft.js.br +0 -0
- package/dist/web/assets/settings-body-D5pmlFft.js.gz +0 -0
- package/dist/web/assets/{settings-rows-DgL7oTg8.js → settings-rows-VtjChFlm.js} +1 -1
- package/dist/web/assets/settings-rows-VtjChFlm.js.br +0 -0
- package/dist/web/assets/settings-rows-VtjChFlm.js.gz +0 -0
- package/dist/web/assets/{settings-section-content-DFLjO2le.js → settings-section-content-BOwSlBkZ.js} +2 -2
- package/dist/web/assets/settings-section-content-BOwSlBkZ.js.br +0 -0
- package/dist/web/assets/settings-section-content-BOwSlBkZ.js.gz +0 -0
- package/dist/web/assets/{settings-section-content-B1eU_yR4.js → settings-section-content-Ck39TJA7.js} +1 -1
- package/dist/web/assets/{settings-store-CBJCnE5L.js → settings-store-CMpVMq3Y.js} +2 -2
- package/dist/web/assets/settings-store-CMpVMq3Y.js.br +0 -0
- package/dist/web/assets/settings-store-CMpVMq3Y.js.gz +0 -0
- package/dist/web/assets/settings-tab-A81xb81d.js +1 -0
- package/dist/web/assets/settings-window-content-BCDRi6xS.js +1 -0
- package/dist/web/assets/{slash-command-picker-qb3fZ7RP.js → slash-command-picker-BKeEykkF.js} +1 -1
- package/dist/web/assets/slash-command-picker-BKeEykkF.js.br +0 -0
- package/dist/web/assets/slash-command-picker-BKeEykkF.js.gz +0 -0
- package/dist/web/assets/{sql-object-tab-B6JtYu9P.js → sql-object-tab-I5bl3DVf.js} +1 -1
- package/dist/web/assets/sql-object-tab-I5bl3DVf.js.br +0 -0
- package/dist/web/assets/sql-object-tab-I5bl3DVf.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-bdNkUymy.js → sqlite-viewer-ECCCjxdn.js} +1 -1
- package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-ECCCjxdn.js.gz +0 -0
- package/dist/web/assets/{structure-save-dialog-5SfYdbAB.js → structure-save-dialog-DcQdamD3.js} +1 -1
- package/dist/web/assets/structure-save-dialog-DcQdamD3.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-DcQdamD3.js.gz +0 -0
- package/dist/web/assets/{structure-tab-DYjjcLIU.js → structure-tab-DyQGhf9t.js} +2 -2
- package/dist/web/assets/structure-tab-DyQGhf9t.js.br +0 -0
- package/dist/web/assets/structure-tab-DyQGhf9t.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-DouL7ajt.js → system-monitor-body-B5AvRT5J.js} +2 -2
- package/dist/web/assets/system-monitor-body-B5AvRT5J.js.br +0 -0
- package/dist/web/assets/system-monitor-body-B5AvRT5J.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-CfwHKQ5k.js +1 -0
- package/dist/web/assets/{system-monitor-window-content-DUCaJME1.js → system-monitor-window-content-Cvx1V8Mf.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-CQ5NiV6Y.js → tab-host-window-content-DqOUHxEL.js} +1 -1
- package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-DqOUHxEL.js.gz +0 -0
- package/dist/web/assets/{tab-store-B4v2kAEY.js → tab-store-NUmgzMPf.js} +1 -1
- package/dist/web/assets/table-tab-dI8rBbCS.js +2 -0
- package/dist/web/assets/table-tab-dI8rBbCS.js.br +0 -0
- package/dist/web/assets/table-tab-dI8rBbCS.js.gz +0 -0
- package/dist/web/assets/{telegram-bot-token-field-CqVIuWP1.js → telegram-bot-token-field-DSLtG8vw.js} +1 -1
- package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-DSLtG8vw.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-DT0MN_Qn.js → terminal-tab-CDg0AHBK.js} +2 -2
- package/dist/web/assets/terminal-tab-CDg0AHBK.js.br +0 -0
- package/dist/web/assets/terminal-tab-CDg0AHBK.js.gz +0 -0
- package/dist/web/assets/{tool-cards-C2YGSKRm.js → tool-cards-7E0jtwP0.js} +5 -5
- package/dist/web/assets/tool-cards-7E0jtwP0.js.br +0 -0
- package/dist/web/assets/tool-cards-7E0jtwP0.js.gz +0 -0
- package/dist/web/assets/{tools-settings-section-DQXIdF8O.js → tools-settings-section-AChVQJyU.js} +1 -1
- package/dist/web/assets/tools-settings-section-AChVQJyU.js.br +0 -0
- package/dist/web/assets/tools-settings-section-AChVQJyU.js.gz +0 -0
- package/dist/web/assets/{use-db-read-BByB906L.js → use-db-read-DgNa66Yo.js} +1 -1
- package/dist/web/assets/use-db-read-DgNa66Yo.js.br +0 -0
- package/dist/web/assets/use-db-read-DgNa66Yo.js.gz +0 -0
- package/dist/web/assets/{use-db-tab-Dc0QSFyM.js → use-db-tab-OGLoicCd.js} +1 -1
- package/dist/web/assets/use-db-tab-OGLoicCd.js.br +0 -0
- package/dist/web/assets/use-db-tab-OGLoicCd.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-B9M-hADX.js → use-inline-blame-BvlcOQd9.js} +3 -3
- package/dist/web/assets/use-inline-blame-BvlcOQd9.js.br +0 -0
- package/dist/web/assets/use-inline-blame-BvlcOQd9.js.gz +0 -0
- package/dist/web/assets/{use-lsp-DcGiCpl9.js → use-lsp-fLNwD0BI.js} +1 -1
- package/dist/web/assets/use-lsp-fLNwD0BI.js.br +0 -0
- package/dist/web/assets/use-lsp-fLNwD0BI.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-CyoMsYaI.js → use-monaco-theme-CbNQ4HnC.js} +1 -1
- package/dist/web/assets/{use-process-kill-DsHyrg0-.js → use-process-kill-B4Srjl2m.js} +1 -1
- package/dist/web/assets/use-process-kill-B4Srjl2m.js.br +0 -0
- package/dist/web/assets/use-process-kill-B4Srjl2m.js.gz +0 -0
- package/dist/web/assets/{use-sql-schema-info-BqGN5N4O.js → use-sql-schema-info-CqISFaAW.js} +1 -1
- package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-CqISFaAW.js.gz +0 -0
- package/dist/web/assets/{use-websocket-DqomrzN8.js → use-websocket-DVJuWhlA.js} +1 -1
- package/dist/web/assets/{voice-settings-section-D9KsOm8A.js → voice-settings-section-C1aEYF94.js} +1 -1
- package/dist/web/assets/voice-settings-section-C1aEYF94.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C1aEYF94.js.gz +0 -0
- package/dist/web/assets/{web-preview-tab-CUp1n2jz.js → web-preview-tab-CZJAVoVU.js} +1 -1
- package/dist/web/assets/web-preview-tab-CZJAVoVU.js.br +0 -0
- package/dist/web/assets/web-preview-tab-CZJAVoVU.js.gz +0 -0
- package/dist/web/assets/{window-store-UcSFgNCI.js → window-store-D6EgLSfT.js} +1 -1
- package/dist/web/assets/window-store-D6EgLSfT.js.br +0 -0
- package/dist/web/assets/window-store-D6EgLSfT.js.gz +0 -0
- package/dist/web/index.html +12 -12
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/package.json +1 -1
- package/src/web/components/floating-window/use-window-meta.ts +2 -1
- package/src/web/components/floating-window/window-content-registry.ts +2 -0
- package/src/web/components/floating-window/window-store-types.ts +1 -1
- package/src/web/components/layout/upgrade-button.tsx +27 -46
- package/src/web/components/release-notes/open-release-notes.ts +22 -0
- package/src/web/components/release-notes/release-notes-entry.tsx +73 -0
- package/src/web/components/release-notes/release-notes-view.tsx +72 -0
- package/src/web/components/release-notes/release-notes-window-content.tsx +6 -0
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js +0 -1
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-Ctu-w8kt.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-DmbSfFGz.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-Dk8x3ozF.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-MKwjYcDh.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-CODZY71V.js +0 -1
- package/dist/web/assets/ai-settings-section-CODZY71V.js.br +0 -0
- package/dist/web/assets/ai-settings-section-CODZY71V.js.gz +0 -0
- package/dist/web/assets/android-tab-CUkjbfyi.js.br +0 -0
- package/dist/web/assets/android-tab-CUkjbfyi.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-BZsM8HpZ.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cs3utBlp.js.br +0 -0
- package/dist/web/assets/apps-panel-Cs3utBlp.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js +0 -1
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.br +0 -0
- package/dist/web/assets/branch-review-tab-C-aPuhXZ.js.gz +0 -0
- package/dist/web/assets/chat-tab-CGQu4uLR.js +0 -1
- package/dist/web/assets/chat-tab-CGQu4uLR.js.br +0 -0
- package/dist/web/assets/chat-tab-CGQu4uLR.js.gz +0 -0
- package/dist/web/assets/chat-tab-DtSHSfMU.js.br +0 -0
- package/dist/web/assets/chat-tab-DtSHSfMU.js.gz +0 -0
- package/dist/web/assets/code-editor-DjDyhff1.js.br +0 -0
- package/dist/web/assets/code-editor-DjDyhff1.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-BKgiUi8E.js.gz +0 -0
- package/dist/web/assets/conflict-editor-DgTv-8pb.js.br +0 -0
- package/dist/web/assets/conflict-editor-DgTv-8pb.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js +0 -4
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CJ-6gH9g.js.gz +0 -0
- package/dist/web/assets/csv-preview-BTGpYs4p.js.br +0 -0
- package/dist/web/assets/csv-preview-BTGpYs4p.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-DDePT3UI.js.br +0 -0
- package/dist/web/assets/db-explorer-store-DDePT3UI.js.gz +0 -0
- package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-BeT8cp6P.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BYzd4_sR.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BYzd4_sR.js.gz +0 -0
- package/dist/web/assets/design-settings-section-B3KQBggK.js.br +0 -0
- package/dist/web/assets/design-settings-section-B3KQBggK.js.gz +0 -0
- package/dist/web/assets/design-tab-CPyj_nFg.js.br +0 -0
- package/dist/web/assets/design-tab-CPyj_nFg.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-DIGPFo2l.js.gz +0 -0
- package/dist/web/assets/diff-viewer-nYz43A94.js +0 -4
- package/dist/web/assets/diff-viewer-nYz43A94.js.br +0 -0
- package/dist/web/assets/diff-viewer-nYz43A94.js.gz +0 -0
- package/dist/web/assets/docx-preview-CowHGqML.js.br +0 -0
- package/dist/web/assets/docx-preview-CowHGqML.js.gz +0 -0
- package/dist/web/assets/editor-dialog-xPoehDYp.js.br +0 -0
- package/dist/web/assets/editor-dialog-xPoehDYp.js.gz +0 -0
- package/dist/web/assets/editor-language-service-DdYqCDBU.js.br +0 -0
- package/dist/web/assets/editor-language-service-DdYqCDBU.js.gz +0 -0
- package/dist/web/assets/explorer-body-BHh5Qpvi.js +0 -2
- package/dist/web/assets/explorer-body-BHh5Qpvi.js.br +0 -0
- package/dist/web/assets/explorer-body-BHh5Qpvi.js.gz +0 -0
- package/dist/web/assets/explorer-model-tGyFETP_.js.br +0 -0
- package/dist/web/assets/explorer-model-tGyFETP_.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-B1c4QTVL.js.br +0 -0
- package/dist/web/assets/explorer-window-content-B1c4QTVL.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.br +0 -0
- package/dist/web/assets/extension-manager-section-BgL0Uyl3.js.gz +0 -0
- package/dist/web/assets/extension-webview-BWB1Yd-t.js.br +0 -0
- package/dist/web/assets/extension-webview-BWB1Yd-t.js.gz +0 -0
- package/dist/web/assets/files-settings-section-TmoewoO2.js.br +0 -0
- package/dist/web/assets/files-settings-section-TmoewoO2.js.gz +0 -0
- package/dist/web/assets/general-settings-section-Bu7o8uUn.js.br +0 -0
- package/dist/web/assets/general-settings-section-Bu7o8uUn.js.gz +0 -0
- package/dist/web/assets/git-log-panel-RjMZIaCk.js.br +0 -0
- package/dist/web/assets/git-log-panel-RjMZIaCk.js.gz +0 -0
- package/dist/web/assets/git-review-tab-BUW5LZk4.js +0 -3
- package/dist/web/assets/git-review-tab-BUW5LZk4.js.br +0 -0
- package/dist/web/assets/git-review-tab-BUW5LZk4.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-DqlTFhhf.js.br +0 -0
- package/dist/web/assets/glide-data-grid-DqlTFhhf.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-BmF2Gy_E.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js +0 -1
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js.br +0 -0
- package/dist/web/assets/group-chat-tab-nk3n5wE0.js.gz +0 -0
- package/dist/web/assets/impexp-tab-B8d4oBOB.js.br +0 -0
- package/dist/web/assets/impexp-tab-B8d4oBOB.js.gz +0 -0
- package/dist/web/assets/index-2_Pz5MiI.css +0 -1
- package/dist/web/assets/index-2_Pz5MiI.css.br +0 -0
- package/dist/web/assets/index-Cx9ZRibz.js.br +0 -0
- package/dist/web/assets/index-Cx9ZRibz.js.gz +0 -0
- package/dist/web/assets/keybindings-store-B2AkKQl7.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-BSMgmbOR.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DO9wnwnG.js.br +0 -0
- package/dist/web/assets/language-servers-section-DO9wnwnG.js.gz +0 -0
- package/dist/web/assets/logs-app-xQ2UsN4G.js +0 -13
- package/dist/web/assets/logs-app-xQ2UsN4G.js.br +0 -0
- package/dist/web/assets/logs-app-xQ2UsN4G.js.gz +0 -0
- package/dist/web/assets/logs-tab-H3SmYGRX.js +0 -1
- package/dist/web/assets/lsp-client-IsC8Ol0U.js.br +0 -0
- package/dist/web/assets/lsp-client-IsC8Ol0U.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-BfZiHaNy.js.br +0 -0
- package/dist/web/assets/markdown-renderer-BfZiHaNy.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dz3eJdBl.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.br +0 -0
- package/dist/web/assets/new-design-dialog-B8zeJoJQ.js.gz +0 -0
- package/dist/web/assets/notification-store-BkkcJE2G.js +0 -1
- package/dist/web/assets/notifications-settings-section-CMZXQw72.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-CMZXQw72.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-DYTZbguT.js.br +0 -0
- package/dist/web/assets/open-db-tabs-DYTZbguT.js.gz +0 -0
- package/dist/web/assets/overview-panel-7_8b6pwr.js.br +0 -0
- package/dist/web/assets/overview-panel-7_8b6pwr.js.gz +0 -0
- package/dist/web/assets/panel-store-Dx2ziBLp.js.br +0 -0
- package/dist/web/assets/panel-store-Dx2ziBLp.js.gz +0 -0
- package/dist/web/assets/performance-panel-COQNCyEU.js.br +0 -0
- package/dist/web/assets/performance-panel-COQNCyEU.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CmhbbZVI.js.gz +0 -0
- package/dist/web/assets/pptx-export-COeBmnFJ.js.br +0 -0
- package/dist/web/assets/pptx-export-COeBmnFJ.js.gz +0 -0
- package/dist/web/assets/problems-panel-I0EYfa1S.js.br +0 -0
- package/dist/web/assets/problems-panel-I0EYfa1S.js.gz +0 -0
- package/dist/web/assets/process-table-or-X8Lwh.js.br +0 -0
- package/dist/web/assets/process-table-or-X8Lwh.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-DpJ6ok4C.js.gz +0 -0
- package/dist/web/assets/query-tab-DeNZMZHX.js.br +0 -0
- package/dist/web/assets/query-tab-DeNZMZHX.js.gz +0 -0
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js +0 -1
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-QRP4Yh46.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CGDBpXMf.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-6nXirdqZ.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BTaj9Flo.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate--gtmfqZh.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs5avYaS.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-D4CM-28B.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-Dv4iLwnf.js.gz +0 -0
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js +0 -1
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js.br +0 -0
- package/dist/web/assets/review-address-setup-CU1A_NfZ.js.gz +0 -0
- package/dist/web/assets/review-code-Bet53hHb.js.br +0 -0
- package/dist/web/assets/review-code-Bet53hHb.js.gz +0 -0
- package/dist/web/assets/save-as-dialog-DHkBsS-6.js.br +0 -0
- package/dist/web/assets/save-as-dialog-DHkBsS-6.js.gz +0 -0
- package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.br +0 -0
- package/dist/web/assets/schedule-script-editor-CKUl2qxf.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-EoOXzqF3.js.gz +0 -0
- package/dist/web/assets/send-to-chat-B7oUVcgh.js.br +0 -0
- package/dist/web/assets/send-to-chat-B7oUVcgh.js.gz +0 -0
- package/dist/web/assets/services-panel-BceuL_SU.js.br +0 -0
- package/dist/web/assets/services-panel-BceuL_SU.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-CjSxBYOF.js.br +0 -0
- package/dist/web/assets/session-changes-bar-CjSxBYOF.js.gz +0 -0
- package/dist/web/assets/session-review-tab-yIQFGJbG.js.br +0 -0
- package/dist/web/assets/session-review-tab-yIQFGJbG.js.gz +0 -0
- package/dist/web/assets/settings-body-DXNcpoqY.js.br +0 -0
- package/dist/web/assets/settings-body-DXNcpoqY.js.gz +0 -0
- package/dist/web/assets/settings-rows-DgL7oTg8.js.br +0 -0
- package/dist/web/assets/settings-rows-DgL7oTg8.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DFLjO2le.js.br +0 -0
- package/dist/web/assets/settings-section-content-DFLjO2le.js.gz +0 -0
- package/dist/web/assets/settings-store-CBJCnE5L.js.br +0 -0
- package/dist/web/assets/settings-store-CBJCnE5L.js.gz +0 -0
- package/dist/web/assets/settings-tab-CrGoLKQT.js +0 -1
- package/dist/web/assets/settings-window-content-5opW9Wra.js +0 -1
- package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.br +0 -0
- package/dist/web/assets/slash-command-picker-qb3fZ7RP.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-B6JtYu9P.js.br +0 -0
- package/dist/web/assets/sql-object-tab-B6JtYu9P.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-bdNkUymy.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-bdNkUymy.js.gz +0 -0
- package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-5SfYdbAB.js.gz +0 -0
- package/dist/web/assets/structure-tab-DYjjcLIU.js.br +0 -0
- package/dist/web/assets/structure-tab-DYjjcLIU.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DouL7ajt.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DouL7ajt.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-qpa36tWB.js +0 -1
- package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CQ5NiV6Y.js.gz +0 -0
- package/dist/web/assets/table-tab-M850PntZ.js +0 -2
- package/dist/web/assets/table-tab-M850PntZ.js.br +0 -0
- package/dist/web/assets/table-tab-M850PntZ.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-CqVIuWP1.js.gz +0 -0
- package/dist/web/assets/terminal-tab-DT0MN_Qn.js.br +0 -0
- package/dist/web/assets/terminal-tab-DT0MN_Qn.js.gz +0 -0
- package/dist/web/assets/tool-cards-C2YGSKRm.js.br +0 -0
- package/dist/web/assets/tool-cards-C2YGSKRm.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DQXIdF8O.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DQXIdF8O.js.gz +0 -0
- package/dist/web/assets/use-db-read-BByB906L.js.br +0 -0
- package/dist/web/assets/use-db-read-BByB906L.js.gz +0 -0
- package/dist/web/assets/use-db-tab-Dc0QSFyM.js.br +0 -0
- package/dist/web/assets/use-db-tab-Dc0QSFyM.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-B9M-hADX.js.br +0 -0
- package/dist/web/assets/use-inline-blame-B9M-hADX.js.gz +0 -0
- package/dist/web/assets/use-lsp-DcGiCpl9.js.br +0 -0
- package/dist/web/assets/use-lsp-DcGiCpl9.js.gz +0 -0
- package/dist/web/assets/use-process-kill-DsHyrg0-.js.br +0 -0
- package/dist/web/assets/use-process-kill-DsHyrg0-.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-BqGN5N4O.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-D9KsOm8A.js.br +0 -0
- package/dist/web/assets/voice-settings-section-D9KsOm8A.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-CUp1n2jz.js.br +0 -0
- package/dist/web/assets/web-preview-tab-CUp1n2jz.js.gz +0 -0
- package/dist/web/assets/window-store-UcSFgNCI.js.br +0 -0
- package/dist/web/assets/window-store-UcSFgNCI.js.gz +0 -0
- /package/dist/web/assets/{__vite-browser-external-DLaiEgUM.js → __vite-browser-external-LVpeGV-g.js} +0 -0
- /package/dist/web/assets/{api-themes-B3-6zR6Q.js → api-themes-DUOEO3_X.js} +0 -0
- /package/dist/web/assets/{claude-models-yFre4eSK.js → claude-models-C9iHl8VB.js} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js → database-drivers-section-BPXoNrWi.js} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.br → database-drivers-section-BPXoNrWi.js.br} +0 -0
- /package/dist/web/assets/{database-drivers-section-c2SuNQPB.js.gz → database-drivers-section-BPXoNrWi.js.gz} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js → metric-chart-canvas-HG8rPTMq.js} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.br → metric-chart-canvas-HG8rPTMq.js.br} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-Dnm9OOXU.js.gz → metric-chart-canvas-HG8rPTMq.js.gz} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js → notification-settings--li9wGTJ.js} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js.br → notification-settings--li9wGTJ.js.br} +0 -0
- /package/dist/web/assets/{notification-settings-CvplVsIo.js.gz → notification-settings--li9wGTJ.js.gz} +0 -0
- /package/dist/web/assets/{process-row-format-CM1XaqkS.js → process-row-format-CJg8VV-6.js} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js → query-audit-section-BiCUBamA.js} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.br → query-audit-section-BiCUBamA.js.br} +0 -0
- /package/dist/web/assets/{query-audit-section-C-fT07Zz.js.gz → query-audit-section-BiCUBamA.js.gz} +0 -0
- /package/dist/web/assets/{remote-desktop-recording-D_fwMC2z.js → remote-desktop-recording-BcDx5c_k.js} +0 -0
- /package/dist/web/assets/{separator-CYw7bF1W.js → separator-DUdRLaL0.js} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js → sortable-header-Ds6nTnqB.js} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js.br → sortable-header-Ds6nTnqB.js.br} +0 -0
- /package/dist/web/assets/{sortable-header-CchrA_dg.js.gz → sortable-header-Ds6nTnqB.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js → vendor-xterm-BxbwWHG_.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.br → vendor-xterm-BxbwWHG_.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-lhGdimFj.js.gz → vendor-xterm-BxbwWHG_.js.gz} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{n}from"./minimal-mode-rLZOjciW.js";import{t as r}from"./react-B9hau9ra.js";import{r as i}from"./utils-D3xTlJyU.js";var a=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]);function o(e){return e.indexes.filter(t=>!t.primary&&!e.uniques.some(e=>e.name===null?t.unique&&a(e.columns,t.columns):e.name===t.name))}var s=e=>`c:${e}`;function c(e){let t=e.trim(),n=!1,r=!1;for(;;){let e=/\s+(unsigned|zerofill)$/i.exec(t);if(!e)break;e[1].toLowerCase()===`unsigned`?n=!0:r=!0,t=t.slice(0,e.index)}return{type:t,unsigned:n,zerofill:r}}function l(e,t){return t===`mysql`?[e.type,e.unsigned?`unsigned`:``,e.zerofill?`zerofill`:``].filter(Boolean).join(` `):e.type}function u(e,t){let n=new Map(e.columns.map(e=>[e.name,s(e.name)])),r=e=>n.get(e)??s(e);return{schema:e.schema,name:e.name,columns:e.columns.map(e=>{let n=t===`mysql`?c(e.type):{type:e.type,unsigned:!1,zerofill:!1};return{id:r(e.name),name:e.name,type:n.type,notNull:!e.nullable,autoIncrement:e.autoIncrement,defaultValue:e.defaultValue,computedExpression:e.generated?e.computedExpression:null,comment:e.comment,unsigned:n.unsigned,zerofill:n.zerofill,collation:e.collation??null,computedStored:e.computedStored??!1,onUpdate:e.onUpdate??null,identity:e.identity??null,sqliteAutoincrement:e.sqliteAutoincrement??!1}}),primaryKey:e.primaryKey?{id:`pk`,name:e.primaryKey.name,columns:e.primaryKey.columns.map(r)}:null,indexes:o(e).map(e=>({id:`ix:${e.name}`,name:e.name,columns:e.keys.map(e=>{let t=e.column!==null&&n.has(e.column),i={columnId:t?r(e.column):null,expression:t?null:e.expression??e.column,descending:e.descending};return e.nulls&&(i.nulls=e.nulls),e.length!==void 0&&(i.length=e.length),e.opclass&&(i.opclass=e.opclass),i}),unique:e.unique,method:e.method&&e.method!==`btree`?e.method:null,where:e.where})),uniques:e.uniques.map((e,t)=>({id:e.name===null?`uq#${t}`:`uq:${e.name}`,name:e.name,columns:e.columns.map(r)})),foreignKeys:e.foreignKeys.map((e,t)=>({id:e.name===null?`fk#${t}`:`fk:${e.name}`,name:e.name,columns:e.columns.map(r),refSchema:e.refSchema,refTable:e.refTable,refColumns:[...e.refColumns],onUpdate:e.onUpdate,onDelete:e.onDelete})),checks:e.checks.map(e=>({...e})),comment:e.comment,engine:e.engine??null,withoutRowid:e.withoutRowid??!1,strict:e.strict??!1}}function ee(e,t=`n`){let n=new Set([...e.columns.map(e=>e.id),...e.indexes.map(e=>e.id),...e.uniques.map(e=>e.id),...e.foreignKeys.map(e=>e.id),...e.primaryKey?[e.primaryKey.id]:[]]);for(let e=n.size+1;;e++){let r=`${t}:${e}`;if(!n.has(r))return r}}function d(e,t=``){return{id:e,name:t,type:`int`,notNull:!1,autoIncrement:!1,defaultValue:null,computedExpression:null,comment:null,unsigned:!1,zerofill:!1,collation:null,computedStored:!1,onUpdate:null,identity:null,sqliteAutoincrement:!1}}function te(e){let t={...d(`n:1`,`id`),notNull:!0,autoIncrement:!0};return{schema:e,name:`new_table`,columns:[t],primaryKey:{id:`n:2`,name:null,columns:[t.id]},indexes:[],uniques:[],foreignKeys:[],checks:[],comment:null,engine:null,withoutRowid:!1,strict:!1}}function f(e,t){return e.columns.find(e=>e.id===t)}function ne(e,t){return f(e,t)?.name??``}function re(e,t){return e.primaryKey?.columns.includes(t)??!1}function p(e,t){return t.refTable===e.name&&(t.refSchema??null)===(e.schema??null)}function ie(e,t,n){let r=e.primaryKey;if(n)return r?.columns.includes(t)?e:{...e,primaryKey:r?{...r,columns:[...r.columns,t]}:{id:ee(e),name:null,columns:[t]}};if(!r?.columns.includes(t))return e;let i=r.columns.filter(e=>e!==t);return{...e,primaryKey:i.length>0?{...r,columns:i}:null}}function ae(e,t,n){let r=f(e,t.id),i={...e,columns:r?e.columns.map(e=>e.id===t.id?t:e):[...e.columns,t]};return r&&r.name!==t.name&&(i={...i,foreignKeys:i.foreignKeys.map(n=>p(e,n)?{...n,refColumns:n.refColumns.map(e=>e===r.name?t.name:e)}:n)}),n===void 0?i:ie(i,t.id,n)}function oe(e,t){let n=new Set(t),r=new Set(e.columns.filter(e=>n.has(e.id)).map(e=>e.name)),i=e.primaryKey?.columns.filter(e=>!n.has(e))??[];return{...e,columns:e.columns.filter(e=>!n.has(e.id)),primaryKey:e.primaryKey&&i.length>0?{...e.primaryKey,columns:i}:null,indexes:e.indexes.map(e=>({...e,columns:e.columns.filter(e=>e.columnId===null||!n.has(e.columnId))})).filter(e=>e.columns.length>0),uniques:e.uniques.map(e=>({...e,columns:e.columns.filter(e=>!n.has(e))})).filter(e=>e.columns.length>0),foreignKeys:e.foreignKeys.map(t=>{let i=p(e,t),a=t.columns.map((e,a)=>!n.has(e)&&!(i&&r.has(t.refColumns[a]??``)));return{...t,columns:t.columns.filter((e,t)=>a[t]),refColumns:t.refColumns.filter((e,t)=>a[t])}}).filter(e=>e.columns.length>0)}}function se(e,t,n){let r=e[t],i=r.some(e=>e.id===n.id);return{...e,[t]:i?r.map(e=>e.id===n.id?n:e):[...r,n]}}function ce(e,t,n){return t===`primaryKey`?e.primaryKey?.id===n?{...e,primaryKey:null}:e:{...e,[t]:e[t].filter(e=>e.id!==n)}}function le(e){return{schema:e.schema??null,name:e.name,columns:e.columns.map(e=>[e.id,e.name,e.type,!!e.notNull,!!e.autoIncrement,e.defaultValue??null,e.computedExpression??null,e.comment??null,!!e.unsigned,!!e.zerofill,e.collation??null,!!e.computedStored,e.onUpdate??null,e.identity??null,!!e.sqliteAutoincrement]),primaryKey:e.primaryKey?[e.primaryKey.id,e.primaryKey.name??null,[...e.primaryKey.columns]]:null,indexes:e.indexes.map(e=>[e.id,e.name,e.columns.map(e=>[e.columnId??null,e.expression??null,!!e.descending,e.nulls??null,e.length??null,e.opclass??null]),!!e.unique,e.method??null,e.where??null]),uniques:e.uniques.map(e=>[e.id,e.name??null,[...e.columns]]),foreignKeys:e.foreignKeys.map(e=>[e.id,e.name??null,[...e.columns],e.refSchema??null,e.refTable,[...e.refColumns],e.onUpdate??null,e.onDelete??null]),checks:e.checks.map(e=>[e.name??null,e.expression]),comment:e.comment??null,engine:e.engine??null,withoutRowid:!!e.withoutRowid,strict:!!e.strict}}function ue(e,t){return JSON.stringify(le(e))===JSON.stringify(le(t))}function m(e,t){return t===`postgres`?e:e.toLowerCase()}function de(e,t,n,r){let i=n.trim();return i?[...e.indexes.map(e=>[e.id,e.name]),...e.uniques.map(e=>[e.id,e.name]),...e.foreignKeys.map(e=>[e.id,e.name]),...e.primaryKey&&r===`postgres`?[[e.primaryKey.id,e.primaryKey.name]]:[]].some(([e,n])=>e!==t&&!!n?.trim()&&m(n.trim(),r)===m(i,r)):!1}var fe=/^(tiny|small|medium|big)?int(eger)?\b|^int[248]\b|^(small|big)?serial\b/i;function pe(e,t,n){let r=[],i=t.name.trim();return i?e.columns.some(e=>e.id!==t.id&&m(e.name,n)===m(i,n))&&r.push(`There is already a column named ${i}`):r.push(`Column name is required`),t.type.trim()||r.push(`Data type is required`),t.autoIncrement&&!fe.test(t.type.trim())&&r.push(`An autoincrement column needs an integer type`),t.autoIncrement&&t.computedExpression&&r.push(`A computed column cannot be autoincrement`),r}function me(e,t,n){let r=[],i=t.filter(e=>e!==null),a=n===`primaryKey`?`A primary key`:n===`index`?`An index`:`A unique constraint`;return t.length===0&&r.push(`${a} needs at least one column`),i.some(t=>!f(e,t))&&r.push(`Choose a column for every row`),new Set(i).size!==i.length&&r.push(`A column is listed twice`),r}function he(e,t){let n=[];return t.refTable||n.push(`Choose the referenced table`),t.columns.length===0&&n.push(`A foreign key needs at least one column`),(t.columns.length!==t.refColumns.length||t.columns.some(t=>!f(e,t))||t.refColumns.some(e=>!e))&&n.push(`Choose a base column and a referenced column for every row`),n}function ge(e,t,n){return e===`PK`?`PK_${t}`:`${e}_${t}_${n.join(`_`)}`}var h=`tableEdit`,g=e=>Array.isArray(e);function _e(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name==`string`&&g(t.columns)&&g(t.indexes)&&g(t.uniques)&&g(t.foreignKeys)&&g(t.checks)}function ve(e){let t=e?.[h];if(typeof t!=`object`||!t)return null;let{base:n,current:r,isNew:i}=t;return!_e(n)||!_e(r)?null:i===!0?{base:n,current:r,isNew:!0}:{base:n,current:r}}function ye(e){let t=ve(e);return t!==null&&!ue(t.base,t.current)}function be(e,t,n,r){let i=e??(t?{base:u(t,n),current:u(t,n)}:null);if(!i)return null;let a=r(i.current);return!i.isNew&&ue(i.base,a)?null:{...i,current:a}}function xe(e,t){let{[h]:n,...r}=e??{};return t?{...r,[h]:t}:r}function Se(e){return e?.isNew?{...e,current:e.base}:null}function Ce(e,t,n){return{newTableId:n,tableNumber:t,schemaName:e.schema??``,[h]:{base:e,current:e,isNew:!0}}}function we(e){let t=0;for(let n of e){let e=n.type===`db-structure`?n.metadata?.tableNumber:void 0;typeof e==`number`&&e>t&&(t=e)}return t+1}var _=`file`,Te=new Set([`table`,`view`,`matview`,`function`,`procedure`,`trigger`,`sequence`]),Ee=new Set([`table`,`view`,`matview`]);function v(e){let t=typeof e==`string`&&/^\d+$/.test(e)?Number(e):e;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:null}function y(e){let t=e?.dbFile;if(t&&typeof t==`object`){let{path:e,projectName:n}=t;return typeof e!=`string`||!e?null:{kind:`file`,path:e,...typeof n==`string`&&n?{projectName:n}:{}}}let n=v(e?.connectionId);if(n===null)return null;let r=e?.database;return{kind:`connection`,connectionId:n,...typeof r==`string`&&r?{database:r}:{}}}function b(e){return e.kind===`file`?{dbFile:{path:e.path,...e.projectName?{projectName:e.projectName}:{}}}:{connectionId:e.connectionId,...e.database?{database:e.database}:{}}}function De(e,t=``){let n=`/api/db/connections/${e.kind===`file`?_:e.connectionId}${t}`,r=e.kind===`file`?[[`path`,e.path],...e.projectName?[[`project`,e.projectName]]:[]]:e.database===void 0?[]:[[`database`,e.database]];return r.length===0?n:`${n}${n.includes(`?`)?`&`:`?`}${r.map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join(`&`)}`}function x(e){return e.slice(Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`))+1)||e}function S(e,t){let n=e?.kind===`file`?x(e.path):t??`Database`;return e?.kind===`connection`&&e.database?`${n}/${e.database}`:n}function Oe(e,t,n){return`${S(e,t)} · ${n}`}var C=e=>encodeURIComponent(typeof e==`string`?e:``);function w(e){return e?e.kind===`file`?`file:${C(e.projectName)}:${C(e.path)}`:`${e.connectionId}:${C(e.database)}`:`default:`}function T(e,t){if(e===`db-query`)return`db-query:${C(t?.queryId)||i()}`;if(e===`db-structure`&&typeof t?.newTableId==`string`&&t.newTableId)return`db-structure:new:${C(t.newTableId)}`;let n=w(y(t)),r=C(t?.schemaName);if(e===`db-sql`)return`db-sql:${n}:${r}:${typeof t?.objectKind==`string`&&Ee.has(t.objectKind)?`table`:C(t?.objectKind)}:${C(t?.objectName)}:${C(t?.objectArgs)}:${C(t?.objectTable)}`;let a=e===`database`&&typeof t?.instance==`string`&&t.instance?`:${C(t.instance)}`:``;return`${e}:${n}:${r}:${C(t?.tableName)}${a}`}function ke(e){try{return decodeURIComponent(e)}catch{return null}}function Ae(e,t){if(e===`db-query`)return null;let n=t.split(`:`).map(ke);if(n.some(e=>e===null))return null;let[r=``,...i]=n,a,o;if(r===_){let[e=``,t=``,...n]=i;if(!t)return null;a={kind:`file`,path:t,...e?{projectName:e}:{}},o=n}else{let e=v(r);if(e===null)return null;let[t=``,...n]=i;a={kind:`connection`,connectionId:e,...t?{database:t}:{}},o=n}if(e===`db-sql`){let[e=``,t=``,n=``,r=``,i=``]=o;if(!Te.has(t)||!n)return null;let s=t===`function`||t===`procedure`;return{...b(a),schemaName:e,objectKind:t,objectName:n,...s?{objectArgs:r}:{},...i?{objectTable:i}:{}}}let[s=``,c=``,l=``]=o;return c?{...b(a),schemaName:s,tableName:c,...e===`database`&&l?{instance:l}:{}}:null}function je(e,t,n={}){return{queryId:i(),queryNumber:t,currentSql:e,openedSql:e,...n.run?{runOnOpen:!0}:{}}}function Me(e){return typeof e?.currentSql==`string`?e.currentSql!==(typeof e.openedSql==`string`?e.openedSql:``):!1}function Ne(e,t){return e===`db-query`?Me(t):e===`db-structure`?ye(t):!1}function Pe(e){let t=0;for(let n of e){let e=n.type===`db-query`?n.metadata?.queryNumber:void 0;typeof e==`number`&&e>t&&(t=e)}return t+1}function E(e){let t=v(e.connectionId),n={};for(let t of[`connectionName`,`dbType`,`connectionColor`,`database`,`dbFile`])e[t]!==void 0&&(n[t]=e[t]);return{...n,...t===null?{}:{connectionId:t}}}function D(e){let t=typeof e.currentSql==`string`?e.currentSql:typeof e.initialSql==`string`?e.initialSql:``;return{type:`db-query`,metadata:{...E(e),queryId:typeof e.queryId==`string`&&e.queryId?e.queryId:i(),...typeof e.queryNumber==`number`?{queryNumber:e.queryNumber}:{},currentSql:t,openedSql:t}}}function Fe(e){let t=e.metadata??{},n=e.id.includes(`@`)?e.id.slice(e.id.indexOf(`@`)):``,r=typeof t.tableName==`string`&&t.tableName!==``,i;if(e.type===`database`)if(!r)i=D(t);else{let n=v(t.connectionId);if(n===null||n===t.connectionId)return e;i={type:`database`,metadata:{...t,connectionId:n}}}else if(e.type===`postgres`||e.type===`sqlite`){if(v(t.connectionId)===null)return e.type===`sqlite`&&typeof t.filePath==`string`&&t.filePath?e:null;let n=t.dbType??e.type;i=r?{type:`database`,metadata:{...E(t),dbType:n,schemaName:typeof t.schemaName==`string`?t.schemaName:``,tableName:t.tableName}}:{type:`db-query`,metadata:{...D(t).metadata,dbType:n}}}else return e;return{...e,id:`${T(i.type,i.metadata)}${n}`,type:i.type,metadata:i.metadata}}var O=`__dock__`,Ie=new Set([`terminal`,`system-monitor`,`problems`]),Le=new Set([`system-monitor`,`settings`,`problems`,`logs`]),Re=new Set([`design`]),k=`__win__:`;function A(e){return`${k}${e}`}function j(e){return e.startsWith(k)}function M(e){return j(e)&&e.slice(8)||null}function ze(e){return{id:A(e),tabs:[],activeTabId:null,tabHistory:[]}}function N(){return{id:O,tabs:[],activeTabId:null,tabHistory:[]}}function Be(){return`panel-${i()}`}function Ve(e=[],t=null){return{id:Be(),tabs:e,activeTabId:t,tabHistory:t?[t]:[]}}function He(e){return e?1:3}function Ue(e,t){return e.map(e=>e.filter(e=>e!==t)).filter(e=>e.length>0)}function We(e,t,r=!1){return r&&(e=e.filter(e=>n(e.type))),!t||t===`__global__`?e:e.filter(e=>!e.projectId||e.projectId===t)}function Ge(e,t){for(let n=0;n<e.length;n++){let r=e[n].indexOf(t);if(r!==-1)return{row:n,col:r}}return null}function Ke(e){let t=0;for(let n of Object.values(e))for(let e of n.tabs){let n=e.id.match(/^editor:untitled-(\d+)$/);n&&(t=Math.max(t,Number(n[1])))}return t+1}function P(e,t){switch(e){case`editor`:return t?.viewerKey?`editor:viewer:${t.viewerKey}`:t?.isUntitled?`editor:untitled-${t.untitledNumber??1}`:`editor:${t?.filePath??`untitled`}`;case`chat`:return`chat:${t?.providerId??`default`}/${t?.sessionId??i()}`;case`terminal`:return`terminal:${t?.terminalIndex??1}`;case`database`:case`db-structure`:case`db-sql`:case`db-query`:return T(e,t);case`db-impexp`:return`db-impexp:${typeof t?.impexpId==`string`&&t.impexpId?t.impexpId:i()}`;case`db-connection`:return`db-connection:${t?.connectionId??`new-${i()}`}`;case`sqlite`:return`sqlite:${t?.filePath??`default`}`;case`extension`:return`extension:${String(t?.viewType??`unknown`).replace(/\.view$/,``)}`;case`git-diff`:return`git-diff:${t?.filePath??`unknown`}`;case`branch-review`:return`branch-review:${t?.projectName??`unknown`}`;case`session-review`:return`session-review:${t?.projectName??`unknown`}:${t?.sessionId??`unknown`}`;case`git-review`:return`git-review:${t?.projectName??`unknown`}`;case`conflict-editor`:return`conflict-editor:${t?.filePath??`unknown`}`;case`settings`:return`settings`;case`problems`:return`problems`;case`system-monitor`:return`system-monitor`;case`logs`:return`logs`;case`group`:return`group:${t?.groupId??`unknown`}`;case`design`:return`design:${t?.designSlug??`unknown`}`;case`web-preview`:return`web-preview:${t?.url??`unknown`}`;default:return`${e}:${i()}`}}var qe=new Set([`ports`,`tunnels`]);function Je(e){if(!e.tabs.some(e=>qe.has(e.type)))return e;let t=new Set(e.tabs.filter(e=>qe.has(e.type)).map(e=>e.id)),n=e.tabs.filter(e=>!t.has(e.id)),r=e.tabHistory.filter(e=>!t.has(e)),i=e.activeTabId&&!t.has(e.activeTabId)?e.activeTabId:r[r.length-1]??n[n.length-1]?.id??null;return{...e,tabs:n,tabHistory:r,activeTabId:i}}function F(e){let t={};for(let[n,r]of Object.entries(e.panels))t[n]=Je(r);let n=e.dockPanel?Je(e.dockPanel):e.dockPanel;return{...e,panels:t,dockPanel:n}}function Ye(e){let t=new Map,n=[];for(let r of e.tabs){let e=Fe(r);e!==r&&t.set(r.id,e?.id??null),e&&!n.some(t=>t.id===e.id)&&n.push(e)}if(t.size===0)return e;let r=new Set(n.map(e=>e.id)),i=e=>t.has(e)?t.get(e)??null:e,a=e.tabHistory.map(i).filter(e=>e!==null&&r.has(e)),o=e.activeTabId?i(e.activeTabId):null,s=o&&r.has(o)?o:a[a.length-1]??n[n.length-1]?.id??null;return{...e,tabs:n,tabHistory:a,activeTabId:s}}function Xe(e){let t={};for(let[n,r]of Object.entries(e.panels))t[n]=Ye(r);return{...e,panels:t}}function Ze(e){let t={...e,panels:{...e.panels}};for(let[e,n]of Object.entries(t.panels)){let r=n.tabs.map(e=>{if(e.id.startsWith(`tab-`)){let t=P(e.type,e.metadata);return{...e,id:t}}if(e.type===`database`){let t=e.id.indexOf(`@`),n=P(e.type,e.metadata);if((t<0?e.id:e.id.slice(0,t))!==n)return{...e,id:t<0?n:`${n}${e.id.slice(t)}`}}return e}),i=new Map;n.tabs.forEach((e,t)=>{e.id!==r[t].id&&i.set(e.id,r[t].id)});let a=i.get(n.activeTabId??``)??n.activeTabId,o=n.tabHistory.map(e=>i.get(e)??e);t.panels[e]={...n,tabs:r,activeTabId:a,tabHistory:o}}return t}var I=`ppm-panels-`,Qe=`ppm-tabs-`;function L(e){return`${I}${e}`}function $e(e,t){try{let n={...t,updatedAt:new Date().toISOString()};localStorage.setItem(L(e),JSON.stringify(n)),e!==`__global__`&&rt(e,t)}catch{}}function et(e){try{let t=localStorage.getItem(L(e));if(t)return tt(Ze(Xe(F(JSON.parse(t)))))}catch{}let t=ot(e);return t?tt(Xe(F(t))):null}function tt(e){let t=e.dock??{visible:!1,height:30},n;if(!e.dockPanel)n=N();else{let t=e.dockPanel.tabs.filter(e=>Ie.has(e.type)),r=new Set(t.map(e=>e.id)),i=e.dockPanel.tabHistory.filter(e=>r.has(e)),a=e.dockPanel.activeTabId&&r.has(e.dockPanel.activeTabId)?e.dockPanel.activeTabId:i[i.length-1]??t[t.length-1]?.id??null;n={...e.dockPanel,tabs:t,tabHistory:i,activeTabId:a}}return{...e,dock:t,dockPanel:n}}async function nt(e){if(e===`__global__`)return null;try{let t={},n=localStorage.getItem(`ppm-auth-token`);n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{headers:t});if(!r.ok)return null;let i=await r.json();return!i.ok||!i.data?null:{...i.data.layout,updatedAt:i.data.updatedAt}}catch{return null}}var R=new Map;function rt(e,t){let n=R.get(e);n&&clearTimeout(n),R.set(e,setTimeout(async()=>{R.delete(e);try{let n={"Content-Type":`application/json`},r=localStorage.getItem(`ppm-auth-token`);r&&(n.Authorization=`Bearer ${r}`);let i=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{method:`PUT`,headers:n,body:JSON.stringify({layout:t})});if(i.ok){let t=await i.json();if(t.data?.updatedAt){let n=`${I}${e}`,r=localStorage.getItem(n);if(r){let e=JSON.parse(r);e.updatedAt=t.data.updatedAt,localStorage.setItem(n,JSON.stringify(e))}}}}catch{}},1500))}function it(e,t){if(!e&&!t)return null;if(!e)return t;if(!t)return e;let n=new Date(e.updatedAt).getTime();return new Date(t.updatedAt).getTime()>=n?t:e}async function at(e){if(e===`__global__`)return!1;let t=await nt(e);if(!t)return!1;let n=`${I}${e}`,r=null;try{let e=localStorage.getItem(n);r=e?JSON.parse(e):null}catch{}if(it(r,t)!==t)return!1;try{let e={...F(t),updatedAt:t.updatedAt};return localStorage.setItem(n,JSON.stringify(e)),!0}catch{return!1}}function ot(e){try{let t=localStorage.getItem(`${Qe}${e}`);if(!t)return null;let n=JSON.parse(t);if(!n.tabs?.length)return null;let r=Ve(n.tabs,n.activeTabId),i={panels:{[r.id]:r},grid:[[r.id]],focusedPanelId:r.id};return $e(e,i),localStorage.removeItem(`${Qe}${e}`),i}catch{return null}}var st=[`n`,`s`,`e`,`w`,`ne`,`nw`,`se`,`sw`],z={w:360,h:240},ct={w:880,h:560},B=48,lt=780,V=(e,t,n)=>Math.min(n,Math.max(t,e));function ut(e){return 30+V(Math.trunc(e),0,8)}function H(e,t){let n=Math.max(z.w,Math.min(e.w,Math.max(t.w,z.w))),r=Math.max(z.h,Math.min(e.h,Math.max(t.h,z.h))),i=V(e.x,48-n,Math.max(48-n,t.w-48)),a=V(e.y,0,Math.max(0,t.h-48));return{x:Math.round(i),y:Math.round(a),w:Math.round(n),h:Math.round(r)}}function dt(e,t,n,r,i=z){let{x:a,y:o,w:s,h:c}=e;if(t.includes(`e`))s=Math.max(i.w,e.w+n);else if(t.includes(`w`)){let t=e.x+e.w;s=Math.max(i.w,e.w-n),a=t-s}if(t.includes(`s`))c=Math.max(i.h,e.h+r);else if(t.includes(`n`)){let t=e.y+e.h;c=Math.max(i.h,e.h-r),o=t-c}return{x:a,y:o,w:s,h:c}}function ft(e,t,n=ct){let r=Math.min(n.w,Math.max(z.w,t.w-B*2)),i=Math.min(n.h,Math.max(z.h,t.h-B*2)),a=e.length%8;return H({x:B+a*24,y:B+a*24,w:r,h:i},t)}function pt(e,t){let n=Math.min(t.h-B*2,lt),r=Math.max(z.w,Math.round(n*9/16)),i=e.length%8;return H({x:t.w-B-r-i*24,y:B+i*24,w:r,h:n},t)}var mt=.55;function ht(e){let t=Math.min(e.w,Math.max(z.w,Math.round(e.w*mt)));return{x:e.w-t,y:0,w:t,h:e.h}}function gt(e,t,n){return e.x+e.w>Math.max(t.x+t.w,n.w)+40}function _t(e,t,n){return e===`maximized`?{x:0,y:0,w:n.w,h:n.h}:e===`snapped`?ht(n):t}function vt(e,t,n,r){return H({...e,x:e.x+t,y:e.y+n},r)}var yt=[`explorer`,`agent-session`,`system-monitor`,`tab-host`,`remote-desktop`,`settings`,`logs`],U=`ppm-windows`,bt=yt.filter(e=>e!==`agent-session`),xt=[`normal`,`maximized`,`snapped`,`minimized`],St=[`normal`,`maximized`,`snapped`];function Ct(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`x`,`y`,`w`,`h`].every(e=>typeof t[e]==`number`&&Number.isFinite(t[e]))}function wt(e){if(e===void 0)return!0;if(!e||typeof e!=`object`||Array.isArray(e))return!1;try{return JSON.stringify(e),!0}catch{return!1}}function Tt(e){return wt(e.payload)?{id:e.id,kind:e.kind,rect:e.rect,opened:e.opened,state:e.state,...e.restoreTo?{restoreTo:e.restoreTo}:{},payload:e.payload}:null}function Et(e){try{let t=[...e].sort((e,t)=>e.rank-t.rank).map(Tt).filter(e=>e!==null);t.length===0?localStorage.removeItem(U):localStorage.setItem(U,JSON.stringify(t))}catch{}}function Dt(e){let t=null;try{t=localStorage.getItem(U)}catch{return[]}if(!t)return[];let n;try{n=JSON.parse(t)}catch{return[]}if(!Array.isArray(n))return[];let r=[];for(let t of n){if(!t||typeof t!=`object`)continue;let n=t;if(typeof n.id!=`string`||!bt.includes(n.kind)||!Ct(n.rect)||!wt(n.payload))continue;let i=xt.includes(n.state)?n.state:`normal`,a=St.includes(n.restoreTo)?n.restoreTo:void 0;r.push({id:n.id,kind:n.kind,rect:H(n.rect,e),...typeof n.opened==`number`&&Number.isFinite(n.opened)?{opened:n.opened}:{},state:i,...i===`minimized`&&a?{restoreTo:a}:{},payload:n.payload})}return r}var Ot=e(t(),1),W=new Map,G=new Map,K=new Set;function kt(e,t){t?W.set(e,t):W.delete(e);for(let e of K)e()}function At(e,t=2e3){let n=J(e);return n?Promise.resolve(n):new Promise(n=>{let r=e=>{K.delete(i),clearTimeout(a),n(e)},i=()=>{let t=J(e);t&&r(t)},a=setTimeout(()=>r(null),t);K.add(i)})}var q=new Set;function jt(e){q.add(e)}function Mt(e){return q.has(e)}function Nt(e){q.delete(e)}function J(e){return W.get(e)??null}function Pt(e,t){if((G.get(e)??null)!==t){t?G.set(e,t):G.delete(e);for(let e of K)e()}}function Ft(e){return e?G.get(e)??null:null}function It(e){return K.add(e),()=>{K.delete(e)}}function Lt(e){return(0,Ot.useSyncExternalStore)(It,(0,Ot.useCallback)(()=>Ft(e),[e]))}function Rt(e){return Lt(M(e))?.pipWindow.document.body}var zt={w:1280,h:800},Y=e=>Object.values(e).sort((e,t)=>e.rank-t.rank);function X(e){let t={};return e.forEach((e,n)=>{t[e.id]=e.rank===n?e:{...e,rank:n}}),t}function Z(e){Et(Object.values(e))}function Bt(e){return e.reduce((e,t)=>Math.max(e,t.opened+1),0)}function Q(e,t){if(e.state===t)return e;if(t===`minimized`)return{...e,state:t,restoreTo:e.state};let{restoreTo:n,...r}=e;return{...r,state:t}}function Vt(){return`win-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}var Ht=r((e,t)=>({windows:{},bounds:zt,restored:!1,snapPreviewId:null,open:(n,r,i)=>{let{windows:a,bounds:o}=t(),s=Y(a);if(s.length>=8){let e=s[0];return t().restore(e.id),e.id}let c=Vt(),l=i?H(i,o):ft(s.map(e=>e.rect),o),u=X([...s,{id:c,kind:n,rect:l,rank:s.length,opened:Bt(s),state:`normal`,payload:r}]);return e({windows:u}),Z(u),c},close:n=>{let{windows:r}=t();if(!r[n])return;let i=X(Y(r).filter(e=>e.id!==n));e({windows:i}),Z(i)},focus:n=>{let{windows:r}=t(),i=r[n];if(!i)return;let a=i.state===`minimized`?Q(i,i.restoreTo??`normal`):i,o=Y(r);if(a===i&&o[o.length-1]?.id===n)return;let s=X([...o.filter(e=>e.id!==n),a]);e({windows:s}),Z(s)},move:(n,r)=>{let{windows:i,bounds:a}=t(),o=i[n];if(!o)return;let s=H({...o.rect,...r},a),c={...i,[n]:{...o,rect:s}};e({windows:c}),Z(c)},resize:(n,r)=>{let{windows:i,bounds:a}=t(),o=i[n];if(!o)return;let s={...i,[n]:{...o,rect:H(r,a)}};e({windows:s}),Z(s)},setState:(n,r)=>{let{windows:i}=t(),a=i[n];if(!a||a.state===r)return;let o={...i,[n]:Q(a,r)};e({windows:o}),Z(o)},restore:e=>t().focus(e),activateFromDock:e=>{let{windows:n}=t();n[e]&&($(n)===e?t().setState(e,`minimized`):t().restore(e))},minimizeAll:()=>{let{windows:n}=t(),r={};for(let e of Object.values(n))r[e.id]=Q(e,`minimized`);e({windows:r}),Z(r)},setSnapPreview:n=>{t().snapPreviewId!==n&&e({snapPreviewId:n})},setPayload:(n,r)=>{let{windows:i}=t(),a=i[n];if(!a)return;let o={...a.payload,...r};if(Object.entries(o).every(([e,t])=>a.payload?.[e]===t)&&Object.keys(o).length===Object.keys(a.payload??{}).length)return;let s={...i,[n]:{...a,payload:o}};e({windows:s}),Z(s)},setBounds:n=>{let r=t();if(r.bounds.w===n.w&&r.bounds.h===n.h)return;let i={};for(let e of Object.values(r.windows)){let t=H(e.rect,n);i[e.id]=t.x===e.rect.x&&t.y===e.rect.y&&t.w===e.rect.w&&t.h===e.rect.h?e:{...e,rect:t}}e({bounds:n,windows:i})},restoreAll:n=>{t().restored||e({bounds:n,windows:X(Dt(n).slice(0,8).map((e,t)=>({id:e.id,kind:e.kind,rect:e.rect,rank:t,opened:e.opened??t,state:e.state,restoreTo:e.restoreTo,payload:e.payload}))),restored:!0})}}));function Ut(e){return Y(e)}function $(e){let t=Y(e).filter(e=>e.state!==`minimized`&&!Mt(e.id));return t[t.length-1]?.id??null}function Wt(e){return Object.values(e).sort((e,t)=>e.opened-t.opened)}export{y as $,ze as A,Ye as B,gt as C,oe as Ct,Le as D,Re as E,se as Et,at as F,Ae as G,M as H,j as I,Pe as J,x as K,et as L,Ge as M,Ke as N,N as O,Ue as P,S as Q,He as R,ht as S,o as St,O as T,ae as Tt,A as U,We as V,Oe as W,b as X,je as Y,w as Z,ft as _,de as _t,Nt as a,ve as at,vt as b,ee as bt,kt as c,ge as ct,Lt as d,ne as dt,De as et,At as f,pe as ft,dt as g,p as gt,st as h,re as ht,Ut as i,we as it,P as j,Ve as k,Pt as l,d as lt,J as m,he as mt,Ht as n,Ce as nt,Mt as o,Se as ot,Ft as p,l as pt,Ne as q,Wt as r,be as rt,jt as s,xe as st,$ as t,ye as tt,Rt as u,f as ut,H as v,me as vt,ut as w,ce as wt,pt as x,te as xt,_t as y,u as yt,$e as z};
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t}from"./vendor-markdown-C-P1aR4p.js";import{n}from"./minimal-mode-rLZOjciW.js";import{t as r}from"./react-B9hau9ra.js";import{r as i}from"./utils-D3xTlJyU.js";var a=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]);function o(e){return e.indexes.filter(t=>!t.primary&&!e.uniques.some(e=>e.name===null?t.unique&&a(e.columns,t.columns):e.name===t.name))}var s=e=>`c:${e}`;function c(e){let t=e.trim(),n=!1,r=!1;for(;;){let e=/\s+(unsigned|zerofill)$/i.exec(t);if(!e)break;e[1].toLowerCase()===`unsigned`?n=!0:r=!0,t=t.slice(0,e.index)}return{type:t,unsigned:n,zerofill:r}}function l(e,t){return t===`mysql`?[e.type,e.unsigned?`unsigned`:``,e.zerofill?`zerofill`:``].filter(Boolean).join(` `):e.type}function u(e,t){let n=new Map(e.columns.map(e=>[e.name,s(e.name)])),r=e=>n.get(e)??s(e);return{schema:e.schema,name:e.name,columns:e.columns.map(e=>{let n=t===`mysql`?c(e.type):{type:e.type,unsigned:!1,zerofill:!1};return{id:r(e.name),name:e.name,type:n.type,notNull:!e.nullable,autoIncrement:e.autoIncrement,defaultValue:e.defaultValue,computedExpression:e.generated?e.computedExpression:null,comment:e.comment,unsigned:n.unsigned,zerofill:n.zerofill,collation:e.collation??null,computedStored:e.computedStored??!1,onUpdate:e.onUpdate??null,identity:e.identity??null,sqliteAutoincrement:e.sqliteAutoincrement??!1}}),primaryKey:e.primaryKey?{id:`pk`,name:e.primaryKey.name,columns:e.primaryKey.columns.map(r)}:null,indexes:o(e).map(e=>({id:`ix:${e.name}`,name:e.name,columns:e.keys.map(e=>{let t=e.column!==null&&n.has(e.column),i={columnId:t?r(e.column):null,expression:t?null:e.expression??e.column,descending:e.descending};return e.nulls&&(i.nulls=e.nulls),e.length!==void 0&&(i.length=e.length),e.opclass&&(i.opclass=e.opclass),i}),unique:e.unique,method:e.method&&e.method!==`btree`?e.method:null,where:e.where})),uniques:e.uniques.map((e,t)=>({id:e.name===null?`uq#${t}`:`uq:${e.name}`,name:e.name,columns:e.columns.map(r)})),foreignKeys:e.foreignKeys.map((e,t)=>({id:e.name===null?`fk#${t}`:`fk:${e.name}`,name:e.name,columns:e.columns.map(r),refSchema:e.refSchema,refTable:e.refTable,refColumns:[...e.refColumns],onUpdate:e.onUpdate,onDelete:e.onDelete})),checks:e.checks.map(e=>({...e})),comment:e.comment,engine:e.engine??null,withoutRowid:e.withoutRowid??!1,strict:e.strict??!1}}function ee(e,t=`n`){let n=new Set([...e.columns.map(e=>e.id),...e.indexes.map(e=>e.id),...e.uniques.map(e=>e.id),...e.foreignKeys.map(e=>e.id),...e.primaryKey?[e.primaryKey.id]:[]]);for(let e=n.size+1;;e++){let r=`${t}:${e}`;if(!n.has(r))return r}}function d(e,t=``){return{id:e,name:t,type:`int`,notNull:!1,autoIncrement:!1,defaultValue:null,computedExpression:null,comment:null,unsigned:!1,zerofill:!1,collation:null,computedStored:!1,onUpdate:null,identity:null,sqliteAutoincrement:!1}}function te(e){let t={...d(`n:1`,`id`),notNull:!0,autoIncrement:!0};return{schema:e,name:`new_table`,columns:[t],primaryKey:{id:`n:2`,name:null,columns:[t.id]},indexes:[],uniques:[],foreignKeys:[],checks:[],comment:null,engine:null,withoutRowid:!1,strict:!1}}function f(e,t){return e.columns.find(e=>e.id===t)}function ne(e,t){return f(e,t)?.name??``}function re(e,t){return e.primaryKey?.columns.includes(t)??!1}function p(e,t){return t.refTable===e.name&&(t.refSchema??null)===(e.schema??null)}function ie(e,t,n){let r=e.primaryKey;if(n)return r?.columns.includes(t)?e:{...e,primaryKey:r?{...r,columns:[...r.columns,t]}:{id:ee(e),name:null,columns:[t]}};if(!r?.columns.includes(t))return e;let i=r.columns.filter(e=>e!==t);return{...e,primaryKey:i.length>0?{...r,columns:i}:null}}function ae(e,t,n){let r=f(e,t.id),i={...e,columns:r?e.columns.map(e=>e.id===t.id?t:e):[...e.columns,t]};return r&&r.name!==t.name&&(i={...i,foreignKeys:i.foreignKeys.map(n=>p(e,n)?{...n,refColumns:n.refColumns.map(e=>e===r.name?t.name:e)}:n)}),n===void 0?i:ie(i,t.id,n)}function oe(e,t){let n=new Set(t),r=new Set(e.columns.filter(e=>n.has(e.id)).map(e=>e.name)),i=e.primaryKey?.columns.filter(e=>!n.has(e))??[];return{...e,columns:e.columns.filter(e=>!n.has(e.id)),primaryKey:e.primaryKey&&i.length>0?{...e.primaryKey,columns:i}:null,indexes:e.indexes.map(e=>({...e,columns:e.columns.filter(e=>e.columnId===null||!n.has(e.columnId))})).filter(e=>e.columns.length>0),uniques:e.uniques.map(e=>({...e,columns:e.columns.filter(e=>!n.has(e))})).filter(e=>e.columns.length>0),foreignKeys:e.foreignKeys.map(t=>{let i=p(e,t),a=t.columns.map((e,a)=>!n.has(e)&&!(i&&r.has(t.refColumns[a]??``)));return{...t,columns:t.columns.filter((e,t)=>a[t]),refColumns:t.refColumns.filter((e,t)=>a[t])}}).filter(e=>e.columns.length>0)}}function se(e,t,n){let r=e[t],i=r.some(e=>e.id===n.id);return{...e,[t]:i?r.map(e=>e.id===n.id?n:e):[...r,n]}}function ce(e,t,n){return t===`primaryKey`?e.primaryKey?.id===n?{...e,primaryKey:null}:e:{...e,[t]:e[t].filter(e=>e.id!==n)}}function le(e){return{schema:e.schema??null,name:e.name,columns:e.columns.map(e=>[e.id,e.name,e.type,!!e.notNull,!!e.autoIncrement,e.defaultValue??null,e.computedExpression??null,e.comment??null,!!e.unsigned,!!e.zerofill,e.collation??null,!!e.computedStored,e.onUpdate??null,e.identity??null,!!e.sqliteAutoincrement]),primaryKey:e.primaryKey?[e.primaryKey.id,e.primaryKey.name??null,[...e.primaryKey.columns]]:null,indexes:e.indexes.map(e=>[e.id,e.name,e.columns.map(e=>[e.columnId??null,e.expression??null,!!e.descending,e.nulls??null,e.length??null,e.opclass??null]),!!e.unique,e.method??null,e.where??null]),uniques:e.uniques.map(e=>[e.id,e.name??null,[...e.columns]]),foreignKeys:e.foreignKeys.map(e=>[e.id,e.name??null,[...e.columns],e.refSchema??null,e.refTable,[...e.refColumns],e.onUpdate??null,e.onDelete??null]),checks:e.checks.map(e=>[e.name??null,e.expression]),comment:e.comment??null,engine:e.engine??null,withoutRowid:!!e.withoutRowid,strict:!!e.strict}}function ue(e,t){return JSON.stringify(le(e))===JSON.stringify(le(t))}function m(e,t){return t===`postgres`?e:e.toLowerCase()}function de(e,t,n,r){let i=n.trim();return i?[...e.indexes.map(e=>[e.id,e.name]),...e.uniques.map(e=>[e.id,e.name]),...e.foreignKeys.map(e=>[e.id,e.name]),...e.primaryKey&&r===`postgres`?[[e.primaryKey.id,e.primaryKey.name]]:[]].some(([e,n])=>e!==t&&!!n?.trim()&&m(n.trim(),r)===m(i,r)):!1}var fe=/^(tiny|small|medium|big)?int(eger)?\b|^int[248]\b|^(small|big)?serial\b/i;function pe(e,t,n){let r=[],i=t.name.trim();return i?e.columns.some(e=>e.id!==t.id&&m(e.name,n)===m(i,n))&&r.push(`There is already a column named ${i}`):r.push(`Column name is required`),t.type.trim()||r.push(`Data type is required`),t.autoIncrement&&!fe.test(t.type.trim())&&r.push(`An autoincrement column needs an integer type`),t.autoIncrement&&t.computedExpression&&r.push(`A computed column cannot be autoincrement`),r}function me(e,t,n){let r=[],i=t.filter(e=>e!==null),a=n===`primaryKey`?`A primary key`:n===`index`?`An index`:`A unique constraint`;return t.length===0&&r.push(`${a} needs at least one column`),i.some(t=>!f(e,t))&&r.push(`Choose a column for every row`),new Set(i).size!==i.length&&r.push(`A column is listed twice`),r}function he(e,t){let n=[];return t.refTable||n.push(`Choose the referenced table`),t.columns.length===0&&n.push(`A foreign key needs at least one column`),(t.columns.length!==t.refColumns.length||t.columns.some(t=>!f(e,t))||t.refColumns.some(e=>!e))&&n.push(`Choose a base column and a referenced column for every row`),n}function ge(e,t,n){return e===`PK`?`PK_${t}`:`${e}_${t}_${n.join(`_`)}`}var h=`tableEdit`,g=e=>Array.isArray(e);function _e(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.name==`string`&&g(t.columns)&&g(t.indexes)&&g(t.uniques)&&g(t.foreignKeys)&&g(t.checks)}function ve(e){let t=e?.[h];if(typeof t!=`object`||!t)return null;let{base:n,current:r,isNew:i}=t;return!_e(n)||!_e(r)?null:i===!0?{base:n,current:r,isNew:!0}:{base:n,current:r}}function ye(e){let t=ve(e);return t!==null&&!ue(t.base,t.current)}function be(e,t,n,r){let i=e??(t?{base:u(t,n),current:u(t,n)}:null);if(!i)return null;let a=r(i.current);return!i.isNew&&ue(i.base,a)?null:{...i,current:a}}function xe(e,t){let{[h]:n,...r}=e??{};return t?{...r,[h]:t}:r}function Se(e){return e?.isNew?{...e,current:e.base}:null}function Ce(e,t,n){return{newTableId:n,tableNumber:t,schemaName:e.schema??``,[h]:{base:e,current:e,isNew:!0}}}function we(e){let t=0;for(let n of e){let e=n.type===`db-structure`?n.metadata?.tableNumber:void 0;typeof e==`number`&&e>t&&(t=e)}return t+1}var _=`file`,Te=new Set([`table`,`view`,`matview`,`function`,`procedure`,`trigger`,`sequence`]),Ee=new Set([`table`,`view`,`matview`]);function v(e){let t=typeof e==`string`&&/^\d+$/.test(e)?Number(e):e;return typeof t==`number`&&Number.isInteger(t)&&t>0?t:null}function y(e){let t=e?.dbFile;if(t&&typeof t==`object`){let{path:e,projectName:n}=t;return typeof e!=`string`||!e?null:{kind:`file`,path:e,...typeof n==`string`&&n?{projectName:n}:{}}}let n=v(e?.connectionId);if(n===null)return null;let r=e?.database;return{kind:`connection`,connectionId:n,...typeof r==`string`&&r?{database:r}:{}}}function b(e){return e.kind===`file`?{dbFile:{path:e.path,...e.projectName?{projectName:e.projectName}:{}}}:{connectionId:e.connectionId,...e.database?{database:e.database}:{}}}function De(e,t=``){let n=`/api/db/connections/${e.kind===`file`?_:e.connectionId}${t}`,r=e.kind===`file`?[[`path`,e.path],...e.projectName?[[`project`,e.projectName]]:[]]:e.database===void 0?[]:[[`database`,e.database]];return r.length===0?n:`${n}${n.includes(`?`)?`&`:`?`}${r.map(([e,t])=>`${e}=${encodeURIComponent(t)}`).join(`&`)}`}function x(e){return e.slice(Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`))+1)||e}function S(e,t){let n=e?.kind===`file`?x(e.path):t??`Database`;return e?.kind===`connection`&&e.database?`${n}/${e.database}`:n}function Oe(e,t,n){return`${S(e,t)} · ${n}`}var C=e=>encodeURIComponent(typeof e==`string`?e:``);function w(e){return e?e.kind===`file`?`file:${C(e.projectName)}:${C(e.path)}`:`${e.connectionId}:${C(e.database)}`:`default:`}function T(e,t){if(e===`db-query`)return`db-query:${C(t?.queryId)||i()}`;if(e===`db-structure`&&typeof t?.newTableId==`string`&&t.newTableId)return`db-structure:new:${C(t.newTableId)}`;let n=w(y(t)),r=C(t?.schemaName);if(e===`db-sql`)return`db-sql:${n}:${r}:${typeof t?.objectKind==`string`&&Ee.has(t.objectKind)?`table`:C(t?.objectKind)}:${C(t?.objectName)}:${C(t?.objectArgs)}:${C(t?.objectTable)}`;let a=e===`database`&&typeof t?.instance==`string`&&t.instance?`:${C(t.instance)}`:``;return`${e}:${n}:${r}:${C(t?.tableName)}${a}`}function ke(e){try{return decodeURIComponent(e)}catch{return null}}function Ae(e,t){if(e===`db-query`)return null;let n=t.split(`:`).map(ke);if(n.some(e=>e===null))return null;let[r=``,...i]=n,a,o;if(r===_){let[e=``,t=``,...n]=i;if(!t)return null;a={kind:`file`,path:t,...e?{projectName:e}:{}},o=n}else{let e=v(r);if(e===null)return null;let[t=``,...n]=i;a={kind:`connection`,connectionId:e,...t?{database:t}:{}},o=n}if(e===`db-sql`){let[e=``,t=``,n=``,r=``,i=``]=o;if(!Te.has(t)||!n)return null;let s=t===`function`||t===`procedure`;return{...b(a),schemaName:e,objectKind:t,objectName:n,...s?{objectArgs:r}:{},...i?{objectTable:i}:{}}}let[s=``,c=``,l=``]=o;return c?{...b(a),schemaName:s,tableName:c,...e===`database`&&l?{instance:l}:{}}:null}function je(e,t,n={}){return{queryId:i(),queryNumber:t,currentSql:e,openedSql:e,...n.run?{runOnOpen:!0}:{}}}function Me(e){return typeof e?.currentSql==`string`?e.currentSql!==(typeof e.openedSql==`string`?e.openedSql:``):!1}function Ne(e,t){return e===`db-query`?Me(t):e===`db-structure`?ye(t):!1}function Pe(e){let t=0;for(let n of e){let e=n.type===`db-query`?n.metadata?.queryNumber:void 0;typeof e==`number`&&e>t&&(t=e)}return t+1}function E(e){let t=v(e.connectionId),n={};for(let t of[`connectionName`,`dbType`,`connectionColor`,`database`,`dbFile`])e[t]!==void 0&&(n[t]=e[t]);return{...n,...t===null?{}:{connectionId:t}}}function D(e){let t=typeof e.currentSql==`string`?e.currentSql:typeof e.initialSql==`string`?e.initialSql:``;return{type:`db-query`,metadata:{...E(e),queryId:typeof e.queryId==`string`&&e.queryId?e.queryId:i(),...typeof e.queryNumber==`number`?{queryNumber:e.queryNumber}:{},currentSql:t,openedSql:t}}}function Fe(e){let t=e.metadata??{},n=e.id.includes(`@`)?e.id.slice(e.id.indexOf(`@`)):``,r=typeof t.tableName==`string`&&t.tableName!==``,i;if(e.type===`database`)if(!r)i=D(t);else{let n=v(t.connectionId);if(n===null||n===t.connectionId)return e;i={type:`database`,metadata:{...t,connectionId:n}}}else if(e.type===`postgres`||e.type===`sqlite`){if(v(t.connectionId)===null)return e.type===`sqlite`&&typeof t.filePath==`string`&&t.filePath?e:null;let n=t.dbType??e.type;i=r?{type:`database`,metadata:{...E(t),dbType:n,schemaName:typeof t.schemaName==`string`?t.schemaName:``,tableName:t.tableName}}:{type:`db-query`,metadata:{...D(t).metadata,dbType:n}}}else return e;return{...e,id:`${T(i.type,i.metadata)}${n}`,type:i.type,metadata:i.metadata}}var O=`__dock__`,Ie=new Set([`terminal`,`system-monitor`,`problems`]),Le=new Set([`system-monitor`,`settings`,`problems`,`logs`]),Re=new Set([`design`]),k=`__win__:`;function A(e){return`${k}${e}`}function j(e){return e.startsWith(k)}function M(e){return j(e)&&e.slice(8)||null}function ze(e){return{id:A(e),tabs:[],activeTabId:null,tabHistory:[]}}function N(){return{id:O,tabs:[],activeTabId:null,tabHistory:[]}}function Be(){return`panel-${i()}`}function Ve(e=[],t=null){return{id:Be(),tabs:e,activeTabId:t,tabHistory:t?[t]:[]}}function He(e){return e?1:3}function Ue(e,t){return e.map(e=>e.filter(e=>e!==t)).filter(e=>e.length>0)}function We(e,t,r=!1){return r&&(e=e.filter(e=>n(e.type))),!t||t===`__global__`?e:e.filter(e=>!e.projectId||e.projectId===t)}function Ge(e,t){for(let n=0;n<e.length;n++){let r=e[n].indexOf(t);if(r!==-1)return{row:n,col:r}}return null}function Ke(e){let t=0;for(let n of Object.values(e))for(let e of n.tabs){let n=e.id.match(/^editor:untitled-(\d+)$/);n&&(t=Math.max(t,Number(n[1])))}return t+1}function P(e,t){switch(e){case`editor`:return t?.viewerKey?`editor:viewer:${t.viewerKey}`:t?.isUntitled?`editor:untitled-${t.untitledNumber??1}`:`editor:${t?.filePath??`untitled`}`;case`chat`:return`chat:${t?.providerId??`default`}/${t?.sessionId??i()}`;case`terminal`:return`terminal:${t?.terminalIndex??1}`;case`database`:case`db-structure`:case`db-sql`:case`db-query`:return T(e,t);case`db-impexp`:return`db-impexp:${typeof t?.impexpId==`string`&&t.impexpId?t.impexpId:i()}`;case`db-connection`:return`db-connection:${t?.connectionId??`new-${i()}`}`;case`sqlite`:return`sqlite:${t?.filePath??`default`}`;case`extension`:return`extension:${String(t?.viewType??`unknown`).replace(/\.view$/,``)}`;case`git-diff`:return`git-diff:${t?.filePath??`unknown`}`;case`branch-review`:return`branch-review:${t?.projectName??`unknown`}`;case`session-review`:return`session-review:${t?.projectName??`unknown`}:${t?.sessionId??`unknown`}`;case`git-review`:return`git-review:${t?.projectName??`unknown`}`;case`conflict-editor`:return`conflict-editor:${t?.filePath??`unknown`}`;case`settings`:return`settings`;case`problems`:return`problems`;case`system-monitor`:return`system-monitor`;case`logs`:return`logs`;case`group`:return`group:${t?.groupId??`unknown`}`;case`design`:return`design:${t?.designSlug??`unknown`}`;case`web-preview`:return`web-preview:${t?.url??`unknown`}`;default:return`${e}:${i()}`}}var qe=new Set([`ports`,`tunnels`]);function Je(e){if(!e.tabs.some(e=>qe.has(e.type)))return e;let t=new Set(e.tabs.filter(e=>qe.has(e.type)).map(e=>e.id)),n=e.tabs.filter(e=>!t.has(e.id)),r=e.tabHistory.filter(e=>!t.has(e)),i=e.activeTabId&&!t.has(e.activeTabId)?e.activeTabId:r[r.length-1]??n[n.length-1]?.id??null;return{...e,tabs:n,tabHistory:r,activeTabId:i}}function F(e){let t={};for(let[n,r]of Object.entries(e.panels))t[n]=Je(r);let n=e.dockPanel?Je(e.dockPanel):e.dockPanel;return{...e,panels:t,dockPanel:n}}function Ye(e){let t=new Map,n=[];for(let r of e.tabs){let e=Fe(r);e!==r&&t.set(r.id,e?.id??null),e&&!n.some(t=>t.id===e.id)&&n.push(e)}if(t.size===0)return e;let r=new Set(n.map(e=>e.id)),i=e=>t.has(e)?t.get(e)??null:e,a=e.tabHistory.map(i).filter(e=>e!==null&&r.has(e)),o=e.activeTabId?i(e.activeTabId):null,s=o&&r.has(o)?o:a[a.length-1]??n[n.length-1]?.id??null;return{...e,tabs:n,tabHistory:a,activeTabId:s}}function Xe(e){let t={};for(let[n,r]of Object.entries(e.panels))t[n]=Ye(r);return{...e,panels:t}}function Ze(e){let t={...e,panels:{...e.panels}};for(let[e,n]of Object.entries(t.panels)){let r=n.tabs.map(e=>{if(e.id.startsWith(`tab-`)){let t=P(e.type,e.metadata);return{...e,id:t}}if(e.type===`database`){let t=e.id.indexOf(`@`),n=P(e.type,e.metadata);if((t<0?e.id:e.id.slice(0,t))!==n)return{...e,id:t<0?n:`${n}${e.id.slice(t)}`}}return e}),i=new Map;n.tabs.forEach((e,t)=>{e.id!==r[t].id&&i.set(e.id,r[t].id)});let a=i.get(n.activeTabId??``)??n.activeTabId,o=n.tabHistory.map(e=>i.get(e)??e);t.panels[e]={...n,tabs:r,activeTabId:a,tabHistory:o}}return t}var I=`ppm-panels-`,Qe=`ppm-tabs-`;function L(e){return`${I}${e}`}function $e(e,t){try{let n={...t,updatedAt:new Date().toISOString()};localStorage.setItem(L(e),JSON.stringify(n)),e!==`__global__`&&rt(e,t)}catch{}}function et(e){try{let t=localStorage.getItem(L(e));if(t)return tt(Ze(Xe(F(JSON.parse(t)))))}catch{}let t=ot(e);return t?tt(Xe(F(t))):null}function tt(e){let t=e.dock??{visible:!1,height:30},n;if(!e.dockPanel)n=N();else{let t=e.dockPanel.tabs.filter(e=>Ie.has(e.type)),r=new Set(t.map(e=>e.id)),i=e.dockPanel.tabHistory.filter(e=>r.has(e)),a=e.dockPanel.activeTabId&&r.has(e.dockPanel.activeTabId)?e.dockPanel.activeTabId:i[i.length-1]??t[t.length-1]?.id??null;n={...e.dockPanel,tabs:t,tabHistory:i,activeTabId:a}}return{...e,dock:t,dockPanel:n}}async function nt(e){if(e===`__global__`)return null;try{let t={},n=localStorage.getItem(`ppm-auth-token`);n&&(t.Authorization=`Bearer ${n}`);let r=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{headers:t});if(!r.ok)return null;let i=await r.json();return!i.ok||!i.data?null:{...i.data.layout,updatedAt:i.data.updatedAt}}catch{return null}}var R=new Map;function rt(e,t){let n=R.get(e);n&&clearTimeout(n),R.set(e,setTimeout(async()=>{R.delete(e);try{let n={"Content-Type":`application/json`},r=localStorage.getItem(`ppm-auth-token`);r&&(n.Authorization=`Bearer ${r}`);let i=await fetch(`/api/project/${encodeURIComponent(e)}/workspace`,{method:`PUT`,headers:n,body:JSON.stringify({layout:t})});if(i.ok){let t=await i.json();if(t.data?.updatedAt){let n=`${I}${e}`,r=localStorage.getItem(n);if(r){let e=JSON.parse(r);e.updatedAt=t.data.updatedAt,localStorage.setItem(n,JSON.stringify(e))}}}}catch{}},1500))}function it(e,t){if(!e&&!t)return null;if(!e)return t;if(!t)return e;let n=new Date(e.updatedAt).getTime();return new Date(t.updatedAt).getTime()>=n?t:e}async function at(e){if(e===`__global__`)return!1;let t=await nt(e);if(!t)return!1;let n=`${I}${e}`,r=null;try{let e=localStorage.getItem(n);r=e?JSON.parse(e):null}catch{}if(it(r,t)!==t)return!1;try{let e={...F(t),updatedAt:t.updatedAt};return localStorage.setItem(n,JSON.stringify(e)),!0}catch{return!1}}function ot(e){try{let t=localStorage.getItem(`${Qe}${e}`);if(!t)return null;let n=JSON.parse(t);if(!n.tabs?.length)return null;let r=Ve(n.tabs,n.activeTabId),i={panels:{[r.id]:r},grid:[[r.id]],focusedPanelId:r.id};return $e(e,i),localStorage.removeItem(`${Qe}${e}`),i}catch{return null}}var st=[`n`,`s`,`e`,`w`,`ne`,`nw`,`se`,`sw`],z={w:360,h:240},ct={w:880,h:560},B=48,lt=780,V=(e,t,n)=>Math.min(n,Math.max(t,e));function ut(e){return 30+V(Math.trunc(e),0,8)}function H(e,t){let n=Math.max(z.w,Math.min(e.w,Math.max(t.w,z.w))),r=Math.max(z.h,Math.min(e.h,Math.max(t.h,z.h))),i=V(e.x,48-n,Math.max(48-n,t.w-48)),a=V(e.y,0,Math.max(0,t.h-48));return{x:Math.round(i),y:Math.round(a),w:Math.round(n),h:Math.round(r)}}function dt(e,t,n,r,i=z){let{x:a,y:o,w:s,h:c}=e;if(t.includes(`e`))s=Math.max(i.w,e.w+n);else if(t.includes(`w`)){let t=e.x+e.w;s=Math.max(i.w,e.w-n),a=t-s}if(t.includes(`s`))c=Math.max(i.h,e.h+r);else if(t.includes(`n`)){let t=e.y+e.h;c=Math.max(i.h,e.h-r),o=t-c}return{x:a,y:o,w:s,h:c}}function ft(e,t,n=ct){let r=Math.min(n.w,Math.max(z.w,t.w-B*2)),i=Math.min(n.h,Math.max(z.h,t.h-B*2)),a=e.length%8;return H({x:B+a*24,y:B+a*24,w:r,h:i},t)}function pt(e,t){let n=Math.min(t.h-B*2,lt),r=Math.max(z.w,Math.round(n*9/16)),i=e.length%8;return H({x:t.w-B-r-i*24,y:B+i*24,w:r,h:n},t)}var mt=.55;function ht(e){let t=Math.min(e.w,Math.max(z.w,Math.round(e.w*mt)));return{x:e.w-t,y:0,w:t,h:e.h}}function gt(e,t,n){return e.x+e.w>Math.max(t.x+t.w,n.w)+40}function _t(e,t,n){return e===`maximized`?{x:0,y:0,w:n.w,h:n.h}:e===`snapped`?ht(n):t}function vt(e,t,n,r){return H({...e,x:e.x+t,y:e.y+n},r)}var yt=[`explorer`,`agent-session`,`system-monitor`,`tab-host`,`remote-desktop`,`settings`,`logs`,`release-notes`],U=`ppm-windows`,bt=yt.filter(e=>e!==`agent-session`),xt=[`normal`,`maximized`,`snapped`,`minimized`],St=[`normal`,`maximized`,`snapped`];function Ct(e){if(!e||typeof e!=`object`)return!1;let t=e;return[`x`,`y`,`w`,`h`].every(e=>typeof t[e]==`number`&&Number.isFinite(t[e]))}function wt(e){if(e===void 0)return!0;if(!e||typeof e!=`object`||Array.isArray(e))return!1;try{return JSON.stringify(e),!0}catch{return!1}}function Tt(e){return wt(e.payload)?{id:e.id,kind:e.kind,rect:e.rect,opened:e.opened,state:e.state,...e.restoreTo?{restoreTo:e.restoreTo}:{},payload:e.payload}:null}function Et(e){try{let t=[...e].sort((e,t)=>e.rank-t.rank).map(Tt).filter(e=>e!==null);t.length===0?localStorage.removeItem(U):localStorage.setItem(U,JSON.stringify(t))}catch{}}function Dt(e){let t=null;try{t=localStorage.getItem(U)}catch{return[]}if(!t)return[];let n;try{n=JSON.parse(t)}catch{return[]}if(!Array.isArray(n))return[];let r=[];for(let t of n){if(!t||typeof t!=`object`)continue;let n=t;if(typeof n.id!=`string`||!bt.includes(n.kind)||!Ct(n.rect)||!wt(n.payload))continue;let i=xt.includes(n.state)?n.state:`normal`,a=St.includes(n.restoreTo)?n.restoreTo:void 0;r.push({id:n.id,kind:n.kind,rect:H(n.rect,e),...typeof n.opened==`number`&&Number.isFinite(n.opened)?{opened:n.opened}:{},state:i,...i===`minimized`&&a?{restoreTo:a}:{},payload:n.payload})}return r}var Ot=e(t(),1),W=new Map,G=new Map,K=new Set;function kt(e,t){t?W.set(e,t):W.delete(e);for(let e of K)e()}function At(e,t=2e3){let n=J(e);return n?Promise.resolve(n):new Promise(n=>{let r=e=>{K.delete(i),clearTimeout(a),n(e)},i=()=>{let t=J(e);t&&r(t)},a=setTimeout(()=>r(null),t);K.add(i)})}var q=new Set;function jt(e){q.add(e)}function Mt(e){return q.has(e)}function Nt(e){q.delete(e)}function J(e){return W.get(e)??null}function Pt(e,t){if((G.get(e)??null)!==t){t?G.set(e,t):G.delete(e);for(let e of K)e()}}function Ft(e){return e?G.get(e)??null:null}function It(e){return K.add(e),()=>{K.delete(e)}}function Lt(e){return(0,Ot.useSyncExternalStore)(It,(0,Ot.useCallback)(()=>Ft(e),[e]))}function Rt(e){return Lt(M(e))?.pipWindow.document.body}var zt={w:1280,h:800},Y=e=>Object.values(e).sort((e,t)=>e.rank-t.rank);function X(e){let t={};return e.forEach((e,n)=>{t[e.id]=e.rank===n?e:{...e,rank:n}}),t}function Z(e){Et(Object.values(e))}function Bt(e){return e.reduce((e,t)=>Math.max(e,t.opened+1),0)}function Q(e,t){if(e.state===t)return e;if(t===`minimized`)return{...e,state:t,restoreTo:e.state};let{restoreTo:n,...r}=e;return{...r,state:t}}function Vt(){return`win-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}var Ht=r((e,t)=>({windows:{},bounds:zt,restored:!1,snapPreviewId:null,open:(n,r,i)=>{let{windows:a,bounds:o}=t(),s=Y(a);if(s.length>=8){let e=s[0];return t().restore(e.id),e.id}let c=Vt(),l=i?H(i,o):ft(s.map(e=>e.rect),o),u=X([...s,{id:c,kind:n,rect:l,rank:s.length,opened:Bt(s),state:`normal`,payload:r}]);return e({windows:u}),Z(u),c},close:n=>{let{windows:r}=t();if(!r[n])return;let i=X(Y(r).filter(e=>e.id!==n));e({windows:i}),Z(i)},focus:n=>{let{windows:r}=t(),i=r[n];if(!i)return;let a=i.state===`minimized`?Q(i,i.restoreTo??`normal`):i,o=Y(r);if(a===i&&o[o.length-1]?.id===n)return;let s=X([...o.filter(e=>e.id!==n),a]);e({windows:s}),Z(s)},move:(n,r)=>{let{windows:i,bounds:a}=t(),o=i[n];if(!o)return;let s=H({...o.rect,...r},a),c={...i,[n]:{...o,rect:s}};e({windows:c}),Z(c)},resize:(n,r)=>{let{windows:i,bounds:a}=t(),o=i[n];if(!o)return;let s={...i,[n]:{...o,rect:H(r,a)}};e({windows:s}),Z(s)},setState:(n,r)=>{let{windows:i}=t(),a=i[n];if(!a||a.state===r)return;let o={...i,[n]:Q(a,r)};e({windows:o}),Z(o)},restore:e=>t().focus(e),activateFromDock:e=>{let{windows:n}=t();n[e]&&($(n)===e?t().setState(e,`minimized`):t().restore(e))},minimizeAll:()=>{let{windows:n}=t(),r={};for(let e of Object.values(n))r[e.id]=Q(e,`minimized`);e({windows:r}),Z(r)},setSnapPreview:n=>{t().snapPreviewId!==n&&e({snapPreviewId:n})},setPayload:(n,r)=>{let{windows:i}=t(),a=i[n];if(!a)return;let o={...a.payload,...r};if(Object.entries(o).every(([e,t])=>a.payload?.[e]===t)&&Object.keys(o).length===Object.keys(a.payload??{}).length)return;let s={...i,[n]:{...a,payload:o}};e({windows:s}),Z(s)},setBounds:n=>{let r=t();if(r.bounds.w===n.w&&r.bounds.h===n.h)return;let i={};for(let e of Object.values(r.windows)){let t=H(e.rect,n);i[e.id]=t.x===e.rect.x&&t.y===e.rect.y&&t.w===e.rect.w&&t.h===e.rect.h?e:{...e,rect:t}}e({bounds:n,windows:i})},restoreAll:n=>{t().restored||e({bounds:n,windows:X(Dt(n).slice(0,8).map((e,t)=>({id:e.id,kind:e.kind,rect:e.rect,rank:t,opened:e.opened??t,state:e.state,restoreTo:e.restoreTo,payload:e.payload}))),restored:!0})}}));function Ut(e){return Y(e)}function $(e){let t=Y(e).filter(e=>e.state!==`minimized`&&!Mt(e.id));return t[t.length-1]?.id??null}function Wt(e){return Object.values(e).sort((e,t)=>e.opened-t.opened)}export{y as $,ze as A,Ye as B,gt as C,oe as Ct,Le as D,Re as E,se as Et,at as F,Ae as G,M as H,j as I,Pe as J,x as K,et as L,Ge as M,Ke as N,N as O,Ue as P,S as Q,He as R,ht as S,o as St,O as T,ae as Tt,A as U,We as V,Oe as W,b as X,je as Y,w as Z,ft as _,de as _t,Nt as a,ve as at,vt as b,ee as bt,kt as c,ge as ct,Lt as d,ne as dt,De as et,At as f,pe as ft,dt as g,p as gt,st as h,re as ht,Ut as i,we as it,P as j,Ve as k,Pt as l,d as lt,J as m,he as mt,Ht as n,Ce as nt,Mt as o,Se as ot,Ft as p,l as pt,Ne as q,Wt as r,be as rt,jt as s,xe as st,$ as t,ye as tt,Rt as u,f as ut,H as v,me as vt,ut as w,ce as wt,pt as x,te as xt,_t as y,u as yt,$e as z};
|
|
Binary file
|
|
Binary file
|
package/dist/web/index.html
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
11
11
|
<link href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500;600;700&family=Geist:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
|
12
|
-
<script type="module" crossorigin src="/assets/index-
|
|
12
|
+
<script type="module" crossorigin src="/assets/index-Vd9Xr54k.js"></script>
|
|
13
13
|
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-C5c2KzVm.js">
|
|
14
14
|
<link rel="modulepreload" crossorigin href="/assets/preload-helper-Bf_JiD2A.js">
|
|
15
15
|
<link rel="modulepreload" crossorigin href="/assets/vendor-markdown-C-P1aR4p.js">
|
|
@@ -22,23 +22,23 @@
|
|
|
22
22
|
<link rel="modulepreload" crossorigin href="/assets/api-client-BnYFnEfK.js">
|
|
23
23
|
<link rel="modulepreload" crossorigin href="/assets/react-B9hau9ra.js">
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/minimal-mode-rLZOjciW.js">
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/window-store-
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/settings-store-
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/window-store-D6EgLSfT.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/settings-store-CMpVMq3Y.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/project-framework-store-nuePqBBa.js">
|
|
28
28
|
<link rel="modulepreload" crossorigin href="/assets/project-store-Bs-kiU8m.js">
|
|
29
29
|
<link rel="modulepreload" crossorigin href="/assets/session-list-sync-triggers-D9i1FxWd.js">
|
|
30
|
-
<link rel="modulepreload" crossorigin href="/assets/panel-store-
|
|
30
|
+
<link rel="modulepreload" crossorigin href="/assets/panel-store-H7e9XHZF.js">
|
|
31
31
|
<link rel="modulepreload" crossorigin href="/assets/use-is-mobile-CL2I7hLf.js">
|
|
32
|
-
<link rel="modulepreload" crossorigin href="/assets/db-sidebar-reveal-
|
|
32
|
+
<link rel="modulepreload" crossorigin href="/assets/db-sidebar-reveal-CGqWBYay.js">
|
|
33
33
|
<link rel="modulepreload" crossorigin href="/assets/db-types-cHkNH-mN.js">
|
|
34
|
-
<link rel="modulepreload" crossorigin href="/assets/explorer-model-
|
|
35
|
-
<link rel="modulepreload" crossorigin href="/assets/tab-store-
|
|
36
|
-
<link rel="modulepreload" crossorigin href="/assets/open-db-tabs-
|
|
34
|
+
<link rel="modulepreload" crossorigin href="/assets/explorer-model-f5q-50DN.js">
|
|
35
|
+
<link rel="modulepreload" crossorigin href="/assets/tab-store-NUmgzMPf.js">
|
|
36
|
+
<link rel="modulepreload" crossorigin href="/assets/open-db-tabs-DBgV2hbA.js">
|
|
37
37
|
<link rel="modulepreload" crossorigin href="/assets/use-db-driver-installed-BL1XW_bI.js">
|
|
38
38
|
<link rel="modulepreload" crossorigin href="/assets/impexp-state-Cx2Az9iZ.js">
|
|
39
39
|
<link rel="modulepreload" crossorigin href="/assets/file-store-Bn0vbkCx.js">
|
|
40
40
|
<link rel="modulepreload" crossorigin href="/assets/sql-identifiers-7jHNEORb.js">
|
|
41
|
-
<link rel="modulepreload" crossorigin href="/assets/db-explorer-store-
|
|
41
|
+
<link rel="modulepreload" crossorigin href="/assets/db-explorer-store-DJNNIfN5.js">
|
|
42
42
|
<link rel="modulepreload" crossorigin href="/assets/portal-container-context-Gepuvxdg.js">
|
|
43
43
|
<link rel="modulepreload" crossorigin href="/assets/icons-C1wDt09O.js">
|
|
44
44
|
<link rel="modulepreload" crossorigin href="/assets/dialog-DnE192fh.js">
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
<link rel="modulepreload" crossorigin href="/assets/fs-api-BVIVh_De.js">
|
|
47
47
|
<link rel="modulepreload" crossorigin href="/assets/format-file-meta-BOAh9mam.js">
|
|
48
48
|
<link rel="modulepreload" crossorigin href="/assets/settings-categories-BY9n3BRr.js">
|
|
49
|
-
<link rel="modulepreload" crossorigin href="/assets/open-settings-
|
|
49
|
+
<link rel="modulepreload" crossorigin href="/assets/open-settings-DWbF5YsE.js">
|
|
50
50
|
<link rel="modulepreload" crossorigin href="/assets/context-menu-DhKbkI1X.js">
|
|
51
51
|
<link rel="modulepreload" crossorigin href="/assets/use-visual-viewport-B_GFo6k2.js">
|
|
52
52
|
<link rel="modulepreload" crossorigin href="/assets/mobile-bottom-sheet-M9pZptfh.js">
|
|
@@ -60,11 +60,11 @@
|
|
|
60
60
|
<link rel="modulepreload" crossorigin href="/assets/file-icons-CB0RsVdl.js">
|
|
61
61
|
<link rel="modulepreload" crossorigin href="/assets/format-date-SZ6qU2sD.js">
|
|
62
62
|
<link rel="modulepreload" crossorigin href="/assets/git-repo-store-CESIqItW.js">
|
|
63
|
-
<link rel="modulepreload" crossorigin href="/assets/patch-tab-metadata-
|
|
63
|
+
<link rel="modulepreload" crossorigin href="/assets/patch-tab-metadata-DqvfqUI4.js">
|
|
64
64
|
<link rel="modulepreload" crossorigin href="/assets/ws-auth-k7DWnL9T.js">
|
|
65
65
|
<link rel="modulepreload" crossorigin href="/assets/apply-theme-Kiqxd1NZ.js">
|
|
66
66
|
<link rel="modulepreload" crossorigin href="/assets/resolve-theme-DGQXDIbF.js">
|
|
67
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
67
|
+
<link rel="stylesheet" crossorigin href="/assets/index-Cb3Z6wNy.css">
|
|
68
68
|
<link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
|
|
69
69
|
<body class="text-text font-sans antialiased" style="background: var(--bg)">
|
|
70
70
|
<!-- FOUC guard: apply the persisted theme mode before first paint.
|
package/dist/web/index.html.br
CHANGED
|
Binary file
|
package/dist/web/index.html.gz
CHANGED
|
Binary file
|
package/dist/web/sw.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}var B=`-precache-`,V=async(e,t=B)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function H(){self.addEventListener(`activate`,(e=>{let t=a.getPrecacheName();e.waitUntil(V(t).then(e=>{}))}))}function U(e){O().precache(e)}function W(e,t){U(e),z(t)}var G=class extends w{async _handle(e,n){let r=await n.cacheMatch(e),i;if(!r)try{r=await n.fetchAndCachePut(e)}catch(e){e instanceof Error&&(i=e)}if(!r)throw new t(`no-response`,{url:e.url,error:i});return r}},K=`ppm:open-from-notification`;function q(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`?e:``;return{title:n(t.title)||`PPM`,body:n(t.body),url:n(t.url)||`/`,tag:n(t.tag),project:n(t.project),sessionId:n(t.sessionId),providerId:n(t.providerId)}}async function J(e,t,n){let r=new URL(e.url,n);if(r.origin===n){let n=(await t.matchAll({type:`window`,includeUncontrolled:!0})).filter(e=>!Y(e.url)),i=n.find(e=>e.focused)??n.find(e=>e.visibilityState===`visible`)??n[0];if(i){let t={type:K,url:r.href,project:e.project,sessionId:e.sessionId,providerId:e.providerId};i.postMessage(t),await i.focus().catch(()=>void 0);return}}await t.openWindow(r.href)}function Y(e){try{return new URL(e).pathname.startsWith(`/s/`)}catch{return!1}}W([{"revision":"1858d0d8a56ab172ef250b738937cf94","url":"index.html"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":null,"url":"assets/index-Cx9ZRibz.js"},{"revision":null,"url":"assets/index-2_Pz5MiI.css"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]),H();var X=e=>(e.headers.get(`content-type`)??``).startsWith(`text/html`);F(({url:e})=>e.pathname.startsWith(`/assets/`),new G({cacheName:`ppm-assets`,plugins:[{cacheWillUpdate:async({response:e})=>X(e)?null:e,cachedResponseWillBeUsed:async({cachedResponse:e})=>e&&X(e)?null:e}]})),self.skipWaiting(),self.addEventListener(`activate`,()=>{self.clients.claim()}),self.addEventListener(`push`,e=>{let t=null;try{t=e.data?.json()}catch{t={body:e.data?.text()}}let n=q(t),r={body:n.body,icon:`/icon-192.svg`,data:n,...n.tag&&{tag:n.tag,renotify:!0}};e.waitUntil(self.registration.showNotification(n.title,r))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=q(e.notification.data);e.waitUntil(J(t,self.clients,self.location.origin))});
|
|
1
|
+
try{self[`workbox:core:7.3.0`]&&_()}catch{}var e=(e,...t)=>{let n=e;return t.length>0&&(n+=` :: ${JSON.stringify(t)}`),n},t=class extends Error{constructor(t,n){let r=e(t,n);super(r),this.name=t,this.details=n}},n={googleAnalytics:`googleAnalytics`,precache:`precache-v2`,prefix:`workbox`,runtime:`runtime`,suffix:typeof registration<`u`?registration.scope:``},r=e=>[n.prefix,e,n.suffix].filter(e=>e&&e.length>0).join(`-`),i=e=>{for(let t of Object.keys(n))e(t)},a={updateDetails:e=>{i(t=>{typeof e[t]==`string`&&(n[t]=e[t])})},getGoogleAnalyticsName:e=>e||r(n.googleAnalytics),getPrecacheName:e=>e||r(n.precache),getPrefix:()=>n.prefix,getRuntimeName:e=>e||r(n.runtime),getSuffix:()=>n.suffix};function o(e,t){let n=t();return e.waitUntil(n),n}try{self[`workbox:precaching:7.3.0`]&&_()}catch{}var s=`__WB_REVISION__`;function c(e){if(!e)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(typeof e==`string`){let t=new URL(e,location.href);return{cacheKey:t.href,url:t.href}}let{revision:n,url:r}=e;if(!r)throw new t(`add-to-cache-list-unexpected-type`,{entry:e});if(!n){let e=new URL(r,location.href);return{cacheKey:e.href,url:e.href}}let i=new URL(r,location.href),a=new URL(r,location.href);return i.searchParams.set(s,n),{cacheKey:i.href,url:a.href}}var l=class{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:e,state:t})=>{t&&(t.originalRequest=e)},this.cachedResponseWillBeUsed=async({event:e,state:t,cachedResponse:n})=>{if(e.type===`install`&&t&&t.originalRequest&&t.originalRequest instanceof Request){let e=t.originalRequest.url;n?this.notUpdatedURLs.push(e):this.updatedURLs.push(e)}return n}}},u=class{constructor({precacheController:e}){this.cacheKeyWillBeUsed=async({request:e,params:t})=>{let n=t?.cacheKey||this._precacheController.getCacheKeyForURL(e.url);return n?new Request(n,{headers:e.headers}):e},this._precacheController=e}},d;function f(){if(d===void 0){let e=new Response(``);if(`body`in e)try{new Response(e.body),d=!0}catch{d=!1}d=!1}return d}async function p(e,n){let r=null;if(e.url&&(r=new URL(e.url).origin),r!==self.location.origin)throw new t(`cross-origin-copy-response`,{origin:r});let i=e.clone(),a={headers:new Headers(i.headers),status:i.status,statusText:i.statusText},o=n?n(a):a,s=f()?i.body:await i.blob();return new Response(s,o)}var m=e=>new URL(String(e),location.href).href.replace(RegExp(`^${location.origin}`),``);function h(e,t){let n=new URL(e);for(let e of t)n.searchParams.delete(e);return n.href}async function g(e,t,n,r){let i=h(t.url,n);if(t.url===i)return e.match(t,r);let a=Object.assign(Object.assign({},r),{ignoreSearch:!0}),o=await e.keys(t,a);for(let t of o)if(i===h(t.url,n))return e.match(t,r)}var v=class{constructor(){this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}},y=new Set;async function b(){for(let e of y)await e()}function x(e){return new Promise(t=>setTimeout(t,e))}try{self[`workbox:strategies:7.3.0`]&&_()}catch{}function S(e){return typeof e==`string`?new Request(e):e}var C=class{constructor(e,t){this._cacheKeys={},Object.assign(this,t),this.event=t.event,this._strategy=e,this._handlerDeferred=new v,this._extendLifetimePromises=[],this._plugins=[...e.plugins],this._pluginStateMap=new Map;for(let e of this._plugins)this._pluginStateMap.set(e,{});this.event.waitUntil(this._handlerDeferred.promise)}async fetch(e){let{event:n}=this,r=S(e);if(r.mode===`navigate`&&n instanceof FetchEvent&&n.preloadResponse){let e=await n.preloadResponse;if(e)return e}let i=this.hasCallback(`fetchDidFail`)?r.clone():null;try{for(let e of this.iterateCallbacks(`requestWillFetch`))r=await e({request:r.clone(),event:n})}catch(e){if(e instanceof Error)throw new t(`plugin-error-request-will-fetch`,{thrownErrorMessage:e.message})}let a=r.clone();try{let e;e=await fetch(r,r.mode===`navigate`?void 0:this._strategy.fetchOptions);for(let t of this.iterateCallbacks(`fetchDidSucceed`))e=await t({event:n,request:a,response:e});return e}catch(e){throw i&&await this.runCallbacks(`fetchDidFail`,{error:e,event:n,originalRequest:i.clone(),request:a.clone()}),e}}async fetchAndCachePut(e){let t=await this.fetch(e),n=t.clone();return this.waitUntil(this.cachePut(e,n)),t}async cacheMatch(e){let t=S(e),n,{cacheName:r,matchOptions:i}=this._strategy,a=await this.getCacheKey(t,`read`),o=Object.assign(Object.assign({},i),{cacheName:r});n=await caches.match(a,o);for(let e of this.iterateCallbacks(`cachedResponseWillBeUsed`))n=await e({cacheName:r,matchOptions:i,cachedResponse:n,request:a,event:this.event})||void 0;return n}async cachePut(e,n){let r=S(e);await x(0);let i=await this.getCacheKey(r,`write`);if(!n)throw new t(`cache-put-with-no-response`,{url:m(i.url)});let a=await this._ensureResponseSafeToCache(n);if(!a)return!1;let{cacheName:o,matchOptions:s}=this._strategy,c=await self.caches.open(o),l=this.hasCallback(`cacheDidUpdate`),u=l?await g(c,i.clone(),[`__WB_REVISION__`],s):null;try{await c.put(i,l?a.clone():a)}catch(e){if(e instanceof Error)throw e.name===`QuotaExceededError`&&await b(),e}for(let e of this.iterateCallbacks(`cacheDidUpdate`))await e({cacheName:o,oldResponse:u,newResponse:a.clone(),request:i,event:this.event});return!0}async getCacheKey(e,t){let n=`${e.url} | ${t}`;if(!this._cacheKeys[n]){let r=e;for(let e of this.iterateCallbacks(`cacheKeyWillBeUsed`))r=S(await e({mode:t,request:r,event:this.event,params:this.params}));this._cacheKeys[n]=r}return this._cacheKeys[n]}hasCallback(e){for(let t of this._strategy.plugins)if(e in t)return!0;return!1}async runCallbacks(e,t){for(let n of this.iterateCallbacks(e))await n(t)}*iterateCallbacks(e){for(let t of this._strategy.plugins)if(typeof t[e]==`function`){let n=this._pluginStateMap.get(t);yield r=>{let i=Object.assign(Object.assign({},r),{state:n});return t[e](i)}}}waitUntil(e){return this._extendLifetimePromises.push(e),e}async doneWaiting(){for(;this._extendLifetimePromises.length;){let e=this._extendLifetimePromises.splice(0),t=(await Promise.allSettled(e)).find(e=>e.status===`rejected`);if(t)throw t.reason}}destroy(){this._handlerDeferred.resolve(null)}async _ensureResponseSafeToCache(e){let t=e,n=!1;for(let e of this.iterateCallbacks(`cacheWillUpdate`))if(t=await e({request:this.request,response:t,event:this.event})||void 0,n=!0,!t)break;return n||t&&t.status!==200&&(t=void 0),t}},w=class{constructor(e={}){this.cacheName=a.getRuntimeName(e.cacheName),this.plugins=e.plugins||[],this.fetchOptions=e.fetchOptions,this.matchOptions=e.matchOptions}handle(e){let[t]=this.handleAll(e);return t}handleAll(e){e instanceof FetchEvent&&(e={event:e,request:e.request});let t=e.event,n=typeof e.request==`string`?new Request(e.request):e.request,r=`params`in e?e.params:void 0,i=new C(this,{event:t,request:n,params:r}),a=this._getResponse(i,n,t);return[a,this._awaitComplete(a,i,n,t)]}async _getResponse(e,n,r){await e.runCallbacks(`handlerWillStart`,{event:r,request:n});let i;try{if(i=await this._handle(n,e),!i||i.type===`error`)throw new t(`no-response`,{url:n.url})}catch(t){if(t instanceof Error){for(let a of e.iterateCallbacks(`handlerDidError`))if(i=await a({error:t,event:r,request:n}),i)break}if(!i)throw t}for(let t of e.iterateCallbacks(`handlerWillRespond`))i=await t({event:r,request:n,response:i});return i}async _awaitComplete(e,t,n,r){let i,a;try{i=await e}catch{}try{await t.runCallbacks(`handlerDidRespond`,{event:r,request:n,response:i}),await t.doneWaiting()}catch(e){e instanceof Error&&(a=e)}if(await t.runCallbacks(`handlerDidComplete`,{event:r,request:n,response:i,error:a}),t.destroy(),a)throw a}},T=class e extends w{constructor(t={}){t.cacheName=a.getPrecacheName(t.cacheName),super(t),this._fallbackToNetwork=t.fallbackToNetwork!==!1,this.plugins.push(e.copyRedirectedCacheableResponsesPlugin)}async _handle(e,t){return await t.cacheMatch(e)||(t.event&&t.event.type===`install`?await this._handleInstall(e,t):await this._handleFetch(e,t))}async _handleFetch(e,n){let r,i=n.params||{};if(this._fallbackToNetwork){let t=i.integrity,a=e.integrity,o=!a||a===t;r=await n.fetch(new Request(e,{integrity:e.mode===`no-cors`?void 0:a||t})),t&&o&&e.mode!==`no-cors`&&(this._useDefaultCacheabilityPluginIfNeeded(),await n.cachePut(e,r.clone()))}else throw new t(`missing-precache-entry`,{cacheName:this.cacheName,url:e.url});return r}async _handleInstall(e,n){this._useDefaultCacheabilityPluginIfNeeded();let r=await n.fetch(e);if(!await n.cachePut(e,r.clone()))throw new t(`bad-precaching-response`,{url:e.url,status:r.status});return r}_useDefaultCacheabilityPluginIfNeeded(){let t=null,n=0;for(let[r,i]of this.plugins.entries())i!==e.copyRedirectedCacheableResponsesPlugin&&(i===e.defaultPrecacheCacheabilityPlugin&&(t=r),i.cacheWillUpdate&&n++);n===0?this.plugins.push(e.defaultPrecacheCacheabilityPlugin):n>1&&t!==null&&this.plugins.splice(t,1)}};T.defaultPrecacheCacheabilityPlugin={async cacheWillUpdate({response:e}){return!e||e.status>=400?null:e}},T.copyRedirectedCacheableResponsesPlugin={async cacheWillUpdate({response:e}){return e.redirected?await p(e):e}};var E=class{constructor({cacheName:e,plugins:t=[],fallbackToNetwork:n=!0}={}){this._urlsToCacheKeys=new Map,this._urlsToCacheModes=new Map,this._cacheKeysToIntegrities=new Map,this._strategy=new T({cacheName:a.getPrecacheName(e),plugins:[...t,new u({precacheController:this})],fallbackToNetwork:n}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this._strategy}precache(e){this.addToCacheList(e),this._installAndActiveListenersAdded||=(self.addEventListener(`install`,this.install),self.addEventListener(`activate`,this.activate),!0)}addToCacheList(e){let n=[];for(let r of e){typeof r==`string`?n.push(r):r&&r.revision===void 0&&n.push(r.url);let{cacheKey:e,url:i}=c(r),a=typeof r!=`string`&&r.revision?`reload`:`default`;if(this._urlsToCacheKeys.has(i)&&this._urlsToCacheKeys.get(i)!==e)throw new t(`add-to-cache-list-conflicting-entries`,{firstEntry:this._urlsToCacheKeys.get(i),secondEntry:e});if(typeof r!=`string`&&r.integrity){if(this._cacheKeysToIntegrities.has(e)&&this._cacheKeysToIntegrities.get(e)!==r.integrity)throw new t(`add-to-cache-list-conflicting-integrities`,{url:i});this._cacheKeysToIntegrities.set(e,r.integrity)}if(this._urlsToCacheKeys.set(i,e),this._urlsToCacheModes.set(i,a),n.length>0){let e=`Workbox is precaching URLs without revision info: ${n.join(`, `)}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(e)}}}install(e){return o(e,async()=>{let t=new l;this.strategy.plugins.push(t);for(let[t,n]of this._urlsToCacheKeys){let r=this._cacheKeysToIntegrities.get(n),i=this._urlsToCacheModes.get(t),a=new Request(t,{integrity:r,cache:i,credentials:`same-origin`});await Promise.all(this.strategy.handleAll({params:{cacheKey:n},request:a,event:e}))}let{updatedURLs:n,notUpdatedURLs:r}=t;return{updatedURLs:n,notUpdatedURLs:r}})}activate(e){return o(e,async()=>{let e=await self.caches.open(this.strategy.cacheName),t=await e.keys(),n=new Set(this._urlsToCacheKeys.values()),r=[];for(let i of t)n.has(i.url)||(await e.delete(i),r.push(i.url));return{deletedURLs:r}})}getURLsToCacheKeys(){return this._urlsToCacheKeys}getCachedURLs(){return[...this._urlsToCacheKeys.keys()]}getCacheKeyForURL(e){let t=new URL(e,location.href);return this._urlsToCacheKeys.get(t.href)}getIntegrityForCacheKey(e){return this._cacheKeysToIntegrities.get(e)}async matchPrecache(e){let t=e instanceof Request?e.url:e,n=this.getCacheKeyForURL(t);if(n)return(await self.caches.open(this.strategy.cacheName)).match(n)}createHandlerBoundToURL(e){let n=this.getCacheKeyForURL(e);if(!n)throw new t(`non-precached-url`,{url:e});return t=>(t.request=new Request(e),t.params=Object.assign({cacheKey:n},t.params),this.strategy.handle(t))}},D,O=()=>(D||=new E,D);try{self[`workbox:routing:7.3.0`]&&_()}catch{}var k=e=>e&&typeof e==`object`?e:{handle:e},A=class{constructor(e,t,n=`GET`){this.handler=k(t),this.match=e,this.method=n}setCatchHandler(e){this.catchHandler=k(e)}},j=class extends A{constructor(e,t,n){super(({url:t})=>{let n=e.exec(t.href);if(n&&!(t.origin!==location.origin&&n.index!==0))return n.slice(1)},t,n)}},M=class{constructor(){this._routes=new Map,this._defaultHandlerMap=new Map}get routes(){return this._routes}addFetchListener(){self.addEventListener(`fetch`,(e=>{let{request:t}=e,n=this.handleRequest({request:t,event:e});n&&e.respondWith(n)}))}addCacheListener(){self.addEventListener(`message`,(e=>{if(e.data&&e.data.type===`CACHE_URLS`){let{payload:t}=e.data,n=Promise.all(t.urlsToCache.map(t=>{typeof t==`string`&&(t=[t]);let n=new Request(...t);return this.handleRequest({request:n,event:e})}));e.waitUntil(n),e.ports&&e.ports[0]&&n.then(()=>e.ports[0].postMessage(!0))}}))}handleRequest({request:e,event:t}){let n=new URL(e.url,location.href);if(!n.protocol.startsWith(`http`))return;let r=n.origin===location.origin,{params:i,route:a}=this.findMatchingRoute({event:t,request:e,sameOrigin:r,url:n}),o=a&&a.handler,s=e.method;if(!o&&this._defaultHandlerMap.has(s)&&(o=this._defaultHandlerMap.get(s)),!o)return;let c;try{c=o.handle({url:n,request:e,event:t,params:i})}catch(e){c=Promise.reject(e)}let l=a&&a.catchHandler;return c instanceof Promise&&(this._catchHandler||l)&&(c=c.catch(async r=>{if(l)try{return await l.handle({url:n,request:e,event:t,params:i})}catch(e){e instanceof Error&&(r=e)}if(this._catchHandler)return this._catchHandler.handle({url:n,request:e,event:t});throw r})),c}findMatchingRoute({url:e,sameOrigin:t,request:n,event:r}){let i=this._routes.get(n.method)||[];for(let a of i){let i,o=a.match({url:e,sameOrigin:t,request:n,event:r});if(o)return i=o,(Array.isArray(i)&&i.length===0||o.constructor===Object&&Object.keys(o).length===0||typeof o==`boolean`)&&(i=void 0),{route:a,params:i}}return{}}setDefaultHandler(e,t=`GET`){this._defaultHandlerMap.set(t,k(e))}setCatchHandler(e){this._catchHandler=k(e)}registerRoute(e){this._routes.has(e.method)||this._routes.set(e.method,[]),this._routes.get(e.method).push(e)}unregisterRoute(e){if(!this._routes.has(e.method))throw new t(`unregister-route-but-not-found-with-method`,{method:e.method});let n=this._routes.get(e.method).indexOf(e);if(n>-1)this._routes.get(e.method).splice(n,1);else throw new t(`unregister-route-route-not-registered`)}},N,P=()=>(N||(N=new M,N.addFetchListener(),N.addCacheListener()),N);function F(e,n,r){let i;if(typeof e==`string`){let t=new URL(e,location.href);i=new A(({url:e})=>e.href===t.href,n,r)}else if(e instanceof RegExp)i=new j(e,n,r);else if(typeof e==`function`)i=new A(e,n,r);else if(e instanceof A)i=e;else throw new t(`unsupported-route-type`,{moduleName:`workbox-routing`,funcName:`registerRoute`,paramName:`capture`});return P().registerRoute(i),i}function I(e,t=[]){for(let n of[...e.searchParams.keys()])t.some(e=>e.test(n))&&e.searchParams.delete(n);return e}function*L(e,{ignoreURLParametersMatching:t=[/^utm_/,/^fbclid$/],directoryIndex:n=`index.html`,cleanURLs:r=!0,urlManipulation:i}={}){let a=new URL(e,location.href);a.hash=``,yield a.href;let o=I(a,t);if(yield o.href,n&&o.pathname.endsWith(`/`)){let e=new URL(o.href);e.pathname+=n,yield e.href}if(r){let e=new URL(o.href);e.pathname+=`.html`,yield e.href}if(i){let e=i({url:a});for(let t of e)yield t.href}}var R=class extends A{constructor(e,t){super(({request:n})=>{let r=e.getURLsToCacheKeys();for(let i of L(n.url,t)){let t=r.get(i);if(t)return{cacheKey:t,integrity:e.getIntegrityForCacheKey(t)}}},e.strategy)}};function z(e){F(new R(O(),e))}var B=`-precache-`,V=async(e,t=B)=>{let n=(await self.caches.keys()).filter(n=>n.includes(t)&&n.includes(self.registration.scope)&&n!==e);return await Promise.all(n.map(e=>self.caches.delete(e))),n};function H(){self.addEventListener(`activate`,(e=>{let t=a.getPrecacheName();e.waitUntil(V(t).then(e=>{}))}))}function U(e){O().precache(e)}function W(e,t){U(e),z(t)}var G=class extends w{async _handle(e,n){let r=await n.cacheMatch(e),i;if(!r)try{r=await n.fetchAndCachePut(e)}catch(e){e instanceof Error&&(i=e)}if(!r)throw new t(`no-response`,{url:e.url,error:i});return r}},K=`ppm:open-from-notification`;function q(e){let t=e&&typeof e==`object`?e:{},n=e=>typeof e==`string`?e:``;return{title:n(t.title)||`PPM`,body:n(t.body),url:n(t.url)||`/`,tag:n(t.tag),project:n(t.project),sessionId:n(t.sessionId),providerId:n(t.providerId)}}async function J(e,t,n){let r=new URL(e.url,n);if(r.origin===n){let n=(await t.matchAll({type:`window`,includeUncontrolled:!0})).filter(e=>!Y(e.url)),i=n.find(e=>e.focused)??n.find(e=>e.visibilityState===`visible`)??n[0];if(i){let t={type:K,url:r.href,project:e.project,sessionId:e.sessionId,providerId:e.providerId};i.postMessage(t),await i.focus().catch(()=>void 0);return}}await t.openWindow(r.href)}function Y(e){try{return new URL(e).pathname.startsWith(`/s/`)}catch{return!1}}W([{"revision":"0db3bb20ce7b7f9ab62d4929d46e83af","url":"index.html"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":null,"url":"assets/index-Vd9Xr54k.js"},{"revision":null,"url":"assets/index-Cb3Z6wNy.css"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-192.svg"},{"revision":"a0fb34fc84eb148d51812cd62669f20d","url":"icon-512.svg"},{"revision":"26dccd02a2ef7522892015154f5e3680","url":"manifest.webmanifest"}]),H();var X=e=>(e.headers.get(`content-type`)??``).startsWith(`text/html`);F(({url:e})=>e.pathname.startsWith(`/assets/`),new G({cacheName:`ppm-assets`,plugins:[{cacheWillUpdate:async({response:e})=>X(e)?null:e,cachedResponseWillBeUsed:async({cachedResponse:e})=>e&&X(e)?null:e}]})),self.skipWaiting(),self.addEventListener(`activate`,()=>{self.clients.claim()}),self.addEventListener(`push`,e=>{let t=null;try{t=e.data?.json()}catch{t={body:e.data?.text()}}let n=q(t),r={body:n.body,icon:`/icon-192.svg`,data:n,...n.tag&&{tag:n.tag,renotify:!0}};e.waitUntil(self.registration.showNotification(n.title,r))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=q(e.notification.data);e.waitUntil(J(t,self.clients,self.location.origin))});
|
package/dist/web/sw.js.br
CHANGED
|
Binary file
|
package/dist/web/sw.js.gz
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
import type { ElementType } from "react";
|
|
12
12
|
import { useShallow } from "zustand/react/shallow";
|
|
13
|
-
import { Activity, FolderOpen, Monitor, ScrollText, Settings, Users } from "@/lib/icons";
|
|
13
|
+
import { Activity, FolderOpen, History, Monitor, ScrollText, Settings, Users } from "@/lib/icons";
|
|
14
14
|
import { getTabTypeIcon } from "@/lib/tab-type-icons";
|
|
15
15
|
import { tabSessionId } from "@/lib/tab-session-id";
|
|
16
16
|
import { usePanelStore } from "@/stores/panel-store";
|
|
@@ -49,6 +49,7 @@ const KIND_META: Record<Exclude<WindowKind, "tab-host">, { icon: ElementType; to
|
|
|
49
49
|
"remote-desktop": { icon: Monitor, tone: tone("info"), label: "Remote Desktop" },
|
|
50
50
|
settings: { icon: Settings, tone: tone("text-3"), label: "Settings" },
|
|
51
51
|
logs: { icon: ScrollText, tone: tone("text-2"), label: "Logs" },
|
|
52
|
+
"release-notes": { icon: History, tone: tone("accent"), label: "Release notes" },
|
|
52
53
|
};
|
|
53
54
|
|
|
54
55
|
const TAB_LABELS: Partial<Record<TabType, string>> = {
|
|
@@ -25,6 +25,7 @@ export const WINDOW_CONTENT: Record<WindowKind, PreloadableComponent<WindowConte
|
|
|
25
25
|
"remote-desktop": lazyWithPreload(() => import("@/components/remote-desktop/remote-desktop-window-content")),
|
|
26
26
|
settings: lazyWithPreload(() => import("@/components/settings/settings-window-content")),
|
|
27
27
|
logs: lazyWithPreload(() => import("@/components/logs/logs-window-content")),
|
|
28
|
+
"release-notes": lazyWithPreload(() => import("@/components/release-notes/release-notes-window-content")),
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
/** Titlebar text for a window. Falls back to the kind's generic name. */
|
|
@@ -38,6 +39,7 @@ export function windowTitle(kind: WindowKind, payload?: Record<string, unknown>)
|
|
|
38
39
|
if (kind === "remote-desktop") return "Remote Desktop";
|
|
39
40
|
if (kind === "settings") return "Settings";
|
|
40
41
|
if (kind === "logs") return "Logs";
|
|
42
|
+
if (kind === "release-notes") return "Release notes";
|
|
41
43
|
// A detached tab carries its title in the payload; the generic name only shows for a
|
|
42
44
|
// window whose tab has not been resolved yet (restore before the layout is loaded).
|
|
43
45
|
if (kind === "tab-host") return "Tab";
|
|
@@ -7,7 +7,7 @@ import type { Rect } from "./window-geometry";
|
|
|
7
7
|
* Single source of truth: the persistence layer filters this list instead of repeating it,
|
|
8
8
|
* so a new kind can never be silently dropped on reload.
|
|
9
9
|
*/
|
|
10
|
-
export const WINDOW_KINDS = ["explorer", "agent-session", "system-monitor", "tab-host", "remote-desktop", "settings", "logs"] as const;
|
|
10
|
+
export const WINDOW_KINDS = ["explorer", "agent-session", "system-monitor", "tab-host", "remote-desktop", "settings", "logs", "release-notes"] as const;
|
|
11
11
|
|
|
12
12
|
export type WindowKind = (typeof WINDOW_KINDS)[number];
|
|
13
13
|
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { useState, useEffect, useCallback, useMemo } from "react";
|
|
2
2
|
import { api } from "@/lib/api-client";
|
|
3
3
|
import { toast } from "sonner";
|
|
4
|
-
import { Loader2, ArrowUpCircle, RefreshCw, Download,
|
|
4
|
+
import { Loader2, ArrowUpCircle, RefreshCw, Download, History, Maximize2 } from "@/lib/icons";
|
|
5
5
|
import { useSettingsStore } from "@/stores/settings-store";
|
|
6
6
|
import { fetchRecentChangelog, newestSectionVersion, compareSemver, type ChangelogSection } from "@/lib/changelog";
|
|
7
7
|
import { cn } from "@/lib/utils";
|
|
8
|
+
import { useIsMobile } from "@/hooks/use-is-mobile";
|
|
9
|
+
import { BottomSheet } from "@/components/ui/mobile-bottom-sheet";
|
|
10
|
+
import { ReleaseNotesEntry } from "@/components/release-notes/release-notes-entry";
|
|
11
|
+
import { ReleaseNotesView } from "@/components/release-notes/release-notes-view";
|
|
12
|
+
import { openReleaseNotesWindow } from "@/components/release-notes/open-release-notes";
|
|
8
13
|
|
|
9
14
|
const POLL_INTERVAL_MS = 60_000;
|
|
10
15
|
const DISMISS_KEY_PREFIX = "ppm-upgrade-dismissed-";
|
|
11
|
-
const RELEASES_URL = "https://github.com/hienlh/ppm/releases";
|
|
12
16
|
|
|
13
17
|
// QA test hook. `?ppm_upgrade_test[=<ver|off>]` forces the update state on dev.
|
|
14
18
|
// The flag is latched into sessionStorage at module load — BEFORE useUrlSync
|
|
@@ -112,6 +116,9 @@ export function UpgradeButton({ align = "right" }: { align?: "left" | "right" })
|
|
|
112
116
|
const [dismissed, setDismissed] = useState(false);
|
|
113
117
|
const [notes, setNotes] = useState<ChangelogSection[] | null>(null);
|
|
114
118
|
const [notesLoading, setNotesLoading] = useState(false);
|
|
119
|
+
const isMobile = useIsMobile();
|
|
120
|
+
/** The phone's full release notes; a desktop opens them in a window instead. */
|
|
121
|
+
const [notesSheetOpen, setNotesSheetOpen] = useState(false);
|
|
115
122
|
|
|
116
123
|
// `force` asks the server to bypass its registry cache. The background poll
|
|
117
124
|
// stays cached (one request per client per minute must not hit the registry),
|
|
@@ -235,6 +242,13 @@ export function UpgradeButton({ align = "right" }: { align?: "left" | "right" })
|
|
|
235
242
|
}
|
|
236
243
|
}, [effectiveAvailable, enterRestartWait]);
|
|
237
244
|
|
|
245
|
+
// The popover is a glance at 18rem; reading happens in a window (or a sheet on a phone).
|
|
246
|
+
const openFullNotes = useCallback(() => {
|
|
247
|
+
setOpen(false);
|
|
248
|
+
if (isMobile) setNotesSheetOpen(true);
|
|
249
|
+
else openReleaseNotesWindow();
|
|
250
|
+
}, [isMobile]);
|
|
251
|
+
|
|
238
252
|
const handleDismiss = useCallback(() => {
|
|
239
253
|
// Key on the offered version, not just the server-reported one: an update
|
|
240
254
|
// known only from the changelog must be dismissable too.
|
|
@@ -322,7 +336,7 @@ export function UpgradeButton({ align = "right" }: { align?: "left" | "right" })
|
|
|
322
336
|
) : visibleNotes && visibleNotes.length > 0 ? (
|
|
323
337
|
<div className="space-y-2.5">
|
|
324
338
|
{visibleNotes.map((s) => (
|
|
325
|
-
<
|
|
339
|
+
<ReleaseNotesEntry key={s.version} version={s.version} body={s.body} />
|
|
326
340
|
))}
|
|
327
341
|
</div>
|
|
328
342
|
) : (
|
|
@@ -345,14 +359,12 @@ export function UpgradeButton({ align = "right" }: { align?: "left" | "right" })
|
|
|
345
359
|
</button>
|
|
346
360
|
)}
|
|
347
361
|
<div className="flex gap-1.5">
|
|
348
|
-
<
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
rel="noopener noreferrer"
|
|
352
|
-
className="flex-1 flex items-center justify-center gap-1.5 py-2 rounded-lg border border-border bg-panel text-xs font-medium text-text-2 hover:text-text transition-colors"
|
|
362
|
+
<button
|
|
363
|
+
onClick={openFullNotes}
|
|
364
|
+
className="flex-1 flex items-center justify-center gap-1.5 py-2 rounded-lg border border-border bg-panel text-xs font-medium text-text-2 hover:text-text transition-colors max-md:min-h-11"
|
|
353
365
|
>
|
|
354
|
-
<
|
|
355
|
-
</
|
|
366
|
+
<Maximize2 className="size-3" /> Read all release notes
|
|
367
|
+
</button>
|
|
356
368
|
{hasUpdate && (
|
|
357
369
|
<button
|
|
358
370
|
onClick={handleDismiss}
|
|
@@ -366,43 +378,12 @@ export function UpgradeButton({ align = "right" }: { align?: "left" | "right" })
|
|
|
366
378
|
</div>
|
|
367
379
|
</>
|
|
368
380
|
)}
|
|
369
|
-
</div>
|
|
370
|
-
);
|
|
371
|
-
}
|
|
372
381
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
/** Render one CHANGELOG version section: version heading + category headings + bullets. */
|
|
379
|
-
function ChangelogEntry({ version, body }: { version: string; body: string }) {
|
|
380
|
-
const lines = body.split("\n");
|
|
381
|
-
return (
|
|
382
|
-
<div>
|
|
383
|
-
<div className="text-[11px] font-mono font-semibold text-text mb-1">v{version}</div>
|
|
384
|
-
<div className="space-y-1">
|
|
385
|
-
{lines.map((line, i) => {
|
|
386
|
-
const t = line.trim();
|
|
387
|
-
if (!t) return null;
|
|
388
|
-
if (t.startsWith("### ")) {
|
|
389
|
-
return (
|
|
390
|
-
<div key={i} className="text-[10px] font-semibold uppercase tracking-wide text-text-3 pt-1">
|
|
391
|
-
{t.slice(4)}
|
|
392
|
-
</div>
|
|
393
|
-
);
|
|
394
|
-
}
|
|
395
|
-
if (t.startsWith("- ")) {
|
|
396
|
-
return (
|
|
397
|
-
<div key={i} className="flex gap-1.5 text-text-2">
|
|
398
|
-
<span className="text-text-3 shrink-0">•</span>
|
|
399
|
-
<span className="min-w-0 break-words">{stripInline(t.slice(2))}</span>
|
|
400
|
-
</div>
|
|
401
|
-
);
|
|
402
|
-
}
|
|
403
|
-
return <div key={i} className="text-text-2 break-words">{stripInline(t)}</div>;
|
|
404
|
-
})}
|
|
405
|
-
</div>
|
|
382
|
+
{notesSheetOpen && (
|
|
383
|
+
<BottomSheet open onClose={() => setNotesSheetOpen(false)} className="flex h-[min(88dvh,var(--sheet-vh))] flex-col">
|
|
384
|
+
<div className="min-h-0 flex-1"><ReleaseNotesView /></div>
|
|
385
|
+
</BottomSheet>
|
|
386
|
+
)}
|
|
406
387
|
</div>
|
|
407
388
|
);
|
|
408
389
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Opening the release notes as a floating window. There is one set of notes, so a second open
|
|
3
|
+
* focuses the window already there. Desktop only: `WindowLayer` renders nothing below `md`, so
|
|
4
|
+
* a phone shows the same view in a bottom sheet instead (the caller's job — see
|
|
5
|
+
* `UpgradeButton`).
|
|
6
|
+
*/
|
|
7
|
+
import { useWindowStore } from "@/components/floating-window/window-store";
|
|
8
|
+
import { cascadeSpawnRect } from "@/components/floating-window/window-geometry";
|
|
9
|
+
|
|
10
|
+
/** Wide enough for a changelog line to read as prose, tall enough for a few releases. */
|
|
11
|
+
const RELEASE_NOTES_WINDOW_SIZE = { w: 760, h: 720 } as const;
|
|
12
|
+
|
|
13
|
+
export function openReleaseNotesWindow(): void {
|
|
14
|
+
const store = useWindowStore.getState();
|
|
15
|
+
const existing = Object.values(store.windows).find((w) => w.kind === "release-notes");
|
|
16
|
+
if (existing) {
|
|
17
|
+
store.focus(existing.id);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const rect = cascadeSpawnRect(Object.values(store.windows).map((w) => w.rect), store.bounds, RELEASE_NOTES_WINDOW_SIZE);
|
|
21
|
+
store.open("release-notes", undefined, rect);
|
|
22
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One CHANGELOG version section: version heading, category headings, bullets.
|
|
3
|
+
*
|
|
4
|
+
* Two sizes because it is read in two places. The status-bar popover is 18rem wide and shows
|
|
5
|
+
* a glance (`compact`); the release-notes window is where the notes are actually read
|
|
6
|
+
* (`comfortable`), so it gets body-size text and keeps the entries' bold lead-ins and code.
|
|
7
|
+
*/
|
|
8
|
+
import type { ReactNode } from "react";
|
|
9
|
+
import { cn } from "@/lib/utils";
|
|
10
|
+
|
|
11
|
+
/** `**bold**` and `` `code` `` as elements; everything else stays text. No HTML is parsed. */
|
|
12
|
+
function renderInline(text: string): ReactNode[] {
|
|
13
|
+
const parts: ReactNode[] = [];
|
|
14
|
+
const re = /\*\*(.+?)\*\*|`([^`]+)`/g;
|
|
15
|
+
let last = 0;
|
|
16
|
+
let m: RegExpExecArray | null;
|
|
17
|
+
while ((m = re.exec(text))) {
|
|
18
|
+
if (m.index > last) parts.push(text.slice(last, m.index));
|
|
19
|
+
parts.push(m[1] !== undefined
|
|
20
|
+
// A lead-in often holds a command (`**Run `ppm x` first.**`), so its inside is rendered too.
|
|
21
|
+
? <strong key={m.index} className="font-semibold text-text">{renderInline(m[1])}</strong>
|
|
22
|
+
: <code key={m.index} className="rounded bg-surface-elevated px-1 py-px font-mono text-[0.9em] text-text">{m[2]}</code>);
|
|
23
|
+
last = re.lastIndex;
|
|
24
|
+
}
|
|
25
|
+
if (last < text.length) parts.push(text.slice(last));
|
|
26
|
+
return parts;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function ReleaseNotesEntry({ version, date, body, size = "compact", installed = false }: {
|
|
30
|
+
version: string;
|
|
31
|
+
date?: string;
|
|
32
|
+
body: string;
|
|
33
|
+
size?: "compact" | "comfortable";
|
|
34
|
+
/** This is the version running now. */
|
|
35
|
+
installed?: boolean;
|
|
36
|
+
}) {
|
|
37
|
+
const comfy = size === "comfortable";
|
|
38
|
+
return (
|
|
39
|
+
<section>
|
|
40
|
+
<div className={cn("flex items-baseline gap-2", comfy ? "mb-2" : "mb-1")}>
|
|
41
|
+
<span className={cn("font-mono font-semibold text-text", comfy ? "text-base" : "text-[11px]")}>v{version}</span>
|
|
42
|
+
{comfy && date && <span className="text-xs text-text-3">{date}</span>}
|
|
43
|
+
{installed && (
|
|
44
|
+
<span className={cn("rounded-full bg-primary/15 font-medium text-primary", comfy ? "px-2 py-0.5 text-[11px]" : "px-1.5 text-[10px]")}>
|
|
45
|
+
installed
|
|
46
|
+
</span>
|
|
47
|
+
)}
|
|
48
|
+
</div>
|
|
49
|
+
<div className={comfy ? "space-y-2" : "space-y-1"}>
|
|
50
|
+
{body.split("\n").map((line, i) => {
|
|
51
|
+
const t = line.trim();
|
|
52
|
+
if (!t) return null;
|
|
53
|
+
if (t.startsWith("### ")) {
|
|
54
|
+
return (
|
|
55
|
+
<div key={i} className={cn("font-semibold uppercase tracking-wide text-text-3", comfy ? "pt-2 text-[11px]" : "pt-1 text-[10px]")}>
|
|
56
|
+
{t.slice(4)}
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
if (t.startsWith("- ")) {
|
|
61
|
+
return (
|
|
62
|
+
<div key={i} className="flex gap-2 text-text-2">
|
|
63
|
+
<span className="shrink-0 text-text-3">•</span>
|
|
64
|
+
<span className="min-w-0 break-words">{renderInline(t.slice(2))}</span>
|
|
65
|
+
</div>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return <div key={i} className="break-words text-text-2">{renderInline(t)}</div>;
|
|
69
|
+
})}
|
|
70
|
+
</div>
|
|
71
|
+
</section>
|
|
72
|
+
);
|
|
73
|
+
}
|